@eggjs/controller-decorator
Version:
tegg controller decorator
49 lines • 4.36 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ControllerMetaBuilderFactory = void 0;
const ControllerInfoUtil_1 = __importDefault(require("../util/ControllerInfoUtil"));
const MethodInfoUtil_1 = __importDefault(require("../util/MethodInfoUtil"));
const aop_decorator_1 = require("@eggjs/aop-decorator");
class ControllerMetaBuilderFactory {
static registerControllerMetaBuilder(controllerType, controllerBuilderCreator) {
this.builderCreatorMap.set(controllerType, controllerBuilderCreator);
}
static createControllerMetaBuilder(clazz, controllerType) {
if (!controllerType) {
controllerType = ControllerInfoUtil_1.default.getControllerType(clazz);
}
if (!controllerType) {
return;
}
const creator = this.builderCreatorMap.get(controllerType);
if (!creator) {
throw new Error(`not found controller meta builder for type ${controllerType}`);
}
return creator(clazz);
}
static build(clazz, controllerType) {
const builder = ControllerMetaBuilderFactory.createControllerMetaBuilder(clazz, controllerType);
if (!builder)
return;
const metadata = builder.build();
if (!metadata)
return;
const controllerAopMws = ControllerInfoUtil_1.default.getControllerAopMiddlewares(clazz);
for (const { name } of metadata.methods) {
const methodAopMws = MethodInfoUtil_1.default.getMethodAopMiddlewares(clazz, name);
if (MethodInfoUtil_1.default.shouldRegisterAopMiddlewarePointCut(clazz, name)) {
for (const mw of [...methodAopMws, ...controllerAopMws].reverse()) {
(0, aop_decorator_1.Pointcut)(mw)(clazz.prototype, name);
}
MethodInfoUtil_1.default.registerAopMiddlewarePointcut(clazz, name);
}
}
return metadata;
}
}
exports.ControllerMetaBuilderFactory = ControllerMetaBuilderFactory;
ControllerMetaBuilderFactory.builderCreatorMap = new Map();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlck1ldGFCdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWlsZGVyL0NvbnRyb2xsZXJNZXRhQnVpbGRlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUEsb0ZBQTREO0FBQzVELDRFQUFvRDtBQUNwRCx3REFBZ0Q7QUFFaEQsTUFBYSw0QkFBNEI7SUFHdkMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLGNBQWtDLEVBQUUsd0JBQXNEO1FBQzdILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUF3QixFQUFFLGNBQW1DO1FBQzlGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixjQUFjLEdBQUcsNEJBQWtCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBd0IsRUFBRSxjQUFtQztRQUN4RSxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyw0QkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsd0JBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsSUFBSSx3QkFBYyxDQUFDLG1DQUFtQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwRSxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQ3BFLElBQUEsd0JBQVEsRUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELHdCQUFjLENBQUMsNkJBQTZCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7QUF0Q0gsb0VBdUNDO0FBdENnQiw4Q0FBaUIsR0FBMEQsSUFBSSxHQUFHLEVBQUUsQ0FBQyJ9