@eggjs/controller-decorator
Version:
tegg controller decorator
76 lines • 6.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Middleware = Middleware;
const node_assert_1 = __importDefault(require("node:assert"));
const is_type_of_1 = __importDefault(require("is-type-of"));
const ControllerInfoUtil_1 = __importDefault(require("../util/ControllerInfoUtil"));
const MethodInfoUtil_1 = __importDefault(require("../util/MethodInfoUtil"));
const aop_decorator_1 = require("@eggjs/aop-decorator");
var MiddlewareType;
(function (MiddlewareType) {
MiddlewareType["AOP"] = "AOP";
MiddlewareType["MiddlewareFunc"] = "MiddlewareFunc";
})(MiddlewareType || (MiddlewareType = {}));
function isAop(mw) {
return is_type_of_1.default.class(mw) && aop_decorator_1.AdviceInfoUtil.isAdvice(mw);
}
function isAopTypeOrMiddlewareType(middlewares) {
const adviceCount = middlewares.filter(t => isAop(t)).length;
if (adviceCount) {
if (adviceCount === middlewares.length) {
return MiddlewareType.AOP;
}
throw new Error('AOP and MiddlewareFunc can not be mixed');
}
return MiddlewareType.MiddlewareFunc;
}
function Middleware(...middlewares) {
function functionTypeClassMiddleware(constructor) {
middlewares.forEach(mid => {
ControllerInfoUtil_1.default.addControllerMiddleware(mid, constructor);
});
}
function aopTypeClassMiddleware(constructor) {
for (const aopAdvice of middlewares) {
ControllerInfoUtil_1.default.addControllerAopMiddleware(aopAdvice, constructor);
}
}
function functionTypeMethodMiddleware(target, propertyKey) {
(0, node_assert_1.default)(typeof propertyKey === 'string', `[controller/${target.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
const controllerClazz = target.constructor;
const methodName = propertyKey;
middlewares.forEach(mid => {
MethodInfoUtil_1.default.addMethodMiddleware(mid, controllerClazz, methodName);
});
}
function aopTypeMethodMiddleware(target, propertyKey) {
const controllerClazz = target.constructor;
const methodName = propertyKey;
for (const aopAdvice of middlewares) {
MethodInfoUtil_1.default.addMethodAopMiddleware(aopAdvice, controllerClazz, methodName);
}
}
return function (target, propertyKey) {
const type = isAopTypeOrMiddlewareType(middlewares);
if (propertyKey === undefined) {
if (type === MiddlewareType.AOP) {
aopTypeClassMiddleware(target);
}
else {
functionTypeClassMiddleware(target);
}
}
else {
if (type === MiddlewareType.AOP) {
aopTypeMethodMiddleware(target, propertyKey);
}
else {
functionTypeMethodMiddleware(target, propertyKey);
}
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3IvTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTJCQSxnQ0ErQ0M7QUExRUQsOERBQWlDO0FBRWpDLDREQUE0QjtBQUM1QixvRkFBNEQ7QUFDNUQsNEVBQW9EO0FBQ3BELHdEQUFzRDtBQUV0RCxJQUFLLGNBR0o7QUFIRCxXQUFLLGNBQWM7SUFDakIsNkJBQVcsQ0FBQTtJQUNYLG1EQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFISSxjQUFjLEtBQWQsY0FBYyxRQUdsQjtBQUVELFNBQVMsS0FBSyxDQUFDLEVBQStDO0lBQzVELE9BQU8sb0JBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksOEJBQWMsQ0FBQyxRQUFRLENBQUMsRUFBZ0MsQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLFdBQXNFO0lBQ3ZHLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0QsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLEdBQUcsV0FBc0U7SUFDbEcsU0FBUywyQkFBMkIsQ0FBQyxXQUE4QjtRQUNqRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLDRCQUFrQixDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLHNCQUFzQixDQUFDLFdBQThCO1FBQzVELEtBQUssTUFBTSxTQUFTLElBQUksV0FBMkMsRUFBRSxDQUFDO1lBQ3BFLDRCQUFrQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBVyxFQUFFLFdBQXdCO1FBQ3pFLElBQUEscUJBQU0sRUFBQyxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQ3BDLGVBQWUsTUFBTSxDQUFDLElBQUkscURBQXFELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQWdDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsV0FBcUIsQ0FBQztRQUN6QyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLHdCQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQUFDLE1BQVcsRUFBRSxXQUF3QjtRQUNwRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBZ0MsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxXQUFxQixDQUFDO1FBQ3pDLEtBQUssTUFBTSxTQUFTLElBQUksV0FBMkMsRUFBRSxDQUFDO1lBQ3BFLHdCQUFjLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sVUFBUyxNQUFXLEVBQUUsV0FBeUI7UUFDcEQsTUFBTSxJQUFJLEdBQUcseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMifQ==