@expressots/core 2.16.2 → 3.0.0-beta.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 (185) hide show
  1. package/README.md +2 -2
  2. package/lib/CHANGELOG.md +312 -322
  3. package/lib/README.md +2 -2
  4. package/lib/cjs/application/application-container.js +18 -21
  5. package/lib/cjs/application/application-factory.js +4 -5
  6. package/lib/cjs/{common/server-env.types.js → application/application.types.js} +1 -0
  7. package/lib/cjs/application/index.js +3 -1
  8. package/lib/cjs/console/console.js +8 -20
  9. package/lib/cjs/container-module/container-module.js +10 -18
  10. package/lib/cjs/decorator/scope-binding.js +12 -11
  11. package/lib/cjs/di/annotation/decorator_utils.js +121 -0
  12. package/lib/cjs/di/annotation/inject.js +44 -0
  13. package/lib/cjs/di/annotation/inject_base.js +17 -0
  14. package/lib/cjs/di/annotation/injectable.js +43 -0
  15. package/lib/cjs/di/annotation/lazy_service_identifier.js +12 -0
  16. package/lib/cjs/di/annotation/multi_inject.js +30 -0
  17. package/lib/cjs/di/annotation/named.js +34 -0
  18. package/lib/cjs/di/annotation/optional.js +32 -0
  19. package/lib/cjs/di/annotation/post_construct.js +31 -0
  20. package/lib/cjs/di/annotation/pre_destroy.js +31 -0
  21. package/lib/cjs/di/annotation/property_event_decorator.js +15 -0
  22. package/lib/cjs/di/annotation/tagged.js +9 -0
  23. package/lib/cjs/di/annotation/target_name.js +35 -0
  24. package/lib/cjs/di/annotation/unmanaged.js +35 -0
  25. package/lib/cjs/di/binding-decorator/constants.js +7 -0
  26. package/lib/cjs/di/binding-decorator/decorator/fluent_provide.js +20 -0
  27. package/lib/cjs/di/binding-decorator/decorator/provide.js +37 -0
  28. package/lib/cjs/di/binding-decorator/factory/module_factory.js +17 -0
  29. package/lib/cjs/di/binding-decorator/index.js +14 -0
  30. package/lib/cjs/di/binding-decorator/syntax/provide_done_syntax.js +42 -0
  31. package/lib/cjs/di/binding-decorator/syntax/provide_in_syntax.js +33 -0
  32. package/lib/cjs/di/binding-decorator/syntax/provide_in_when_on_syntax.js +64 -0
  33. package/lib/cjs/di/binding-decorator/syntax/provide_on_syntax.js +22 -0
  34. package/lib/cjs/di/binding-decorator/syntax/provide_when_on_syntax.js +57 -0
  35. package/lib/cjs/di/binding-decorator/syntax/provide_when_syntax.js +89 -0
  36. package/lib/cjs/di/binding-decorator/utils/auto_wire.js +18 -0
  37. package/lib/cjs/di/bindings/binding.js +40 -0
  38. package/lib/cjs/di/bindings/binding_count.js +8 -0
  39. package/lib/cjs/di/constants/error_msgs.js +60 -0
  40. package/lib/cjs/di/constants/literal_types.js +26 -0
  41. package/lib/cjs/di/constants/metadata_keys.js +38 -0
  42. package/lib/cjs/di/container/container.js +521 -0
  43. package/lib/cjs/di/container/container_module.js +18 -0
  44. package/lib/cjs/di/container/container_snapshot.js +15 -0
  45. package/lib/cjs/di/container/lookup.js +132 -0
  46. package/lib/cjs/di/container/module_activation_store.js +49 -0
  47. package/lib/cjs/di/interfaces/interfaces.js +2 -0
  48. package/lib/cjs/di/inversify.js +78 -0
  49. package/lib/cjs/di/planning/context.js +17 -0
  50. package/lib/cjs/di/planning/metadata.js +42 -0
  51. package/lib/cjs/di/planning/metadata_reader.js +45 -0
  52. package/lib/cjs/di/planning/plan.js +10 -0
  53. package/lib/cjs/di/planning/planner.js +186 -0
  54. package/lib/cjs/di/planning/queryable_string.js +27 -0
  55. package/lib/cjs/di/planning/reflection_utils.js +178 -0
  56. package/lib/cjs/di/planning/request.js +23 -0
  57. package/lib/cjs/di/planning/target.js +108 -0
  58. package/lib/cjs/di/resolution/instantiation.js +150 -0
  59. package/lib/cjs/di/resolution/resolver.js +188 -0
  60. package/lib/cjs/di/scope/scope.js +50 -0
  61. package/lib/cjs/di/syntax/binding_in_syntax.js +23 -0
  62. package/lib/cjs/di/syntax/binding_in_when_on_syntax.js +75 -0
  63. package/lib/cjs/di/syntax/binding_on_syntax.js +18 -0
  64. package/lib/cjs/di/syntax/binding_to_syntax.js +111 -0
  65. package/lib/cjs/di/syntax/binding_when_on_syntax.js +64 -0
  66. package/lib/cjs/di/syntax/binding_when_syntax.js +84 -0
  67. package/lib/cjs/di/syntax/constraint_helpers.js +68 -0
  68. package/lib/cjs/di/utils/async.js +15 -0
  69. package/lib/cjs/di/utils/binding_utils.js +77 -0
  70. package/lib/cjs/di/utils/clonable.js +9 -0
  71. package/lib/cjs/di/utils/exceptions.js +46 -0
  72. package/lib/cjs/di/utils/factory_type.js +9 -0
  73. package/lib/cjs/di/utils/id.js +7 -0
  74. package/lib/cjs/di/utils/js.js +15 -0
  75. package/lib/cjs/di/utils/serialization.js +132 -0
  76. package/lib/cjs/error/app-error.js +5 -2
  77. package/lib/cjs/error/report.js +24 -15
  78. package/lib/cjs/index.js +1 -2
  79. package/lib/cjs/middleware/middleware-interface.js +2 -0
  80. package/lib/cjs/middleware/middleware-service.js +9 -24
  81. package/lib/cjs/provider/db-in-memory/base-repo.repository.js +3 -8
  82. package/lib/cjs/provider/db-in-memory/db-in-memory.provider.js +8 -5
  83. package/lib/cjs/provider/dto-validator/dto-validator.provider.js +4 -4
  84. package/lib/cjs/provider/dto-validator/package-resolver.js +56 -0
  85. package/lib/cjs/provider/environment/env-validator.provider.js +14 -12
  86. package/lib/cjs/provider/logger/logger.provider.js +10 -5
  87. package/lib/cjs/provider/provider-manager.js +21 -17
  88. package/lib/cjs/types/application/application-container.d.ts +12 -25
  89. package/lib/cjs/types/application/application-factory.d.ts +10 -7
  90. package/lib/cjs/types/{common/server-env.types.d.ts → application/application.types.d.ts} +1 -0
  91. package/lib/cjs/types/application/index.d.ts +1 -0
  92. package/lib/cjs/types/console/console.d.ts +3 -10
  93. package/lib/cjs/types/console/index.d.ts +2 -1
  94. package/lib/cjs/types/container-module/container-module.d.ts +3 -1
  95. package/lib/cjs/types/decorator/scope-binding.d.ts +9 -9
  96. package/lib/cjs/types/di/annotation/decorator_utils.d.ts +16 -0
  97. package/lib/cjs/types/di/annotation/inject.d.ts +16 -0
  98. package/lib/cjs/types/di/annotation/inject_base.d.ts +3 -0
  99. package/lib/cjs/types/di/annotation/injectable.d.ts +7 -0
  100. package/lib/cjs/types/di/annotation/lazy_service_identifier.d.ts +7 -0
  101. package/lib/cjs/types/di/annotation/multi_inject.d.ts +2 -0
  102. package/lib/cjs/types/di/annotation/named.d.ts +2 -0
  103. package/lib/cjs/types/di/annotation/optional.d.ts +2 -0
  104. package/lib/cjs/types/di/annotation/post_construct.d.ts +4 -0
  105. package/lib/cjs/types/di/annotation/pre_destroy.d.ts +4 -0
  106. package/lib/cjs/types/di/annotation/property_event_decorator.d.ts +4 -0
  107. package/lib/cjs/types/di/annotation/tagged.d.ts +2 -0
  108. package/lib/cjs/types/di/annotation/target_name.d.ts +3 -0
  109. package/lib/cjs/types/di/annotation/unmanaged.d.ts +3 -0
  110. package/lib/cjs/types/di/binding-decorator/constants.d.ts +4 -0
  111. package/lib/cjs/types/di/binding-decorator/decorator/fluent_provide.d.ts +4 -0
  112. package/lib/cjs/types/di/binding-decorator/decorator/provide.d.ts +4 -0
  113. package/lib/cjs/types/di/binding-decorator/factory/module_factory.d.ts +4 -0
  114. package/lib/cjs/types/di/binding-decorator/index.d.ts +8 -0
  115. package/lib/cjs/types/di/binding-decorator/interfaces/interfaces.d.ts +39 -0
  116. package/lib/cjs/types/di/binding-decorator/syntax/provide_done_syntax.d.ts +7 -0
  117. package/lib/cjs/types/di/binding-decorator/syntax/provide_in_syntax.d.ts +11 -0
  118. package/lib/cjs/types/di/binding-decorator/syntax/provide_in_when_on_syntax.d.ts +27 -0
  119. package/lib/cjs/types/di/binding-decorator/syntax/provide_on_syntax.d.ts +10 -0
  120. package/lib/cjs/types/di/binding-decorator/syntax/provide_when_on_syntax.d.ts +24 -0
  121. package/lib/cjs/types/di/binding-decorator/syntax/provide_when_syntax.d.ts +23 -0
  122. package/lib/cjs/types/di/binding-decorator/utils/auto_wire.d.ts +3 -0
  123. package/lib/cjs/types/di/bindings/binding.d.ts +20 -0
  124. package/lib/cjs/types/di/bindings/binding_count.d.ts +5 -0
  125. package/lib/cjs/types/di/constants/error_msgs.d.ts +32 -0
  126. package/lib/cjs/types/di/constants/literal_types.d.ts +5 -0
  127. package/lib/cjs/types/di/constants/metadata_keys.d.ts +13 -0
  128. package/lib/cjs/types/di/container/container.d.ts +73 -0
  129. package/lib/cjs/types/di/container/container_module.d.ts +11 -0
  130. package/lib/cjs/types/di/container/container_snapshot.d.ts +10 -0
  131. package/lib/cjs/types/di/container/lookup.d.ts +16 -0
  132. package/lib/cjs/types/di/container/module_activation_store.d.ts +10 -0
  133. package/lib/cjs/types/di/interfaces/interfaces.d.ts +299 -0
  134. package/lib/cjs/types/di/inversify.d.ts +25 -0
  135. package/lib/cjs/types/di/planning/context.d.ts +11 -0
  136. package/lib/cjs/types/di/planning/metadata.d.ts +8 -0
  137. package/lib/cjs/types/di/planning/metadata_reader.d.ts +6 -0
  138. package/lib/cjs/types/di/planning/plan.d.ts +7 -0
  139. package/lib/cjs/types/di/planning/planner.d.ts +5 -0
  140. package/lib/cjs/types/di/planning/queryable_string.d.ts +11 -0
  141. package/lib/cjs/types/di/planning/reflection_utils.d.ts +5 -0
  142. package/lib/cjs/types/di/planning/request.d.ts +14 -0
  143. package/lib/cjs/types/di/planning/target.d.ts +23 -0
  144. package/lib/cjs/types/di/resolution/instantiation.d.ts +3 -0
  145. package/lib/cjs/types/di/resolution/resolver.d.ts +3 -0
  146. package/lib/cjs/types/di/scope/scope.d.ts +3 -0
  147. package/lib/cjs/types/di/syntax/binding_in_syntax.d.ts +9 -0
  148. package/lib/cjs/types/di/syntax/binding_in_when_on_syntax.d.ts +29 -0
  149. package/lib/cjs/types/di/syntax/binding_on_syntax.d.ts +8 -0
  150. package/lib/cjs/types/di/syntax/binding_to_syntax.d.ts +18 -0
  151. package/lib/cjs/types/di/syntax/binding_when_on_syntax.d.ts +25 -0
  152. package/lib/cjs/types/di/syntax/binding_when_syntax.d.ts +21 -0
  153. package/lib/cjs/types/di/syntax/constraint_helpers.d.ts +6 -0
  154. package/lib/cjs/types/di/utils/async.d.ts +3 -0
  155. package/lib/cjs/types/di/utils/binding_utils.d.ts +4 -0
  156. package/lib/cjs/types/di/utils/clonable.d.ts +3 -0
  157. package/lib/cjs/types/di/utils/exceptions.d.ts +2 -0
  158. package/lib/cjs/types/di/utils/factory_type.d.ts +5 -0
  159. package/lib/cjs/types/di/utils/id.d.ts +2 -0
  160. package/lib/cjs/types/di/utils/js.d.ts +1 -0
  161. package/lib/cjs/types/di/utils/serialization.d.ts +10 -0
  162. package/lib/cjs/types/error/report.d.ts +7 -5
  163. package/lib/cjs/types/index.d.ts +1 -2
  164. package/lib/cjs/types/middleware/index.d.ts +2 -1
  165. package/lib/cjs/types/middleware/middleware-interface.d.ts +185 -0
  166. package/lib/cjs/types/middleware/middleware-service.d.ts +11 -163
  167. package/lib/cjs/types/provider/db-in-memory/db-in-memory.provider.d.ts +4 -0
  168. package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts +2 -3
  169. package/lib/cjs/types/{common → provider/dto-validator}/package-resolver.d.ts +1 -2
  170. package/lib/cjs/types/provider/environment/env-validator.provider.d.ts +7 -3
  171. package/lib/cjs/types/provider/logger/logger.provider.d.ts +5 -0
  172. package/lib/cjs/types/provider/provider-manager.d.ts +22 -2
  173. package/lib/package.json +9 -15
  174. package/package.json +9 -15
  175. package/lib/cjs/common/index.js +0 -5
  176. package/lib/cjs/common/package-resolver.js +0 -34
  177. package/lib/cjs/controller/base-controller.js +0 -63
  178. package/lib/cjs/controller/index.js +0 -5
  179. package/lib/cjs/types/common/index.d.ts +0 -2
  180. package/lib/cjs/types/common/project-config.d.ts +0 -56
  181. package/lib/cjs/types/controller/base-controller.d.ts +0 -32
  182. package/lib/cjs/types/controller/index.d.ts +0 -1
  183. /package/lib/cjs/{common → console}/color-codes.js +0 -0
  184. /package/lib/cjs/{common/project-config.js → di/binding-decorator/interfaces/interfaces.js} +0 -0
  185. /package/lib/cjs/types/{common → console}/color-codes.d.ts +0 -0
