UNPKG

@opra/nestjs-http

Version:
120 lines (119 loc) 4.92 kB
"use strict"; var OpraHttpCoreModule_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpraHttpCoreModule = void 0; const tslib_1 = require("tslib"); const objects_1 = require("@jsopen/objects"); const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const common_2 = require("@opra/common"); const constants_js_1 = require("./constants.js"); const opra_exception_filter_js_1 = require("./opra-exception-filter.js"); const opra_http_nestjs_adapter_js_1 = require("./opra-http-nestjs-adapter.js"); const opra_middleware_js_1 = require("./opra-middleware.js"); const opraHttpNestjsAdapterToken = Symbol('OpraHttpNestjsAdapter'); let OpraHttpCoreModule = OpraHttpCoreModule_1 = class OpraHttpCoreModule { constructor(opraAdapter) { this.opraAdapter = opraAdapter; } configure(consumer) { consumer.apply(opra_middleware_js_1.OpraMiddleware).forRoutes({ path: '*', method: common_1.RequestMethod.ALL, }); } static forRoot(moduleOptions) { return this._getDynamicModule({ ...moduleOptions, providers: [ ...(moduleOptions?.providers || []), { provide: constants_js_1.OPRA_HTTP_API_CONFIG, useValue: { ...moduleOptions }, }, ], }); } static forRootAsync(moduleOptions) { if (!moduleOptions.useFactory) throw new Error('Invalid configuration. Must provide "useFactory"'); return this._getDynamicModule({ ...moduleOptions, providers: [ ...(moduleOptions?.providers || []), { provide: constants_js_1.OPRA_HTTP_API_CONFIG, inject: moduleOptions.inject, useFactory: moduleOptions.useFactory, }, ], }); } static _getDynamicModule(moduleOptions) { const token = moduleOptions?.token || opra_http_nestjs_adapter_js_1.OpraHttpNestjsAdapter; const opraNestAdapter = new opra_http_nestjs_adapter_js_1.OpraHttpNestjsAdapter({ ...moduleOptions, interceptors: undefined, }); const adapterProvider = { provide: token, inject: [core_1.ModuleRef, constants_js_1.OPRA_HTTP_API_CONFIG], useFactory: async (moduleRef, apiConfig) => { opraNestAdapter.scope = apiConfig.scope; opraNestAdapter.logger = opraNestAdapter.logger || new common_1.Logger(apiConfig.name); opraNestAdapter._document = await common_2.ApiDocumentFactory.createDocument({ ...apiConfig, api: { transport: 'http', name: apiConfig.name, description: apiConfig.description, controllers: moduleOptions.controllers, }, }); if (moduleOptions.interceptors) { opraNestAdapter.interceptors = moduleOptions.interceptors.map(x => { if ((0, objects_1.isConstructor)(x)) { return async (ctx, next) => { const interceptor = moduleRef.get(x); if (typeof interceptor.intercept === 'function') return interceptor.intercept(ctx, next); }; } return x; }); } return opraNestAdapter; }, }; return { global: moduleOptions.global, module: OpraHttpCoreModule_1, controllers: opraNestAdapter.nestControllers, providers: [ ...(moduleOptions?.providers || []), adapterProvider, { provide: opraHttpNestjsAdapterToken, useExisting: token, }, { provide: core_1.APP_FILTER, useClass: opra_exception_filter_js_1.OpraExceptionFilter, }, ], imports: [...(moduleOptions?.imports || [])], exports: [...(moduleOptions?.exports || []), adapterProvider], }; } async onModuleDestroy() { await this.opraAdapter.close(); } }; exports.OpraHttpCoreModule = OpraHttpCoreModule; exports.OpraHttpCoreModule = OpraHttpCoreModule = OpraHttpCoreModule_1 = tslib_1.__decorate([ (0, common_1.Module)({}), (0, common_1.Global)(), tslib_1.__metadata("design:paramtypes", [opra_http_nestjs_adapter_js_1.OpraHttpNestjsAdapter]) ], OpraHttpCoreModule);