@codefast/di 0.5.0-canary.7 → 0.5.0-canary.9
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 +205 -0
- package/README.md +6 -2
- package/dist/binding.d.ts +85 -24
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +55 -0
- package/dist/binding.js.map +1 -1
- package/dist/constructor-type.d.ts +4 -5
- package/dist/constructor-type.d.ts.map +1 -1
- package/dist/container/binding-builders.d.ts +32 -11
- package/dist/container/binding-builders.d.ts.map +1 -1
- package/dist/container/binding-builders.js +144 -192
- package/dist/container/binding-builders.js.map +1 -1
- package/dist/container/container.d.ts.map +1 -1
- package/dist/container/container.js +141 -201
- package/dist/container/container.js.map +1 -1
- package/dist/decorators/inject.d.ts +2 -4
- package/dist/decorators/inject.d.ts.map +1 -1
- package/dist/decorators/inject.js.map +1 -1
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/introspection/inspector.d.ts +0 -1
- package/dist/introspection/inspector.d.ts.map +1 -1
- package/dist/introspection/inspector.js +3 -8
- package/dist/introspection/inspector.js.map +1 -1
- package/dist/metadata/metadata-keys.d.ts +3 -6
- package/dist/metadata/metadata-keys.d.ts.map +1 -1
- package/dist/metadata/metadata-keys.js +3 -6
- package/dist/metadata/metadata-keys.js.map +1 -1
- package/dist/registry.d.ts +14 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +81 -78
- package/dist/registry.js.map +1 -1
- package/dist/resolution/activation-need.d.ts +27 -0
- package/dist/resolution/activation-need.d.ts.map +1 -0
- package/dist/resolution/activation-need.js +68 -0
- package/dist/resolution/activation-need.js.map +1 -0
- package/dist/resolution/binding-lookup-cache.d.ts +41 -0
- package/dist/resolution/binding-lookup-cache.d.ts.map +1 -0
- package/dist/resolution/binding-lookup-cache.js +118 -0
- package/dist/resolution/binding-lookup-cache.js.map +1 -0
- package/dist/resolution/binding-scope.d.ts +5 -2
- package/dist/resolution/binding-scope.d.ts.map +1 -1
- package/dist/resolution/binding-scope.js +6 -17
- package/dist/resolution/binding-scope.js.map +1 -1
- package/dist/resolution/binding-select.d.ts +8 -1
- package/dist/resolution/binding-select.d.ts.map +1 -1
- package/dist/resolution/binding-select.js +14 -36
- package/dist/resolution/binding-select.js.map +1 -1
- package/dist/resolution/class-introspector.d.ts +27 -0
- package/dist/resolution/class-introspector.d.ts.map +1 -0
- package/dist/resolution/class-introspector.js +60 -0
- package/dist/resolution/class-introspector.js.map +1 -0
- package/dist/resolution/diagnostics.d.ts +41 -0
- package/dist/resolution/diagnostics.d.ts.map +1 -0
- package/dist/resolution/diagnostics.js +18 -0
- package/dist/resolution/diagnostics.js.map +1 -0
- package/dist/resolution/environment.d.ts +48 -1
- package/dist/resolution/environment.d.ts.map +1 -1
- package/dist/resolution/environment.js +134 -5
- package/dist/resolution/environment.js.map +1 -1
- package/dist/resolution/instantiation-plan.d.ts +15 -15
- package/dist/resolution/instantiation-plan.d.ts.map +1 -1
- package/dist/resolution/instantiation-plan.js +69 -49
- package/dist/resolution/instantiation-plan.js.map +1 -1
- package/dist/resolution/lifecycle.d.ts +2 -0
- package/dist/resolution/lifecycle.d.ts.map +1 -1
- package/dist/resolution/lifecycle.js +60 -62
- package/dist/resolution/lifecycle.js.map +1 -1
- package/dist/resolution/resolution-path.d.ts +84 -17
- package/dist/resolution/resolution-path.d.ts.map +1 -1
- package/dist/resolution/resolution-path.js +68 -23
- package/dist/resolution/resolution-path.js.map +1 -1
- package/dist/resolution/resolve-options.d.ts +41 -4
- package/dist/resolution/resolve-options.d.ts.map +1 -1
- package/dist/resolution/resolve-options.js +25 -1
- package/dist/resolution/resolve-options.js.map +1 -1
- package/dist/resolution/resolver.d.ts +33 -10
- package/dist/resolution/resolver.d.ts.map +1 -1
- package/dist/resolution/resolver.js +471 -830
- package/dist/resolution/resolver.js.map +1 -1
- package/dist/resolution/scope.d.ts +11 -15
- package/dist/resolution/scope.d.ts.map +1 -1
- package/dist/resolution/scope.js +55 -43
- package/dist/resolution/scope.js.map +1 -1
- package/package.json +10 -106
- package/src/binding.ts +146 -24
- package/src/constructor-type.ts +4 -5
- package/src/container/binding-builders.ts +184 -284
- package/src/container/container.ts +161 -221
- package/src/decorators/inject.ts +3 -5
- package/src/errors.ts +38 -0
- package/src/index.ts +4 -1
- package/src/introspection/inspector.ts +3 -9
- package/src/metadata/metadata-keys.ts +3 -6
- package/src/registry.ts +90 -94
- package/src/resolution/activation-need.ts +85 -0
- package/src/resolution/binding-lookup-cache.ts +148 -0
- package/src/resolution/binding-scope.ts +6 -17
- package/src/resolution/binding-select.ts +15 -39
- package/src/resolution/class-introspector.ts +74 -0
- package/src/resolution/diagnostics.ts +43 -0
- package/src/resolution/environment.ts +181 -5
- package/src/resolution/instantiation-plan.ts +116 -64
- package/src/resolution/lifecycle.ts +69 -62
- package/src/resolution/resolution-path.ts +122 -43
- package/src/resolution/resolve-options.ts +51 -4
- package/src/resolution/resolver.ts +649 -1081
- package/src/resolution/scope.ts +58 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instantiation-plan.d.ts","sourceRoot":"","sources":["../../src/resolution/instantiation-plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"instantiation-plan.d.ts","sourceRoot":"","sources":["../../src/resolution/instantiation-plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM5E;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,MAAgC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,UAAU,CAAC;AAUxF;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC;IACpE,wFAAwF;IACxF,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7D,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IACnD,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAC7E,0FAA0F;IAC1F,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,gCAAgC,GAAG,IAAI,CAAC;IACpG,wFAAwF;IACxF,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;IACtD,qFAAqF;IACrF,cAAc,CACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EACnC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,OAAO,CAAC;CACZ;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,qBAAa,yBAAyB;;IAGpC,YAAY,IAAI,EAAE,qBAAqB,EAEtC;IAED,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,GAAG,8BAA8B,CAIzF;CA+LF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { NO_INSTANCE } from "#/binding";
|
|
1
2
|
import { AsyncResolutionError } from "#/errors";
|
|
2
3
|
import { injectionSlotToResolveOptions } from "#/resolution/resolve-options";
|
|
3
|
-
import { SINGLETON_MISS } from "#/resolution/scope";
|
|
4
4
|
import { tokenName } from "#/token";
|
|
5
|
-
//
|
|
5
|
+
// Past this depth a dependency escapes to the runtime path rather than inlining further —
|
|
6
|
+
// compiled closures nest one JS frame per level, and pathological graphs are the runtime's job.
|
|
6
7
|
const PLAN_DEPTH_LIMIT = 32;
|
|
7
8
|
/**
|
|
8
9
|
* Compilation asked to retry later (class lifecycle metadata not discovered yet).
|
|
@@ -20,26 +21,36 @@ export class InstantiationPlanCompiler {
|
|
|
20
21
|
}
|
|
21
22
|
compile(binding) {
|
|
22
23
|
return binding.kind === "class"
|
|
23
|
-
? this.#compileClassPlan(binding, new Set(), 0)
|
|
24
|
-
: this.#compileResolvedPlan(binding, new Set(), 0);
|
|
24
|
+
? this.#compileClassPlan(binding, new Set(), 0, [])
|
|
25
|
+
: this.#compileResolvedPlan(binding, new Set(), 0, []);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Re-entry into the runtime resolver for a dependency the plan can't see through.
|
|
29
|
+
*
|
|
30
|
+
* The ancestors are fixed at compile time, so the seeds are built once; each call copies
|
|
31
|
+
* them because the resolver pushes and pops on the arrays it is given.
|
|
32
|
+
*/
|
|
33
|
+
#compileEscapeThunk(token, ancestors, arity = "single", options) {
|
|
34
|
+
const host = this.#host;
|
|
35
|
+
const frames = ancestors.map((ancestor) => host.getResolutionFrame(ancestor));
|
|
36
|
+
const names = frames.map((frame) => frame.tokenName);
|
|
37
|
+
return () => host.resolveEscaped(token, options, arity, [...names], [...frames]);
|
|
25
38
|
}
|
|
26
39
|
// A resolved binding declares its deps as explicit descriptors — same rules as
|
|
27
40
|
// class params, with the factory call (and its sync-only check) in place of `new`.
|
|
28
|
-
#compileResolvedPlan(binding, compileStack, depth) {
|
|
29
|
-
if (depth > PLAN_DEPTH_LIMIT || compileStack.has(binding.id)) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
41
|
+
#compileResolvedPlan(binding, compileStack, depth, ancestors) {
|
|
32
42
|
if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding.token)) {
|
|
33
43
|
return null;
|
|
34
44
|
}
|
|
35
45
|
const factory = binding.factory;
|
|
36
46
|
const tokenDisplayName = tokenName(binding.token);
|
|
37
47
|
const depThunks = new Array(binding.deps.length);
|
|
48
|
+
const depAncestors = [...ancestors, binding];
|
|
38
49
|
compileStack.add(binding.id);
|
|
39
50
|
try {
|
|
40
51
|
for (let index = 0; index < binding.deps.length; index += 1) {
|
|
41
|
-
const thunk = this.#
|
|
42
|
-
if (thunk ===
|
|
52
|
+
const thunk = this.#compileInjectionThunk(binding.deps[index], compileStack, depth, depAncestors);
|
|
53
|
+
if (thunk === PLAN_RETRY) {
|
|
43
54
|
return thunk;
|
|
44
55
|
}
|
|
45
56
|
depThunks[index] = thunk;
|
|
@@ -56,20 +67,30 @@ export class InstantiationPlanCompiler {
|
|
|
56
67
|
return factoryResult;
|
|
57
68
|
};
|
|
58
69
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
/**
|
|
71
|
+
* One dependency of a plan node — a constructor param or a `toResolved` descriptor.
|
|
72
|
+
*
|
|
73
|
+
* @remarks Anything but a plain required single dependency escapes to the runtime path.
|
|
74
|
+
*/
|
|
75
|
+
#compileInjectionThunk(descriptor, compileStack, depth, ancestors) {
|
|
76
|
+
const token = descriptor.token;
|
|
77
|
+
const options = injectionSlotToResolveOptions(descriptor);
|
|
78
|
+
if (descriptor.multi) {
|
|
79
|
+
return this.#compileEscapeThunk(token, ancestors, "all", options);
|
|
80
|
+
}
|
|
81
|
+
if (descriptor.optional) {
|
|
82
|
+
return this.#compileEscapeThunk(token, ancestors, "optional", options);
|
|
83
|
+
}
|
|
84
|
+
if (options !== undefined) {
|
|
85
|
+
return this.#compileEscapeThunk(token, ancestors, "single", options);
|
|
86
|
+
}
|
|
87
|
+
const entry = this.#host.lookupDependencyEntry(token);
|
|
64
88
|
if (entry === null) {
|
|
65
|
-
return
|
|
89
|
+
return this.#compileEscapeThunk(token, ancestors);
|
|
66
90
|
}
|
|
67
|
-
return this.#compileDepThunk(entry, compileStack, depth);
|
|
91
|
+
return this.#compileDepThunk(entry, compileStack, depth, ancestors);
|
|
68
92
|
}
|
|
69
|
-
#compileClassPlan(binding, compileStack, depth) {
|
|
70
|
-
if (depth > PLAN_DEPTH_LIMIT || compileStack.has(binding.id)) {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
93
|
+
#compileClassPlan(binding, compileStack, depth, ancestors) {
|
|
73
94
|
if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding.token)) {
|
|
74
95
|
return null;
|
|
75
96
|
}
|
|
@@ -92,19 +113,12 @@ export class InstantiationPlanCompiler {
|
|
|
92
113
|
return () => new invokable();
|
|
93
114
|
}
|
|
94
115
|
const depThunks = new Array(params.length);
|
|
116
|
+
const depAncestors = [...ancestors, binding];
|
|
95
117
|
compileStack.add(binding.id);
|
|
96
118
|
try {
|
|
97
119
|
for (let index = 0; index < params.length; index += 1) {
|
|
98
|
-
const
|
|
99
|
-
if (
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
const entry = this.#host.lookupDependencyEntry(param.token);
|
|
103
|
-
if (entry === null) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
const thunk = this.#compileDepThunk(entry, compileStack, depth);
|
|
107
|
-
if (thunk === null || thunk === PLAN_RETRY) {
|
|
120
|
+
const thunk = this.#compileInjectionThunk(params[index], compileStack, depth, depAncestors);
|
|
121
|
+
if (thunk === PLAN_RETRY) {
|
|
108
122
|
return thunk;
|
|
109
123
|
}
|
|
110
124
|
depThunks[index] = thunk;
|
|
@@ -133,31 +147,37 @@ export class InstantiationPlanCompiler {
|
|
|
133
147
|
return () => new invokable(...depThunks.map((thunk) => thunk()));
|
|
134
148
|
}
|
|
135
149
|
}
|
|
136
|
-
#compileDepThunk(entry, compileStack, depth) {
|
|
137
|
-
const { binding
|
|
138
|
-
if (binding.kind === "constant") {
|
|
139
|
-
if (
|
|
140
|
-
|
|
150
|
+
#compileDepThunk(entry, compileStack, depth, ancestors) {
|
|
151
|
+
const { binding } = entry;
|
|
152
|
+
if (binding.kind === "constant" && binding.onActivation === undefined) {
|
|
153
|
+
if (!this.#host.hasActivationHandlers(binding.token)) {
|
|
154
|
+
const value = binding.value;
|
|
155
|
+
return () => value;
|
|
141
156
|
}
|
|
142
|
-
const value = binding.value;
|
|
143
|
-
return () => value;
|
|
144
157
|
}
|
|
145
|
-
const scope = binding.scope
|
|
158
|
+
const scope = binding.scope;
|
|
146
159
|
if (scope === "singleton") {
|
|
147
|
-
// Cached-singleton read
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
const
|
|
160
|
+
// Cached-singleton read; the first materialization escapes so it sees the same ancestors
|
|
161
|
+
// (and therefore the same cycle detection) the interpreted path would have built.
|
|
162
|
+
const escape = this.#compileEscapeThunk(binding.token, ancestors);
|
|
163
|
+
const singletonBinding = binding;
|
|
151
164
|
return () => {
|
|
152
|
-
const
|
|
153
|
-
return
|
|
165
|
+
const cached = singletonBinding.instance;
|
|
166
|
+
return cached === NO_INSTANCE ? escape() : cached;
|
|
154
167
|
};
|
|
155
168
|
}
|
|
156
|
-
if (scope === "transient" &&
|
|
157
|
-
|
|
169
|
+
if (scope === "transient" &&
|
|
170
|
+
binding.kind === "class" &&
|
|
171
|
+
depth < PLAN_DEPTH_LIMIT &&
|
|
172
|
+
!compileStack.has(binding.id)) {
|
|
173
|
+
const inlined = this.#compileClassPlan(binding, compileStack, depth + 1, ancestors);
|
|
174
|
+
if (inlined !== null) {
|
|
175
|
+
return inlined;
|
|
176
|
+
}
|
|
158
177
|
}
|
|
159
|
-
//
|
|
160
|
-
|
|
178
|
+
// Anything opaque — a factory, a scoped binding, an activation hook, a class the compiler
|
|
179
|
+
// declined — runs on the runtime path, seeded with this plan's ancestors.
|
|
180
|
+
return this.#compileEscapeThunk(binding.token, ancestors);
|
|
161
181
|
}
|
|
162
182
|
}
|
|
163
183
|
//# sourceMappingURL=instantiation-plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instantiation-plan.js","sourceRoot":"","sources":["../../src/resolution/instantiation-plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instantiation-plan.js","sourceRoot":"","sources":["../../src/resolution/instantiation-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,5 +17,7 @@ export declare class LifecycleManager {
|
|
|
17
17
|
runActivationSync<const Value>(resolutionContext: ResolutionContext, binding: Binding<Value>, instance: Value, metadataReader: MetadataReader): Value;
|
|
18
18
|
runDeactivation<const Value>(binding: Binding<Value>, instance: Value, metadataReader: MetadataReader): Promise<void>;
|
|
19
19
|
runDeactivationSync<const Value>(binding: Binding<Value>, instance: Value, metadataReader: MetadataReader): void;
|
|
20
|
+
/** Whether the deferred table behind `#activationHooks` has had to be built. */
|
|
21
|
+
get isBuilt(): boolean;
|
|
20
22
|
}
|
|
21
23
|
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/resolution/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtG;;GAEG;AACH,qBAAa,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/resolution/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtG;;GAEG;AACH,qBAAa,gBAAgB;;IAY3B,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAOjH;IAED,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAGpF;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,sFAAsF;IACtF,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAC/B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GACvC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAavD;IAED,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAClC,IAAI,CAGN;IAEK,aAAa,CAAC,KAAK,CAAC,KAAK,EAC7B,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAE,KAAK,EACf,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,KAAK,CAAC,CA2BhB;IAED,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAC3B,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAE,KAAK,EACf,cAAc,EAAE,cAAc,GAC7B,KAAK,CAiCP;IAEK,eAAe,CAAC,KAAK,CAAC,KAAK,EAC/B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAE,KAAK,EACf,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Bf;IAED,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CA6B/G;IAED,gFAAgF;IAChF,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
|
|
@@ -4,21 +4,25 @@ import { tokenName } from "#/token";
|
|
|
4
4
|
* @since 0.3.16-canary.0
|
|
5
5
|
*/
|
|
6
6
|
export class LifecycleManager {
|
|
7
|
-
// Container-level activation/deactivation hooks per token
|
|
8
|
-
|
|
9
|
-
#
|
|
7
|
+
// Container-level activation/deactivation hooks per token — most containers register none, so
|
|
8
|
+
// both tables stay unallocated until the first hook arrives.
|
|
9
|
+
#activationHooks;
|
|
10
|
+
#deactivationHooks;
|
|
10
11
|
#activationVersion = 0;
|
|
12
|
+
// One-entry cache in front of the map: a resolve loop asks about the same token over and over,
|
|
13
|
+
// and registration is the only thing that can change the answer.
|
|
14
|
+
#cachedToken;
|
|
15
|
+
#cachedHooks;
|
|
11
16
|
registerActivation(token, handler) {
|
|
12
17
|
this.#activationVersion += 1;
|
|
18
|
+
this.#cachedToken = undefined;
|
|
19
|
+
this.#cachedHooks = undefined;
|
|
13
20
|
// ✓ TS6.0: Map.getOrInsert (ES2025)
|
|
14
|
-
const list = this.#activationHooks.getOrInsert(token, []);
|
|
21
|
+
const list = (this.#activationHooks ??= new Map()).getOrInsert(token, []);
|
|
15
22
|
list.push(handler);
|
|
16
23
|
}
|
|
17
24
|
hasActivationHandlers(token) {
|
|
18
|
-
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
const list = this.#activationHooks.get(token);
|
|
25
|
+
const list = this.activationHandlersFor(token);
|
|
22
26
|
return list !== undefined && list.length > 0;
|
|
23
27
|
}
|
|
24
28
|
get activationVersion() {
|
|
@@ -26,27 +30,30 @@ export class LifecycleManager {
|
|
|
26
30
|
}
|
|
27
31
|
/** Container-level activation handlers for a token — hot-path accessor, no copies. */
|
|
28
32
|
activationHandlersFor(token) {
|
|
29
|
-
|
|
33
|
+
const hooks = this.#activationHooks;
|
|
34
|
+
if (hooks === undefined) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const key = token;
|
|
38
|
+
if (key === this.#cachedToken) {
|
|
39
|
+
return this.#cachedHooks;
|
|
40
|
+
}
|
|
41
|
+
const list = hooks.get(key);
|
|
42
|
+
this.#cachedToken = key;
|
|
43
|
+
this.#cachedHooks = list;
|
|
44
|
+
return list;
|
|
30
45
|
}
|
|
31
46
|
registerDeactivation(token, handler) {
|
|
32
|
-
const list = this.#deactivationHooks.getOrInsert(token, []);
|
|
47
|
+
const list = (this.#deactivationHooks ??= new Map()).getOrInsert(token, []);
|
|
33
48
|
list.push(handler);
|
|
34
49
|
}
|
|
35
50
|
async runActivation(resolutionContext, binding, instance, metadataReader) {
|
|
36
51
|
let activatedInstance = instance;
|
|
37
52
|
// 1. @postConstruct() — after TC39 construction (constructor + accessor addInitializer callbacks)
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
const method = activatedInstance[methodName];
|
|
43
|
-
if (typeof method === "function") {
|
|
44
|
-
const hookResult = method.call(activatedInstance);
|
|
45
|
-
if (hookResult instanceof Promise) {
|
|
46
|
-
await hookResult;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
53
|
+
for (const methodName of lifecycleMethods(binding, metadataReader, "postConstruct")) {
|
|
54
|
+
const hookResult = callHook(activatedInstance, methodName);
|
|
55
|
+
if (hookResult instanceof Promise) {
|
|
56
|
+
await hookResult;
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
// 2. per-binding onActivation
|
|
@@ -55,7 +62,7 @@ export class LifecycleManager {
|
|
|
55
62
|
activatedInstance = activationResult instanceof Promise ? await activationResult : activationResult;
|
|
56
63
|
}
|
|
57
64
|
// 3. container-level onActivation
|
|
58
|
-
const containerHooks = this.#activationHooks
|
|
65
|
+
const containerHooks = this.#activationHooks?.get(binding.token);
|
|
59
66
|
if (containerHooks !== undefined) {
|
|
60
67
|
for (const hook of containerHooks) {
|
|
61
68
|
const activationResult = hook(resolutionContext, activatedInstance);
|
|
@@ -67,18 +74,9 @@ export class LifecycleManager {
|
|
|
67
74
|
runActivationSync(resolutionContext, binding, instance, metadataReader) {
|
|
68
75
|
let activatedInstance = instance;
|
|
69
76
|
// 1. @postConstruct() — must be sync (instance fully constructed per TC39 order)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
for (const methodName of lifecycle.postConstruct) {
|
|
74
|
-
const method = activatedInstance[methodName];
|
|
75
|
-
if (typeof method === "function") {
|
|
76
|
-
const hookResult = method.call(activatedInstance);
|
|
77
|
-
if (hookResult instanceof Promise) {
|
|
78
|
-
throw new AsyncActivationError(tokenName(binding.token), "postConstruct", methodName);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
77
|
+
for (const methodName of lifecycleMethods(binding, metadataReader, "postConstruct")) {
|
|
78
|
+
if (callHook(activatedInstance, methodName) instanceof Promise) {
|
|
79
|
+
throw new AsyncActivationError(tokenName(binding.token), "postConstruct", methodName);
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
// 2. per-binding onActivation (must be sync)
|
|
@@ -91,7 +89,7 @@ export class LifecycleManager {
|
|
|
91
89
|
}
|
|
92
90
|
// 3. container-level onActivation (must be sync)
|
|
93
91
|
const tokenDisplayName = tokenName(binding.token);
|
|
94
|
-
const containerHooks = this.#activationHooks
|
|
92
|
+
const containerHooks = this.#activationHooks?.get(binding.token);
|
|
95
93
|
if (containerHooks !== undefined) {
|
|
96
94
|
for (const hook of containerHooks) {
|
|
97
95
|
const activationResult = hook(resolutionContext, activatedInstance);
|
|
@@ -106,7 +104,7 @@ export class LifecycleManager {
|
|
|
106
104
|
async runDeactivation(binding, instance, metadataReader) {
|
|
107
105
|
const tokenKey = binding.token;
|
|
108
106
|
// 1. container-level onDeactivation
|
|
109
|
-
const containerHooks = this.#deactivationHooks
|
|
107
|
+
const containerHooks = this.#deactivationHooks?.get(tokenKey);
|
|
110
108
|
if (containerHooks !== undefined) {
|
|
111
109
|
for (const hook of containerHooks) {
|
|
112
110
|
const hookResult = hook(instance);
|
|
@@ -123,18 +121,10 @@ export class LifecycleManager {
|
|
|
123
121
|
}
|
|
124
122
|
}
|
|
125
123
|
// 3. @preDestroy() — all methods in declaration order
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
const method = instance[methodName];
|
|
131
|
-
if (typeof method === "function") {
|
|
132
|
-
const hookResult = method.call(instance);
|
|
133
|
-
if (hookResult instanceof Promise) {
|
|
134
|
-
await hookResult;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
124
|
+
for (const methodName of lifecycleMethods(binding, metadataReader, "preDestroy")) {
|
|
125
|
+
const hookResult = callHook(instance, methodName);
|
|
126
|
+
if (hookResult instanceof Promise) {
|
|
127
|
+
await hookResult;
|
|
138
128
|
}
|
|
139
129
|
}
|
|
140
130
|
}
|
|
@@ -142,7 +132,7 @@ export class LifecycleManager {
|
|
|
142
132
|
const tokenDisplayName = tokenName(binding.token);
|
|
143
133
|
const tokenKey = binding.token;
|
|
144
134
|
// 1. container-level onDeactivation
|
|
145
|
-
const containerHooks = this.#deactivationHooks
|
|
135
|
+
const containerHooks = this.#deactivationHooks?.get(tokenKey);
|
|
146
136
|
if (containerHooks !== undefined) {
|
|
147
137
|
for (const hook of containerHooks) {
|
|
148
138
|
const hookResult = hook(instance);
|
|
@@ -159,20 +149,28 @@ export class LifecycleManager {
|
|
|
159
149
|
}
|
|
160
150
|
}
|
|
161
151
|
// 3. @preDestroy()
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
for (const methodName of lifecycle.preDestroy) {
|
|
166
|
-
const method = instance[methodName];
|
|
167
|
-
if (typeof method === "function") {
|
|
168
|
-
const hookResult = method.call(instance);
|
|
169
|
-
if (hookResult instanceof Promise) {
|
|
170
|
-
throw new AsyncDeactivationError(tokenDisplayName);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
152
|
+
for (const methodName of lifecycleMethods(binding, metadataReader, "preDestroy")) {
|
|
153
|
+
if (callHook(instance, methodName) instanceof Promise) {
|
|
154
|
+
throw new AsyncDeactivationError(tokenDisplayName);
|
|
174
155
|
}
|
|
175
156
|
}
|
|
176
157
|
}
|
|
158
|
+
/** Whether the deferred table behind `#activationHooks` has had to be built. */
|
|
159
|
+
get isBuilt() {
|
|
160
|
+
return this.#activationHooks !== undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const NO_METHODS = [];
|
|
164
|
+
/** The `@postConstruct` / `@preDestroy` methods a binding declares — only a class can declare any. */
|
|
165
|
+
function lifecycleMethods(binding, metadataReader, phase) {
|
|
166
|
+
if (binding.kind !== "class") {
|
|
167
|
+
return NO_METHODS;
|
|
168
|
+
}
|
|
169
|
+
return metadataReader.getLifecycleMetadata(binding.target)?.[phase] ?? NO_METHODS;
|
|
170
|
+
}
|
|
171
|
+
/** Invokes a hook by name, tolerating a name whose member is not (or no longer) a method. */
|
|
172
|
+
function callHook(instance, methodName) {
|
|
173
|
+
const method = instance[methodName];
|
|
174
|
+
return typeof method === "function" ? method.call(instance) : undefined;
|
|
177
175
|
}
|
|
178
176
|
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/resolution/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/resolution/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,98 @@
|
|
|
1
|
+
import type { ResolutionFrame } from "#/types";
|
|
1
2
|
/**
|
|
2
3
|
* Where the cycle check switches from a linear `Array.includes` scan to an attached Set.
|
|
3
4
|
*
|
|
4
|
-
* @
|
|
5
|
-
* 16 / 32 / 64 / 128): a threshold of 128 gives 1275 / 3641 / 9645 / 26082, of 32 gives
|
|
6
|
-
* 1202 / 3285 / 7735 / 16837, of 16 gives 1299 / 3694 / 7449 / 15625. Switching at 32 wins
|
|
7
|
-
* the shallow-to-mid depths real graphs actually have while staying close to the best deep
|
|
8
|
-
* numbers; the previous value of 128 was the worst of the three almost everywhere.
|
|
5
|
+
* @see `ARCHITECTURE.md` — the depth sweep this value comes from.
|
|
9
6
|
*
|
|
10
7
|
* @since 0.5.0-canary.7
|
|
11
8
|
*/
|
|
12
9
|
export declare const RESOLUTION_SET_THRESHOLD = 32;
|
|
13
10
|
/**
|
|
14
|
-
*
|
|
15
|
-
* Set to the path array (lazily past RESOLUTION_SET_THRESHOLD, eagerly when `forceSet`),
|
|
16
|
-
* throws on a repeated token, then marks the token on both structures.
|
|
11
|
+
* Marks a token as in-flight on this path, throwing if it is already there.
|
|
17
12
|
*
|
|
18
|
-
*
|
|
13
|
+
* @remarks Unmark with `resolutionPath.pop()` plus `set?.delete(name)`. Sync only — the async lane
|
|
14
|
+
* never removes an entry, so it extends a branch instead; see {@link extendResolutionBranch}.
|
|
15
|
+
*
|
|
16
|
+
* @returns the membership set once the path is deep enough to carry one, else `undefined`.
|
|
17
|
+
*
|
|
18
|
+
* @since 0.5.0-canary.7
|
|
19
19
|
*/
|
|
20
|
-
export declare function enterResolutionPath(resolutionPath: Array<string>, tokenDisplayName: string
|
|
21
|
-
|
|
20
|
+
export declare function enterResolutionPath(resolutionPath: Array<string>, tokenDisplayName: string): Set<string> | undefined;
|
|
21
|
+
declare const BRANCH_BRAND: unique symbol;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* sync. Callers that already hold the entry's name can pop and delete directly; this exists for
|
|
25
|
-
* unwind paths that only have the path array — notably the async chain's shared settle callback,
|
|
26
|
-
* which serves every level and therefore cannot capture a per-level name.
|
|
23
|
+
* A resolution path one async branch owns, so appending to it cannot disturb another branch.
|
|
27
24
|
*
|
|
28
|
-
* @
|
|
25
|
+
* @remarks Only {@link extendResolutionBranch} mints one. That is what makes "may this lane append
|
|
26
|
+
* to this array" a question the compiler answers instead of a rule in a doc — a sync frame's path,
|
|
27
|
+
* which that frame will pop, is a plain `Array<string>` and cannot reach a level that owns its own.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.5.0-canary.9
|
|
30
|
+
*/
|
|
31
|
+
export type OwnedBranchPath = Array<string> & {
|
|
32
|
+
readonly [BRANCH_BRAND]: true;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* The stack half of {@link OwnedBranchPath}, minted only by {@link extendResolutionStackBranch}.
|
|
36
|
+
*
|
|
37
|
+
* @since 0.5.0-canary.9
|
|
38
|
+
*/
|
|
39
|
+
export type OwnedBranchStack = Array<ResolutionFrame> & {
|
|
40
|
+
readonly [BRANCH_BRAND]: true;
|
|
41
|
+
};
|
|
42
|
+
declare const BRANCH_DEPTH_BRAND: unique symbol;
|
|
43
|
+
/**
|
|
44
|
+
* How many leading entries of a path belong to one async branch.
|
|
45
|
+
*
|
|
46
|
+
* @remarks Branded so a bare number cannot be passed: a depth from anywhere but this branch silently
|
|
47
|
+
* re-parents a level.
|
|
48
|
+
*
|
|
49
|
+
* @since 0.5.0-canary.9
|
|
50
|
+
*/
|
|
51
|
+
export type OwnedBranchDepth = number & {
|
|
52
|
+
readonly [BRANCH_DEPTH_BRAND]: true;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* A path no async branch owns yet, so its first extension must copy rather than append.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.5.0-canary.9
|
|
58
|
+
*/
|
|
59
|
+
export declare const UNOWNED_BRANCH = -1;
|
|
60
|
+
/**
|
|
61
|
+
* How far into a path one extension may reach: this branch's own depth, or nobody's.
|
|
62
|
+
*
|
|
63
|
+
* @remarks A union rather than a sentinel hidden inside the branded number, so the two cases are
|
|
64
|
+
* visible at every signature that takes one and `=== UNOWNED_BRANCH` narrows to the owned case.
|
|
65
|
+
*
|
|
66
|
+
* @since 0.5.0-canary.9
|
|
67
|
+
*/
|
|
68
|
+
export type BranchDepth = OwnedBranchDepth | typeof UNOWNED_BRANCH;
|
|
69
|
+
/**
|
|
70
|
+
* The depth a chain's first level extends from, over an array its caller just minted.
|
|
71
|
+
*
|
|
72
|
+
* @since 0.5.0-canary.9
|
|
73
|
+
*/
|
|
74
|
+
export declare const ROOT_BRANCH: OwnedBranchDepth;
|
|
75
|
+
/**
|
|
76
|
+
* A branch's own depth: the length its path had when this level took it.
|
|
77
|
+
*
|
|
78
|
+
* @since 0.5.0-canary.9
|
|
79
|
+
*/
|
|
80
|
+
export declare function branchDepthOf(branch: OwnedBranchPath): OwnedBranchDepth;
|
|
81
|
+
/**
|
|
82
|
+
* Extends one branch of an append-only path, throwing if the entry is already an ancestor.
|
|
83
|
+
*
|
|
84
|
+
* @remarks Appends in place while this branch still owns the next slot, and copies its own prefix
|
|
85
|
+
* once a sibling has claimed it. Nothing is ever removed, so no async level has to observe its own
|
|
86
|
+
* settlement to unwind — see `ARCHITECTURE.md`.
|
|
87
|
+
*
|
|
88
|
+
* @since 0.5.0-canary.9
|
|
89
|
+
*/
|
|
90
|
+
export declare function extendResolutionBranch(resolutionPath: Array<string>, branchDepth: BranchDepth, tokenDisplayName: string): OwnedBranchPath;
|
|
91
|
+
/**
|
|
92
|
+
* The stack half of {@link extendResolutionBranch}; frames carry no cycle to detect.
|
|
93
|
+
*
|
|
94
|
+
* @since 0.5.0-canary.9
|
|
29
95
|
*/
|
|
30
|
-
export declare function
|
|
96
|
+
export declare function extendResolutionStackBranch(resolutionStack: Array<ResolutionFrame>, branchDepth: BranchDepth, frame: ResolutionFrame): OwnedBranchStack;
|
|
97
|
+
export {};
|
|
31
98
|
//# sourceMappingURL=resolution-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolution-path.d.ts","sourceRoot":"","sources":["../../src/resolution/resolution-path.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolution-path.d.ts","sourceRoot":"","sources":["../../src/resolution/resolution-path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAG3C;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAapH;AAED,OAAO,CAAC,MAAM,YAAY,EAAE,OAAO,MAAM,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEhF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE1F,OAAO,CAAC,MAAM,kBAAkB,EAAE,OAAO,MAAM,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,OAAO,cAAc,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAQ,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAC7B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,MAAM,GACvB,eAAe,CAkBjB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACvC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,eAAe,GACrB,gBAAgB,CAQlB"}
|