ts-ioc-container 72.0.0 → 72.2.0

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 (235) hide show
  1. package/AGENTS.md +179 -0
  2. package/README.md +94 -0
  3. package/cjm/container/Container.js +2 -2
  4. package/cjm/container/EmptyContainer.js +17 -15
  5. package/cjm/errors/ArgumentNotFoundError.js +1 -0
  6. package/cjm/errors/CannonSingletonApplyTwiceError.js +2 -14
  7. package/cjm/errors/CannotApplySingletonTwiceError.js +18 -0
  8. package/cjm/errors/ContainerDisposedError.js +1 -0
  9. package/cjm/errors/ContainerError.js +1 -0
  10. package/cjm/errors/ContainerNotFoundError.js +1 -0
  11. package/cjm/errors/DependencyMissingKeyError.js +1 -0
  12. package/cjm/errors/DependencyNotFoundError.js +1 -0
  13. package/cjm/errors/MethodNotImplementedError.js +1 -0
  14. package/cjm/errors/ProviderDisposedError.js +1 -0
  15. package/cjm/errors/TypedEventDisposedError.js +1 -0
  16. package/cjm/errors/UnsupportedTokenTypeError.js +1 -0
  17. package/cjm/index.js +8 -3
  18. package/cjm/metadata/class.js +3 -1
  19. package/cjm/metadata/method.js +3 -1
  20. package/cjm/metadata/parameter.js +7 -1
  21. package/cjm/provider/Provider.js +6 -6
  22. package/cjm/registration/Registration.js +2 -2
  23. package/cjm/token/ConstantToken.js +4 -4
  24. package/cjm/token/FunctionToken.js +1 -1
  25. package/cjm/token/GroupInstanceToken.js +4 -4
  26. package/cjm/token/toToken.js +1 -1
  27. package/cjm/utils/TypedEvent.js +1 -1
  28. package/cjm/utils/array.js +1 -1
  29. package/esm/container/Container.js +2 -2
  30. package/esm/container/EmptyContainer.js +17 -15
  31. package/esm/errors/ArgumentNotFoundError.js +1 -0
  32. package/esm/errors/CannonSingletonApplyTwiceError.js +2 -13
  33. package/esm/errors/CannotApplySingletonTwiceError.js +14 -0
  34. package/esm/errors/ContainerDisposedError.js +1 -0
  35. package/esm/errors/ContainerError.js +1 -0
  36. package/esm/errors/ContainerNotFoundError.js +1 -0
  37. package/esm/errors/DependencyMissingKeyError.js +1 -0
  38. package/esm/errors/DependencyNotFoundError.js +1 -0
  39. package/esm/errors/MethodNotImplementedError.js +1 -0
  40. package/esm/errors/ProviderDisposedError.js +1 -0
  41. package/esm/errors/TypedEventDisposedError.js +1 -0
  42. package/esm/errors/UnsupportedTokenTypeError.js +1 -0
  43. package/esm/index.js +4 -3
  44. package/esm/metadata/class.js +1 -0
  45. package/esm/metadata/method.js +1 -0
  46. package/esm/metadata/parameter.js +5 -0
  47. package/esm/provider/Provider.js +6 -6
  48. package/esm/registration/Registration.js +2 -2
  49. package/esm/token/ConstantToken.js +4 -4
  50. package/esm/token/FunctionToken.js +1 -1
  51. package/esm/token/GroupInstanceToken.js +4 -4
  52. package/esm/token/toToken.js +1 -1
  53. package/esm/utils/TypedEvent.js +1 -1
  54. package/esm/utils/array.js +1 -1
  55. package/lib/ExecutionContext.ts +6 -0
  56. package/lib/container/AliasMap.ts +30 -0
  57. package/lib/container/AutoResolveModule.ts +24 -0
  58. package/lib/container/Container.ts +311 -0
  59. package/lib/container/EmptyContainer.ts +166 -0
  60. package/lib/container/IContainer.ts +156 -0
  61. package/lib/errors/ArgumentNotFoundError.ts +13 -0
  62. package/lib/errors/CannonSingletonApplyTwiceError.ts +6 -0
  63. package/lib/errors/CannotApplySingletonTwiceError.ts +22 -0
  64. package/lib/errors/ContainerDisposedError.ts +13 -0
  65. package/lib/errors/ContainerError.ts +15 -0
  66. package/lib/errors/ContainerNotFoundError.ts +13 -0
  67. package/lib/errors/DependencyMissingKeyError.ts +13 -0
  68. package/lib/errors/DependencyNotFoundError.ts +13 -0
  69. package/lib/errors/MethodNotImplementedError.ts +13 -0
  70. package/lib/errors/ProviderDisposedError.ts +22 -0
  71. package/lib/errors/TypedEventDisposedError.ts +22 -0
  72. package/lib/errors/UnsupportedTokenTypeError.ts +13 -0
  73. package/lib/hooks/HookCollector.ts +109 -0
  74. package/lib/hooks/HookContext.ts +85 -0
  75. package/lib/hooks/combinators.ts +51 -0
  76. package/lib/hooks/hook.ts +89 -0
  77. package/lib/hooks/injectProp.ts +14 -0
  78. package/lib/index.ts +181 -0
  79. package/lib/injector/IInjector.ts +88 -0
  80. package/lib/injector/MetadataInjector.ts +100 -0
  81. package/lib/injector/ProxyInjector.ts +31 -0
  82. package/lib/injector/SimpleInjector.ts +20 -0
  83. package/lib/metadata/class.ts +50 -0
  84. package/lib/metadata/method.ts +47 -0
  85. package/lib/metadata/parameter.ts +60 -0
  86. package/lib/metadata/target.ts +25 -0
  87. package/lib/provider/IProvider.ts +65 -0
  88. package/lib/provider/Provider.ts +174 -0
  89. package/lib/registration/IRegistration.ts +235 -0
  90. package/lib/registration/Registration.ts +122 -0
  91. package/lib/select.ts +33 -0
  92. package/lib/token/BindToken.ts +13 -0
  93. package/lib/token/ClassToken.ts +72 -0
  94. package/lib/token/ConstantToken.ts +50 -0
  95. package/lib/token/FunctionToken.ts +79 -0
  96. package/lib/token/GroupAliasToken.ts +92 -0
  97. package/lib/token/GroupInstanceToken.ts +70 -0
  98. package/lib/token/InjectionToken.ts +46 -0
  99. package/lib/token/SingleAliasToken.ts +84 -0
  100. package/lib/token/SingleToken.ts +93 -0
  101. package/lib/token/toToken.ts +46 -0
  102. package/lib/utils/ProxyRegistry.ts +149 -0
  103. package/lib/utils/TypedEvent.ts +96 -0
  104. package/lib/utils/array.ts +28 -0
  105. package/lib/utils/basic.ts +34 -0
  106. package/lib/utils/debounce.ts +18 -0
  107. package/lib/utils/errorHandler.ts +34 -0
  108. package/lib/utils/fp.ts +86 -0
  109. package/lib/utils/getConstructorChain.ts +17 -0
  110. package/lib/utils/memoize.ts +24 -0
  111. package/lib/utils/once.ts +24 -0
  112. package/lib/utils/shallowCache.ts +22 -0
  113. package/lib/utils/task.ts +33 -0
  114. package/lib/utils/throttle.ts +17 -0
  115. package/package.json +5 -3
  116. package/typings/ExecutionContext.d.ts +2 -0
  117. package/typings/ExecutionContext.d.ts.map +1 -0
  118. package/typings/container/AliasMap.d.ts +1 -0
  119. package/typings/container/AliasMap.d.ts.map +1 -0
  120. package/typings/container/AutoResolveModule.d.ts +16 -0
  121. package/typings/container/AutoResolveModule.d.ts.map +1 -0
  122. package/typings/container/Container.d.ts +60 -0
  123. package/typings/container/Container.d.ts.map +1 -0
  124. package/typings/container/EmptyContainer.d.ts +51 -0
  125. package/typings/container/EmptyContainer.d.ts.map +1 -0
  126. package/typings/container/IContainer.d.ts +75 -0
  127. package/typings/container/IContainer.d.ts.map +1 -0
  128. package/typings/errors/ArgumentNotFoundError.d.ts +3 -0
  129. package/typings/errors/ArgumentNotFoundError.d.ts.map +1 -0
  130. package/typings/errors/CannonSingletonApplyTwiceError.d.ts +6 -6
  131. package/typings/errors/CannonSingletonApplyTwiceError.d.ts.map +1 -0
  132. package/typings/errors/CannotApplySingletonTwiceError.d.ts +12 -0
  133. package/typings/errors/CannotApplySingletonTwiceError.d.ts.map +1 -0
  134. package/typings/errors/ContainerDisposedError.d.ts +3 -0
  135. package/typings/errors/ContainerDisposedError.d.ts.map +1 -0
  136. package/typings/errors/ContainerError.d.ts +7 -0
  137. package/typings/errors/ContainerError.d.ts.map +1 -0
  138. package/typings/errors/ContainerNotFoundError.d.ts +3 -0
  139. package/typings/errors/ContainerNotFoundError.d.ts.map +1 -0
  140. package/typings/errors/DependencyMissingKeyError.d.ts +3 -0
  141. package/typings/errors/DependencyMissingKeyError.d.ts.map +1 -0
  142. package/typings/errors/DependencyNotFoundError.d.ts +3 -0
  143. package/typings/errors/DependencyNotFoundError.d.ts.map +1 -0
  144. package/typings/errors/MethodNotImplementedError.d.ts +3 -0
  145. package/typings/errors/MethodNotImplementedError.d.ts.map +1 -0
  146. package/typings/errors/ProviderDisposedError.d.ts +6 -0
  147. package/typings/errors/ProviderDisposedError.d.ts.map +1 -0
  148. package/typings/errors/TypedEventDisposedError.d.ts +6 -0
  149. package/typings/errors/TypedEventDisposedError.d.ts.map +1 -0
  150. package/typings/errors/UnsupportedTokenTypeError.d.ts +3 -0
  151. package/typings/errors/UnsupportedTokenTypeError.d.ts.map +1 -0
  152. package/typings/hooks/HookCollector.d.ts +36 -0
  153. package/typings/hooks/HookCollector.d.ts.map +1 -0
  154. package/typings/hooks/HookContext.d.ts +10 -0
  155. package/typings/hooks/HookContext.d.ts.map +1 -0
  156. package/typings/hooks/combinators.d.ts +23 -0
  157. package/typings/hooks/combinators.d.ts.map +1 -0
  158. package/typings/hooks/hook.d.ts +39 -0
  159. package/typings/hooks/hook.d.ts.map +1 -0
  160. package/typings/hooks/injectProp.d.ts +9 -0
  161. package/typings/hooks/injectProp.d.ts.map +1 -0
  162. package/typings/index.d.ts +5 -3
  163. package/typings/index.d.ts.map +1 -0
  164. package/typings/injector/IInjector.d.ts +32 -0
  165. package/typings/injector/IInjector.d.ts.map +1 -0
  166. package/typings/injector/MetadataInjector.d.ts +58 -0
  167. package/typings/injector/MetadataInjector.d.ts.map +1 -0
  168. package/typings/injector/ProxyInjector.d.ts +13 -0
  169. package/typings/injector/ProxyInjector.d.ts.map +1 -0
  170. package/typings/injector/SimpleInjector.d.ts +13 -0
  171. package/typings/injector/SimpleInjector.d.ts.map +1 -0
  172. package/typings/metadata/class.d.ts +28 -0
  173. package/typings/metadata/class.d.ts.map +1 -0
  174. package/typings/metadata/method.d.ts +25 -0
  175. package/typings/metadata/method.d.ts.map +1 -0
  176. package/typings/metadata/parameter.d.ts +22 -0
  177. package/typings/metadata/parameter.d.ts.map +1 -0
  178. package/typings/metadata/target.d.ts +19 -0
  179. package/typings/metadata/target.d.ts.map +1 -0
  180. package/typings/provider/IProvider.d.ts +25 -0
  181. package/typings/provider/IProvider.d.ts.map +1 -0
  182. package/typings/provider/Provider.d.ts +30 -0
  183. package/typings/provider/Provider.d.ts.map +1 -0
  184. package/typings/registration/IRegistration.d.ts +137 -0
  185. package/typings/registration/IRegistration.d.ts.map +1 -0
  186. package/typings/registration/Registration.d.ts +23 -0
  187. package/typings/registration/Registration.d.ts.map +1 -0
  188. package/typings/select.d.ts +15 -0
  189. package/typings/select.d.ts.map +1 -0
  190. package/typings/token/BindToken.d.ts +3 -0
  191. package/typings/token/BindToken.d.ts.map +1 -0
  192. package/typings/token/ClassToken.d.ts +2 -0
  193. package/typings/token/ClassToken.d.ts.map +1 -0
  194. package/typings/token/ConstantToken.d.ts +14 -0
  195. package/typings/token/ConstantToken.d.ts.map +1 -0
  196. package/typings/token/FunctionToken.d.ts +10 -0
  197. package/typings/token/FunctionToken.d.ts.map +1 -0
  198. package/typings/token/GroupAliasToken.d.ts +14 -0
  199. package/typings/token/GroupAliasToken.d.ts.map +1 -0
  200. package/typings/token/GroupInstanceToken.d.ts +19 -0
  201. package/typings/token/GroupInstanceToken.d.ts.map +1 -0
  202. package/typings/token/InjectionToken.d.ts +8 -0
  203. package/typings/token/InjectionToken.d.ts.map +1 -0
  204. package/typings/token/SingleAliasToken.d.ts +6 -0
  205. package/typings/token/SingleAliasToken.d.ts.map +1 -0
  206. package/typings/token/SingleToken.d.ts +18 -0
  207. package/typings/token/SingleToken.d.ts.map +1 -0
  208. package/typings/token/toToken.d.ts +12 -0
  209. package/typings/token/toToken.d.ts.map +1 -0
  210. package/typings/utils/ProxyRegistry.d.ts +63 -0
  211. package/typings/utils/ProxyRegistry.d.ts.map +1 -0
  212. package/typings/utils/TypedEvent.d.ts +42 -0
  213. package/typings/utils/TypedEvent.d.ts.map +1 -0
  214. package/typings/utils/array.d.ts +7 -0
  215. package/typings/utils/array.d.ts.map +1 -0
  216. package/typings/utils/basic.d.ts +12 -0
  217. package/typings/utils/basic.d.ts.map +1 -0
  218. package/typings/utils/debounce.d.ts +2 -0
  219. package/typings/utils/debounce.d.ts.map +1 -0
  220. package/typings/utils/errorHandler.d.ts +4 -0
  221. package/typings/utils/errorHandler.d.ts.map +1 -0
  222. package/typings/utils/fp.d.ts +8 -0
  223. package/typings/utils/fp.d.ts.map +1 -0
  224. package/typings/utils/getConstructorChain.d.ts +9 -0
  225. package/typings/utils/getConstructorChain.d.ts.map +1 -0
  226. package/typings/utils/memoize.d.ts +10 -0
  227. package/typings/utils/memoize.d.ts.map +1 -0
  228. package/typings/utils/once.d.ts +2 -0
  229. package/typings/utils/once.d.ts.map +1 -0
  230. package/typings/utils/shallowCache.d.ts +2 -0
  231. package/typings/utils/shallowCache.d.ts.map +1 -0
  232. package/typings/utils/task.d.ts +13 -0
  233. package/typings/utils/task.d.ts.map +1 -0
  234. package/typings/utils/throttle.d.ts +2 -0
  235. package/typings/utils/throttle.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectProp.d.ts","sourceRoot":"","sources":["../../lib/hooks/injectProp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAG,MAEG,CAAC"}
