@codefast/di 0.5.0 → 0.6.1

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 (266) hide show
  1. package/CHANGELOG.md +712 -0
  2. package/README.md +119 -30
  3. package/dist/ambient/active-container.d.ts +37 -0
  4. package/dist/ambient/active-container.d.ts.map +1 -0
  5. package/dist/ambient/active-container.js +41 -0
  6. package/dist/ambient/active-container.js.map +1 -0
  7. package/dist/container/binding-builders.d.ts +12 -8
  8. package/dist/container/binding-builders.d.ts.map +1 -1
  9. package/dist/container/binding-builders.js +62 -31
  10. package/dist/container/binding-builders.js.map +1 -1
  11. package/dist/container/container.d.ts +33 -19
  12. package/dist/container/container.d.ts.map +1 -1
  13. package/dist/container/container.js +281 -118
  14. package/dist/container/container.js.map +1 -1
  15. package/dist/{resolution → core}/binding-scope.d.ts +2 -2
  16. package/dist/core/binding-scope.d.ts.map +1 -0
  17. package/dist/core/binding-scope.js.map +1 -0
  18. package/dist/{binding.d.ts → core/binding.d.ts} +70 -15
  19. package/dist/core/binding.d.ts.map +1 -0
  20. package/dist/{binding.js → core/binding.js} +27 -12
  21. package/dist/core/binding.js.map +1 -0
  22. package/dist/core/constraint-requirement.d.ts +53 -0
  23. package/dist/core/constraint-requirement.d.ts.map +1 -0
  24. package/dist/core/constraint-requirement.js +62 -0
  25. package/dist/core/constraint-requirement.js.map +1 -0
  26. package/dist/{constructor-type.d.ts → core/constructor-type.d.ts} +1 -1
  27. package/dist/core/constructor-type.d.ts.map +1 -0
  28. package/dist/core/constructor-type.js.map +1 -0
  29. package/dist/{module.d.ts → core/module.d.ts} +5 -5
  30. package/dist/core/module.d.ts.map +1 -0
  31. package/dist/{module.js → core/module.js} +4 -4
  32. package/dist/core/module.js.map +1 -0
  33. package/dist/{registry.d.ts → core/registry.d.ts} +27 -7
  34. package/dist/core/registry.d.ts.map +1 -0
  35. package/dist/{registry.js → core/registry.js} +125 -52
  36. package/dist/core/registry.js.map +1 -0
  37. package/dist/core/tag.d.ts +80 -0
  38. package/dist/core/tag.d.ts.map +1 -0
  39. package/dist/core/tag.js +96 -0
  40. package/dist/core/tag.js.map +1 -0
  41. package/dist/{token.d.ts → core/token.d.ts} +2 -6
  42. package/dist/core/token.d.ts.map +1 -0
  43. package/dist/core/token.js +13 -0
  44. package/dist/core/token.js.map +1 -0
  45. package/dist/{types.d.ts → core/types.d.ts} +27 -21
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js.map +1 -0
  48. package/dist/decorators/inject.d.ts +5 -49
  49. package/dist/decorators/inject.d.ts.map +1 -1
  50. package/dist/decorators/inject.js +34 -104
  51. package/dist/decorators/inject.js.map +1 -1
  52. package/dist/decorators/injectable.d.ts +25 -5
  53. package/dist/decorators/injectable.d.ts.map +1 -1
  54. package/dist/decorators/injectable.js +2 -3
  55. package/dist/decorators/injectable.js.map +1 -1
  56. package/dist/decorators/lifecycle-decorators.d.ts +4 -2
  57. package/dist/decorators/lifecycle-decorators.d.ts.map +1 -1
  58. package/dist/decorators/lifecycle-decorators.js +19 -25
  59. package/dist/decorators/lifecycle-decorators.js.map +1 -1
  60. package/dist/{resolution → errors}/diagnostics.d.ts +2 -0
  61. package/dist/errors/diagnostics.d.ts.map +1 -0
  62. package/dist/errors/diagnostics.js.map +1 -0
  63. package/dist/{errors.d.ts → errors/errors.d.ts} +89 -4
  64. package/dist/errors/errors.d.ts.map +1 -0
  65. package/dist/{errors.js → errors/errors.js} +129 -7
  66. package/dist/errors/errors.js.map +1 -0
  67. package/dist/index.d.ts +21 -14
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +15 -7
  70. package/dist/index.js.map +1 -1
  71. package/dist/injection/descriptor.d.ts +79 -0
  72. package/dist/injection/descriptor.d.ts.map +1 -0
  73. package/dist/injection/descriptor.js +118 -0
  74. package/dist/injection/descriptor.js.map +1 -0
  75. package/dist/{resolution → injection}/resolve-options.d.ts +21 -11
  76. package/dist/injection/resolve-options.d.ts.map +1 -0
  77. package/dist/injection/resolve-options.js +101 -0
  78. package/dist/injection/resolve-options.js.map +1 -0
  79. package/dist/introspection/dependency-graph.d.ts +16 -5
  80. package/dist/introspection/dependency-graph.d.ts.map +1 -1
  81. package/dist/introspection/dependency-graph.js +138 -57
  82. package/dist/introspection/dependency-graph.js.map +1 -1
  83. package/dist/introspection/graph-adapters/cytoscape.d.ts +6 -3
  84. package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -1
  85. package/dist/introspection/graph-adapters/cytoscape.js +3 -0
  86. package/dist/introspection/graph-adapters/cytoscape.js.map +1 -1
  87. package/dist/introspection/graph-adapters/dot.d.ts.map +1 -1
  88. package/dist/introspection/graph-adapters/dot.js +12 -5
  89. package/dist/introspection/graph-adapters/dot.js.map +1 -1
  90. package/dist/introspection/graph-adapters/mermaid.d.ts +9 -0
  91. package/dist/introspection/graph-adapters/mermaid.d.ts.map +1 -0
  92. package/dist/introspection/graph-adapters/mermaid.js +47 -0
  93. package/dist/introspection/graph-adapters/mermaid.js.map +1 -0
  94. package/dist/introspection/graph-adapters/reactflow.d.ts +6 -3
  95. package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -1
  96. package/dist/introspection/graph-adapters/reactflow.js +5 -1
  97. package/dist/introspection/graph-adapters/reactflow.js.map +1 -1
  98. package/dist/introspection/inspector.d.ts +4 -4
  99. package/dist/introspection/inspector.d.ts.map +1 -1
  100. package/dist/introspection/inspector.js +10 -6
  101. package/dist/introspection/inspector.js.map +1 -1
  102. package/dist/lifecycle/lifecycle-manager.d.ts +27 -0
  103. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
  104. package/dist/{resolution/lifecycle.js → lifecycle/lifecycle-manager.js} +39 -9
  105. package/dist/lifecycle/lifecycle-manager.js.map +1 -0
  106. package/dist/lifecycle/scope-manager.d.ts +48 -0
  107. package/dist/lifecycle/scope-manager.d.ts.map +1 -0
  108. package/dist/lifecycle/scope-manager.js +135 -0
  109. package/dist/lifecycle/scope-manager.js.map +1 -0
  110. package/dist/metadata/metadata-reader-token.d.ts +1 -1
  111. package/dist/metadata/metadata-reader-token.d.ts.map +1 -1
  112. package/dist/metadata/metadata-reader-token.js +1 -1
  113. package/dist/metadata/metadata-reader-token.js.map +1 -1
  114. package/dist/metadata/metadata-types.d.ts +9 -9
  115. package/dist/metadata/metadata-types.d.ts.map +1 -1
  116. package/dist/metadata/symbol-metadata-reader.d.ts +19 -6
  117. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
  118. package/dist/metadata/symbol-metadata-reader.js +89 -9
  119. package/dist/metadata/symbol-metadata-reader.js.map +1 -1
  120. package/dist/metadata/verifying-metadata-reader.d.ts +16 -0
  121. package/dist/metadata/verifying-metadata-reader.d.ts.map +1 -0
  122. package/dist/metadata/verifying-metadata-reader.js +32 -0
  123. package/dist/metadata/verifying-metadata-reader.js.map +1 -0
  124. package/dist/resolution/{activation-need.d.ts → cache/activation-need.d.ts} +5 -5
  125. package/dist/resolution/cache/activation-need.d.ts.map +1 -0
  126. package/dist/resolution/cache/activation-need.js.map +1 -0
  127. package/dist/resolution/{binding-lookup-cache.d.ts → cache/binding-lookup-cache.d.ts} +9 -5
  128. package/dist/resolution/cache/binding-lookup-cache.d.ts.map +1 -0
  129. package/dist/resolution/{binding-lookup-cache.js → cache/binding-lookup-cache.js} +55 -0
  130. package/dist/resolution/cache/binding-lookup-cache.js.map +1 -0
  131. package/dist/resolution/cache/class-introspector.d.ts +66 -0
  132. package/dist/resolution/cache/class-introspector.d.ts.map +1 -0
  133. package/dist/resolution/cache/class-introspector.js +194 -0
  134. package/dist/resolution/cache/class-introspector.js.map +1 -0
  135. package/dist/resolution/context.d.ts +84 -0
  136. package/dist/resolution/context.d.ts.map +1 -0
  137. package/dist/resolution/{environment.js → context.js} +54 -80
  138. package/dist/resolution/context.js.map +1 -0
  139. package/dist/resolution/path/resolution-path.d.ts +94 -0
  140. package/dist/resolution/path/resolution-path.d.ts.map +1 -0
  141. package/dist/resolution/path/resolution-path.js +117 -0
  142. package/dist/resolution/path/resolution-path.js.map +1 -0
  143. package/dist/resolution/{instantiation-plan.d.ts → plan/instantiation-plan.d.ts} +37 -7
  144. package/dist/resolution/plan/instantiation-plan.d.ts.map +1 -0
  145. package/dist/resolution/plan/instantiation-plan.js +419 -0
  146. package/dist/resolution/plan/instantiation-plan.js.map +1 -0
  147. package/dist/resolution/resolver.d.ts +28 -28
  148. package/dist/resolution/resolver.d.ts.map +1 -1
  149. package/dist/resolution/resolver.js +581 -239
  150. package/dist/resolution/resolver.js.map +1 -1
  151. package/dist/resolution/select/binding-select.d.ts +34 -0
  152. package/dist/resolution/select/binding-select.d.ts.map +1 -0
  153. package/dist/resolution/select/binding-select.js +175 -0
  154. package/dist/resolution/select/binding-select.js.map +1 -0
  155. package/dist/resolution/{constraints.d.ts → select/constraints.d.ts} +13 -12
  156. package/dist/resolution/select/constraints.d.ts.map +1 -0
  157. package/dist/resolution/{constraints.js → select/constraints.js} +33 -22
  158. package/dist/resolution/select/constraints.js.map +1 -0
  159. package/package.json +160 -20
  160. package/src/ambient/active-container.ts +65 -0
  161. package/src/container/binding-builders.ts +79 -44
  162. package/src/container/container.ts +357 -170
  163. package/src/{resolution → core}/binding-scope.ts +2 -2
  164. package/src/{binding.ts → core/binding.ts} +101 -39
  165. package/src/core/constraint-requirement.ts +94 -0
  166. package/src/{constructor-type.ts → core/constructor-type.ts} +1 -1
  167. package/src/{module.ts → core/module.ts} +10 -10
  168. package/src/core/registry.ts +365 -0
  169. package/src/core/tag.ts +158 -0
  170. package/src/{token.ts → core/token.ts} +2 -14
  171. package/src/{types.ts → core/types.ts} +37 -34
  172. package/src/decorators/inject.ts +39 -175
  173. package/src/decorators/injectable.ts +40 -10
  174. package/src/decorators/lifecycle-decorators.ts +22 -34
  175. package/src/{resolution → errors}/diagnostics.ts +2 -0
  176. package/src/{errors.ts → errors/errors.ts} +152 -8
  177. package/src/index.ts +43 -15
  178. package/src/injection/descriptor.ts +206 -0
  179. package/src/injection/resolve-options.ts +144 -0
  180. package/src/introspection/dependency-graph.ts +223 -63
  181. package/src/introspection/graph-adapters/cytoscape.ts +9 -3
  182. package/src/introspection/graph-adapters/dot.ts +13 -5
  183. package/src/introspection/graph-adapters/mermaid.ts +61 -0
  184. package/src/introspection/graph-adapters/reactflow.ts +11 -4
  185. package/src/introspection/inspector.ts +16 -12
  186. package/src/{resolution/lifecycle.ts → lifecycle/lifecycle-manager.ts} +68 -32
  187. package/src/lifecycle/scope-manager.ts +156 -0
  188. package/src/metadata/metadata-reader-token.ts +2 -2
  189. package/src/metadata/metadata-types.ts +9 -9
  190. package/src/metadata/symbol-metadata-reader.ts +95 -18
  191. package/src/metadata/verifying-metadata-reader.ts +41 -0
  192. package/src/resolution/{activation-need.ts → cache/activation-need.ts} +8 -8
  193. package/src/resolution/{binding-lookup-cache.ts → cache/binding-lookup-cache.ts} +63 -5
  194. package/src/resolution/cache/class-introspector.ts +251 -0
  195. package/src/resolution/{environment.ts → context.ts} +84 -145
  196. package/src/resolution/path/resolution-path.ts +167 -0
  197. package/src/resolution/plan/instantiation-plan.ts +615 -0
  198. package/src/resolution/resolver.ts +663 -313
  199. package/src/resolution/select/binding-select.ts +210 -0
  200. package/src/resolution/select/constraints.ts +130 -0
  201. package/dist/binding.d.ts.map +0 -1
  202. package/dist/binding.js.map +0 -1
  203. package/dist/constructor-type.d.ts.map +0 -1
  204. package/dist/constructor-type.js.map +0 -1
  205. package/dist/errors.d.ts.map +0 -1
  206. package/dist/errors.js.map +0 -1
  207. package/dist/module.d.ts.map +0 -1
  208. package/dist/module.js.map +0 -1
  209. package/dist/registry.d.ts.map +0 -1
  210. package/dist/registry.js.map +0 -1
  211. package/dist/resolution/activation-need.d.ts.map +0 -1
  212. package/dist/resolution/activation-need.js.map +0 -1
  213. package/dist/resolution/binding-lookup-cache.d.ts.map +0 -1
  214. package/dist/resolution/binding-lookup-cache.js.map +0 -1
  215. package/dist/resolution/binding-scope.d.ts.map +0 -1
  216. package/dist/resolution/binding-scope.js.map +0 -1
  217. package/dist/resolution/binding-select.d.ts +0 -23
  218. package/dist/resolution/binding-select.d.ts.map +0 -1
  219. package/dist/resolution/binding-select.js +0 -121
  220. package/dist/resolution/binding-select.js.map +0 -1
  221. package/dist/resolution/class-introspector.d.ts +0 -27
  222. package/dist/resolution/class-introspector.d.ts.map +0 -1
  223. package/dist/resolution/class-introspector.js +0 -60
  224. package/dist/resolution/class-introspector.js.map +0 -1
  225. package/dist/resolution/constraints.d.ts.map +0 -1
  226. package/dist/resolution/constraints.js.map +0 -1
  227. package/dist/resolution/diagnostics.d.ts.map +0 -1
  228. package/dist/resolution/diagnostics.js.map +0 -1
  229. package/dist/resolution/environment.d.ts +0 -94
  230. package/dist/resolution/environment.d.ts.map +0 -1
  231. package/dist/resolution/environment.js.map +0 -1
  232. package/dist/resolution/instantiation-plan.d.ts.map +0 -1
  233. package/dist/resolution/instantiation-plan.js +0 -183
  234. package/dist/resolution/instantiation-plan.js.map +0 -1
  235. package/dist/resolution/lifecycle.d.ts +0 -23
  236. package/dist/resolution/lifecycle.d.ts.map +0 -1
  237. package/dist/resolution/lifecycle.js.map +0 -1
  238. package/dist/resolution/resolution-path.d.ts +0 -98
  239. package/dist/resolution/resolution-path.d.ts.map +0 -1
  240. package/dist/resolution/resolution-path.js +0 -98
  241. package/dist/resolution/resolution-path.js.map +0 -1
  242. package/dist/resolution/resolve-options.d.ts.map +0 -1
  243. package/dist/resolution/resolve-options.js +0 -56
  244. package/dist/resolution/resolve-options.js.map +0 -1
  245. package/dist/resolution/scope.d.ts +0 -28
  246. package/dist/resolution/scope.d.ts.map +0 -1
  247. package/dist/resolution/scope.js +0 -88
  248. package/dist/resolution/scope.js.map +0 -1
  249. package/dist/token.d.ts.map +0 -1
  250. package/dist/token.js +0 -22
  251. package/dist/token.js.map +0 -1
  252. package/dist/types.d.ts.map +0 -1
  253. package/dist/types.js.map +0 -1
  254. package/src/registry.ts +0 -282
  255. package/src/resolution/binding-select.ts +0 -154
  256. package/src/resolution/class-introspector.ts +0 -74
  257. package/src/resolution/constraints.ts +0 -121
  258. package/src/resolution/instantiation-plan.ts +0 -292
  259. package/src/resolution/resolution-path.ts +0 -156
  260. package/src/resolution/resolve-options.ts +0 -89
  261. package/src/resolution/scope.ts +0 -105
  262. /package/dist/{resolution → core}/binding-scope.js +0 -0
  263. /package/dist/{constructor-type.js → core/constructor-type.js} +0 -0
  264. /package/dist/{types.js → core/types.js} +0 -0
  265. /package/dist/{resolution → errors}/diagnostics.js +0 -0
  266. /package/dist/resolution/{activation-need.js → cache/activation-need.js} +0 -0
