@nestjs/core 9.4.3 → 10.0.1
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/adapters/http-adapter.d.ts +2 -0
- package/adapters/http-adapter.js +3 -0
- package/discovery/discovery-module.js +2 -3
- package/discovery/discovery-service.js +2 -3
- package/errors/exception-handler.js +1 -1
- package/errors/exceptions-zone.js +1 -1
- package/errors/messages.js +7 -8
- package/exceptions/base-exception-filter.js +2 -2
- package/exceptions/exceptions-handler.d.ts +1 -1
- package/exceptions/exceptions-handler.js +3 -6
- package/exceptions/external-exception-filter.js +1 -1
- package/exceptions/external-exceptions-handler.d.ts +1 -1
- package/exceptions/external-exceptions-handler.js +3 -6
- package/helpers/context-id-factory.js +1 -2
- package/helpers/context-utils.js +4 -1
- package/helpers/execution-context-host.js +1 -0
- package/injector/abstract-instance-resolver.js +1 -1
- package/injector/compiler.js +2 -3
- package/injector/container.d.ts +6 -1
- package/injector/container.js +23 -3
- package/injector/helpers/provider-classifier.js +2 -2
- package/injector/helpers/transient-instances.d.ts +3 -3
- package/injector/injector.d.ts +7 -7
- package/injector/injector.js +24 -20
- package/injector/instance-links-host.d.ts +4 -4
- package/injector/instance-links-host.js +1 -1
- package/injector/instance-wrapper.d.ts +4 -4
- package/injector/instance-wrapper.js +17 -10
- package/injector/internal-core-module/internal-core-module-factory.d.ts +2 -1
- package/injector/internal-core-module/internal-core-module-factory.js +2 -6
- package/injector/internal-core-module/internal-core-module.js +2 -3
- package/injector/lazy-module-loader/lazy-module-loader.d.ts +3 -1
- package/injector/lazy-module-loader/lazy-module-loader.js +7 -3
- package/injector/module.d.ts +12 -29
- package/injector/module.js +14 -32
- package/inspector/deterministic-uuid-registry.js +1 -1
- package/inspector/graph-inspector.js +18 -14
- package/inspector/initialize-on-preview.allowlist.js +1 -1
- package/inspector/partial-graph.host.js +2 -4
- package/inspector/serialized-graph.js +15 -8
- package/inspector/uuid-factory.js +2 -2
- package/interceptors/interceptors-consumer.js +4 -5
- package/middleware/builder.js +26 -3
- package/middleware/container.d.ts +2 -2
- package/middleware/container.js +1 -2
- package/middleware/middleware-module.js +4 -4
- package/middleware/route-info-path-extractor.js +1 -2
- package/middleware/routes-mapper.d.ts +5 -2
- package/middleware/routes-mapper.js +45 -26
- package/middleware/utils.js +2 -3
- package/nest-application-context.js +3 -5
- package/nest-application.js +9 -10
- package/nest-factory.js +3 -3
- package/package.json +6 -6
- package/repl/native-functions/help-repl-fn.js +1 -1
- package/repl/native-functions/methods-repl-fn.js +1 -1
- package/repl/repl-context.js +6 -5
- package/repl/repl-logger.js +1 -1
- package/repl/repl-native-commands.js +1 -1
- package/router/route-path-factory.d.ts +4 -2
- package/router/route-path-factory.js +20 -4
- package/router/router-execution-context.js +1 -2
- package/router/router-explorer.js +12 -2
- package/router/router-module.js +8 -6
- package/router/routes-resolver.js +3 -3
- package/router/sse-stream.js +9 -4
- package/scanner.d.ts +17 -3
- package/scanner.js +49 -10
- package/services/reflector.service.js +4 -1
package/router/router-module.js
CHANGED
|
@@ -13,7 +13,7 @@ exports.targetModulesByContainer = new WeakMap();
|
|
|
13
13
|
/**
|
|
14
14
|
* @publicApi
|
|
15
15
|
*/
|
|
16
|
-
let RouterModule = RouterModule_1 = class RouterModule {
|
|
16
|
+
let RouterModule = exports.RouterModule = RouterModule_1 = class RouterModule {
|
|
17
17
|
constructor(modulesContainer, routes) {
|
|
18
18
|
this.modulesContainer = modulesContainer;
|
|
19
19
|
this.routes = routes;
|
|
@@ -37,9 +37,12 @@ let RouterModule = RouterModule_1 = class RouterModule {
|
|
|
37
37
|
return routeOrType;
|
|
38
38
|
}
|
|
39
39
|
if (routeOrType.children) {
|
|
40
|
-
return
|
|
40
|
+
return {
|
|
41
|
+
...routeOrType,
|
|
42
|
+
children: this.deepCloneRoutes(routeOrType.children),
|
|
43
|
+
};
|
|
41
44
|
}
|
|
42
|
-
return
|
|
45
|
+
return { ...routeOrType };
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
initialize() {
|
|
@@ -62,16 +65,15 @@ let RouterModule = RouterModule_1 = class RouterModule {
|
|
|
62
65
|
moduleClassSet = new WeakSet();
|
|
63
66
|
exports.targetModulesByContainer.set(this.modulesContainer, moduleClassSet);
|
|
64
67
|
}
|
|
65
|
-
const moduleRef = Array.from(this.modulesContainer.values()).find(item =>
|
|
68
|
+
const moduleRef = Array.from(this.modulesContainer.values()).find(item => item?.metatype === moduleCtor);
|
|
66
69
|
if (!moduleRef) {
|
|
67
70
|
return;
|
|
68
71
|
}
|
|
69
72
|
moduleClassSet.add(moduleRef);
|
|
70
73
|
}
|
|
71
74
|
};
|
|
72
|
-
RouterModule = RouterModule_1 = tslib_1.__decorate([
|
|
75
|
+
exports.RouterModule = RouterModule = RouterModule_1 = tslib_1.__decorate([
|
|
73
76
|
(0, common_1.Module)({}),
|
|
74
77
|
tslib_1.__param(1, (0, common_1.Inject)(exports.ROUTES)),
|
|
75
78
|
tslib_1.__metadata("design:paramtypes", [modules_container_1.ModulesContainer, Array])
|
|
76
79
|
], RouterModule);
|
|
77
|
-
exports.RouterModule = RouterModule;
|
|
@@ -105,16 +105,16 @@ class RoutesResolver {
|
|
|
105
105
|
getModulePathMetadata(metatype) {
|
|
106
106
|
const modulesContainer = this.container.getModules();
|
|
107
107
|
const modulePath = Reflect.getMetadata(constants_1.MODULE_PATH + modulesContainer.applicationId, metatype);
|
|
108
|
-
return modulePath
|
|
108
|
+
return modulePath ?? Reflect.getMetadata(constants_1.MODULE_PATH, metatype);
|
|
109
109
|
}
|
|
110
110
|
getHostMetadata(metatype) {
|
|
111
111
|
return Reflect.getMetadata(constants_1.HOST_METADATA, metatype);
|
|
112
112
|
}
|
|
113
113
|
getVersionMetadata(metatype) {
|
|
114
|
-
var _a;
|
|
115
114
|
const versioningConfig = this.applicationConfig.getVersioning();
|
|
116
115
|
if (versioningConfig) {
|
|
117
|
-
return (
|
|
116
|
+
return (Reflect.getMetadata(constants_1.VERSION_METADATA, metatype) ??
|
|
117
|
+
versioningConfig.defaultVersion);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
}
|
package/router/sse-stream.js
CHANGED
|
@@ -37,13 +37,18 @@ class SseStream extends stream_1.Transform {
|
|
|
37
37
|
}
|
|
38
38
|
pipe(destination, options) {
|
|
39
39
|
if (destination.writeHead) {
|
|
40
|
-
destination.writeHead(200,
|
|
40
|
+
destination.writeHead(200, {
|
|
41
|
+
...options?.additionalHeaders,
|
|
41
42
|
// See https://github.com/dunglas/mercure/blob/master/hub/subscribe.go#L124-L130
|
|
42
|
-
'Content-Type': 'text/event-stream',
|
|
43
|
+
'Content-Type': 'text/event-stream',
|
|
44
|
+
Connection: 'keep-alive',
|
|
43
45
|
// Disable cache, even for old browsers and proxies
|
|
44
|
-
'Cache-Control': 'private, no-cache, no-store, must-revalidate, max-age=0, no-transform',
|
|
46
|
+
'Cache-Control': 'private, no-cache, no-store, must-revalidate, max-age=0, no-transform',
|
|
47
|
+
Pragma: 'no-cache',
|
|
48
|
+
Expire: '0',
|
|
45
49
|
// NGINX support https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-buffering
|
|
46
|
-
'X-Accel-Buffering': 'no'
|
|
50
|
+
'X-Accel-Buffering': 'no',
|
|
51
|
+
});
|
|
47
52
|
destination.flushHeaders();
|
|
48
53
|
}
|
|
49
54
|
destination.write('\n');
|
package/scanner.d.ts
CHANGED
|
@@ -6,7 +6,15 @@ import { NestContainer } from './injector/container';
|
|
|
6
6
|
import { InstanceWrapper } from './injector/instance-wrapper';
|
|
7
7
|
import { Module } from './injector/module';
|
|
8
8
|
import { GraphInspector } from './inspector/graph-inspector';
|
|
9
|
+
import { ModuleDefinition } from './interfaces/module-definition.interface';
|
|
10
|
+
import { ModuleOverride } from './interfaces/module-override.interface';
|
|
9
11
|
import { MetadataScanner } from './metadata-scanner';
|
|
12
|
+
interface ModulesScanParameters {
|
|
13
|
+
moduleDefinition: ModuleDefinition;
|
|
14
|
+
scope?: Type<unknown>[];
|
|
15
|
+
ctxRegistry?: (ForwardReference | DynamicModule | Type<unknown>)[];
|
|
16
|
+
overrides?: ModuleOverride[];
|
|
17
|
+
}
|
|
10
18
|
export declare class DependenciesScanner {
|
|
11
19
|
private readonly container;
|
|
12
20
|
private readonly metadataScanner;
|
|
@@ -14,8 +22,10 @@ export declare class DependenciesScanner {
|
|
|
14
22
|
private readonly applicationConfig;
|
|
15
23
|
private readonly applicationProvidersApplyMap;
|
|
16
24
|
constructor(container: NestContainer, metadataScanner: MetadataScanner, graphInspector: GraphInspector, applicationConfig?: ApplicationConfig);
|
|
17
|
-
scan(module: Type<any
|
|
18
|
-
|
|
25
|
+
scan(module: Type<any>, options?: {
|
|
26
|
+
overrides?: ModuleOverride[];
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
scanForModules({ moduleDefinition, scope, ctxRegistry, overrides, }: ModulesScanParameters): Promise<Module[]>;
|
|
19
29
|
insertModule(moduleDefinition: any, scope: Type<unknown>[]): Promise<Module | undefined>;
|
|
20
30
|
scanModulesForDependencies(modules?: Map<string, Module>): Promise<void>;
|
|
21
31
|
reflectImports(module: Type<unknown>, token: string, context: string): Promise<void>;
|
|
@@ -36,8 +46,11 @@ export declare class DependenciesScanner {
|
|
|
36
46
|
insertInjectable(injectable: Type<Injectable> | object, token: string, host: Type<Injectable>, subtype: EnhancerSubtype, methodKey?: string): InstanceWrapper<any>;
|
|
37
47
|
insertExportedProvider(exportedProvider: Type<Injectable>, token: string): void;
|
|
38
48
|
insertController(controller: Type<Controller>, token: string): void;
|
|
49
|
+
private insertOrOverrideModule;
|
|
50
|
+
private getOverrideModuleByModule;
|
|
51
|
+
private overrideModule;
|
|
39
52
|
reflectMetadata<T = any>(metadataKey: string, metatype: Type<any>): T[];
|
|
40
|
-
registerCoreModule(): Promise<void>;
|
|
53
|
+
registerCoreModule(overrides?: ModuleOverride[]): Promise<void>;
|
|
41
54
|
/**
|
|
42
55
|
* Add either request or transient globally scoped enhancers
|
|
43
56
|
* to all controllers metadata storage
|
|
@@ -69,3 +82,4 @@ export declare class DependenciesScanner {
|
|
|
69
82
|
private isForwardReference;
|
|
70
83
|
private isRequestOrTransient;
|
|
71
84
|
}
|
|
85
|
+
export {};
|
package/scanner.js
CHANGED
|
@@ -22,16 +22,22 @@ class DependenciesScanner {
|
|
|
22
22
|
this.applicationConfig = applicationConfig;
|
|
23
23
|
this.applicationProvidersApplyMap = [];
|
|
24
24
|
}
|
|
25
|
-
async scan(module) {
|
|
26
|
-
await this.registerCoreModule();
|
|
27
|
-
await this.scanForModules(
|
|
25
|
+
async scan(module, options) {
|
|
26
|
+
await this.registerCoreModule(options?.overrides);
|
|
27
|
+
await this.scanForModules({
|
|
28
|
+
moduleDefinition: module,
|
|
29
|
+
overrides: options?.overrides,
|
|
30
|
+
});
|
|
28
31
|
await this.scanModulesForDependencies();
|
|
29
32
|
this.calculateModulesDistance();
|
|
30
33
|
this.addScopedEnhancersMetadata();
|
|
31
34
|
this.container.bindGlobalScope();
|
|
32
35
|
}
|
|
33
|
-
async scanForModules(moduleDefinition, scope = [], ctxRegistry = []) {
|
|
34
|
-
const moduleInstance = await this.
|
|
36
|
+
async scanForModules({ moduleDefinition, scope = [], ctxRegistry = [], overrides = [], }) {
|
|
37
|
+
const moduleInstance = await this.insertOrOverrideModule(moduleDefinition, overrides, scope);
|
|
38
|
+
moduleDefinition =
|
|
39
|
+
this.getOverrideModuleByModule(moduleDefinition, overrides)?.newModule ??
|
|
40
|
+
moduleDefinition;
|
|
35
41
|
moduleDefinition =
|
|
36
42
|
moduleDefinition instanceof Promise
|
|
37
43
|
? await moduleDefinition
|
|
@@ -58,7 +64,12 @@ class DependenciesScanner {
|
|
|
58
64
|
if (ctxRegistry.includes(innerModule)) {
|
|
59
65
|
continue;
|
|
60
66
|
}
|
|
61
|
-
const moduleRefs = await this.scanForModules(
|
|
67
|
+
const moduleRefs = await this.scanForModules({
|
|
68
|
+
moduleDefinition: innerModule,
|
|
69
|
+
scope: [].concat(scope, moduleDefinition),
|
|
70
|
+
ctxRegistry,
|
|
71
|
+
overrides,
|
|
72
|
+
});
|
|
62
73
|
registeredModuleRefs = registeredModuleRefs.concat(moduleRefs);
|
|
63
74
|
}
|
|
64
75
|
if (!moduleInstance) {
|
|
@@ -236,7 +247,11 @@ class DependenciesScanner {
|
|
|
236
247
|
providerKey: providerToken,
|
|
237
248
|
scope,
|
|
238
249
|
});
|
|
239
|
-
const newProvider =
|
|
250
|
+
const newProvider = {
|
|
251
|
+
...provider,
|
|
252
|
+
provide: providerToken,
|
|
253
|
+
scope,
|
|
254
|
+
};
|
|
240
255
|
const enhancerSubtype = constants_2.ENHANCER_TOKEN_TO_SUBTYPE_MAP[type];
|
|
241
256
|
const factoryOrClassProvider = newProvider;
|
|
242
257
|
if (this.isRequestOrTransient(factoryOrClassProvider.scope)) {
|
|
@@ -273,12 +288,36 @@ class DependenciesScanner {
|
|
|
273
288
|
insertController(controller, token) {
|
|
274
289
|
this.container.addController(controller, token);
|
|
275
290
|
}
|
|
291
|
+
insertOrOverrideModule(moduleDefinition, overrides, scope) {
|
|
292
|
+
const overrideModule = this.getOverrideModuleByModule(moduleDefinition, overrides);
|
|
293
|
+
if (overrideModule !== undefined) {
|
|
294
|
+
return this.overrideModule(moduleDefinition, overrideModule.newModule, scope);
|
|
295
|
+
}
|
|
296
|
+
return this.insertModule(moduleDefinition, scope);
|
|
297
|
+
}
|
|
298
|
+
getOverrideModuleByModule(module, overrides) {
|
|
299
|
+
if (this.isForwardReference(module)) {
|
|
300
|
+
return overrides.find(moduleToOverride => {
|
|
301
|
+
return (moduleToOverride.moduleToReplace === module.forwardRef() ||
|
|
302
|
+
moduleToOverride.moduleToReplace.forwardRef?.() === module.forwardRef());
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return overrides.find(moduleToOverride => moduleToOverride.moduleToReplace === module);
|
|
306
|
+
}
|
|
307
|
+
async overrideModule(moduleToOverride, newModule, scope) {
|
|
308
|
+
return this.container.replaceModule(this.isForwardReference(moduleToOverride)
|
|
309
|
+
? moduleToOverride.forwardRef()
|
|
310
|
+
: moduleToOverride, this.isForwardReference(newModule) ? newModule.forwardRef() : newModule, scope);
|
|
311
|
+
}
|
|
276
312
|
reflectMetadata(metadataKey, metatype) {
|
|
277
313
|
return Reflect.getMetadata(metadataKey, metatype) || [];
|
|
278
314
|
}
|
|
279
|
-
async registerCoreModule() {
|
|
280
|
-
const moduleDefinition = internal_core_module_factory_1.InternalCoreModuleFactory.create(this.container, this, this.container.getModuleCompiler(), this.container.getHttpAdapterHostRef(), this.graphInspector);
|
|
281
|
-
const [instance] = await this.scanForModules(
|
|
315
|
+
async registerCoreModule(overrides) {
|
|
316
|
+
const moduleDefinition = internal_core_module_factory_1.InternalCoreModuleFactory.create(this.container, this, this.container.getModuleCompiler(), this.container.getHttpAdapterHostRef(), this.graphInspector, overrides);
|
|
317
|
+
const [instance] = await this.scanForModules({
|
|
318
|
+
moduleDefinition,
|
|
319
|
+
overrides,
|
|
320
|
+
});
|
|
282
321
|
this.container.registerCoreModuleRef(instance);
|
|
283
322
|
}
|
|
284
323
|
/**
|