@nexus-ioc/core 0.6.1 → 0.7.0
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/README.md +731 -1
- package/dist/cjs/browser.js +2 -2
- package/dist/cjs/browser.js.map +1 -1
- package/dist/cjs/core/child-module.js +32 -0
- package/dist/cjs/core/child-module.js.map +1 -0
- package/dist/cjs/core/graph/analyze-lazy-module.js +54 -0
- package/dist/cjs/core/graph/analyze-lazy-module.js.map +1 -0
- package/dist/cjs/core/graph/analyze-module.js +11 -0
- package/dist/cjs/core/graph/analyze-module.js.map +1 -1
- package/dist/cjs/core/graph/module-graph.js +685 -70
- package/dist/cjs/core/graph/module-graph.js.map +1 -1
- package/dist/cjs/core/injection/injection-context.js +29 -0
- package/dist/cjs/core/injection/injection-context.js.map +1 -0
- package/dist/cjs/core/lazy-module-loader.js +41 -0
- package/dist/cjs/core/lazy-module-loader.js.map +1 -0
- package/dist/cjs/core/module-ref.js +84 -0
- package/dist/cjs/core/module-ref.js.map +1 -0
- package/dist/cjs/core/modules/container.js +305 -17
- package/dist/cjs/core/modules/container.js.map +1 -1
- package/dist/cjs/core/modules/module-container-factory.js +2 -2
- package/dist/cjs/core/modules/module-container-factory.js.map +1 -1
- package/dist/cjs/core/modules/module-container.js +54 -16
- package/dist/cjs/core/modules/module-container.js.map +1 -1
- package/dist/cjs/core/modules/module-token-factory.js.map +1 -1
- package/dist/cjs/core/modules/modules-container.js +43 -3
- package/dist/cjs/core/modules/modules-container.js.map +1 -1
- package/dist/cjs/core/nexus-applications.browser.js +57 -15
- package/dist/cjs/core/nexus-applications.browser.js.map +1 -1
- package/dist/cjs/core/nexus-applications.js +440 -82
- package/dist/cjs/core/nexus-applications.js.map +1 -1
- package/dist/cjs/core/nexus-applications.server.js +57 -15
- package/dist/cjs/core/nexus-applications.server.js.map +1 -1
- package/dist/cjs/core/resolver/providers-container.js.map +1 -1
- package/dist/cjs/core/resolver/resolution-context.js +62 -0
- package/dist/cjs/core/resolver/resolution-context.js.map +1 -0
- package/dist/cjs/core/resolver/resolver.js +523 -99
- package/dist/cjs/core/resolver/resolver.js.map +1 -1
- package/dist/cjs/decorators/inject.js +6 -3
- package/dist/cjs/decorators/inject.js.map +1 -1
- package/dist/cjs/decorators/injectable.js +0 -7
- package/dist/cjs/decorators/injectable.js.map +1 -1
- package/dist/cjs/decorators/{nsModule.js → module.js} +9 -7
- package/dist/cjs/decorators/module.js.map +1 -0
- package/dist/cjs/errors/bootstrap-error.js +47 -0
- package/dist/cjs/errors/bootstrap-error.js.map +1 -0
- package/dist/cjs/errors/child-errors.js +21 -0
- package/dist/cjs/errors/child-errors.js.map +1 -0
- package/dist/cjs/errors/index.js +24 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/errors/injection-errors.js +25 -0
- package/dist/cjs/errors/injection-errors.js.map +1 -0
- package/dist/cjs/errors/lazy-module-errors.js +26 -0
- package/dist/cjs/errors/lazy-module-errors.js.map +1 -0
- package/dist/cjs/errors/provider-errors.js +95 -0
- package/dist/cjs/errors/provider-errors.js.map +1 -0
- package/dist/cjs/index.js +30 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/index.js +1 -0
- package/dist/cjs/interfaces/index.js.map +1 -1
- package/dist/cjs/interfaces/modules/index.js +1 -0
- package/dist/cjs/interfaces/modules/index.js.map +1 -1
- package/dist/cjs/interfaces/modules/module-graph.interface.js +2 -0
- package/dist/cjs/interfaces/modules/module-graph.interface.js.map +1 -1
- package/dist/cjs/interfaces/modules/parent-link.interface.js +3 -0
- package/dist/cjs/interfaces/modules/parent-link.interface.js.map +1 -0
- package/dist/cjs/interfaces/on-module-destroy.interface.js +3 -0
- package/dist/cjs/interfaces/on-module-destroy.interface.js.map +1 -0
- package/dist/cjs/interfaces/scope.interface.js +2 -55
- package/dist/cjs/interfaces/scope.interface.js.map +1 -1
- package/dist/cjs/interfaces/validate-module-keys.js +2 -0
- package/dist/cjs/interfaces/validate-module-keys.js.map +1 -1
- package/dist/cjs/internal.js +9 -0
- package/dist/cjs/internal.js.map +1 -0
- package/dist/cjs/server.js +2 -2
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/utils/forward-ref.js +14 -0
- package/dist/cjs/utils/forward-ref.js.map +1 -0
- package/dist/cjs/utils/helpers.js +14 -4
- package/dist/cjs/utils/helpers.js.map +1 -1
- package/dist/cjs/utils/lazy-module.js +33 -0
- package/dist/cjs/utils/lazy-module.js.map +1 -0
- package/dist/esm/browser.js +1 -1
- package/dist/esm/browser.js.map +1 -1
- package/dist/esm/core/child-module.js +29 -0
- package/dist/esm/core/child-module.js.map +1 -0
- package/dist/esm/core/graph/analyze-lazy-module.js +50 -0
- package/dist/esm/core/graph/analyze-lazy-module.js.map +1 -0
- package/dist/esm/core/graph/analyze-module.js +11 -0
- package/dist/esm/core/graph/analyze-module.js.map +1 -1
- package/dist/esm/core/graph/module-graph.js +686 -71
- package/dist/esm/core/graph/module-graph.js.map +1 -1
- package/dist/esm/core/injection/injection-context.js +25 -0
- package/dist/esm/core/injection/injection-context.js.map +1 -0
- package/dist/esm/core/lazy-module-loader.js +36 -0
- package/dist/esm/core/lazy-module-loader.js.map +1 -0
- package/dist/esm/core/module-ref.js +80 -0
- package/dist/esm/core/module-ref.js.map +1 -0
- package/dist/esm/core/modules/container.js +305 -17
- package/dist/esm/core/modules/container.js.map +1 -1
- package/dist/esm/core/modules/module-container-factory.js +2 -2
- package/dist/esm/core/modules/module-container-factory.js.map +1 -1
- package/dist/esm/core/modules/module-container.js +55 -17
- package/dist/esm/core/modules/module-container.js.map +1 -1
- package/dist/esm/core/modules/module-token-factory.js.map +1 -1
- package/dist/esm/core/modules/modules-container.js +43 -3
- package/dist/esm/core/modules/modules-container.js.map +1 -1
- package/dist/esm/core/nexus-applications.browser.js +55 -13
- package/dist/esm/core/nexus-applications.browser.js.map +1 -1
- package/dist/esm/core/nexus-applications.js +439 -81
- package/dist/esm/core/nexus-applications.js.map +1 -1
- package/dist/esm/core/nexus-applications.server.js +55 -13
- package/dist/esm/core/nexus-applications.server.js.map +1 -1
- package/dist/esm/core/resolver/providers-container.js.map +1 -1
- package/dist/esm/core/resolver/resolution-context.js +58 -0
- package/dist/esm/core/resolver/resolution-context.js.map +1 -0
- package/dist/esm/core/resolver/resolver.js +524 -100
- package/dist/esm/core/resolver/resolver.js.map +1 -1
- package/dist/esm/decorators/inject.js +6 -3
- package/dist/esm/decorators/inject.js.map +1 -1
- package/dist/esm/decorators/injectable.js +0 -7
- package/dist/esm/decorators/injectable.js.map +1 -1
- package/dist/esm/decorators/{nsModule.js → module.js} +8 -6
- package/dist/esm/decorators/module.js.map +1 -0
- package/dist/esm/errors/bootstrap-error.js +42 -0
- package/dist/esm/errors/bootstrap-error.js.map +1 -0
- package/dist/esm/errors/child-errors.js +17 -0
- package/dist/esm/errors/child-errors.js.map +1 -0
- package/dist/esm/errors/index.js +6 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/errors/injection-errors.js +20 -0
- package/dist/esm/errors/injection-errors.js.map +1 -0
- package/dist/esm/errors/lazy-module-errors.js +21 -0
- package/dist/esm/errors/lazy-module-errors.js.map +1 -0
- package/dist/esm/errors/provider-errors.js +84 -0
- package/dist/esm/errors/provider-errors.js.map +1 -0
- package/dist/esm/index.js +9 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces/index.js +1 -0
- package/dist/esm/interfaces/index.js.map +1 -1
- package/dist/esm/interfaces/modules/index.js +1 -0
- package/dist/esm/interfaces/modules/index.js.map +1 -1
- package/dist/esm/interfaces/modules/module-graph.interface.js +2 -0
- package/dist/esm/interfaces/modules/module-graph.interface.js.map +1 -1
- package/dist/esm/interfaces/modules/parent-link.interface.js +2 -0
- package/dist/esm/interfaces/modules/parent-link.interface.js.map +1 -0
- package/dist/esm/interfaces/on-module-destroy.interface.js +2 -0
- package/dist/esm/interfaces/on-module-destroy.interface.js.map +1 -0
- package/dist/esm/interfaces/scope.interface.js +1 -55
- package/dist/esm/interfaces/scope.interface.js.map +1 -1
- package/dist/esm/interfaces/validate-module-keys.js +2 -0
- package/dist/esm/interfaces/validate-module-keys.js.map +1 -1
- package/dist/esm/internal.js +3 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/server.js +1 -1
- package/dist/esm/server.js.map +1 -1
- package/dist/esm/utils/forward-ref.js +10 -0
- package/dist/esm/utils/forward-ref.js.map +1 -0
- package/dist/esm/utils/helpers.js +14 -4
- package/dist/esm/utils/helpers.js.map +1 -1
- package/dist/esm/utils/lazy-module.js +29 -0
- package/dist/esm/utils/lazy-module.js.map +1 -0
- package/dist/types/browser.d.ts +1 -1
- package/dist/types/core/child-module.d.ts +8 -0
- package/dist/types/core/graph/analyze-lazy-module.d.ts +28 -0
- package/dist/types/core/graph/analyze-module.d.ts +4 -2
- package/dist/types/core/graph/analyze-provider.d.ts +4 -4
- package/dist/types/core/graph/module-graph.d.ts +200 -7
- package/dist/types/core/graph/providers/analyze-class-provider.d.ts +1 -1
- package/dist/types/core/graph/providers/analyze-factory-provider.d.ts +2 -2
- package/dist/types/core/graph/providers/analyze-value-provider.d.ts +1 -1
- package/dist/types/core/injection/injection-context.d.ts +29 -0
- package/dist/types/core/lazy-module-loader.d.ts +17 -0
- package/dist/types/core/module-ref.d.ts +34 -0
- package/dist/types/core/modules/container.d.ts +134 -18
- package/dist/types/core/modules/module-container-factory.d.ts +3 -3
- package/dist/types/core/modules/module-container.d.ts +44 -5
- package/dist/types/core/modules/module-token-factory.d.ts +2 -2
- package/dist/types/core/modules/modules-container.d.ts +23 -4
- package/dist/types/core/nexus-applications.browser.d.ts +30 -8
- package/dist/types/core/nexus-applications.d.ts +219 -55
- package/dist/types/core/nexus-applications.server.d.ts +30 -8
- package/dist/types/core/resolver/providers-container.d.ts +2 -2
- package/dist/types/core/resolver/resolution-context.d.ts +22 -0
- package/dist/types/core/resolver/resolver.d.ts +122 -4
- package/dist/types/decorators/inject.d.ts +9 -5
- package/dist/types/decorators/injectable.d.ts +0 -7
- package/dist/types/decorators/{nsModule.d.ts → module.d.ts} +6 -5
- package/dist/types/errors/bootstrap-error.d.ts +6 -0
- package/dist/types/errors/child-errors.d.ts +10 -0
- package/dist/types/errors/index.d.ts +5 -0
- package/dist/types/errors/injection-errors.d.ts +11 -0
- package/dist/types/errors/lazy-module-errors.d.ts +12 -0
- package/dist/types/errors/provider-errors.d.ts +47 -0
- package/dist/types/index.d.ts +13 -4
- package/dist/types/interfaces/abstract.interface.d.ts +1 -3
- package/dist/types/interfaces/dynamic-module.interface.d.ts +7 -5
- package/dist/types/interfaces/index.d.ts +1 -0
- package/dist/types/interfaces/injection-token.interface.d.ts +1 -3
- package/dist/types/interfaces/module-metadata.interface.d.ts +12 -4
- package/dist/types/interfaces/module-types.interface.d.ts +21 -24
- package/dist/types/interfaces/modules/container.interface.d.ts +10 -4
- package/dist/types/interfaces/modules/index.d.ts +1 -0
- package/dist/types/interfaces/modules/module-container-factory.interface.d.ts +2 -2
- package/dist/types/interfaces/modules/module-graph.interface.d.ts +85 -12
- package/dist/types/interfaces/modules/module-token-factory.interface.d.ts +2 -2
- package/dist/types/interfaces/modules/modules-container.interface.d.ts +5 -4
- package/dist/types/interfaces/modules/parent-link.interface.d.ts +12 -0
- package/dist/types/interfaces/nexus-application.interface.d.ts +49 -6
- package/dist/types/interfaces/on-module-destroy.interface.d.ts +3 -0
- package/dist/types/interfaces/plugins/scanner-plugin.interface.d.ts +1 -1
- package/dist/types/interfaces/scope.interface.d.ts +1 -54
- package/dist/types/interfaces/validate-module-keys.d.ts +1 -0
- package/dist/types/internal.d.ts +3 -0
- package/dist/types/server.d.ts +1 -1
- package/dist/types/utils/forward-ref.d.ts +5 -0
- package/dist/types/utils/helpers.d.ts +8 -8
- package/dist/types/utils/lazy-module.d.ts +20 -0
- package/package.json +23 -7
- package/dist/cjs/decorators/nsModule.js.map +0 -1
- package/dist/esm/decorators/nsModule.js.map +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +0 -1
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
|
@@ -1,60 +1,296 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContainerNotCompiledError } from "@nexus-ioc/shared";
|
|
2
|
+
import { BootstrapError, ChildModuleNotDeclaredError, ContainerClosedError, LazyModuleLoadError, ProviderNotFoundError, } from "../errors/index.js";
|
|
3
|
+
import { MODULE_WATERMARK, } from "../interfaces/index.js";
|
|
2
4
|
import { HashUtil } from "../utils/hash-utils.js";
|
|
5
|
+
import { getModuleLabel, isDynamicModule } from "../utils/helpers.js";
|
|
6
|
+
import { isLazyModule } from "../utils/lazy-module.js";
|
|
7
|
+
import { withExtraProviders } from "./child-module.js";
|
|
8
|
+
import { createInternalModule, LazyModuleLoader } from "./lazy-module-loader.js";
|
|
9
|
+
import { ModuleRef } from "./module-ref.js";
|
|
3
10
|
import { Container } from "./modules/container.js";
|
|
11
|
+
function flattenErrors(error) {
|
|
12
|
+
return error instanceof AggregateError ? [...error.errors] : [error];
|
|
13
|
+
}
|
|
14
|
+
/** Closes `apps` one at a time, in order; returns their flattened errors. */
|
|
15
|
+
async function closeAll(apps) {
|
|
16
|
+
const errors = [];
|
|
17
|
+
for (const app of apps) {
|
|
18
|
+
try {
|
|
19
|
+
await app.close();
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
errors.push(...flattenErrors(error));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return errors;
|
|
26
|
+
}
|
|
4
27
|
/**
|
|
5
|
-
*
|
|
28
|
+
* NexusApplication is the main application class that provides a high-level
|
|
6
29
|
* API for creating and managing IoC containers.
|
|
7
30
|
*
|
|
8
31
|
* This class wraps the Container and provides additional features:
|
|
9
32
|
* - Automatic singleton initialization
|
|
10
33
|
* - Scanner plugin support for custom metadata processing
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
34
|
+
* - Child containers for modules declared in `@Module({ children })`
|
|
35
|
+
* - Lazy/eager container modes
|
|
13
36
|
*
|
|
14
37
|
* @example
|
|
15
38
|
* ```typescript
|
|
16
|
-
* const app =
|
|
39
|
+
* const app = NexusApplication.create(AppModule);
|
|
17
40
|
* await app.bootstrap();
|
|
18
|
-
* const service =
|
|
41
|
+
* const service = app.get(MyService);
|
|
19
42
|
* ```
|
|
20
43
|
*/
|
|
21
|
-
export class
|
|
44
|
+
export class NexusApplication {
|
|
22
45
|
/**
|
|
23
|
-
* Creates a new
|
|
46
|
+
* Creates a new NexusApplication instance.
|
|
24
47
|
*
|
|
25
48
|
* @param rootModule - The root module of the application
|
|
26
49
|
* @param options - Optional configuration
|
|
27
50
|
* @param options.hashFn - Custom hash function for module identification
|
|
28
51
|
*/
|
|
29
|
-
constructor(rootModule, options) {
|
|
52
|
+
constructor(rootModule, options, child) {
|
|
30
53
|
this.rootModule = rootModule;
|
|
31
|
-
this.
|
|
54
|
+
this.options = options;
|
|
32
55
|
this.isAsyncContainer = false;
|
|
33
|
-
this.container = new Container(this.hashUtil);
|
|
34
56
|
this.scannerPlugins = [];
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
57
|
+
this.closePromise = null;
|
|
58
|
+
/**
|
|
59
|
+
* Children created by `createChild()` and not closed yet, in creation
|
|
60
|
+
* order. The only reference the parent keeps to a child.
|
|
61
|
+
*/
|
|
62
|
+
this.liveChildren = new Set();
|
|
63
|
+
/**
|
|
64
|
+
* Lazy child code, per lazy ref id, with the token of the declaring
|
|
65
|
+
* module; a failed load is not cached, and an unload that destroys the
|
|
66
|
+
* declaring module drops the entry.
|
|
67
|
+
*/
|
|
68
|
+
this.loadedChildren = new Map();
|
|
69
|
+
this.pendingLoads = new Set();
|
|
70
|
+
this.lazyModuleLoader = new LazyModuleLoader((lazyModule) => this.load(lazyModule), (ref) => this.unload(ref));
|
|
71
|
+
this.hashUtil =
|
|
72
|
+
typeof options?.hashFn === "function"
|
|
73
|
+
? new options.hashFn()
|
|
74
|
+
: new HashUtil();
|
|
75
|
+
this.container = new Container(this.hashUtil);
|
|
76
|
+
this.link = child?.link ?? null;
|
|
77
|
+
this.onClosed = child?.onClosed ?? null;
|
|
78
|
+
this.declaredIn = child?.declaredIn ?? null;
|
|
79
|
+
this.container.onUnloading((modules) => this.closeChildrenDeclaredIn(modules));
|
|
39
80
|
}
|
|
40
81
|
/**
|
|
41
|
-
* Creates a new
|
|
82
|
+
* Creates a new NexusApplication instance.
|
|
42
83
|
*
|
|
43
84
|
* This is the main entry point for creating an application.
|
|
44
85
|
*
|
|
45
86
|
* @param rootModule - The root module of the application
|
|
46
87
|
* @param options - Optional configuration
|
|
47
88
|
* @param options.hashFn - Custom hash function for module identification
|
|
48
|
-
* @returns A new
|
|
89
|
+
* @returns A new NexusApplication instance
|
|
49
90
|
*
|
|
50
91
|
* @example
|
|
51
92
|
* ```typescript
|
|
52
|
-
* const app =
|
|
93
|
+
* const app = NexusApplication.create(AppModule);
|
|
53
94
|
* await app.bootstrap();
|
|
54
95
|
* ```
|
|
55
96
|
*/
|
|
56
97
|
static create(rootModule, options) {
|
|
57
|
-
return new
|
|
98
|
+
return new NexusApplication(rootModule, options);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Creates a not-yet-bootstrapped child application. Private: the only
|
|
102
|
+
* public way to get a child is `createChild()`.
|
|
103
|
+
*/
|
|
104
|
+
static createAsChild(root, wiring, options) {
|
|
105
|
+
return new NexusApplication(root, options, wiring);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates a child application for a module declared in
|
|
109
|
+
* `@Module({ children })` somewhere in this application's graph. The
|
|
110
|
+
* child is returned bootstrapped, with its singletons created.
|
|
111
|
+
*
|
|
112
|
+
* - `Type` matches a declared class; `DynamicModule` matches by its
|
|
113
|
+
* `.module`; a `LazyModule` matches a declared ref by identity, and its
|
|
114
|
+
* loader runs once per ref (a failed load is retried next time).
|
|
115
|
+
* - `options.providers` are appended to the child root module's providers.
|
|
116
|
+
* - The child's `get()`/`resolve()` look in the child first, then at what
|
|
117
|
+
* the declaring module sees in this application, then up this
|
|
118
|
+
* application's own parent chain.
|
|
119
|
+
*
|
|
120
|
+
* @throws {ContainerNotCompiledError} If this application is not bootstrapped
|
|
121
|
+
* @throws {ContainerClosedError} If this application is closed or closing
|
|
122
|
+
* @throws {ChildModuleNotDeclaredError} If no module declares `child`, or
|
|
123
|
+
* (`reason: "unloaded"`) the lazy module declaring it was unloaded while
|
|
124
|
+
* the child was being created; the child is closed then
|
|
125
|
+
* @throws {LazyModuleLoadError} If a lazy child's loader fails or returns a non-module
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* @Module({ children: [ProfileModule] })
|
|
130
|
+
* class AppModule {}
|
|
131
|
+
*
|
|
132
|
+
* const app = await NexusApplication.create(AppModule).bootstrap();
|
|
133
|
+
* const profile = await app.createChild(ProfileModule, {
|
|
134
|
+
* providers: [{ provide: PROFILE_ID, useValue: "p1" }],
|
|
135
|
+
* });
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
async createChild(child, options) {
|
|
139
|
+
this.assertUsable();
|
|
140
|
+
const key = isLazyModule(child)
|
|
141
|
+
? child
|
|
142
|
+
: isDynamicModule(child)
|
|
143
|
+
? child.module
|
|
144
|
+
: child;
|
|
145
|
+
const childName = isLazyModule(child) ? child.name : getModuleLabel(child);
|
|
146
|
+
const declaredIn = this.container.graph.findChildDeclaration(key);
|
|
147
|
+
if (!declaredIn) {
|
|
148
|
+
throw new ChildModuleNotDeclaredError(childName);
|
|
149
|
+
}
|
|
150
|
+
// The declaring module may live in a lazy segment that is unloaded
|
|
151
|
+
// (and maybe loaded again, as a new module) while this call awaits.
|
|
152
|
+
const assertStillDeclared = () => {
|
|
153
|
+
if (this.container.graph.findChildDeclaration(key) !== declaredIn) {
|
|
154
|
+
throw new ChildModuleNotDeclaredError(childName, "unloaded");
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
let module;
|
|
158
|
+
if (isLazyModule(child)) {
|
|
159
|
+
try {
|
|
160
|
+
module = await this.loadChildModule(child, declaredIn.token);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
// A parent that started closing reports that, not the load failure.
|
|
164
|
+
this.assertOpen();
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
// The parent may have started closing, or the declaring segment
|
|
168
|
+
// unloading, while the code loaded.
|
|
169
|
+
this.assertOpen();
|
|
170
|
+
assertStillDeclared();
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
module = child;
|
|
174
|
+
}
|
|
175
|
+
const app = NexusApplication.createAsChild(withExtraProviders(module, options?.providers), {
|
|
176
|
+
link: this.linkFor(declaredIn),
|
|
177
|
+
onClosed: () => this.liveChildren.delete(app),
|
|
178
|
+
declaredIn: declaredIn.token,
|
|
179
|
+
}, this.options);
|
|
180
|
+
// Registered before bootstrap so a concurrent close() sees it.
|
|
181
|
+
this.liveChildren.add(app);
|
|
182
|
+
// Only this application can close a child still bootstrapping: its
|
|
183
|
+
// close() cascade or an unload of the declaring module. The caller
|
|
184
|
+
// hears about the parent closing first, then about the unload.
|
|
185
|
+
const reportClosedWhileCreating = () => {
|
|
186
|
+
this.assertOpen();
|
|
187
|
+
if (app.isClosed) {
|
|
188
|
+
throw new ChildModuleNotDeclaredError(childName, "unloaded");
|
|
189
|
+
}
|
|
190
|
+
assertStillDeclared();
|
|
191
|
+
};
|
|
192
|
+
try {
|
|
193
|
+
await app.bootstrap();
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
const closedByParent = app.isClosed;
|
|
197
|
+
this.liveChildren.delete(app);
|
|
198
|
+
await app.close().catch(() => undefined);
|
|
199
|
+
this.assertOpen();
|
|
200
|
+
if (closedByParent) {
|
|
201
|
+
reportClosedWhileCreating();
|
|
202
|
+
}
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
reportClosedWhileCreating();
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
await app.close();
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
return app;
|
|
213
|
+
}
|
|
214
|
+
/** Runs a lazy child's loader once per ref; a failure is not cached. */
|
|
215
|
+
loadChildModule(ref, declaredIn) {
|
|
216
|
+
const cached = this.loadedChildren.get(ref.id);
|
|
217
|
+
if (cached) {
|
|
218
|
+
return cached.module;
|
|
219
|
+
}
|
|
220
|
+
const entry = {
|
|
221
|
+
declaredIn,
|
|
222
|
+
module: this.runChildLoader(ref).catch((error) => {
|
|
223
|
+
// Only this load's entry: an unload may have dropped it already.
|
|
224
|
+
if (this.loadedChildren.get(ref.id) === entry) {
|
|
225
|
+
this.loadedChildren.delete(ref.id);
|
|
226
|
+
}
|
|
227
|
+
throw error;
|
|
228
|
+
}),
|
|
229
|
+
};
|
|
230
|
+
this.loadedChildren.set(ref.id, entry);
|
|
231
|
+
return entry.module;
|
|
232
|
+
}
|
|
233
|
+
async runChildLoader(ref) {
|
|
234
|
+
let loaded;
|
|
235
|
+
try {
|
|
236
|
+
loaded = await ref.load();
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
throw new LazyModuleLoadError(ref.name, error instanceof Error ? error.message : String(error));
|
|
240
|
+
}
|
|
241
|
+
const metatype = loaded && isDynamicModule(loaded) ? loaded.module : loaded;
|
|
242
|
+
if (typeof metatype !== "function" ||
|
|
243
|
+
!Reflect.hasMetadata(MODULE_WATERMARK, metatype)) {
|
|
244
|
+
throw new LazyModuleLoadError(ref.name, "loader did not return a class decorated with @Module()");
|
|
245
|
+
}
|
|
246
|
+
return loaded;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* The link a child declared in `declaredIn` uses: what that module sees
|
|
250
|
+
* in this application, then this application's own parent chain. It
|
|
251
|
+
* never caches instances, only which tokens the declaring module sees,
|
|
252
|
+
* so a `canProvide` followed by `get` walks the imports once per token
|
|
253
|
+
* (until a load or unload changes the graph) instead of twice per call.
|
|
254
|
+
* Once this application closes, `canProvide` still answers from the
|
|
255
|
+
* graph, so `get`/`resolve` of a token the child would have taken from
|
|
256
|
+
* here throw `ContainerClosedError` (even with `optional`) instead of
|
|
257
|
+
* quietly reporting it missing.
|
|
258
|
+
*/
|
|
259
|
+
linkFor(declaredIn) {
|
|
260
|
+
// Memoised per token: the visibility walk is a breadth-first search
|
|
261
|
+
// over the declaring module's imports. Valid until a load or unload
|
|
262
|
+
// changes the graph, which bumps `graph.version`.
|
|
263
|
+
const visibility = new Map();
|
|
264
|
+
let visibilityVersion = -1;
|
|
265
|
+
const seesLocally = (token) => {
|
|
266
|
+
const { version } = this.container.graph;
|
|
267
|
+
if (version !== visibilityVersion) {
|
|
268
|
+
visibility.clear();
|
|
269
|
+
visibilityVersion = version;
|
|
270
|
+
}
|
|
271
|
+
let sees = visibility.get(token);
|
|
272
|
+
if (sees === undefined) {
|
|
273
|
+
sees =
|
|
274
|
+
this.container.hasProvider(token) &&
|
|
275
|
+
this.container.graph.isProviderVisible(declaredIn, token);
|
|
276
|
+
visibility.set(token, sees);
|
|
277
|
+
}
|
|
278
|
+
return sees;
|
|
279
|
+
};
|
|
280
|
+
return {
|
|
281
|
+
canProvide: (token) => seesLocally(token) || (this.link?.canProvide(token) ?? false),
|
|
282
|
+
get: (token) => seesLocally(token)
|
|
283
|
+
? this.container.get(token)
|
|
284
|
+
: this.requireLink(token).get(token),
|
|
285
|
+
resolve: (token) => seesLocally(token)
|
|
286
|
+
? this.container.resolve(token)
|
|
287
|
+
: this.requireLink(token).resolve(token),
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
requireLink(token) {
|
|
291
|
+
if (!this.link)
|
|
292
|
+
throw new ProviderNotFoundError(token);
|
|
293
|
+
return this.link;
|
|
58
294
|
}
|
|
59
295
|
/**
|
|
60
296
|
* Bootstraps the application by initializing the container and all providers.
|
|
@@ -69,26 +305,135 @@ export class NexusApplications {
|
|
|
69
305
|
*
|
|
70
306
|
* @example
|
|
71
307
|
* ```typescript
|
|
72
|
-
* const app =
|
|
308
|
+
* const app = NexusApplication.create(AppModule);
|
|
73
309
|
* await app.bootstrap();
|
|
74
310
|
* // Application is now ready to use
|
|
75
311
|
* ```
|
|
76
312
|
*/
|
|
77
|
-
async bootstrap() {
|
|
78
|
-
await this.container.run(this.rootModule);
|
|
313
|
+
async bootstrap(options) {
|
|
314
|
+
await this.container.run(this.rootModule, [createInternalModule(this.lazyModuleLoader)], this.link ? { link: this.link } : {});
|
|
79
315
|
for (const scannerPlugin of this.scannerPlugins) {
|
|
80
316
|
await scannerPlugin.scan(this.container.graph);
|
|
81
317
|
}
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
if (node.type === NodeTypeEnum.PROVIDER &&
|
|
85
|
-
node.scope === Scope.Singleton) {
|
|
86
|
-
await this.container.get(token);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
318
|
+
if (this.container.errors.length > 0 && options?.throwOnError !== false) {
|
|
319
|
+
throw new BootstrapError(this.container.errors);
|
|
89
320
|
}
|
|
321
|
+
await this.warmUpSingletons(this.container.graph.nodes.keys());
|
|
90
322
|
return this;
|
|
91
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Pre-instantiates the singleton providers named by `tokens`, unless the
|
|
326
|
+
* application is running in lazy mode.
|
|
327
|
+
*/
|
|
328
|
+
async warmUpSingletons(tokens) {
|
|
329
|
+
if (this.isAsyncContainer) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
await this.container.instantiateSingletons(tokens);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Closes the application and cleans up resources.
|
|
336
|
+
*
|
|
337
|
+
* - The closed flag is set synchronously: from this call on, `get`,
|
|
338
|
+
* `resolve` and `load` throw `ContainerClosedError`.
|
|
339
|
+
* - Waits for in-flight lazy loads, then runs on the compile queue so it
|
|
340
|
+
* never interleaves with `load`/`unload`.
|
|
341
|
+
* - Calls every `onModuleDestroy` in reverse creation order, even if some
|
|
342
|
+
* throw; failures are collected into a single `AggregateError`.
|
|
343
|
+
* - Idempotent: later calls return the same promise.
|
|
344
|
+
* - A child application removes itself from its parent's live children
|
|
345
|
+
* once closed.
|
|
346
|
+
*
|
|
347
|
+
* @returns A promise that resolves when the application is closed
|
|
348
|
+
* @throws {AggregateError} If one or more `onModuleDestroy` hooks failed
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* ```typescript
|
|
352
|
+
* const app = await NexusApplication.create(AppModule).bootstrap();
|
|
353
|
+
* await app.close();
|
|
354
|
+
* ```
|
|
355
|
+
*/
|
|
356
|
+
close() {
|
|
357
|
+
if (!this.closePromise) {
|
|
358
|
+
// Mark the container closed before draining, so module refs are
|
|
359
|
+
// rejected during the drain window too.
|
|
360
|
+
this.container.markClosed();
|
|
361
|
+
this.closePromise = this.closeChildrenThenSelf().finally(() => {
|
|
362
|
+
this.onClosed?.();
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
return this.closePromise;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Closes the live children (newest first, one at a time), then this
|
|
369
|
+
* application. Every failure, a child's or its own, ends up in one
|
|
370
|
+
* `AggregateError`, flattened so a child's `AggregateError` contributes
|
|
371
|
+
* its errors rather than nesting.
|
|
372
|
+
*/
|
|
373
|
+
async closeChildrenThenSelf() {
|
|
374
|
+
const errors = await closeAll([...this.liveChildren].reverse());
|
|
375
|
+
try {
|
|
376
|
+
await this.drainAndClose();
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
errors.push(...flattenErrors(error));
|
|
380
|
+
}
|
|
381
|
+
if (errors.length > 0) {
|
|
382
|
+
throw new AggregateError(errors, "One or more onModuleDestroy hooks failed");
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Waits for in-flight `load()` calls (including their singleton warm-up,
|
|
387
|
+
* which bypasses the closed guard) so nothing is instantiated after the
|
|
388
|
+
* destroy pass, then tears the container down.
|
|
389
|
+
*/
|
|
390
|
+
async drainAndClose() {
|
|
391
|
+
await Promise.allSettled([...this.pendingLoads]);
|
|
392
|
+
await this.container.close();
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Unload hook (see `Container.onUnloading`): closes the live children
|
|
396
|
+
* declared by a module the unload destroys, newest first, and forgets
|
|
397
|
+
* the lazy child code those modules declared.
|
|
398
|
+
*/
|
|
399
|
+
async closeChildrenDeclaredIn(destroyedModules) {
|
|
400
|
+
const destroyed = new Set(destroyedModules);
|
|
401
|
+
for (const [id, entry] of this.loadedChildren) {
|
|
402
|
+
if (destroyed.has(entry.declaredIn)) {
|
|
403
|
+
this.loadedChildren.delete(id);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
const doomed = [...this.liveChildren]
|
|
407
|
+
.filter((child) => child.declaredIn && destroyed.has(child.declaredIn))
|
|
408
|
+
.reverse();
|
|
409
|
+
// A child someone else is already closing is waited for (it may still
|
|
410
|
+
// use the parent's providers) but neither counted nor re-reported.
|
|
411
|
+
const closingElsewhere = doomed.filter((child) => child.isClosed);
|
|
412
|
+
const started = doomed.filter((child) => !child.isClosed);
|
|
413
|
+
const errors = await closeAll(started);
|
|
414
|
+
await Promise.allSettled(closingElsewhere.map((child) => child.close()));
|
|
415
|
+
return {
|
|
416
|
+
closed: started.length,
|
|
417
|
+
error: errors.length > 0
|
|
418
|
+
? new AggregateError(errors, "One or more child applications failed to close")
|
|
419
|
+
: undefined,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
/** True once `close()` has been called (the app may still be closing). */
|
|
423
|
+
get isClosed() {
|
|
424
|
+
return this.closePromise !== null;
|
|
425
|
+
}
|
|
426
|
+
assertOpen() {
|
|
427
|
+
if (this.closePromise) {
|
|
428
|
+
throw new ContainerClosedError();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
assertUsable() {
|
|
432
|
+
this.assertOpen();
|
|
433
|
+
if (!this.container.isCompiled) {
|
|
434
|
+
throw new ContainerNotCompiledError();
|
|
435
|
+
}
|
|
436
|
+
}
|
|
92
437
|
/**
|
|
93
438
|
* Adds one or more scanner plugins to the application.
|
|
94
439
|
*
|
|
@@ -101,7 +446,7 @@ export class NexusApplications {
|
|
|
101
446
|
*
|
|
102
447
|
* @example
|
|
103
448
|
* ```typescript
|
|
104
|
-
* const app =
|
|
449
|
+
* const app = NexusApplication.create(AppModule)
|
|
105
450
|
* .addScannerPlugin(new CustomScanner())
|
|
106
451
|
* .addScannerPlugin([new Scanner1(), new Scanner2()]);
|
|
107
452
|
* await app.bootstrap();
|
|
@@ -112,30 +457,63 @@ export class NexusApplications {
|
|
|
112
457
|
this.scannerPlugins.push(...plugins);
|
|
113
458
|
return this;
|
|
114
459
|
}
|
|
460
|
+
get(token, options = {}) {
|
|
461
|
+
this.assertUsable();
|
|
462
|
+
if (this.container.hasProvider(token)) {
|
|
463
|
+
return this.container.get(token);
|
|
464
|
+
}
|
|
465
|
+
if (this.link?.canProvide(token)) {
|
|
466
|
+
return this.link.get(token);
|
|
467
|
+
}
|
|
468
|
+
if (options.optional) {
|
|
469
|
+
return undefined;
|
|
470
|
+
}
|
|
471
|
+
throw new ProviderNotFoundError(token);
|
|
472
|
+
}
|
|
473
|
+
async resolve(token, options = {}) {
|
|
474
|
+
this.assertUsable();
|
|
475
|
+
if (this.container.hasProvider(token)) {
|
|
476
|
+
return this.container.resolve(token);
|
|
477
|
+
}
|
|
478
|
+
if (this.link?.canProvide(token)) {
|
|
479
|
+
return this.link.resolve(token);
|
|
480
|
+
}
|
|
481
|
+
if (options.optional) {
|
|
482
|
+
return undefined;
|
|
483
|
+
}
|
|
484
|
+
throw new ProviderNotFoundError(token);
|
|
485
|
+
}
|
|
115
486
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* resolve it from the parent container (if set).
|
|
120
|
-
*
|
|
121
|
-
* @template T - The type of the provider to resolve
|
|
122
|
-
* @param token - The injection token (class, string, or symbol)
|
|
123
|
-
* @returns A promise that resolves to the provider instance, or undefined if not found
|
|
487
|
+
* Loads a lazy module declared with `lazy()` into this application's
|
|
488
|
+
* container and returns a handle to it. Repeated calls for the same ref
|
|
489
|
+
* return the same providers; the loader runs once.
|
|
124
490
|
*
|
|
125
|
-
* @
|
|
126
|
-
*
|
|
127
|
-
* const app = await NexusApplications.create(AppModule).bootstrap();
|
|
128
|
-
* const userService = await app.get(UserService);
|
|
129
|
-
* const config = await app.get('CONFIG');
|
|
130
|
-
* ```
|
|
491
|
+
* @throws {LazyModuleLoadError} if the loader fails or returns a non-module
|
|
492
|
+
* @throws {LazyModuleGraphError} if the module's dependency graph is invalid
|
|
131
493
|
*/
|
|
132
|
-
async
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
494
|
+
async load(lazyModule) {
|
|
495
|
+
this.assertOpen();
|
|
496
|
+
const loading = this.loadAndWarmUp(lazyModule);
|
|
497
|
+
this.pendingLoads.add(loading);
|
|
498
|
+
try {
|
|
499
|
+
return await loading;
|
|
500
|
+
}
|
|
501
|
+
finally {
|
|
502
|
+
this.pendingLoads.delete(loading);
|
|
137
503
|
}
|
|
138
|
-
|
|
504
|
+
}
|
|
505
|
+
async loadAndWarmUp(lazyModule) {
|
|
506
|
+
const segment = await this.container.load(lazyModule);
|
|
507
|
+
await this.warmUpSingletons(segment.providerTokens);
|
|
508
|
+
return new ModuleRef(this.container, segment);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Unloads a lazy module previously returned by `load()` (directly or via
|
|
512
|
+
* `LazyModuleLoader`): destroys every singleton and module nothing else
|
|
513
|
+
* still needs. A no-op if `ref` is already unloaded.
|
|
514
|
+
*/
|
|
515
|
+
async unload(ref) {
|
|
516
|
+
return ref.unload();
|
|
139
517
|
}
|
|
140
518
|
/**
|
|
141
519
|
* Gets all errors that occurred during graph compilation.
|
|
@@ -144,7 +522,7 @@ export class NexusApplications {
|
|
|
144
522
|
*
|
|
145
523
|
* @example
|
|
146
524
|
* ```typescript
|
|
147
|
-
* const app = await
|
|
525
|
+
* const app = await NexusApplication.create(AppModule).bootstrap();
|
|
148
526
|
* if (app.errors.length > 0) {
|
|
149
527
|
* console.error('Application errors:', app.errors);
|
|
150
528
|
* }
|
|
@@ -154,47 +532,27 @@ export class NexusApplications {
|
|
|
154
532
|
return this.container.errors;
|
|
155
533
|
}
|
|
156
534
|
/**
|
|
157
|
-
* Enables
|
|
535
|
+
* Enables lazy mode for the container.
|
|
536
|
+
*
|
|
537
|
+
* In lazy mode, singleton providers are NOT pre-instantiated during
|
|
538
|
+
* bootstrap. They will be created lazily on first access via resolve();
|
|
539
|
+
* get() throws ProviderNotInstantiatedError until then.
|
|
158
540
|
*
|
|
159
|
-
*
|
|
160
|
-
* bootstrap. They will be created lazily on first access via get().
|
|
161
|
-
* This can improve startup time for large applications.
|
|
541
|
+
* @deprecated Use lazy modules (lazy()/load()) instead; in this mode get() throws ProviderNotInstantiatedError until resolve() is called.
|
|
162
542
|
*
|
|
163
543
|
* @returns This instance for method chaining
|
|
164
544
|
*
|
|
165
545
|
* @example
|
|
166
546
|
* ```typescript
|
|
167
|
-
* const app =
|
|
168
|
-
* .
|
|
547
|
+
* const app = NexusApplication.create(AppModule)
|
|
548
|
+
* .lazy();
|
|
169
549
|
* await app.bootstrap(); // Singletons are NOT created yet
|
|
170
|
-
* const service = await app.
|
|
550
|
+
* const service = await app.resolve(MyService); // Created on first access
|
|
171
551
|
* ```
|
|
172
552
|
*/
|
|
173
|
-
|
|
553
|
+
lazy() {
|
|
174
554
|
this.isAsyncContainer = true;
|
|
175
555
|
return this;
|
|
176
556
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Sets a parent container for this application.
|
|
179
|
-
*
|
|
180
|
-
* When a provider is not found in this container, it will be looked up
|
|
181
|
-
* in the parent container. This enables hierarchical container structures.
|
|
182
|
-
*
|
|
183
|
-
* @param parentContainer - The parent container
|
|
184
|
-
* @returns This instance for method chaining
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* ```typescript
|
|
188
|
-
* const parentApp = await NexusApplications.create(ParentModule).bootstrap();
|
|
189
|
-
* const childApp = await NexusApplications.create(ChildModule)
|
|
190
|
-
* .setParent(parentApp)
|
|
191
|
-
* .bootstrap();
|
|
192
|
-
* // childApp can access providers from parentApp
|
|
193
|
-
* ```
|
|
194
|
-
*/
|
|
195
|
-
setParent(parentContainer) {
|
|
196
|
-
this._parentContainer = parentContainer;
|
|
197
|
-
return this;
|
|
198
|
-
}
|
|
199
557
|
}
|
|
200
558
|
//# sourceMappingURL=nexus-applications.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus-applications.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nexus-applications.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.ts"],"names":[],"mappings":"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"}
|