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

valkyrjaio / sindri-ts / 30325566677 / 1
100%
26.x: 100%

Build:
DEFAULT BRANCH: 26.x
Ran 28 Jul 2026 03:19AM UTC
Files 45
Run time 2s
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.1

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 %.

1333 of 1333 relevant lines covered (100.0%)

12.77 hits per line

Source Files on job 30325566677.1
  • 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 Build 30325566677
  • 3b6940c1 on github
  • Prev Job for on 26.x (#30325084291.1)
  • Next Job for on 26.x (#30330133495.1)
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