@nestjs-mod/common
Version:
A collection of utilities for unifying NestJS applications and modules
100 lines • 4.59 kB
JavaScript
;
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