@codefast/di 0.5.0-canary.6 → 0.5.0-canary.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +13 -4
  3. package/dist/binding.d.ts +36 -19
  4. package/dist/binding.d.ts.map +1 -1
  5. package/dist/binding.js +2 -2
  6. package/dist/binding.js.map +1 -1
  7. package/dist/container/binding-builders.d.ts +35 -0
  8. package/dist/container/binding-builders.d.ts.map +1 -0
  9. package/dist/container/binding-builders.js +247 -0
  10. package/dist/container/binding-builders.js.map +1 -0
  11. package/dist/{container.d.ts → container/container.d.ts} +2 -2
  12. package/dist/container/container.d.ts.map +1 -0
  13. package/dist/container/container.js +641 -0
  14. package/dist/container/container.js.map +1 -0
  15. package/dist/decorators/inject.d.ts +12 -1
  16. package/dist/decorators/inject.d.ts.map +1 -1
  17. package/dist/decorators/inject.js +2 -2
  18. package/dist/decorators/inject.js.map +1 -1
  19. package/dist/decorators/injectable.js +3 -3
  20. package/dist/decorators/injectable.js.map +1 -1
  21. package/dist/index.d.ts +12 -7
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +8 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/introspection/dependency-graph.d.ts.map +1 -0
  26. package/dist/{dependency-graph.js → introspection/dependency-graph.js} +1 -1
  27. package/dist/introspection/dependency-graph.js.map +1 -0
  28. package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.d.ts +1 -1
  29. package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -0
  30. package/dist/introspection/graph-adapters/cytoscape.js.map +1 -0
  31. package/dist/introspection/graph-adapters/dot.d.ts +6 -0
  32. package/dist/introspection/graph-adapters/dot.d.ts.map +1 -0
  33. package/dist/introspection/graph-adapters/dot.js.map +1 -0
  34. package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.d.ts +2 -2
  35. package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -0
  36. package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.js +11 -1
  37. package/dist/introspection/graph-adapters/reactflow.js.map +1 -0
  38. package/dist/{inspector.d.ts → introspection/inspector.d.ts} +3 -8
  39. package/dist/introspection/inspector.d.ts.map +1 -0
  40. package/dist/{inspector.js → introspection/inspector.js} +23 -23
  41. package/dist/introspection/inspector.js.map +1 -0
  42. package/dist/metadata/symbol-metadata-reader.d.ts +1 -1
  43. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
  44. package/dist/metadata/symbol-metadata-reader.js +4 -4
  45. package/dist/metadata/symbol-metadata-reader.js.map +1 -1
  46. package/dist/module.d.ts +9 -2
  47. package/dist/module.d.ts.map +1 -1
  48. package/dist/module.js +9 -2
  49. package/dist/module.js.map +1 -1
  50. package/dist/registry.d.ts +5 -13
  51. package/dist/registry.d.ts.map +1 -1
  52. package/dist/registry.js +102 -61
  53. package/dist/registry.js.map +1 -1
  54. package/dist/resolution/binding-scope.d.ts.map +1 -0
  55. package/dist/resolution/binding-scope.js.map +1 -0
  56. package/dist/resolution/binding-select.d.ts.map +1 -0
  57. package/dist/{binding-select.js → resolution/binding-select.js} +16 -3
  58. package/dist/resolution/binding-select.js.map +1 -0
  59. package/dist/resolution/constraints.d.ts.map +1 -0
  60. package/dist/resolution/constraints.js.map +1 -0
  61. package/dist/{environment.d.ts → resolution/environment.d.ts} +2 -6
  62. package/dist/resolution/environment.d.ts.map +1 -0
  63. package/dist/resolution/environment.js +100 -0
  64. package/dist/resolution/environment.js.map +1 -0
  65. package/dist/resolution/instantiation-plan.d.ts +67 -0
  66. package/dist/resolution/instantiation-plan.d.ts.map +1 -0
  67. package/dist/resolution/instantiation-plan.js +163 -0
  68. package/dist/resolution/instantiation-plan.js.map +1 -0
  69. package/dist/{lifecycle.d.ts → resolution/lifecycle.d.ts} +3 -3
  70. package/dist/resolution/lifecycle.d.ts.map +1 -0
  71. package/dist/{lifecycle.js → resolution/lifecycle.js} +17 -13
  72. package/dist/resolution/lifecycle.js.map +1 -0
  73. package/dist/resolution/resolution-path.d.ts +31 -0
  74. package/dist/resolution/resolution-path.d.ts.map +1 -0
  75. package/dist/resolution/resolution-path.js +53 -0
  76. package/dist/resolution/resolution-path.js.map +1 -0
  77. package/dist/resolution/resolve-options.d.ts.map +1 -0
  78. package/dist/resolution/resolve-options.js.map +1 -0
  79. package/dist/resolution/resolver.d.ts +35 -0
  80. package/dist/resolution/resolver.d.ts.map +1 -0
  81. package/dist/resolution/resolver.js +1320 -0
  82. package/dist/resolution/resolver.js.map +1 -0
  83. package/dist/{scope.d.ts → resolution/scope.d.ts} +10 -3
  84. package/dist/resolution/scope.d.ts.map +1 -0
  85. package/dist/resolution/scope.js +76 -0
  86. package/dist/resolution/scope.js.map +1 -0
  87. package/dist/token.d.ts.map +1 -1
  88. package/dist/token.js +0 -3
  89. package/dist/token.js.map +1 -1
  90. package/package.json +80 -65
  91. package/src/binding.ts +38 -22
  92. package/src/container/binding-builders.ts +397 -0
  93. package/src/container/container.ts +838 -0
  94. package/src/decorators/inject.ts +16 -3
  95. package/src/decorators/injectable.ts +3 -3
  96. package/src/index.ts +14 -7
  97. package/src/{dependency-graph.ts → introspection/dependency-graph.ts} +1 -1
  98. package/src/{graph-adapters → introspection/graph-adapters}/cytoscape.ts +1 -1
  99. package/src/{graph-adapters → introspection/graph-adapters}/dot.ts +1 -1
  100. package/src/{graph-adapters → introspection/graph-adapters}/reactflow.ts +13 -2
  101. package/src/{inspector.ts → introspection/inspector.ts} +26 -21
  102. package/src/metadata/symbol-metadata-reader.ts +4 -4
  103. package/src/module.ts +14 -6
  104. package/src/registry.ts +115 -61
  105. package/src/{binding-select.ts → resolution/binding-select.ts} +16 -3
  106. package/src/{environment.ts → resolution/environment.ts} +35 -35
  107. package/src/resolution/instantiation-plan.ts +240 -0
  108. package/src/{lifecycle.ts → resolution/lifecycle.ts} +20 -13
  109. package/src/resolution/resolution-path.ts +77 -0
  110. package/src/resolution/resolver.ts +1755 -0
  111. package/src/{scope.ts → resolution/scope.ts} +35 -18
  112. package/src/token.ts +0 -3
  113. package/dist/binding-scope.d.ts.map +0 -1
  114. package/dist/binding-scope.js.map +0 -1
  115. package/dist/binding-select.d.ts.map +0 -1
  116. package/dist/binding-select.js.map +0 -1
  117. package/dist/constraints.d.ts.map +0 -1
  118. package/dist/constraints.js.map +0 -1
  119. package/dist/container.d.ts.map +0 -1
  120. package/dist/container.js +0 -853
  121. package/dist/container.js.map +0 -1
  122. package/dist/dependency-graph.d.ts.map +0 -1
  123. package/dist/dependency-graph.js.map +0 -1
  124. package/dist/environment.d.ts.map +0 -1
  125. package/dist/environment.js +0 -100
  126. package/dist/environment.js.map +0 -1
  127. package/dist/graph-adapters/cytoscape.d.ts.map +0 -1
  128. package/dist/graph-adapters/cytoscape.js.map +0 -1
  129. package/dist/graph-adapters/dot.d.ts +0 -6
  130. package/dist/graph-adapters/dot.d.ts.map +0 -1
  131. package/dist/graph-adapters/dot.js.map +0 -1
  132. package/dist/graph-adapters/reactflow.d.ts.map +0 -1
  133. package/dist/graph-adapters/reactflow.js.map +0 -1
  134. package/dist/inspector.d.ts.map +0 -1
  135. package/dist/inspector.js.map +0 -1
  136. package/dist/lifecycle.d.ts.map +0 -1
  137. package/dist/lifecycle.js.map +0 -1
  138. package/dist/resolve-options.d.ts.map +0 -1
  139. package/dist/resolve-options.js.map +0 -1
  140. package/dist/resolver.d.ts +0 -90
  141. package/dist/resolver.d.ts.map +0 -1
  142. package/dist/resolver.js +0 -1208
  143. package/dist/resolver.js.map +0 -1
  144. package/dist/scope.d.ts.map +0 -1
  145. package/dist/scope.js +0 -61
  146. package/dist/scope.js.map +0 -1
  147. package/src/container.ts +0 -1141
  148. package/src/resolver.ts +0 -1626
  149. /package/dist/{dependency-graph.d.ts → introspection/dependency-graph.d.ts} +0 -0
  150. /package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.js +0 -0
  151. /package/dist/{graph-adapters → introspection/graph-adapters}/dot.js +0 -0
  152. /package/dist/{binding-scope.d.ts → resolution/binding-scope.d.ts} +0 -0
  153. /package/dist/{binding-scope.js → resolution/binding-scope.js} +0 -0
  154. /package/dist/{binding-select.d.ts → resolution/binding-select.d.ts} +0 -0
  155. /package/dist/{constraints.d.ts → resolution/constraints.d.ts} +0 -0
  156. /package/dist/{constraints.js → resolution/constraints.js} +0 -0
  157. /package/dist/{resolve-options.d.ts → resolution/resolve-options.d.ts} +0 -0
  158. /package/dist/{resolve-options.js → resolution/resolve-options.js} +0 -0
  159. /package/src/{binding-scope.ts → resolution/binding-scope.ts} +0 -0
  160. /package/src/{constraints.ts → resolution/constraints.ts} +0 -0
  161. /package/src/{resolve-options.ts → resolution/resolve-options.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # @codefast/di
2
2
 
3
+ ## 0.5.0-canary.7
4
+
5
+ ### Minor Changes
6
+
7
+ - [`ad11507`](https://github.com/codefastlabs/codefast/commit/ad115077e23eaed845abd1f093f32d57f2445a36) Thanks [@thevuong](https://github.com/thevuong)! - Reorganize the source tree into subsystem folders — `container/` (container + the extracted fluent binding builders), `resolution/` (resolver, scope, lifecycle, environment, selection/constraints, and the extracted cycle-guard module), and `introspection/` (inspector, dependency graph, and the graph adapters). The root entry keeps exporting everything and now also exports the graph adapters (`toDotGraph`, `toCytoscapeGraph`, `toReactFlowGraph` and their types), so `import { toReactFlowGraph } from "@codefast/di"` is the preferred path.
8
+
9
+ Breaking (0.x minor): the `@codefast/di/graph-adapters/*` subpaths are removed — import the adapters from the root entry or from `@codefast/di/introspection/graph-adapters/*`. Deep subpaths of other moved modules follow the new folders (e.g. `@codefast/di/resolver` → `@codefast/di/resolution/resolver`).
10
+
11
+ - [`6a25788`](https://github.com/codefastlabs/codefast/commit/6a25788320c73074c3ae0bb06cf7a70b7800c953) Thanks [@thevuong](https://github.com/thevuong)! - Resolver performance overhaul — the head-to-head benchmark vs InversifyJS 8 now shows 38/38 comparable scenarios won (median 1.82×, isolated mode), up from 7 losing rows. Four techniques, no public-API changes:
12
+
13
+ - **Chain-versioned lookup memo** — `BindingRegistry` gains a monotonic mutation version; resolvers memoize options-less `token → {binding, owner}` lookups across the parent chain with alias hops folded to the terminal binding. Resolving a root binding from a depth-2 child (or through `toAlias`) is now as fast as resolving it locally.
14
+ - **Compiled resolution plans** — a transient class binding whose dependency subgraph is pure static (class/constant/cached-singleton deps, no activation hooks or `postConstruct`) compiles once into a nested-constructor closure, cycle-checked at compile time. Anything dynamic keeps the runtime cycle guard, so error semantics are unchanged.
15
+ - **Uniform binding hidden class** — `Registry.add` rebuilds every binding with one fixed field superset so mixed binding kinds no longer turn the resolver's hot property reads megamorphic (~30% throughput loss in processes exercising several kinds).
16
+ - **Leaner async transient path** — cleanup runs as a FIFO side listener on the factory promise instead of a derived-promise chain (one less promise and one less microtask hop per level), and activated transient dynamic bindings get a dedicated lane that fetches container hooks once. Behavior note: an unawaited _failing_ `resolveAsync` no longer surfaces as an `unhandledRejection`; await (or `.catch`) the returned promise.
17
+
18
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - `container.validate()` now reports a captive dependency when a singleton depends on a **transient or scoped `toDynamic` / `toDynamicAsync` binding**. Previously any dynamic terminal was classified opaque and its declared scope went unchecked, so the most common form of the bug — a singleton capturing one instance of something bound transient — passed validation silently.
19
+
20
+ A factory's _body_ remains opaque: `validate()` still does not descend into it, so whatever the factory resolves internally is not reported. Only the declared scope of the dependency edge is judged, which is the part the container actually knows.
21
+
22
+ **Breaking:** a container that wires a singleton to a transient or scoped dynamic binding now throws `ScopeViolationError` from `validate()` where it previously passed. Either widen the dependency's scope, or inject a factory instead of the value if a fresh instance per use is intended.
23
+
24
+ ### Patch Changes
25
+
26
+ - [`2def688`](https://github.com/codefastlabs/codefast/commit/2def688e305eebe7e14af4ae163beec13582aad5) Thanks [@thevuong](https://github.com/thevuong)! - Fix a crash on cyclic aliases: `bind(a).toAlias(b)` + `bind(b).toAlias(a)` previously recursed until `RangeError: Maximum call stack size exceeded` on both `resolve` and `resolveAsync`. Alias following is now an iterative loop with exact revisit detection — a genuine cycle throws `CircularDependencyError` naming the alias chain, and legitimately long alias chains resolve with no arbitrary hop cap.
27
+
28
+ Also splits the magic `32` that served two unrelated roles: the transient-dynamic fast lanes keep their own `DEEP_LANE_THRESHOLD = 32` (a shared-context/pool design point), while the cycle-scan Set attachment moves to a measured `RESOLUTION_SET_THRESHOLD = 128` — benchmarking showed `Array.includes` beats the Set's has/add/delete churn up to at least depth 96, so mid-depth graphs now skip the Set entirely.
29
+
30
+ - [`19199af`](https://github.com/codefastlabs/codefast/commit/19199af174d8971081d1849a36fd9df05c8541ae) Thanks [@thevuong](https://github.com/thevuong)! - Fix binding-registration order sensitivity: the fluent builder chain commits eagerly, so `bind(x).toDynamic(f).when(p)` (or `.whenNamed(...)` / `.whenTagged(...)`) momentarily registered a default-slot binding whose last-wins commit silently displaced an existing default binding of the same token — and the displaced binding was never restored once the chain narrowed to a predicate or a named/tagged slot. Registering a default binding before a constrained one on the same token therefore lost the default. The commit chain now remembers what an intermediate commit displaced and restores it when the chain settles on a non-conflicting shape; a chain that genuinely ends on the same default slot still replaces the previous default (last-wins unchanged).
31
+
32
+ Binding selection also gains a most-specific-wins rule: when both a default binding and exactly one predicate-carrying binding match, the predicate wins (it is a deliberate specialization) instead of throwing `AmbiguousBindingError` — so "default plus `when(...)` override" now works as naturally intended. Two matching predicates remain ambiguous and still throw.
33
+
34
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - Unify sync transient-dynamic cycle detection on a per-binding `inFlight` flag, replacing the shallow lane's `O(depth)` `resolutionPath.includes()` scan and the deep lane's `Map` of generation marks. Sync resolution runs on a single call stack, so a binding marked on factory-enter and cleared on factory-exit is exactly path membership — detection becomes an `O(1)` field read with no hashing, no string scan, and no side table to allocate or grow. The async lane keeps its own per-path check, since async chains can interleave.
35
+
36
+ Transient-dynamic chains that previously lost now win across the whole depth range (a 32-deep chain went from ~0.55× to ~1.8× of InversifyJS), deep chains widen their lead, and cold container builds get cheaper because there is no per-resolver cycle-tracking structure to allocate. It also fixes a latent correctness bug: because the deep lane now clears a binding's mark when its factory returns, a deep (past-threshold) transient dependency resolved twice via separate sub-branches (a diamond, not a cycle) no longer throws a false `CircularDependencyError`.
37
+
38
+ - [`f9aeeb0`](https://github.com/codefastlabs/codefast/commit/f9aeeb04a271877e47a7fbbfc6d62ae0fe1ad955) Thanks [@thevuong](https://github.com/thevuong)! - Extend the compiled-plan and memoization coverage: `toResolved(...)` transient bindings with pure-static explicit deps now compile into factory-call plans (same refusal rules and sync-only check as class plans), and name-only resolves gain a chain-versioned memo that fast-paths constants and cached singletons — predicates, aliases, and anything context-dependent keep the full selection path. Measured: `named-constant-get` ~21M → ~30M hz/op, `to-resolved-3-deps` ~39M → ~52M hz/op.
39
+
40
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - Collapse the async transient-dynamic resolver into a single lane and retune the cycle-set threshold.
41
+
42
+ The async lane used to split at depth 32 into a fast path (linear path scan, shared context, no stack frames) and a slow path (forced Set, fresh context per level, stack frames, extra microtask hop) — so context identity, `ctx.graph` contents, and promise shape all changed silently at that depth. Both are now one lane whose cycle guard goes through `enterResolutionPath`, the only mechanism that stays correct when chains interleave (`Promise.all`) and which adapts on its own: a linear scan while the path is short, an attached Set past `RESOLUTION_SET_THRESHOLD`. `DEEP_LANE_THRESHOLD` is gone from the package entirely.
43
+
44
+ `RESOLUTION_SET_THRESHOLD` drops from 128 to 32 on fresh measurements — at 128 an async chain costs 1275 / 3641 / 9645 / 26082 ns at depth 16 / 32 / 64 / 128 versus 1202 / 3285 / 7735 / 16837 at 32, so the old value was the worse choice at every depth measured.
45
+
46
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - Collapse the sync transient-dynamic resolver into a single lane and memoize each binding's resolution frame on the binding itself.
47
+
48
+ The separate deep lane existed to escape an `O(depth)` `resolutionPath.includes()` cycle scan past ~32 levels. With cycle detection now an `O(1)` `binding.inFlight` mark there is nothing to escape, so the depth split, its shared-context bookkeeping, its reentrancy fallback, and the per-resolver frame `Map` are all gone — the smaller function also inlines better. Frames derive only from immutable binding fields, so caching one per binding replaces a `Map` lookup per hop and a `Map` insert per binding per container.
49
+
50
+ Faster at every chain depth measured (8 → 512), e.g. a 32-deep transient chain improved ~39% and cold container build ~62%, which turns the cold-build result against Awilix from a loss into a win in the default benchmark profile.
51
+
52
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - `toResolved()` and `toResolvedAsync()` now accept injection descriptors — `inject()`, `optional()` and `injectAll()` — in their dependency list, matching what `@injectable([...])` already allowed and what the builder already did at runtime (it normalizes every entry through `normalizeToDescriptor`). Previously the public signature only admitted bare tokens and constructors, so an optional or multi dependency needed a cast even though resolution handled it correctly.
53
+
54
+ Factory arguments are typed from the descriptor: a bare token gives `Value`, `optional(token)` gives `Value | undefined`, and `injectAll(token)` gives `Array<Value>`. Widening only — existing bare-token call sites are unaffected.
55
+
56
+ - [#643](https://github.com/codefastlabs/codefast/pull/643) [`14c3a98`](https://github.com/codefastlabs/codefast/commit/14c3a98a98ae6221df447a94afe14b2e4a147c90) Thanks [@thevuong](https://github.com/thevuong)! - `unbind(token)` now drops the token's bindings in a single registry pass instead of removing them one id at a time. The previous path re-scanned and re-indexed the token's binding list once per binding — quadratic in the number of slots bound to that token — and bumped the registry version once per removal, invalidating resolver lookup caches repeatedly. Behaviour is unchanged, including deactivation of cached singletons.
57
+
3
58
  ## 0.5.0-canary.6
4
59
 
5
60
  ### Minor Changes
package/README.md CHANGED
@@ -12,7 +12,7 @@ Lightweight, type-safe dependency injection for modern TypeScript — built on T
12
12
  - **Modules.** Bundle bindings into reusable units; load, unload, and compose them across containers.
13
13
  - **Async-aware.** Async factories, deduped async singleton construction, and `await using` disposal.
14
14
 
15
- > Currently published as `1.0.0-canary.x` pre-releases on the way to a stable 1.0.
15
+ > Currently published as `0.x` canary pre-releases on the way to a stable 1.0 — breaking changes on 0.x ship as minor versions.
16
16
 
17
17
  ## Requirements
18
18
 
@@ -128,7 +128,7 @@ container.resolve(LoggerToken, { name: "file" });
128
128
  container.resolve(StorageToken, { tag: ["provider", "s3"] });
129
129
  ```
130
130
 
131
- For graph-aware selection, pass a predicate to `.when(...)` — helpers like `whenParentIs`, `whenAnyAncestorNamed`, and `whenParentTagged` ship in `@codefast/di/constraints`.
131
+ For graph-aware selection, pass a predicate to `.when(...)` — helpers like `whenParentIs`, `whenAnyAncestorNamed`, and `whenParentTagged` ship from the root entry (`import { whenParentIs } from "@codefast/di"`).
132
132
 
133
133
  ## Decorators
134
134
 
@@ -236,11 +236,20 @@ Every error extends `DiError` and carries a stable `code` — `TokenNotBoundErro
236
236
 
237
237
  ## Subpath exports
238
238
 
239
- The root entry re-exports the full public API. Every internal area is also published as a tree-shakeable subpath — `@codefast/di/container`, `@codefast/di/token`, `@codefast/di/module`, `@codefast/di/constraints`, `@codefast/di/errors`, and graph adapters under `@codefast/di/graph-adapters/*` (DOT, Cytoscape, React Flow) for visualizing `container.generateDependencyGraph()` output.
239
+ The root entry re-exports the full public API — prefer it (`import { Container, token, toReactFlowGraph } from "@codefast/di"`). Every module is also published as a tree-shakeable subpath mirroring the source layout:
240
+
241
+ - **Model** at the top level — `@codefast/di/token`, `/types`, `/binding`, `/registry`, `/errors`, `/module`
242
+ - **Runtime** under `/container/*` and `/resolution/*` — e.g. `@codefast/di/resolution/constraints`
243
+ - **Introspection** under `/introspection/*` — the inspector, `dependency-graph`, and the graph adapters (`@codefast/di/introspection/graph-adapters/{dot,cytoscape,reactflow}`) for visualizing `container.generateDependencyGraph()` output
244
+ - **Decorators & metadata** under `/decorators/*` and `/metadata/*`
240
245
 
241
246
  ## Benchmarks
242
247
 
243
- A head-to-head benchmark suite against InversifyJS 8 lives in the monorepo: [benchmarks/di-inversify](https://github.com/codefastlabs/codefast/tree/main/benchmarks/di-inversify). Each library runs in its canonical decorator mode, in isolated subprocesses, reported as per-trial medians with interquartile range — designed so the results are re-runnable rather than taken on faith. On the production-shaped scenarios measured there, `@codefast/di` resolves faster than InversifyJS; run `pnpm bench` in that package to reproduce the numbers on your machine.
248
+ A head-to-head benchmark suite lives in the monorepo: [benchmarks/di-inversify](https://github.com/codefastlabs/codefast/tree/main/benchmarks/di-inversify). It compares `@codefast/di` against **InversifyJS 8** on the full scenario set, plus **Awilix** and **tsyringe** on a shared core subset. Each library runs in its canonical mode, in isolated subprocesses, reported as per-trial medians with interquartile range — designed so the results are re-runnable rather than taken on faith. On the production-shaped scenarios measured there, `@codefast/di` is faster on the large majority (e.g. ~2× median vs InversifyJS) — with honestly-reported exceptions such as shallow transient-dynamic chains and cold container builds. See [RESULTS.md](https://github.com/codefastlabs/codefast/blob/main/benchmarks/di-inversify/RESULTS.md) for the numbers and the caveats, or run `pnpm bench` in that package to reproduce them on your machine.
249
+
250
+ ## Contributing
251
+
252
+ Changing this package's source? [CONTRIBUTING.md](https://github.com/codefastlabs/codefast/blob/main/packages/di/CONTRIBUTING.md) is the full workflow — build, exports mirror, tests, the mandatory perf-guard for resolver changes, and the release gate.
244
253
 
245
254
  ## License
246
255
 
package/dist/binding.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { InjectionDescriptor } from "#/decorators/inject";
1
+ import type { InjectableDependency, InjectionDescriptor, ResolvedDependencyValue } from "#/decorators/inject";
2
2
  import type { Token } from "#/token";
3
- import type { ActivationHandler, BindingIdentifier, BindingScope, BindingTag, Constructor, DeactivationHandler, DependencyKey, ResolutionContext, TokenValue, ConstraintContext } from "#/types";
3
+ import type { ActivationHandler, BindingIdentifier, BindingScope, BindingTag, Constructor, DeactivationHandler, ResolutionContext, ResolutionFrame, ConstraintContext } from "#/types";
4
4
  /**
5
5
  * @since 0.3.16-canary.0
6
6
  */
@@ -25,9 +25,26 @@ export declare const DEFAULT_BINDING_SLOT: {
25
25
  export declare function bindingSlotToString(slot: BindingSlot): string;
26
26
  interface BindingBase<Value> {
27
27
  readonly id: BindingIdentifier;
28
+ /**
29
+ * True while this binding's factory is on the sync resolution stack. The sync resolver marks
30
+ * it on enter and clears it on exit, making cycle detection an O(1) field read with no hashing,
31
+ * no path scan, and no side table. Sync resolution is single-threaded, so the flag is exactly
32
+ * path membership; the async lane keeps its own per-path check because chains can interleave.
33
+ *
34
+ * @remarks Resolver-owned bookkeeping — `registry.add` normalizes it, so callers never set it.
35
+ */
36
+ inFlight?: boolean | undefined;
37
+ /**
38
+ * Memoized resolution frame for this binding. Its contents derive only from immutable binding
39
+ * fields, so it is computed once on first resolve and reused instead of a per-resolver Map
40
+ * lookup on every hop.
41
+ *
42
+ * @remarks Resolver-owned bookkeeping — `registry.add` normalizes it, so callers never set it.
43
+ */
44
+ frame?: ResolutionFrame | undefined;
28
45
  readonly token: Token<Value> | Constructor<Value>;
29
46
  readonly slot: BindingSlot;
30
- readonly predicate?: (ctx: ConstraintContext) => boolean;
47
+ readonly predicate?: ((ctx: ConstraintContext) => boolean) | undefined;
31
48
  }
32
49
  type BindingBaseKeys = keyof BindingBase<unknown>;
33
50
  /**
@@ -37,8 +54,8 @@ export interface ClassBinding<Value> extends BindingBase<Value> {
37
54
  readonly kind: "class";
38
55
  readonly target: Constructor<Value>;
39
56
  readonly scope: BindingScope;
40
- readonly onActivation?: ActivationHandler<Value>;
41
- readonly onDeactivation?: DeactivationHandler<Value>;
57
+ readonly onActivation?: ActivationHandler<Value> | undefined;
58
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
42
59
  }
43
60
  /**
44
61
  * @since 0.3.16-canary.0
@@ -47,8 +64,8 @@ export interface DynamicBinding<Value> extends BindingBase<Value> {
47
64
  readonly kind: "dynamic";
48
65
  readonly factory: (ctx: ResolutionContext) => Value;
49
66
  readonly scope: BindingScope;
50
- readonly onActivation?: ActivationHandler<Value>;
51
- readonly onDeactivation?: DeactivationHandler<Value>;
67
+ readonly onActivation?: ActivationHandler<Value> | undefined;
68
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
52
69
  }
53
70
  /**
54
71
  * @since 0.3.16-canary.0
@@ -57,8 +74,8 @@ export interface DynamicAsyncBinding<Value> extends BindingBase<Value> {
57
74
  readonly kind: "dynamic-async";
58
75
  readonly factory: (ctx: ResolutionContext) => Promise<Value>;
59
76
  readonly scope: BindingScope;
60
- readonly onActivation?: ActivationHandler<Value>;
61
- readonly onDeactivation?: DeactivationHandler<Value>;
77
+ readonly onActivation?: ActivationHandler<Value> | undefined;
78
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
62
79
  }
63
80
  /**
64
81
  * @since 0.3.16-canary.0
@@ -68,8 +85,8 @@ export interface ResolvedBinding<Value> extends BindingBase<Value> {
68
85
  readonly factory: (...args: Array<unknown>) => Value;
69
86
  readonly deps: ReadonlyArray<InjectionDescriptor>;
70
87
  readonly scope: BindingScope;
71
- readonly onActivation?: ActivationHandler<Value>;
72
- readonly onDeactivation?: DeactivationHandler<Value>;
88
+ readonly onActivation?: ActivationHandler<Value> | undefined;
89
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
73
90
  }
74
91
  /**
75
92
  * @since 0.3.16-canary.0
@@ -79,8 +96,8 @@ export interface ResolvedAsyncBinding<Value> extends BindingBase<Value> {
79
96
  readonly factory: (...args: Array<unknown>) => Promise<Value>;
80
97
  readonly deps: ReadonlyArray<InjectionDescriptor>;
81
98
  readonly scope: BindingScope;
82
- readonly onActivation?: ActivationHandler<Value>;
83
- readonly onDeactivation?: DeactivationHandler<Value>;
99
+ readonly onActivation?: ActivationHandler<Value> | undefined;
100
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
84
101
  }
85
102
  /**
86
103
  * @since 0.3.16-canary.0
@@ -89,8 +106,8 @@ export interface ConstantBinding<Value> extends BindingBase<Value> {
89
106
  readonly kind: "constant";
90
107
  readonly value: Value;
91
108
  readonly scope: "singleton";
92
- readonly onActivation?: ActivationHandler<Value>;
93
- readonly onDeactivation?: DeactivationHandler<Value>;
109
+ readonly onActivation?: ActivationHandler<Value> | undefined;
110
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
94
111
  }
95
112
  /**
96
113
  * @since 0.3.16-canary.0
@@ -134,11 +151,11 @@ export interface BindToBuilder<Value> {
134
151
  toConstantValue(value: Value): ConstantBindingBuilder<Value>;
135
152
  toDynamic(factory: (ctx: ResolutionContext) => Value): BindingBuilder<Value>;
136
153
  toDynamicAsync(factory: (ctx: ResolutionContext) => Promise<Value>): BindingBuilder<Value>;
137
- toResolved<const Deps extends ReadonlyArray<DependencyKey>>(factory: (...args: {
138
- [K in keyof Deps]: TokenValue<NoInfer<Deps>[K]>;
154
+ toResolved<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
155
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
139
156
  }) => Value, deps: Deps): BindingBuilder<Value>;
140
- toResolvedAsync<const Deps extends ReadonlyArray<DependencyKey>>(factory: (...args: {
141
- [K in keyof Deps]: TokenValue<NoInfer<Deps>[K]>;
157
+ toResolvedAsync<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
158
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
142
159
  }) => Promise<Value>, deps: Deps): BindingBuilder<Value>;
143
160
  toAlias(target: Token<Value> | Constructor<Value>): AliasBindingBuilder;
144
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"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"}
package/dist/binding.js CHANGED
@@ -36,11 +36,11 @@ export function bindingSlotToString(slot) {
36
36
  return parts.join(",");
37
37
  }
38
38
  // ── ID generation ─────────────────────────────────────────────────────────────
39
- let _idCounter = 0;
39
+ let bindingIdCounter = 0;
40
40
  /**
41
41
  * @since 0.3.16-canary.0
42
42
  */
43
43
  export function generateBindingId() {
44
- return String(++_idCounter);
44
+ return String(++bindingIdCounter);
45
45
  }
46
46
  //# sourceMappingURL=binding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAkB;IACrE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAwB,CAAC;AAExF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAqHD,iFAAiF;AAEjF,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,EAAE,UAAU,CAAsB,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAkB;IACrE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAwB,CAAC;AAExF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAsID,iFAAiF;AAEjF,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,EAAE,gBAAgB,CAAsB,CAAC;AACzD,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Fluent binding-builder chain behind `container.bind()` / `container.rebind()`.
3
+ *
4
+ * Every builder commits eagerly on construction and re-commits (replacing the
5
+ * previous binding by id) whenever a later fluent call refines the binding —
6
+ * so a chain left half-finished is still a valid registration.
7
+ */
8
+ import type { AliasBindingBuilder, Binding, BindingBuilder, BindToBuilder, ConstantBindingBuilder } from "#/binding";
9
+ import type { InjectableDependency, ResolvedDependencyValue } from "#/decorators/inject";
10
+ import type { Token } from "#/token";
11
+ import type { BindingIdentifier, Constructor, ResolutionContext } from "#/types";
12
+ /**
13
+ * @since 0.5.0-canary.7
14
+ */
15
+ export type CommitFn = <Value>(binding: Binding<Value>, previousId?: BindingIdentifier) => BindingIdentifier;
16
+ /**
17
+ * @since 0.5.0-canary.7
18
+ */
19
+ export declare class BindingEntry<Value> implements BindToBuilder<Value> {
20
+ #private;
21
+ constructor(token: Token<Value> | Constructor<Value>, commitBinding: CommitFn);
22
+ to(type: Constructor<Value>): BindingBuilder<Value>;
23
+ toSelf(): BindingBuilder<Value>;
24
+ toConstantValue(value: Value): ConstantBindingBuilder<Value>;
25
+ toDynamic(factory: (ctx: ResolutionContext) => Value): BindingBuilder<Value>;
26
+ toDynamicAsync(factory: (ctx: ResolutionContext) => Promise<Value>): BindingBuilder<Value>;
27
+ toResolved<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
28
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
29
+ }) => Value, deps: Deps): BindingBuilder<Value>;
30
+ toResolvedAsync<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
31
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
32
+ }) => Promise<Value>, deps: Deps): BindingBuilder<Value>;
33
+ toAlias(target: Token<Value> | Constructor<Value>): AliasBindingBuilder;
34
+ }
35
+ //# sourceMappingURL=binding-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-builders.d.ts","sourceRoot":"","sources":["../../src/container/binding-builders.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,cAAc,EAEd,aAAa,EACb,sBAAsB,EAMvB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAEV,iBAAiB,EAEjB,WAAW,EAEX,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,CAAC;AAsD7G;;GAEG;AACH,qBAAa,YAAY,CAAC,KAAK,CAAE,YAAW,aAAa,CAAC,KAAK,CAAC;;IAI9D,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,QAAQ,EAG5E;IAED,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAMlD;IAED,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAS9B;IAED,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAE3D;IAED,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAM3E;IAED,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAMzF;IAED,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EAC/D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,KAAK,EAC7F,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAYvB;IAED,eAAe,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EACpE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EACtG,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAYvB;IAED,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAEtE;CACF"}
@@ -0,0 +1,247 @@
1
+ import { DEFAULT_BINDING_SLOT, generateBindingId } from "#/binding";
2
+ import { normalizeToDescriptor } from "#/decorators/inject";
3
+ function updateSlotTag(slot, tag, value) {
4
+ const existing = [...slot.tags];
5
+ const idx = existing.findIndex(([k]) => k === tag);
6
+ if (idx !== -1) {
7
+ existing[idx] = [tag, value];
8
+ }
9
+ else {
10
+ existing.push([tag, value]);
11
+ }
12
+ return { ...slot, tags: existing };
13
+ }
14
+ // ── SlotBuilder ───────────────────────────────────────────────────────────────
15
+ class SlotBuilder {
16
+ slot = DEFAULT_BINDING_SLOT; // ✓ T3-1: no redundant spread
17
+ predicate;
18
+ committedId;
19
+ when(predicate) {
20
+ this.predicate = predicate;
21
+ this.commit();
22
+ return this;
23
+ }
24
+ whenNamed(name) {
25
+ this.slot = { ...this.slot, name };
26
+ this.commit();
27
+ return this;
28
+ }
29
+ whenTagged(tag, value) {
30
+ this.slot = updateSlotTag(this.slot, tag, value);
31
+ this.commit();
32
+ return this;
33
+ }
34
+ whenDefault() {
35
+ return this;
36
+ }
37
+ id() {
38
+ return this.committedId;
39
+ }
40
+ }
41
+ // ── BindingEntry ──────────────────────────────────────────────────────────────
42
+ /**
43
+ * @since 0.5.0-canary.7
44
+ */
45
+ export class BindingEntry {
46
+ #token;
47
+ #commitBinding;
48
+ constructor(token, commitBinding) {
49
+ this.#token = token;
50
+ this.#commitBinding = commitBinding;
51
+ }
52
+ to(type) {
53
+ return new ConstraintBuilder(this.#token, { kind: "class", target: type, scope: "transient" }, this.#commitBinding);
54
+ }
55
+ toSelf() {
56
+ if (typeof this.#token !== "function") {
57
+ throw new Error("toSelf() requires token to be a Constructor");
58
+ }
59
+ return new ConstraintBuilder(this.#token, { kind: "class", target: this.#token, scope: "transient" }, this.#commitBinding);
60
+ }
61
+ toConstantValue(value) {
62
+ return new ConstantBuilder(this.#token, value, this.#commitBinding);
63
+ }
64
+ toDynamic(factory) {
65
+ return new ConstraintBuilder(this.#token, { kind: "dynamic", factory, scope: "transient" }, this.#commitBinding);
66
+ }
67
+ toDynamicAsync(factory) {
68
+ return new ConstraintBuilder(this.#token, { kind: "dynamic-async", factory, scope: "transient" }, this.#commitBinding);
69
+ }
70
+ toResolved(factory, deps) {
71
+ const normalizedDeps = deps.map((dependency) => normalizeToDescriptor(dependency));
72
+ return new ConstraintBuilder(this.#token, {
73
+ kind: "resolved",
74
+ factory: factory,
75
+ deps: normalizedDeps,
76
+ scope: "transient",
77
+ }, this.#commitBinding);
78
+ }
79
+ toResolvedAsync(factory, deps) {
80
+ const normalizedDeps = deps.map((dependency) => normalizeToDescriptor(dependency));
81
+ return new ConstraintBuilder(this.#token, {
82
+ kind: "resolved-async",
83
+ factory: factory,
84
+ deps: normalizedDeps,
85
+ scope: "transient",
86
+ }, this.#commitBinding);
87
+ }
88
+ toAlias(target) {
89
+ return new AliasBuilder(this.#token, target, this.#commitBinding);
90
+ }
91
+ }
92
+ // ── ConstraintBuilder ─────────────────────────────────────────────────────────
93
+ class ConstraintBuilder extends SlotBuilder {
94
+ #token;
95
+ #partial;
96
+ #commitBinding;
97
+ constructor(token, partial, commitBinding) {
98
+ super();
99
+ this.#token = token;
100
+ this.#partial = partial;
101
+ this.#commitBinding = commitBinding;
102
+ this.commit();
103
+ }
104
+ commit() {
105
+ const previousId = this.committedId;
106
+ const binding = {
107
+ ...this.#partial,
108
+ id: generateBindingId(),
109
+ inFlight: false,
110
+ token: this.#token,
111
+ slot: this.slot,
112
+ predicate: this.predicate,
113
+ };
114
+ this.committedId = this.#commitBinding(binding, previousId);
115
+ }
116
+ singleton() {
117
+ const previousId = this.committedId;
118
+ this.committedId = undefined;
119
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "singleton" }, this.slot, this.predicate, this.#commitBinding, previousId);
120
+ }
121
+ transient() {
122
+ const previousId = this.committedId;
123
+ this.committedId = undefined;
124
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "transient" }, this.slot, this.predicate, this.#commitBinding, previousId);
125
+ }
126
+ scoped() {
127
+ const previousId = this.committedId;
128
+ this.committedId = undefined;
129
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "scoped" }, this.slot, this.predicate, this.#commitBinding, previousId);
130
+ }
131
+ }
132
+ // ── ScopeBuilder ─────────────────────────────────────────────────────────────
133
+ class ScopeBuilder {
134
+ #onActivation;
135
+ #onDeactivation;
136
+ #committedId;
137
+ #token;
138
+ #partial;
139
+ #slot;
140
+ #predicate;
141
+ #commitBinding;
142
+ #initialPreviousId;
143
+ constructor(token, partial, slot, predicate, commitBinding, initialPreviousId) {
144
+ this.#token = token;
145
+ this.#partial = partial;
146
+ this.#slot = slot;
147
+ this.#predicate = predicate;
148
+ this.#commitBinding = commitBinding;
149
+ this.#initialPreviousId = initialPreviousId;
150
+ this.#commit();
151
+ }
152
+ #commit() {
153
+ const previousId = this.#committedId ?? this.#initialPreviousId;
154
+ const binding = {
155
+ ...this.#partial,
156
+ id: generateBindingId(),
157
+ inFlight: false,
158
+ token: this.#token,
159
+ slot: this.#slot,
160
+ predicate: this.#predicate,
161
+ onActivation: this.#onActivation,
162
+ onDeactivation: this.#onDeactivation,
163
+ };
164
+ this.#committedId = this.#commitBinding(binding, previousId);
165
+ }
166
+ onActivation(fn) {
167
+ this.#onActivation = fn;
168
+ this.#commit();
169
+ return this;
170
+ }
171
+ onDeactivation(fn) {
172
+ this.#onDeactivation = fn;
173
+ this.#commit();
174
+ return this;
175
+ }
176
+ id() {
177
+ return this.#committedId;
178
+ }
179
+ }
180
+ // ── ConstantBuilder ───────────────────────────────────────────────────────────
181
+ class ConstantBuilder extends SlotBuilder {
182
+ #onActivation;
183
+ #onDeactivation;
184
+ #token;
185
+ #value;
186
+ #commitBinding;
187
+ constructor(token, value, commitBinding) {
188
+ super();
189
+ this.#token = token;
190
+ this.#value = value;
191
+ this.#commitBinding = commitBinding;
192
+ this.commit();
193
+ }
194
+ commit() {
195
+ const previousId = this.committedId;
196
+ const binding = {
197
+ kind: "constant",
198
+ id: generateBindingId(),
199
+ inFlight: false,
200
+ token: this.#token,
201
+ slot: this.slot,
202
+ predicate: this.predicate,
203
+ value: this.#value,
204
+ scope: "singleton",
205
+ onActivation: this.#onActivation,
206
+ onDeactivation: this.#onDeactivation,
207
+ };
208
+ this.committedId = this.#commitBinding(binding, previousId);
209
+ }
210
+ onActivation(fn) {
211
+ this.#onActivation = fn;
212
+ this.commit();
213
+ return this;
214
+ }
215
+ onDeactivation(fn) {
216
+ this.#onDeactivation = fn;
217
+ this.commit();
218
+ return this;
219
+ }
220
+ }
221
+ // ── AliasBuilder ──────────────────────────────────────────────────────────────
222
+ class AliasBuilder extends SlotBuilder {
223
+ #token;
224
+ #target;
225
+ #commitBinding;
226
+ constructor(token, target, commitBinding) {
227
+ super();
228
+ this.#token = token;
229
+ this.#target = target;
230
+ this.#commitBinding = commitBinding;
231
+ this.commit();
232
+ }
233
+ commit() {
234
+ const previousId = this.committedId;
235
+ const binding = {
236
+ kind: "alias",
237
+ id: generateBindingId(),
238
+ inFlight: false,
239
+ token: this.#token,
240
+ slot: this.slot,
241
+ predicate: this.predicate,
242
+ target: this.#target,
243
+ };
244
+ this.committedId = this.#commitBinding(binding, previousId);
245
+ }
246
+ }
247
+ //# sourceMappingURL=binding-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-builders.js","sourceRoot":"","sources":["../../src/container/binding-builders.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { BindToBuilder } from "#/binding";
2
2
  import type { AutoRegisterRegistry } from "#/decorators/injectable";
3
- import type { ContainerGraphJson, GraphOptions } from "#/dependency-graph";
4
- import type { BindingSnapshot, ContainerSnapshot } from "#/inspector";
3
+ import type { ContainerGraphJson, GraphOptions } from "#/introspection/dependency-graph";
4
+ import type { BindingSnapshot, ContainerSnapshot } from "#/introspection/inspector";
5
5
  import type { AsyncModule, SyncModule } from "#/module";
6
6
  import type { Token } from "#/token";
7
7
  import type { ActivationHandler, BindingIdentifier, Constructor, DeactivationHandler, ResolveOptions } from "#/types";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/container/container.ts"],"names":[],"mappings":"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"}