@eggjs/tegg-aop-runtime 3.51.2 → 4.0.0-beta.1
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/package.json +28 -27
- package/{dist/src → src}/AspectExecutor.d.ts +3 -3
- package/src/AspectExecutor.js +95 -0
- package/src/CrossCutGraphHook.js +53 -0
- package/src/EggObjectAopHook.js +59 -0
- package/src/EggPrototypeCrossCutHook.js +13 -0
- package/src/LoadUnitAopHook.js +37 -0
- package/src/PointCutGraphHook.js +41 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +7 -0
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -22
- package/dist/src/AspectExecutor.js +0 -99
- package/dist/src/CrossCutGraphHook.js +0 -56
- package/dist/src/EggObjectAopHook.js +0 -65
- package/dist/src/EggPrototypeCrossCutHook.js +0 -16
- package/dist/src/LoadUnitAopHook.js +0 -40
- package/dist/src/PointCutGraphHook.js +0 -48
- /package/{dist/src → src}/CrossCutGraphHook.d.ts +0 -0
- /package/{dist/src → src}/EggObjectAopHook.d.ts +0 -0
- /package/{dist/src → src}/EggPrototypeCrossCutHook.d.ts +0 -0
- /package/{dist/src → src}/LoadUnitAopHook.d.ts +0 -0
- /package/{dist/src → src}/PointCutGraphHook.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/tegg-aop-runtime",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-beta.1",
|
|
4
4
|
"description": "tegg aop",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
5
|
"eggModule": {
|
|
7
6
|
"name": "teggAopRuntime"
|
|
8
7
|
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./src/index.d.ts",
|
|
12
|
+
"default": "./src/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
9
15
|
"files": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
16
|
+
"src/**/*.js",
|
|
17
|
+
"src/**/*.d.ts"
|
|
12
18
|
],
|
|
13
|
-
"typings": "dist/index.d.ts",
|
|
14
19
|
"keywords": [
|
|
15
20
|
"egg",
|
|
16
21
|
"typescript",
|
|
@@ -19,11 +24,10 @@
|
|
|
19
24
|
"aop"
|
|
20
25
|
],
|
|
21
26
|
"scripts": {
|
|
22
|
-
"
|
|
23
|
-
"clean": "tsc -b --clean && rm -rf dist",
|
|
27
|
+
"clean": "tsc -b --clean",
|
|
24
28
|
"tsc": "npm run clean && tsc -p ./tsconfig.json",
|
|
25
|
-
"tsc:pub": "npm run
|
|
26
|
-
"prepublishOnly": "npm run tsc
|
|
29
|
+
"tsc:pub": "npm run tsc",
|
|
30
|
+
"prepublishOnly": "npm run tsc"
|
|
27
31
|
},
|
|
28
32
|
"author": "killagu <killa123@126.com>",
|
|
29
33
|
"license": "MIT",
|
|
@@ -37,31 +41,28 @@
|
|
|
37
41
|
"directory": "core/aop-runtime"
|
|
38
42
|
},
|
|
39
43
|
"engines": {
|
|
40
|
-
"node": ">=
|
|
44
|
+
"node": ">=20.0.0"
|
|
41
45
|
},
|
|
42
46
|
"publishConfig": {
|
|
43
47
|
"access": "public"
|
|
44
48
|
},
|
|
45
49
|
"dependencies": {
|
|
46
|
-
"@eggjs/aop-decorator": "^
|
|
47
|
-
"@eggjs/core-decorator": "^
|
|
48
|
-
"@eggjs/tegg-common-util": "^
|
|
49
|
-
"@eggjs/tegg-lifecycle": "^
|
|
50
|
-
"@eggjs/tegg-metadata": "^
|
|
51
|
-
"@eggjs/tegg-runtime": "^
|
|
52
|
-
"@eggjs/tegg-types": "^
|
|
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",
|
|
53
57
|
"koa-compose": "^4.1.0"
|
|
54
58
|
},
|
|
55
59
|
"devDependencies": {
|
|
56
|
-
"@eggjs/module-test-util": "^
|
|
57
|
-
"@eggjs/tegg-loader": "^
|
|
58
|
-
"@types/
|
|
59
|
-
"@types/node": "
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"mocha": "^10.2.0",
|
|
63
|
-
"ts-node": "^10.9.1",
|
|
64
|
-
"typescript": "^5.0.4"
|
|
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"
|
|
65
66
|
},
|
|
66
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "79a22905272d6de7fe06152231dff65d213d9166"
|
|
67
68
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { AspectAdvice } from '@eggjs/tegg-types';
|
|
2
|
-
interface InternalAdviceContext<T =
|
|
1
|
+
import type { AspectAdvice, IAdvice } from '@eggjs/tegg-types';
|
|
2
|
+
interface InternalAdviceContext<T = Record<string, IAdvice>> {
|
|
3
3
|
that: T;
|
|
4
4
|
method: PropertyKey;
|
|
5
5
|
args: any[];
|
|
6
6
|
}
|
|
7
7
|
export declare class AspectExecutor {
|
|
8
|
-
obj:
|
|
8
|
+
obj: object;
|
|
9
9
|
method: PropertyKey;
|
|
10
10
|
aspectAdviceList: readonly AspectAdvice[];
|
|
11
11
|
constructor(obj: object, method: PropertyKey, aspectAdviceList: readonly AspectAdvice[]);
|
|
@@ -0,0 +1,95 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBc3BlY3RFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFTbEMsTUFBTSxPQUFPLGNBQWM7SUFDekIsR0FBRyxDQUFTO0lBQ1osTUFBTSxDQUFjO0lBQ3BCLGdCQUFnQixDQUEwQjtJQUUxQyxZQUFZLEdBQVcsRUFBRSxNQUFtQixFQUFFLGdCQUF5QztRQUNyRixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxHQUFHLEdBQTBCO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBOEI7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLElBQUk7U0FDTCxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFVLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBMEI7UUFDekMsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEI7Ozs7OzttQkFNRztnQkFDSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ25FLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBMEIsRUFBRSxNQUFXO1FBQ3ZELEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUEwQixFQUFFLEtBQVk7UUFDdkQsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQTBCO1FBQzNDLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQTBCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBNkMsRUFBRSxDQUFDO1FBQy9ELEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQTBCLEVBQUUsSUFBd0IsRUFBRSxFQUFFO29CQUM1RSxNQUFNLEtBQUssR0FBa0I7d0JBQzNCLEdBQUcsR0FBRzt3QkFDTixZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7cUJBQ3hDLENBQUM7b0JBQ0YsT0FBTyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,53 @@
|
|
|
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==
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
|
@@ -0,0 +1,13 @@
|
|
|
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==
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './AspectExecutor.js';
|
|
2
|
+
export * from './CrossCutGraphHook.js';
|
|
3
|
+
export * from './EggObjectAopHook.js';
|
|
4
|
+
export * from './EggPrototypeCrossCutHook.js';
|
|
5
|
+
export * from './LoadUnitAopHook.js';
|
|
6
|
+
export * from './PointCutGraphHook.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQyJ9
|
package/dist/index.d.ts
DELETED
package/dist/index.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./src/EggPrototypeCrossCutHook"), exports);
|
|
18
|
-
__exportStar(require("./src/EggObjectAopHook"), exports);
|
|
19
|
-
__exportStar(require("./src/LoadUnitAopHook"), exports);
|
|
20
|
-
__exportStar(require("./src/CrossCutGraphHook"), exports);
|
|
21
|
-
__exportStar(require("./src/PointCutGraphHook"), exports);
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQStDO0FBQy9DLHlEQUF1QztBQUN2Qyx3REFBc0M7QUFFdEMsMERBQXdDO0FBQ3hDLDBEQUF3QyJ9
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AspectExecutor = void 0;
|
|
7
|
-
const koa_compose_1 = __importDefault(require("koa-compose"));
|
|
8
|
-
class AspectExecutor {
|
|
9
|
-
constructor(obj, method, aspectAdviceList) {
|
|
10
|
-
this.obj = obj;
|
|
11
|
-
this.method = method;
|
|
12
|
-
this.aspectAdviceList = aspectAdviceList;
|
|
13
|
-
}
|
|
14
|
-
async execute(...args) {
|
|
15
|
-
const ctx = {
|
|
16
|
-
that: this.obj,
|
|
17
|
-
method: this.method,
|
|
18
|
-
args,
|
|
19
|
-
};
|
|
20
|
-
await this.beforeCall(ctx);
|
|
21
|
-
try {
|
|
22
|
-
const result = await this.doExecute(ctx);
|
|
23
|
-
await this.afterReturn(ctx, result);
|
|
24
|
-
return result;
|
|
25
|
-
}
|
|
26
|
-
catch (e) {
|
|
27
|
-
await this.afterThrow(ctx, e);
|
|
28
|
-
throw e;
|
|
29
|
-
}
|
|
30
|
-
finally {
|
|
31
|
-
await this.afterFinally(ctx);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async beforeCall(ctx) {
|
|
35
|
-
for (const aspectAdvice of this.aspectAdviceList) {
|
|
36
|
-
const advice = ctx.that[aspectAdvice.name];
|
|
37
|
-
if (advice.beforeCall) {
|
|
38
|
-
/**
|
|
39
|
-
* 这里...写法使传入的参数变成了一个新的对象
|
|
40
|
-
* 因此beforeCall里面如果修改了ctx.args
|
|
41
|
-
* 最新的args是不会在方法里生效的
|
|
42
|
-
* 先保证args可以生效
|
|
43
|
-
* 不改动其余地方
|
|
44
|
-
*/
|
|
45
|
-
const params = { ...ctx, adviceParams: aspectAdvice.adviceParams };
|
|
46
|
-
await advice.beforeCall(params);
|
|
47
|
-
ctx.args = params.args;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async afterReturn(ctx, result) {
|
|
52
|
-
for (const aspectAdvice of this.aspectAdviceList) {
|
|
53
|
-
const advice = ctx.that[aspectAdvice.name];
|
|
54
|
-
if (advice.afterReturn) {
|
|
55
|
-
await advice.afterReturn({ ...ctx, adviceParams: aspectAdvice.adviceParams }, result);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async afterThrow(ctx, error) {
|
|
60
|
-
for (const aspectAdvice of this.aspectAdviceList) {
|
|
61
|
-
const advice = ctx.that[aspectAdvice.name];
|
|
62
|
-
if (advice.afterThrow) {
|
|
63
|
-
await advice.afterThrow({ ...ctx, adviceParams: aspectAdvice.adviceParams }, error);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async afterFinally(ctx) {
|
|
68
|
-
for (const aspectAdvice of this.aspectAdviceList) {
|
|
69
|
-
const advice = ctx.that[aspectAdvice.name];
|
|
70
|
-
if (advice.afterFinally) {
|
|
71
|
-
await advice.afterFinally({ ...ctx, adviceParams: aspectAdvice.adviceParams });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
async doExecute(ctx) {
|
|
76
|
-
const lastCall = () => {
|
|
77
|
-
const originMethod = Object.getPrototypeOf(this.obj)[this.method];
|
|
78
|
-
return Reflect.apply(originMethod, ctx.that, ctx.args);
|
|
79
|
-
};
|
|
80
|
-
const functions = [];
|
|
81
|
-
for (const aspectAdvice of this.aspectAdviceList) {
|
|
82
|
-
const advice = ctx.that[aspectAdvice.name];
|
|
83
|
-
const fn = advice.around;
|
|
84
|
-
if (fn) {
|
|
85
|
-
functions.push(async (ctx, next) => {
|
|
86
|
-
const fnCtx = {
|
|
87
|
-
...ctx,
|
|
88
|
-
adviceParams: aspectAdvice.adviceParams,
|
|
89
|
-
};
|
|
90
|
-
return await fn.call(advice, fnCtx, next);
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
functions.push(lastCall);
|
|
95
|
-
return (0, koa_compose_1.default)(functions)(ctx);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.AspectExecutor = AspectExecutor;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXNwZWN0RXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOERBQWtDO0FBU2xDLE1BQWEsY0FBYztJQUt6QixZQUFZLEdBQVcsRUFBRSxNQUFtQixFQUFFLGdCQUF5QztRQUNyRixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxHQUFHLEdBQTBCO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRztZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixJQUFJO1NBQ0wsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQTBCO1FBQ3pDLEtBQUssTUFBTSxZ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
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.crossCutGraphHook = crossCutGraphHook;
|
|
4
|
-
const aop_decorator_1 = require("@eggjs/aop-decorator");
|
|
5
|
-
const tegg_metadata_1 = require("@eggjs/tegg-metadata");
|
|
6
|
-
function crossCutGraphHook(globalGraph) {
|
|
7
|
-
for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
|
|
8
|
-
for (const crossCutProtoNode of moduleNode.val.protos) {
|
|
9
|
-
const protoNodes = findCrossCuttedClazz(globalGraph, crossCutProtoNode);
|
|
10
|
-
if (!protoNodes)
|
|
11
|
-
continue;
|
|
12
|
-
for (const crossCuttedProtoNode of protoNodes) {
|
|
13
|
-
const crossCuttedModuleNode = globalGraph.findModuleNode(crossCuttedProtoNode.val.proto.instanceModuleName);
|
|
14
|
-
if (!crossCuttedModuleNode)
|
|
15
|
-
continue;
|
|
16
|
-
globalGraph.addInject(crossCuttedModuleNode, crossCuttedProtoNode, crossCutProtoNode, crossCutProtoNode.val.proto.name);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function findCrossCuttedClazz(globalGraph, protoNode) {
|
|
22
|
-
const proto = protoNode.val.proto;
|
|
23
|
-
if (!tegg_metadata_1.ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (!aop_decorator_1.CrosscutInfoUtil.isCrosscutAdvice(proto.clazz)) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const crosscutInfoList = aop_decorator_1.CrosscutInfoUtil.getCrosscutInfoList(proto.clazz);
|
|
30
|
-
const result = [];
|
|
31
|
-
// eslint-disable-next-line no-labels
|
|
32
|
-
crosscut: for (const crosscutInfo of crosscutInfoList) {
|
|
33
|
-
for (const protoNode of globalGraph.protoGraph.nodes.values()) {
|
|
34
|
-
if (checkClazzMatchCrossCut(protoNode, crosscutInfo)) {
|
|
35
|
-
result.push(protoNode);
|
|
36
|
-
// eslint-disable-next-line no-labels
|
|
37
|
-
break crosscut;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
function checkClazzMatchCrossCut(protoNode, crosscutInfo) {
|
|
44
|
-
const proto = protoNode.val.proto;
|
|
45
|
-
if (!tegg_metadata_1.ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const allMethods = aop_decorator_1.AspectMetaBuilder.getAllMethods(proto.clazz);
|
|
49
|
-
for (const method of allMethods) {
|
|
50
|
-
if (crosscutInfo.pointcutInfo.match(proto.clazz, method)) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Jvc3NDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQ3Jvc3NDdXRHcmFwaEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSw4Q0FnQkM7QUF6QkQsd0RBQXlGO0FBRXpGLHdEQUs4QjtBQUU5QixTQUFnQixpQkFBaUIsQ0FBQyxXQUF3QjtJQUN4RCxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDaEUsS0FBSyxNQUFNLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsU0FBUztZQUMxQixLQUFLLE1BQU0sb0JBQW9CLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxxQkFBcUI7b0JBQUUsU0FBUztnQkFDckMsV0FBVyxDQUFDLFNBQVMsQ0FDbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxXQUF3QixFQUFFLFNBQW9EO0lBQzFHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQ0FBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxDQUFDLGdDQUFnQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxnQ0FBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQWdELEVBQUUsQ0FBQztJQUMvRCxxQ0FBcUM7SUFDckMsUUFBUSxFQUFFLEtBQUssTUFBTSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDOUQsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkIscUNBQXFDO2dCQUNyQyxNQUFNLFFBQVEsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxTQUErQixFQUFFLFlBQTBCO0lBQzFGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQ0FBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsaUNBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EggObjectAopHook = void 0;
|
|
7
|
-
const tegg_types_1 = require("@eggjs/tegg-types");
|
|
8
|
-
const AspectExecutor_1 = require("./AspectExecutor");
|
|
9
|
-
const core_decorator_1 = require("@eggjs/core-decorator");
|
|
10
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
-
const tegg_runtime_1 = require("@eggjs/tegg-runtime");
|
|
12
|
-
class EggObjectAopHook {
|
|
13
|
-
hijackMethods(obj, aspectList) {
|
|
14
|
-
for (const aspect of aspectList) {
|
|
15
|
-
const newExecutor = new AspectExecutor_1.AspectExecutor(obj, aspect.method, aspect.adviceList);
|
|
16
|
-
obj[aspect.method] = newExecutor.execute.bind(newExecutor);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
// constructor inject only paas obj to constructor
|
|
20
|
-
// should manually define obj to property
|
|
21
|
-
injectAdvice(eggObject, obj, aspectList) {
|
|
22
|
-
if (eggObject.proto.getMetaData(core_decorator_1.PrototypeUtil.INJECT_TYPE) !== tegg_types_1.InjectType.CONSTRUCTOR) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
for (const aspect of aspectList) {
|
|
26
|
-
for (const advice of aspect.adviceList) {
|
|
27
|
-
const injectObject = eggObject.proto.injectObjects.find(t => t.objName === advice.name);
|
|
28
|
-
(0, node_assert_1.default)(injectObject, `not found inject advice ${advice.name}`);
|
|
29
|
-
const adviceObj = tegg_runtime_1.EggContainerFactory.getEggObject(injectObject.proto, advice.name);
|
|
30
|
-
Object.defineProperty(obj, advice.name, {
|
|
31
|
-
value: adviceObj.obj,
|
|
32
|
-
enumerable: false,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
async postCreate(_, eggObject) {
|
|
38
|
-
const aspectList = eggObject.proto.getMetaData(tegg_types_1.ASPECT_LIST);
|
|
39
|
-
if (!aspectList || !aspectList.length)
|
|
40
|
-
return;
|
|
41
|
-
const propertyDesc = eggObject.constructor && Reflect.getOwnPropertyDescriptor(eggObject.constructor.prototype, 'obj');
|
|
42
|
-
// process the lazy getter
|
|
43
|
-
if (propertyDesc === null || propertyDesc === void 0 ? void 0 : propertyDesc.get) {
|
|
44
|
-
let obj;
|
|
45
|
-
const self = this;
|
|
46
|
-
Object.defineProperty(eggObject, 'obj', {
|
|
47
|
-
...propertyDesc,
|
|
48
|
-
get() {
|
|
49
|
-
if (!obj) {
|
|
50
|
-
obj = Reflect.apply(propertyDesc.get, eggObject, []);
|
|
51
|
-
self.hijackMethods(obj, aspectList);
|
|
52
|
-
self.injectAdvice(eggObject, obj, aspectList);
|
|
53
|
-
}
|
|
54
|
-
return obj;
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
this.hijackMethods(eggObject.obj, aspectList);
|
|
60
|
-
this.injectAdvice(eggObject, eggObject.obj, aspectList);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
exports.EggObjectAopHook = EggObjectAopHook;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0QW9wSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FZ2dPYmplY3RBb3BIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUE0RDtBQUc1RCxxREFBa0Q7QUFDbEQsMERBQXNEO0FBQ3RELDhEQUFpQztBQUNqQyxzREFBMEQ7QUFFMUQsTUFBYSxnQkFBZ0I7SUFDbkIsYUFBYSxDQUFDLEdBQVEsRUFBRSxVQUF5QjtRQUN2RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCx5Q0FBeUM7SUFDakMsWUFBWSxDQUFDLFNBQW9CLEVBQUUsR0FBUSxFQUFFLFVBQXlCO1FBQzVFLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsOEJBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyx1QkFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RGLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hGLElBQUEscUJBQU0sRUFBQyxZQUFZLEVBQUUsMkJBQTJCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLFNBQVMsR0FBRyxrQ0FBbUIsQ0FBQyxZQUFZLENBQUMsWUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JGLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQ3RDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRztvQkFDcEIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBNEIsRUFBRSxTQUFvQjtRQUNqRSxNQUFNLFVBQVUsR0FBOEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsd0JBQVcsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDOUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFFLENBQUM7UUFDeEgsMEJBQTBCO1FBQzFCLElBQUksWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksR0FBRyxDQUFDO1lBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtnQkFDdEMsR0FBRyxZQUFZO2dCQUNmLEdBQUc7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNULEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO29CQUNELE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuREQsNENBbURDIn0=
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EggPrototypeCrossCutHook = void 0;
|
|
4
|
-
const aop_decorator_1 = require("@eggjs/aop-decorator");
|
|
5
|
-
class EggPrototypeCrossCutHook {
|
|
6
|
-
constructor(crosscutAdviceFactory) {
|
|
7
|
-
this.crosscutAdviceFactory = crosscutAdviceFactory;
|
|
8
|
-
}
|
|
9
|
-
async preCreate(ctx) {
|
|
10
|
-
if (aop_decorator_1.CrosscutInfoUtil.isCrosscutAdvice(ctx.clazz)) {
|
|
11
|
-
this.crosscutAdviceFactory.registerCrossAdviceClazz(ctx.clazz);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.EggPrototypeCrossCutHook = EggPrototypeCrossCutHook;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlQ3Jvc3NDdXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VnZ1Byb3RvdHlwZUNyb3NzQ3V0SG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx3REFBK0U7QUFFL0UsTUFBYSx3QkFBd0I7SUFHbkMsWUFBWSxxQkFBNEM7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQWlDO1FBQy9DLElBQUksZ0NBQWdCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBWkQsNERBWUMifQ==
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LoadUnitAopHook = void 0;
|
|
4
|
-
const aop_decorator_1 = require("@eggjs/aop-decorator");
|
|
5
|
-
const core_decorator_1 = require("@eggjs/core-decorator");
|
|
6
|
-
const tegg_metadata_1 = require("@eggjs/tegg-metadata");
|
|
7
|
-
class LoadUnitAopHook {
|
|
8
|
-
constructor(crosscutAdviceFactory) {
|
|
9
|
-
this.crosscutAdviceFactory = crosscutAdviceFactory;
|
|
10
|
-
}
|
|
11
|
-
async postCreate(_, loadUnit) {
|
|
12
|
-
for (const proto of loadUnit.iterateEggPrototype()) {
|
|
13
|
-
const protoWithClazz = proto;
|
|
14
|
-
const clazz = protoWithClazz.clazz;
|
|
15
|
-
if (!clazz)
|
|
16
|
-
continue;
|
|
17
|
-
const builder = new aop_decorator_1.AspectMetaBuilder(clazz, {
|
|
18
|
-
crosscutAdviceFactory: this.crosscutAdviceFactory,
|
|
19
|
-
});
|
|
20
|
-
const aspectList = builder.build();
|
|
21
|
-
aop_decorator_1.AspectInfoUtil.setAspectList(aspectList, clazz);
|
|
22
|
-
for (const aspect of aspectList) {
|
|
23
|
-
for (const advice of aspect.adviceList) {
|
|
24
|
-
const adviceProto = core_decorator_1.PrototypeUtil.getClazzProto(advice.clazz);
|
|
25
|
-
if (!adviceProto) {
|
|
26
|
-
throw tegg_metadata_1.TeggError.create(`Aop Advice(${advice.clazz.name}) not found in loadUnits`, 'advice_not_found');
|
|
27
|
-
}
|
|
28
|
-
proto.injectObjects.push({
|
|
29
|
-
refName: advice.name,
|
|
30
|
-
objName: advice.name,
|
|
31
|
-
qualifiers: [],
|
|
32
|
-
proto: adviceProto,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.LoadUnitAopHook = LoadUnitAopHook;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRBb3BIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xvYWRVbml0QW9wSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3REFBZ0c7QUFDaEcsMERBQXNEO0FBQ3RELHdEQUFpRDtBQVNqRCxNQUFhLGVBQWU7SUFHMUIsWUFBWSxxQkFBNEM7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQTJCLEVBQUUsUUFBa0I7UUFDOUQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQ25ELE1BQU0sY0FBYyxHQUFHLEtBQThCLENBQUM7WUFDdEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSztnQkFBRSxTQUFTO1lBRXJCLE1BQU0sT0FBTyxHQUFHLElBQUksaUNBQWlCLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCO2FBQ2xELENBQUMsQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyw4QkFBYyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sV0FBVyxHQUFHLDhCQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQixNQUFNLHlCQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLDBCQUEwQixFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ3hHLENBQUM7b0JBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSTt3QkFDcEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNwQixVQUFVLEVBQUUsRUFBRTt3QkFDZCxLQUFLLEVBQUUsV0FBMkI7cUJBQ25DLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuQ0QsMENBbUNDIn0=
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.pointCutGraphHook = pointCutGraphHook;
|
|
7
|
-
const aop_decorator_1 = require("@eggjs/aop-decorator");
|
|
8
|
-
const core_decorator_1 = require("@eggjs/core-decorator");
|
|
9
|
-
const tegg_metadata_1 = require("@eggjs/tegg-metadata");
|
|
10
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
-
function pointCutGraphHook(globalGraph) {
|
|
12
|
-
for (const moduleNode of globalGraph.moduleGraph.nodes.values()) {
|
|
13
|
-
for (const pointCuttedProtoNode of moduleNode.val.protos) {
|
|
14
|
-
const pointCutAdviceProtoList = findPointCutAdvice(globalGraph, pointCuttedProtoNode);
|
|
15
|
-
if (!pointCutAdviceProtoList)
|
|
16
|
-
continue;
|
|
17
|
-
for (const pointCutAdviceProto of pointCutAdviceProtoList) {
|
|
18
|
-
globalGraph.addInject(moduleNode, pointCuttedProtoNode, pointCutAdviceProto, pointCutAdviceProto.val.proto.name);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function findPointCutAdvice(globalGraph, protoNode) {
|
|
24
|
-
var _a;
|
|
25
|
-
const proto = protoNode.val.proto;
|
|
26
|
-
if (!tegg_metadata_1.ClassProtoDescriptor.isClassProtoDescriptor(proto)) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const result = new Set();
|
|
30
|
-
const allMethods = aop_decorator_1.AspectMetaBuilder.getAllMethods(proto.clazz);
|
|
31
|
-
for (const method of allMethods) {
|
|
32
|
-
const adviceInfoList = aop_decorator_1.PointcutAdviceInfoUtil.getPointcutAdviceInfoList(proto.clazz, method);
|
|
33
|
-
for (const { clazz } of adviceInfoList) {
|
|
34
|
-
const property = core_decorator_1.PrototypeUtil.getProperty(clazz);
|
|
35
|
-
(0, node_assert_1.default)(property, 'not found property');
|
|
36
|
-
const injectProto = globalGraph.findDependencyProtoNode(protoNode.val.proto, {
|
|
37
|
-
objName: property.name,
|
|
38
|
-
refName: property.name,
|
|
39
|
-
qualifiers: core_decorator_1.QualifierUtil.mergeQualifiers((_a = property === null || property === void 0 ? void 0 : property.qualifiers) !== null && _a !== void 0 ? _a : [], core_decorator_1.QualifierUtil.getProtoQualifiers(clazz)),
|
|
40
|
-
});
|
|
41
|
-
if (injectProto) {
|
|
42
|
-
result.add(injectProto);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return Array.from(result);
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRDdXRHcmFwaEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUG9pbnRDdXRHcmFwaEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXQSw4Q0FjQztBQXpCRCx3REFBaUY7QUFDakYsMERBQXFFO0FBRXJFLHdEQUs4QjtBQUM5Qiw4REFBaUM7QUFFakMsU0FBZ0IsaUJBQWlCLENBQUMsV0FBd0I7SUFDeEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pELE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLHVCQUF1QjtnQkFBRSxTQUFTO1lBQ3ZDLEtBQUssTUFBTSxtQkFBbUIsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO2dCQUMxRCxXQUFXLENBQUMsU0FBUyxDQUNuQixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFdBQXdCLEVBQUUsU0FBb0Q7O0lBQ3hHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxvQ0FBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQW1ELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekUsTUFBTSxVQUFVLEdBQUcsaUNBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLHNDQUFzQixDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0YsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksY0FBYyxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsOEJBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsSUFBQSxxQkFBTSxFQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDM0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUN0QixPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3RCLFVBQVUsRUFBRSw4QkFBYSxDQUFDLGVBQWUsQ0FDdkMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSxtQ0FBSSxFQUFFLEVBQzFCLDhCQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQ3hDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQyJ9
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|