• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

valkyrjaio / sindri-ts / 30325566677
100%

Build:
DEFAULT BRANCH: 26.x
Ran 28 Jul 2026 03:19AM UTC
Jobs 1
Files 45
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Jul 2026 03:18AM UTC coverage: 100.0%. Remained the same
30325566677

push

github

web-flow
[Sindri] Resolve binding keys declared locally and as module-level constants (#68)

# Description

With #66 and #67 in place the framework's own publishers reach the
generated container cache, but an application's own publishers still did
not. In the starter app, `App/Cli/Provider/ServiceProvider` publishes
two services and neither appeared in `AppContainerData`:

```ts
export class ServiceProvider implements ServiceProviderContract {
    static readonly TestCommandId = 'App.Cli.Command.TestCommand' as const;

    publishers(): Record<string, (container: ContainerContract) => void> {
        return {
            [ServiceProvider.TestCommandId]: ServiceProvider.publishTestCommand,
            [LoggerContractId]: ServiceProvider.publishLogger,
        };
    }
}
```

Both keys are dropped, for two distinct reasons.

**The provider's own constant.** `resolveStaticProperty` located a class
only through the import map. `ServiceProvider` is not imported into
`ServiceProvider.ts` — it is *declared* there — so the lookup returned
an empty path and bailed before reading anything. Declaring a key next
to the publisher that uses it is the natural way to write one, and it
was the one place resolution could not look. The file being read is now
the fallback when a name resolves to no import.

**A module-level constant.** Not every binding key is a class static;
the framework declares `export const LoggerContractId =
'Valkyrja.Log.Logger.LoggerContract' as const;`. A bare identifier key
reached `resolveStaticProperty(name, undefined, …)`, which could only
ever return `undefined` — there was no property to look up, and no path
that read variable declarations at all. Identifiers now resolve through
a `resolveConstant` that reads the declaration.

Both paths share one file-resolution step and one initializer-to-string
step, so the `as const` unwrapping from #67 applies to constants and
statics alike without being written twice. Making the file fallback
explicit also le... (continued)

834 of 834 branches covered (100.0%)

Branch coverage included in aggregate %.

19 of 19 new or added lines in 1 file covered. (100.0%)

1333 of 1333 relevant lines covered (100.0%)

12.77 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30325566677.1 28 Jul 2026 03:19AM UTC 45
100.0
GitHub Action Run
Source Files on build 30325566677
  • Tree
  • List 45
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30325566677
  • 3b6940c1 on github
  • Prev Build on 26.x (#30325084291)
  • Next Build on 26.x (#30330133495)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc