UNPKG

@golevelup/nestjs-modules

Version:

Reusable utilties to help level up NestJS Modules

106 lines 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createConfigurableDynamicRootModule = exports.createModuleConfigProvider = void 0; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); function createModuleConfigProvider(provide, options) { var _a, _b; if ('useFactory' in options) { return [ { provide, useFactory: options.useFactory, inject: (_a = options.inject) !== null && _a !== void 0 ? _a : [], }, ]; } const optionsProviderGenerator = (inject) => ({ provide, useFactory: async (moduleConfigFactory) => { return moduleConfigFactory.createModuleConfig(); }, inject: [inject], }); if ('useClass' in options) { return [ optionsProviderGenerator(options.useClass), { provide: options.useClass, useClass: options.useClass, }, ]; } if ('useExisting' in options) { return [ optionsProviderGenerator((_b = options.useExisting.provide) !== null && _b !== void 0 ? _b : options.useExisting.value.constructor.name), { provide: options.useExisting.provide || options.useExisting.value.constructor.name, useValue: options.useExisting.value, }, ]; } return []; } exports.createModuleConfigProvider = createModuleConfigProvider; /** * * @deprecated Please use Nestjs Configurable Module {@see https://docs.nestjs.com/fundamentals/dynamic-modules#configurable-module-builder} * @param moduleConfigToken * @param moduleProperties * @returns */ function createConfigurableDynamicRootModule(moduleConfigToken, moduleProperties = { imports: [], exports: [], providers: [], }) { class DynamicRootModule { static forRootAsync(moduleCtor, asyncModuleConfig) { const dynamicModule = { module: moduleCtor, imports: [ ...(asyncModuleConfig.imports || []), ...(moduleProperties.imports || []), ], exports: [ ...(asyncModuleConfig.exports || []), ...(moduleProperties.exports || []), ], providers: [ ...createModuleConfigProvider(moduleConfigToken, asyncModuleConfig), ...(moduleProperties.providers || []), ], }; DynamicRootModule.moduleSubject.next(dynamicModule); return dynamicModule; } static forRoot(moduleCtor, moduleConfig) { const dynamicModule = { module: moduleCtor, imports: [...(moduleProperties.imports || [])], exports: [...(moduleProperties.exports || [])], controllers: [...(moduleProperties.controllers || [])], providers: [ { provide: moduleConfigToken, useValue: moduleConfig, }, ...(moduleProperties.providers || []), ], }; DynamicRootModule.moduleSubject.next(dynamicModule); return dynamicModule; } static async externallyConfigured(moduleCtor, wait) { const timeout$ = (0, rxjs_1.interval)(wait).pipe((0, operators_1.first)(), (0, operators_1.map)(() => { throw new Error(`Expected ${moduleCtor.name} to be configured by at last one Module but it was not configured within ${wait}ms`); })); return (0, rxjs_1.lastValueFrom)((0, rxjs_1.race)(timeout$, DynamicRootModule.moduleSubject.pipe((0, operators_1.first)()))); } } DynamicRootModule.moduleSubject = new rxjs_1.Subject(); return DynamicRootModule; } exports.createConfigurableDynamicRootModule = createConfigurableDynamicRootModule; //# sourceMappingURL=dynamicModules.js.map