@@ -1,9 +1,9 @@
1
- import type { Constructor } from "#/constructor-type";
1
+ import type { Constructor } from "#/core/constructor-type";
2
2
  declare const TOKEN_BRAND: unique symbol;
3
3
  /**
4
4
  * @since 0.3.16-canary.0
5
5
  */
6
- export interface Token<Value> {
6
+ export interface Token<out Value> {
7
7
  readonly name: string;
8
8
  readonly [TOKEN_BRAND]: Value;
9
9
  }
@@ -15,9 +15,5 @@ export declare function token<Value>(name: string): Token<Value>;
15
15
  * @since 0.3.16-canary.0
16
16
  */
17
17
  export declare function tokenName(dependency: Token<unknown> | Constructor): string;
18
- /**
19
- * @since 0.3.16-canary.0
20
- */
21
- export declare function isToken(value: unknown): value is Token<unknown>;
22
18
  export {};
23
19
  //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,CAAC,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,KAAK,CAAC,GAAG,CAAC,KAAK;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,CAE1E"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @since 0.3.16-canary.0
3
+ */
4
+ export function token(name) {
5
+ return { name };
6
+ }
7
+ /**
8
+ * @since 0.3.16-canary.0
9
+ */
10
+ export function tokenName(dependency) {
11
+ return dependency.name;
12
+ }
13
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,UAAU,KAAK,CAAQ,IAAY;IACvC,OAAO,EAAE,IAAI,EAAkB,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,UAAwC;IAChE,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC"}
@@ -1,12 +1,8 @@
1
- import type { Constructor } from "#/constructor-type";
2
- import type { Token } from "#/token";
3
- export type { Constructor } from "#/constructor-type";
4
- /**
5
- * A single [tag, value] pair used in slot constraints and resolve options.
6
- *
7
- * @since 0.3.16-canary.0
8
- */
9
- export type BindingTag = readonly [tag: string, value: unknown];
1
+ import type { Constructor } from "#/core/constructor-type";
2
+ import type { BindingTag, TagKeyMask } from "#/core/tag";
3
+ import type { Token } from "#/core/token";
4
+ export type { Constructor } from "#/core/constructor-type";
5
+ export type { BindingTag, TagKey, TagKeyMask } from "#/core/tag";
10
6
  /**
11
7
  * Token or class constructor used as a binding / injection / resolve key.
12
8
  *
@@ -40,13 +36,15 @@ export type DeactivationHandler<Value> = (instance: Value) => void | Promise<voi
40
36
  * @since 0.3.16-canary.0
41
37
  */
42
38
  export interface ResolveOptions {
43
- name?: string;
39
+ name?: string | undefined;
44
40
  /**
45
- * Single-tag shorthand — semantics match including one pair in `tags`.
46
- * Enables fast-path lookup alongside `tags`.
41
+ * Single-tag shorthand, equivalent to listing the one pair in `tags`.
42
+ *
43
+ * @remarks Reaches the same tagged index, so choosing it costs nothing. `InjectOptions` accepts it
44
+ * too and folds it into `tags`. Only `tags` expresses a request for more than one tag.
47
45
  */
48
- tag?: BindingTag;
49
- tags?: ReadonlyArray<BindingTag>;
46
+ tag?: BindingTag | undefined;
47
+ tags?: ReadonlyArray<BindingTag> | undefined;
50
48
  }
51
49
  /**
52
50
  * @since 0.3.16-canary.0
@@ -59,6 +57,7 @@ export interface ResolutionFrame {
59
57
  readonly slot: {
60
58
  readonly name: string | undefined;
61
59
  readonly tags: ReadonlyArray<BindingTag>;
60
+ readonly keyMask: TagKeyMask;
62
61
  };
63
62
  }
64
63
  /**
@@ -69,18 +68,25 @@ export interface ConstraintContext {
69
68
  readonly resolutionStack: ReadonlyArray<ResolutionFrame>;
70
69
  readonly parent: ResolutionFrame | undefined;
71
70
  readonly ancestors: ReadonlyArray<ResolutionFrame>;
72
- readonly currentResolveOptions: ResolveOptions | undefined;
71
+ /** Readonly because one frozen object answers every resolve of a slot — a write would throw. */
72
+ readonly currentResolveOptions: Readonly<ResolveOptions> | undefined;
73
73
  }
