@codefast/di 0.5.0-canary.6 → 0.5.0-canary.8
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 +123 -0
- package/README.md +15 -4
- package/dist/binding.d.ts +78 -19
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +46 -2
- 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 +56 -0
- package/dist/container/binding-builders.d.ts.map +1 -0
- package/dist/container/binding-builders.js +196 -0
- package/dist/container/binding-builders.js.map +1 -0
- package/dist/{container.d.ts → container/container.d.ts} +2 -2
- package/dist/container/container.d.ts.map +1 -0
- package/dist/container/container.js +624 -0
- package/dist/container/container.js.map +1 -0
- package/dist/decorators/inject.d.ts +10 -1
- package/dist/decorators/inject.d.ts.map +1 -1
- package/dist/decorators/inject.js +2 -2
- package/dist/decorators/inject.js.map +1 -1
- package/dist/decorators/injectable.js +3 -3
- package/dist/decorators/injectable.js.map +1 -1
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/introspection/dependency-graph.d.ts.map +1 -0
- package/dist/{dependency-graph.js → introspection/dependency-graph.js} +1 -1
- package/dist/introspection/dependency-graph.js.map +1 -0
- package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.d.ts +1 -1
- package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -0
- package/dist/introspection/graph-adapters/cytoscape.js.map +1 -0
- package/dist/introspection/graph-adapters/dot.d.ts +6 -0
- package/dist/introspection/graph-adapters/dot.d.ts.map +1 -0
- package/dist/introspection/graph-adapters/dot.js.map +1 -0
- package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.d.ts +2 -2
- package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -0
- package/dist/{graph-adapters → introspection/graph-adapters}/reactflow.js +11 -1
- package/dist/introspection/graph-adapters/reactflow.js.map +1 -0
- package/dist/{inspector.d.ts → introspection/inspector.d.ts} +3 -8
- package/dist/introspection/inspector.d.ts.map +1 -0
- package/dist/{inspector.js → introspection/inspector.js} +23 -23
- package/dist/introspection/inspector.js.map +1 -0
- 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/metadata/symbol-metadata-reader.d.ts +1 -1
- package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
- package/dist/metadata/symbol-metadata-reader.js +4 -4
- package/dist/metadata/symbol-metadata-reader.js.map +1 -1
- package/dist/module.d.ts +9 -2
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +9 -2
- package/dist/module.js.map +1 -1
- package/dist/registry.d.ts +17 -13
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +94 -63
- package/dist/registry.js.map +1 -1
- package/dist/resolution/activation-need.d.ts +25 -0
- package/dist/resolution/activation-need.d.ts.map +1 -0
- package/dist/resolution/activation-need.js +64 -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 +102 -0
- package/dist/resolution/binding-lookup-cache.js.map +1 -0
- package/dist/resolution/binding-scope.d.ts.map +1 -0
- package/dist/resolution/binding-scope.js.map +1 -0
- package/dist/resolution/binding-select.d.ts.map +1 -0
- package/dist/{binding-select.js → resolution/binding-select.js} +17 -7
- package/dist/resolution/binding-select.js.map +1 -0
- 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/constraints.d.ts.map +1 -0
- package/dist/resolution/constraints.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/{environment.d.ts → resolution/environment.d.ts} +24 -7
- package/dist/resolution/environment.d.ts.map +1 -0
- package/dist/resolution/environment.js +126 -0
- package/dist/resolution/environment.js.map +1 -0
- package/dist/resolution/instantiation-plan.d.ts +67 -0
- package/dist/resolution/instantiation-plan.d.ts.map +1 -0
- package/dist/resolution/instantiation-plan.js +183 -0
- package/dist/resolution/instantiation-plan.js.map +1 -0
- package/dist/{lifecycle.d.ts → resolution/lifecycle.d.ts} +5 -3
- package/dist/resolution/lifecycle.d.ts.map +1 -0
- package/dist/{lifecycle.js → resolution/lifecycle.js} +23 -14
- package/dist/resolution/lifecycle.js.map +1 -0
- package/dist/resolution/resolution-path.d.ts +22 -0
- package/dist/resolution/resolution-path.d.ts.map +1 -0
- package/dist/resolution/resolution-path.js +40 -0
- package/dist/resolution/resolution-path.js.map +1 -0
- package/dist/resolution/resolve-options.d.ts.map +1 -0
- package/dist/resolution/resolve-options.js.map +1 -0
- package/dist/resolution/resolver.d.ts +40 -0
- package/dist/resolution/resolver.d.ts.map +1 -0
- package/dist/resolution/resolver.js +1108 -0
- package/dist/resolution/resolver.js.map +1 -0
- package/dist/{scope.d.ts → resolution/scope.d.ts} +8 -9
- package/dist/resolution/scope.d.ts.map +1 -0
- package/dist/resolution/scope.js +80 -0
- package/dist/resolution/scope.js.map +1 -0
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +0 -3
- package/dist/token.js.map +1 -1
- package/package.json +19 -94
- package/src/binding.ts +137 -22
- package/src/constructor-type.ts +4 -5
- package/src/container/binding-builders.ts +294 -0
- package/src/container/container.ts +825 -0
- package/src/decorators/inject.ts +15 -4
- package/src/decorators/injectable.ts +3 -3
- package/src/errors.ts +21 -0
- package/src/index.ts +15 -7
- package/src/{dependency-graph.ts → introspection/dependency-graph.ts} +1 -1
- package/src/{graph-adapters → introspection/graph-adapters}/cytoscape.ts +1 -1
- package/src/{graph-adapters → introspection/graph-adapters}/dot.ts +1 -1
- package/src/{graph-adapters → introspection/graph-adapters}/reactflow.ts +13 -2
- package/src/{inspector.ts → introspection/inspector.ts} +26 -21
- package/src/metadata/metadata-keys.ts +3 -6
- package/src/metadata/symbol-metadata-reader.ts +4 -4
- package/src/module.ts +14 -6
- package/src/registry.ts +97 -64
- package/src/resolution/activation-need.ts +81 -0
- package/src/resolution/binding-lookup-cache.ts +132 -0
- package/src/{binding-select.ts → resolution/binding-select.ts} +17 -7
- package/src/resolution/class-introspector.ts +74 -0
- package/src/resolution/diagnostics.ts +43 -0
- package/src/{environment.ts → resolution/environment.ts} +65 -35
- package/src/resolution/instantiation-plan.ts +292 -0
- package/src/{lifecycle.ts → resolution/lifecycle.ts} +26 -14
- package/src/resolution/resolution-path.ts +62 -0
- package/src/resolution/resolver.ts +1526 -0
- package/src/resolution/scope.ts +95 -0
- package/src/token.ts +0 -3
- package/dist/binding-scope.d.ts.map +0 -1
- package/dist/binding-scope.js.map +0 -1
- package/dist/binding-select.d.ts.map +0 -1
- package/dist/binding-select.js.map +0 -1
- package/dist/constraints.d.ts.map +0 -1
- package/dist/constraints.js.map +0 -1
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js +0 -853
- package/dist/container.js.map +0 -1
- package/dist/dependency-graph.d.ts.map +0 -1
- package/dist/dependency-graph.js.map +0 -1
- package/dist/environment.d.ts.map +0 -1
- package/dist/environment.js +0 -100
- package/dist/environment.js.map +0 -1
- package/dist/graph-adapters/cytoscape.d.ts.map +0 -1
- package/dist/graph-adapters/cytoscape.js.map +0 -1
- package/dist/graph-adapters/dot.d.ts +0 -6
- package/dist/graph-adapters/dot.d.ts.map +0 -1
- package/dist/graph-adapters/dot.js.map +0 -1
- package/dist/graph-adapters/reactflow.d.ts.map +0 -1
- package/dist/graph-adapters/reactflow.js.map +0 -1
- package/dist/inspector.d.ts.map +0 -1
- package/dist/inspector.js.map +0 -1
- package/dist/lifecycle.d.ts.map +0 -1
- package/dist/lifecycle.js.map +0 -1
- package/dist/resolve-options.d.ts.map +0 -1
- package/dist/resolve-options.js.map +0 -1
- package/dist/resolver.d.ts +0 -90
- package/dist/resolver.d.ts.map +0 -1
- package/dist/resolver.js +0 -1208
- package/dist/resolver.js.map +0 -1
- package/dist/scope.d.ts.map +0 -1
- package/dist/scope.js +0 -61
- package/dist/scope.js.map +0 -1
- package/src/container.ts +0 -1141
- package/src/resolver.ts +0 -1626
- package/src/scope.ts +0 -77
- /package/dist/{dependency-graph.d.ts → introspection/dependency-graph.d.ts} +0 -0
- /package/dist/{graph-adapters → introspection/graph-adapters}/cytoscape.js +0 -0
- /package/dist/{graph-adapters → introspection/graph-adapters}/dot.js +0 -0
- /package/dist/{binding-scope.d.ts → resolution/binding-scope.d.ts} +0 -0
- /package/dist/{binding-scope.js → resolution/binding-scope.js} +0 -0
- /package/dist/{binding-select.d.ts → resolution/binding-select.d.ts} +0 -0
- /package/dist/{constraints.d.ts → resolution/constraints.d.ts} +0 -0
- /package/dist/{constraints.js → resolution/constraints.js} +0 -0
- /package/dist/{resolve-options.d.ts → resolution/resolve-options.d.ts} +0 -0
- /package/dist/{resolve-options.js → resolution/resolve-options.js} +0 -0
- /package/src/{binding-scope.ts → resolution/binding-scope.ts} +0 -0
- /package/src/{constraints.ts → resolution/constraints.ts} +0 -0
- /package/src/{resolve-options.ts → resolution/resolve-options.ts} +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options-less token → terminal binding, memoized per container chain.
|
|
3
|
+
*
|
|
4
|
+
* @see `ARCHITECTURE.md` — why these caches form their own parent chain.
|
|
5
|
+
*/
|
|
6
|
+
import type { Binding } from "#/binding";
|
|
7
|
+
import type { BindingRegistry } from "#/registry";
|
|
8
|
+
import type { Token } from "#/token";
|
|
9
|
+
import type { Constructor } from "#/types";
|
|
10
|
+
/**
|
|
11
|
+
* A token's terminal binding with alias hops already folded, plus the container that owns it.
|
|
12
|
+
*
|
|
13
|
+
* @typeParam Owner - the resolver type, kept generic so this module stays free of resolver internals
|
|
14
|
+
*
|
|
15
|
+
* @since 0.5.0-canary.8
|
|
16
|
+
*/
|
|
17
|
+
export interface DefaultLookupEntry<Owner> {
|
|
18
|
+
readonly binding: Binding;
|
|
19
|
+
readonly owner: Owner;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Alias folding gives up past this many hops and defers to the full resolve loop, whose
|
|
23
|
+
* Set-based traversal detects genuine cycles exactly rather than by an arbitrary cap.
|
|
24
|
+
*
|
|
25
|
+
* @since 0.5.0-canary.8
|
|
26
|
+
*/
|
|
27
|
+
export declare const ALIAS_HOP_LIMIT = 32;
|
|
28
|
+
/**
|
|
29
|
+
* @since 0.5.0-canary.8
|
|
30
|
+
*/
|
|
31
|
+
export declare class BindingLookupCache<Owner> {
|
|
32
|
+
#private;
|
|
33
|
+
constructor(registry: BindingRegistry, owner: Owner, parent: BindingLookupCache<Owner> | undefined);
|
|
34
|
+
/** Summed registry versions of this cache's whole chain — the memo stamp. */
|
|
35
|
+
chainVersion(): number;
|
|
36
|
+
/** `null` when the token's shape needs the full selection path. */
|
|
37
|
+
defaultEntry(token: Token<unknown> | Constructor): DefaultLookupEntry<Owner> | null;
|
|
38
|
+
/** `null` when the name's shape needs the full selection path. */
|
|
39
|
+
namedEntry(token: Token<unknown> | Constructor, name: string): DefaultLookupEntry<Owner> | null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=binding-lookup-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-lookup-cache.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-lookup-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;GAEG;AACH,qBAAa,kBAAkB,CAAC,KAAK;;IAUnC,YAAY,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,SAAS,EAIjG;IAED,6EAA6E;IAC7E,YAAY,IAAI,MAAM,CAMrB;IAED,mEAAmE;IACnE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAYlF;IAED,kEAAkE;IAClE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAc9F;CA2CF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alias folding gives up past this many hops and defers to the full resolve loop, whose
|
|
3
|
+
* Set-based traversal detects genuine cycles exactly rather than by an arbitrary cap.
|
|
4
|
+
*
|
|
5
|
+
* @since 0.5.0-canary.8
|
|
6
|
+
*/
|
|
7
|
+
export const ALIAS_HOP_LIMIT = 32;
|
|
8
|
+
/**
|
|
9
|
+
* @since 0.5.0-canary.8
|
|
10
|
+
*/
|
|
11
|
+
export class BindingLookupCache {
|
|
12
|
+
#byToken = new Map();
|
|
13
|
+
#version = -1;
|
|
14
|
+
#byTokenAndName = new Map();
|
|
15
|
+
#namedVersion = -1;
|
|
16
|
+
#registry;
|
|
17
|
+
#owner;
|
|
18
|
+
#parent;
|
|
19
|
+
constructor(registry, owner, parent) {
|
|
20
|
+
this.#registry = registry;
|
|
21
|
+
this.#owner = owner;
|
|
22
|
+
this.#parent = parent;
|
|
23
|
+
}
|
|
24
|
+
/** Summed registry versions of this cache's whole chain — the memo stamp. */
|
|
25
|
+
chainVersion() {
|
|
26
|
+
let version = this.#registry.version;
|
|
27
|
+
for (let cache = this.#parent; cache !== undefined; cache = cache.#parent) {
|
|
28
|
+
version += cache.#registry.version;
|
|
29
|
+
}
|
|
30
|
+
return version;
|
|
31
|
+
}
|
|
32
|
+
/** `null` when the token's shape needs the full selection path. */
|
|
33
|
+
defaultEntry(token) {
|
|
34
|
+
const version = this.chainVersion();
|
|
35
|
+
if (version !== this.#version) {
|
|
36
|
+
this.#byToken.clear();
|
|
37
|
+
this.#version = version;
|
|
38
|
+
}
|
|
39
|
+
let entry = this.#byToken.get(token);
|
|
40
|
+
if (entry === undefined) {
|
|
41
|
+
entry = this.#foldAliases(token);
|
|
42
|
+
this.#byToken.set(token, entry);
|
|
43
|
+
}
|
|
44
|
+
return entry;
|
|
45
|
+
}
|
|
46
|
+
/** `null` when the name's shape needs the full selection path. */
|
|
47
|
+
namedEntry(token, name) {
|
|
48
|
+
const version = this.chainVersion();
|
|
49
|
+
if (version !== this.#namedVersion) {
|
|
50
|
+
this.#byTokenAndName.clear();
|
|
51
|
+
this.#namedVersion = version;
|
|
52
|
+
}
|
|
53
|
+
// ✓ TS6.0: Map.getOrInsert (ES2025)
|
|
54
|
+
const byName = this.#byTokenAndName.getOrInsert(token, new Map());
|
|
55
|
+
let entry = byName.get(name);
|
|
56
|
+
if (entry === undefined) {
|
|
57
|
+
entry = this.#findNamedInChain(token, name);
|
|
58
|
+
byName.set(name, entry);
|
|
59
|
+
}
|
|
60
|
+
return entry;
|
|
61
|
+
}
|
|
62
|
+
#foldAliases(token) {
|
|
63
|
+
let current = token;
|
|
64
|
+
for (let hop = 0; hop < ALIAS_HOP_LIMIT; hop += 1) {
|
|
65
|
+
const entry = this.#findDefaultInChain(current);
|
|
66
|
+
if (entry === null) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (entry.binding.kind !== "alias") {
|
|
70
|
+
return entry;
|
|
71
|
+
}
|
|
72
|
+
current = entry.binding.target;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
#findDefaultInChain(token) {
|
|
77
|
+
const fast = this.#registry.getFastDefault(token);
|
|
78
|
+
if (fast !== undefined) {
|
|
79
|
+
return { binding: fast, owner: this.#owner };
|
|
80
|
+
}
|
|
81
|
+
// A level with non-fast bindings (multi-slot / predicate) needs full selection — bail.
|
|
82
|
+
if (this.#registry.has(token)) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return this.#parent === undefined ? null : this.#parent.#findDefaultInChain(token);
|
|
86
|
+
}
|
|
87
|
+
#findNamedInChain(token, name) {
|
|
88
|
+
const named = this.#registry.getSimpleNamed(token, name);
|
|
89
|
+
if (named !== undefined) {
|
|
90
|
+
// Predicates need a live context; aliases carry options through the full path.
|
|
91
|
+
if (named.predicate !== undefined || named.kind === "alias") {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return { binding: named, owner: this.#owner };
|
|
95
|
+
}
|
|
96
|
+
if (this.#registry.has(token)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return this.#parent === undefined ? null : this.#parent.#findNamedInChain(token, name);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=binding-lookup-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-lookup-cache.js","sourceRoot":"","sources":["../../src/resolution/binding-lookup-cache.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACpB,QAAQ,GAAG,IAAI,GAAG,EAAkE,CAAC;IAC9F,QAAQ,GAAG,CAAC,CAAC,CAAC;IACL,eAAe,GAAG,IAAI,GAAG,EAA+E,CAAC;IAClH,aAAa,GAAG,CAAC,CAAC,CAAC;IAEV,SAAS,CAAkB;IAC3B,MAAM,CAAQ;IACd,OAAO,CAAwC;IAExD,YAAY,QAAyB,EAAE,KAAY,EAAE,MAA6C;QAChG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,YAAY;QACV,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACrC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1E,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mEAAmE;IACnE,YAAY,CAAC,KAAmC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kEAAkE;IAClE,UAAU,CAAC,KAAmC,EAAE,IAAY;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,OAAO,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC/B,CAAC;QACD,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,EAA4C,CAAC,CAAC;QAC5G,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,KAAmC;QAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,KAAmC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/C,CAAC;QACD,uFAAuF;QACvF,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB,CAAC,KAAmC,EAAE,IAAY;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,+EAA+E;YAC/E,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzF,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-scope.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAgBpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-scope.js","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,UAAU,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,SAAS,CAAC;YACR,MAAM,UAAU,GAAU,OAAO,CAAC;YAClC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-select.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAc,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,GAAG,EAAE,iBAAiB,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,GAAG,SAAS,CA4BrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,GAAG,EAAE,iBAAiB,GACrB,KAAK,CAAC,OAAO,CAAC,CAEhB"}
|
|
@@ -13,9 +13,22 @@ export function selectBinding(bindings, options, ctx, tokenDisplayName) {
|
|
|
13
13
|
if (candidates.length === 1) {
|
|
14
14
|
return candidates[0];
|
|
15
15
|
}
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
16
|
+
// Most specific wins: a single matching predicate-carrying candidate beats
|
|
17
|
+
// predicate-less ones (a predicate is a deliberate specialization of the
|
|
18
|
+
// default). Two matching predicates are genuinely ambiguous.
|
|
19
|
+
let predicatedCandidate;
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
if (candidate.predicate !== undefined) {
|
|
22
|
+
if (predicatedCandidate !== undefined) {
|
|
23
|
+
predicatedCandidate = undefined;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
predicatedCandidate = candidate;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (predicatedCandidate !== undefined) {
|
|
30
|
+
return predicatedCandidate;
|
|
31
|
+
}
|
|
19
32
|
throw new AmbiguousBindingError(tokenDisplayName, candidates.map((c) => c.id));
|
|
20
33
|
}
|
|
21
34
|
/**
|
|
@@ -96,10 +109,7 @@ function matchesSlot(binding, options) {
|
|
|
96
109
|
}
|
|
97
110
|
}
|
|
98
111
|
else if (hasRequestedTags) {
|
|
99
|
-
//
|
|
100
|
-
// But: default slot (no tags, no name) can match when options has tags if there are no tag-slotted bindings
|
|
101
|
-
// Actually per spec: resolveAll with tags only returns bindings that have those tags
|
|
102
|
-
// and resolve with tags requires exact match
|
|
112
|
+
// Requested tags require a tagged slot: an untagged binding never matches (SPEC §6.9).
|
|
103
113
|
return false;
|
|
104
114
|
}
|
|
105
115
|
return true;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-select.js","sourceRoot":"","sources":["../../src/resolution/binding-select.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGjD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgC,EAChC,OAAmC,EACnC,GAAsB,EACtB,gBAAwB;IAExB,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,6DAA6D;IAC7D,IAAI,mBAAwC,CAAC;IAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBACtC,mBAAmB,GAAG,SAAS,CAAC;gBAChC,MAAM;YACR,CAAC;YACD,mBAAmB,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,MAAM,IAAI,qBAAqB,CAC7B,gBAAgB,EAChB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,OAAmC,EACnC,GAAsB;IAEtB,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CACrB,QAAgC,EAChC,OAAmC,EACnC,GAAsB,EACtB,aAAa,GAAqB,QAAQ;IAE1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,oBAAoB,GAAmB,EAAE,CAAC;QAChD,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;oBACnC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;oBACxF,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GACf,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvG,IAAI,WAAW,IAAI,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAgB,EAAE,OAAmC;IACrF,MAAM,qBAAqB,GACzB,OAAO,KAAK,SAAS;QACrB,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,OAAmC;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,aAAa,GAAG,OAAO,EAAE,IAAI,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,EAAE,IAAI,CAAC;IACpC,MAAM,kBAAkB,GAAG,OAAO,EAAE,GAAG,CAAC;IACxC,MAAM,gBAAgB,GAAG,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,KAAK,SAAS,CAAC;IAE9F,gBAAgB;IAChB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IAChE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAC9E,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,gBAAgB,EAAE,CAAC;QAC5B,uFAAuF;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,QAAiB,EACjB,aAAoD,EACpD,kBAA0C;IAE1C,IACE,kBAAkB,KAAK,SAAS;QAChC,kBAAkB,CAAC,CAAC,CAAC,KAAK,MAAM;QAChC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB,EAAE,GAAsB;IAChE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-class decorator metadata, cached by constructor.
|
|
3
|
+
*
|
|
4
|
+
* @remarks Metadata cannot change once a class is defined, so nothing here needs version stamping.
|
|
5
|
+
*/
|
|
6
|
+
import type { Container } from "#/container/container";
|
|
7
|
+
import type { ConstructorMetadata, MetadataReader } from "#/metadata/metadata-types";
|
|
8
|
+
import type { Constructor } from "#/types";
|
|
9
|
+
/**
|
|
10
|
+
* @since 0.5.0-canary.8
|
|
11
|
+
*/
|
|
12
|
+
export declare class ClassIntrospector {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(reader: MetadataReader, container: Container);
|
|
15
|
+
constructorMetadata(target: Constructor): ConstructorMetadata | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the class has a `@postConstruct` hook, or `undefined` until {@link discoverPostConstruct}.
|
|
18
|
+
*
|
|
19
|
+
* @remarks Callers treat unknown as "assume it does", so the first activation settles it.
|
|
20
|
+
*/
|
|
21
|
+
knownPostConstruct(target: Constructor): boolean | undefined;
|
|
22
|
+
discoverPostConstruct(target: Constructor): void;
|
|
23
|
+
/** True when the class has accessor injection, which reads the container during construction. */
|
|
24
|
+
needsActiveContainer(target: Constructor): boolean;
|
|
25
|
+
instantiate(target: Constructor, deps: Array<unknown>): unknown;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=class-introspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-introspector.d.ts","sourceRoot":"","sources":["../../src/resolution/class-introspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;GAEG;AACH,qBAAa,iBAAiB;;IAS5B,YAAY,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAGvD;IAED,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS,CAQxE;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAE3D;IAED,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAM/C;IAED,iGAAiG;IACjG,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAOjD;IAED,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAM9D;CACF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-class decorator metadata, cached by constructor.
|
|
3
|
+
*
|
|
4
|
+
* @remarks Metadata cannot change once a class is defined, so nothing here needs version stamping.
|
|
5
|
+
*/
|
|
6
|
+
import { runWithContainer } from "#/resolution/environment";
|
|
7
|
+
/**
|
|
8
|
+
* @since 0.5.0-canary.8
|
|
9
|
+
*/
|
|
10
|
+
export class ClassIntrospector {
|
|
11
|
+
// Unallocated until the container resolves its first class binding — a container bound entirely
|
|
12
|
+
// to constants, factories or aliases never introspects one.
|
|
13
|
+
#constructorMetadata;
|
|
14
|
+
#hasPostConstruct;
|
|
15
|
+
#needsActiveContainer;
|
|
16
|
+
#reader;
|
|
17
|
+
#container;
|
|
18
|
+
constructor(reader, container) {
|
|
19
|
+
this.#reader = reader;
|
|
20
|
+
this.#container = container;
|
|
21
|
+
}
|
|
22
|
+
constructorMetadata(target) {
|
|
23
|
+
const cached = this.#constructorMetadata?.get(target);
|
|
24
|
+
if (cached !== undefined) {
|
|
25
|
+
return cached === null ? undefined : cached;
|
|
26
|
+
}
|
|
27
|
+
const metadata = this.#reader.getConstructorMetadata(target);
|
|
28
|
+
(this.#constructorMetadata ??= new WeakMap()).set(target, metadata ?? null);
|
|
29
|
+
return metadata;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether the class has a `@postConstruct` hook, or `undefined` until {@link discoverPostConstruct}.
|
|
33
|
+
*
|
|
34
|
+
* @remarks Callers treat unknown as "assume it does", so the first activation settles it.
|
|
35
|
+
*/
|
|
36
|
+
knownPostConstruct(target) {
|
|
37
|
+
return this.#hasPostConstruct?.get(target);
|
|
38
|
+
}
|
|
39
|
+
discoverPostConstruct(target) {
|
|
40
|
+
const lifecycle = this.#reader.getLifecycleMetadata(target);
|
|
41
|
+
(this.#hasPostConstruct ??= new WeakMap()).set(target, lifecycle !== undefined && lifecycle.postConstruct !== undefined && lifecycle.postConstruct.length > 0);
|
|
42
|
+
}
|
|
43
|
+
/** True when the class has accessor injection, which reads the container during construction. */
|
|
44
|
+
needsActiveContainer(target) {
|
|
45
|
+
let needsActiveContainer = this.#needsActiveContainer?.get(target);
|
|
46
|
+
if (needsActiveContainer === undefined) {
|
|
47
|
+
needsActiveContainer = (this.#reader.getAccessorMetadata?.(target)?.length ?? 0) > 0;
|
|
48
|
+
(this.#needsActiveContainer ??= new WeakMap()).set(target, needsActiveContainer);
|
|
49
|
+
}
|
|
50
|
+
return needsActiveContainer;
|
|
51
|
+
}
|
|
52
|
+
instantiate(target, deps) {
|
|
53
|
+
const invokable = target;
|
|
54
|
+
if (!this.needsActiveContainer(target)) {
|
|
55
|
+
return new invokable(...deps);
|
|
56
|
+
}
|
|
57
|
+
return runWithContainer(this.#container, () => new invokable(...deps));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=class-introspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-introspector.js","sourceRoot":"","sources":["../../src/resolution/class-introspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B,gGAAgG;IAChG,4DAA4D;IAC5D,oBAAoB,CAA+D;IACnF,iBAAiB,CAA4C;IAC7D,qBAAqB,CAA4C;IACxD,OAAO,CAAiB;IACxB,UAAU,CAAY;IAE/B,YAAY,MAAsB,EAAE,SAAoB;QACtD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,mBAAmB,CAAC,MAAmB;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC,IAAI,CAAC,oBAAoB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC;QAC5E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAmB;QACpC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB,CAAC,MAAmB;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,CAC5C,MAAM,EACN,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CACvG,CAAC;IACJ,CAAC;IAED,iGAAiG;IACjG,oBAAoB,CAAC,MAAmB;QACtC,IAAI,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,oBAAoB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrF,CAAC,IAAI,CAAC,qBAAqB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,MAAmB,EAAE,IAAoB;QACnD,MAAM,SAAS,GAAG,MAA+B,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/resolution/constraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM1E;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAInH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAIrH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAClC,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAClC,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAE/F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAEpG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAI/G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAKpH;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAWnD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,OAAO,CAQnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/resolution/constraints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam letting tests assert that an optimization is *active*, not merely that the result
|
|
3
|
+
* is correct.
|
|
4
|
+
*
|
|
5
|
+
* @remarks Timing belongs in the benchmark, which needs a quiet machine and twenty minutes; these
|
|
6
|
+
* are structural counts, so CI can hold the invariants that make the benchmark fast. Reached
|
|
7
|
+
* through a symbol from a module the package does not publish, so it is not public API.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Key for the diagnostics accessor on a container.
|
|
11
|
+
*
|
|
12
|
+
* @remarks A symbol rather than a method name, so it cannot collide with the public surface or be
|
|
13
|
+
* reached by anyone who has not imported this module.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.5.0-canary.8
|
|
16
|
+
*/
|
|
17
|
+
export declare const RESOLUTION_DIAGNOSTICS: unique symbol;
|
|
18
|
+
/**
|
|
19
|
+
* Structural facts about a container's resolution caches.
|
|
20
|
+
*
|
|
21
|
+
* @since 0.5.0-canary.8
|
|
22
|
+
*/
|
|
23
|
+
export interface ResolutionDiagnostics {
|
|
24
|
+
/** Bindings with a compiled instantiation plan. */
|
|
25
|
+
readonly compiledPlanCount: number;
|
|
26
|
+
/** Contexts held by the depth-indexed sync pool. */
|
|
27
|
+
readonly syncContextPoolSize: number;
|
|
28
|
+
/** Contexts returned to the async chain pool and available for reuse. */
|
|
29
|
+
readonly asyncContextPoolSize: number;
|
|
30
|
+
/** Deferred collaborators this container has had to build. */
|
|
31
|
+
readonly builtSubsystems: ReadonlyArray<string>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A container that can report on its resolution caches.
|
|
35
|
+
*
|
|
36
|
+
* @since 0.5.0-canary.8
|
|
37
|
+
*/
|
|
38
|
+
export interface DiagnosableContainer {
|
|
39
|
+
[RESOLUTION_DIAGNOSTICS](): ResolutionDiagnostics;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/resolution/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,oDAAoD;IACpD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam letting tests assert that an optimization is *active*, not merely that the result
|
|
3
|
+
* is correct.
|
|
4
|
+
*
|
|
5
|
+
* @remarks Timing belongs in the benchmark, which needs a quiet machine and twenty minutes; these
|
|
6
|
+
* are structural counts, so CI can hold the invariants that make the benchmark fast. Reached
|
|
7
|
+
* through a symbol from a module the package does not publish, so it is not public API.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Key for the diagnostics accessor on a container.
|
|
11
|
+
*
|
|
12
|
+
* @remarks A symbol rather than a method name, so it cannot collide with the public surface or be
|
|
13
|
+
* reached by anyone who has not imported this module.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.5.0-canary.8
|
|
16
|
+
*/
|
|
17
|
+
export const RESOLUTION_DIAGNOSTICS = Symbol("di:resolution-diagnostics");
|
|
18
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/resolution/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB,MAAM,CAAC,2BAA2B,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Container } from "#/container";
|
|
1
|
+
import type { Container } from "#/container/container";
|
|
2
2
|
import type { Token } from "#/token";
|
|
3
3
|
import type { BindingIdentifier, BindingKind, BindingScope, ConstraintContext, Constructor, ResolutionFrame, ResolutionContext, ResolveOptions } from "#/types";
|
|
4
4
|
/**
|
|
@@ -15,7 +15,7 @@ export declare function getActiveContainer(): Container | undefined;
|
|
|
15
15
|
export interface ResolverCallbacks {
|
|
16
16
|
resolveFromContext<const Value>(token: Token<Value> | Constructor<Value>, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value;
|
|
17
17
|
resolve<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value;
|
|
18
|
-
resolveAsyncFromContext<const Value>(token: Token<Value> | Constructor<Value>, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame
|
|
18
|
+
resolveAsyncFromContext<const Value>(token: Token<Value> | Constructor<Value>, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, callerContext?: DefaultResolutionContext): Promise<Value>;
|
|
19
19
|
resolveAsync<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Promise<Value>;
|
|
20
20
|
resolveOptional<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value | undefined;
|
|
21
21
|
resolveOptionalAsync<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Promise<Value | undefined>;
|
|
@@ -26,12 +26,29 @@ export interface ResolverCallbacks {
|
|
|
26
26
|
* @since 0.3.16-canary.0
|
|
27
27
|
*/
|
|
28
28
|
export declare class DefaultResolutionContext implements ResolutionContext {
|
|
29
|
-
private
|
|
30
|
-
private _resolutionPath;
|
|
31
|
-
private _resolutionStack;
|
|
32
|
-
private _currentOptions;
|
|
29
|
+
#private;
|
|
33
30
|
constructor(resolver: ResolverCallbacks, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, currentOptions: ResolveOptions | undefined);
|
|
34
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The unwind callback shared by every level of the async chain this context serves.
|
|
33
|
+
*
|
|
34
|
+
* @remarks A plain field, not a lazy accessor — a getter taking a factory would allocate that
|
|
35
|
+
* factory on every level, which is the allocation this exists to avoid.
|
|
36
|
+
*/
|
|
37
|
+
chainSettle: (() => void) | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* How many levels of the async chain are still in flight on this context.
|
|
40
|
+
*
|
|
41
|
+
* @remarks The chain's first level acquires the context and every level increments; the last
|
|
42
|
+
* one to settle returns it to the resolver's pool. Counting here rather than on the resolver
|
|
43
|
+
* is what lets two concurrent chains run without a shared counter to get wrong.
|
|
44
|
+
*/
|
|
45
|
+
chainLevels: number;
|
|
46
|
+
/**
|
|
47
|
+
* The resolver this context speaks to — an inner async level checks it before reusing this.
|
|
48
|
+
*
|
|
49
|
+
* @remarks A field, not a method, because the check runs on every hop of every chain.
|
|
50
|
+
*/
|
|
51
|
+
owner: ResolverCallbacks;
|
|
35
52
|
get graph(): ConstraintContext;
|
|
36
53
|
reset(resolver: ResolverCallbacks, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, currentOptions: ResolveOptions | undefined): void;
|
|
37
54
|
resolve<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// ── Active container ──────────────────────────────────────────────────────────
|
|
2
|
+
let activeContainer;
|
|
3
|
+
/**
|
|
4
|
+
* @since 0.3.16-canary.0
|
|
5
|
+
*/
|
|
6
|
+
export function runWithContainer(container, fn) {
|
|
7
|
+
const prev = activeContainer;
|
|
8
|
+
activeContainer = container;
|
|
9
|
+
try {
|
|
10
|
+
return fn();
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
activeContainer = prev;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @since 0.3.16-canary.0
|
|
18
|
+
*/
|
|
19
|
+
export function getActiveContainer() {
|
|
20
|
+
return activeContainer;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @since 0.3.16-canary.0
|
|
24
|
+
*/
|
|
25
|
+
export class DefaultResolutionContext {
|
|
26
|
+
#resolver;
|
|
27
|
+
#resolutionPath;
|
|
28
|
+
#resolutionStack;
|
|
29
|
+
#currentOptions;
|
|
30
|
+
constructor(resolver, resolutionPath, resolutionStack, currentOptions) {
|
|
31
|
+
this.#resolver = resolver;
|
|
32
|
+
this.owner = resolver;
|
|
33
|
+
this.#resolutionPath = resolutionPath;
|
|
34
|
+
this.#resolutionStack = resolutionStack;
|
|
35
|
+
this.#currentOptions = currentOptions;
|
|
36
|
+
}
|
|
37
|
+
#graph;
|
|
38
|
+
/**
|
|
39
|
+
* The unwind callback shared by every level of the async chain this context serves.
|
|
40
|
+
*
|
|
41
|
+
* @remarks A plain field, not a lazy accessor — a getter taking a factory would allocate that
|
|
42
|
+
* factory on every level, which is the allocation this exists to avoid.
|
|
43
|
+
*/
|
|
44
|
+
chainSettle;
|
|
45
|
+
/**
|
|
46
|
+
* How many levels of the async chain are still in flight on this context.
|
|
47
|
+
*
|
|
48
|
+
* @remarks The chain's first level acquires the context and every level increments; the last
|
|
49
|
+
* one to settle returns it to the resolver's pool. Counting here rather than on the resolver
|
|
50
|
+
* is what lets two concurrent chains run without a shared counter to get wrong.
|
|
51
|
+
*/
|
|
52
|
+
chainLevels = 0;
|
|
53
|
+
/**
|
|
54
|
+
* The resolver this context speaks to — an inner async level checks it before reusing this.
|
|
55
|
+
*
|
|
56
|
+
* @remarks A field, not a method, because the check runs on every hop of every chain.
|
|
57
|
+
*/
|
|
58
|
+
owner;
|
|
59
|
+
get graph() {
|
|
60
|
+
if (this.#graph === undefined) {
|
|
61
|
+
this.#graph = new DefaultConstraintContext(this.#resolutionPath, this.#resolutionStack, this.#currentOptions);
|
|
62
|
+
}
|
|
63
|
+
return this.#graph;
|
|
64
|
+
}
|
|
65
|
+
reset(resolver, resolutionPath, resolutionStack, currentOptions) {
|
|
66
|
+
this.#resolver = resolver;
|
|
67
|
+
this.owner = resolver;
|
|
68
|
+
this.#resolutionPath = resolutionPath;
|
|
69
|
+
this.#resolutionStack = resolutionStack;
|
|
70
|
+
this.#currentOptions = currentOptions;
|
|
71
|
+
this.#graph = undefined;
|
|
72
|
+
this.chainSettle = undefined;
|
|
73
|
+
this.chainLevels = 0;
|
|
74
|
+
}
|
|
75
|
+
resolve(token, options) {
|
|
76
|
+
if (options === undefined) {
|
|
77
|
+
return this.#resolver.resolveFromContext(token, this.#resolutionPath, this.#resolutionStack);
|
|
78
|
+
}
|
|
79
|
+
return this.#resolver.resolve(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
80
|
+
}
|
|
81
|
+
resolveAsync(token, options) {
|
|
82
|
+
if (options === undefined) {
|
|
83
|
+
// Hand the callee this context: an inner level of the same chain reuses it as-is.
|
|
84
|
+
return this.#resolver.resolveAsyncFromContext(token, this.#resolutionPath, this.#resolutionStack, this);
|
|
85
|
+
}
|
|
86
|
+
return this.#resolver.resolveAsync(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
87
|
+
}
|
|
88
|
+
resolveOptional(token, options) {
|
|
89
|
+
return this.#resolver.resolveOptional(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
90
|
+
}
|
|
91
|
+
resolveOptionalAsync(token, options) {
|
|
92
|
+
return this.#resolver.resolveOptionalAsync(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
93
|
+
}
|
|
94
|
+
resolveAll(token, options) {
|
|
95
|
+
return this.#resolver.resolveAll(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
96
|
+
}
|
|
97
|
+
resolveAllAsync(token, options) {
|
|
98
|
+
return this.#resolver.resolveAllAsync(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
class DefaultConstraintContext {
|
|
102
|
+
resolutionPath;
|
|
103
|
+
resolutionStack;
|
|
104
|
+
parent;
|
|
105
|
+
currentResolveOptions;
|
|
106
|
+
constructor(resolutionPath, resolutionStack, currentResolveOptions) {
|
|
107
|
+
this.resolutionPath = resolutionPath;
|
|
108
|
+
this.resolutionStack = resolutionStack;
|
|
109
|
+
this.parent = resolutionStack.at(-1);
|
|
110
|
+
this.currentResolveOptions = currentResolveOptions;
|
|
111
|
+
}
|
|
112
|
+
#ancestors;
|
|
113
|
+
get ancestors() {
|
|
114
|
+
if (this.#ancestors === undefined) {
|
|
115
|
+
this.#ancestors = this.resolutionStack.length > 1 ? this.resolutionStack.slice(0, -1) : [];
|
|
116
|
+
}
|
|
117
|
+
return this.#ancestors;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @since 0.3.16-canary.0
|
|
122
|
+
*/
|
|
123
|
+
export function buildResolutionFrame(tokenName, scope, bindingId, kind, slot) {
|
|
124
|
+
return { tokenName, scope, bindingId, kind, slot };
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"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"}
|