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

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 (195) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +15 -4
  3. package/dist/binding.d.ts +78 -19
  4. package/dist/binding.d.ts.map +1 -1
  5. package/dist/binding.js +46 -2
  6. package/dist/binding.js.map +1 -1
  7. package/dist/constructor-type.d.ts +4 -5
  8. package/dist/constructor-type.d.ts.map +1 -1
  9. package/dist/container/binding-builders.d.ts +56 -0
  10. package/dist/container/binding-builders.d.ts.map +1 -0
  11. package/dist/container/binding-builders.js +196 -0
  12. package/dist/container/binding-builders.js.map +1 -0
  13. package/dist/{container.d.ts → container/container.d.ts} +2 -2
  14. package/dist/container/container.d.ts.map +1 -0
  15. package/dist/container/container.js +624 -0
  16. package/dist/container/container.js.map +1 -0
  17. package/dist/decorators/inject.d.ts +10 -1
  18. package/dist/decorators/inject.d.ts.map +1 -1
  19. package/dist/decorators/inject.js +2 -2
  20. package/dist/decorators/inject.js.map +1 -1
  21. package/dist/decorators/injectable.js +3 -3
  22. package/dist/decorators/injectable.js.map +1 -1
  23. package/dist/errors.d.ts +14 -0
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +17 -0
  26. package/dist/errors.js.map +1 -1
  27. package/dist/index.d.ts +13 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +9 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/introspection/dependency-graph.d.ts.map +1 -0
  32. package/dist/{dependency-graph.js → introspection/dependency-graph.js} +1 -1
  33. package/dist/introspection/dependency-graph.js.map +1 -0
  34. package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.d.ts +1 -1
  35. package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -0
  36. package/dist/introspection/graph-adapters/cytoscape.js.map +1 -0
  37. package/dist/introspection/graph-adapters/dot.d.ts +6 -0
  38. package/dist/introspection/graph-adapters/dot.d.ts.map +1 -0
  39. package/dist/introspection/graph-adapters/dot.js.map +1 -0
  40. package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.d.ts +2 -2
  41. package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -0
  42. package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.js +11 -1
  43. package/dist/introspection/graph-adapters/reactflow.js.map +1 -0
  44. package/dist/{inspector.d.ts → introspection/inspector.d.ts} +3 -8
  45. package/dist/introspection/inspector.d.ts.map +1 -0
  46. package/dist/{inspector.js → introspection/inspector.js} +23 -23
  47. package/dist/introspection/inspector.js.map +1 -0
  48. package/dist/metadata/metadata-keys.d.ts +3 -6
  49. package/dist/metadata/metadata-keys.d.ts.map +1 -1
  50. package/dist/metadata/metadata-keys.js +3 -6
  51. package/dist/metadata/metadata-keys.js.map +1 -1
  52. package/dist/metadata/symbol-metadata-reader.d.ts +1 -1
  53. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
  54. package/dist/metadata/symbol-metadata-reader.js +4 -4
  55. package/dist/metadata/symbol-metadata-reader.js.map +1 -1
  56. package/dist/module.d.ts +9 -2
  57. package/dist/module.d.ts.map +1 -1
  58. package/dist/module.js +9 -2
  59. package/dist/module.js.map +1 -1
  60. package/dist/registry.d.ts +17 -13
  61. package/dist/registry.d.ts.map +1 -1
  62. package/dist/registry.js +94 -63
  63. package/dist/registry.js.map +1 -1
  64. package/dist/resolution/activation-need.d.ts +25 -0
  65. package/dist/resolution/activation-need.d.ts.map +1 -0
  66. package/dist/resolution/activation-need.js +64 -0
  67. package/dist/resolution/activation-need.js.map +1 -0
  68. package/dist/resolution/binding-lookup-cache.d.ts +41 -0
  69. package/dist/resolution/binding-lookup-cache.d.ts.map +1 -0
  70. package/dist/resolution/binding-lookup-cache.js +102 -0
  71. package/dist/resolution/binding-lookup-cache.js.map +1 -0
  72. package/dist/resolution/binding-scope.d.ts.map +1 -0
  73. package/dist/resolution/binding-scope.js.map +1 -0
  74. package/dist/resolution/binding-select.d.ts.map +1 -0
  75. package/dist/{binding-select.js → resolution/binding-select.js} +17 -7
  76. package/dist/resolution/binding-select.js.map +1 -0
  77. package/dist/resolution/class-introspector.d.ts +27 -0
  78. package/dist/resolution/class-introspector.d.ts.map +1 -0
  79. package/dist/resolution/class-introspector.js +60 -0
  80. package/dist/resolution/class-introspector.js.map +1 -0
  81. package/dist/resolution/constraints.d.ts.map +1 -0
  82. package/dist/resolution/constraints.js.map +1 -0
  83. package/dist/resolution/diagnostics.d.ts +41 -0
  84. package/dist/resolution/diagnostics.d.ts.map +1 -0
  85. package/dist/resolution/diagnostics.js +18 -0
  86. package/dist/resolution/diagnostics.js.map +1 -0
  87. package/dist/{environment.d.ts → resolution/environment.d.ts} +24 -7
  88. package/dist/resolution/environment.d.ts.map +1 -0
  89. package/dist/resolution/environment.js +126 -0
  90. package/dist/resolution/environment.js.map +1 -0
  91. package/dist/resolution/instantiation-plan.d.ts +67 -0
  92. package/dist/resolution/instantiation-plan.d.ts.map +1 -0
  93. package/dist/resolution/instantiation-plan.js +183 -0
  94. package/dist/resolution/instantiation-plan.js.map +1 -0
  95. package/dist/{lifecycle.d.ts → resolution/lifecycle.d.ts} +5 -3
  96. package/dist/resolution/lifecycle.d.ts.map +1 -0
  97. package/dist/{lifecycle.js → resolution/lifecycle.js} +23 -14
  98. package/dist/resolution/lifecycle.js.map +1 -0
  99. package/dist/resolution/resolution-path.d.ts +22 -0
  100. package/dist/resolution/resolution-path.d.ts.map +1 -0
  101. package/dist/resolution/resolution-path.js +40 -0
  102. package/dist/resolution/resolution-path.js.map +1 -0
  103. package/dist/resolution/resolve-options.d.ts.map +1 -0
  104. package/dist/resolution/resolve-options.js.map +1 -0
  105. package/dist/resolution/resolver.d.ts +40 -0
  106. package/dist/resolution/resolver.d.ts.map +1 -0
  107. package/dist/resolution/resolver.js +1108 -0
  108. package/dist/resolution/resolver.js.map +1 -0
  109. package/dist/{scope.d.ts → resolution/scope.d.ts} +8 -9
  110. package/dist/resolution/scope.d.ts.map +1 -0
  111. package/dist/resolution/scope.js +80 -0
  112. package/dist/resolution/scope.js.map +1 -0
  113. package/dist/token.d.ts.map +1 -1
  114. package/dist/token.js +0 -3
  115. package/dist/token.js.map +1 -1
  116. package/package.json +19 -94
  117. package/src/binding.ts +137 -22
  118. package/src/constructor-type.ts +4 -5
  119. package/src/container/binding-builders.ts +294 -0
  120. package/src/container/container.ts +825 -0
  121. package/src/decorators/inject.ts +15 -4
  122. package/src/decorators/injectable.ts +3 -3
  123. package/src/errors.ts +21 -0
  124. package/src/index.ts +15 -7
  125. package/src/{dependency-graph.ts → introspection/dependency-graph.ts} +1 -1
  126. package/src/{graph-adapters → introspection/graph-adapters}/cytoscape.ts +1 -1
  127. package/src/{graph-adapters → introspection/graph-adapters}/dot.ts +1 -1
  128. package/src/{graph-adapters → introspection/graph-adapters}/reactflow.ts +13 -2
  129. package/src/{inspector.ts → introspection/inspector.ts} +26 -21
  130. package/src/metadata/metadata-keys.ts +3 -6
  131. package/src/metadata/symbol-metadata-reader.ts +4 -4
  132. package/src/module.ts +14 -6
  133. package/src/registry.ts +97 -64
  134. package/src/resolution/activation-need.ts +81 -0
  135. package/src/resolution/binding-lookup-cache.ts +132 -0
  136. package/src/{binding-select.ts → resolution/binding-select.ts} +17 -7
  137. package/src/resolution/class-introspector.ts +74 -0
  138. package/src/resolution/diagnostics.ts +43 -0
  139. package/src/{environment.ts → resolution/environment.ts} +65 -35
  140. package/src/resolution/instantiation-plan.ts +292 -0
  141. package/src/{lifecycle.ts → resolution/lifecycle.ts} +26 -14
  142. package/src/resolution/resolution-path.ts +62 -0
  143. package/src/resolution/resolver.ts +1526 -0
  144. package/src/resolution/scope.ts +95 -0
  145. package/src/token.ts +0 -3
  146. package/dist/binding-scope.d.ts.map +0 -1
  147. package/dist/binding-scope.js.map +0 -1
  148. package/dist/binding-select.d.ts.map +0 -1
  149. package/dist/binding-select.js.map +0 -1
  150. package/dist/constraints.d.ts.map +0 -1
  151. package/dist/constraints.js.map +0 -1
  152. package/dist/container.d.ts.map +0 -1
  153. package/dist/container.js +0 -853
  154. package/dist/container.js.map +0 -1
  155. package/dist/dependency-graph.d.ts.map +0 -1
  156. package/dist/dependency-graph.js.map +0 -1
  157. package/dist/environment.d.ts.map +0 -1
  158. package/dist/environment.js +0 -100
  159. package/dist/environment.js.map +0 -1
  160. package/dist/graph-adapters/cytoscape.d.ts.map +0 -1
  161. package/dist/graph-adapters/cytoscape.js.map +0 -1
  162. package/dist/graph-adapters/dot.d.ts +0 -6
  163. package/dist/graph-adapters/dot.d.ts.map +0 -1
  164. package/dist/graph-adapters/dot.js.map +0 -1
  165. package/dist/graph-adapters/reactflow.d.ts.map +0 -1
  166. package/dist/graph-adapters/reactflow.js.map +0 -1
  167. package/dist/inspector.d.ts.map +0 -1
  168. package/dist/inspector.js.map +0 -1
  169. package/dist/lifecycle.d.ts.map +0 -1
  170. package/dist/lifecycle.js.map +0 -1
  171. package/dist/resolve-options.d.ts.map +0 -1
  172. package/dist/resolve-options.js.map +0 -1
  173. package/dist/resolver.d.ts +0 -90
  174. package/dist/resolver.d.ts.map +0 -1
  175. package/dist/resolver.js +0 -1208
  176. package/dist/resolver.js.map +0 -1
  177. package/dist/scope.d.ts.map +0 -1
  178. package/dist/scope.js +0 -61
  179. package/dist/scope.js.map +0 -1
  180. package/src/container.ts +0 -1141
  181. package/src/resolver.ts +0 -1626
  182. package/src/scope.ts +0 -77
  183. /package/dist/{dependency-graph.d.ts → introspection/dependency-graph.d.ts} +0 -0
  184. /package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.js +0 -0
  185. /package/dist/{graph-adapters → introspection/graph-adapters}/dot.js +0 -0
  186. /package/dist/{binding-scope.d.ts → resolution/binding-scope.d.ts} +0 -0
  187. /package/dist/{binding-scope.js → resolution/binding-scope.js} +0 -0
  188. /package/dist/{binding-select.d.ts → resolution/binding-select.d.ts} +0 -0
  189. /package/dist/{constraints.d.ts → resolution/constraints.d.ts} +0 -0
  190. /package/dist/{constraints.js → resolution/constraints.js} +0 -0
  191. /package/dist/{resolve-options.d.ts → resolution/resolve-options.d.ts} +0 -0
  192. /package/dist/{resolve-options.js → resolution/resolve-options.js} +0 -0
  193. /package/src/{binding-scope.ts → resolution/binding-scope.ts} +0 -0
  194. /package/src/{constraints.ts → resolution/constraints.ts} +0 -0
  195. /package/src/{resolve-options.ts → resolution/resolve-options.ts} +0 -0
