@nestjs/core 9.2.1 → 9.3.0-beta.2
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/LICENSE +1 -1
- package/Readme.md +6 -3
- package/constants.d.ts +2 -0
- package/constants.js +7 -1
- package/injector/container.d.ts +9 -5
- package/injector/container.js +14 -9
- package/injector/injector.d.ts +4 -0
- package/injector/injector.js +7 -1
- package/injector/instance-loader.d.ts +6 -4
- package/injector/instance-loader.js +17 -7
- package/injector/instance-wrapper.d.ts +3 -0
- package/injector/instance-wrapper.js +10 -1
- package/injector/internal-core-module/internal-core-module-factory.d.ts +2 -1
- package/injector/internal-core-module/internal-core-module-factory.js +16 -8
- package/injector/module.d.ts +18 -7
- package/injector/module.js +50 -13
- package/injector/modules-container.d.ts +1 -0
- package/injector/modules-container.js +3 -0
- package/inspector/deterministic-uuid-registry.d.ts +5 -0
- package/inspector/deterministic-uuid-registry.js +20 -0
- package/inspector/graph-inspector.d.ts +25 -0
- package/inspector/graph-inspector.js +136 -0
- package/inspector/interfaces/edge.interface.d.ts +28 -0
- package/inspector/interfaces/edge.interface.js +2 -0
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +12 -0
- package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +2 -0
- package/inspector/interfaces/entrypoint.interface.d.ts +23 -0
- package/inspector/interfaces/entrypoint.interface.js +2 -0
- package/inspector/interfaces/extras.interface.d.ts +18 -0
- package/inspector/interfaces/extras.interface.js +2 -0
- package/inspector/interfaces/node.interface.d.ts +47 -0
- package/inspector/interfaces/node.interface.js +2 -0
- package/inspector/noop-graph-inspector.d.ts +2 -0
- package/inspector/noop-graph-inspector.js +8 -0
- package/inspector/serialized-graph.d.ts +56 -0
- package/inspector/serialized-graph.js +104 -0
- package/middleware/container.js +2 -1
- package/middleware/middleware-module.d.ts +3 -1
- package/middleware/middleware-module.js +18 -2
- package/middleware/resolver.d.ts +3 -2
- package/middleware/resolver.js +7 -8
- package/middleware/routes-mapper.d.ts +1 -1
- package/middleware/routes-mapper.js +3 -3
- package/nest-application-context.d.ts +10 -5
- package/nest-application-context.js +39 -4
- package/nest-application.d.ts +6 -4
- package/nest-application.js +28 -8
- package/nest-factory.d.ts +5 -4
- package/nest-factory.js +27 -14
- package/package.json +2 -2
- package/router/paths-explorer.d.ts +18 -0
- package/router/paths-explorer.js +37 -0
- package/router/router-explorer.d.ts +8 -9
- package/router/router-explorer.js +22 -31
- package/router/routes-resolver.d.ts +3 -2
- package/router/routes-resolver.js +2 -2
- package/scanner.d.ts +14 -8
- package/scanner.js +67 -36
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(The MIT License)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2017-
|
|
3
|
+
Copyright (c) 2017-2023 Kamil Mysliwiec <https://kamilmysliwiec.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
package/Readme.md
CHANGED
|
@@ -80,7 +80,8 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
80
80
|
<a href="https://snyk.co/nestjs" target="_blank"><img src="https://nestjs.com/img/snyk-logo-black.png" width="185" valign="middle" /></a></td><td>
|
|
81
81
|
<a href="https://fuseautotech.com/" target="_blank"><img src="https://nestjs.com/img/fuse-logo.svg" width="105" valign="middle" /></a></td>
|
|
82
82
|
<td>
|
|
83
|
-
<a href="https://ridicorp.com/career/" target="_blank"><img src="https://nestjs.com/img/ridi-logo.svg" width="105" valign="middle" /></a></td
|
|
83
|
+
<a href="https://ridicorp.com/career/" target="_blank"><img src="https://nestjs.com/img/ridi-logo.svg" width="105" valign="middle" /></a></td><td>
|
|
84
|
+
<a href="https://www.movavi.com/imovie-for-windows.html" target="_blank"><img src="https://nestjs.com/img/movavi-logo.svg" width="105" valign="middle" /></a></td></</tr></table>
|
|
84
85
|
|
|
85
86
|
#### Silver Sponsors
|
|
86
87
|
|
|
@@ -93,7 +94,8 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
93
94
|
<td><a href="https://www.tinystacks.com" target="_blank"><img src="https://nestjs.com/img/tinystacks-logo.png#1" width="140" valign="middle" /></td>
|
|
94
95
|
<td><a href="https://n.inc" target="_blank"><img src="https://nestjs.com/img/n-inc-logo.svg" width="120" valign="middle" /></td></tr><tr>
|
|
95
96
|
<td><a href="https://bilberrry.com/" target="_blank"><img src="https://nestjs.com/img/bilberrry-logo.svg" width="180" valign="middle" /></td>
|
|
96
|
-
<td><a href="https://ipinfo.ai/" target="_blank"><img src="https://nestjs.com/img/ipinfo-logo.png" width="130" valign="middle" /></td
|
|
97
|
+
<td><a href="https://ipinfo.ai/" target="_blank"><img src="https://nestjs.com/img/ipinfo-logo.png" width="130" valign="middle" /></td>
|
|
98
|
+
<td><a href="https://chax.at" target="_blank"><img src="https://nestjs.com/img/chaxat-logo.png" width="100" valign="middle" /></td></tr>
|
|
97
99
|
</table>
|
|
98
100
|
|
|
99
101
|
#### Sponsors
|
|
@@ -134,7 +136,8 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
134
136
|
<td align="center" valign="middle"><a href="https://mobilereality.pl/" target="_blank"><img src="https://nestjs.com/img/mobile-reality-logo.png" width="45" valign="middle" /></a></td>
|
|
135
137
|
<td align="center" valign="middle"><a href="https://boringowl.io/" target="_blank"><img src="https://nestjs.com/img/boringowl-logo.svg" width="120" valign="middle" /></a></td>
|
|
136
138
|
<td align="center" valign="middle"><a href="https://www.mobilefactory.jp/" target="_blank"><img src="https://nestjs.com/img/mobilefactory-logo.png" width="100" valign="middle" /></a></td>
|
|
137
|
-
<td align="center" valign="middle"><a href="https://
|
|
139
|
+
<td align="center" valign="middle"><a href="https://nordbot.app/" target="_blank"><img src="https://nestjs.com/img/nordbot-logo.png" width="120" valign="middle" /></a></td>
|
|
140
|
+
<td align="center" valign="middle"><a href="https://doppio.sh/" target="_blank"><img src="https://nestjs.com/img/dopiosh-logo.png" width="50" valign="middle" /></a></td>
|
|
138
141
|
</tr></table>
|
|
139
142
|
|
|
140
143
|
## Backers
|
package/constants.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EnhancerSubtype } from '@nestjs/common/constants';
|
|
1
2
|
export declare const MESSAGES: {
|
|
2
3
|
APPLICATION_START: string;
|
|
3
4
|
APPLICATION_READY: string;
|
|
@@ -10,3 +11,4 @@ export declare const APP_INTERCEPTOR = "APP_INTERCEPTOR";
|
|
|
10
11
|
export declare const APP_PIPE = "APP_PIPE";
|
|
11
12
|
export declare const APP_GUARD = "APP_GUARD";
|
|
12
13
|
export declare const APP_FILTER = "APP_FILTER";
|
|
14
|
+
export declare const ENHANCER_TOKEN_TO_SUBTYPE_MAP: Record<typeof APP_GUARD | typeof APP_PIPE | typeof APP_FILTER | typeof APP_INTERCEPTOR, EnhancerSubtype>;
|
package/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.APP_FILTER = exports.APP_GUARD = exports.APP_PIPE = exports.APP_INTERCEPTOR = exports.MESSAGES = void 0;
|
|
3
|
+
exports.ENHANCER_TOKEN_TO_SUBTYPE_MAP = exports.APP_FILTER = exports.APP_GUARD = exports.APP_PIPE = exports.APP_INTERCEPTOR = exports.MESSAGES = void 0;
|
|
4
4
|
exports.MESSAGES = {
|
|
5
5
|
APPLICATION_START: `Starting Nest application...`,
|
|
6
6
|
APPLICATION_READY: `Nest application successfully started`,
|
|
@@ -13,3 +13,9 @@ exports.APP_INTERCEPTOR = 'APP_INTERCEPTOR';
|
|
|
13
13
|
exports.APP_PIPE = 'APP_PIPE';
|
|
14
14
|
exports.APP_GUARD = 'APP_GUARD';
|
|
15
15
|
exports.APP_FILTER = 'APP_FILTER';
|
|
16
|
+
exports.ENHANCER_TOKEN_TO_SUBTYPE_MAP = {
|
|
17
|
+
[exports.APP_GUARD]: 'guard',
|
|
18
|
+
[exports.APP_INTERCEPTOR]: 'interceptor',
|
|
19
|
+
[exports.APP_PIPE]: 'pipe',
|
|
20
|
+
[exports.APP_FILTER]: 'filter',
|
|
21
|
+
};
|
package/injector/container.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { DynamicModule, Provider } from '@nestjs/common';
|
|
2
|
-
import {
|
|
3
|
-
import { Type } from '@nestjs/common/interfaces
|
|
2
|
+
import { EnhancerSubtype } from '@nestjs/common/constants';
|
|
3
|
+
import { Injectable, Type } from '@nestjs/common/interfaces';
|
|
4
4
|
import { ApplicationConfig } from '../application-config';
|
|
5
|
+
import { SerializedGraph } from '../inspector/serialized-graph';
|
|
5
6
|
import { ModuleCompiler } from './compiler';
|
|
6
7
|
import { ContextId } from './instance-wrapper';
|
|
7
8
|
import { Module } from './module';
|
|
@@ -15,8 +16,10 @@ export declare class NestContainer {
|
|
|
15
16
|
private readonly modules;
|
|
16
17
|
private readonly dynamicModulesMetadata;
|
|
17
18
|
private readonly internalProvidersStorage;
|
|
19
|
+
private readonly _serializedGraph;
|
|
18
20
|
private internalCoreModule;
|
|
19
21
|
constructor(_applicationConfig?: ApplicationConfig);
|
|
22
|
+
get serializedGraph(): SerializedGraph;
|
|
20
23
|
get applicationConfig(): ApplicationConfig | undefined;
|
|
21
24
|
setHttpAdapter(httpAdapter: any): void;
|
|
22
25
|
getHttpAdapterRef(): import("..").AbstractHttpAdapter<any, any, any>;
|
|
@@ -31,8 +34,8 @@ export declare class NestContainer {
|
|
|
31
34
|
getModuleByKey(moduleKey: string): Module;
|
|
32
35
|
getInternalCoreModuleRef(): Module | undefined;
|
|
33
36
|
addImport(relatedModule: Type<any> | DynamicModule, token: string): Promise<void>;
|
|
34
|
-
addProvider(provider: Provider, token: string): string | symbol | Function;
|
|
35
|
-
addInjectable(injectable: Provider, token: string, host?: Type<Injectable>):
|
|
37
|
+
addProvider(provider: Provider, token: string, enhancerSubtype?: EnhancerSubtype): string | symbol | Function;
|
|
38
|
+
addInjectable(injectable: Provider, token: string, enhancerSubtype: EnhancerSubtype, host?: Type<Injectable>): string | symbol | Function | import("./instance-wrapper").InstanceWrapper<unknown>;
|
|
36
39
|
addExportedProvider(provider: Type<any>, token: string): void;
|
|
37
40
|
addController(controller: Type<any>, token: string): void;
|
|
38
41
|
clear(): void;
|
|
@@ -42,7 +45,8 @@ export declare class NestContainer {
|
|
|
42
45
|
bindGlobalScope(): void;
|
|
43
46
|
bindGlobalsToImports(moduleRef: Module): void;
|
|
44
47
|
bindGlobalModuleToModule(target: Module, globalModule: Module): void;
|
|
45
|
-
getDynamicMetadataByToken(token: string
|
|
48
|
+
getDynamicMetadataByToken(token: string): Partial<DynamicModule>;
|
|
49
|
+
getDynamicMetadataByToken<K extends Exclude<keyof DynamicModule, 'global' | 'module'>>(token: string, metadataKey: K): DynamicModule[K];
|
|
46
50
|
registerCoreModuleRef(moduleRef: Module): void;
|
|
47
51
|
getModuleTokenFactory(): ModuleTokenFactory;
|
|
48
52
|
registerRequestProvider<T = any>(request: T, contextId: ContextId): void;
|
package/injector/container.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.NestContainer = void 0;
|
|
4
4
|
const constants_1 = require("@nestjs/common/constants");
|
|
5
5
|
const exceptions_1 = require("../errors/exceptions");
|
|
6
|
+
const serialized_graph_1 = require("../inspector/serialized-graph");
|
|
6
7
|
const request_constants_1 = require("../router/request/request-constants");
|
|
7
8
|
const compiler_1 = require("./compiler");
|
|
8
9
|
const internal_core_module_1 = require("./internal-core-module/internal-core-module");
|
|
@@ -19,6 +20,10 @@ class NestContainer {
|
|
|
19
20
|
this.modules = new modules_container_1.ModulesContainer();
|
|
20
21
|
this.dynamicModulesMetadata = new Map();
|
|
21
22
|
this.internalProvidersStorage = new internal_providers_storage_1.InternalProvidersStorage();
|
|
23
|
+
this._serializedGraph = new serialized_graph_1.SerializedGraph();
|
|
24
|
+
}
|
|
25
|
+
get serializedGraph() {
|
|
26
|
+
return this._serializedGraph;
|
|
22
27
|
}
|
|
23
28
|
get applicationConfig() {
|
|
24
29
|
return this._applicationConfig;
|
|
@@ -50,8 +55,10 @@ class NestContainer {
|
|
|
50
55
|
const moduleRef = new module_1.Module(type, this);
|
|
51
56
|
moduleRef.token = token;
|
|
52
57
|
this.modules.set(token, moduleRef);
|
|
53
|
-
|
|
58
|
+
const updatedScope = [].concat(scope, type);
|
|
59
|
+
await this.addDynamicMetadata(token, dynamicMetadata, updatedScope);
|
|
54
60
|
if (this.isGlobalModule(type, dynamicMetadata)) {
|
|
61
|
+
moduleRef.isGlobal = true;
|
|
55
62
|
this.addGlobalModule(moduleRef);
|
|
56
63
|
}
|
|
57
64
|
return moduleRef;
|
|
@@ -100,7 +107,7 @@ class NestContainer {
|
|
|
100
107
|
const related = this.modules.get(relatedModuleToken);
|
|
101
108
|
moduleRef.addRelatedModule(related);
|
|
102
109
|
}
|
|
103
|
-
addProvider(provider, token) {
|
|
110
|
+
addProvider(provider, token, enhancerSubtype) {
|
|
104
111
|
const moduleRef = this.modules.get(token);
|
|
105
112
|
if (!provider) {
|
|
106
113
|
throw new exceptions_1.CircularDependencyException(moduleRef === null || moduleRef === void 0 ? void 0 : moduleRef.metatype.name);
|
|
@@ -108,14 +115,14 @@ class NestContainer {
|
|
|
108
115
|
if (!moduleRef) {
|
|
109
116
|
throw new exceptions_1.UnknownModuleException();
|
|
110
117
|
}
|
|
111
|
-
return moduleRef.addProvider(provider);
|
|
118
|
+
return moduleRef.addProvider(provider, enhancerSubtype);
|
|
112
119
|
}
|
|
113
|
-
addInjectable(injectable, token, host) {
|
|
120
|
+
addInjectable(injectable, token, enhancerSubtype, host) {
|
|
114
121
|
if (!this.modules.has(token)) {
|
|
115
122
|
throw new exceptions_1.UnknownModuleException();
|
|
116
123
|
}
|
|
117
124
|
const moduleRef = this.modules.get(token);
|
|
118
|
-
moduleRef.addInjectable(injectable, host);
|
|
125
|
+
return moduleRef.addInjectable(injectable, enhancerSubtype, host);
|
|
119
126
|
}
|
|
120
127
|
addExportedProvider(provider, token) {
|
|
121
128
|
if (!this.modules.has(token)) {
|
|
@@ -150,11 +157,9 @@ class NestContainer {
|
|
|
150
157
|
target.addRelatedModule(globalModule);
|
|
151
158
|
}
|
|
152
159
|
getDynamicMetadataByToken(token, metadataKey) {
|
|
160
|
+
var _a;
|
|
153
161
|
const metadata = this.dynamicModulesMetadata.get(token);
|
|
154
|
-
|
|
155
|
-
return metadata[metadataKey];
|
|
156
|
-
}
|
|
157
|
-
return [];
|
|
162
|
+
return metadataKey ? (_a = metadata === null || metadata === void 0 ? void 0 : metadata[metadataKey]) !== null && _a !== void 0 ? _a : [] : metadata;
|
|
158
163
|
}
|
|
159
164
|
registerCoreModuleRef(moduleRef) {
|
|
160
165
|
this.internalCoreModule = moduleRef;
|
package/injector/injector.d.ts
CHANGED
|
@@ -39,7 +39,11 @@ export interface InjectorDependencyContext {
|
|
|
39
39
|
dependencies?: InjectorDependency[];
|
|
40
40
|
}
|
|
41
41
|
export declare class Injector {
|
|
42
|
+
private readonly options?;
|
|
42
43
|
private logger;
|
|
44
|
+
constructor(options?: {
|
|
45
|
+
preview: boolean;
|
|
46
|
+
});
|
|
43
47
|
loadPrototype<T>({ token }: InstanceWrapper<T>, collection: Map<InstanceToken, InstanceWrapper<T>>, contextId?: ContextId): void;
|
|
44
48
|
loadInstance<T>(wrapper: InstanceWrapper<T>, collection: Map<InstanceToken, InstanceWrapper>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
|
|
45
49
|
loadMiddleware(wrapper: InstanceWrapper, collection: Map<InstanceToken, InstanceWrapper>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
|
package/injector/injector.js
CHANGED
|
@@ -13,7 +13,8 @@ const constants_2 = require("./constants");
|
|
|
13
13
|
const inquirer_1 = require("./inquirer");
|
|
14
14
|
const instance_wrapper_1 = require("./instance-wrapper");
|
|
15
15
|
class Injector {
|
|
16
|
-
constructor() {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
17
18
|
this.logger = new common_1.Logger('InjectorLogger');
|
|
18
19
|
}
|
|
19
20
|
loadPrototype({ token }, collection, contextId = constants_2.STATIC_CONTEXT) {
|
|
@@ -327,6 +328,7 @@ class Injector {
|
|
|
327
328
|
.forEach(item => (instance[item.key] = item.instance));
|
|
328
329
|
}
|
|
329
330
|
async instantiateClass(instances, wrapper, targetMetatype, contextId = constants_2.STATIC_CONTEXT, inquirer) {
|
|
331
|
+
var _a;
|
|
330
332
|
const { metatype, inject } = wrapper;
|
|
331
333
|
const inquirerId = this.getInquirerId(inquirer);
|
|
332
334
|
const instanceHost = targetMetatype.getInstanceByContextId(this.getContextId(contextId, targetMetatype), inquirerId);
|
|
@@ -334,6 +336,10 @@ class Injector {
|
|
|
334
336
|
wrapper.isInRequestScope(contextId, inquirer) ||
|
|
335
337
|
wrapper.isLazyTransient(contextId, inquirer) ||
|
|
336
338
|
wrapper.isExplicitlyRequested(contextId, inquirer);
|
|
339
|
+
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.preview) {
|
|
340
|
+
instanceHost.isResolved = true;
|
|
341
|
+
return instanceHost.instance;
|
|
342
|
+
}
|
|
337
343
|
if ((0, shared_utils_1.isNil)(inject) && isInContext) {
|
|
338
344
|
instanceHost.instance = wrapper.forwardRef
|
|
339
345
|
? Object.assign(instanceHost.instance, new metatype(...instances))
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { Logger } from '@nestjs/common';
|
|
1
|
+
import { Logger, LoggerService } from '@nestjs/common';
|
|
2
|
+
import { GraphInspector } from '../inspector/graph-inspector';
|
|
2
3
|
import { NestContainer } from './container';
|
|
3
4
|
import { Injector } from './injector';
|
|
4
5
|
import { Module } from './module';
|
|
5
|
-
export declare class InstanceLoader {
|
|
6
|
+
export declare class InstanceLoader<TInjector extends Injector = Injector> {
|
|
6
7
|
protected readonly container: NestContainer;
|
|
8
|
+
protected readonly injector: TInjector;
|
|
9
|
+
protected readonly graphInspector: GraphInspector;
|
|
7
10
|
private logger;
|
|
8
|
-
|
|
9
|
-
constructor(container: NestContainer, logger?: Logger);
|
|
11
|
+
constructor(container: NestContainer, injector: TInjector, graphInspector: GraphInspector, logger?: LoggerService);
|
|
10
12
|
setLogger(logger: Logger): void;
|
|
11
13
|
createInstancesOfDependencies(modules?: Map<string, Module>): Promise<void>;
|
|
12
14
|
private createPrototypes;
|
|
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InstanceLoader = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const messages_1 = require("../helpers/messages");
|
|
6
|
-
const injector_1 = require("./injector");
|
|
7
6
|
const internal_core_module_1 = require("./internal-core-module/internal-core-module");
|
|
8
7
|
class InstanceLoader {
|
|
9
|
-
constructor(container, logger = new common_1.Logger(InstanceLoader.name, {
|
|
8
|
+
constructor(container, injector, graphInspector, logger = new common_1.Logger(InstanceLoader.name, {
|
|
10
9
|
timestamp: true,
|
|
11
10
|
})) {
|
|
12
11
|
this.container = container;
|
|
12
|
+
this.injector = injector;
|
|
13
|
+
this.graphInspector = graphInspector;
|
|
13
14
|
this.logger = logger;
|
|
14
|
-
this.injector = new injector_1.Injector();
|
|
15
15
|
}
|
|
16
16
|
setLogger(logger) {
|
|
17
17
|
this.logger = logger;
|
|
@@ -19,6 +19,7 @@ class InstanceLoader {
|
|
|
19
19
|
async createInstancesOfDependencies(modules = this.container.getModules()) {
|
|
20
20
|
this.createPrototypes(modules);
|
|
21
21
|
await this.createInstances(modules);
|
|
22
|
+
this.graphInspector.inspectModules(modules);
|
|
22
23
|
}
|
|
23
24
|
createPrototypes(modules) {
|
|
24
25
|
modules.forEach(moduleRef => {
|
|
@@ -32,7 +33,7 @@ class InstanceLoader {
|
|
|
32
33
|
await this.createInstancesOfProviders(moduleRef);
|
|
33
34
|
await this.createInstancesOfInjectables(moduleRef);
|
|
34
35
|
await this.createInstancesOfControllers(moduleRef);
|
|
35
|
-
const { name } = moduleRef
|
|
36
|
+
const { name } = moduleRef;
|
|
36
37
|
this.isModuleWhitelisted(name) &&
|
|
37
38
|
this.logger.log((0, messages_1.MODULE_INIT_MESSAGE) `${name}`);
|
|
38
39
|
}));
|
|
@@ -44,7 +45,10 @@ class InstanceLoader {
|
|
|
44
45
|
async createInstancesOfProviders(moduleRef) {
|
|
45
46
|
const { providers } = moduleRef;
|
|
46
47
|
const wrappers = [...providers.values()];
|
|
47
|
-
await Promise.all(wrappers.map(item =>
|
|
48
|
+
await Promise.all(wrappers.map(async (item) => {
|
|
49
|
+
await this.injector.loadProvider(item, moduleRef);
|
|
50
|
+
this.graphInspector.inspectInstanceWrapper(item, moduleRef);
|
|
51
|
+
}));
|
|
48
52
|
}
|
|
49
53
|
createPrototypesOfControllers(moduleRef) {
|
|
50
54
|
const { controllers } = moduleRef;
|
|
@@ -53,7 +57,10 @@ class InstanceLoader {
|
|
|
53
57
|
async createInstancesOfControllers(moduleRef) {
|
|
54
58
|
const { controllers } = moduleRef;
|
|
55
59
|
const wrappers = [...controllers.values()];
|
|
56
|
-
await Promise.all(wrappers.map(item =>
|
|
60
|
+
await Promise.all(wrappers.map(async (item) => {
|
|
61
|
+
await this.injector.loadController(item, moduleRef);
|
|
62
|
+
this.graphInspector.inspectInstanceWrapper(item, moduleRef);
|
|
63
|
+
}));
|
|
57
64
|
}
|
|
58
65
|
createPrototypesOfInjectables(moduleRef) {
|
|
59
66
|
const { injectables } = moduleRef;
|
|
@@ -62,7 +69,10 @@ class InstanceLoader {
|
|
|
62
69
|
async createInstancesOfInjectables(moduleRef) {
|
|
63
70
|
const { injectables } = moduleRef;
|
|
64
71
|
const wrappers = [...injectables.values()];
|
|
65
|
-
await Promise.all(wrappers.map(item =>
|
|
72
|
+
await Promise.all(wrappers.map(async (item) => {
|
|
73
|
+
await this.injector.loadInjectable(item, moduleRef);
|
|
74
|
+
this.graphInspector.inspectInstanceWrapper(item, moduleRef);
|
|
75
|
+
}));
|
|
66
76
|
}
|
|
67
77
|
isModuleWhitelisted(name) {
|
|
68
78
|
return name !== internal_core_module_1.InternalCoreModule.name;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Provider, Scope, Type } from '@nestjs/common';
|
|
2
|
+
import { EnhancerSubtype } from '@nestjs/common/constants';
|
|
2
3
|
import { FactoryProvider } from '@nestjs/common/interfaces';
|
|
3
4
|
import { InstanceToken, Module } from './module';
|
|
4
5
|
export declare const INSTANCE_METADATA_SYMBOL: unique symbol;
|
|
@@ -34,6 +35,7 @@ export declare class InstanceWrapper<T = any> {
|
|
|
34
35
|
readonly async?: boolean;
|
|
35
36
|
readonly host?: Module;
|
|
36
37
|
readonly isAlias: boolean;
|
|
38
|
+
readonly subtype?: EnhancerSubtype;
|
|
37
39
|
scope?: Scope;
|
|
38
40
|
metatype: Type<T> | Function;
|
|
39
41
|
inject?: FactoryProvider['inject'];
|
|
@@ -79,4 +81,5 @@ export declare class InstanceWrapper<T = any> {
|
|
|
79
81
|
private printIntrospectedAsRequestScoped;
|
|
80
82
|
private printIntrospectedAsDurable;
|
|
81
83
|
private isDebugMode;
|
|
84
|
+
private generateUuid;
|
|
82
85
|
}
|
|
@@ -8,18 +8,21 @@ const cli_colors_util_1 = require("@nestjs/common/utils/cli-colors.util");
|
|
|
8
8
|
const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
|
|
9
9
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
10
10
|
const iterare_1 = require("iterare");
|
|
11
|
+
const deterministic_uuid_registry_1 = require("../inspector/deterministic-uuid-registry");
|
|
11
12
|
const constants_1 = require("./constants");
|
|
12
13
|
const provider_classifier_1 = require("./helpers/provider-classifier");
|
|
13
14
|
exports.INSTANCE_METADATA_SYMBOL = Symbol.for('instance_metadata:cache');
|
|
14
15
|
exports.INSTANCE_ID_SYMBOL = Symbol.for('instance_metadata:id');
|
|
15
16
|
class InstanceWrapper {
|
|
16
17
|
constructor(metadata = {}) {
|
|
18
|
+
var _b;
|
|
17
19
|
this.isAlias = false;
|
|
18
20
|
this.scope = common_1.Scope.DEFAULT;
|
|
19
21
|
this.values = new WeakMap();
|
|
20
22
|
this[_a] = {};
|
|
21
|
-
this[exports.INSTANCE_ID_SYMBOL] = (0, random_string_generator_util_1.randomStringGenerator)();
|
|
22
23
|
this.initialize(metadata);
|
|
24
|
+
this[exports.INSTANCE_ID_SYMBOL] =
|
|
25
|
+
(_b = metadata[exports.INSTANCE_ID_SYMBOL]) !== null && _b !== void 0 ? _b : this.generateUuid();
|
|
23
26
|
}
|
|
24
27
|
get id() {
|
|
25
28
|
return this[exports.INSTANCE_ID_SYMBOL];
|
|
@@ -271,6 +274,12 @@ class InstanceWrapper {
|
|
|
271
274
|
isDebugMode() {
|
|
272
275
|
return !!process.env.NEST_DEBUG;
|
|
273
276
|
}
|
|
277
|
+
generateUuid() {
|
|
278
|
+
var _b, _c, _d, _e, _f;
|
|
279
|
+
let key = (_c = (_b = this.name) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : (_d = this.token) === null || _d === void 0 ? void 0 : _d.toString();
|
|
280
|
+
key += (_f = (_e = this.host) === null || _e === void 0 ? void 0 : _e.name) !== null && _f !== void 0 ? _f : '';
|
|
281
|
+
return key ? deterministic_uuid_registry_1.DeterministicUuidRegistry.get(key) : (0, random_string_generator_util_1.randomStringGenerator)();
|
|
282
|
+
}
|
|
274
283
|
}
|
|
275
284
|
exports.InstanceWrapper = InstanceWrapper;
|
|
276
285
|
_a = exports.INSTANCE_METADATA_SYMBOL;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { HttpAdapterHost } from '../../helpers/http-adapter-host';
|
|
2
|
+
import { GraphInspector } from '../../inspector/graph-inspector';
|
|
2
3
|
import { DependenciesScanner } from '../../scanner';
|
|
3
4
|
import { ModuleCompiler } from '../compiler';
|
|
4
5
|
import { NestContainer } from '../container';
|
|
5
6
|
export declare class InternalCoreModuleFactory {
|
|
6
|
-
static create(container: NestContainer, scanner: DependenciesScanner, moduleCompiler: ModuleCompiler, httpAdapterHost: HttpAdapterHost): import("@nestjs/common").DynamicModule;
|
|
7
|
+
static create(container: NestContainer, scanner: DependenciesScanner, moduleCompiler: ModuleCompiler, httpAdapterHost: HttpAdapterHost, graphInspector: GraphInspector): import("@nestjs/common").DynamicModule;
|
|
7
8
|
}
|
|
@@ -4,12 +4,22 @@ exports.InternalCoreModuleFactory = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const external_context_creator_1 = require("../../helpers/external-context-creator");
|
|
6
6
|
const http_adapter_host_1 = require("../../helpers/http-adapter-host");
|
|
7
|
+
const serialized_graph_1 = require("../../inspector/serialized-graph");
|
|
8
|
+
const injector_1 = require("../injector");
|
|
7
9
|
const instance_loader_1 = require("../instance-loader");
|
|
8
10
|
const lazy_module_loader_1 = require("../lazy-module-loader/lazy-module-loader");
|
|
9
11
|
const modules_container_1 = require("../modules-container");
|
|
10
12
|
const internal_core_module_1 = require("./internal-core-module");
|
|
11
13
|
class InternalCoreModuleFactory {
|
|
12
|
-
static create(container, scanner, moduleCompiler, httpAdapterHost) {
|
|
14
|
+
static create(container, scanner, moduleCompiler, httpAdapterHost, graphInspector) {
|
|
15
|
+
const lazyModuleLoaderFactory = () => {
|
|
16
|
+
const logger = new common_1.Logger(lazy_module_loader_1.LazyModuleLoader.name, {
|
|
17
|
+
timestamp: false,
|
|
18
|
+
});
|
|
19
|
+
const injector = new injector_1.Injector();
|
|
20
|
+
const instanceLoader = new instance_loader_1.InstanceLoader(container, injector, graphInspector, logger);
|
|
21
|
+
return new lazy_module_loader_1.LazyModuleLoader(scanner, instanceLoader, moduleCompiler, container.getModules());
|
|
22
|
+
};
|
|
13
23
|
return internal_core_module_1.InternalCoreModule.register([
|
|
14
24
|
{
|
|
15
25
|
provide: external_context_creator_1.ExternalContextCreator,
|
|
@@ -29,13 +39,11 @@ class InternalCoreModuleFactory {
|
|
|
29
39
|
},
|
|
30
40
|
{
|
|
31
41
|
provide: lazy_module_loader_1.LazyModuleLoader,
|
|
32
|
-
useFactory:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return new lazy_module_loader_1.LazyModuleLoader(scanner, instanceLoader, moduleCompiler, container.getModules());
|
|
38
|
-
},
|
|
42
|
+
useFactory: lazyModuleLoaderFactory,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
provide: serialized_graph_1.SerializedGraph,
|
|
46
|
+
useValue: container.serializedGraph,
|
|
39
47
|
},
|
|
40
48
|
]);
|
|
41
49
|
}
|
package/injector/module.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EnhancerSubtype } from '@nestjs/common/constants';
|
|
1
2
|
import { ClassProvider, Controller, DynamicModule, ExistingProvider, FactoryProvider, Injectable, InjectionToken, NestModule, Provider, Type, ValueProvider } from '@nestjs/common/interfaces';
|
|
2
3
|
import { NestContainer } from './container';
|
|
3
4
|
import { InstanceWrapper } from './instance-wrapper';
|
|
@@ -18,11 +19,15 @@ export declare class Module {
|
|
|
18
19
|
private readonly _controllers;
|
|
19
20
|
private readonly _exports;
|
|
20
21
|
private _distance;
|
|
22
|
+
private _isGlobal;
|
|
21
23
|
private _token;
|
|
22
24
|
constructor(_metatype: Type<any>, container: NestContainer);
|
|
23
25
|
get id(): string;
|
|
24
26
|
get token(): string;
|
|
25
27
|
set token(token: string);
|
|
28
|
+
get name(): string;
|
|
29
|
+
get isGlobal(): boolean;
|
|
30
|
+
set isGlobal(global: boolean);
|
|
26
31
|
get providers(): Map<InstanceToken, InstanceWrapper<Injectable>>;
|
|
27
32
|
get middlewares(): Map<InstanceToken, InstanceWrapper<Injectable>>;
|
|
28
33
|
get imports(): Set<Module>;
|
|
@@ -49,19 +54,20 @@ export declare class Module {
|
|
|
49
54
|
addModuleRef(): void;
|
|
50
55
|
addModuleAsProvider(): void;
|
|
51
56
|
addApplicationConfig(): void;
|
|
52
|
-
addInjectable<T extends Injectable>(injectable: Provider, host?: Type<T>):
|
|
53
|
-
addProvider(provider: Provider): InjectionToken;
|
|
57
|
+
addInjectable<T extends Injectable>(injectable: Provider, enhancerSubtype: EnhancerSubtype, host?: Type<T>): string | symbol | Function | InstanceWrapper<unknown>;
|
|
58
|
+
addProvider(provider: Provider): Provider | InjectionToken;
|
|
59
|
+
addProvider(provider: Provider, enhancerSubtype: EnhancerSubtype): Provider | InjectionToken;
|
|
54
60
|
isCustomProvider(provider: Provider): provider is ClassProvider | FactoryProvider | ValueProvider | ExistingProvider;
|
|
55
|
-
addCustomProvider(provider: ClassProvider | FactoryProvider | ValueProvider | ExistingProvider, collection: Map<Function | string | symbol, any
|
|
61
|
+
addCustomProvider(provider: ClassProvider | FactoryProvider | ValueProvider | ExistingProvider, collection: Map<Function | string | symbol, any>, enhancerSubtype?: EnhancerSubtype): InjectionToken;
|
|
56
62
|
isCustomClass(provider: any): provider is ClassProvider;
|
|
57
63
|
isCustomValue(provider: any): provider is ValueProvider;
|
|
58
64
|
isCustomFactory(provider: any): provider is FactoryProvider;
|
|
59
65
|
isCustomUseExisting(provider: any): provider is ExistingProvider;
|
|
60
66
|
isDynamicModule(exported: any): exported is DynamicModule;
|
|
61
|
-
addCustomClass(provider: ClassProvider, collection: Map<InstanceToken, InstanceWrapper
|
|
62
|
-
addCustomValue(provider: ValueProvider, collection: Map<Function | string | symbol, InstanceWrapper
|
|
63
|
-
addCustomFactory(provider: FactoryProvider, collection: Map<Function | string | symbol, InstanceWrapper
|
|
64
|
-
addCustomUseExisting(provider: ExistingProvider, collection: Map<Function | string | symbol, InstanceWrapper
|
|
67
|
+
addCustomClass(provider: ClassProvider, collection: Map<InstanceToken, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
|
|
68
|
+
addCustomValue(provider: ValueProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
|
|
69
|
+
addCustomFactory(provider: FactoryProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
|
|
70
|
+
addCustomUseExisting(provider: ExistingProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
|
|
65
71
|
addExportedProvider(provider: Provider | string | symbol | DynamicModule): Set<InjectionToken>;
|
|
66
72
|
addCustomExportedProvider(provider: FactoryProvider | ValueProvider | ClassProvider | ExistingProvider): Set<InjectionToken>;
|
|
67
73
|
validateExportedProvider(token: InstanceToken): InjectionToken;
|
|
@@ -72,9 +78,14 @@ export declare class Module {
|
|
|
72
78
|
hasProvider(token: InstanceToken): boolean;
|
|
73
79
|
hasInjectable(token: InstanceToken): boolean;
|
|
74
80
|
getProviderByKey<T = any>(name: InstanceToken): InstanceWrapper<T>;
|
|
81
|
+
getProviderById<T = any>(id: string): InstanceWrapper<T> | undefined;
|
|
82
|
+
getControllerById<T = any>(id: string): InstanceWrapper<T> | undefined;
|
|
83
|
+
getInjectableById<T = any>(id: string): InstanceWrapper<T> | undefined;
|
|
84
|
+
getMiddlewareById<T = any>(id: string): InstanceWrapper<T> | undefined;
|
|
75
85
|
getNonAliasProviders(): Array<[
|
|
76
86
|
InstanceToken,
|
|
77
87
|
InstanceWrapper<Injectable>
|
|
78
88
|
]>;
|
|
79
89
|
createModuleReferenceType(): Type<ModuleRef>;
|
|
90
|
+
private generateUuid;
|
|
80
91
|
}
|