@duongtrungnguyen/nestro
Version:
Service registry for Nest JS
81 lines • 3.03 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __decorateClass = (decorators, target, key, kind) => {
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
for (var i = decorators.length - 1, decorator; i >= 0; i--)
if (decorator = decorators[i])
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
if (kind && result) __defProp(target, key, result);
return result;
};
import { Module } from "@nestjs/common";
import { GatewayConfigBuilder } from "./config-builder";
import { GatewayController } from "./controllers";
import { isClass } from "../../common";
let GatewayModule = class {
/**
* Creates a builder for configuring proxy routes and middlewares.
*
* @returns A new GatewayConfigBuilder instance.
*/
static builder() {
return new GatewayConfigBuilder();
}
/**
* Registers and configures the GatewayModule dynamically.
*
* This method accepts either a class type implementing `IGatewayConfig` or a `GatewayRoutingConfigFunction`.
* If a configuration function is provided, it is invoked with a `GatewayConfigBuilder` instance to produce
* a `DynamicModule` or a `Promise<DynamicModule>`. If a class type is provided, an instance is created and
* its `build` method is called with the builder.
*
* @param config - A class type implementing `IGatewayConfig` or a configuration function (`GatewayRoutingConfigFunction`)
* that receives a `GatewayConfigBuilder` and returns a `DynamicModule` or a `Promise<DynamicModule>`.
* @returns A `DynamicModule` or a `Promise<DynamicModule>` representing the configured gateway module.
*/
static register(config) {
const builder = new GatewayConfigBuilder();
if (!isClass(config)) {
return config(builder);
}
const instance = new config();
return instance.build(builder);
}
configure(consumer) {
if (GatewayModule.globalMiddlewares.length) {
consumer.apply(...GatewayModule.globalMiddlewares).forRoutes(GatewayController);
}
GatewayModule.routes.forEach((route) => {
if (!route.middlewares?.length) return;
const middlewares = [];
const excludes = [];
route.middlewares.forEach((hook) => {
if (typeof hook === "function") {
middlewares.push(hook);
} else {
middlewares.push(hook.instance);
if (hook.excludes?.length) {
excludes.push(...hook.excludes);
}
}
});
if (middlewares.length) {
const applied = consumer.apply(...middlewares);
if (excludes.length) {
applied.exclude(...excludes).forRoutes(route.route);
} else {
applied.forRoutes(route.route);
}
}
});
}
};
GatewayModule.routes = [];
GatewayModule.globalMiddlewares = [];
GatewayModule = __decorateClass([
Module({})
], GatewayModule);
export {
GatewayModule
};
//# sourceMappingURL=gateway.module.js.map