@@ -0,0 +1,299 @@
1
+ import { FactoryType } from "../utils/factory_type";
2
+ declare namespace interfaces {
3
+ export type DynamicValue<T> = (context: interfaces.Context) => T | Promise<T>;
4
+ export type ContainerResolution<T> = T | Promise<T> | Array<T | Promise<T>>;
5
+ type AsyncCallback<TCallback> = TCallback extends (...args: infer TArgs) => infer TResult ? (...args: TArgs) => Promise<TResult> : never;
6
+ export type BindingScope = "Singleton" | "Transient" | "Request";
7
+ export type BindingType = "ConstantValue" | "Constructor" | "DynamicValue" | "Factory" | "Function" | "Instance" | "Invalid" | "Provider";
8
+ export type TargetType = "ConstructorArgument" | "ClassProperty" | "Variable";
9
+ export interface BindingScopeEnum {
10
+ Request: interfaces.BindingScope;
11
+ Singleton: interfaces.BindingScope;
12
+ Transient: interfaces.BindingScope;
13
+ }
14
+ export interface BindingTypeEnum {
15
+ ConstantValue: interfaces.BindingType;
16
+ Constructor: interfaces.BindingType;
17
+ DynamicValue: interfaces.BindingType;
18
+ Factory: interfaces.BindingType;
19
+ Function: interfaces.BindingType;
20
+ Instance: interfaces.BindingType;
21
+ Invalid: interfaces.BindingType;
22
+ Provider: interfaces.BindingType;
23
+ }
24
+ export interface TargetTypeEnum {
25
+ ConstructorArgument: interfaces.TargetType;
26
+ ClassProperty: interfaces.TargetType;
27
+ Variable: interfaces.TargetType;
28
+ }
29
+ export type Newable<T> = new (...args: Array<unknown>) => T;
30
+ export type Instance<T> = T & Record<string, () => void>;
31
+ export interface Abstract<T> {
32
+ prototype: T;
33
+ }
34
+ export type ServiceIdentifier<T = unknown> = string | symbol | Newable<T> | Abstract<T>;
35
+ export interface Clonable<T> {
36
+ clone(): T;
37
+ }
38
+ export type BindingActivation<T = unknown> = (context: interfaces.Context, injectable: T) => T | Promise<T>;
39
+ export type BindingDeactivation<T = unknown> = (injectable: T) => void | Promise<void>;
40
+ export interface Binding<TActivated = unknown> extends Clonable<Binding<TActivated>> {
41
+ id: number;
42
+ moduleId: ContainerModuleBase["id"];
43
+ activated: boolean;
44
+ serviceIdentifier: ServiceIdentifier<TActivated>;
45
+ constraint: ConstraintFunction;
46
+ dynamicValue: DynamicValue<TActivated> | null;
47
+ scope: BindingScope;
48
+ type: BindingType;
49
+ implementationType: Newable<TActivated> | TActivated | null;
50
+ factory: FactoryCreator<unknown> | null;
51
+ provider: ProviderCreator<unknown> | null;
52
+ onActivation: BindingActivation<TActivated> | null;
53
+ onDeactivation: BindingDeactivation<TActivated> | null;
54
+ cache: null | TActivated | Promise<TActivated>;
55
+ }
56
+ export type SimpleFactory<T, U extends Array<unknown> = Array<unknown>> = (...args: U) => T;
57
+ export type MultiFactory<T, U extends Array<unknown> = Array<unknown>, V extends Array<unknown> = Array<unknown>> = (...args: U) => SimpleFactory<T, V>;
58
+ export type Factory<T, U extends Array<unknown> = Array<unknown>, V extends Array<unknown> = Array<unknown>> = SimpleFactory<T, U> | MultiFactory<T, U, V>;
59
+ export type FactoryCreator<T, U extends Array<unknown> = Array<unknown>, V extends Array<unknown> = Array<unknown>> = (context: Context) => Factory<T, U, V>;
60
+ export type AutoNamedFactory<T> = SimpleFactory<T, [string]>;
61
+ export type AutoFactory<T> = SimpleFactory<T, []>;
62
+ export type FactoryTypeFunction<T = unknown> = (context: interfaces.Context) => T | Promise<T>;
63
+ export interface FactoryDetails {
64
+ factoryType: FactoryType;
65
+ factory: FactoryTypeFunction | null;
66
+ }
67
+ export type Provider<T> = (...args: Array<unknown>) => ((...args: Array<unknown>) => Promise<T>) | Promise<T>;
68
+ export type ProviderCreator<T> = (context: Context) => Provider<T>;
69
+ export interface NextArgs<T = unknown> {
70
+ avoidConstraints: boolean;
71
+ contextInterceptor: (contexts: Context) => Context;
72
+ isMultiInject: boolean;
73
+ targetType: TargetType;
74
+ serviceIdentifier: interfaces.ServiceIdentifier<T>;
75
+ key?: string | number | symbol | undefined;
76
+ value?: unknown;
77
+ }
78
+ export type Next = (args: NextArgs) => unknown | Array<unknown>;
79
+ export type Middleware = (next: Next) => Next;
80
+ export type ContextInterceptor = (context: interfaces.Context) => interfaces.Context;
81
+ export interface Context {
82
+ id: number;
83
+ container: Container;
84
+ plan: Plan;
85
+ currentRequest: Request;
86
+ addPlan(plan: Plan): void;
87
+ setCurrentRequest(request: Request): void;
88
+ }
89
+ export type MetadataOrMetadataArray = Metadata | Array<Metadata>;
90
+ export interface Metadata<TValue = unknown> {
91
+ key: string | number | symbol;
92
+ value: TValue;
93
+ }
94
+ export interface Plan {
95
+ parentContext: Context;
96
+ rootRequest: Request;
97
+ }
98
+ export interface QueryableString {
99
+ startsWith(searchString: string): boolean;
100
+ endsWith(searchString: string): boolean;
101
+ contains(searchString: string): boolean;
102
+ equals(compareString: string): boolean;
103
+ value(): string;
104
+ }
105
+ export type ResolveRequestHandler = (request: interfaces.Request) => unknown;
106
+ export type RequestScope = Map<unknown, unknown>;
107
+ export interface Request {
108
+ id: number;
109
+ serviceIdentifier: ServiceIdentifier;
110
+ parentContext: Context;
111
+ parentRequest: Request | null;
112
+ childRequests: Array<Request>;
113
+ target: Target;
114
+ bindings: Array<Binding<unknown>>;
115
+ requestScope: RequestScope | null;
116
+ addChildRequest(serviceIdentifier: ServiceIdentifier, bindings: Binding<unknown> | Array<Binding<unknown>>, target: Target): Request;
117
+ }
118
+ export interface Target {
119
+ id: number;
120
+ serviceIdentifier: ServiceIdentifier;
121
+ type: TargetType;
122
+ name: QueryableString;
123
+ identifier: string | symbol;
124
+ metadata: Array<Metadata>;
125
+ getNamedTag(): interfaces.Metadata<string> | null;
126
+ getCustomTags(): Array<interfaces.Metadata> | null;
127
+ hasTag(key: string | number | symbol): boolean;
128
+ isArray(): boolean;
129
+ matchesArray(name: interfaces.ServiceIdentifier): boolean;
130
+ isNamed(): boolean;
131
+ isTagged(): boolean;
132
+ isOptional(): boolean;
133
+ matchesNamedTag(name: string): boolean;
134
+ matchesTag(key: string | number | symbol): (value: unknown) => boolean;
135
+ }
136
+ /**
137
+ * Interface for container options that can be passed to the AppContainer class.
138
+ * @public API
139
+ */
140
+ export interface ContainerOptions {
141
+ /**
142
+ * Allows auto-binding of injectable classes.
143
+ */
144
+ autoBindInjectable?: boolean;
145
+ /**
146
+ * The default scope for bindings in the container.
147
+ * It can be set to Request (default), Singleton, or Transient.
148
+ */
149
+ defaultScope?: BindingScope | undefined;
150
+ /**
151
+ * Allows skipping of base class checks when working with derived classes.
152
+ */
153
+ skipBaseClassChecks?: boolean;
154
+ }
155
+ export interface Container {
156
+ id: number;
157
+ parent: Container | null;
158
+ options: ContainerOptions;
159
+ bind<T>(serviceIdentifier: ServiceIdentifier<T>): BindingToSyntax<T>;
160
+ rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>;
161
+ rebindAsync<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): Promise<interfaces.BindingToSyntax<T>>;
162
+ unbind(serviceIdentifier: ServiceIdentifier): void;
163
+ unbindAsync(serviceIdentifier: interfaces.ServiceIdentifier): Promise<void>;
164
+ unbindAll(): void;
165
+ unbindAllAsync(): Promise<void>;
166
+ isBound(serviceIdentifier: ServiceIdentifier): boolean;
167
+ isCurrentBound<T>(serviceIdentifier: ServiceIdentifier<T>): boolean;
168
+ isBoundNamed(serviceIdentifier: ServiceIdentifier, named: string | number | symbol): boolean;
169
+ isBoundTagged(serviceIdentifier: ServiceIdentifier, key: string | number | symbol, value: unknown): boolean;
170
+ get<T>(serviceIdentifier: ServiceIdentifier<T>): T;
171
+ getNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): T;
172
+ getTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T;
173
+ getAll<T>(serviceIdentifier: ServiceIdentifier<T>): Array<T>;
174
+ getAllTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): Array<T>;
175
+ getAllNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): Array<T>;
176
+ getAsync<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<T>;
177
+ getNamedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): Promise<T>;
178
+ getTaggedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): Promise<T>;
179
+ getAllAsync<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<Array<T>>;
180
+ getAllTaggedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): Promise<Array<T>>;
181
+ getAllNamedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): Promise<Array<T>>;
182
+ onActivation<T>(serviceIdentifier: ServiceIdentifier<T>, onActivation: BindingActivation<T>): void;
183
+ onDeactivation<T>(serviceIdentifier: ServiceIdentifier<T>, onDeactivation: BindingDeactivation<T>): void;
184
+ resolve<T>(constructorFunction: interfaces.Newable<T>): T;
185
+ load(...modules: Array<ContainerModule>): void;
186
+ loadAsync(...modules: Array<AsyncContainerModule>): Promise<void>;
187
+ unload(...modules: Array<ContainerModuleBase>): void;
188
+ unloadAsync(...modules: Array<ContainerModuleBase>): Promise<void>;
189
+ applyCustomMetadataReader(metadataReader: MetadataReader): void;
190
+ applyMiddleware(...middleware: Array<Middleware>): void;
191
+ snapshot(): void;
192
+ restore(): void;
193
+ createChild(): Container;
194
+ }
195
+ export type Bind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;
196
+ export type Rebind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;
197
+ export type Unbind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => void;
198
+ export type UnbindAsync = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => Promise<void>;
199
+ export type IsBound = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => boolean;
200
+ export interface ContainerModuleBase {
201
+ id: number;
202
+ }
203
+ export interface ContainerModule extends ContainerModuleBase {
204
+ registry: ContainerModuleCallBack;
205
+ }
206
+ export interface AsyncContainerModule extends ContainerModuleBase {
207
+ registry: AsyncContainerModuleCallBack;
208
+ }
209
+ export interface ModuleActivationHandlers {
210
+ onActivations: Lookup<BindingActivation<unknown>>;
211
+ onDeactivations: Lookup<BindingDeactivation<unknown>>;
212
+ }
213
+ export interface ModuleActivationStore extends Clonable<ModuleActivationStore> {
214
+ addDeactivation(moduleId: ContainerModuleBase["id"], serviceIdentifier: ServiceIdentifier<unknown>, onDeactivation: interfaces.BindingDeactivation<unknown>): void;
215
+ addActivation(moduleId: ContainerModuleBase["id"], serviceIdentifier: ServiceIdentifier<unknown>, onActivation: interfaces.BindingActivation<unknown>): void;
216
+ remove(moduleId: ContainerModuleBase["id"]): ModuleActivationHandlers;
217
+ }
218
+ export type ContainerModuleCallBack = (bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind, unbindAsync: interfaces.UnbindAsync, onActivation: interfaces.Container["onActivation"], onDeactivation: interfaces.Container["onDeactivation"]) => void;
219
+ export type AsyncContainerModuleCallBack = AsyncCallback<ContainerModuleCallBack>;
220
+ export interface ContainerSnapshot {
221
+ bindings: Lookup<Binding<unknown>>;
222
+ activations: Lookup<BindingActivation<unknown>>;
223
+ deactivations: Lookup<BindingDeactivation<unknown>>;
224
+ middleware: Next | null;
225
+ moduleActivationStore: interfaces.ModuleActivationStore;
226
+ }
227
+ export interface Lookup<T> extends Clonable<Lookup<T>> {
228
+ [x: string]: any;
229
+ add(serviceIdentifier: ServiceIdentifier, value: T): void;
230
+ getMap(): Map<interfaces.ServiceIdentifier, Array<T>>;
231
+ get(serviceIdentifier: ServiceIdentifier): Array<T>;
232
+ remove(serviceIdentifier: interfaces.ServiceIdentifier): void;
233
+ removeByCondition(condition: (item: T) => boolean): Array<T>;
234
+ removeIntersection(lookup: interfaces.Lookup<T>): void;
235
+ hasKey(serviceIdentifier: ServiceIdentifier): boolean;
236
+ clone(): Lookup<T>;
237
+ traverse(func: (key: interfaces.ServiceIdentifier, value: Array<T>) => void): void;
238
+ }
239
+ export interface BindingOnSyntax<T> {
240
+ onActivation(fn: (context: Context, injectable: T) => T | Promise<T>): BindingWhenSyntax<T>;
241
+ onDeactivation(fn: (injectable: T) => void | Promise<void>): BindingWhenSyntax<T>;
242
+ }
243
+ export interface BindingWhenSyntax<T> {
244
+ when(constraint: (request: Request) => boolean): BindingOnSyntax<T>;
245
+ whenTargetNamed(name: string | number | symbol): BindingOnSyntax<T>;
246
+ whenTargetIsDefault(): BindingOnSyntax<T>;
247
+ whenTargetTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax<T>;
248
+ whenInjectedInto(parent: NewableFunction | string): BindingOnSyntax<T>;
249
+ whenParentNamed(name: string | number | symbol): BindingOnSyntax<T>;
250
+ whenParentTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax<T>;
251
+ whenAnyAncestorIs(ancestor: NewableFunction | string): BindingOnSyntax<T>;
252
+ whenNoAncestorIs(ancestor: NewableFunction | string): BindingOnSyntax<T>;
253
+ whenAnyAncestorNamed(name: string | number | symbol): BindingOnSyntax<T>;
254
+ whenAnyAncestorTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax<T>;
255
+ whenNoAncestorNamed(name: string | number | symbol): BindingOnSyntax<T>;
256
+ whenNoAncestorTagged(tag: string | number | symbol, value: unknown): BindingOnSyntax<T>;
257
+ whenAnyAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax<T>;
258
+ whenNoAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax<T>;
259
+ }
260
+ export interface BindingWhenOnSyntax<T> extends BindingWhenSyntax<T>, BindingOnSyntax<T> {
261
+ }
262
+ export interface BindingInSyntax<T> {
263
+ inSingletonScope(): BindingWhenOnSyntax<T>;
264
+ inTransientScope(): BindingWhenOnSyntax<T>;
265
+ inRequestScope(): BindingWhenOnSyntax<T>;
266
+ }
267
+ export interface BindingInWhenOnSyntax<T> extends BindingInSyntax<T>, BindingWhenOnSyntax<T> {
268
+ }
269
+ export interface BindingToSyntax<T> {
270
+ to(constructor: Newable<T>): BindingInWhenOnSyntax<T>;
271
+ toSelf(): BindingInWhenOnSyntax<T>;
272
+ toConstantValue(value: T): BindingWhenOnSyntax<T>;
273
+ toDynamicValue(func: DynamicValue<T>): BindingInWhenOnSyntax<T>;
274
+ toConstructor<T2>(constructor: Newable<T2>): BindingWhenOnSyntax<T>;
275
+ toFactory<T2, T3 extends Array<unknown> = Array<unknown>, T4 extends Array<unknown> = Array<unknown>>(factory: FactoryCreator<T2, T3, T4>): BindingWhenOnSyntax<T>;
276
+ toFunction(func: T): BindingWhenOnSyntax<T>;
277
+ toAutoFactory<T2>(serviceIdentifier: ServiceIdentifier<T2>): BindingWhenOnSyntax<T>;
278
+ toAutoNamedFactory<T2>(serviceIdentifier: ServiceIdentifier<T2>): BindingWhenOnSyntax<T>;
279
+ toProvider<T2>(provider: ProviderCreator<T2>): BindingWhenOnSyntax<T>;
280
+ toService(service: ServiceIdentifier<T>): void;
281
+ }
282
+ export interface ConstraintFunction {
283
+ metaData?: Metadata;
284
+ (request: Request | null): boolean;
285
+ }
286
+ export interface MetadataReader {
287
+ getConstructorMetadata(constructorFunc: NewableFunction): ConstructorMetadata;
288
+ getPropertiesMetadata(constructorFunc: NewableFunction): MetadataMap;
289
+ }
290
+ export interface MetadataMap {
291
+ [propertyNameOrArgumentIndex: string | symbol]: Array<Metadata>;
292
+ }
293
+ export interface ConstructorMetadata {
294
+ compilerGeneratedMetadata: Array<NewableFunction> | undefined;
295
+ userGeneratedMetadata: MetadataMap;
296
+ }
297
+ export {};
298
+ }
299
+ export { interfaces };
@@ -0,0 +1,25 @@
1
+ import * as keys from "./constants/metadata_keys";
2
+ export declare const METADATA_KEY: typeof keys;
3
+ export { Container } from "./container/container";
4
+ export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum, } from "./constants/literal_types";
5
+ export { AsyncContainerModule, ContainerModule, } from "./container/container_module";
6
+ export { createTaggedDecorator } from "./annotation/decorator_utils";
7
+ export { injectable } from "./annotation/injectable";
8
+ export { tagged } from "./annotation/tagged";
9
+ export { named } from "./annotation/named";
10
+ export { inject } from "./annotation/inject";
11
+ export { LazyServiceIdentifier } from "./annotation/lazy_service_identifier";
12
+ export { LazyServiceIdentifier as LazyServiceIdentifer } from "./annotation/lazy_service_identifier";
13
+ export { optional } from "./annotation/optional";
14
+ export { unmanaged } from "./annotation/unmanaged";
15
+ export { multiInject } from "./annotation/multi_inject";
16
+ export { targetName } from "./annotation/target_name";
17
+ export { postConstruct } from "./annotation/post_construct";
18
+ export { preDestroy } from "./annotation/pre_destroy";
19
+ export { MetadataReader } from "./planning/metadata_reader";
20
+ export { id } from "./utils/id";
21
+ export { interfaces } from "./interfaces/interfaces";
22
+ export { decorate } from "./annotation/decorator_utils";
23
+ export { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint, } from "./syntax/constraint_helpers";
24
+ export { getServiceIdentifierAsString } from "./utils/serialization";
25
+ export { multiBindToService } from "./utils/binding_utils";
@@ -0,0 +1,11 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class Context implements interfaces.Context {
3
+ id: number;
4
+ container: interfaces.Container;
5
+ plan: interfaces.Plan;
6
+ currentRequest: interfaces.Request;
7
+ constructor(container: interfaces.Container);
8
+ addPlan(plan: interfaces.Plan): void;
9
+ setCurrentRequest(currentRequest: interfaces.Request): void;
10
+ }
11
+ export { Context };
@@ -0,0 +1,8 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class Metadata implements interfaces.Metadata {
3
+ key: string | number | symbol;
4
+ value: unknown;
5
+ constructor(key: string | number | symbol, value: unknown);
6
+ toString(): string;
7
+ }
8
+ export { Metadata };
@@ -0,0 +1,6 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class MetadataReader implements interfaces.MetadataReader {
3
+ getConstructorMetadata(constructorFunc: NewableFunction): interfaces.ConstructorMetadata;
4
+ getPropertiesMetadata(constructorFunc: NewableFunction): interfaces.MetadataMap;
5
+ }
6
+ export { MetadataReader };
@@ -0,0 +1,7 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class Plan implements interfaces.Plan {
3
+ parentContext: interfaces.Context;
4
+ rootRequest: interfaces.Request;
5
+ constructor(parentContext: interfaces.Context, rootRequest: interfaces.Request);
6
+ }
7
+ export { Plan };
@@ -0,0 +1,5 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare function getBindingDictionary(cntnr: interfaces.Container): interfaces.Lookup<interfaces.Binding<unknown>>;
3
+ declare function plan(metadataReader: interfaces.MetadataReader, container: interfaces.Container, isMultiInject: boolean, targetType: interfaces.TargetType, serviceIdentifier: interfaces.ServiceIdentifier, key?: string | number | symbol, value?: unknown, avoidConstraints?: boolean): interfaces.Context;
4
+ declare function createMockRequest(container: interfaces.Container, serviceIdentifier: interfaces.ServiceIdentifier, key: string | number | symbol, value: unknown): interfaces.Request;
5
+ export { plan, createMockRequest, getBindingDictionary };
@@ -0,0 +1,11 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class QueryableString implements interfaces.QueryableString {
3
+ private str;
4
+ constructor(str: string);
5
+ startsWith(searchString: string): boolean;
6
+ endsWith(searchString: string): boolean;
7
+ contains(searchString: string): boolean;
8
+ equals(compareString: string): boolean;
9
+ value(): string;
10
+ }
11
+ export { QueryableString };
@@ -0,0 +1,5 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ import { getFunctionName } from "../utils/serialization";
3
+ declare function getDependencies(metadataReader: interfaces.MetadataReader, func: NewableFunction): Array<interfaces.Target>;
4
+ declare function getBaseClassDependencyCount(metadataReader: interfaces.MetadataReader, func: NewableFunction): number;
5
+ export { getDependencies, getBaseClassDependencyCount, getFunctionName };
@@ -0,0 +1,14 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class Request implements interfaces.Request {
3
+ id: number;
4
+ serviceIdentifier: interfaces.ServiceIdentifier;
5
+ parentContext: interfaces.Context;
6
+ parentRequest: interfaces.Request | null;
7
+ bindings: Array<interfaces.Binding<unknown>>;
8
+ childRequests: Array<interfaces.Request>;
9
+ target: interfaces.Target;
10
+ requestScope: interfaces.RequestScope | null;
11
+ constructor(serviceIdentifier: interfaces.ServiceIdentifier, parentContext: interfaces.Context, parentRequest: interfaces.Request | null, bindings: interfaces.Binding<unknown> | Array<interfaces.Binding<unknown>>, target: interfaces.Target);
12
+ addChildRequest(serviceIdentifier: interfaces.ServiceIdentifier, bindings: interfaces.Binding<unknown> | Array<interfaces.Binding<unknown>>, target: interfaces.Target): interfaces.Request;
13
+ }
14
+ export { Request };
@@ -0,0 +1,23 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ import { Metadata } from "./metadata";
3
+ declare class Target implements interfaces.Target {
4
+ id: number;
5
+ type: interfaces.TargetType;
6
+ serviceIdentifier: interfaces.ServiceIdentifier;
7
+ name: interfaces.QueryableString;
8
+ identifier: string | symbol;
9
+ key: string | symbol;
10
+ metadata: Array<Metadata>;
11
+ constructor(type: interfaces.TargetType, identifier: string | symbol, serviceIdentifier: interfaces.ServiceIdentifier, namedOrTagged?: string | Metadata);
12
+ hasTag(key: string): boolean;
13
+ isArray(): boolean;
14
+ matchesArray(name: interfaces.ServiceIdentifier<unknown>): boolean;
15
+ isNamed(): boolean;
16
+ isTagged(): boolean;
17
+ isOptional(): boolean;
18
+ getNamedTag(): interfaces.Metadata<string> | null;
19
+ getCustomTags(): Array<interfaces.Metadata> | null;
20
+ matchesNamedTag(name: string): boolean;
21
+ matchesTag(key: string): (value: unknown) => boolean;
22
+ }
23
+ export { Target };
@@ -0,0 +1,3 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare function resolveInstance<T>(binding: interfaces.Binding<T>, constr: interfaces.Newable<T>, childRequests: Array<interfaces.Request>, resolveRequest: interfaces.ResolveRequestHandler): T | Promise<T>;
3
+ export { resolveInstance };
@@ -0,0 +1,3 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare function resolve<T>(context: interfaces.Context): T | Promise<T> | Array<T | Promise<T>>;
3
+ export { resolve };
@@ -0,0 +1,3 @@
1
+ import type { interfaces } from "../interfaces/interfaces";
2
+ export declare const tryGetFromScope: <T>(requestScope: interfaces.RequestScope, binding: interfaces.Binding<T>) => T | Promise<T> | null;
3
+ export declare const saveToScope: <T>(requestScope: interfaces.RequestScope, binding: interfaces.Binding<T>, result: T | Promise<T>) => void;
@@ -0,0 +1,9 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class BindingInSyntax<T> implements interfaces.BindingInSyntax<T> {
3
+ private _binding;
4
+ constructor(binding: interfaces.Binding<T>);
5
+ inRequestScope(): interfaces.BindingWhenOnSyntax<T>;
6
+ inSingletonScope(): interfaces.BindingWhenOnSyntax<T>;
7
+ inTransientScope(): interfaces.BindingWhenOnSyntax<T>;
8
+ }
9
+ export { BindingInSyntax };
@@ -0,0 +1,29 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class BindingInWhenOnSyntax<T> implements interfaces.BindingInSyntax<T>, interfaces.BindingWhenSyntax<T>, interfaces.BindingOnSyntax<T> {
3
+ private _bindingInSyntax;
4
+ private _bindingWhenSyntax;
5
+ private _bindingOnSyntax;
6
+ private _binding;
7
+ constructor(binding: interfaces.Binding<T>);
8
+ inRequestScope(): interfaces.BindingWhenOnSyntax<T>;
9
+ inSingletonScope(): interfaces.BindingWhenOnSyntax<T>;
10
+ inTransientScope(): interfaces.BindingWhenOnSyntax<T>;
11
+ when(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
12
+ whenTargetNamed(name: string): interfaces.BindingOnSyntax<T>;
13
+ whenTargetIsDefault(): interfaces.BindingOnSyntax<T>;
14
+ whenTargetTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
15
+ whenInjectedInto(parent: NewableFunction | string): interfaces.BindingOnSyntax<T>;
16
+ whenParentNamed(name: string): interfaces.BindingOnSyntax<T>;
17
+ whenParentTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
18
+ whenAnyAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
19
+ whenNoAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
20
+ whenAnyAncestorNamed(name: string): interfaces.BindingOnSyntax<T>;
21
+ whenAnyAncestorTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
22
+ whenNoAncestorNamed(name: string): interfaces.BindingOnSyntax<T>;
23
+ whenNoAncestorTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
24
+ whenAnyAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
25
+ whenNoAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
26
+ onActivation(handler: (context: interfaces.Context, injectable: T) => T | Promise<T>): interfaces.BindingWhenSyntax<T>;
27
+ onDeactivation(handler: (injectable: T) => void | Promise<void>): interfaces.BindingWhenSyntax<T>;
28
+ }
29
+ export { BindingInWhenOnSyntax };
@@ -0,0 +1,8 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class BindingOnSyntax<T> implements interfaces.BindingOnSyntax<T> {
3
+ private _binding;
4
+ constructor(binding: interfaces.Binding<T>);
5
+ onActivation(handler: interfaces.BindingActivation<T>): interfaces.BindingWhenSyntax<T>;
6
+ onDeactivation(handler: interfaces.BindingDeactivation<T>): interfaces.BindingWhenSyntax<T>;
7
+ }
8
+ export { BindingOnSyntax };
@@ -0,0 +1,18 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ import { BindingWhenOnSyntax } from "./binding_when_on_syntax";
3
+ declare class BindingToSyntax<T> implements interfaces.BindingToSyntax<T> {
4
+ private _binding;
5
+ constructor(binding: interfaces.Binding<T>);
6
+ to(constructor: interfaces.Newable<T>): interfaces.BindingInWhenOnSyntax<T>;
7
+ toSelf(): interfaces.BindingInWhenOnSyntax<T>;
8
+ toConstantValue(value: T): interfaces.BindingWhenOnSyntax<T>;
9
+ toDynamicValue(func: interfaces.DynamicValue<T>): interfaces.BindingInWhenOnSyntax<T>;
10
+ toConstructor<T2>(constructor: interfaces.Newable<T2>): interfaces.BindingWhenOnSyntax<T>;
11
+ toFactory<T2>(factory: interfaces.FactoryCreator<T2>): interfaces.BindingWhenOnSyntax<T>;
12
+ toFunction(func: T): interfaces.BindingWhenOnSyntax<T>;
13
+ toAutoFactory<T2>(serviceIdentifier: interfaces.ServiceIdentifier<T2>): interfaces.BindingWhenOnSyntax<T>;
14
+ toAutoNamedFactory<T2>(serviceIdentifier: interfaces.ServiceIdentifier<T2>): BindingWhenOnSyntax<T>;
15
+ toProvider<T2>(provider: interfaces.ProviderCreator<T2>): interfaces.BindingWhenOnSyntax<T>;
16
+ toService(service: string | symbol | interfaces.Newable<T> | interfaces.Abstract<T>): void;
17
+ }
18
+ export { BindingToSyntax };
@@ -0,0 +1,25 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class BindingWhenOnSyntax<T> implements interfaces.BindingWhenSyntax<T>, interfaces.BindingOnSyntax<T> {
3
+ private _bindingWhenSyntax;
4
+ private _bindingOnSyntax;
5
+ private _binding;
6
+ constructor(binding: interfaces.Binding<T>);
7
+ when(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
8
+ whenTargetNamed(name: string): interfaces.BindingOnSyntax<T>;
9
+ whenTargetIsDefault(): interfaces.BindingOnSyntax<T>;
10
+ whenTargetTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
11
+ whenInjectedInto(parent: NewableFunction | string): interfaces.BindingOnSyntax<T>;
12
+ whenParentNamed(name: string): interfaces.BindingOnSyntax<T>;
13
+ whenParentTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
14
+ whenAnyAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
15
+ whenNoAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
16
+ whenAnyAncestorNamed(name: string): interfaces.BindingOnSyntax<T>;
17
+ whenAnyAncestorTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
18
+ whenNoAncestorNamed(name: string): interfaces.BindingOnSyntax<T>;
19
+ whenNoAncestorTagged(tag: string, value: unknown): interfaces.BindingOnSyntax<T>;
20
+ whenAnyAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
21
+ whenNoAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
22
+ onActivation(handler: (context: interfaces.Context, injectable: T) => T): interfaces.BindingWhenSyntax<T>;
23
+ onDeactivation(handler: (injectable: T) => Promise<void> | void): interfaces.BindingWhenSyntax<T>;
24
+ }
25
+ export { BindingWhenOnSyntax };
@@ -0,0 +1,21 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare class BindingWhenSyntax<T> implements interfaces.BindingWhenSyntax<T> {
3
+ private _binding;
4
+ constructor(binding: interfaces.Binding<T>);
5
+ when(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
6
+ whenTargetNamed(name: string | number | symbol): interfaces.BindingOnSyntax<T>;
7
+ whenTargetIsDefault(): interfaces.BindingOnSyntax<T>;
8
+ whenTargetTagged(tag: string | number | symbol, value: unknown): interfaces.BindingOnSyntax<T>;
9
+ whenInjectedInto(parent: NewableFunction | string): interfaces.BindingOnSyntax<T>;
10
+ whenParentNamed(name: string | number | symbol): interfaces.BindingOnSyntax<T>;
11
+ whenParentTagged(tag: string | number | symbol, value: unknown): interfaces.BindingOnSyntax<T>;
12
+ whenAnyAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
13
+ whenNoAncestorIs(ancestor: NewableFunction | string): interfaces.BindingOnSyntax<T>;
14
+ whenAnyAncestorNamed(name: string | number | symbol): interfaces.BindingOnSyntax<T>;
15
+ whenNoAncestorNamed(name: string | number | symbol): interfaces.BindingOnSyntax<T>;
16
+ whenAnyAncestorTagged(tag: string | number | symbol, value: unknown): interfaces.BindingOnSyntax<T>;
17
+ whenNoAncestorTagged(tag: string | number | symbol, value: unknown): interfaces.BindingOnSyntax<T>;
18
+ whenAnyAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
19
+ whenNoAncestorMatches(constraint: (request: interfaces.Request) => boolean): interfaces.BindingOnSyntax<T>;
20
+ }
21
+ export { BindingWhenSyntax };
@@ -0,0 +1,6 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare const traverseAncerstors: (request: interfaces.Request, constraint: interfaces.ConstraintFunction) => boolean;
3
+ declare const taggedConstraint: (key: string | number | symbol) => (value: unknown) => interfaces.ConstraintFunction;
4
+ declare const namedConstraint: (value: unknown) => interfaces.ConstraintFunction;
5
+ declare const typeConstraint: (type: NewableFunction | string) => (request: interfaces.Request | null) => boolean;
6
+ export { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint, };
@@ -0,0 +1,3 @@
1
+ declare function isPromise<T>(object: unknown): object is Promise<T>;
2
+ declare function isPromiseOrContainsPromise<T>(object: unknown): object is Promise<T> | Array<T | Promise<T>>;
3
+ export { isPromise, isPromiseOrContainsPromise };
@@ -0,0 +1,4 @@
1
+ import type { interfaces } from "../interfaces/interfaces";
2
+ export declare const multiBindToService: (container: interfaces.Container) => (service: interfaces.ServiceIdentifier) => (...types: Array<interfaces.ServiceIdentifier>) => void;
3
+ export declare const ensureFullyBound: <T = unknown>(binding: interfaces.Binding<T>) => void;
4
+ export declare const getFactoryDetails: <T = unknown>(binding: interfaces.Binding<T>) => interfaces.FactoryDetails;
@@ -0,0 +1,3 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare function isClonable<T>(obj: unknown): obj is interfaces.Clonable<T>;
3
+ export { isClonable };
@@ -0,0 +1,2 @@
1
+ export declare function isStackOverflowExeption(error: unknown): error is RangeError;
2
+ export declare const tryAndThrowErrorIfStackOverflow: <T>(fn: () => T, errorCallback: () => Error) => T;
@@ -0,0 +1,5 @@
1
+ export declare enum FactoryType {
2
+ DynamicValue = "toDynamicValue",
3
+ Factory = "toFactory",
4
+ Provider = "toProvider"
5
+ }
@@ -0,0 +1,2 @@
1
+ declare function id(): number;
2
+ export { id };
@@ -0,0 +1 @@
1
+ export declare function getFirstArrayDuplicate<T>(array: Array<T>): T | undefined;
@@ -0,0 +1,10 @@
1
+ import { interfaces } from "../interfaces/interfaces";
2
+ declare function getServiceIdentifierAsString(serviceIdentifier: interfaces.ServiceIdentifier): string;
3
+ declare function listRegisteredBindingsForServiceIdentifier(container: interfaces.Container, serviceIdentifier: string, getBindings: <T>(container: interfaces.Container, serviceIdentifier: interfaces.ServiceIdentifier<T>) => Array<interfaces.Binding<T>>): string;
4
+ declare function circularDependencyToException(request: interfaces.Request): void;
5
+ declare function listMetadataForTarget(serviceIdentifierString: string, target: interfaces.Target): string;
6
+ declare function getFunctionName(func: {
7
+ name: string | null;
8
+ }): string;
9
+ declare function getSymbolDescription(symbol: symbol): string;
10
+ export { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription, };