@codefast/di 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +712 -0
- package/README.md +119 -30
- package/dist/ambient/active-container.d.ts +37 -0
- package/dist/ambient/active-container.d.ts.map +1 -0
- package/dist/ambient/active-container.js +41 -0
- package/dist/ambient/active-container.js.map +1 -0
- package/dist/container/binding-builders.d.ts +12 -8
- package/dist/container/binding-builders.d.ts.map +1 -1
- package/dist/container/binding-builders.js +62 -31
- package/dist/container/binding-builders.js.map +1 -1
- package/dist/container/container.d.ts +33 -19
- package/dist/container/container.d.ts.map +1 -1
- package/dist/container/container.js +281 -118
- package/dist/container/container.js.map +1 -1
- package/dist/{resolution → core}/binding-scope.d.ts +2 -2
- package/dist/core/binding-scope.d.ts.map +1 -0
- package/dist/core/binding-scope.js.map +1 -0
- package/dist/{binding.d.ts → core/binding.d.ts} +70 -15
- package/dist/core/binding.d.ts.map +1 -0
- package/dist/{binding.js → core/binding.js} +27 -12
- package/dist/core/binding.js.map +1 -0
- package/dist/core/constraint-requirement.d.ts +53 -0
- package/dist/core/constraint-requirement.d.ts.map +1 -0
- package/dist/core/constraint-requirement.js +62 -0
- package/dist/core/constraint-requirement.js.map +1 -0
- package/dist/{constructor-type.d.ts → core/constructor-type.d.ts} +1 -1
- package/dist/core/constructor-type.d.ts.map +1 -0
- package/dist/core/constructor-type.js.map +1 -0
- package/dist/{module.d.ts → core/module.d.ts} +5 -5
- package/dist/core/module.d.ts.map +1 -0
- package/dist/{module.js → core/module.js} +4 -4
- package/dist/core/module.js.map +1 -0
- package/dist/{registry.d.ts → core/registry.d.ts} +27 -7
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/{registry.js → core/registry.js} +125 -52
- package/dist/core/registry.js.map +1 -0
- package/dist/core/tag.d.ts +80 -0
- package/dist/core/tag.d.ts.map +1 -0
- package/dist/core/tag.js +96 -0
- package/dist/core/tag.js.map +1 -0
- package/dist/{token.d.ts → core/token.d.ts} +2 -6
- package/dist/core/token.d.ts.map +1 -0
- package/dist/core/token.js +13 -0
- package/dist/core/token.js.map +1 -0
- package/dist/{types.d.ts → core/types.d.ts} +27 -21
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js.map +1 -0
- package/dist/decorators/inject.d.ts +5 -49
- package/dist/decorators/inject.d.ts.map +1 -1
- package/dist/decorators/inject.js +34 -104
- package/dist/decorators/inject.js.map +1 -1
- package/dist/decorators/injectable.d.ts +25 -5
- package/dist/decorators/injectable.d.ts.map +1 -1
- package/dist/decorators/injectable.js +2 -3
- package/dist/decorators/injectable.js.map +1 -1
- package/dist/decorators/lifecycle-decorators.d.ts +4 -2
- package/dist/decorators/lifecycle-decorators.d.ts.map +1 -1
- package/dist/decorators/lifecycle-decorators.js +19 -25
- package/dist/decorators/lifecycle-decorators.js.map +1 -1
- package/dist/{resolution → errors}/diagnostics.d.ts +2 -0
- package/dist/errors/diagnostics.d.ts.map +1 -0
- package/dist/errors/diagnostics.js.map +1 -0
- package/dist/{errors.d.ts → errors/errors.d.ts} +89 -4
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/{errors.js → errors/errors.js} +129 -7
- package/dist/errors/errors.js.map +1 -0
- package/dist/index.d.ts +21 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/injection/descriptor.d.ts +79 -0
- package/dist/injection/descriptor.d.ts.map +1 -0
- package/dist/injection/descriptor.js +118 -0
- package/dist/injection/descriptor.js.map +1 -0
- package/dist/{resolution → injection}/resolve-options.d.ts +21 -11
- package/dist/injection/resolve-options.d.ts.map +1 -0
- package/dist/injection/resolve-options.js +101 -0
- package/dist/injection/resolve-options.js.map +1 -0
- package/dist/introspection/dependency-graph.d.ts +16 -5
- package/dist/introspection/dependency-graph.d.ts.map +1 -1
- package/dist/introspection/dependency-graph.js +138 -57
- package/dist/introspection/dependency-graph.js.map +1 -1
- package/dist/introspection/graph-adapters/cytoscape.d.ts +6 -3
- package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -1
- package/dist/introspection/graph-adapters/cytoscape.js +3 -0
- package/dist/introspection/graph-adapters/cytoscape.js.map +1 -1
- package/dist/introspection/graph-adapters/dot.d.ts.map +1 -1
- package/dist/introspection/graph-adapters/dot.js +12 -5
- package/dist/introspection/graph-adapters/dot.js.map +1 -1
- package/dist/introspection/graph-adapters/mermaid.d.ts +9 -0
- package/dist/introspection/graph-adapters/mermaid.d.ts.map +1 -0
- package/dist/introspection/graph-adapters/mermaid.js +47 -0
- package/dist/introspection/graph-adapters/mermaid.js.map +1 -0
- package/dist/introspection/graph-adapters/reactflow.d.ts +6 -3
- package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -1
- package/dist/introspection/graph-adapters/reactflow.js +5 -1
- package/dist/introspection/graph-adapters/reactflow.js.map +1 -1
- package/dist/introspection/inspector.d.ts +4 -4
- package/dist/introspection/inspector.d.ts.map +1 -1
- package/dist/introspection/inspector.js +10 -6
- package/dist/introspection/inspector.js.map +1 -1
- package/dist/lifecycle/lifecycle-manager.d.ts +27 -0
- package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
- package/dist/{resolution/lifecycle.js → lifecycle/lifecycle-manager.js} +39 -9
- package/dist/lifecycle/lifecycle-manager.js.map +1 -0
- package/dist/lifecycle/scope-manager.d.ts +48 -0
- package/dist/lifecycle/scope-manager.d.ts.map +1 -0
- package/dist/lifecycle/scope-manager.js +135 -0
- package/dist/lifecycle/scope-manager.js.map +1 -0
- package/dist/metadata/metadata-reader-token.d.ts +1 -1
- package/dist/metadata/metadata-reader-token.d.ts.map +1 -1
- package/dist/metadata/metadata-reader-token.js +1 -1
- package/dist/metadata/metadata-reader-token.js.map +1 -1
- package/dist/metadata/metadata-types.d.ts +9 -9
- package/dist/metadata/metadata-types.d.ts.map +1 -1
- package/dist/metadata/symbol-metadata-reader.d.ts +19 -6
- package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
- package/dist/metadata/symbol-metadata-reader.js +89 -9
- package/dist/metadata/symbol-metadata-reader.js.map +1 -1
- package/dist/metadata/verifying-metadata-reader.d.ts +16 -0
- package/dist/metadata/verifying-metadata-reader.d.ts.map +1 -0
- package/dist/metadata/verifying-metadata-reader.js +32 -0
- package/dist/metadata/verifying-metadata-reader.js.map +1 -0
- package/dist/resolution/{activation-need.d.ts → cache/activation-need.d.ts} +5 -5
- package/dist/resolution/cache/activation-need.d.ts.map +1 -0
- package/dist/resolution/cache/activation-need.js.map +1 -0
- package/dist/resolution/{binding-lookup-cache.d.ts → cache/binding-lookup-cache.d.ts} +9 -5
- package/dist/resolution/cache/binding-lookup-cache.d.ts.map +1 -0
- package/dist/resolution/{binding-lookup-cache.js → cache/binding-lookup-cache.js} +55 -0
- package/dist/resolution/cache/binding-lookup-cache.js.map +1 -0
- package/dist/resolution/cache/class-introspector.d.ts +66 -0
- package/dist/resolution/cache/class-introspector.d.ts.map +1 -0
- package/dist/resolution/cache/class-introspector.js +194 -0
- package/dist/resolution/cache/class-introspector.js.map +1 -0
- package/dist/resolution/context.d.ts +84 -0
- package/dist/resolution/context.d.ts.map +1 -0
- package/dist/resolution/{environment.js → context.js} +54 -80
- package/dist/resolution/context.js.map +1 -0
- package/dist/resolution/path/resolution-path.d.ts +94 -0
- package/dist/resolution/path/resolution-path.d.ts.map +1 -0
- package/dist/resolution/path/resolution-path.js +117 -0
- package/dist/resolution/path/resolution-path.js.map +1 -0
- package/dist/resolution/{instantiation-plan.d.ts → plan/instantiation-plan.d.ts} +37 -7
- package/dist/resolution/plan/instantiation-plan.d.ts.map +1 -0
- package/dist/resolution/plan/instantiation-plan.js +419 -0
- package/dist/resolution/plan/instantiation-plan.js.map +1 -0
- package/dist/resolution/resolver.d.ts +28 -28
- package/dist/resolution/resolver.d.ts.map +1 -1
- package/dist/resolution/resolver.js +581 -239
- package/dist/resolution/resolver.js.map +1 -1
- package/dist/resolution/select/binding-select.d.ts +34 -0
- package/dist/resolution/select/binding-select.d.ts.map +1 -0
- package/dist/resolution/select/binding-select.js +175 -0
- package/dist/resolution/select/binding-select.js.map +1 -0
- package/dist/resolution/{constraints.d.ts → select/constraints.d.ts} +13 -12
- package/dist/resolution/select/constraints.d.ts.map +1 -0
- package/dist/resolution/{constraints.js → select/constraints.js} +33 -22
- package/dist/resolution/select/constraints.js.map +1 -0
- package/package.json +160 -20
- package/src/ambient/active-container.ts +65 -0
- package/src/container/binding-builders.ts +79 -44
- package/src/container/container.ts +357 -170
- package/src/{resolution → core}/binding-scope.ts +2 -2
- package/src/{binding.ts → core/binding.ts} +101 -39
- package/src/core/constraint-requirement.ts +94 -0
- package/src/{constructor-type.ts → core/constructor-type.ts} +1 -1
- package/src/{module.ts → core/module.ts} +10 -10
- package/src/core/registry.ts +365 -0
- package/src/core/tag.ts +158 -0
- package/src/{token.ts → core/token.ts} +2 -14
- package/src/{types.ts → core/types.ts} +37 -34
- package/src/decorators/inject.ts +39 -175
- package/src/decorators/injectable.ts +40 -10
- package/src/decorators/lifecycle-decorators.ts +22 -34
- package/src/{resolution → errors}/diagnostics.ts +2 -0
- package/src/{errors.ts → errors/errors.ts} +152 -8
- package/src/index.ts +43 -15
- package/src/injection/descriptor.ts +206 -0
- package/src/injection/resolve-options.ts +144 -0
- package/src/introspection/dependency-graph.ts +223 -63
- package/src/introspection/graph-adapters/cytoscape.ts +9 -3
- package/src/introspection/graph-adapters/dot.ts +13 -5
- package/src/introspection/graph-adapters/mermaid.ts +61 -0
- package/src/introspection/graph-adapters/reactflow.ts +11 -4
- package/src/introspection/inspector.ts +16 -12
- package/src/{resolution/lifecycle.ts → lifecycle/lifecycle-manager.ts} +68 -32
- package/src/lifecycle/scope-manager.ts +156 -0
- package/src/metadata/metadata-reader-token.ts +2 -2
- package/src/metadata/metadata-types.ts +9 -9
- package/src/metadata/symbol-metadata-reader.ts +95 -18
- package/src/metadata/verifying-metadata-reader.ts +41 -0
- package/src/resolution/{activation-need.ts → cache/activation-need.ts} +8 -8
- package/src/resolution/{binding-lookup-cache.ts → cache/binding-lookup-cache.ts} +63 -5
- package/src/resolution/cache/class-introspector.ts +251 -0
- package/src/resolution/{environment.ts → context.ts} +84 -145
- package/src/resolution/path/resolution-path.ts +167 -0
- package/src/resolution/plan/instantiation-plan.ts +615 -0
- package/src/resolution/resolver.ts +663 -313
- package/src/resolution/select/binding-select.ts +210 -0
- package/src/resolution/select/constraints.ts +130 -0
- package/dist/binding.d.ts.map +0 -1
- package/dist/binding.js.map +0 -1
- package/dist/constructor-type.d.ts.map +0 -1
- package/dist/constructor-type.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/module.d.ts.map +0 -1
- package/dist/module.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/resolution/activation-need.d.ts.map +0 -1
- package/dist/resolution/activation-need.js.map +0 -1
- package/dist/resolution/binding-lookup-cache.d.ts.map +0 -1
- package/dist/resolution/binding-lookup-cache.js.map +0 -1
- package/dist/resolution/binding-scope.d.ts.map +0 -1
- package/dist/resolution/binding-scope.js.map +0 -1
- package/dist/resolution/binding-select.d.ts +0 -23
- package/dist/resolution/binding-select.d.ts.map +0 -1
- package/dist/resolution/binding-select.js +0 -121
- package/dist/resolution/binding-select.js.map +0 -1
- package/dist/resolution/class-introspector.d.ts +0 -27
- package/dist/resolution/class-introspector.d.ts.map +0 -1
- package/dist/resolution/class-introspector.js +0 -60
- package/dist/resolution/class-introspector.js.map +0 -1
- package/dist/resolution/constraints.d.ts.map +0 -1
- package/dist/resolution/constraints.js.map +0 -1
- package/dist/resolution/diagnostics.d.ts.map +0 -1
- package/dist/resolution/diagnostics.js.map +0 -1
- package/dist/resolution/environment.d.ts +0 -94
- package/dist/resolution/environment.d.ts.map +0 -1
- package/dist/resolution/environment.js.map +0 -1
- package/dist/resolution/instantiation-plan.d.ts.map +0 -1
- package/dist/resolution/instantiation-plan.js +0 -183
- package/dist/resolution/instantiation-plan.js.map +0 -1
- package/dist/resolution/lifecycle.d.ts +0 -23
- package/dist/resolution/lifecycle.d.ts.map +0 -1
- package/dist/resolution/lifecycle.js.map +0 -1
- package/dist/resolution/resolution-path.d.ts +0 -98
- package/dist/resolution/resolution-path.d.ts.map +0 -1
- package/dist/resolution/resolution-path.js +0 -98
- package/dist/resolution/resolution-path.js.map +0 -1
- package/dist/resolution/resolve-options.d.ts.map +0 -1
- package/dist/resolution/resolve-options.js +0 -56
- package/dist/resolution/resolve-options.js.map +0 -1
- package/dist/resolution/scope.d.ts +0 -28
- package/dist/resolution/scope.d.ts.map +0 -1
- package/dist/resolution/scope.js +0 -88
- package/dist/resolution/scope.js.map +0 -1
- package/dist/token.d.ts.map +0 -1
- package/dist/token.js +0 -22
- package/dist/token.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/registry.ts +0 -282
- package/src/resolution/binding-select.ts +0 -154
- package/src/resolution/class-introspector.ts +0 -74
- package/src/resolution/constraints.ts +0 -121
- package/src/resolution/instantiation-plan.ts +0 -292
- package/src/resolution/resolution-path.ts +0 -156
- package/src/resolution/resolve-options.ts +0 -89
- package/src/resolution/scope.ts +0 -105
- /package/dist/{resolution → core}/binding-scope.js +0 -0
- /package/dist/{constructor-type.js → core/constructor-type.js} +0 -0
- /package/dist/{types.js → core/types.js} +0 -0
- /package/dist/{resolution → errors}/diagnostics.js +0 -0
- /package/dist/resolution/{activation-need.js → cache/activation-need.js} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Constructor } from "#/constructor-type";
|
|
1
|
+
import type { Constructor } from "#/core/constructor-type";
|
|
2
2
|
declare const TOKEN_BRAND: unique symbol;
|
|
3
3
|
/**
|
|
4
4
|
* @since 0.3.16-canary.0
|
|
5
5
|
*/
|
|
6
|
-
export interface Token<Value> {
|
|
6
|
+
export interface Token<out Value> {
|
|
7
7
|
readonly name: string;
|
|
8
8
|
readonly [TOKEN_BRAND]: Value;
|
|
9
9
|
}
|
|
@@ -15,9 +15,5 @@ export declare function token<Value>(name: string): Token<Value>;
|
|
|
15
15
|
* @since 0.3.16-canary.0
|
|
16
16
|
*/
|
|
17
17
|
export declare function tokenName(dependency: Token<unknown> | Constructor): string;
|
|
18
|
-
/**
|
|
19
|
-
* @since 0.3.16-canary.0
|
|
20
|
-
*/
|
|
21
|
-
export declare function isToken(value: unknown): value is Token<unknown>;
|
|
22
18
|
export {};
|
|
23
19
|
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,CAAC,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,KAAK,CAAC,GAAG,CAAC,KAAK;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,CAE1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/core/token.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,UAAU,KAAK,CAAQ,IAAY;IACvC,OAAO,EAAE,IAAI,EAAkB,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,UAAwC;IAChE,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import type { Constructor } from "#/constructor-type";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* @since 0.3.16-canary.0
|
|
8
|
-
*/
|
|
9
|
-
export type BindingTag = readonly [tag: string, value: unknown];
|
|
1
|
+
import type { Constructor } from "#/core/constructor-type";
|
|
2
|
+
import type { BindingTag, TagKeyMask } from "#/core/tag";
|
|
3
|
+
import type { Token } from "#/core/token";
|
|
4
|
+
export type { Constructor } from "#/core/constructor-type";
|
|
5
|
+
export type { BindingTag, TagKey, TagKeyMask } from "#/core/tag";
|
|
10
6
|
/**
|
|
11
7
|
* Token or class constructor used as a binding / injection / resolve key.
|
|
12
8
|
*
|
|
@@ -40,13 +36,15 @@ export type DeactivationHandler<Value> = (instance: Value) => void | Promise<voi
|
|
|
40
36
|
* @since 0.3.16-canary.0
|
|
41
37
|
*/
|
|
42
38
|
export interface ResolveOptions {
|
|
43
|
-
name?: string;
|
|
39
|
+
name?: string | undefined;
|
|
44
40
|
/**
|
|
45
|
-
* Single-tag shorthand
|
|
46
|
-
*
|
|
41
|
+
* Single-tag shorthand, equivalent to listing the one pair in `tags`.
|
|
42
|
+
*
|
|
43
|
+
* @remarks Reaches the same tagged index, so choosing it costs nothing. `InjectOptions` accepts it
|
|
44
|
+
* too and folds it into `tags`. Only `tags` expresses a request for more than one tag.
|
|
47
45
|
*/
|
|
48
|
-
tag?: BindingTag;
|
|
49
|
-
tags?: ReadonlyArray<BindingTag
|
|
46
|
+
tag?: BindingTag | undefined;
|
|
47
|
+
tags?: ReadonlyArray<BindingTag> | undefined;
|
|
50
48
|
}
|
|
51
49
|
/**
|
|
52
50
|
* @since 0.3.16-canary.0
|
|
@@ -59,6 +57,7 @@ export interface ResolutionFrame {
|
|
|
59
57
|
readonly slot: {
|
|
60
58
|
readonly name: string | undefined;
|
|
61
59
|
readonly tags: ReadonlyArray<BindingTag>;
|
|
60
|
+
readonly keyMask: TagKeyMask;
|
|
62
61
|
};
|
|
63
62
|
}
|
|
64
63
|
/**
|
|
@@ -69,18 +68,25 @@ export interface ConstraintContext {
|
|
|
69
68
|
readonly resolutionStack: ReadonlyArray<ResolutionFrame>;
|
|
70
69
|
readonly parent: ResolutionFrame | undefined;
|
|
71
70
|
readonly ancestors: ReadonlyArray<ResolutionFrame>;
|
|
72
|
-
|
|
71
|
+
/** Readonly because one frozen object answers every resolve of a slot — a write would throw. */
|
|
72
|
+
readonly currentResolveOptions: Readonly<ResolveOptions> | undefined;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The predicate `when()` selects a binding by, and the shape every `when*` helper returns.
|
|
76
|
+
*
|
|
77
|
+
* @since 0.6.0
|
|
78
|
+
*/
|
|
79
|
+
export type BindingConstraint = (ctx: ConstraintContext) => boolean;
|
|
74
80
|
/**
|
|
75
81
|
* @since 0.3.16-canary.0
|
|
76
82
|
*/
|
|
77
83
|
export interface ResolutionContext {
|
|
78
|
-
resolve<
|
|
79
|
-
resolveAsync<
|
|
80
|
-
resolveOptional<
|
|
81
|
-
resolveOptionalAsync<
|
|
82
|
-
resolveAll<
|
|
83
|
-
resolveAllAsync<
|
|
84
|
+
resolve<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value;
|
|
85
|
+
resolveAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value>;
|
|
86
|
+
resolveOptional<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value | undefined;
|
|
87
|
+
resolveOptionalAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Value | undefined>;
|
|
88
|
+
resolveAll<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Array<Value>;
|
|
89
|
+
resolveAllAsync<Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Promise<Array<Value>>;
|
|
84
90
|
readonly graph: ConstraintContext;
|
|
85
91
|
}
|
|
86
92
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
export interface InjectOptions {
|
|
7
|
-
name?: string;
|
|
8
|
-
tags?: ReadonlyArray<BindingTag>;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* @since 0.3.16-canary.0
|
|
12
|
-
*/
|
|
13
|
-
export interface InjectionDescriptor<Value = unknown> {
|
|
14
|
-
readonly token: Token<Value> | Constructor<Value>;
|
|
15
|
-
readonly optional: boolean;
|
|
16
|
-
readonly multi: boolean;
|
|
17
|
-
readonly name?: string;
|
|
18
|
-
readonly tags?: ReadonlyArray<BindingTag>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* @since 0.3.16-canary.0
|
|
22
|
-
*/
|
|
23
|
-
export type InjectableDependency<Value = unknown> = Token<Value> | Constructor<Value> | InjectionDescriptor<Value>;
|
|
24
|
-
/**
|
|
25
|
-
* The value a factory receives for one declared dependency.
|
|
26
|
-
*
|
|
27
|
-
* @remarks `optional()` and `injectAll()` fold their effect into the descriptor's own type
|
|
28
|
-
* parameter, so reading it back is enough; bare tokens fall through to {@link TokenValue}.
|
|
29
|
-
*
|
|
30
|
-
* @since 0.5.0-canary.7
|
|
31
|
-
*/
|
|
32
|
-
export type ResolvedDependencyValue<Dependency> = Dependency extends InjectionDescriptor<infer Value> ? Value : TokenValue<Dependency>;
|
|
33
|
-
/**
|
|
34
|
-
* @since 0.3.16-canary.0
|
|
35
|
-
*/
|
|
36
|
-
export declare function isInjectionDescriptor(value: unknown): value is InjectionDescriptor;
|
|
37
|
-
/**
|
|
38
|
-
* @since 0.3.16-canary.0
|
|
39
|
-
*/
|
|
40
|
-
export declare function normalizeToDescriptor(dependency: InjectableDependency): InjectionDescriptor;
|
|
1
|
+
/** `@inject` — the accessor-decorator channel, resolving from the ambient container. */
|
|
2
|
+
import type { Token } from "#/core/token";
|
|
3
|
+
import type { Constructor } from "#/core/types";
|
|
4
|
+
import type { InjectionDescriptor, InjectOptions } from "#/injection/descriptor";
|
|
41
5
|
type ClassAccessorDecorator<This, Value> = (target: ClassAccessorDecoratorTarget<This, Value>, context: ClassAccessorDecoratorContext<This, Value>) => ClassAccessorDecoratorResult<This, Value> | void;
|
|
42
6
|
/**
|
|
43
7
|
* @since 0.3.16-canary.0
|
|
44
8
|
*/
|
|
45
|
-
export declare function inject<
|
|
46
|
-
/**
|
|
47
|
-
* @since 0.3.16-canary.0
|
|
48
|
-
*/
|
|
49
|
-
export declare function optional<const Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Value | undefined>;
|
|
50
|
-
/**
|
|
51
|
-
* @since 0.3.16-canary.0
|
|
52
|
-
*/
|
|
53
|
-
export declare function injectAll<const Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Array<Value>>;
|
|
9
|
+
export declare function inject<Value>(token: Token<Value> | Constructor<Value>, options?: InjectOptions): InjectionDescriptor<Value> & ClassAccessorDecorator<unknown, Value>;
|
|
54
10
|
export {};
|
|
55
11
|
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"AACA,wFAAwF;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0BjF,KAAK,sBAAsB,CAAC,IAAI,EAAE,KAAK,IAAI,CACzC,MAAM,EAAE,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,EACjD,OAAO,EAAE,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,KAChD,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;AAEtD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAwDrE"}
|
|
@@ -1,93 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getActiveContainer, getAmbientResolution } from "#/ambient/active-container";
|
|
2
|
+
import { MissingContainerContextError, StaticMemberDecoratorError } from "#/errors/errors";
|
|
3
|
+
import { buildInjectionDescriptor } from "#/injection/descriptor";
|
|
4
|
+
import { injectionSlotToResolveOptions } from "#/injection/resolve-options";
|
|
2
5
|
import { INJECT_ACCESSOR_KEY } from "#/metadata/metadata-keys";
|
|
3
|
-
import { getActiveContainer } from "#/resolution/environment";
|
|
4
|
-
import { injectionSlotToResolveOptions } from "#/resolution/resolve-options";
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
const type = typeof value;
|
|
13
|
-
// inject() returns a function (dual-role), so must check both object and function
|
|
14
|
-
if (type !== "object" && type !== "function") {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
return ("token" in value &&
|
|
18
|
-
"optional" in value &&
|
|
19
|
-
"multi" in value &&
|
|
20
|
-
typeof value.optional === "boolean" &&
|
|
21
|
-
typeof value.multi === "boolean");
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @since 0.3.16-canary.0
|
|
7
|
+
* The name of the class being constructed, or `undefined` when there is none to report.
|
|
8
|
+
*
|
|
9
|
+
* @remarks Two ways there is none: an anonymous class expression has an empty `name`, and an
|
|
10
|
+
* instance whose prototype chain answers no `constructor` has nothing to read. Narrowed rather than
|
|
11
|
+
* asserted — the value arrives as `unknown` and the platform makes no promise about it.
|
|
25
12
|
*/
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
return
|
|
29
|
-
}
|
|
30
|
-
return { token: dependency, optional: false, multi: false };
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Dual-role `inject()` values are functions: [[Function]].name must not be treated as a DI slot name.
|
|
34
|
-
* Only enumerable own `name` / `tags` from `Object.defineProperties` are real injection options.
|
|
35
|
-
*/
|
|
36
|
-
function materializeInjectionDescriptor(dependency) {
|
|
37
|
-
if (typeof dependency !== "function") {
|
|
38
|
-
return dependency;
|
|
39
|
-
}
|
|
40
|
-
const dualRole = dependency;
|
|
41
|
-
const base = {
|
|
42
|
-
token: dualRole.token,
|
|
43
|
-
optional: dualRole.optional,
|
|
44
|
-
multi: dualRole.multi,
|
|
45
|
-
};
|
|
46
|
-
const nameDesc = Object.getOwnPropertyDescriptor(dualRole, "name");
|
|
47
|
-
const tagsDesc = Object.getOwnPropertyDescriptor(dualRole, "tags");
|
|
48
|
-
const explicitName = nameDesc?.enumerable === true && typeof nameDesc.value === "string" ? nameDesc.value : undefined;
|
|
49
|
-
const explicitTags = tagsDesc?.enumerable === true ? tagsDesc.value : undefined;
|
|
50
|
-
if (explicitName !== undefined && explicitTags !== undefined) {
|
|
51
|
-
return {
|
|
52
|
-
...base,
|
|
53
|
-
name: explicitName,
|
|
54
|
-
tags: explicitTags,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
if (explicitName !== undefined) {
|
|
58
|
-
return { ...base, name: explicitName };
|
|
13
|
+
function classNameOf(instance) {
|
|
14
|
+
if (typeof instance !== "object" || instance === null) {
|
|
15
|
+
return undefined;
|
|
59
16
|
}
|
|
60
|
-
|
|
61
|
-
|
|
17
|
+
const constructor = Reflect.get(instance, "constructor");
|
|
18
|
+
if (typeof constructor !== "function" || constructor.name === "") {
|
|
19
|
+
return undefined;
|
|
62
20
|
}
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
function withOptions(base, options) {
|
|
66
|
-
if (options?.name !== undefined && options.tags !== undefined) {
|
|
67
|
-
return { ...base, name: options.name, tags: options.tags };
|
|
68
|
-
}
|
|
69
|
-
if (options?.name !== undefined) {
|
|
70
|
-
return { ...base, name: options.name };
|
|
71
|
-
}
|
|
72
|
-
if (options?.tags !== undefined) {
|
|
73
|
-
return { ...base, tags: options.tags };
|
|
74
|
-
}
|
|
75
|
-
return base;
|
|
76
|
-
}
|
|
77
|
-
function buildInjectionDescriptor(token, options) {
|
|
78
|
-
return withOptions({ token, optional: false, multi: false }, options);
|
|
21
|
+
return constructor.name;
|
|
79
22
|
}
|
|
80
23
|
/**
|
|
81
24
|
* @since 0.3.16-canary.0
|
|
82
25
|
*/
|
|
83
26
|
export function inject(token, options) {
|
|
84
27
|
const descriptor = buildInjectionDescriptor(token, options);
|
|
28
|
+
// Derived from the descriptor, not from `options`: the descriptor is where the tag shorthand has
|
|
29
|
+
// already been folded. Built once here rather than per constructed instance.
|
|
30
|
+
const resolveOptions = injectionSlotToResolveOptions(descriptor);
|
|
85
31
|
const decoratorFn = (_target, context) => {
|
|
86
32
|
if (context.static) {
|
|
87
|
-
throw new
|
|
33
|
+
throw new StaticMemberDecoratorError("inject", String(context.name));
|
|
88
34
|
}
|
|
89
35
|
const meta = context.metadata;
|
|
90
|
-
|
|
36
|
+
// Own bucket only: the metadata record inherits the base class's, and pushing into an inherited
|
|
37
|
+
// array would register this accessor on the base class instead.
|
|
38
|
+
if (!Object.hasOwn(meta, INJECT_ACCESSOR_KEY) || !Array.isArray(meta[INJECT_ACCESSOR_KEY])) {
|
|
91
39
|
meta[INJECT_ACCESSOR_KEY] = [];
|
|
92
40
|
}
|
|
93
41
|
meta[INJECT_ACCESSOR_KEY].push({
|
|
@@ -95,16 +43,20 @@ export function inject(token, options) {
|
|
|
95
43
|
descriptor,
|
|
96
44
|
});
|
|
97
45
|
context.addInitializer(function () {
|
|
46
|
+
// Prefer the engine's path-continuing resolver: it keeps this accessor's dependencies on the
|
|
47
|
+
// live resolution path, so a cycle through an accessor is detected instead of recursing.
|
|
48
|
+
const ambient = getAmbientResolution();
|
|
49
|
+
if (ambient !== undefined) {
|
|
50
|
+
const value = descriptor.optional
|
|
51
|
+
? ambient.resolveOptional(token, resolveOptions)
|
|
52
|
+
: ambient.resolve(token, resolveOptions);
|
|
53
|
+
context.access.set(this, value);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
98
56
|
const container = getActiveContainer();
|
|
99
57
|
if (container === undefined) {
|
|
100
|
-
throw new MissingContainerContextError(
|
|
58
|
+
throw new MissingContainerContextError(classNameOf(this), context.name);
|
|
101
59
|
}
|
|
102
|
-
const resolveOptions = options === undefined
|
|
103
|
-
? undefined
|
|
104
|
-
: injectionSlotToResolveOptions({
|
|
105
|
-
...(options.name !== undefined ? { name: options.name } : {}),
|
|
106
|
-
...(options.tags !== undefined ? { tags: options.tags } : {}),
|
|
107
|
-
});
|
|
108
60
|
const value = descriptor.optional
|
|
109
61
|
? container.resolveOptional(token, resolveOptions)
|
|
110
62
|
: container.resolve(token, resolveOptions);
|
|
@@ -120,26 +72,4 @@ export function inject(token, options) {
|
|
|
120
72
|
Object.defineProperties(decoratorFn, props);
|
|
121
73
|
return decoratorFn;
|
|
122
74
|
}
|
|
123
|
-
// ── optional() ────────────────────────────────────────────────────────────────
|
|
124
|
-
/**
|
|
125
|
-
* @since 0.3.16-canary.0
|
|
126
|
-
*/
|
|
127
|
-
export function optional(token, options) {
|
|
128
|
-
return withOptions({
|
|
129
|
-
token: token,
|
|
130
|
-
optional: true,
|
|
131
|
-
multi: false,
|
|
132
|
-
}, options);
|
|
133
|
-
}
|
|
134
|
-
// ── injectAll() ───────────────────────────────────────────────────────────────
|
|
135
|
-
/**
|
|
136
|
-
* @since 0.3.16-canary.0
|
|
137
|
-
*/
|
|
138
|
-
export function injectAll(token, options) {
|
|
139
|
-
return withOptions({
|
|
140
|
-
token: token,
|
|
141
|
-
optional: false,
|
|
142
|
-
multi: true,
|
|
143
|
-
}, options);
|
|
144
|
-
}
|
|
145
75
|
//# sourceMappingURL=inject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/decorators/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { BindingScope, Constructor } from "#/core/types";
|
|
2
|
+
import type { InjectableDependency, ResolvedDependencyValue } from "#/injection/descriptor";
|
|
3
3
|
/**
|
|
4
4
|
* @since 0.3.16-canary.0
|
|
5
5
|
*/
|
|
@@ -18,12 +18,32 @@ export declare function createAutoRegisterRegistry(): AutoRegisterRegistry;
|
|
|
18
18
|
* @since 0.3.16-canary.0
|
|
19
19
|
*/
|
|
20
20
|
export interface InjectableOptions {
|
|
21
|
-
autoRegister?: AutoRegisterRegistry;
|
|
22
|
-
scope?: BindingScope;
|
|
21
|
+
autoRegister?: AutoRegisterRegistry | undefined;
|
|
22
|
+
scope?: BindingScope | undefined;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
+
* The parameters a constructor is handed, given what its `deps` declare.
|
|
26
|
+
*
|
|
27
|
+
* @remarks Reuses the same reading a `toResolved` factory gets, so `injectAll` arrives as an array
|
|
28
|
+
* and `optional` as possibly undefined in both places.
|
|
29
|
+
*/
|
|
30
|
+
type InjectedParameters<Deps extends ReadonlyArray<InjectableDependency>> = {
|
|
31
|
+
-readonly [Index in keyof Deps]: ResolvedDependencyValue<Deps[Index]>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Declare a class injectable, and what its constructor is to be handed.
|
|
35
|
+
*
|
|
36
|
+
* @since 0.3.16-canary.0
|
|
37
|
+
*/
|
|
38
|
+
export declare function injectable(): (target: unknown, context: ClassDecoratorContext) => void;
|
|
39
|
+
/**
|
|
40
|
+
* @remarks Declaring dependencies constrains the class: the decorator only accepts one whose
|
|
41
|
+
* constructor takes exactly what `deps` resolve to, in that order. A class taking fewer parameters
|
|
42
|
+
* than `deps` declares still satisfies it, which is the one mismatch TypeScript's arity rules let
|
|
43
|
+
* through — the surplus dependency is resolved and discarded.
|
|
44
|
+
*
|
|
25
45
|
* @since 0.3.16-canary.0
|
|
26
46
|
*/
|
|
27
|
-
export declare function injectable
|
|
47
|
+
export declare function injectable<const Deps extends ReadonlyArray<InjectableDependency>>(deps: Deps, options?: InjectableOptions): (target: abstract new (...args: InjectedParameters<Deps>) => unknown, context: ClassDecoratorContext) => void;
|
|
28
48
|
export type { InjectableDependency };
|
|
29
49
|
//# sourceMappingURL=injectable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAO5F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzD,OAAO,IAAI,aAAa,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAUjE;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChD,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAID;;;;;GAKG;AACH,KAAK,kBAAkB,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,IAAI;IAC1E,CAAC,UAAU,KAAK,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CACtE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAExF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EAC/E,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,iBAAiB,GAC1B,CAAC,MAAM,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AA2CjH,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { normalizeToDescriptor } from "#/
|
|
1
|
+
import { normalizeToDescriptor } from "#/injection/descriptor";
|
|
2
2
|
import { INJECTABLE_KEY } from "#/metadata/metadata-keys";
|
|
3
3
|
/**
|
|
4
4
|
* @since 0.3.16-canary.0
|
|
@@ -14,9 +14,8 @@ export function createAutoRegisterRegistry() {
|
|
|
14
14
|
},
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
// ── @injectable() ─────────────────────────────────────────────────────────────
|
|
18
17
|
/**
|
|
19
|
-
* @since 0.
|
|
18
|
+
* @since 0.6.0
|
|
20
19
|
*/
|
|
21
20
|
export function injectable(deps, options) {
|
|
22
21
|
return function (target, context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/decorators/injectable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAa1D;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,iBAAiB,GAAwD,EAAE,CAAC;IAClF,OAAO;QACL,QAAQ,CAAC,MAAmB,EAAE,KAAmB;YAC/C,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC;AA4CD;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAA0C,EAC1C,OAA2B;IAE3B,OAAO,UAAU,MAAa,EAAE,OAA8B;QAC5D,MAAM,qBAAqB,GAAyB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzF,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,qBAAqB,GAAkE;gBAC3F,KAAK;gBACL,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC;YACF,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnE,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YACpF,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7D,CAAC;YACD,OAAO,qBAAqB,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,iFAAiF;QACjF,qDAAqD;QACpD,OAAO,CAAC,QAA6C,CAAC,cAAc,CAAC,GAAG;YACvE,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QAEF,IAAI,OAAO,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,KAAK,GAAiB,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;YACzD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAqB,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
type MethodDecorator = (target: unknown, context: ClassMethodDecoratorContext) => void;
|
|
1
2
|
/**
|
|
2
3
|
* @since 0.3.16-canary.0
|
|
3
4
|
*/
|
|
4
|
-
export declare function postConstruct():
|
|
5
|
+
export declare function postConstruct(): MethodDecorator;
|
|
5
6
|
/**
|
|
6
7
|
* @since 0.3.16-canary.0
|
|
7
8
|
*/
|
|
8
|
-
export declare function preDestroy():
|
|
9
|
+
export declare function preDestroy(): MethodDecorator;
|
|
10
|
+
export {};
|
|
9
11
|
//# sourceMappingURL=lifecycle-decorators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle-decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AAsBvF;;GAEG;AACH,wBAAgB,aAAa,IAAI,eAAe,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAE5C"}
|
|
@@ -1,40 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StaticMemberDecoratorError } from "#/errors/errors";
|
|
2
2
|
import { LIFECYCLE_KEY } from "#/metadata/metadata-keys";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
metadata[phase].push(methodName);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* @since 0.3.16-canary.0
|
|
10
|
-
*/
|
|
11
|
-
export function postConstruct() {
|
|
3
|
+
/** Records the decorated method under one lifecycle phase; both decorators differ only in that phase. */
|
|
4
|
+
function recordLifecycleMethod(phase) {
|
|
12
5
|
return function (target, context) {
|
|
13
6
|
if (context.static) {
|
|
14
|
-
throw new
|
|
7
|
+
throw new StaticMemberDecoratorError(phase, String(context.name));
|
|
15
8
|
}
|
|
16
|
-
const methodName = String(context.name);
|
|
17
9
|
const meta = context.metadata;
|
|
18
|
-
|
|
10
|
+
// Own bucket only: `context.metadata` inherits the base class's record, and writing through an
|
|
11
|
+
// inherited bucket would register this hook on the base class instead.
|
|
12
|
+
if (!Object.hasOwn(meta, LIFECYCLE_KEY)) {
|
|
19
13
|
meta[LIFECYCLE_KEY] = { postConstruct: [], preDestroy: [] };
|
|
20
14
|
}
|
|
21
|
-
|
|
15
|
+
const lifecycle = meta[LIFECYCLE_KEY];
|
|
16
|
+
const methodName = String(context.name);
|
|
17
|
+
if (!lifecycle[phase].includes(methodName)) {
|
|
18
|
+
lifecycle[phase].push(methodName);
|
|
19
|
+
}
|
|
22
20
|
};
|
|
23
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* @since 0.3.16-canary.0
|
|
24
|
+
*/
|
|
25
|
+
export function postConstruct() {
|
|
26
|
+
return recordLifecycleMethod("postConstruct");
|
|
27
|
+
}
|
|
24
28
|
/**
|
|
25
29
|
* @since 0.3.16-canary.0
|
|
26
30
|
*/
|
|
27
31
|
export function preDestroy() {
|
|
28
|
-
return
|
|
29
|
-
if (context.static) {
|
|
30
|
-
throw new InternalError("@preDestroy() applies to instance methods only; static methods are not invoked during instance teardown.");
|
|
31
|
-
}
|
|
32
|
-
const methodName = String(context.name);
|
|
33
|
-
const meta = context.metadata;
|
|
34
|
-
if (!meta[LIFECYCLE_KEY]) {
|
|
35
|
-
meta[LIFECYCLE_KEY] = { postConstruct: [], preDestroy: [] };
|
|
36
|
-
}
|
|
37
|
-
appendUniqueMethod(meta[LIFECYCLE_KEY], "preDestroy", methodName);
|
|
38
|
-
};
|
|
32
|
+
return recordLifecycleMethod("preDestroy");
|
|
39
33
|
}
|
|
40
34
|
//# sourceMappingURL=lifecycle-decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-decorators.js","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lifecycle-decorators.js","sourceRoot":"","sources":["../../src/decorators/lifecycle-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,yGAAyG;AACzG,SAAS,qBAAqB,CAAC,KAAqC;IAClE,OAAO,UAAU,MAAe,EAAE,OAAoC;QACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAA4C,CAAC;QAClE,+FAA+F;QAC/F,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9D,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAA6B,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -23,6 +23,8 @@ export declare const RESOLUTION_DIAGNOSTICS: unique symbol;
|
|
|
23
23
|
export interface ResolutionDiagnostics {
|
|
24
24
|
/** Bindings with a compiled instantiation plan. */
|
|
25
25
|
readonly compiledPlanCount: number;
|
|
26
|
+
/** Bindings with a compiled async instantiation plan. */
|
|
27
|
+
readonly compiledAsyncPlanCount: number;
|
|
26
28
|
/** Contexts held by the depth-indexed sync pool. */
|
|
27
29
|
readonly syncContextPoolSize: number;
|
|
28
30
|
/** Scoped instances currently cached by this container's scope manager. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/errors/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,MAA4C,CAAC;AAEzF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,oDAAoD;IACpD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,sBAAsB,CAAC,IAAI,qBAAqB,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/errors/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB,MAAM,CAAC,2BAA2B,CAAC,CAAC"}
|