@eggjs/tegg-aop-runtime 4.0.0-beta.2 → 4.0.0-beta.3

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/tegg-aop-runtime",
3
- "version": "4.0.0-beta.2",
3
+ "version": "4.0.0-beta.3",
4
4
  "description": "tegg aop",
5
5
  "eggModule": {
6
6
  "name": "teggAopRuntime"
@@ -47,22 +47,22 @@
47
47
  "access": "public"
48
48
  },
49
49
  "dependencies": {
50
- "@eggjs/aop-decorator": "^4.0.0-beta.2",
51
- "@eggjs/core-decorator": "^4.0.0-beta.2",
52
- "@eggjs/tegg-common-util": "^4.0.0-beta.2",
53
- "@eggjs/tegg-lifecycle": "^4.0.0-beta.2",
54
- "@eggjs/tegg-metadata": "^4.0.0-beta.2",
55
- "@eggjs/tegg-runtime": "^4.0.0-beta.2",
56
- "@eggjs/tegg-types": "^4.0.0-beta.2",
50
+ "@eggjs/aop-decorator": "^4.0.0-beta.3",
51
+ "@eggjs/core-decorator": "^4.0.0-beta.3",
52
+ "@eggjs/tegg-common-util": "^4.0.0-beta.3",
53
+ "@eggjs/tegg-lifecycle": "^4.0.0-beta.3",
54
+ "@eggjs/tegg-metadata": "^4.0.0-beta.3",
55
+ "@eggjs/tegg-runtime": "^4.0.0-beta.3",
56
+ "@eggjs/tegg-types": "^4.0.0-beta.3",
57
57
  "koa-compose": "^4.1.0"
58
58
  },
59
59
  "devDependencies": {
60
- "@eggjs/module-test-util": "^4.0.0-beta.2",
61
- "@eggjs/tegg-loader": "^4.0.0-beta.2",
60
+ "@eggjs/module-test-util": "^4.0.0-beta.3",
61
+ "@eggjs/tegg-loader": "^4.0.0-beta.3",
62
62
  "@types/koa-compose": "3",
63
63
  "@types/node": "22",
64
64
  "ts-node": "10",
65
65
  "typescript": "5"
66
66
  },
67
- "gitHead": "7e29d49dcc2eb26909697d5543b3c4f596c9e927"
67
+ "gitHead": "6b84b0275fd728a4973746a5341236fe0481a33e"
68
68
  }
@@ -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;
@@ -1,4 +1,30 @@
1
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
+ }
2
28
  export class AspectExecutor {
3
29
  obj;
4
30
  method;
@@ -9,11 +35,7 @@ export class AspectExecutor {
9
35
  this.aspectAdviceList = aspectAdviceList;
10
36
  }
11
37
  async execute(...args) {
12
- const ctx = {
13
- that: this.obj,
14
- method: this.method,
15
- args,
16
- };
38
+ const ctx = new InternalAdviceContext(this.obj, this.method, args);
17
39
  await this.beforeCall(ctx);
18
40
  try {
19
41
  const result = await this.doExecute(ctx);
@@ -39,9 +61,9 @@ export class AspectExecutor {
39
61
  * 先保证args可以生效
40
62
  * 不改动其余地方
41
63
  */
42
- const params = { ...ctx, adviceParams: aspectAdvice.adviceParams };
43
- await advice.beforeCall(params);
44
- ctx.args = params.args;
64
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
65
+ await advice.beforeCall(fnCtx);
66
+ ctx.args = fnCtx.args;
45
67
  }
46
68
  }
47
69
  }
@@ -49,7 +71,8 @@ export class AspectExecutor {
49
71
  for (const aspectAdvice of this.aspectAdviceList) {
50
72
  const advice = ctx.that[aspectAdvice.name];
51
73
  if (advice.afterReturn) {
52
- await advice.afterReturn({ ...ctx, adviceParams: aspectAdvice.adviceParams }, result);
74
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
75
+ await advice.afterReturn(fnCtx, result);
53
76
  }
54
77
  }
55
78
  }
@@ -57,7 +80,8 @@ export class AspectExecutor {
57
80
  for (const aspectAdvice of this.aspectAdviceList) {
58
81
  const advice = ctx.that[aspectAdvice.name];
59
82
  if (advice.afterThrow) {
60
- await advice.afterThrow({ ...ctx, adviceParams: aspectAdvice.adviceParams }, error);
83
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
84
+ await advice.afterThrow(fnCtx, error);
61
85
  }
62
86
  }
63
87
  }
@@ -65,7 +89,8 @@ export class AspectExecutor {
65
89
  for (const aspectAdvice of this.aspectAdviceList) {
66
90
  const advice = ctx.that[aspectAdvice.name];
67
91
  if (advice.afterFinally) {
68
- await advice.afterFinally({ ...ctx, adviceParams: aspectAdvice.adviceParams });
92
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
93
+ await advice.afterFinally(fnCtx);
69
94
  }
70
95
  }
71
96
  }
@@ -80,10 +105,7 @@ export class AspectExecutor {
80
105
  const fn = advice.around;
81
106
  if (fn) {
82
107
  functions.push(async (ctx, next) => {
83
- const fnCtx = {
84
- ...ctx,
85
- adviceParams: aspectAdvice.adviceParams,
86
- };
108
+ const fnCtx = ctx.createCallContext(aspectAdvice.adviceParams);
87
109
  return await fn.call(advice, fnCtx, next);
88
110
  });
89
111
  }
@@ -92,4 +114,4 @@ export class AspectExecutor {
92
114
  return compose(functions)(ctx);
93
115
  }
94
116
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBc3BlY3RFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFTbEMsTUFBTSxPQUFPLGNBQWM7SUFDekIsR0FBRyxDQUFTO0lBQ1osTUFBTSxDQUFjO0lBQ3BCLGdCQUFnQixDQUEwQjtJQUUxQyxZQUFZLEdBQVcsRUFBRSxNQUFtQixFQUFFLGdCQUF5QztRQUNyRixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxHQUFHLEdBQTBCO1lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBOEI7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLElBQUk7U0FDTCxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFVLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFD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
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNwZWN0RXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBc3BlY3RFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFHbEMsTUFBTSxxQkFBcUI7SUFDUixLQUFLLENBQXdCO0lBQzlDLElBQUksQ0FBSTtJQUNSLE1BQU0sQ0FBYztJQUNwQixJQUFJLENBQVE7SUFFWixZQUNFLElBQU8sRUFDUCxNQUFtQixFQUNuQixJQUFXO1FBRVgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQWdCLEVBQUUsS0FBVTtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBa0I7UUFDbEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUN6QixZQUFZLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLFlBQVk7YUFDcEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBYztJQUN6QixHQUFHLENBQVM7SUFDWixNQUFNLENBQWM7SUFDcEIsZ0JBQWdCLENBQTBCO0lBRTFDLFlBQVksR0FBVyxFQUFFLE1BQW1CLEVBQUUsZ0JBQXlDO1FBQ3JGLElBQUksQ0FBQyxHQUFH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