74
+ /**
75
+ * The predicate `when()` selects a binding by, and the shape every `when*` helper returns.
76
+ *
77
+ * @since 0.6.0
78
+ */
79
+ export type BindingConstraint = (ctx: ConstraintContext) => boolean;
74
80
  /**
75
81
  * @since 0.3.16-canary.0
76
82
  */
77
83
  export interface ResolutionContext {
78
- resolve<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value;
79
- resolveAsync<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value>;
80
- resolveOptional<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value | undefined;
81
- resolveOptionalAsync<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value | undefined>;
82
- resolveAll<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Array<Value>;
83
- resolveAllAsync<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Array<Value>>;
84
+ resolve<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value;
85
+ resolveAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value>;
86
+ resolveOptional<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value | undefined;
87
+ resolveOptionalAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value | undefined>;
88
+ resolveAll<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Array<Value>;
89
+ resolveAllAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Array<Value>>;
84
90
  readonly graph: ConstraintContext;
85
91
  }
86
92
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;AAIzD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAIhE,OAAO,CAAC,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC;AAC9C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAI/E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAC;AAIvH;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAE3G;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAInF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CAC9C;AAID;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACzC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;KAC9B,CAAC;CACH;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACzD,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACnD,gGAAgG;IAChG,QAAQ,CAAC,qBAAqB,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC;AAIpE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC;IAC1F,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACxG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;IAC9G,oBAAoB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC9B,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACpG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAID;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,IAAI,IACzB,IAAI,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,SAAS,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -1,55 +1,11 @@
1
- import type { Token } from "#/token";
2
- import type { BindingTag, Constructor, TokenValue } from "#/types";
3
- /**
4
- * @since 0.3.16-canary.0
5
- */
6
- export interface InjectOptions {
7
- name?: string;
8
- tags?: ReadonlyArray<BindingTag>;
9
- }
10
- /**
11
- * @since 0.3.16-canary.0
12
- */
13
- export interface InjectionDescriptor<Value = unknown> {
14
- readonly token: Token<Value> | Constructor<Value>;
15
- readonly optional: boolean;
16
- readonly multi: boolean;
17
- readonly name?: string;
18
- readonly tags?: ReadonlyArray<BindingTag>;
19
- }
20
- /**
21
- * @since 0.3.16-canary.0
22
- */
23
- export type InjectableDependency<Value = unknown> = Token<Value> | Constructor<Value> | InjectionDescriptor<Value>;
24
- /**
25
- * The value a factory receives for one declared dependency.
26
- *
27
- * @remarks `optional()` and `injectAll()` fold their effect into the descriptor's own type
28
- * parameter, so reading it back is enough; bare tokens fall through to {@link TokenValue}.
29
- *
30
- * @since 0.5.0-canary.7
31
- */
32
- export type ResolvedDependencyValue<Dependency> = Dependency extends InjectionDescriptor<infer Value> ? Value : TokenValue<Dependency>;
33
- /**
34
- * @since 0.3.16-canary.0
35
- */
36
- export declare function isInjectionDescriptor(value: unknown): value is InjectionDescriptor;
37
- /**
38
- * @since 0.3.16-canary.0
39
- */
40
- export declare function normalizeToDescriptor(dependency: InjectableDependency): InjectionDescriptor;
1
+ /** `@inject` — the accessor-decorator channel, resolving from the ambient container. */
2
+ import type { Token } from "#/core/token";
3
+ import type { Constructor } from "#/core/types";
4
+ import type { InjectionDescriptor, InjectOptions } from "#/injection/descriptor";
41
5
  type ClassAccessorDecorator<This, Value> = (target: ClassAccessorDecoratorTarget<This, Value>, context: ClassAccessorDecoratorContext<This, Value>) => ClassAccessorDecoratorResult<This, Value> | void;
42
6
  /**
43
7
  * @since 0.3.16-canary.0
44
8
  */
45
- export declare function inject<const Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Value> & ClassAccessorDecorator<unknown, Value>;
46
- /**
47
- * @since 0.3.16-canary.0
48
- */
49
- export declare function optional<const Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Value | undefined>;
50
- /**
51
- * @since 0.3.16-canary.0
52
- */
53
- export declare function injectAll<const Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Array<Value>>;
9
+ export declare function inject<Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Value> & ClassAccessorDecorator<unknown, Value>;
54
10
  export {};
55
11
  //# sourceMappingURL=inject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,KAAK,GAAG,OAAO;IAClD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEnH;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,CAAC,UAAU,IAC5C,UAAU,SAAS,mBAAmB,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAEvF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAgBlF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,mBAAmB,CAK3F;AA8DD,KAAK,sBAAsB,CAAC,IAAI,EAAE,KAAK,IAAI,CACzC,MAAM,EAAE,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,EACjD,OAAO,EAAE,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,KAChD,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;AAEtD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,KAAK,EAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAkDrE;AAID;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAClC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAAC,KAAK,GAAG,SAAS,CAAC,CASxC;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,KAAK,EACnC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CASnC"}
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"AACA,wFAAwF;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0BjF,KAAK,sBAAsB,CAAC,IAAI,EAAE,KAAK,IAAI,CACzC,MAAM,EAAE,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,EACjD,OAAO,EAAE,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,KAChD,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;AAEtD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAwDrE"}
@@ -1,93 +1,41 @@
1
- import { InternalError, MissingContainerContextError } from "#/errors";
1
+ import { getActiveContainer, getAmbientResolution } from "#/ambient/active-container";
2
+ import { MissingContainerContextError, StaticMemberDecoratorError } from "#/errors/errors";
3
+ import { buildInjectionDescriptor } from "#/injection/descriptor";
4
+ import { injectionSlotToResolveOptions } from "#/injection/resolve-options";
2
5
  import { INJECT_ACCESSOR_KEY } from "#/metadata/metadata-keys";
