@eggjs/tegg-aop-runtime 4.0.0-beta.1 → 4.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,16 @@
1
- # `aop-runtime`
1
+ # `@eggjs/tegg-aop-runtime`
2
+
3
+ [![NPM version][npm-image]][npm-url]
4
+ [![Known Vulnerabilities][snyk-image]][snyk-url]
5
+ [![npm download][download-image]][download-url]
6
+ [![Node.js Version](https://img.shields.io/node/v/@eggjs/tegg-aop-runtime.svg?style=flat)](https://nodejs.org/en/download/)
7
+
8
+ [npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-aop-runtime.svg?style=flat-square
9
+ [npm-url]: https://npmjs.org/package/@eggjs/tegg-aop-runtime
10
+ [snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-aop-runtime/badge.svg?style=flat-square
11
+ [snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-aop-runtime
12
+ [download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-aop-runtime.svg?style=flat-square
13
+ [download-url]: https://npmjs.org/package/@eggjs/tegg-aop-runtime
2
14
 
3
15
  ## Usage
4
16
 
@@ -1,8 +1,13 @@
1
- import type { AspectAdvice, IAdvice } from '@eggjs/tegg-types';
2
- interface InternalAdviceContext<T = Record<string, IAdvice>> {
1
+ import type { AdviceContext, AspectAdvice, IAdvice } from '@eggjs/tegg-types';
2
+ declare class InternalAdviceContext<T = Record<string, IAdvice>> {
3
+ private readonly state;
3
4
  that: T;
4
5
  method: PropertyKey;
5
6
  args: any[];
7
+ constructor(that: T, method: PropertyKey, args: any[]);
8
+ get(key: PropertyKey): any;
9
+ set(key: PropertyKey, value: any): this;
10
+ createCallContext(adviceParams?: any): AdviceContext<T>;
6
11
  }
7
12
  export declare class AspectExecutor {
8
13
  obj: object;
@@ -0,0 +1,117 @@
1
+ import compose from 'koa-compose';
2
+ class InternalAdviceContext {
3
+ state;
4
+ that;
5
+ method;
6
+ args;
7
+ constructor(that, method, args) {
8
+ this.state = new Map();
9
+ this.that = that;
10
+ this.method = method;
11
+ this.args = args;
12
+ }
13
+ get(key) {
14
+ return this.state.get(key);
15
+ }
16
+ set(key, value) {
17
+ this.state.set(key, value);
18
+ return this;
19
+ }
20
+ createCallContext(adviceParams) {
21
+ return Object.create(this, {
22
+ adviceParams: {
23
+ value: adviceParams,
24
+ },
25
+ });
26
+ }
27
+ }
28
+ export class AspectExecutor {
29
+ obj;
30
+ method;
31
+ aspectAdviceList;
32
+ constructor(obj, method, aspectAdviceList) {
33
+ this.obj = obj;
34
+ this.method = method;
35
+ this.aspectAdviceList = aspectAdviceList;
36
+ }
37
+ async execute(...args) {
38
+ const ctx = new InternalAdviceContext(this.obj, this.method, args);
39
+ await this.beforeCall(ctx);
40
+ try {
41
+ const result = await this.doExecute(ctx);
42
+ await this.afterReturn(ctx, result);
43
+ return result;
44
+ }
45
+ catch (e) {
46
+ await this.afterThrow(ctx, e);
47
+ throw e;
48
+ }
49
+ finally {
50
+ await this.afterFinally(ctx);
51
+ }
52
+ }
53
+ async beforeCall(ctx) {
54
+ for (const aspectAdvice of this.aspectAdviceList) {
55
+ const advice = ctx.that[aspectAdvice.name];
56
+ if (advice.beforeCall) {
57
+ /**
58
+ * 这里...写法使传入的参数变成了一个新的对象
59
+ * 因此beforeCall里面如果修改了ctx.args
60
+ * 最新的args是不会在方法里生效的
61
+ * 先保证args可以生效
62
+ * 不改动其余地方
63
+ */
64
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
65
+ await advice.beforeCall(fnCtx);
66
+ ctx.args = fnCtx.args;
67
+ }
68
+ }
69
+ }
70
+ async afterReturn(ctx, result) {
71
+ for (const aspectAdvice of this.aspectAdviceList) {
72
+ const advice = ctx.that[aspectAdvice.name];
73
+ if (advice.afterReturn) {
74
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
75
+ await advice.afterReturn(fnCtx, result);
76
+ }
77
+ }
78
+ }
79
+ async afterThrow(ctx, error) {
80
+ for (const aspectAdvice of this.aspectAdviceList) {
81
+ const advice = ctx.that[aspectAdvice.name];
82
+ if (advice.afterThrow) {
83
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
84
+ await advice.afterThrow(fnCtx, error);
85
+ }
86
+ }
87
+ }
88
+ async afterFinally(ctx) {
89
+ for (const aspectAdvice of this.aspectAdviceList) {
90
+ const advice = ctx.that[aspectAdvice.name];
91
+ if (advice.afterFinally) {
92
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
93
+ await advice.afterFinally(fnCtx);
94
+ }
95
+ }
96
+ }
97
+ async doExecute(ctx) {
98
+ const lastCall = () => {
99
+ const originMethod = Object.getPrototypeOf(this.obj)[this.method];
100
+ return Reflect.apply(originMethod, ctx.that, ctx.args);
101
+ };
102
+ const functions = [];
103
+ for (const aspectAdvice of this.aspectAdviceList) {
104
+ const advice = ctx.that[aspectAdvice.name];
105
+ const fn = advice.around;
106
+ if (fn) {
107
+ functions.push(async (ctx, next) => {
108
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
109
+ return await fn.call(advice, fnCtx, next);
110
+ });
111
+ }
112
+ }
113
+ functions.push(lastCall);
114
+ return compose(functions)(ctx);
115
+ }
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXNwZWN0RXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxPQUFPLE1BQU0sYUFBYSxDQUFDO0FBR2xDLE1BQU0scUJBQXFCO0lBQ1IsS0FBSyxDQUF3QjtJQUM5QyxJQUFJLENBQUk7SUFDUixNQUFNLENBQWM7SUFDcEIsSUFBSSxDQUFRO0lBRVosWUFDRSxJQUFPLEVBQ1AsTUFBbUIsRUFDbkIsSUFBVztRQUVYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFnQixFQUFFLEtBQVU7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQWtCO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDekIsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFDekIsR0FBRyxDQUFTO0lBQ1osTUFBTSxDQUFjO0lBQ3BCLGdCQUFnQixDQUEwQjtJQUUxQyxZQUFZLEdBQVcsRUFBRSxNQUFtQixFQUFFLGdCQUF5QztRQUNyRixJQUFJLENB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
@@ -0,0 +1,54 @@
1
+ import { AspectMetaBuilder, CrosscutInfoUtil } from '@eggjs/aop-decorator';
2
+ import { GraphNode } from '@eggjs/tegg-common-util';
3
+ import { ClassProtoDescriptor, GlobalGraph, ProtoDependencyMeta, ProtoNode, } from '@eggjs/tegg-metadata';
4
+ export function crossCutGraphHook(globalGraph) {
5
+ for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
6
+ for (const crossCutProtoNode of moduleNode.val.protos) {
7
+ const protoNodes = findCrossCuttedClazz(globalGraph, crossCutProtoNode);
8
+ if (!protoNodes)
9
+ continue;
10
+ for (const crossCuttedProtoNode of protoNodes) {
11
+ const crossCuttedModuleNode = globalGraph.findModuleNode(crossCuttedProtoNode.val.proto.instanceModuleName);
12
+ if (!crossCuttedModuleNode)
13
+ continue;
14
+ globalGraph.addInject(crossCuttedModuleNode, crossCuttedProtoNode, crossCutProtoNode, crossCutProtoNode.val.proto.name);
15
+ }
16
+ }
17
+ }
18
+ }
19
+ function findCrossCuttedClazz(globalGraph, protoNode) {
20
+ const proto = protoNode.val.proto;
21
+ if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
22
+ return;
23
+ }
24
+ if (!CrosscutInfoUtil.isCrosscutAdvice(proto.clazz)) {
25
+ return;
26
+ }
27
+ const crosscutInfoList = CrosscutInfoUtil.getCrosscutInfoList(proto.clazz);
28
+ const result = [];
29
+ // eslint-disable-next-line no-labels
30
+ crosscut: for (const crosscutInfo of crosscutInfoList) {
31
+ for (const protoNode of globalGraph.protoGraph.nodes.values()) {
32
+ if (checkClazzMatchCrossCut(protoNode, crosscutInfo)) {
33
+ result.push(protoNode);
34
+ // eslint-disable-next-line no-labels
35
+ break crosscut;
36
+ }
37
+ }
38
+ }
39
+ return result;
40
+ }
41
+ function checkClazzMatchCrossCut(protoNode, crosscutInfo) {
42
+ const proto = protoNode.val.proto;
43
+ if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
44
+ return;
45
+ }
46
+ const allMethods = AspectMetaBuilder.getAllMethods(proto.clazz);
47
+ for (const method of allMethods) {
48
+ if (crosscutInfo.pointcutInfo.match(proto.clazz, method)) {
49
+ return true;
50
+ }
51
+ }
52
+ return false;
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Jvc3NDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ3Jvc3NDdXRHcmFwaEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFxQixnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsU0FBUyxHQUNWLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFdBQXdCO0lBQ3hELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRSxLQUFLLE1BQU0saUJBQWlCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsVUFBVTtnQkFBRSxTQUFTO1lBQzFCLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUcsSUFBSSxDQUFDLHFCQUFxQjtvQkFBRSxTQUFTO2dCQUNyQyxXQUFXLENBQUMsU0FBUyxDQUNuQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFdBQXdCLEVBQUUsU0FBb0Q7SUFDMUcsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEQsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBZ0QsRUFBRSxDQUFDO0lBQy9ELHFDQUFxQztJQUNyQyxRQUFRLEVBQUUsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM5RCxJQUFJLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QixxQ0FBcUM7Z0JBQ3JDLE1BQU0sUUFBUSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFNBQStCLEVBQUUsWUFBMEI7SUFDMUYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyJ9
@@ -0,0 +1,60 @@
1
+ import assert from 'node:assert';
2
+ import { ASPECT_LIST, InjectType } from '@eggjs/tegg-types';
3
+ import { Aspect } from '@eggjs/aop-decorator';
4
+ import { PrototypeUtil } from '@eggjs/core-decorator';
5
+ import { EggContainerFactory } from '@eggjs/tegg-runtime';
6
+ import { AspectExecutor } from './AspectExecutor.js';
7
+ export class EggObjectAopHook {
8
+ hijackMethods(obj, aspectList) {
9
+ for (const aspect of aspectList) {
10
+ const newExecutor = new AspectExecutor(obj, aspect.method, aspect.adviceList);
11
+ obj[aspect.method] = newExecutor.execute.bind(newExecutor);
12
+ }
13
+ }
14
+ // constructor inject only paas obj to constructor
15
+ // should manually define obj to property
16
+ injectAdvice(eggObject, obj, aspectList) {
17
+ if (eggObject.proto.getMetaData(PrototypeUtil.INJECT_TYPE) !== InjectType.CONSTRUCTOR) {
18
+ return;
19
+ }
20
+ for (const aspect of aspectList) {
21
+ for (const advice of aspect.adviceList) {
22
+ const injectObject = eggObject.proto.injectObjects.find(t => t.objName === advice.name);
23
+ assert(injectObject, `not found inject advice ${advice.name}`);
24
+ const adviceObj = EggContainerFactory.getEggObject(injectObject.proto, advice.name);
25
+ Object.defineProperty(obj, advice.name, {
26
+ value: adviceObj.obj,
27
+ enumerable: false,
28
+ });
29
+ }
30
+ }
31
+ }
32
+ async postCreate(_, eggObject) {
33
+ const aspectList = eggObject.proto.getMetaData(ASPECT_LIST);
34
+ if (!aspectList || !aspectList.length)
35
+ return;
36
+ const propertyDesc = eggObject.constructor && Reflect.getOwnPropertyDescriptor(eggObject.constructor.prototype, 'obj');
37
+ // process the lazy getter
38
+ if (propertyDesc?.get) {
39
+ let obj;
40
+ // eslint-disable-next-line
41
+ const self = this;
42
+ Object.defineProperty(eggObject, 'obj', {
43
+ ...propertyDesc,
44
+ get() {
45
+ if (!obj) {
46
+ obj = Reflect.apply(propertyDesc.get, eggObject, []);
47
+ self.hijackMethods(obj, aspectList);
48
+ self.injectAdvice(eggObject, obj, aspectList);
49
+ }
50
+ return obj;
51
+ },
52
+ });
53
+ }
54
+ else {
55
+ this.hijackMethods(eggObject.obj, aspectList);
56
+ this.injectAdvice(eggObject, eggObject.obj, aspectList);
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0QW9wSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9FZ2dPYmplY3RBb3BIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsYUFBYSxDQUFDLEdBQVEsRUFBRSxVQUF5QjtRQUN2RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELHlDQUF5QztJQUNqQyxZQUFZLENBQUMsU0FBb0IsRUFBRSxHQUFRLEVBQUUsVUFBeUI7UUFDNUUsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RGLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sQ0FBQyxZQUFZLEVBQUUsMkJBQTJCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsWUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JGLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQ3RDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRztvQkFDcEIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBNEIsRUFBRSxTQUFvQjtRQUNqRSxNQUFNLFVBQVUsR0FBOEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM5QyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUUsQ0FBQztRQUN4SCwwQkFBMEI7UUFDMUIsSUFBSSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxHQUFZLENBQUM7WUFDakIsMkJBQTJCO1lBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7Z0JBQ3RDLEdBQUcsWUFBWTtnQkFDZixHQUFHO29CQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDVCxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDaEQsQ0FBQztvQkFDRCxPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -0,0 +1,13 @@
1
+ import { CrosscutAdviceFactory, CrosscutInfoUtil } from '@eggjs/aop-decorator';
2
+ export class EggPrototypeCrossCutHook {
3
+ crosscutAdviceFactory;
4
+ constructor(crosscutAdviceFactory) {
5
+ this.crosscutAdviceFactory = crosscutAdviceFactory;
6
+ }
7
+ async preCreate(ctx) {
8
+ if (CrosscutInfoUtil.isCrosscutAdvice(ctx.clazz)) {
9
+ this.crosscutAdviceFactory.registerCrossAdviceClazz(ctx.clazz);
10
+ }
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlQ3Jvc3NDdXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0VnZ1Byb3RvdHlwZUNyb3NzQ3V0SG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRSxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLHFCQUFxQixDQUF3QjtJQUU5RCxZQUFZLHFCQUE0QztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaUM7UUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,37 @@
1
+ import { AspectInfoUtil, AspectMetaBuilder, CrosscutAdviceFactory } from '@eggjs/aop-decorator';
2
+ import { PrototypeUtil } from '@eggjs/core-decorator';
3
+ import { TeggError } from '@eggjs/tegg-metadata';
4
+ export class LoadUnitAopHook {
5
+ crosscutAdviceFactory;
6
+ constructor(crosscutAdviceFactory) {
7
+ this.crosscutAdviceFactory = crosscutAdviceFactory;
8
+ }
9
+ async postCreate(_, loadUnit) {
10
+ for (const proto of loadUnit.iterateEggPrototype()) {
11
+ const protoWithClazz = proto;
12
+ const clazz = protoWithClazz.clazz;
13
+ if (!clazz)
14
+ continue;
15
+ const builder = new AspectMetaBuilder(clazz, {
16
+ crosscutAdviceFactory: this.crosscutAdviceFactory,
17
+ });
18
+ const aspectList = builder.build();
19
+ AspectInfoUtil.setAspectList(aspectList, clazz);
20
+ for (const aspect of aspectList) {
21
+ for (const advice of aspect.adviceList) {
22
+ const adviceProto = PrototypeUtil.getClazzProto(advice.clazz);
23
+ if (!adviceProto) {
24
+ throw TeggError.create(`Aop Advice(${advice.clazz.name}) not found in loadUnits`, 'advice_not_found');
25
+ }
26
+ proto.injectObjects.push({
27
+ refName: advice.name,
28
+ objName: advice.name,
29
+ qualifiers: [],
30
+ proto: adviceProto,
31
+ });
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRBb3BIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0xvYWRVbml0QW9wSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVNqRCxNQUFNLE9BQU8sZUFBZTtJQUNULHFCQUFxQixDQUF3QjtJQUU5RCxZQUFZLHFCQUE0QztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBMkIsRUFBRSxRQUFrQjtRQUM5RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDbkQsTUFBTSxjQUFjLEdBQUcsS0FBOEIsQ0FBQztZQUN0RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLO2dCQUFFLFNBQVM7WUFFckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN2QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztvQkFDeEcsQ0FBQztvQkFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ3BCLFVBQVUsRUFBRSxFQUFFO3dCQUNkLEtBQUssRUFBRSxXQUEyQjtxQkFDbkMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -0,0 +1,42 @@
1
+ import assert from 'node:assert';
2
+ import { AspectMetaBuilder, PointcutAdviceInfoUtil } from '@eggjs/aop-decorator';
3
+ import { PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
4
+ import { GraphNode } from '@eggjs/tegg-common-util';
5
+ import { ClassProtoDescriptor, GlobalGraph, ProtoDependencyMeta, ProtoNode, } from '@eggjs/tegg-metadata';
6
+ export function pointCutGraphHook(globalGraph) {
7
+ for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
8
+ for (const pointCuttedProtoNode of moduleNode.val.protos) {
9
+ const pointCutAdviceProtoList = findPointCutAdvice(globalGraph, pointCuttedProtoNode);
10
+ if (!pointCutAdviceProtoList)
11
+ continue;
12
+ for (const pointCutAdviceProto of pointCutAdviceProtoList) {
13
+ globalGraph.addInject(moduleNode, pointCuttedProtoNode, pointCutAdviceProto, pointCutAdviceProto.val.proto.name);
14
+ }
15
+ }
16
+ }
17
+ }
18
+ function findPointCutAdvice(globalGraph, protoNode) {
19
+ const proto = protoNode.val.proto;
20
+ if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
21
+ return;
22
+ }
23
+ const result = new Set();
24
+ const allMethods = AspectMetaBuilder.getAllMethods(proto.clazz);
25
+ for (const method of allMethods) {
26
+ const adviceInfoList = PointcutAdviceInfoUtil.getPointcutAdviceInfoList(proto.clazz, method);
27
+ for (const { clazz } of adviceInfoList) {
28
+ const property = PrototypeUtil.getProperty(clazz);
29
+ assert(property, 'not found property');
30
+ const injectProto = globalGraph.findDependencyProtoNode(protoNode.val.proto, {
31
+ objName: property.name,
32
+ refName: property.name,
33
+ qualifiers: QualifierUtil.mergeQualifiers(property?.qualifiers ?? [], QualifierUtil.getProtoQualifiers(clazz)),
34
+ });
35
+ if (injectProto) {
36
+ result.add(injectProto);
37
+ }
38
+ }
39
+ }
40
+ return Array.from(result);
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUG9pbnRDdXRHcmFwaEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixTQUFTLEdBQ1YsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixNQUFNLFVBQVUsaUJBQWlCLENBQUMsV0FBd0I7SUFDeEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pELE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLHVCQUF1QjtnQkFBRSxTQUFTO1lBQ3ZDLEtBQUssTUFBTSxtQkFBbUIsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO2dCQUMxRCxXQUFXLENBQUMsU0FBUyxDQUNuQixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFdBQXdCLEVBQUUsU0FBb0Q7SUFDeEcsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBbUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6RSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RixLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUN2QyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNFLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDdEIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN0QixVQUFVLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FDdkMsUUFBUSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQzFCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FDeEM7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixDQUFDIn0=
@@ -4,4 +4,4 @@ export * from './EggObjectAopHook.js';
4
4
  export * from './EggPrototypeCrossCutHook.js';
5
5
  export * from './LoadUnitAopHook.js';
6
6
  export * from './PointCutGraphHook.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQyJ9
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUMifQ==
package/package.json CHANGED
@@ -1,20 +1,17 @@
1
1
  {
2
2
  "name": "@eggjs/tegg-aop-runtime",
3
- "version": "4.0.0-beta.1",
3
+ "version": "4.0.0-beta.11",
4
4
  "description": "tegg aop",
5
5
  "eggModule": {
6
6
  "name": "teggAopRuntime"
7
7
  },
8
8
  "type": "module",
9
9
  "exports": {
10
- ".": {
11
- "types": "./src/index.d.ts",
12
- "default": "./src/index.js"
13
- }
10
+ ".": "./dist/index.js",
11
+ "./package.json": "./package.json"
14
12
  },
15
13
  "files": [
16
- "src/**/*.js",
17
- "src/**/*.d.ts"
14
+ "dist"
18
15
  ],
19
16
  "keywords": [
20
17
  "egg",
@@ -23,15 +20,9 @@
23
20
  "tegg",
24
21
  "aop"
25
22
  ],
26
- "scripts": {
27
- "clean": "tsc -b --clean",
28
- "tsc": "npm run clean && tsc -p ./tsconfig.json",
29
- "tsc:pub": "npm run tsc",
30
- "prepublishOnly": "npm run tsc"
31
- },
32
23
  "author": "killagu <killa123@126.com>",
33
24
  "license": "MIT",
34
- "homepage": "https://github.com/eggjs/tegg",
25
+ "homepage": "https://github.com/eggjs/tegg/tree/next/core/aop-runtime",
35
26
  "bugs": {
36
27
  "url": "https://github.com/eggjs/tegg/issues"
37
28
  },
@@ -41,28 +32,35 @@
41
32
  "directory": "core/aop-runtime"
42
33
  },
43
34
  "engines": {
44
- "node": ">=20.0.0"
35
+ "node": ">=22.18.0"
45
36
  },
46
37
  "publishConfig": {
47
38
  "access": "public"
48
39
  },
49
40
  "dependencies": {
50
- "@eggjs/aop-decorator": "^4.0.0-beta.1",
51
- "@eggjs/core-decorator": "^4.0.0-beta.1",
52
- "@eggjs/tegg-common-util": "^4.0.0-beta.1",
53
- "@eggjs/tegg-lifecycle": "^4.0.0-beta.1",
54
- "@eggjs/tegg-metadata": "^4.0.0-beta.1",
55
- "@eggjs/tegg-runtime": "^4.0.0-beta.1",
56
- "@eggjs/tegg-types": "^4.0.0-beta.1",
57
- "koa-compose": "^4.1.0"
41
+ "koa-compose": "^4.1.0",
42
+ "@eggjs/aop-decorator": "4.0.0-beta.11",
43
+ "@eggjs/core-decorator": "4.0.0-beta.11",
44
+ "@eggjs/tegg-common-util": "4.0.0-beta.11",
45
+ "@eggjs/tegg-metadata": "4.0.0-beta.11",
46
+ "@eggjs/tegg-types": "4.0.0-beta.11",
47
+ "@eggjs/tegg-runtime": "4.0.0-beta.11"
58
48
  },
59
49
  "devDependencies": {
60
- "@eggjs/module-test-util": "^4.0.0-beta.1",
61
- "@eggjs/tegg-loader": "^4.0.0-beta.1",
62
- "@types/koa-compose": "3",
63
- "@types/node": "22",
64
- "ts-node": "10",
65
- "typescript": "5"
50
+ "@types/koa-compose": "^3.2.5",
51
+ "@types/node": "^22.10.5",
52
+ "typescript": "^5.9.3",
53
+ "tsdown": "^0.15.6",
54
+ "unplugin-unused": "^0.5.3",
55
+ "@eggjs/module-test-util": "4.0.0-beta.4",
56
+ "@eggjs/tegg-loader": "4.0.0-beta.11"
66
57
  },
67
- "gitHead": "79a22905272d6de7fe06152231dff65d213d9166"
68
- }
58
+ "main": "./dist/index.js",
59
+ "module": "./dist/index.js",
60
+ "types": "./dist/index.d.ts",
61
+ "scripts": {
62
+ "clean": "rimraf dist *.tsbuildinfo",
63
+ "build": "tsdown && npm run clean && tsc -p tsconfig.build.json",
64
+ "typecheck": "tsc --noEmit"
65
+ }
66
+ }
@@ -1,95 +0,0 @@
1
- import compose from 'koa-compose';
2
- export class AspectExecutor {
3
- obj;
4
- method;
5
- aspectAdviceList;
6
- constructor(obj, method, aspectAdviceList) {
7
- this.obj = obj;
8
- this.method = method;
9
- this.aspectAdviceList = aspectAdviceList;
10
- }
11
- async execute(...args) {
12
- const ctx = {
13
- that: this.obj,
14
- method: this.method,
15
- args,
16
- };
17
- await this.beforeCall(ctx);
18
- try {
19
- const result = await this.doExecute(ctx);
20
- await this.afterReturn(ctx, result);
21
- return result;
22
- }
23
- catch (e) {
24
- await this.afterThrow(ctx, e);
25
- throw e;
26
- }
27
- finally {
28
- await this.afterFinally(ctx);
29
- }
30
- }
31
- async beforeCall(ctx) {
32
- for (const aspectAdvice of this.aspectAdviceList) {
33
- const advice = ctx.that[aspectAdvice.name];
34
- if (advice.beforeCall) {
35
- /**
36
- * 这里...写法使传入的参数变成了一个新的对象
37
- * 因此beforeCall里面如果修改了ctx.args
38
- * 最新的args是不会在方法里生效的
39
- * 先保证args可以生效
40
- * 不改动其余地方
41
- */
42
- const params = { ...ctx, adviceParams: aspectAdvice.adviceParams };
43
- await advice.beforeCall(params);
44
- ctx.args = params.args;
45
- }
46
- }
47
- }
48
- async afterReturn(ctx, result) {
49
- for (const aspectAdvice of this.aspectAdviceList) {
50
- const advice = ctx.that[aspectAdvice.name];
51
- if (advice.afterReturn) {
52
- await advice.afterReturn({ ...ctx, adviceParams: aspectAdvice.adviceParams }, result);
53
- }
54
- }
55
- }
56
- async afterThrow(ctx, error) {
57
- for (const aspectAdvice of this.aspectAdviceList) {
58
- const advice = ctx.that[aspectAdvice.name];
59
- if (advice.afterThrow) {
60
- await advice.afterThrow({ ...ctx, adviceParams: aspectAdvice.adviceParams }, error);
61
- }
62
- }
63
- }
64
- async afterFinally(ctx) {
65
- for (const aspectAdvice of this.aspectAdviceList) {
66
- const advice = ctx.that[aspectAdvice.name];
67
- if (advice.afterFinally) {
68
- await advice.afterFinally({ ...ctx, adviceParams: aspectAdvice.adviceParams });
69
- }
70
- }
71
- }
72
- async doExecute(ctx) {
73
- const lastCall = () => {
74
- const originMethod = Object.getPrototypeOf(this.obj)[this.method];
75
- return Reflect.apply(originMethod, ctx.that, ctx.args);
76
- };
77
- const functions = [];
78
- for (const aspectAdvice of this.aspectAdviceList) {
79
- const advice = ctx.that[aspectAdvice.name];
80
- const fn = advice.around;
81
- if (fn) {
82
- functions.push(async (ctx, next) => {
83
- const fnCtx = {
84
- ...ctx,
85
- adviceParams: aspectAdvice.adviceParams,
86
- };
87
- return await fn.call(advice, fnCtx, next);
88
- });
89
- }
90
- }
91
- functions.push(lastCall);
92
- return compose(functions)(ctx);
93
- }
94
- }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBc3BlY3RFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFTbEMsTUFBTSxPQUFPLGNBQWM7SUFDekIsR0FBRyxDQUFTO0lBQ1osTUFBTSxDQUFjO0lBQ3BCLGdCQUFnQixDQUEwQjtJQUUxQyxZQUFZLEdBQVcsRUFBRSxNQUFtQixFQUFFLGdCQUF5QztRQUNyRixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxHQUFHLEdBQTBCO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBOEI7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLElBQUk7U0FDTCxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFVLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFD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
@@ -1,53 +0,0 @@
1
- import { AspectMetaBuilder, CrosscutInfoUtil } from '@eggjs/aop-decorator';
2
- import { ClassProtoDescriptor, } from '@eggjs/tegg-metadata';
3
- export function crossCutGraphHook(globalGraph) {
4
- for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
5
- for (const crossCutProtoNode of moduleNode.val.protos) {
6
- const protoNodes = findCrossCuttedClazz(globalGraph, crossCutProtoNode);
7
- if (!protoNodes)
8
- continue;
9
- for (const crossCuttedProtoNode of protoNodes) {
10
- const crossCuttedModuleNode = globalGraph.findModuleNode(crossCuttedProtoNode.val.proto.instanceModuleName);
11
- if (!crossCuttedModuleNode)
12
- continue;
13
- globalGraph.addInject(crossCuttedModuleNode, crossCuttedProtoNode, crossCutProtoNode, crossCutProtoNode.val.proto.name);
14
- }
15
- }
16
- }
17
- }
18
- function findCrossCuttedClazz(globalGraph, protoNode) {
19
- const proto = protoNode.val.proto;
20
- if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
21
- return;
22
- }
23
- if (!CrosscutInfoUtil.isCrosscutAdvice(proto.clazz)) {
24
- return;
25
- }
26
- const crosscutInfoList = CrosscutInfoUtil.getCrosscutInfoList(proto.clazz);
27
- const result = [];
28
- // eslint-disable-next-line no-labels
29
- crosscut: for (const crosscutInfo of crosscutInfoList) {
30
- for (const protoNode of globalGraph.protoGraph.nodes.values()) {
31
- if (checkClazzMatchCrossCut(protoNode, crosscutInfo)) {
32
- result.push(protoNode);
33
- // eslint-disable-next-line no-labels
34
- break crosscut;
35
- }
36
- }
37
- }
38
- return result;
39
- }
40
- function checkClazzMatchCrossCut(protoNode, crosscutInfo) {
41
- const proto = protoNode.val.proto;
42
- if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
43
- return;
44
- }
45
- const allMethods = AspectMetaBuilder.getAllMethods(proto.clazz);
46
- for (const method of allMethods) {
47
- if (crosscutInfo.pointcutInfo.match(proto.clazz, method)) {
48
- return true;
49
- }
50
- }
51
- return false;
52
- }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Jvc3NDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJDcm9zc0N1dEdyYXBoSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekYsT0FBTyxFQUNMLG9CQUFvQixHQUlyQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUF3QjtJQUN4RCxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDaEUsS0FBSyxNQUFNLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsU0FBUztZQUMxQixLQUFLLE1BQU0sb0JBQW9CLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxxQkFBcUI7b0JBQUUsU0FBUztnQkFDckMsV0FBVyxDQUFDLFNBQVMsQ0FDbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxXQUF3QixFQUFFLFNBQW9EO0lBQzFHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQWdELEVBQUUsQ0FBQztJQUMvRCxxQ0FBcUM7SUFDckMsUUFBUSxFQUFFLEtBQUssTUFBTSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDOUQsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkIscUNBQXFDO2dCQUNyQyxNQUFNLFFBQVEsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxTQUErQixFQUFFLFlBQTBCO0lBQzFGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
@@ -1,59 +0,0 @@
1
- import assert from 'node:assert';
2
- import { ASPECT_LIST, InjectType } from '@eggjs/tegg-types';
3
- import { PrototypeUtil } from '@eggjs/core-decorator';
4
- import { EggContainerFactory } from '@eggjs/tegg-runtime';
5
- import { AspectExecutor } from './AspectExecutor.js';
6
- export class EggObjectAopHook {
7
- hijackMethods(obj, aspectList) {
8
- for (const aspect of aspectList) {
9
- const newExecutor = new AspectExecutor(obj, aspect.method, aspect.adviceList);
10
- obj[aspect.method] = newExecutor.execute.bind(newExecutor);
11
- }
12
- }
13
- // constructor inject only paas obj to constructor
14
- // should manually define obj to property
15
- injectAdvice(eggObject, obj, aspectList) {
16
- if (eggObject.proto.getMetaData(PrototypeUtil.INJECT_TYPE) !== InjectType.CONSTRUCTOR) {
17
- return;
18
- }
19
- for (const aspect of aspectList) {
20
- for (const advice of aspect.adviceList) {
21
- const injectObject = eggObject.proto.injectObjects.find(t => t.objName === advice.name);
22
- assert(injectObject, `not found inject advice ${advice.name}`);
23
- const adviceObj = EggContainerFactory.getEggObject(injectObject.proto, advice.name);
24
- Object.defineProperty(obj, advice.name, {
25
- value: adviceObj.obj,
26
- enumerable: false,
27
- });
28
- }
29
- }
30
- }
31
- async postCreate(_, eggObject) {
32
- const aspectList = eggObject.proto.getMetaData(ASPECT_LIST);
33
- if (!aspectList || !aspectList.length)
34
- return;
35
- const propertyDesc = eggObject.constructor && Reflect.getOwnPropertyDescriptor(eggObject.constructor.prototype, 'obj');
36
- // process the lazy getter
37
- if (propertyDesc?.get) {
38
- let obj;
39
- // eslint-disable-next-line
40
- const self = this;
41
- Object.defineProperty(eggObject, 'obj', {
42
- ...propertyDesc,
43
- get() {
44
- if (!obj) {
45
- obj = Reflect.apply(propertyDesc.get, eggObject, []);
46
- self.hijackMethods(obj, aspectList);
47
- self.injectAdvice(eggObject, obj, aspectList);
48
- }
49
- return obj;
50
- },
51
- });
52
- }
53
- else {
54
- this.hijackMethods(eggObject.obj, aspectList);
55
- this.injectAdvice(eggObject, eggObject.obj, aspectList);
56
- }
57
- }
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0QW9wSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVnZ09iamVjdEFvcEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLGFBQWEsQ0FBQyxHQUFRLEVBQUUsVUFBeUI7UUFDdkQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCx5Q0FBeUM7SUFDakMsWUFBWSxDQUFDLFNBQW9CLEVBQUUsR0FBUSxFQUFFLFVBQXlCO1FBQzVFLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RixPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4RixNQUFNLENBQUMsWUFBWSxFQUFFLDJCQUEyQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFlBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO29CQUN0QyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUc7b0JBQ3BCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQTRCLEVBQUUsU0FBb0I7UUFDakUsTUFBTSxVQUFVLEdBQThCLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDOUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFFLENBQUM7UUFDeEgsMEJBQTBCO1FBQzFCLElBQUksWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksR0FBWSxDQUFDO1lBQ2pCLDJCQUEyQjtZQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO2dCQUN0QyxHQUFHLFlBQVk7Z0JBQ2YsR0FBRztvQkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ1QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ2hELENBQUM7b0JBQ0QsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -1,13 +0,0 @@
1
- import { CrosscutInfoUtil } from '@eggjs/aop-decorator';
2
- export class EggPrototypeCrossCutHook {
3
- crosscutAdviceFactory;
4
- constructor(crosscutAdviceFactory) {
5
- this.crosscutAdviceFactory = crosscutAdviceFactory;
6
- }
7
- async preCreate(ctx) {
8
- if (CrosscutInfoUtil.isCrosscutAdvice(ctx.clazz)) {
9
- this.crosscutAdviceFactory.registerCrossAdviceClazz(ctx.clazz);
10
- }
11
- }
12
- }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlQ3Jvc3NDdXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRWdnUHJvdG90eXBlQ3Jvc3NDdXRIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBeUIsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRSxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLHFCQUFxQixDQUF3QjtJQUU5RCxZQUFZLHFCQUE0QztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaUM7UUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,37 +0,0 @@
1
- import { AspectInfoUtil, AspectMetaBuilder } from '@eggjs/aop-decorator';
2
- import { PrototypeUtil } from '@eggjs/core-decorator';
3
- import { TeggError } from '@eggjs/tegg-metadata';
4
- export class LoadUnitAopHook {
5
- crosscutAdviceFactory;
6
- constructor(crosscutAdviceFactory) {
7
- this.crosscutAdviceFactory = crosscutAdviceFactory;
8
- }
9
- async postCreate(_, loadUnit) {
10
- for (const proto of loadUnit.iterateEggPrototype()) {
11
- const protoWithClazz = proto;
12
- const clazz = protoWithClazz.clazz;
13
- if (!clazz)
14
- continue;
15
- const builder = new AspectMetaBuilder(clazz, {
16
- crosscutAdviceFactory: this.crosscutAdviceFactory,
17
- });
18
- const aspectList = builder.build();
19
- AspectInfoUtil.setAspectList(aspectList, clazz);
20
- for (const aspect of aspectList) {
21
- for (const advice of aspect.adviceList) {
22
- const adviceProto = PrototypeUtil.getClazzProto(advice.clazz);
23
- if (!adviceProto) {
24
- throw TeggError.create(`Aop Advice(${advice.clazz.name}) not found in loadUnits`, 'advice_not_found');
25
- }
26
- proto.injectObjects.push({
27
- refName: advice.name,
28
- objName: advice.name,
29
- qualifiers: [],
30
- proto: adviceProto,
31
- });
32
- }
33
- }
34
- }
35
- }
36
- }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRBb3BIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTG9hZFVuaXRBb3BIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVNqRCxNQUFNLE9BQU8sZUFBZTtJQUNULHFCQUFxQixDQUF3QjtJQUU5RCxZQUFZLHFCQUE0QztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBMkIsRUFBRSxRQUFrQjtRQUM5RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDbkQsTUFBTSxjQUFjLEdBQUcsS0FBOEIsQ0FBQztZQUN0RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLO2dCQUFFLFNBQVM7WUFFckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN2QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztvQkFDeEcsQ0FBQztvQkFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ3BCLFVBQVUsRUFBRSxFQUFFO3dCQUNkLEtBQUssRUFBRSxXQUEyQjtxQkFDbkMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -1,41 +0,0 @@
1
- import assert from 'node:assert';
2
- import { AspectMetaBuilder, PointcutAdviceInfoUtil } from '@eggjs/aop-decorator';
3
- import { PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
4
- import { ClassProtoDescriptor, } from '@eggjs/tegg-metadata';
5
- export function pointCutGraphHook(globalGraph) {
6
- for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
7
- for (const pointCuttedProtoNode of moduleNode.val.protos) {
8
- const pointCutAdviceProtoList = findPointCutAdvice(globalGraph, pointCuttedProtoNode);
9
- if (!pointCutAdviceProtoList)
10
- continue;
11
- for (const pointCutAdviceProto of pointCutAdviceProtoList) {
12
- globalGraph.addInject(moduleNode, pointCuttedProtoNode, pointCutAdviceProto, pointCutAdviceProto.val.proto.name);
13
- }
14
- }
15
- }
16
- }
17
- function findPointCutAdvice(globalGraph, protoNode) {
18
- const proto = protoNode.val.proto;
19
- if (!ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
20
- return;
21
- }
22
- const result = new Set();
23
- const allMethods = AspectMetaBuilder.getAllMethods(proto.clazz);
24
- for (const method of allMethods) {
25
- const adviceInfoList = PointcutAdviceInfoUtil.getPointcutAdviceInfoList(proto.clazz, method);
26
- for (const { clazz } of adviceInfoList) {
27
- const property = PrototypeUtil.getProperty(clazz);
28
- assert(property, 'not found property');
29
- const injectProto = globalGraph.findDependencyProtoNode(protoNode.val.proto, {
30
- objName: property.name,
31
- refName: property.name,
32
- qualifiers: QualifierUtil.mergeQualifiers(property?.qualifiers ?? [], QualifierUtil.getProtoQualifiers(clazz)),
33
- });
34
- if (injectProto) {
35
- result.add(injectProto);
36
- }
37
- }
38
- }
39
- return Array.from(result);
40
- }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQb2ludEN1dEdyYXBoSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRSxPQUFPLEVBQ0wsb0JBQW9CLEdBSXJCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFdBQXdCO0lBQ3hELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRSxLQUFLLE1BQU0sb0JBQW9CLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6RCxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyx1QkFBdUI7Z0JBQUUsU0FBUztZQUN2QyxLQUFLLE1BQU0sbUJBQW1CLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDMUQsV0FBVyxDQUFDLFNBQVMsQ0FDbkIsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxXQUF3QixFQUFFLFNBQW9EO0lBQ3hHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQW1ELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0YsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksY0FBYyxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO2dCQUMzRSxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDdEIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQ3ZDLFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxFQUMxQixhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQ3hDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQyJ9
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes