@nestjs/core 8.0.4 → 8.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/injector.js +5 -1
- package/interceptors/interceptors-consumer.d.ts +1 -1
- package/interceptors/interceptors-consumer.js +4 -4
- package/middleware/middleware-module.js +18 -7
- package/middleware/utils.d.ts +2 -0
- package/middleware/utils.js +6 -5
- 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" width="55" 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/injector.js
CHANGED
|
@@ -78,7 +78,7 @@ class Injector {
|
|
|
78
78
|
return done;
|
|
79
79
|
}
|
|
80
80
|
async resolveConstructorParams(wrapper, moduleRef, inject, callback, contextId = constants_2.STATIC_CONTEXT, inquirer, parentInquirer) {
|
|
81
|
-
|
|
81
|
+
let inquirerId = this.getInquirerId(inquirer);
|
|
82
82
|
const metadata = wrapper.getCtorMetadata();
|
|
83
83
|
if (metadata && contextId !== constants_2.STATIC_CONTEXT) {
|
|
84
84
|
const deps = await this.loadCtorMetadata(metadata, contextId, inquirer, parentInquirer);
|
|
@@ -96,6 +96,10 @@ class Injector {
|
|
|
96
96
|
if (this.isInquirer(param, parentInquirer)) {
|
|
97
97
|
return parentInquirer && parentInquirer.instance;
|
|
98
98
|
}
|
|
99
|
+
if ((inquirer === null || inquirer === void 0 ? void 0 : inquirer.isTransient) && parentInquirer) {
|
|
100
|
+
inquirer = parentInquirer;
|
|
101
|
+
inquirerId = this.getInquirerId(parentInquirer);
|
|
102
|
+
}
|
|
99
103
|
const paramWrapper = await this.resolveSingleParam(wrapper, param, { index, dependencies }, moduleRef, contextId, inquirer, index);
|
|
100
104
|
const instanceHost = paramWrapper.getInstanceByContextId(contextId, inquirerId);
|
|
101
105
|
if (!instanceHost.isResolved && !paramWrapper.forwardRef) {
|
|
@@ -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
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MiddlewareModule = void 0;
|
|
4
|
+
const request_method_enum_1 = require("@nestjs/common/enums/request-method.enum");
|
|
4
5
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
5
6
|
const invalid_middleware_exception_1 = require("../errors/exceptions/invalid-middleware.exception");
|
|
6
7
|
const runtime_exception_1 = require("../errors/exceptions/runtime.exception");
|
|
@@ -13,6 +14,7 @@ const router_proxy_1 = require("../router/router-proxy");
|
|
|
13
14
|
const builder_1 = require("./builder");
|
|
14
15
|
const resolver_1 = require("./resolver");
|
|
15
16
|
const routes_mapper_1 = require("./routes-mapper");
|
|
17
|
+
const utils_1 = require("./utils");
|
|
16
18
|
class MiddlewareModule {
|
|
17
19
|
constructor() {
|
|
18
20
|
this.routerProxy = new router_proxy_1.RouterProxy();
|
|
@@ -92,13 +94,12 @@ class MiddlewareModule {
|
|
|
92
94
|
if (shared_utils_1.isUndefined(instance === null || instance === void 0 ? void 0 : instance.use)) {
|
|
93
95
|
throw new invalid_middleware_exception_1.InvalidMiddlewareException(metatype.name);
|
|
94
96
|
}
|
|
95
|
-
const router = await applicationRef.createMiddlewareFactory(method);
|
|
96
97
|
const isStatic = wrapper.isDependencyTreeStatic();
|
|
97
98
|
if (isStatic) {
|
|
98
99
|
const proxy = await this.createProxy(instance);
|
|
99
|
-
return this.registerHandler(
|
|
100
|
+
return this.registerHandler(applicationRef, method, path, proxy);
|
|
100
101
|
}
|
|
101
|
-
this.registerHandler(
|
|
102
|
+
await this.registerHandler(applicationRef, method, path, async (req, res, next) => {
|
|
102
103
|
try {
|
|
103
104
|
const contextId = context_id_factory_1.ContextIdFactory.getByRequest(req);
|
|
104
105
|
if (!req[request_constants_1.REQUEST_CONTEXT_ID]) {
|
|
@@ -130,15 +131,25 @@ class MiddlewareModule {
|
|
|
130
131
|
const middleware = instance.use.bind(instance);
|
|
131
132
|
return this.routerProxy.createProxy(middleware, exceptionsHandler);
|
|
132
133
|
}
|
|
133
|
-
registerHandler(
|
|
134
|
+
async registerHandler(applicationRef, method, path, proxy) {
|
|
134
135
|
const prefix = this.config.getGlobalPrefix();
|
|
135
136
|
const basePath = shared_utils_1.addLeadingSlash(prefix);
|
|
136
|
-
if (basePath && path === '
|
|
137
|
+
if ((basePath === null || basePath === void 0 ? void 0 : basePath.endsWith('/')) && (path === null || path === void 0 ? void 0 : path.startsWith('/'))) {
|
|
137
138
|
// strip slash when a wildcard is being used
|
|
138
139
|
// and global prefix has been set
|
|
139
|
-
path =
|
|
140
|
+
path = path === null || path === void 0 ? void 0 : path.slice(1);
|
|
140
141
|
}
|
|
141
|
-
|
|
142
|
+
const isMethodAll = utils_1.isRequestMethodAll(method);
|
|
143
|
+
const requestMethod = request_method_enum_1.RequestMethod[method];
|
|
144
|
+
const router = await applicationRef.createMiddlewareFactory(method);
|
|
145
|
+
router(basePath + path, isMethodAll
|
|
146
|
+
? proxy
|
|
147
|
+
: (req, res, next) => {
|
|
148
|
+
if (applicationRef.getRequestMethod(req) === requestMethod) {
|
|
149
|
+
return proxy(req, res, next);
|
|
150
|
+
}
|
|
151
|
+
return next();
|
|
152
|
+
});
|
|
142
153
|
}
|
|
143
154
|
}
|
|
144
155
|
exports.MiddlewareModule = MiddlewareModule;
|
package/middleware/utils.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { RequestMethod } from '@nestjs/common';
|
|
1
2
|
import { HttpServer, RouteInfo, Type } from '@nestjs/common/interfaces';
|
|
2
3
|
declare type RouteInfoRegex = RouteInfo & {
|
|
3
4
|
regex: RegExp;
|
|
4
5
|
};
|
|
6
|
+
export declare const isRequestMethodAll: (method: RequestMethod) => boolean;
|
|
5
7
|
export declare const filterMiddleware: <T extends Function | Type<any> = any>(middleware: T[], excludedRoutes: RouteInfo[], httpAdapter: HttpServer) => Type<any>[];
|
|
6
8
|
export declare const mapToClass: <T extends Function | Type<any>>(middleware: T, excludedRoutes: RouteInfoRegex[], httpAdapter: HttpServer) => Type<any>;
|
|
7
9
|
export declare function isMiddlewareClass(middleware: any): middleware is Type<any>;
|
package/middleware/utils.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isRouteExcluded = exports.assignToken = exports.isMiddlewareClass = exports.mapToClass = exports.filterMiddleware = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
3
|
+
exports.isRouteExcluded = exports.assignToken = exports.isMiddlewareClass = exports.mapToClass = exports.filterMiddleware = exports.isRequestMethodAll = void 0;
|
|
5
4
|
const common_1 = require("@nestjs/common");
|
|
6
5
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
7
6
|
const iterare_1 = require("iterare");
|
|
8
7
|
const pathToRegexp = require("path-to-regexp");
|
|
9
8
|
const uuid_1 = require("uuid");
|
|
9
|
+
const isRequestMethodAll = (method) => {
|
|
10
|
+
return common_1.RequestMethod.ALL === method || method === -1;
|
|
11
|
+
};
|
|
12
|
+
exports.isRequestMethodAll = isRequestMethodAll;
|
|
10
13
|
const filterMiddleware = (middleware, excludedRoutes, httpAdapter) => {
|
|
11
14
|
const excluded = excludedRoutes.map(route => (Object.assign(Object.assign({}, route), { regex: pathToRegexp(route.path) })));
|
|
12
15
|
return iterare_1.iterate([])
|
|
@@ -75,9 +78,7 @@ function isRouteExcluded(req, excludedRoutes, httpAdapter) {
|
|
|
75
78
|
? originalUrl.slice(0, queryParamsIndex)
|
|
76
79
|
: originalUrl;
|
|
77
80
|
const isExcluded = excludedRoutes.some(({ method, regex }) => {
|
|
78
|
-
if (common_1.RequestMethod
|
|
79
|
-
common_1.RequestMethod[method] === reqMethod ||
|
|
80
|
-
method === -1) {
|
|
81
|
+
if (exports.isRequestMethodAll(method) || common_1.RequestMethod[method] === reqMethod) {
|
|
81
82
|
return regex.exec(pathname);
|
|
82
83
|
}
|
|
83
84
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/core",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.8",
|
|
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.8"
|
|
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;
|