3
- import { getActiveContainer } from "#/resolution/environment";
4
- import { injectionSlotToResolveOptions } from "#/resolution/resolve-options";
5
6
  /**
6
- * @since 0.3.16-canary.0
7
- */
8
- export function isInjectionDescriptor(value) {
9
- if (value === null || value === undefined) {
10
- return false;
11
- }
12
- const type = typeof value;
13
- // inject() returns a function (dual-role), so must check both object and function
14
- if (type !== "object" && type !== "function") {
15
- return false;
16
- }
17
- return ("token" in value &&
18
- "optional" in value &&
19
- "multi" in value &&
20
- typeof value.optional === "boolean" &&
21
- typeof value.multi === "boolean");
22
- }
23
- /**
24
- * @since 0.3.16-canary.0
7
+ * The name of the class being constructed, or `undefined` when there is none to report.
8
+ *
9
+ * @remarks Two ways there is none: an anonymous class expression has an empty `name`, and an
10
+ * instance whose prototype chain answers no `constructor` has nothing to read. Narrowed rather than
11
+ * asserted — the value arrives as `unknown` and the platform makes no promise about it.
25
12
  */
26
- export function normalizeToDescriptor(dependency) {
27
- if (isInjectionDescriptor(dependency)) {
28
- return materializeInjectionDescriptor(dependency);
29
- }
30
- return { token: dependency, optional: false, multi: false };
31
- }
32
- /**
33
- * Dual-role `inject()` values are functions: [[Function]].name must not be treated as a DI slot name.
34
- * Only enumerable own `name` / `tags` from `Object.defineProperties` are real injection options.
35
- */
36
- function materializeInjectionDescriptor(dependency) {
37
- if (typeof dependency !== "function") {
38
- return dependency;
39
- }
40
- const dualRole = dependency;
41
- const base = {
42
- token: dualRole.token,
43
- optional: dualRole.optional,
44
- multi: dualRole.multi,
45
- };
46
- const nameDesc = Object.getOwnPropertyDescriptor(dualRole, "name");
47
- const tagsDesc = Object.getOwnPropertyDescriptor(dualRole, "tags");
48
- const explicitName = nameDesc?.enumerable === true && typeof nameDesc.value === "string" ? nameDesc.value : undefined;
49
- const explicitTags = tagsDesc?.enumerable === true ? tagsDesc.value : undefined;
50
- if (explicitName !== undefined && explicitTags !== undefined) {
51
- return {
52
- ...base,
53
- name: explicitName,
54
- tags: explicitTags,
55
- };
56
- }
57
- if (explicitName !== undefined) {
58
- return { ...base, name: explicitName };
13
+ function classNameOf(instance) {
14
+ if (typeof instance !== "object" || instance === null) {
15
+ return undefined;
59
16
  }
60
- if (explicitTags !== undefined) {
61
- return { ...base, tags: explicitTags };
17
+ const constructor = Reflect.get(instance, "constructor");
18
+ if (typeof constructor !== "function" || constructor.name === "") {
19
+ return undefined;
62
20
  }
63
- return base;
64
- }
65
- function withOptions(base, options) {
66
- if (options?.name !== undefined && options.tags !== undefined) {
67
- return { ...base, name: options.name, tags: options.tags };
68
- }
69
- if (options?.name !== undefined) {
70
- return { ...base, name: options.name };
71
- }
72
- if (options?.tags !== undefined) {
73
- return { ...base, tags: options.tags };
74
- }
75
- return base;
76
- }
77
- function buildInjectionDescriptor(token, options) {
78
- return withOptions({ token, optional: false, multi: false }, options);
21
+ return constructor.name;
79
22
  }
80
23
  /**
81
24
  * @since 0.3.16-canary.0
82
25
  */
83
26
  export function inject(token, options) {
84
27
  const descriptor = buildInjectionDescriptor(token, options);
28
+ // Derived from the descriptor, not from `options`: the descriptor is where the tag shorthand has
29
+ // already been folded. Built once here rather than per constructed instance.
30
+ const resolveOptions = injectionSlotToResolveOptions(descriptor);
85
31
  const decoratorFn = (_target, context) => {
86
32
  if (context.static) {
87
- throw new InternalError("@inject() on static accessors is not supported; only instance accessors participate in runWithContainer-based property injection.");
33
+ throw new StaticMemberDecoratorError("inject", String(context.name));
88
34
  }
89
35
  const meta = context.metadata;
90
- if (!Array.isArray(meta[INJECT_ACCESSOR_KEY])) {
36
+ // Own bucket only: the metadata record inherits the base class's, and pushing into an inherited
37
+ // array would register this accessor on the base class instead.
38
+ if (!Object.hasOwn(meta, INJECT_ACCESSOR_KEY) || !Array.isArray(meta[INJECT_ACCESSOR_KEY])) {
91
39
  meta[INJECT_ACCESSOR_KEY] = [];
92
40
  }
93
41
  meta[INJECT_ACCESSOR_KEY].push({
@@ -95,16 +43,20 @@ export function inject(token, options) {
95
43
  descriptor,
96
44
  });
97
45
  context.addInitializer(function () {
46
+ // Prefer the engine's path-continuing resolver: it keeps this accessor's dependencies on the
47
+ // live resolution path, so a cycle through an accessor is detected instead of recursing.
48
+ const ambient = getAmbientResolution();
49
+ if (ambient !== undefined) {
50
+ const value = descriptor.optional
51
+ ? ambient.resolveOptional(token, resolveOptions)
52
+ : ambient.resolve(token, resolveOptions);
53
+ context.access.set(this, value);
54
+ return;
55
+ }
98
56
  const container = getActiveContainer();
99
57
  if (container === undefined) {
100
- throw new MissingContainerContextError(String(context.name));
58
+ throw new MissingContainerContextError(classNameOf(this), context.name);
101
59
  }
102
- const resolveOptions = options === undefined
103
- ? undefined
104
- : injectionSlotToResolveOptions({
105
- ...(options.name !== undefined ? { name: options.name } : {}),
106
- ...(options.tags !== undefined ? { tags: options.tags } : {}),
107
- });
108
60
  const value = descriptor.optional
109
61
  ? container.resolveOptional(token, resolveOptions)
110
62
  : container.resolve(token, resolveOptions);
@@ -120,26 +72,4 @@ export function inject(token, options) {
120
72
  Object.defineProperties(decoratorFn, props);
121
73
  return decoratorFn;
122
74
  }
123
- // ── optional() ────────────────────────────────────────────────────────────────
124
- /**
125
- * @since 0.3.16-canary.0
126
- */
127
- export function optional(token, options) {
128
- return withOptions({
129
- token: token,
130
- optional: true,
131
- multi: false,
132
- }, options);
133
- }
134
- // ── injectAll() ───────────────────────────────────────────────────────────────
135
- /**
136
- * @since 0.3.16-canary.0
137
- */
138
- export function injectAll(token, options) {
139
- return withOptions({
140
- token: token,
141
- optional: false,
142
- multi: true,
143
- }, options);
144
- }
145
75
  //# sourceMappingURL=inject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAItF,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,QAAiB;IACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClE,IAAI,OAAO,WAAW,KAAK,UAAU,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AASD;;GAEG;AACH,MAAM,UAAU,MAAM,CACpB,KAAwC,EACxC,OAAuB;IAEvB,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5D,iGAAiG;IACjG,6EAA6E;IAC7E,MAAM,cAAc,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,CAClB,OAAqD,EACrD,OAAsD,EACR,EAAE;QAChD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAA4C,CAAC;QAClE,gGAAgG;QAChG,gEAAgE;QAChE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACA,IAAI,CAAC,mBAAmB,CAAsE,CAAC,IAAI,CAAC;YACnG,GAAG,EAAE,OAAO,CAAC,IAAI;YACjB,UAAU;SACX,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CAAC;YACrB,6FAA6F;YAC7F,yFAAyF;YACzF,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ;oBAC/B,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;oBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;YACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,IAAI,4BAA4B,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ;gBAC/B,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;gBAClD,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,wEAAwE;IACxE,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAmC,EAAE,CAAC;QAC5E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE5C,OAAO,WAAkF,CAAC;AAC5F,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { InjectableDependency } from "#/decorators/inject";
2
- import type { BindingScope, Constructor } from "#/types";
1
+ import type { BindingScope, Constructor } from "#/core/types";
2
+ import type { InjectableDependency, ResolvedDependencyValue } from "#/injection/descriptor";
3
3
  /**
4
4
  * @since 0.3.16-canary.0
5
5
  */
@@ -18,12 +18,32 @@ export declare function createAutoRegisterRegistry(): AutoRegisterRegistry;
18
18
  * @since 0.3.16-canary.0
19
19
  */
20
20
  export interface InjectableOptions {
21
- autoRegister?: AutoRegisterRegistry;
22
- scope?: BindingScope;
21
+ autoRegister?: AutoRegisterRegistry | undefined;
22
+ scope?: BindingScope | undefined;
23
23
  }
24
24
  /**
25
+ * The parameters a constructor is handed, given what its `deps` declare.
26
+ *
27
+ * @remarks Reuses the same reading a `toResolved` factory gets, so `injectAll` arrives as an array
28
+ * and `optional` as possibly undefined in both places.
29
+ */
30
+ type InjectedParameters<Deps extends ReadonlyArray<InjectableDependency>> = {
31
+ -readonly [Index in keyof Deps]: ResolvedDependencyValue<Deps[Index]>;
32
+ };
33
+ /**
34
+ * Declare a class injectable, and what its constructor is to be handed.
35
+ *
36
+ * @since 0.3.16-canary.0
37
+ */
38
+ export declare function injectable(): (target: unknown, context: ClassDecoratorContext) => void;
39
+ /**
40
+ * @remarks Declaring dependencies constrains the class: the decorator only accepts one whose
41
+ * constructor takes exactly what `deps` resolve to, in that order. A class taking fewer parameters
42
+ * than `deps` declares still satisfies it, which is the one mismatch TypeScript's arity rules let
43
+ * through — the surplus dependency is resolved and discarded.
44
+ *
25
45
  * @since 0.3.16-canary.0
26
46
  */
27
- export declare function injectable(deps?: ReadonlyArray<InjectableDependency>, options?: InjectableOptions): (target: unknown, context: ClassDecoratorContext) => void;
47
+ export declare function injectable<const Deps extends ReadonlyArray<InjectableDependency>>(deps: Deps, options?: InjectableOptions): (target: abstract new (...args: InjectedParameters<Deps>) => unknown, context: ClassDecoratorContext) => void;
28
48
  export type { InjectableDependency };
29
49
  //# sourceMappingURL=injectable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIzD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzD,OAAO,IAAI,aAAa,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAUjE;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAID;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC1C,OAAO,CAAC,EAAE,iBAAiB,GAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAiC3D;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAO5F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzD,OAAO,IAAI,aAAa,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAUjE;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChD,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAID;;;;;GAKG;AACH,KAAK,kBAAkB,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,IAAI;IAC1E,CAAC,UAAU,KAAK,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CACtE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAExF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EAC/E,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,iBAAiB,GAC1B,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AA2CjH,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { normalizeToDescriptor } from "#/decorators/inject";
1
+ import { normalizeToDescriptor } from "#/injection/descriptor";
2
2
  import { INJECTABLE_KEY } from "#/metadata/metadata-keys";
3
3
  /**
4
4
  * @since 0.3.16-canary.0
@@ -14,9 +14,8 @@ export function createAutoRegisterRegistry() {
14
14
  },
15
15
  };
16
16
  }
17
- // ── @injectable() ─────────────────────────────────────────────────────────────
18
17
  /**
19
- * @since 0.3.16-canary.0
18
+ * @since 0.6.0
20
19
  */
21
20
  export function injectable(deps, options) {
22
21
  return function (target, context) {
@@ -1 +1 @@
1
- {"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAc1D;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,iBAAiB,GAAwD,EAAE,CAAC;IAClF,OAAO;QACL,QAAQ,CAAC,MAAmB,EAAE,KAAmB;YAC/C,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC;AAYD,iFAAiF;AAEjF;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAA0C,EAC1C,OAA2B;IAE3B,OAAO,UAAU,MAAe,EAAE,OAA8B;QAC9D,MAAM,qBAAqB,GAAyB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzF,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,qBAAqB,GAAkE;gBAC3F,KAAK;gBACL,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC;YACF,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnE,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YACpF,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,OAAO,qBAAqB,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,iFAAiF;QACjF,qDAAqD;QACpD,OAAO,CAAC,QAA6C,CAAC,cAAc,CAAC,GAAG;YACvE,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QAEF,IAAI,OAAO,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,KAAK,GAAiB,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;YACzD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAqB,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAa1D;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,iBAAiB,GAAwD,EAAE,CAAC;IAClF,OAAO;QACL,QAAQ,CAAC,MAAmB,EAAE,KAAmB;YAC/C,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC;AA4CD;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAA0C,EAC1C,OAA2B;IAE3B,OAAO,UAAU,MAAa,EAAE,OAA8B;QAC5D,MAAM,qBAAqB,GAAyB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzF,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,qBAAqB,GAAkE;gBAC3F,KAAK;gBACL,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC;YACF,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnE,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YACpF,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,OAAO,qBAAqB,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,iFAAiF;QACjF,qDAAqD;QACpD,OAAO,CAAC,QAA6C,CAAC,cAAc,CAAC,GAAG;YACvE,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QAEF,IAAI,OAAO,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,KAAK,GAAiB,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;YACzD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAqB,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,11 @@
1
+ type MethodDecorator = (target: unknown, context: ClassMethodDecoratorContext) => void;
1
2
  /**
2
3
  * @since 0.3.16-canary.0
3
4
  */
4
- export declare function postConstruct(): (target: unknown, context: ClassMethodDecoratorContext) => void;
5
+ export declare function postConstruct(): MethodDecorator;
5
6
  /**
6
7
  * @since 0.3.16-canary.0
7
8
  */
8
- export declare function preDestroy(): (target: unknown, context: ClassMethodDecoratorContext) => void;
9
+ export declare function preDestroy(): MethodDecorator;
10
+ export {};
9
11
  //# sourceMappingURL=lifecycle-decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAc/F;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAc5F"}
1
+ {"version":3,"file":"lifecycle-decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AAsBvF;;GAEG;AACH,wBAAgB,aAAa,IAAI,eAAe,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAE5C"}
@@ -1,40 +1,34 @@
1
- import { InternalError } from "#/errors";
1
+ import { StaticMemberDecoratorError } from "#/errors/errors";
2
2
  import { LIFECYCLE_KEY } from "#/metadata/metadata-keys";
3
- function appendUniqueMethod(metadata, phase, methodName) {
4
- if (!metadata[phase].includes(methodName)) {
5
- metadata[phase].push(methodName);
6
- }
7
- }
8
- /**
9
- * @since 0.3.16-canary.0
10
- */
11
- export function postConstruct() {
3
+ /** Records the decorated method under one lifecycle phase; both decorators differ only in that phase. */
4
+ function recordLifecycleMethod(phase) {
12
5
  return function (target, context) {
13
6
  if (context.static) {
14
- throw new InternalError("@postConstruct() applies to instance methods only; static methods are not invoked during instance lifecycle.");
7
+ throw new StaticMemberDecoratorError(phase, String(context.name));
15
8
  }
16
- const methodName = String(context.name);
17
9
  const meta = context.metadata;
18
- if (!meta[LIFECYCLE_KEY]) {
10
+ // Own bucket only: `context.metadata` inherits the base class's record, and writing through an
11
+ // inherited bucket would register this hook on the base class instead.
12
+ if (!Object.hasOwn(meta, LIFECYCLE_KEY)) {
19
13
  meta[LIFECYCLE_KEY] = { postConstruct: [], preDestroy: [] };
20
14
  }
21
- appendUniqueMethod(meta[LIFECYCLE_KEY], "postConstruct", methodName);
15
+ const lifecycle = meta[LIFECYCLE_KEY];
16
+ const methodName = String(context.name);
17
+ if (!lifecycle[phase].includes(methodName)) {
18
+ lifecycle[phase].push(methodName);
19
+ }
22
20
  };
23
21
  }
22
+ /**
23
+ * @since 0.3.16-canary.0
24
+ */
25
+ export function postConstruct() {
26
+ return recordLifecycleMethod("postConstruct");
27
+ }
24
28
  /**
25
29
  * @since 0.3.16-canary.0
26
30
  */
27
31
  export function preDestroy() {
28
- return function (target, context) {
29
- if (context.static) {
30
- throw new InternalError("@preDestroy() applies to instance methods only; static methods are not invoked during instance teardown.");
31
- }
32
- const methodName = String(context.name);
33
- const meta = context.metadata;
34
- if (!meta[LIFECYCLE_KEY]) {
35
- meta[LIFECYCLE_KEY] = { postConstruct: [], preDestroy: [] };
36
- }
37
- appendUniqueMethod(meta[LIFECYCLE_KEY], "preDestroy", methodName);
38
- };
32
+ return recordLifecycleMethod("preDestroy");
39
33
  }
40
34
  //# sourceMappingURL=lifecycle-decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-decorators.js","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,SAAS,kBAAkB,CACzB,QAAkC,EAClC,KAAqC,EACrC,UAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,MAAe,EAAE,OAAoC;QACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CACrB,8GAA8G,CAC/G,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,QAA4C,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAA6B,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IACnG,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,MAAe,EAAE,OAAoC;QACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CACrB,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,QAA4C,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAA6B,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAChG,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lifecycle-decorators.js","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,yGAAyG;AACzG,SAAS,qBAAqB,CAAC,KAAqC;IAClE,OAAO,UAAU,MAAe,EAAE,OAAoC;QACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAA4C,CAAC;QAClE,+FAA+F;QAC/F,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9D,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAA6B,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC"}
@@ -23,6 +23,8 @@ export declare const RESOLUTION_DIAGNOSTICS: unique symbol;
23
23
  export interface ResolutionDiagnostics {
24
24
  /** Bindings with a compiled instantiation plan. */
25
25
  readonly compiledPlanCount: number;
26
+ /** Bindings with a compiled async instantiation plan. */
27
+ readonly compiledAsyncPlanCount: number;
26
28
  /** Contexts held by the depth-indexed sync pool. */
27
29
  readonly syncContextPoolSize: number;
28
30
  /** Scoped instances currently cached by this container's scope manager. */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/errors/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,MAA4C,CAAC;AAEzF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,oDAAoD;IACpD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,sBAAsB,CAAC,IAAI,qBAAqB,CAAC;CACnD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/errors/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB,MAAM,CAAC,2BAA2B,CAAC,CAAC"}