@eggjs/aop-decorator
Version:
tegg aop decorator
55 lines • 4.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AspectMetaBuilder = void 0;
const Aspect_1 = require("./model/Aspect");
const PointcutAdviceInfoUtil_1 = require("./util/PointcutAdviceInfoUtil");
class AspectMetaBuilder {
constructor(clazz, options) {
this.clazz = clazz;
this.crosscutAdviceFactory = options.crosscutAdviceFactory;
}
build() {
const aspectList = [];
const methods = AspectMetaBuilder.getAllMethods(this.clazz);
for (const method of methods) {
const aspect = this.doBuildMethodAspect(method);
if (aspect) {
aspectList.push(aspect);
}
}
return aspectList;
}
static getAllMethods(clazz) {
const methodSet = new Set();
function getMethods(obj) {
if (obj) {
const propDescs = Object.getOwnPropertyDescriptors(obj);
for (const [name, desc] of Object.entries(propDescs)) {
if (desc.value instanceof Function) {
methodSet.add(name);
}
}
getMethods(Object.getPrototypeOf(obj));
}
}
getMethods(clazz.prototype);
return Array.from(methodSet);
}
doBuildMethodAspect(method) {
const crosscutAdviceList = this.crosscutAdviceFactory.getAdvice(this.clazz, method);
// decorator execute in reverse order
const pointcutAdviceList = PointcutAdviceInfoUtil_1.PointcutAdviceInfoUtil.getPointcutAdviceInfoList(this.clazz, method);
if (!crosscutAdviceList.length && !pointcutAdviceList.length)
return;
const aspectBuilder = new Aspect_1.AspectBuilder(this.clazz, method);
for (const advice of crosscutAdviceList) {
aspectBuilder.addAdvice(advice);
}
for (const advice of pointcutAdviceList) {
aspectBuilder.addAdvice(advice);
}
return aspectBuilder.build();
}
}
exports.AspectMetaBuilder = AspectMetaBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0TWV0YUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXNwZWN0TWV0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMkNBQXVEO0FBQ3ZELDBFQUF1RTtBQUV2RSxNQUFhLGlCQUFpQjtJQUk1QixZQUFZLEtBQXdCLEVBQUUsT0FFckM7UUFDQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQzdELENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNwQyxTQUFTLFVBQVUsQ0FBQyxHQUFHO1lBQ3JCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxLQUFLLE1BQU0sQ0FBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7d0JBQ25DLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO1FBRUQsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQW1CO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BGLHFDQUFxQztRQUNyQyxNQUFNLGtCQUFrQixHQUFHLCtDQUFzQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLElBQUksc0JBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELEtBQUssTUFBTSxNQUFNLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN4QyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDeEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBeERELDhDQXdEQyJ9