UNPKG

@nestjs-mod/common

Version:

A collection of utilities for unifying NestJS applications and modules

100 lines 4.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bootstrapNestApplicationWithOptions = bootstrapNestApplicationWithOptions; exports.bootstrapNestApplication = bootstrapNestApplication; const common_1 = require("@nestjs/common"); const types_1 = require("../nest-module/types"); const utils_1 = require("../nest-module/utils"); const is_infrastructure_1 = require("../utils/is-infrastructure"); const errors_1 = require("./errors"); async function bootstrapNestApplicationWithOptions({ modules, project, logger, wrapApplicationMethods, globalConfigurationOptions, globalEnvironmentsOptions, }) { let app = undefined; const categories = types_1.NEST_MODULE_CATEGORY_LIST.filter((category) => (0, is_infrastructure_1.isInfrastructureMode)() || category !== types_1.NestModuleCategory.infrastructure); const pathNestModuleMetadata = () => { if (!project) { project = {}; } if (!globalConfigurationOptions) { globalConfigurationOptions = {}; } if (!globalEnvironmentsOptions) { globalEnvironmentsOptions = {}; } if (!logger) { logger = new common_1.ConsoleLogger('bootstrapNestApplication'); } for (const category of categories) { // any wrap methods can create new modules, we path all them for (let index = 0; index < (modules[category] || []).length; index++) { if (modules[category]?.[index]?.getNestModuleMetadata?.()) { if (!modules[category]?.[index].getNestModuleMetadata?.()?.project) { // todo: change to pathNestModuleMetadata modules[category][index].getNestModuleMetadata().project = project; } else { // todo: change to pathNestModuleMetadata Object.assign(modules[category][index].getNestModuleMetadata().project, project || {}); } } if (modules[category] && modules[category]?.[index]?.pathNestModuleMetadata) { if (project.name) { globalConfigurationOptions.name = project.name; globalEnvironmentsOptions.name = project.name; } modules[category]?.[index].pathNestModuleMetadata({ project, globalEnvironmentsOptions, globalConfigurationOptions, logger, }); } } } }; pathNestModuleMetadata(); for (const wrapApplicationMethod of wrapApplicationMethods) { for (const category of categories) { let moduleIndex = 0; while (modules[category]?.[moduleIndex]) { if (!modules[category]?.[moduleIndex]?.getNestModuleMetadata?.()?.moduleDisabled) { if (modules[category]?.[moduleIndex]?.getNestModuleMetadata?.()?.[wrapApplicationMethod]) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const result = await modules[category]?.[moduleIndex].getNestModuleMetadata?.()?.[wrapApplicationMethod]({ app, project, current: { category, index: moduleIndex, }, logger, modules, globalEnvironmentsOptions, globalConfigurationOptions, }); pathNestModuleMetadata(); if (result) { app = result; } } } moduleIndex = moduleIndex + 1; } } } if (!(0, is_infrastructure_1.isInfrastructureMode)()) { delete modules[types_1.NestModuleCategory.infrastructure]; } return { modules, app }; } async function bootstrapNestApplication(options) { const { app } = await bootstrapNestApplicationWithOptions({ ...options, wrapApplicationMethods: (0, utils_1.getWrapModuleMetadataMethods)(), }); if (!app) { throw new errors_1.NestApplicationError('Application not created!'); } return app; } //# sourceMappingURL=utils.js.map