@opra/nestjs-http
Version:
Opra NestJS Http Module
120 lines (119 loc) • 4.92 kB
JavaScript
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);
;