@codefast/di 0.5.0-canary.7 → 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 +68 -0
- package/README.md +3 -1
- package/dist/binding.d.ts +47 -5
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +44 -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 +140 -191
- package/dist/container/binding-builders.js.map +1 -1
- package/dist/container/container.d.ts.map +1 -1
- package/dist/container/container.js +75 -92
- 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 +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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/introspection/inspector.js +1 -1
- 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 +35 -45
- 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-select.js +1 -4
- 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 +22 -1
- package/dist/resolution/environment.d.ts.map +1 -1
- package/dist/resolution/environment.js +27 -1
- 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 +68 -48
- 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 +16 -11
- package/dist/resolution/lifecycle.js.map +1 -1
- package/dist/resolution/resolution-path.d.ts +4 -13
- package/dist/resolution/resolution-path.d.ts.map +1 -1
- package/dist/resolution/resolution-path.js +3 -16
- package/dist/resolution/resolution-path.js.map +1 -1
- package/dist/resolution/resolver.d.ts +7 -2
- package/dist/resolution/resolver.d.ts.map +1 -1
- package/dist/resolution/resolver.js +116 -328
- package/dist/resolution/resolver.js.map +1 -1
- package/dist/resolution/scope.d.ts +7 -15
- package/dist/resolution/scope.d.ts.map +1 -1
- package/dist/resolution/scope.js +48 -44
- package/dist/resolution/scope.js.map +1 -1
- package/package.json +7 -97
- package/src/binding.ts +104 -5
- package/src/constructor-type.ts +4 -5
- package/src/container/binding-builders.ts +180 -283
- package/src/container/container.ts +90 -103
- package/src/decorators/inject.ts +3 -5
- package/src/errors.ts +21 -0
- package/src/index.ts +1 -0
- package/src/introspection/inspector.ts +1 -1
- package/src/metadata/metadata-keys.ts +3 -6
- package/src/registry.ts +38 -59
- package/src/resolution/activation-need.ts +81 -0
- package/src/resolution/binding-lookup-cache.ts +132 -0
- package/src/resolution/binding-select.ts +1 -4
- package/src/resolution/class-introspector.ts +74 -0
- package/src/resolution/diagnostics.ts +43 -0
- package/src/resolution/environment.ts +31 -1
- package/src/resolution/instantiation-plan.ts +113 -61
- package/src/resolution/lifecycle.ts +16 -11
- package/src/resolution/resolution-path.ts +5 -20
- package/src/resolution/resolver.ts +142 -371
- package/src/resolution/scope.ts +50 -49
|
@@ -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,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"}
|
|
@@ -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>;
|
|
@@ -28,6 +28,27 @@ export interface ResolverCallbacks {
|
|
|
28
28
|
export declare class DefaultResolutionContext implements ResolutionContext {
|
|
29
29
|
#private;
|
|
30
30
|
constructor(resolver: ResolverCallbacks, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, currentOptions: ResolveOptions | undefined);
|
|
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;
|
|
31
52
|
get graph(): ConstraintContext;
|
|
32
53
|
reset(resolver: ResolverCallbacks, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, currentOptions: ResolveOptions | undefined): void;
|
|
33
54
|
resolve<const Value>(token: Token<Value> | Constructor<Value>, options?: ResolveOptions): Value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,MAAM,GAAG,MAAM,CAQvF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,GAAG,SAAS,CAE1D;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,KAAK,CAAC;IACT,OAAO,CAAC,KAAK,CAAC,KAAK,EACjB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,KAAK,CAAC;IACT,uBAAuB,CAAC,KAAK,CAAC,KAAK,EACjC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,11 +29,33 @@ export class DefaultResolutionContext {
|
|
|
29
29
|
#currentOptions;
|
|
30
30
|
constructor(resolver, resolutionPath, resolutionStack, currentOptions) {
|
|
31
31
|
this.#resolver = resolver;
|
|
32
|
+
this.owner = resolver;
|
|
32
33
|
this.#resolutionPath = resolutionPath;
|
|
33
34
|
this.#resolutionStack = resolutionStack;
|
|
34
35
|
this.#currentOptions = currentOptions;
|
|
35
36
|
}
|
|
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;
|
|
37
59
|
get graph() {
|
|
38
60
|
if (this.#graph === undefined) {
|
|
39
61
|
this.#graph = new DefaultConstraintContext(this.#resolutionPath, this.#resolutionStack, this.#currentOptions);
|
|
@@ -42,10 +64,13 @@ export class DefaultResolutionContext {
|
|
|
42
64
|
}
|
|
43
65
|
reset(resolver, resolutionPath, resolutionStack, currentOptions) {
|
|
44
66
|
this.#resolver = resolver;
|
|
67
|
+
this.owner = resolver;
|
|
45
68
|
this.#resolutionPath = resolutionPath;
|
|
46
69
|
this.#resolutionStack = resolutionStack;
|
|
47
70
|
this.#currentOptions = currentOptions;
|
|
48
71
|
this.#graph = undefined;
|
|
72
|
+
this.chainSettle = undefined;
|
|
73
|
+
this.chainLevels = 0;
|
|
49
74
|
}
|
|
50
75
|
resolve(token, options) {
|
|
51
76
|
if (options === undefined) {
|
|
@@ -55,7 +80,8 @@ export class DefaultResolutionContext {
|
|
|
55
80
|
}
|
|
56
81
|
resolveAsync(token, options) {
|
|
57
82
|
if (options === undefined) {
|
|
58
|
-
|
|
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);
|
|
59
85
|
}
|
|
60
86
|
return this.#resolver.resolveAsync(token, options, this.#resolutionPath, this.#resolutionStack);
|
|
61
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"AAaA,iFAAiF;AAEjF,IAAI,eAAsC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAS,SAAoB,EAAE,EAAgB;IAC7E,MAAM,IAAI,GAAG,eAAe,CAAC;IAC7B,eAAe,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/resolution/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* class or resolved-factory binding whose dependency subgraph is pure static
|
|
4
|
-
* (class/constant/cached-singleton deps, no activation hooks or postConstruct)
|
|
5
|
-
* compiles once into a nested-constructor/factory closure, cycle-checked at
|
|
6
|
-
* compile time.
|
|
2
|
+
* Compiles a transient class or resolved-factory binding into a nested-constructor closure.
|
|
7
3
|
*
|
|
8
|
-
*
|
|
9
|
-
* closures it returns ARE the hot path and touch nothing but their captures.
|
|
10
|
-
* Anything dynamic refuses to compile so the runtime cycle guard stays in
|
|
11
|
-
* charge and error semantics never change.
|
|
4
|
+
* @see `ARCHITECTURE.md` — the escape contract every dependency the compiler cannot inline must honour.
|
|
12
5
|
*/
|
|
13
6
|
import type { Binding } from "#/binding";
|
|
14
7
|
import type { ConstructorMetadata } from "#/metadata/metadata-types";
|
|
15
|
-
import type { ScopeManager } from "#/resolution/scope";
|
|
16
8
|
import type { Token } from "#/token";
|
|
17
|
-
import type { Constructor } from "#/types";
|
|
9
|
+
import type { Constructor, ResolutionFrame, ResolveOptions } from "#/types";
|
|
18
10
|
/**
|
|
19
11
|
* Compilation asked to retry later (class lifecycle metadata not discovered yet).
|
|
20
12
|
*
|
|
@@ -29,13 +21,12 @@ export declare const PLAN_RETRY: unique symbol;
|
|
|
29
21
|
*/
|
|
30
22
|
export type InstantiationPlanCompileResult = (() => unknown) | null | typeof PLAN_RETRY;
|
|
31
23
|
/**
|
|
32
|
-
* A dependency's terminal binding
|
|
24
|
+
* A dependency's terminal binding — all a compiled thunk needs.
|
|
33
25
|
*
|
|
34
26
|
* @since 0.5.0-canary.7
|
|
35
27
|
*/
|
|
36
28
|
export interface InstantiationPlanDependencyEntry {
|
|
37
29
|
readonly binding: Binding;
|
|
38
|
-
readonly ownerScope: ScopeManager;
|
|
39
30
|
}
|
|
40
31
|
/**
|
|
41
32
|
* Everything the compiler needs from its resolver, expressed as behavior so the
|
|
@@ -51,9 +42,18 @@ export interface InstantiationPlanHost {
|
|
|
51
42
|
getConstructorMetadata(target: Constructor): ConstructorMetadata | undefined;
|
|
52
43
|
/** Options-less lookup with alias hops folded; `null` when the fast lane can't answer. */
|
|
53
44
|
lookupDependencyEntry(token: Token<unknown> | Constructor): InstantiationPlanDependencyEntry | null;
|
|
54
|
-
/**
|
|
55
|
-
|
|
45
|
+
/** The frame the interpreted path pushes for this binding, so escapes can replay it. */
|
|
46
|
+
getResolutionFrame(binding: Binding): ResolutionFrame;
|
|
47
|
+
/** Runtime resolve for an escaped dependency, seeded with the ancestors above it. */
|
|
48
|
+
resolveEscaped(token: Token<unknown> | Constructor, options: ResolveOptions | undefined, arity: EscapeArity, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): unknown;
|
|
56
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Which resolve an escaped dependency replays — mirrors how the interpreted path dispatches
|
|
52
|
+
* a constructor param.
|
|
53
|
+
*
|
|
54
|
+
* @since 0.5.0-canary.8
|
|
55
|
+
*/
|
|
56
|
+
export type EscapeArity = "all" | "optional" | "single";
|
|
57
57
|
/**
|
|
58
58
|
* @since 0.3.16-canary.1
|
|
59
59
|
*/
|
|
@@ -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;AAKzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAgB,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM1F;;;;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
158
|
const scope = binding.scope ?? "transient";
|
|
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;;IAO3B,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,CAKjH;IAED,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAMpF;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,CAEvD;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,CAmChB;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,CA0CP;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,CAqCf;IAED,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CAsC/G;IACD,gFAAgF;IAChF,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
|