@nestjs/core 8.0.5 → 8.0.9
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 +9 -4
- package/adapters/http-adapter.d.ts +3 -2
- package/adapters/http-adapter.js +3 -0
- package/helpers/external-context-creator.d.ts +1 -1
- package/helpers/external-context-creator.js +4 -4
- package/hooks/before-app-shutdown.hook.js +6 -1
- package/injector/container.js +1 -1
- package/interceptors/interceptors-consumer.d.ts +1 -1
- package/interceptors/interceptors-consumer.js +4 -4
- package/package.json +4 -4
- package/pipes/pipes-consumer.js +2 -2
- package/router/router-explorer.js +9 -2
- package/router/router-module.d.ts +1 -0
- package/router/router-module.js +12 -0
- package/scanner.js +4 -2
package/Readme.md
CHANGED
|
@@ -67,8 +67,11 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
67
67
|
|
|
68
68
|
<table style="text-align:center;"><tr><td>
|
|
69
69
|
<a href="https://careers.labster.com/departments/platform" target="_blank"><img src="https://nestjs.com/img/labster-logo.png" width="170" valign="middle" /></a></td><td>
|
|
70
|
-
<a href="https://weld.
|
|
71
|
-
<
|
|
70
|
+
<a href="https://weld.app/" target="_blank"><img src="https://nestjs.com/img/weld-logo.svg" width="150" valign="middle" /></a></td>
|
|
71
|
+
<td>
|
|
72
|
+
<a href="https://valor-software.com/" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/valor-software.png" width="170" valign="middle" /></a></td>
|
|
73
|
+
<td>
|
|
74
|
+
<a href="https://intrinsic.ventures/" target="_blank"><img src="https://nestjs.com/img/intrinisic-logo.png" width="210" valign="middle" /></a></td></</tr></table>
|
|
72
75
|
|
|
73
76
|
#### Silver Sponsors
|
|
74
77
|
|
|
@@ -76,8 +79,9 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
76
79
|
<a href="https://neoteric.eu/" target="_blank"><img src="https://nestjs.com/img/neoteric-cut.png" width="120" valign="middle" /></a> </td><td>
|
|
77
80
|
<a href="http://gojob.com" target="_blank"><img src="http://nestjs.com/img/gojob-logo.png" valign="middle" width="100" /></a> </td><td>
|
|
78
81
|
<a href="http://www.leogistics.com" target="_blank"><img src="https://nestjs.com/img/leogistics-logo.jpeg" width="150" valign="middle" /></td><td>
|
|
79
|
-
<a href="http://www.meetdandy.com" target="_blank"><img src="https://nestjs.com/img/dandy-
|
|
80
|
-
<a href="https://www.castlecraft.in" target="_blank"><img src="https://nestjs.com/img/castlecraft-logo.png" width="150" valign="middle" /></td
|
|
82
|
+
<a href="http://www.meetdandy.com" target="_blank"><img src="https://nestjs.com/img/dandy-roles-logo.svg" width="150" valign="middle" /></td><td>
|
|
83
|
+
<a href="https://www.castlecraft.in" target="_blank"><img src="https://nestjs.com/img/castlecraft-logo.png" width="150" valign="middle" /></td>
|
|
84
|
+
<td><a href="https://www.tinystacks.com" target="_blank"><img src="https://nestjs.com/img/tinystacks-logo.png#1" width="140" valign="middle" /></td></tr></table>
|
|
81
85
|
|
|
82
86
|
#### Sponsors
|
|
83
87
|
|
|
@@ -108,6 +112,7 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
108
112
|
<td align="center" valign="middle"><a href="https://www.bystored.com/" target="_blank"><img src="https://nestjs.com/img/stored-logo.svg" width="110" valign="middle" /></a></td>
|
|
109
113
|
<td align="center" valign="middle"><a href="https://studyclerk.com/pay-for-research-paper" target="_blank"><img src="https://nestjs.com/img/studyclerk-logo.png" width="125" valign="middle" /></a></td><td align="center" valign="middle"><a href="https://xyndata.com" target="_blank"><img src="https://nestjs.com/img/xyndata-logo.png" width="125" valign="middle" /></a></td></tr><tr>
|
|
110
114
|
<td align="center" valign="middle"><a href="https://www.anonymistic.com/" target="_blank"><img src="https://nestjs.com/img/anonymistic-logo.png" width="125" valign="middle" /></a></td>
|
|
115
|
+
<td align="center" valign="middle"><a href="https://www.naologic.com/" target="_blank"><img src="https://nestjs.com/img/naologic-logo.svg" width="125" valign="middle" /></a></td>
|
|
111
116
|
</tr></table>
|
|
112
117
|
|
|
113
118
|
## Backers
|
|
@@ -6,9 +6,9 @@ import { NestApplicationOptions } from '@nestjs/common/interfaces/nest-applicati
|
|
|
6
6
|
* @publicApi
|
|
7
7
|
*/
|
|
8
8
|
export declare abstract class AbstractHttpAdapter<TServer = any, TRequest = any, TResponse = any> implements HttpServer<TRequest, TResponse> {
|
|
9
|
-
protected
|
|
9
|
+
protected instance?: any;
|
|
10
10
|
protected httpServer: TServer;
|
|
11
|
-
constructor(instance
|
|
11
|
+
constructor(instance?: any);
|
|
12
12
|
init(): Promise<void>;
|
|
13
13
|
use(...args: any[]): any;
|
|
14
14
|
get(handler: RequestHandler): any;
|
|
@@ -31,6 +31,7 @@ export declare abstract class AbstractHttpAdapter<TServer = any, TRequest = any,
|
|
|
31
31
|
listen(port: string | number, hostname: string, callback?: () => void): any;
|
|
32
32
|
getHttpServer(): TServer;
|
|
33
33
|
setHttpServer(httpServer: TServer): void;
|
|
34
|
+
setInstance<T = any>(instance: T): void;
|
|
34
35
|
getInstance<T = any>(): T;
|
|
35
36
|
abstract close(): any;
|
|
36
37
|
abstract initHttpServer(options: NestApplicationOptions): any;
|
package/adapters/http-adapter.js
CHANGED
|
@@ -48,7 +48,7 @@ export declare class ExternalContextCreator {
|
|
|
48
48
|
type: any;
|
|
49
49
|
data: any;
|
|
50
50
|
}, pipes: PipeTransform[]): Promise<any>;
|
|
51
|
-
transformToResult(
|
|
51
|
+
transformToResult(resultOrDeferred: any): Promise<any>;
|
|
52
52
|
createGuardsFn<TContext extends string = ContextType>(guards: any[], instance: Controller, callback: (...args: any[]) => any, contextType?: TContext): Function | null;
|
|
53
53
|
registerRequestProvider<T = any>(request: T, contextId: ContextId): void;
|
|
54
54
|
}
|
|
@@ -147,11 +147,11 @@ class ExternalContextCreator {
|
|
|
147
147
|
? value
|
|
148
148
|
: this.pipesConsumer.apply(value, { metatype, type, data }, pipes);
|
|
149
149
|
}
|
|
150
|
-
async transformToResult(
|
|
151
|
-
if (
|
|
152
|
-
return rxjs_1.lastValueFrom(
|
|
150
|
+
async transformToResult(resultOrDeferred) {
|
|
151
|
+
if (resultOrDeferred && shared_utils_1.isFunction(resultOrDeferred.subscribe)) {
|
|
152
|
+
return rxjs_1.lastValueFrom(resultOrDeferred);
|
|
153
153
|
}
|
|
154
|
-
return
|
|
154
|
+
return resultOrDeferred;
|
|
155
155
|
}
|
|
156
156
|
createGuardsFn(guards, instance, callback, contextType) {
|
|
157
157
|
const canActivateFn = async (args) => {
|
|
@@ -32,7 +32,12 @@ function callOperator(instances, signal) {
|
|
|
32
32
|
async function callBeforeAppShutdownHook(module, signal) {
|
|
33
33
|
const providers = module.getNonAliasProviders();
|
|
34
34
|
const [_, moduleClassHost] = providers.shift();
|
|
35
|
-
const instances = [
|
|
35
|
+
const instances = [
|
|
36
|
+
...module.controllers,
|
|
37
|
+
...providers,
|
|
38
|
+
...module.injectables,
|
|
39
|
+
...module.middlewares,
|
|
40
|
+
];
|
|
36
41
|
const nonTransientInstances = transient_instances_1.getNonTransientInstances(instances);
|
|
37
42
|
await Promise.all(callOperator(nonTransientInstances, signal));
|
|
38
43
|
const transientInstances = transient_instances_1.getTransientInstances(instances);
|
package/injector/container.js
CHANGED
|
@@ -47,7 +47,7 @@ class NestContainer {
|
|
|
47
47
|
}
|
|
48
48
|
const { type, dynamicMetadata, token } = await this.moduleCompiler.compile(metatype);
|
|
49
49
|
if (this.modules.has(token)) {
|
|
50
|
-
return;
|
|
50
|
+
return this.modules.get(token);
|
|
51
51
|
}
|
|
52
52
|
const moduleRef = new module_1.Module(type, this);
|
|
53
53
|
moduleRef.token = token;
|
|
@@ -5,5 +5,5 @@ import { ExecutionContextHost } from '../helpers/execution-context-host';
|
|
|
5
5
|
export declare class InterceptorsConsumer {
|
|
6
6
|
intercept<TContext extends string = ContextType>(interceptors: NestInterceptor[], args: unknown[], instance: Controller, callback: (...args: unknown[]) => unknown, next: () => Promise<unknown>, type?: TContext): Promise<unknown>;
|
|
7
7
|
createContext(args: unknown[], instance: Controller, callback: (...args: unknown[]) => unknown): ExecutionContextHost;
|
|
8
|
-
|
|
8
|
+
transformDeferred(next: () => Promise<any>): Observable<any>;
|
|
9
9
|
}
|
|
@@ -12,7 +12,7 @@ class InterceptorsConsumer {
|
|
|
12
12
|
}
|
|
13
13
|
const context = this.createContext(args, instance, callback);
|
|
14
14
|
context.setType(type);
|
|
15
|
-
const start$ = rxjs_1.defer(() => this.
|
|
15
|
+
const start$ = rxjs_1.defer(() => this.transformDeferred(next));
|
|
16
16
|
const nextFn = (i = 0) => async () => {
|
|
17
17
|
if (i >= interceptors.length) {
|
|
18
18
|
return start$;
|
|
@@ -27,10 +27,10 @@ class InterceptorsConsumer {
|
|
|
27
27
|
createContext(args, instance, callback) {
|
|
28
28
|
return new execution_context_host_1.ExecutionContextHost(args, instance.constructor, callback);
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
transformDeferred(next) {
|
|
31
31
|
return rxjs_1.from(next()).pipe(operators_1.switchMap(res => {
|
|
32
|
-
const
|
|
33
|
-
return
|
|
32
|
+
const isDeferred = res instanceof Promise || res instanceof rxjs_1.Observable;
|
|
33
|
+
return isDeferred ? res : Promise.resolve(res);
|
|
34
34
|
}));
|
|
35
35
|
}
|
|
36
36
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/core",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.9",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@core)",
|
|
5
5
|
"author": "Kamil Mysliwiec",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@nuxtjs/opencollective": "0.3.2",
|
|
31
|
-
"fast-safe-stringify": "2.
|
|
31
|
+
"fast-safe-stringify": "2.1.1",
|
|
32
32
|
"iterare": "1.2.1",
|
|
33
33
|
"object-hash": "2.2.0",
|
|
34
34
|
"path-to-regexp": "3.2.0",
|
|
35
|
-
"tslib": "2.3.
|
|
35
|
+
"tslib": "2.3.1",
|
|
36
36
|
"uuid": "8.3.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@nestjs/common": "8.0.
|
|
39
|
+
"@nestjs/common": "8.0.9"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@nestjs/common": "^8.0.0",
|
package/pipes/pipes-consumer.js
CHANGED
|
@@ -11,8 +11,8 @@ class PipesConsumer {
|
|
|
11
11
|
return this.applyPipes(value, { metatype, type: token, data }, pipes);
|
|
12
12
|
}
|
|
13
13
|
async applyPipes(value, { metatype, type, data }, transforms) {
|
|
14
|
-
return transforms.reduce(async (
|
|
15
|
-
const val = await
|
|
14
|
+
return transforms.reduce(async (deferredValue, pipe) => {
|
|
15
|
+
const val = await deferredValue;
|
|
16
16
|
const result = pipe.transform(val, { metatype, type, data });
|
|
17
17
|
return result;
|
|
18
18
|
}, Promise.resolve(value));
|
|
@@ -112,7 +112,7 @@ class RouterExplorer {
|
|
|
112
112
|
if (isVersioned &&
|
|
113
113
|
routePathMetadata.versioningOptions.type !== version_type_enum_1.VersioningType.URI) {
|
|
114
114
|
// All versioning (except for URI Versioning) is done via the "Version Filter"
|
|
115
|
-
routeHandler = this.applyVersionFilter(routePathMetadata, routeHandler);
|
|
115
|
+
routeHandler = this.applyVersionFilter(router, routePathMetadata, routeHandler);
|
|
116
116
|
}
|
|
117
117
|
routePathMetadata.methodPath = path;
|
|
118
118
|
const pathsToRegister = this.routePathFactory.create(routePathMetadata, requestMethod);
|
|
@@ -159,9 +159,16 @@ class RouterExplorer {
|
|
|
159
159
|
return next();
|
|
160
160
|
};
|
|
161
161
|
}
|
|
162
|
-
applyVersionFilter(routePathMetadata, handler) {
|
|
162
|
+
applyVersionFilter(router, routePathMetadata, handler) {
|
|
163
163
|
const { versioningOptions } = routePathMetadata;
|
|
164
164
|
const version = this.routePathFactory.getVersion(routePathMetadata);
|
|
165
|
+
if (router === null || router === void 0 ? void 0 : router.applyVersionFilter) {
|
|
166
|
+
return router.applyVersionFilter(handler, version, versioningOptions);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* This can be removed in the next major release.
|
|
170
|
+
* Left for backward-compatibility.
|
|
171
|
+
*/
|
|
165
172
|
return (req, res, next) => {
|
|
166
173
|
var _a, _b, _c, _d;
|
|
167
174
|
if (version === version_options_interface_1.VERSION_NEUTRAL) {
|
|
@@ -12,6 +12,7 @@ export declare class RouterModule {
|
|
|
12
12
|
private readonly routes;
|
|
13
13
|
constructor(modulesContainer: ModulesContainer, routes: Routes);
|
|
14
14
|
static register(routes: Routes): DynamicModule;
|
|
15
|
+
private deepCloneRoutes;
|
|
15
16
|
private initialize;
|
|
16
17
|
private registerModulePathMetadata;
|
|
17
18
|
private updateTargetModulesCache;
|
package/router/router-module.js
CHANGED
|
@@ -17,6 +17,7 @@ let RouterModule = RouterModule_1 = class RouterModule {
|
|
|
17
17
|
constructor(modulesContainer, routes) {
|
|
18
18
|
this.modulesContainer = modulesContainer;
|
|
19
19
|
this.routes = routes;
|
|
20
|
+
this.routes = this.deepCloneRoutes(routes);
|
|
20
21
|
this.initialize();
|
|
21
22
|
}
|
|
22
23
|
static register(routes) {
|
|
@@ -30,6 +31,17 @@ let RouterModule = RouterModule_1 = class RouterModule {
|
|
|
30
31
|
],
|
|
31
32
|
};
|
|
32
33
|
}
|
|
34
|
+
deepCloneRoutes(routes) {
|
|
35
|
+
return routes.map((routeOrType) => {
|
|
36
|
+
if (typeof routeOrType === 'function') {
|
|
37
|
+
return routeOrType;
|
|
38
|
+
}
|
|
39
|
+
if (routeOrType.children) {
|
|
40
|
+
return Object.assign(Object.assign({}, routeOrType), { children: this.deepCloneRoutes(routeOrType.children) });
|
|
41
|
+
}
|
|
42
|
+
return Object.assign({}, routeOrType);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
33
45
|
initialize() {
|
|
34
46
|
const flattenedRoutes = utils_1.flattenRoutePaths(this.routes);
|
|
35
47
|
flattenedRoutes.forEach(route => {
|
package/scanner.js
CHANGED
|
@@ -166,8 +166,10 @@ class DependenciesScanner {
|
|
|
166
166
|
modulesStack.push(moduleRef);
|
|
167
167
|
const moduleImports = moduleRef.imports;
|
|
168
168
|
moduleImports.forEach(importedModuleRef => {
|
|
169
|
-
importedModuleRef
|
|
170
|
-
|
|
169
|
+
if (importedModuleRef) {
|
|
170
|
+
importedModuleRef.distance = distance;
|
|
171
|
+
calculateDistance(importedModuleRef, distance + 1);
|
|
172
|
+
}
|
|
171
173
|
});
|
|
172
174
|
};
|
|
173
175
|
const rootModule = modulesGenerator.next().value;
|