@@ -3,7 +3,7 @@ import { INJECT_ACCESSOR_KEY, INJECTABLE_KEY, LIFECYCLE_KEY, METADATA_SYMBOL } f
3
3
  * @since 0.3.16-canary.0
4
4
  */
5
5
  export class SymbolMetadataReader {
6
- _getMetadataRecord(target, key) {
6
+ #getMetadataRecord(target, key) {
7
7
  const descriptor = Object.getOwnPropertyDescriptor(target, METADATA_SYMBOL);
8
8
  if (descriptor === undefined) {
9
9
  return undefined;
@@ -15,15 +15,15 @@ export class SymbolMetadataReader {
15
15
  return record;
16
16
  }
17
17
  getConstructorMetadata(target) {
18
- const record = this._getMetadataRecord(target, INJECTABLE_KEY);
18
+ const record = this.#getMetadataRecord(target, INJECTABLE_KEY);
19
19
  return record?.[INJECTABLE_KEY];
20
20
  }
21
21
  getLifecycleMetadata(target) {
22
- const record = this._getMetadataRecord(target, LIFECYCLE_KEY);
22
+ const record = this.#getMetadataRecord(target, LIFECYCLE_KEY);
23
23
  return record?.[LIFECYCLE_KEY];
24
24
  }
25
25
  getAccessorMetadata(target) {
26
- const record = this._getMetadataRecord(target, INJECT_ACCESSOR_KEY);
26
+ const record = this.#getMetadataRecord(target, INJECT_ACCESSOR_KEY);
27
27
  return record?.[INJECT_ACCESSOR_KEY];
28
28
  }
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-metadata-reader.js","sourceRoot":"","sources":["../../src/metadata/symbol-metadata-reader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAI/G;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACvB,kBAAkB,CAAC,MAAmB,EAAE,GAAoB;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC5E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAA4D,CAAC;QACvF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB,CAAC,MAAmB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/D,OAAO,MAAM,EAAE,CAAC,cAAc,CAAoC,CAAC;IACrE,CAAC;IAED,oBAAoB,CAAC,MAAmB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9D,OAAO,MAAM,EAAE,CAAC,aAAa,CAAkC,CAAC;IAClE,CAAC;IAED,mBAAmB,CACjB,MAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACpE,OAAO,MAAM,EAAE,CAAC,mBAAmB,CAEtB,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"symbol-metadata-reader.js","sourceRoot":"","sources":["../../src/metadata/symbol-metadata-reader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAI/G;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B,kBAAkB,CAAC,MAAmB,EAAE,GAAoB;QAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC5E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAA4D,CAAC;QACvF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB,CAAC,MAAmB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/D,OAAO,MAAM,EAAE,CAAC,cAAc,CAAoC,CAAC;IACrE,CAAC;IAED,oBAAoB,CAAC,MAAmB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9D,OAAO,MAAM,EAAE,CAAC,aAAa,CAAkC,CAAC;IAClE,CAAC;IAED,mBAAmB,CACjB,MAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACpE,OAAO,MAAM,EAAE,CAAC,mBAAmB,CAEtB,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,oBAAoB,EAAE,CAAC"}
package/dist/module.d.ts CHANGED
@@ -3,13 +3,20 @@ import type { Token } from "#/token";
3
3
  import type { Constructor } from "#/types";
4
4
  declare const SYNC_MODULE_BRAND: unique symbol;
5
5
  declare const ASYNC_MODULE_BRAND: unique symbol;
6
+ /**
7
+ * Key for the module's setup callback. A symbol (not exported from the package root)
8
+ * keeps the container-only member out of consumer-facing autocomplete entirely.
9
+ *
10
+ * @since 0.5.0-canary.7
11
+ */
12
+ export declare const MODULE_SETUP: unique symbol;
6
13
  /**
7
14
  * @since 0.3.16-canary.0
8
15
  */
9
16
  export interface SyncModule {
10
17
  readonly name: string;
11
18
  readonly [SYNC_MODULE_BRAND]: true;
12
- readonly _setup: (builder: ModuleBuilder) => void;
19
+ readonly [MODULE_SETUP]: (builder: ModuleBuilder) => void;
13
20
  }
14
21
  /**
15
22
  * @since 0.3.16-canary.0
@@ -17,7 +24,7 @@ export interface SyncModule {
17
24
  export interface AsyncModule {
18
25
  readonly name: string;
19
26
  readonly [ASYNC_MODULE_BRAND]: true;
20
- readonly _setup: (builder: AsyncModuleBuilder) => Promise<void>;
27
+ readonly [MODULE_SETUP]: (builder: AsyncModuleBuilder) => Promise<void>;
21
28
  }
22
29
  /**
23
30
  * @since 0.3.16-canary.0
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,QAAA,MAAM,iBAAiB,EAAE,OAAO,MAAiC,CAAC;AAClE,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAAkC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAID;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;CAC3D;AAID;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,UAAU;CAO1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW;CAOzF,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,UAAU;IAGzE,WAAW,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW;CAG9F,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,IAAI,UAAU,CAEnF"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,QAAA,MAAM,iBAAiB,EAAE,OAAO,MAAiC,CAAC;AAClE,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAAkC,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAAkC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;IACpC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAID;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;CAC3D;AAID;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,UAAU;CAO1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW;CAOzF,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB,MAAM,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,UAAU;IAGzE,WAAW,OAAO,MAAM,SAAS,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW;CAG9F,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,IAAI,UAAU,CAEnF"}
package/dist/module.js CHANGED
@@ -1,6 +1,13 @@
1
1
  // ── Branded types (runtime symbols for branding) ─────────────────────────────
2
2
  const SYNC_MODULE_BRAND = Symbol("di:sync-module");
3
3
  const ASYNC_MODULE_BRAND = Symbol("di:async-module");
4
+ /**
5
+ * Key for the module's setup callback. A symbol (not exported from the package root)
6
+ * keeps the container-only member out of consumer-facing autocomplete entirely.
7
+ *
8
+ * @since 0.5.0-canary.7
9
+ */
10
+ export const MODULE_SETUP = Symbol("di:module-setup");
4
11
  // ── Static factories ──────────────────────────────────────────────────────────
5
12
  /**
6
13
  * @since 0.3.16-canary.0
@@ -10,7 +17,7 @@ export const SyncModule = {
10
17
  return {
11
18
  name,
12
19
  [SYNC_MODULE_BRAND]: true,
13
- _setup: setup,
20
+ [MODULE_SETUP]: setup,
14
21
  };
15
22
  },
16
23
  };
@@ -22,7 +29,7 @@ export const AsyncModule = {
22
29
  return {
23
30
  name,
24
31
  [ASYNC_MODULE_BRAND]: true,
25
- _setup: setup,
32
+ [MODULE_SETUP]: setup,
26
33
  };
27
34
  },
28
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAEhF,MAAM,iBAAiB,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAsCpE,iFAAiF;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,CAAC,IAAY,EAAE,KAAuC;QAC1D,OAAO;YACL,IAAI;YACJ,CAAC,iBAAiB,CAAC,EAAE,IAAa;YAClC,MAAM,EAAE,KAAK;SACA,CAAC;IAClB,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,CAAC,IAAY,EAAE,KAAqD;QACxE,OAAO;YACL,IAAI;YACJ,CAAC,kBAAkB,CAAC,EAAE,IAAa;YACnC,MAAM,EAAE,KAAK;SACC,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,iFAAiF;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,CAAC,IAAY,EAAE,KAAuC;QAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,WAAW,CAAC,IAAY,EAAE,KAAqD;QAC7E,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgC;IAC3D,OAAQ,MAAqB,CAAC,iBAAiB,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAEhF,MAAM,iBAAiB,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAsCrE,iFAAiF;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,CAAC,IAAY,EAAE,KAAuC;QAC1D,OAAO;YACL,IAAI;YACJ,CAAC,iBAAiB,CAAC,EAAE,IAAa;YAClC,CAAC,YAAY,CAAC,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,CAAC,IAAY,EAAE,KAAqD;QACxE,OAAO;YACL,IAAI;YACJ,CAAC,kBAAkB,CAAC,EAAE,IAAa;YACnC,CAAC,YAAY,CAAC,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,iFAAiF;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,CAAC,IAAY,EAAE,KAAuC;QAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,WAAW,CAAC,IAAY,EAAE,KAAqD;QAC7E,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgC;IAC3D,OAAQ,MAAqB,CAAC,iBAAiB,CAAC,CAAC;AACnD,CAAC"}
@@ -5,13 +5,21 @@ import type { BindingIdentifier, Constructor } from "#/types";
5
5
  * @since 0.3.16-canary.0
6
6
  */
7
7
  export declare class BindingRegistry {
8
- private readonly _bindings;
9
- private readonly _byId;
10
- private readonly _simpleNamed;
11
- private readonly _fastDefault;
12
- private readonly _simpleTagged;
13
- /** Add or replace binding using slot-aware last-wins. */
14
- add(binding: Binding): void;
8
+ #private;
9
+ /** Monotonic version — increments on every mutation. */
10
+ get version(): number;
11
+ /**
12
+ * Registers a mutation the indexes don't care about (a fluent chain refining scope or an
13
+ * activation hook in place), so version-stamped resolver caches still invalidate.
14
+ */
15
+ touch(): void;
16
+ /**
17
+ * Add or replace binding using slot-aware last-wins. Returns the displaced binding, if any.
18
+ *
19
+ * @remarks The binding is stored by reference — it must come from `createBinding`, which is
20
+ * what guarantees the single hidden class the resolver's hot reads depend on.
21
+ */
22
+ add(binding: Binding): Binding | undefined;
15
23
  /** Remove all bindings for a token. Returns removed bindings. */
16
24
  removeByToken(token: Token<unknown> | Constructor): Array<Binding>;
17
25
  /** Remove a specific binding by ID. Returns the removed binding or undefined. */
@@ -31,11 +39,7 @@ export declare class BindingRegistry {
31
39
  getFastDefault(token: Token<unknown> | Constructor): Binding | undefined;
32
40
  /** Summarize available slot strings for a token (for error messages). */
33
41
  availableSlotStrings(token: Token<unknown> | Constructor): Array<string>;
34
- private _indexSimpleTaggedBinding;
35
- private _deindexSimpleTaggedBinding;
36
- private _isPurePredicateBinding;
37
- private _indexSimpleNamedBinding;
38
- private _deindexSimpleNamedBinding;
39
- private _refreshFastDefaultForToken;
42
+ /** Whether the deferred table behind `#simpleNamed` has had to be built. */
43
+ get isBuilt(): boolean;
40
44
  }
41
45
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAiB,MAAM,SAAS,CAAC;AAE7E;;GAEG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IAEtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAE/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;IAE/E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAElE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAE9F,yDAAyD;IACzD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsB1B;IAED,iEAAiE;IACjE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAWjE;IAED,iFAAiF;IACjF,UAAU,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAyBrD;IAED,oCAAoC;IACpC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAElE;IAED,yBAAyB;IACzB,OAAO,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAElD;IAED,6CAA6C;IAC7C,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,CAIhD;IAED,oCAAoC;IACpC,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC,CAMpC;IAED,gDAAgD;IAChD,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,CAQ9B;IAED,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAErF;IAED,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAK3G;IAED,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAEvE;IAED,yEAAyE;IACzE,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAGvE;IAED,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,0BAA0B;IAkBlC,OAAO,CAAC,2BAA2B;CAcpC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAiB,MAAM,SAAS,CAAC;AAE7E;;GAEG;AACH,qBAAa,eAAe;;IAe1B,wDAAwD;IACxD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI,CAEZ;IAED;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CA2BzC;IAED,iEAAiE;IACjE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAYjE;IAED,iFAAiF;IACjF,UAAU,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS,CA0BrD;IAED,oCAAoC;IACpC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAElE;IAED,yBAAyB;IACzB,OAAO,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAElD;IAED,6CAA6C;IAC7C,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,CAIhD;IAED,oCAAoC;IACpC,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC,CAMpC;IAED,gDAAgD;IAChD,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,CAS9B;IAED,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAErF;IAED,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAK3G;IAED,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAEvE;IAED,yEAAyE;IACzE,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAGvE;IAwFD,4EAA4E;IAC5E,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
package/dist/registry.js CHANGED
@@ -3,143 +3,170 @@ import { bindingSlotEquals, bindingSlotToString } from "#/binding";
3
3
  * @since 0.3.16-canary.0
4
4
  */
5
5
  export class BindingRegistry {
6
+ // Monotonic mutation counter — lets resolvers version-stamp lookup caches across a container chain.
7
+ #version = 0;
6
8
  // Map from token key -> array of bindings (order matters for last-wins)
7
- _bindings = new Map();
9
+ #bindings = new Map();
8
10
  // Fast lookup by binding ID
9
- _byId = new Map();
10
- // Fast lookup for slot { name, tags: [] }
11
- _simpleNamed = new Map();
11
+ #byId = new Map();
12
+ // Fast lookup for slot { name, tags: [] } — unallocated until a named binding is registered.
13
+ #simpleNamed;
12
14
  // Fast path for one default slot binding with no predicate
13
- _fastDefault = new Map();
14
- // Fast lookup for slot { name: undefined, tags: [[key, value]] } with no predicate
15
- _simpleTagged = new Map();
16
- /** Add or replace binding using slot-aware last-wins. */
15
+ #fastDefault = new Map();
16
+ // Fast lookup for slot { name: undefined, tags: [[key, value]] } with no predicate — likewise
17
+ // unallocated until a tagged binding is registered.
18
+ #simpleTagged;
19
+ /** Monotonic version — increments on every mutation. */
20
+ get version() {
21
+ return this.#version;
22
+ }
23
+ /**
24
+ * Registers a mutation the indexes don't care about (a fluent chain refining scope or an
25
+ * activation hook in place), so version-stamped resolver caches still invalidate.
26
+ */
27
+ touch() {
28
+ this.#version += 1;
29
+ }
30
+ /**
31
+ * Add or replace binding using slot-aware last-wins. Returns the displaced binding, if any.
32
+ *
33
+ * @remarks The binding is stored by reference — it must come from `createBinding`, which is
34
+ * what guarantees the single hidden class the resolver's hot reads depend on.
35
+ */
17
36
  add(binding) {
37
+ this.#version += 1;
18
38
  const key = binding.token;
19
39
  // ✓ TS6.0: Map.getOrInsert (ES2025) replaces the manual get+check+set upsert
20
- const bindingsForToken = this._bindings.getOrInsert(key, []);
40
+ const bindingsForToken = this.#bindings.getOrInsert(key, []);
21
41
  // Only apply last-wins for slot-based bindings (not predicate-only)
22
- if (!this._isPurePredicateBinding(binding)) {
23
- const existingIndex = bindingsForToken.findIndex((candidate) => !this._isPurePredicateBinding(candidate) && bindingSlotEquals(candidate.slot, binding.slot));
42
+ let displacedBinding;
43
+ if (!this.#isPurePredicateBinding(binding)) {
44
+ const existingIndex = bindingsForToken.findIndex((candidate) => !this.#isPurePredicateBinding(candidate) && bindingSlotEquals(candidate.slot, binding.slot));
24
45
  if (existingIndex !== -1) {
25
- const replacedBinding = bindingsForToken[existingIndex];
26
- this._byId.delete(replacedBinding.id);
46
+ displacedBinding = bindingsForToken[existingIndex];
47
+ this.#byId.delete(displacedBinding.id);
27
48
  bindingsForToken.splice(existingIndex, 1);
49
+ this.#deindexSimpleNamedBinding(key, displacedBinding);
50
+ this.#deindexSimpleTaggedBinding(key, displacedBinding);
28
51
  }
29
52
  }
30
53
  bindingsForToken.push(binding);
31
- this._byId.set(binding.id, binding);
32
- this._indexSimpleNamedBinding(key, binding);
33
- this._indexSimpleTaggedBinding(key, binding);
34
- this._refreshFastDefaultForToken(key);
54
+ this.#byId.set(binding.id, binding);
55
+ this.#indexSimpleNamedBinding(key, binding);
56
+ this.#indexSimpleTaggedBinding(key, binding);
57
+ this.#refreshFastDefaultForToken(key);
58
+ return displacedBinding;
35
59
  }
36
60
  /** Remove all bindings for a token. Returns removed bindings. */
37
61
  removeByToken(token) {
62
+ this.#version += 1;
38
63
  const key = token;
39
- const bindingsForToken = this._bindings.get(key) ?? [];
40
- this._bindings.delete(key);
41
- this._simpleNamed.delete(key);
42
- this._simpleTagged.delete(key);
43
- this._fastDefault.delete(key);
64
+ const bindingsForToken = this.#bindings.get(key) ?? [];
65
+ this.#bindings.delete(key);
66
+ this.#simpleNamed?.delete(key);
67
+ this.#simpleTagged?.delete(key);
68
+ this.#fastDefault.delete(key);
44
69
  for (const binding of bindingsForToken) {
45
- this._byId.delete(binding.id);
70
+ this.#byId.delete(binding.id);
46
71
  }
47
72
  return bindingsForToken;
48
73
  }
49
74
  /** Remove a specific binding by ID. Returns the removed binding or undefined. */
50
75
  removeById(id) {
51
- const binding = this._byId.get(id);
76
+ const binding = this.#byId.get(id);
52
77
  if (binding === undefined) {
53
78
  return undefined;
54
79
  }
55
- this._byId.delete(id);
80
+ this.#version += 1;
81
+ this.#byId.delete(id);
56
82
  const key = binding.token;
57
- const bindingsForToken = this._bindings.get(key);
83
+ const bindingsForToken = this.#bindings.get(key);
58
84
  if (bindingsForToken !== undefined) {
59
85
  const bindingIndex = bindingsForToken.findIndex((candidate) => candidate.id === id);
60
86
  if (bindingIndex !== -1) {
61
87
  bindingsForToken.splice(bindingIndex, 1);
62
88
  }
63
- this._deindexSimpleNamedBinding(key, binding);
64
- this._deindexSimpleTaggedBinding(key, binding);
89
+ this.#deindexSimpleNamedBinding(key, binding);
90
+ this.#deindexSimpleTaggedBinding(key, binding);
65
91
  if (bindingsForToken.length === 0) {
66
- this._bindings.delete(key);
67
- this._simpleNamed.delete(key);
68
- this._simpleTagged.delete(key);
69
- this._fastDefault.delete(key);
92
+ this.#bindings.delete(key);
93
+ this.#simpleNamed?.delete(key);
94
+ this.#simpleTagged?.delete(key);
95
+ this.#fastDefault.delete(key);
70
96
  }
71
97
  else {
72
- this._refreshFastDefaultForToken(key);
98
+ this.#refreshFastDefaultForToken(key);
73
99
  }
74
100
  }
75
101
  return binding;
76
102
  }
77
103
  /** Get all bindings for a token. */
78
104
  getAll(token) {
79
- return this._bindings.get(token) ?? [];
105
+ return this.#bindings.get(token) ?? [];
80
106
  }
81
107
  /** Get binding by ID. */
82
108
  getById(id) {
83
- return this._byId.get(id);
109
+ return this.#byId.get(id);
84
110
  }
85
111
  /** Check if any binding exists for token. */
86
112
  has(token) {
87
113
  const key = token;
88
- const list = this._bindings.get(key);
114
+ const list = this.#bindings.get(key);
89
115
  return list !== undefined && list.length > 0;
90
116
  }
91
117
  /** All bindings in the registry. */
92
118
  allBindings() {
93
119
  const allBindings = [];
94
- for (const bindingsForToken of this._bindings.values()) {
120
+ for (const bindingsForToken of this.#bindings.values()) {
95
121
  allBindings.push(...bindingsForToken);
96
122
  }
97
123
  return allBindings;
98
124
  }
99
125
  /** Remove all bindings. Returns all removed. */
100
126
  clear() {
127
+ this.#version += 1;
101
128
  const all = this.allBindings();
102
- this._bindings.clear();
103
- this._byId.clear();
104
- this._simpleNamed.clear();
105
- this._simpleTagged.clear();
106
- this._fastDefault.clear();
129
+ this.#bindings.clear();
130
+ this.#byId.clear();
131
+ this.#simpleNamed?.clear();
132
+ this.#simpleTagged?.clear();
133
+ this.#fastDefault.clear();
107
134
  return all;
108
135
  }
109
136
  getSimpleNamed(token, name) {
110
- return this._simpleNamed.get(token)?.get(name);
137
+ return this.#simpleNamed?.get(token)?.get(name);
111
138
  }
112
139
  getSimpleTagged(token, tagKey, tagValue) {
113
- return this._simpleTagged
114
- .get(token)
140
+ return this.#simpleTagged
141
+ ?.get(token)
115
142
  ?.get(tagKey)
116
143
  ?.get(tagValue);
117
144
  }
118
145
  getFastDefault(token) {
119
- return this._fastDefault.get(token);
146
+ return this.#fastDefault.get(token);
120
147
  }
121
148
  /** Summarize available slot strings for a token (for error messages). */
122
149
  availableSlotStrings(token) {
123
- const bindingsForToken = this._bindings.get(token) ?? [];
150
+ const bindingsForToken = this.#bindings.get(token) ?? [];
124
151
  return bindingsForToken.map((binding) => bindingSlotToString(binding.slot));
125
152
  }
126
- _indexSimpleTaggedBinding(tokenKey, binding) {
153
+ #indexSimpleTaggedBinding(tokenKey, binding) {
127
154
  const slot = binding.slot;
128
155
  if (slot.name !== undefined || slot.tags.length !== 1 || binding.predicate !== undefined) {
129
156
  return;
130
157
  }
131
158
  const [tagKey, tagValue] = slot.tags[0];
132
- const byTagKey = this._simpleTagged.getOrInsert(tokenKey, new Map());
159
+ const byTagKey = (this.#simpleTagged ??= new Map()).getOrInsert(tokenKey, new Map());
133
160
  const byTagValue = byTagKey.getOrInsert(tagKey, new Map());
134
161
  byTagValue.set(tagValue, binding);
135
162
  }
136
- _deindexSimpleTaggedBinding(tokenKey, binding) {
163
+ #deindexSimpleTaggedBinding(tokenKey, binding) {
137
164
  const slot = binding.slot;
138
165
  if (slot.name !== undefined || slot.tags.length !== 1 || binding.predicate !== undefined) {
139
166
  return;
140
167
  }
141
168
  const [tagKey, tagValue] = slot.tags[0];
142
- const byTagKey = this._simpleTagged.get(tokenKey);
169
+ const byTagKey = this.#simpleTagged?.get(tokenKey);
143
170
  if (byTagKey === undefined) {
144
171
  return;
145
172
  }
@@ -153,32 +180,32 @@ export class BindingRegistry {
153
180
  if (byTagValue.size === 0) {
154
181
  byTagKey.delete(tagKey);
155
182
  if (byTagKey.size === 0) {
156
- this._simpleTagged.delete(tokenKey);
183
+ this.#simpleTagged.delete(tokenKey);
157
184
  }
158
185
  }
159
186
  }
160
187
  }
161
- _isPurePredicateBinding(binding) {
188
+ #isPurePredicateBinding(binding) {
162
189
  const slot = binding.slot;
163
190
  const hasPredicate = binding.predicate !== undefined;
164
191
  const hasConstraint = slot.name !== undefined || slot.tags.length > 0;
165
192
  // Pure predicate = has predicate but no slot constraint (name/tags)
166
193
  return hasPredicate && !hasConstraint;
167
194
  }
168
- _indexSimpleNamedBinding(tokenKey, binding) {
195
+ #indexSimpleNamedBinding(tokenKey, binding) {
169
196
  const slot = binding.slot;
170
197
  if (slot.name === undefined || slot.tags.length > 0) {
171
198
  return;
172
199
  }
173
- const bindingsByName = this._simpleNamed.getOrInsert(tokenKey, new Map());
200
+ const bindingsByName = (this.#simpleNamed ??= new Map()).getOrInsert(tokenKey, new Map());
174
201
  bindingsByName.set(slot.name, binding);
175
202
  }
176
- _deindexSimpleNamedBinding(tokenKey, binding) {
203
+ #deindexSimpleNamedBinding(tokenKey, binding) {
177
204
  const slot = binding.slot;
178
205
  if (slot.name === undefined || slot.tags.length > 0) {
179
206
  return;
180
207
  }
181
- const bindingsByName = this._simpleNamed.get(tokenKey);
208
+ const bindingsByName = this.#simpleNamed?.get(tokenKey);
182
209
  if (bindingsByName === undefined) {
183
210
  return;
184
211
  }
@@ -186,23 +213,27 @@ export class BindingRegistry {
186
213
  if (currentBinding?.id === binding.id) {
187
214
  bindingsByName.delete(slot.name);
188
215
  if (bindingsByName.size === 0) {
189
- this._simpleNamed.delete(tokenKey);
216
+ this.#simpleNamed.delete(tokenKey);
190
217
  }
191
218
  }
192
219
  }
193
- _refreshFastDefaultForToken(tokenKey) {
194
- const bindingsForToken = this._bindings.get(tokenKey);
220
+ #refreshFastDefaultForToken(tokenKey) {
221
+ const bindingsForToken = this.#bindings.get(tokenKey);
195
222
  if (bindingsForToken === undefined || bindingsForToken.length !== 1) {
196
- this._fastDefault.delete(tokenKey);
223
+ this.#fastDefault.delete(tokenKey);
197
224
  return;
198
225
  }
199
226
  const onlyBinding = bindingsForToken[0];
200
227
  const isDefaultSlot = onlyBinding.slot.name === undefined && onlyBinding.slot.tags.length === 0;
201
228
  if (!isDefaultSlot || onlyBinding.predicate !== undefined) {
202
- this._fastDefault.delete(tokenKey);
229
+ this.#fastDefault.delete(tokenKey);
203
230
  return;
204
231
  }
205
- this._fastDefault.set(tokenKey, onlyBinding);
232
+ this.#fastDefault.set(tokenKey, onlyBinding);
233
+ }
234
+ /** Whether the deferred table behind `#simpleNamed` has had to be built. */
235
+ get isBuilt() {
236
+ return this.#simpleNamed !== undefined;
206
237
  }
207
238
  }
208
239
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Per binding: does resolving it have to go through the activation pipeline?
3
+ *
4
+ * @remarks Versioned on the lifecycle manager, since `onActivation` can be registered at any time.
5
+ */
6
+ import type { Binding } from "#/binding";
7
+ import type { ClassIntrospector } from "#/resolution/class-introspector";
8
+ import type { LifecycleManager } from "#/resolution/lifecycle";
9
+ /**
10
+ * @since 0.5.0-canary.8
11
+ */
12
+ export declare class ActivationNeedCache {
13
+ #private;
14
+ constructor(lifecycle: LifecycleManager, classes: ClassIntrospector);
15
+ needsActivation<const Value>(binding: Binding<Value>): boolean;
16
+ /**
17
+ * Settles a class binding's answer once its lifecycle metadata has actually been read, which
18
+ * only happens on the first instantiation.
19
+ *
20
+ * @returns the answer to use for this resolve — possibly now `false` where it was a
21
+ * conservative `true`.
22
+ */
23
+ refreshAfterFirstInstantiation<Value>(binding: Binding<Value>, needsActivation: boolean): boolean;
24
+ }
25
+ //# sourceMappingURL=activation-need.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-need.d.ts","sourceRoot":"","sources":["../../src/resolution/activation-need.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,qBAAa,mBAAmB;;IAM9B,YAAY,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAGlE;IAED,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAwB7D;IAED;;;;;;OAMG;IACH,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAOhG;CAgBF"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @since 0.5.0-canary.8
3
+ */
4
+ export class ActivationNeedCache {
5
+ #needByBindingId = new Map();
6
+ #version = -1;
7
+ #lifecycle;
8
+ #classes;
9
+ constructor(lifecycle, classes) {
10
+ this.#lifecycle = lifecycle;
11
+ this.#classes = classes;
12
+ }
13
+ needsActivation(binding) {
14
+ const lifecycleVersion = this.#lifecycle.activationVersion;
15
+ // No hooks registered anywhere and none on the binding: only classes can still surprise us,
16
+ // via a @postConstruct we have not looked for yet.
17
+ if (lifecycleVersion === 0 &&
18
+ binding.kind !== "class" &&
19
+ binding.kind !== "alias" &&
20
+ binding.onActivation === undefined) {
21
+ return false;
22
+ }
23
+ if (this.#version !== lifecycleVersion) {
24
+ this.#needByBindingId.clear();
25
+ this.#version = lifecycleVersion;
26
+ }
27
+ const cached = this.#needByBindingId.get(binding.id);
28
+ if (cached !== undefined) {
29
+ return cached;
30
+ }
31
+ const needsActivation = binding.kind === "class" ? this.#classNeedsActivation(binding) : this.#nonClassNeedsActivation(binding);
32
+ this.#needByBindingId.set(binding.id, needsActivation);
33
+ return needsActivation;
34
+ }
35
+ /**
36
+ * Settles a class binding's answer once its lifecycle metadata has actually been read, which
37
+ * only happens on the first instantiation.
38
+ *
39
+ * @returns the answer to use for this resolve — possibly now `false` where it was a
40
+ * conservative `true`.
41
+ */
42
+ refreshAfterFirstInstantiation(binding, needsActivation) {
43
+ if (binding.kind !== "class" || this.#classes.knownPostConstruct(binding.target) !== undefined) {
44
+ return needsActivation;
45
+ }
46
+ this.#classes.discoverPostConstruct(binding.target);
47
+ this.#needByBindingId.delete(binding.id);
48
+ return this.needsActivation(binding);
49
+ }
50
+ #classNeedsActivation(binding) {
51
+ if (this.#lifecycle.hasActivationHandlers(binding.token) || binding.onActivation !== undefined) {
52
+ return true;
53
+ }
54
+ // Unknown lifecycle metadata: activate once so the first instantiation can settle it.
55
+ return this.#classes.knownPostConstruct(binding.target) !== false;
56
+ }
57
+ #nonClassNeedsActivation(binding) {
58
+ if (binding.kind !== "alias" && binding.onActivation !== undefined) {
59
+ return true;
60
+ }
61
+ return this.#lifecycle.hasActivationHandlers(binding.token);
62
+ }
63
+ }
64
+ //# sourceMappingURL=activation-need.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-need.js","sourceRoot":"","sources":["../../src/resolution/activation-need.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACrB,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClE,QAAQ,GAAG,CAAC,CAAC,CAAC;IACL,UAAU,CAAmB;IAC7B,QAAQ,CAAoB;IAErC,YAAY,SAA2B,EAAE,OAA0B;QACjE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,eAAe,CAAc,OAAuB;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC3D,4FAA4F;QAC5F,mDAAmD;QACnD,IACE,gBAAgB,KAAK,CAAC;YACtB,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,OAAO,CAAC,YAAY,KAAK,SAAS,EAClC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC1G,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QACvD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,8BAA8B,CAAQ,OAAuB,EAAE,eAAwB;QACrF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/F,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,qBAAqB,CAAc,OAA2C;QAC5E,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,sFAAsF;QACtF,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;IACpE,CAAC;IAED,wBAAwB,CAAc,OAAuB;QAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACF"}