@sustain/core
Version:
Sustain is a Framework that is barely used despedcies to make stable and sustainable apps
73 lines • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeOnServerStart = exports.getAllModuleMetaData = exports.getModuleMetaData = void 0;
const dependency_container_1 = require("./../di/dependency-container");
let usedInjectedContainer = dependency_container_1.InjectedContainer;
let allControllers = [], allProviders = [], allExtensions = [], allStaticFolders = [], allMiddleswares = [], allModules = [], applicationPort;
const getModuleMetaData = (module, config) => {
const { MODULE_CONFIG } = module.prototype;
let { controllers = [], providers = [], extensions = [], modules = [], staticFolders = [], middleswares = [], port, } = MODULE_CONFIG;
if (config === null || config === void 0 ? void 0 : config.mainModule) {
applicationPort = port;
}
allControllers = [...allControllers, ...controllers];
allProviders = [...allProviders, ...providers];
allExtensions = [...allExtensions, ...extensions];
allStaticFolders = [...allStaticFolders, ...staticFolders];
allMiddleswares = [...allMiddleswares, ...middleswares];
allModules = [...allModules, module];
injectProvidersToRootContainer([...providers]);
injectControllerToRootContainer([...extensions, ...controllers]);
if (Array.isArray(modules)) {
for (const childModule of modules) {
exports.getModuleMetaData(childModule);
}
}
executeOnModuleLoaded(module);
};
exports.getModuleMetaData = getModuleMetaData;
const getAllModuleMetaData = (mainModule, params) => {
if (params === null || params === void 0 ? void 0 : params.scoped) {
usedInjectedContainer = params.container;
}
exports.getModuleMetaData(mainModule, { mainModule: true });
return {
controllers: allControllers,
providers: allProviders,
extensions: allExtensions,
middleswares: allMiddleswares,
staticFolders: allStaticFolders,
modules: allModules,
port: applicationPort,
};
};
exports.getAllModuleMetaData = getAllModuleMetaData;
const injectControllerToRootContainer = (elements = []) => {
elements.forEach((element) => {
usedInjectedContainer.inject(element);
});
};
const injectProvidersToRootContainer = (elements = []) => {
elements.forEach((element) => {
usedInjectedContainer.addProvider({ provide: element, useClass: element });
usedInjectedContainer.inject(element);
});
};
const executeOnModuleLoaded = (module) => {
usedInjectedContainer.inject(module);
const instance = usedInjectedContainer.get(module);
if (instance.onModuleLoaded) {
instance.onModuleLoaded();
}
};
const executeOnServerStart = (modules, applicationRequests) => {
modules.forEach((module) => {
usedInjectedContainer.inject(module);
const instance = usedInjectedContainer.get(module);
if (instance.onServerStart) {
instance.onServerStart(applicationRequests);
}
});
};
exports.executeOnServerStart = executeOnServerStart;
//# sourceMappingURL=module.helper.js.map