rage-framework
Version:
## How to Install *server-side* ```bash npm install @rage-framework/server ```
65 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NgModule = exports.Module = void 0;
const container_1 = require("../container");
const cache_layer_service_1 = require("../services/cache/cache-layer.service");
const generic_constructor_1 = require("../helpers/generic-constructor");
const logger_service_1 = require("../services/utils/logger.service");
const resolver_service_1 = require("../services/utils/resolver.service");
const metadata_service_1 = require("../services/utils/metadata.service");
const bootstrapLogger = container_1.Container.get(logger_service_1.LoggerService);
const resolverService = container_1.Container.get(resolver_service_1.ResolverService);
const cacheService = container_1.Container.get(cache_layer_service_1.CacheService);
const metadataService = container_1.Container.get(metadata_service_1.MetadataService);
function Module(module) {
return (target) => {
module = module || {};
const original = Object.assign(target);
const moduleName = target.name || target.constructor.name;
const generatedHashData = metadataService.generateHashData(module, original);
const uniqueModuleTemplate = metadataService.parseModuleTemplate(moduleName, generatedHashData, `${target}`);
const uniqueHashForClass = metadataService.createUniqueHash(uniqueModuleTemplate);
Object.defineProperty(original, 'originalName', {
value: original.name || original.constructor.name,
writable: false,
});
Object.defineProperty(original, 'name', {
value: uniqueHashForClass,
writable: true,
});
const currentModuleLayer = cacheService.createLayer({
name: uniqueHashForClass,
});
original.metadata = {
moduleName: original.originalName,
moduleHash: uniqueHashForClass,
options: null,
type: 'module',
raw: uniqueModuleTemplate,
};
const constructorFunction = function (...args) {
bootstrapLogger.log(`Bootstrap -> @Module('${original.originalName}'): loading...`);
return generic_constructor_1.GenericConstruct(module, original, currentModuleLayer)(original, args);
};
Object.assign(constructorFunction, original);
resolverService
.resolveDependencies(uniqueHashForClass, original, moduleName)
.subscribe(() => bootstrapLogger.log(`Start -> @Module('${original.originalName}'): loaded!`));
Object.getOwnPropertyNames(original)
.filter((prop) => typeof original[prop] === 'function')
.map((descriptor) => Object.defineProperty(constructorFunction, descriptor, {
configurable: true,
writable: true,
value: original[descriptor],
}));
const service = {
type: constructorFunction,
};
container_1.Container.set(service);
return constructorFunction;
};
}
exports.Module = Module;
/** @angular module compatability */
exports.NgModule = Module;
//# sourceMappingURL=module.js.map