@@ -17,6 +17,7 @@ export { DependencyMissingKeyError } from './errors/DependencyMissingKeyError.js
17
17
  export { MethodNotImplementedError } from './errors/MethodNotImplementedError.js';
18
18
  export { ContainerDisposedError } from './errors/ContainerDisposedError.js';
19
19
  export { ProviderDisposedError } from './errors/ProviderDisposedError.js';
20
+ export { CannotApplySingletonTwiceError } from './errors/CannotApplySingletonTwiceError.js';
20
21
  export { CannonSingletonApplyTwiceError } from './errors/CannonSingletonApplyTwiceError.js';
21
22
  export { UnsupportedTokenTypeError } from './errors/UnsupportedTokenTypeError.js';
22
23
  export { TypedEventDisposedError } from './errors/TypedEventDisposedError.js';
@@ -36,9 +37,9 @@ export { FunctionToken } from './token/FunctionToken.js';
36
37
  export { ConstantToken } from './token/ConstantToken.js';
37
38
  export { type InstancePredicate, GroupInstanceToken } from './token/GroupInstanceToken.js';
38
39
  export { resolveConstructor } from './metadata/target.js';
39
- export { addClassMeta, getClassMeta, addClassLabel, getClassLabels, addClassTag, getClassTags } from './metadata/class.js';
40
- export { addParamMeta, getParamMeta, addParamLabel, getParamLabels, addParamTag, getParamTags, } from './metadata/parameter.js';
41
- export { addMethodMeta, getMethodMeta, addMethodLabel, getMethodLabels, addMethodTag, getMethodTags, } from './metadata/method.js';
40
+ export { addClassMeta, getClassMeta, addClassLabel, getClassLabels, addClassTag, getClassTags, createComposeClassDecorator, } from './metadata/class.js';
41
+ export { addParamMeta, getParamMeta, addParamLabel, getParamLabels, addParamTag, getParamTags, createComposeParameterDecorator, } from './metadata/parameter.js';
42
+ export { addMethodMeta, getMethodMeta, addMethodLabel, getMethodLabels, addMethodTag, getMethodTags, createComposeMethodDecorator, } from './metadata/method.js';
42
43
  export { handleError, handleAsyncError, type HandleErrorParams } from './utils/errorHandler.js';
