1 | "use strict";
|
2 | var RouterModule_1;
|
3 | Object.defineProperty(exports, "__esModule", { value: true });
|
4 | exports.RouterModule = exports.targetModulesByContainer = exports.ROUTES = void 0;
|
5 | const tslib_1 = require("tslib");
|
6 | const common_1 = require("@nestjs/common");
|
7 | const constants_1 = require("@nestjs/common/constants");
|
8 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
9 | const modules_container_1 = require("../injector/modules-container");
|
10 | const utils_1 = require("./utils");
|
11 | exports.ROUTES = Symbol('ROUTES');
|
12 | exports.targetModulesByContainer = new WeakMap();
|
13 |
|
14 |
|
15 |
|
16 | let RouterModule = RouterModule_1 = class RouterModule {
|
17 | constructor(modulesContainer, routes) {
|
18 | this.modulesContainer = modulesContainer;
|
19 | this.routes = routes;
|
20 | this.initialize();
|
21 | }
|
22 | static register(routes) {
|
23 | return {
|
24 | module: RouterModule_1,
|
25 | providers: [
|
26 | {
|
27 | provide: exports.ROUTES,
|
28 | useValue: routes,
|
29 | },
|
30 | ],
|
31 | };
|
32 | }
|
33 | initialize() {
|
34 | const flattenedRoutes = utils_1.flattenRoutePaths(this.routes);
|
35 | flattenedRoutes.forEach(route => {
|
36 | const modulePath = shared_utils_1.normalizePath(route.path);
|
37 | this.registerModulePathMetadata(route.module, modulePath);
|
38 | this.updateTargetModulesCache(route.module);
|
39 | });
|
40 | }
|
41 | registerModulePathMetadata(moduleCtor, modulePath) {
|
42 | Reflect.defineMetadata(constants_1.MODULE_PATH + this.modulesContainer.applicationId, modulePath, moduleCtor);
|
43 | }
|
44 | updateTargetModulesCache(moduleCtor) {
|
45 | let moduleClassSet;
|
46 | if (exports.targetModulesByContainer.has(this.modulesContainer)) {
|
47 | moduleClassSet = exports.targetModulesByContainer.get(this.modulesContainer);
|
48 | }
|
49 | else {
|
50 | moduleClassSet = new WeakSet();
|
51 | exports.targetModulesByContainer.set(this.modulesContainer, moduleClassSet);
|
52 | }
|
53 | const moduleRef = Array.from(this.modulesContainer.values()).find(item => (item === null || item === void 0 ? void 0 : item.metatype) === moduleCtor);
|
54 | if (!moduleRef) {
|
55 | return;
|
56 | }
|
57 | moduleClassSet.add(moduleRef);
|
58 | }
|
59 | };
|
60 | RouterModule = RouterModule_1 = tslib_1.__decorate([
|
61 | common_1.Module({}),
|
62 | tslib_1.__param(1, common_1.Inject(exports.ROUTES)),
|
63 | tslib_1.__metadata("design:paramtypes", [modules_container_1.ModulesContainer, Array])
|
64 | ], RouterModule);
|
65 | exports.RouterModule = RouterModule;
|