43
44
  export { runInOrder, runAtOnce, type Task } from './utils/task.js';
44
45
  export { throttle } from './utils/throttle.js';
@@ -54,3 +55,4 @@ export { pipe, type MapFn } from './utils/fp.js';
54
55
  export { findOrFail, type Predicate } from './utils/array.js';
55
56
  export { ProxyRegistry, unwrapProxy, type IProxyRegistry } from './utils/ProxyRegistry.js';
56
57
  export { type Branded, type constructor, type Instance, type Serializable, Is, isSerializable } from './utils/basic.js';
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
@@ -8,24 +8,56 @@ export type WithScope = {
8
8
  export type WithArgs = {
9
9
  args: unknown[];
10
10
  };
11
+ /**
12
+ * What an injector needs to build an instance: the scope it is built in, plus
13
+ * the runtime `args`. The scope travels inside the options rather than beside
14
+ * them, so every function handed a resolution context - `InjectFn`, `ArgsFn`,
15
+ * `ResolveDependency`, `IProvider.resolve`, `IInjector.resolve` - takes one
16
+ * object and destructures what it uses.
17
+ */
11
18
  export type InjectOptions = WithScope & Partial<WithArgs>;
19
+ /**
20
+ * Injector hooks - the injector's own domain: an instance was constructed.
21
+ *
22
+ * Construction is the injector's business, so the hook list belongs to the
23
+ * injector rather than to a scope. One injector is shared by a container and
24
+ * every scope created from it, so a hook added here observes construction in
25
+ * all of them.
26
+ */
12
27
  export type InjectorHook = (instance: Instance, scope: IContainer) => void;
28
+ /** Builds instances of classes for a scope. Shared by a container and every scope created from it. */
13
29
  export interface IInjector {
14
30
  resolve<T>(Target: constructor<T>, options: ProviderOptions): T;
15
31
  onConstructed(...hooks: InjectorHook[]): this;
16
32
  }
33
+ /**
34
+ * The injector counterpart of `IContainerModule`: an opt-in bundle of injector
35
+ * hooks, applied to the injector before it is handed to a container.
36
+ */
17
37
  export interface IInjectorModule {
18
38
  applyTo(injector: IInjector): void;
19
39
  }
40
+ /** Something that resolves a value from a scope. */
20
41
  export interface IInjectFnResolver<T> {
21
42
  resolve(s: IContainer, options?: ResolveOneOptions): T;
22
43
  }
44
+ /**
45
+ * Base class of the bundled injectors: tracks the instance in the scope, runs
46
+ * `onConstructed` hooks and handles `lazy`. Subclass it and implement
47
+ * `createInstance` for a custom injection strategy.
48
+ */
23
49
  export declare abstract class Injector {
24
50
  private readonly proxyRegistry;
25
51
  private readonly onConstructedHookList;
26
52
  constructor(proxyRegistry?: IProxyRegistry);
27
53
  resolve<T>(Target: constructor<T>, { scope, args, lazy }: ProviderOptions): T;
54
+ /**
55
+ * Hooks run after the constructed instance is handed to the scope, and before
56
+ * it reaches the caller. A `lazy` resolve returns a proxy first, so its hooks
57
+ * run when the proxy is first touched.
58
+ */
28
59
  onConstructed(...hooks: InjectorHook[]): this;
29
60
  useModule(module: IInjectorModule): this;
30
61
  protected abstract createInstance<T>(Target: constructor<T>, options: InjectOptions): T;
31
62
  }
63
+ //# sourceMappingURL=IInjector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IInjector.d.ts","sourceRoot":"","sources":["../../lib/injector/IInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAC3C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE3E,sGAAsG;AACtG,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,CAAC,CAAC;IAEhE,aAAa,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;CACpC;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,8BAAsB,QAAQ;IAGhB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsB;gBAE/B,aAAa,GAAE,cAA4C;IAExF,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,eAAe,GAAG,CAAC;IAe7E;;;;OAIG;IACH,aAAa,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAK7C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAKxC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,CAAC;CACxF"}
@@ -4,12 +4,70 @@ import { ProviderOptions } from '../provider/IProvider.js';
4
4
  import { InjectFn } from '../hooks/hook.js';
5
5
  import { type DependencyKey } from '../container/IContainer.js';
6
6
  import { type InjectionToken } from '../token/InjectionToken.js';
7
+ /**
8
+ * The default injector: builds a class by calling each constructor parameter's
9
+ * `@inject(...)` function. Parameters without `@inject` receive `undefined`.
10
+ * Needs `reflect-metadata` imported once at the entrypoint.
11
+ *
12
+ * @example
13
+ * const container = new Container({ injector: new MetadataInjector() });
14
+ */
7
15
  export declare class MetadataInjector extends Injector implements IInjector {
8
16
  protected createInstance<T>(Target: constructor<T>, { scope, args: deps }: InjectOptions): T;
9
17
  }
18
+ /**
19
+ * Injects a dependency into a constructor parameter.
20
+ *
21
+ * `fn` receives the resolution context - the `scope` the instance is built in and
22
+ * the runtime `args` it is built with - and returns the value to inject. That is
23
+ * the whole contract: a token, key or class is resolved with {@link by}, a
24
+ * runtime argument picked with {@link arg}, and a mapped value is
25
+ * `pipe(fn, ...mappers)`.
26
+ *
27
+ * @example
28
+ * class App {
29
+ * constructor(
30
+ * @inject(by(ILoggerToken)) private logger: ILogger,
31
+ * @inject(pipe(by(ConfigToken), (c) => c.apiUrl)) private apiUrl: string,
32
+ * @inject(arg(0)) private tenantId: string,
33
+ * ) {}
34
+ * }
35
+ */
10
36
  export declare function inject<T>(fn: InjectFn<T>): ParameterDecorator;
37
+ /**
38
+ * The `InjectFn` which resolves `target` - an `InjectionToken`, a `DependencyKey`
39
+ * or a class - from the scope, handing it the runtime args of the class being
40
+ * constructed (see "Runtime args flow through tokens" in the README) and the
41
+ * `lazy` flag: `@inject(by(Token))`, `@inject(by('key'))`, `@inject(by(Logger))`.
42
+ * Being a function, it composes: `pipe(by(Config), (c) => c.apiUrl)`.
43
+ *
44
+ * @throws {UnsupportedTokenTypeError} when `target` is none of the three.
45
+ */
11
46
  export declare const by: <T>(target: InjectionToken<T> | DependencyKey | constructor<T>) => InjectFn<T>;
47
+ /**
48
+ * Injects the first runtime arg matching `predicate`, or `undefined`.
49
+ *
50
+ * @example
51
+ * constructor(@inject(argsFn((value) => typeof value === 'string')) readonly name: string) {}
52
+ */
12
53
  export declare const argsFn: <T = unknown>(predicate: (value: unknown, index: number) => boolean) => InjectFn<T>;
54
+ /**
55
+ * Injects the runtime arg at `index`, or `undefined`. Args arrive as passed:
56
+ * a token in the args list is not resolved.
57
+ *
58
+ * @example
59
+ * constructor(@inject(arg(0)) readonly baseUrl: string) {}
60
+ * // Token.args('https://api.example.com').resolve(scope)
61
+ */
13
62
  export declare const arg: <T = unknown>(index: number) => InjectFn<T>;
63
+ /** Injects the whole runtime args array. */
14
64
  export declare const args: InjectFn<unknown[]>;
65
+ /**
66
+ * Resolves the arguments annotated with `@inject` on `target`'s constructor, or on
67
+ * its `methodName` method, by calling each parameter's `InjectFn` with `options`.
68
+ *
69
+ * `target` is the class or any instance of it - a proxy included, since it is
70
+ * unwrapped on the way to the metadata (see {@link resolveConstructor}).
71
+ */
15
72
  export declare const resolveArgs: (target: constructor<unknown> | Instance, methodName?: string) => (options: ProviderOptions) => unknown[];
73
+ //# sourceMappingURL=MetadataInjector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataInjector.d.ts","sourceRoot":"","sources":["../../lib/injector/MetadataInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D;;;;;;;GAOG;AACH,qBAAa,gBAAiB,SAAQ,QAAS,YAAW,SAAS;IACjE,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAS,EAAE,EAAE,aAAa,GAAG,CAAC;CAIlG;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAI7D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,QAAQ,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,KAAG,QAAQ,CAAC,CAAC,CAG5F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAChB,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,KAAG,QAAQ,CAAC,CAAC,CAErB,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,GAAG,OAAO,EAAE,OAAO,MAAM,KAAG,QAAQ,CAAC,CAAC,CAAyC,CAAC;AAErG,4CAA4C;AAC5C,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,CAA2B,CAAC;AAEjE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE,aAAa,MAAM,MAE9E,SAAS,eAAe,KAAG,OAAO,EAC3C,CAAC"}
@@ -1,5 +1,18 @@
1
1
  import { IInjector, InjectOptions, Injector } from './IInjector.js';
2
2
  import { type constructor } from '../utils/basic.js';
3
+ /**
4
+ * Injector that passes one proxy object as the first constructor argument:
5
+ * reading `deps.someKey` resolves `'someKey'`, a property name containing
6
+ * "alias" resolves by alias, and `deps.args` returns the runtime args. Needs no
7
+ * decorators or `reflect-metadata`.
8
+ *
9
+ * @example
10
+ * class App {
11
+ * constructor({ logger }: { logger: ILogger }) {}
12
+ * }
13
+ * new Container({ injector: new ProxyInjector() });
14
+ */
3
15
  export declare class ProxyInjector extends Injector implements IInjector {
4
16
  protected createInstance<T>(Target: constructor<T>, { scope, args }: InjectOptions): T;
5
17
  }
18
+ //# sourceMappingURL=ProxyInjector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyInjector.d.ts","sourceRoot":"","sources":["../../lib/injector/ProxyInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,SAAS;IAC9D,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE,aAAa,GAAG,CAAC;CAc5F"}
@@ -1,5 +1,18 @@
1
1
  import { IInjector, InjectOptions, Injector } from './IInjector.js';
2
2
  import { type constructor } from '../utils/basic.js';
3
+ /**
4
+ * Injector that passes the scope itself as the first constructor argument,
5
+ * followed by the runtime args. Needs no decorators or `reflect-metadata`.
6
+ *
7
+ * @example
8
+ * class App {
9
+ * constructor(scope: IContainer) {
10
+ * this.logger = scope.resolve('Logger');
11
+ * }
12
+ * }
13
+ * new Container({ injector: new SimpleInjector() });
14
+ */
3
15
  export declare class SimpleInjector extends Injector implements IInjector {
4
16
  protected createInstance<T>(Target: constructor<T>, { scope, args }: InjectOptions): T;
5
17
  }
18
+ //# sourceMappingURL=SimpleInjector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleInjector.d.ts","sourceRoot":"","sources":["../../lib/injector/SimpleInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,QAAS,YAAW,SAAS;IAC/D,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE,aAAa,GAAG,CAAC;CAG5F"}
@@ -1,6 +1,34 @@
1
+ /** Decorator that writes class metadata under `key`; `mapFn` receives the previous value. */
1
2
  export declare const addClassMeta: <T>(key: string | symbol, mapFn: (prev: T | undefined) => T) => ClassDecorator;
3
+ /** Reads class metadata written by `addClassMeta`. */
2
4
  export declare function getClassMeta<T>(target: object, key: string | symbol): T | undefined;
5
+ /** Decorator that attaches a `key` -> `label` pair to a class. */
3
6
  export declare const addClassLabel: (key: string, label: string) => ClassDecorator;
7
+ /** Reads the labels written by `addClassLabel`. */
4
8
  export declare const getClassLabels: (target: object) => Map<string, string>;
9
+ /** Decorator that attaches a tag to a class. */
5
10
  export declare const addClassTag: (tag: string) => ClassDecorator;
11
+ /** Reads the tags written by `addClassTag`. */
6
12
  export declare const getClassTags: (target: object) => Set<string>;
13
+ /**
14
+ * Applies several class decorators as one, so a stack repeated on many classes
15
+ * can be given a name:
16
+ *
17
+ * ```typescript
18
+ * const repository = <T>(token: SingleToken<T>, ...mappers: RegistrationMapper<T>[]) =>
19
+ * createComposeClassDecorator(
20
+ * register(IRepositoryToken, token, addMediator(token), ...mappers),
21
+ * addClassMeta('injection-token', () => token),
22
+ * );
23
+ * ```
24
+ *
25
+ * Decorators are applied bottom-up, exactly as stacking them would be, so
26
+ * `@createComposeClassDecorator(a, b)` behaves like `@a @b` - moving a stack into one
27
+ * call never changes which decorator writes its metadata first.
28
+ *
29
+ * A decorator which returns a replacement class hands it to the next one, and
30
+ * the last replacement is returned - the same threading the runtime does for a
31
+ * stack.
32
+ */
33
+ export declare const createComposeClassDecorator: (...decorators: ClassDecorator[]) => ClassDecorator;
34
+ //# sourceMappingURL=class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../lib/metadata/class.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,eAAO,MAAM,YAAY,GACtB,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,KAAG,cAI7D,CAAC;AAEJ,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS,CAEnF;AAED,kEAAkE;AAClE,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,mBACgC,CAAC;AACzF,mDAAmD;AACnD,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAA+C,CAAC;AAElH,gDAAgD;AAChD,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,mBAA0E,CAAC;AAClH,+CAA+C;AAC/C,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,GAAG,CAAC,MAAM,CAA6C,CAAC;AAEtG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,2BAA2B,GACrC,GAAG,YAAY,cAAc,EAAE,KAAG,cAEsC,CAAC"}
@@ -1,6 +1,31 @@
1
+ /** Decorator that writes method metadata under `key`; `mapFn` receives the previous value. */
1
2
  export declare const addMethodMeta: <T>(key: string, mapFn: (prev: T | undefined) => T) => MethodDecorator;
3
+ /** Reads method metadata written by `addMethodMeta`. */
2
4
  export declare const getMethodMeta: (key: string, target: object, propertyKey: string) => unknown;
5
+ /** Decorator that attaches a `key` -> `label` pair to a method. */
3
6
  export declare const addMethodLabel: (key: string, label: string) => MethodDecorator;
7
+ /** Reads the labels written by `addMethodLabel`. */
4
8
  export declare const getMethodLabels: (target: object, propertyKey: string) => Map<string, string>;
9
+ /** Decorator that attaches a tag to a method. */
5
10
  export declare const addMethodTag: (tag: string) => MethodDecorator;
11
+ /** Reads the tags written by `addMethodTag`. */
6
12
  export declare const getMethodTags: (target: object, propertyKey: string) => Set<string>;
13
+ /**
14
+ * Applies several method decorators as one, so a stack repeated on many members
15
+ * can be given a name:
16
+ *
17
+ * ```typescript
18
+ * const handler = (event: string) =>
19
+ * createComposeMethodDecorator(addMethodTag('handler'), addMethodMeta('event', () => event));
20
+ * ```
21
+ *
22
+ * Decorators are applied bottom-up, exactly as stacking them would be, so
23
+ * `@createComposeMethodDecorator(a, b)` behaves like `@a @b`.
24
+ *
25
+ * The property descriptor is threaded through the chain the way the runtime
26
+ * threads it: a decorator which returns a replacement descriptor hands it to the
27
+ * next one, and the last replacement is returned. That is what makes wrapping
28
+ * decorators such as `@once` or `@throttle` compose here.
29
+ */
30
+ export declare const createComposeMethodDecorator: (...decorators: MethodDecorator[]) => MethodDecorator;
31
+ //# sourceMappingURL=method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../lib/metadata/method.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,eAAO,MAAM,aAAa,GACvB,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,KAAG,eAIpD,CAAC;AACJ,wDAAwD;AACxD,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,OACd,CAAC;AAEpE,mEAAmE;AACnE,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,oBACgC,CAAC;AAC1F,oDAAoD;AACpD,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CACO,CAAC;AAEhG,iDAAiD;AACjD,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,oBAA2E,CAAC;AACpH,gDAAgD;AAChD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,GAAG,CAAC,MAAM,CACO,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,4BAA4B,GACtC,GAAG,YAAY,eAAe,EAAE,KAAG,eAE8D,CAAC"}
@@ -1,6 +1,28 @@
1
+ /** Decorator that writes parameter metadata under `key`; `mapFn` receives the previous value. */
1
2
  export declare const addParamMeta: (key: string | symbol, mapFn: (prev: unknown) => unknown) => ParameterDecorator;
3
+ /** Reads parameter metadata written by `addParamMeta`. */
2
4
  export declare const getParamMeta: (key: string | symbol, target: object) => unknown[];
5
+ /** Decorator that attaches a `key` -> `label` pair to a parameter. */
3
6
  export declare const addParamLabel: (key: string, label: string) => ParameterDecorator;
7
+ /** Reads the labels written by `addParamLabel`. */
4
8
  export declare const getParamLabels: (target: object, parameterIndex: number) => Map<string, string>;
9
+ /** Decorator that attaches a tag to a parameter. */
5
10
  export declare const addParamTag: (tag: string) => ParameterDecorator;
11
+ /** Reads the tags written by `addParamTag`. */
6
12
  export declare const getParamTags: (target: object, parameterIndex: number) => Set<string>;
13
+ /**
14
+ * Applies several parameter decorators as one, so a stack repeated on many
15
+ * parameters can be given a name:
16
+ *
17
+ * ```typescript
18
+ * const fromConfig = <T>(key: string, map: MapFn<IConfig, T>) =>
19
+ * createComposeParameterDecorator(inject(pipe(by(ConfigToken), map)), addParamLabel('config', key));
20
+ * ```
21
+ *
22
+ * Decorators are applied bottom-up, exactly as stacking them would be, so
23
+ * `@createComposeParameterDecorator(a, b)` behaves like `@a @b`. A parameter
24
+ * decorator returns nothing, so there is nothing to thread - each one is called
25
+ * with the same target, property key and parameter index.
26
+ */
27
+ export declare const createComposeParameterDecorator: (...decorators: ParameterDecorator[]) => ParameterDecorator;
28
+ //# sourceMappingURL=parameter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../lib/metadata/parameter.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,eAAO,MAAM,YAAY,GACtB,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,KAAG,kBAK1D,CAAC;AACJ,0DAA0D;AAC1D,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,GAAG,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,EAE1E,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,uBAIpD,CAAC;AACL,mDAAmD;AACnD,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,gBAAgB,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAGzF,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,uBAInC,CAAC;AACL,+CAA+C;AAC/C,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,gBAAgB,MAAM,KAAG,GAAG,CAAC,MAAM,CAG/E,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,+BAA+B,GACzC,GAAG,YAAY,kBAAkB,EAAE,KAAG,kBAKtC,CAAC"}
@@ -1,2 +1,21 @@
1
1
  import { type constructor, type Instance } from '../utils/basic.js';
2
+ /**
3
+ * The class behind `target`: `target` itself when it is already a constructor,
4
+ * otherwise the constructor of the instance.
5
+ *
6
+ * `target` may be a proxy (a `lazy()` provider hands one out), and it is
7
+ * unwrapped before either branch, because metadata is defined on the real class
8
+ * and a proxy is never that class. A proxied class misses the lookup outright,
9
+ * standing in for the very object metadata is keyed by; a proxied instance would
10
+ * only answer `constructor` correctly if its handler forwards the read, which a
11
+ * custom one need not do.
12
+ *
13
+ * The branch tests for a constructor rather than for an instance: `Is.instance`
14
+ * asks for an *own* `constructor` property, which a prototype has and an
15
+ * instance does not - its own `constructor` lives one level up the chain.
16
+ *
17
+ * Every metadata read goes through here, so callers pass whatever they hold - a
18
+ * class, an instance, or a proxy of either - and never unwrap by hand.
19
+ */
2
20
  export declare function resolveConstructor(target: constructor<unknown> | Instance): constructor<unknown>;
21
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../lib/metadata/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAM,MAAM,gBAAgB,CAAC;AAGrE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAGhG"}
@@ -4,19 +4,43 @@ import { Serializable } from '../utils/basic.js';
4
4
  export type WithLazy = {
5
5
  lazy: boolean;
6
6
  };
7
+ /**
8
+ * The resolution context a provider works in: the `scope` resolving, the runtime
9
+ * `args`, and whether the caller asked for a `lazy` instance. One object, so a
10
+ * function handed it destructures what it uses (`({ scope, args }) => ...`).
11
+ */
7
12
  export type ProviderOptions = InjectOptions & Partial<WithLazy>;
13
+ /**
14
+ * `ProviderOptions` as a caller which addresses the scope directly passes them -
15
+ * `scope.resolve(key, options)`, `token.resolve(scope, options)` - so the scope is
16
+ * not repeated inside.
17
+ */
8
18
  export type ResolveOptions = Omit<ProviderOptions, keyof WithScope>;
19
+ /** A factory: builds the dependency from the resolution context. What `Registration.fromFn` takes. */
9
20
  export type ResolveDependency<T = unknown> = (options: ProviderOptions) => T;
21
+ /** What a {@link ScopeAccessRule} sees: the scope asking, the scope holding the provider, and the runtime args. */
10
22
  export type ScopeAccessOptions = {
11
23
  invocationScope: Tagged;
12
24
  providerScope: Tagged;
13
25
  args: unknown[];
14
26
  };
27
+ /** Decides whether a provider may be resolved for an invocation; `prev` is the result of earlier rules. Set with `scopeAccess(...)`. */
15
28
  export type ScopeAccessRule = (options: ScopeAccessOptions, prev: boolean) => boolean;
29
+ /** Computes args from the resolution context. */
16
30
  export type ArgsFn = (options: InjectOptions) => unknown[];
31
+ /** Maps runtime args to a `singleton(...)` cache key: one instance per distinct key. */
17
32
  export type GetCacheKey = (args: unknown[]) => string | Serializable;
33
+ /** Wraps or replaces a resolved dependency. Used by `decorate(...)`. */
18
34
  export type DecorateFn<Instance = any> = (dep: Instance, scope: IContainer) => Instance;
35
+ /**
36
+ * Provider hooks - the provider's own domain: a dependency was resolved.
37
+ *
38
+ * Resolution is the provider's business, so the hook list belongs to the
39
+ * provider. A dependency is not necessarily a constructed instance - a provider
40
+ * can hand out a value the container never built - so the hook takes `unknown`.
41
+ */
19
42
  export type ProviderHook = (dependency: unknown, scope: IContainer) => void;
43
+ /** The factory behind a registration. See {@link Provider}. */
20
44
  export interface IProvider<T = any> {
21
45
  resolve(options: ProviderOptions): T;
22
46
  hasAccess(options: ScopeAccessOptions): boolean;
@@ -30,3 +54,4 @@ export interface IProvider<T = any> {
30
54
  dispose(): void;
31
55
  onResolved(...hooks: ProviderHook[]): this;
32
56
  }
57
+ //# sourceMappingURL=IProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IProvider.d.ts","sourceRoot":"","sources":["../../lib/provider/IProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AACzC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,SAAS,CAAC,CAAC;AACpE,sGAAsG;AACtG,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,eAAe,KAAK,CAAC,CAAC;AAC7E,mHAAmH;AACnH,MAAM,MAAM,kBAAkB,GAAG;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AACrG,wIAAwI;AACxI,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;AAEtF,iDAAiD;AACjD,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,EAAE,CAAC;AAE3D,wFAAwF;AACxF,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,YAAY,CAAC;AACrE,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,KAAK,QAAQ,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE5E,+DAA+D;AAC/D,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG;IAChC,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC,CAAC;IAErC,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAEhD,GAAG,CAAC,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;IAEvC,aAAa,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAEjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,IAAI,IAAI,IAAI,CAAC;IAEb,WAAW,IAAI,IAAI,CAAC;IAEpB,gBAAgB,IAAI,OAAO,CAAC;IAE5B,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAE3C,OAAO,IAAI,IAAI,CAAC;IAEhB,UAAU,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;CAC5C"}
@@ -1,6 +1,12 @@
1
1
  import { type ArgsFn, type DecorateFn, type GetCacheKey, type IProvider, type ProviderOptions, type ResolveDependency, type ScopeAccessOptions, type ScopeAccessRule, type ProviderHook } from './IProvider.js';
2
2
  import type { DependencyKey } from '../container/IContainer.js';
3
3
  import { type constructor } from '../utils/basic.js';
4
+ /**
5
+ * The factory behind a registration: creates or returns the dependency and
6
+ * applies the pipes (`singleton`, `lazy`, `decorate`, args and access rules).
7
+ * Usually created for you by {@link Registration}; use it directly only for
8
+ * low-level `container.register(key, provider)` calls.
9
+ */
4
10
  export declare class Provider<T = any> implements IProvider<T> {
5
11
  private readonly resolveDependency;
6
12
  static fromClass<T>(Target: constructor<T>): IProvider<T>;
@@ -16,16 +22,40 @@ export declare class Provider<T = any> implements IProvider<T> {
16
22
  private isDisposed;
17
23
  private readonly onResolvedHookList;
18
24
  constructor(resolveDependency: ResolveDependency<T>);
25
+ /**
26
+ * @throws {ProviderDisposedError} when the provider has already been disposed.
27
+ * @throws {unknown} rethrows whatever an `onResolved` hook threw.
28
+ */
19
29
  resolve(options: ProviderOptions): T;
30
+ /**
31
+ * @throws {unknown} rethrows whatever an `onResolved` hook threw.
32
+ */
20
33
  private resolveDep;
21
34
  map(...mappers: DecorateFn<T>[]): this;
22
35
  addAccessRule(...rules: ScopeAccessRule[]): this;
23
36
  lazy(): this;
24
37
  autoResolve(): this;
38
+ /**
39
+ * @throws {ProviderDisposedError} when the provider has already been disposed.
40
+ */
25
41
  isAutoResolvable(): boolean;
26
42
  addArgsFn(...fns: ArgsFn[]): this;
43
+ /**
44
+ * @throws {ProviderDisposedError} when the provider has already been disposed.
45
+ */
27
46
  hasAccess(options: ScopeAccessOptions): boolean;
47
+ /**
48
+ * @throws {CannotApplySingletonTwiceError} when the provider is already configured as a singleton.
49
+ */
28
50
  singleton(getCacheKey?: GetCacheKey): this;
51
+ /**
52
+ * Hooks run after every mapper, on each resolved dependency. A singleton provider
53
+ * caches the dependency, so its hooks run once — on the resolve that filled the cache.
54
+ */
29
55
  onResolved(...hooks: ProviderHook[]): this;
56
+ /**
57
+ * @throws {ProviderDisposedError} when the provider has already been disposed.
58
+ */
30
59
  dispose(): void;
31
60
  }
61
+ //# sourceMappingURL=Provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAI5D;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IAuBxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAtB9C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAIzD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAI3C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa;IAIpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;gBAE5B,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEpE;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC;IAmBpC;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB,GAAG,CAAC,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAKtC,aAAa,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAKhD,IAAI,IAAI,IAAI;IAKZ,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAS3B,SAAS,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAKjC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAS/C;;OAEG;IACH,SAAS,CAAC,WAAW,GAAE,WAAuB,GAAG,IAAI;IASrD;;;OAGG;IACH,UAAU,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAK1C;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB"}