@eggjs/tegg-aop-plugin 3.62.0 → 4.0.0-beta.10

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,5 +1,17 @@
1
1
  # @eggjs/tegg-aop-plugin
2
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-plugin.svg?style=flat)](https://nodejs.org/en/download/)
7
+
8
+ [npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-aop-plugin.svg?style=flat-square
9
+ [npm-url]: https://npmjs.org/package/@eggjs/tegg-aop-plugin
10
+ [snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-aop-plugin/badge.svg?style=flat-square
11
+ [snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-aop-plugin
12
+ [download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-aop-plugin.svg?style=flat-square
13
+ [download-url]: https://npmjs.org/package/@eggjs/tegg-aop-plugin
14
+
3
15
  ## Usage
4
16
 
5
17
  ```js
@@ -14,11 +26,15 @@ export.aopModule = {
14
26
 
15
27
  使用 `@Advice` 注解来申明一个实现,可以用来监听、拦截方法执行。
16
28
 
17
- **注意:Advice 也是一种 Prototype,可以通过 initType 来指定不同的生命周期。**
29
+ **注意:Advice 也是一种 Prototype,可以通过 initType 来指定不同的生命周期,默认为 Singleton。**
30
+
31
+ 如需在调用过程中保存状态,可以将状态通过 `AdviceContext` 的 get/set 来保存。
18
32
 
19
33
  ```ts
20
34
  import { Advice, IAdvice } from '@eggjs/tegg/aop';
21
35
 
36
+ const FOO_STATE_SYMBOL = Symbol('AdviceExample#state');
37
+
22
38
  @Advice()
23
39
  export class AdviceExample implements IAdvice {
24
40
  // Advice 中可以正常的注入其他的对象
@@ -28,11 +44,13 @@ export class AdviceExample implements IAdvice {
28
44
  // 在函数执行前执行
29
45
  async beforeCall(ctx: AdviceContext): Promise<void> {
30
46
  // ...
47
+ ctx.set(FOO_STATE_SYMBOL, 23333);
31
48
  }
32
49
 
33
50
  // 在函数成功后执行
34
51
  async afterReturn(ctx: AdviceContext, result: any): Promise<void> {
35
- // ...
52
+ // 将会打印 23333
53
+ console.log(ctx.get(FOO_STATE_SYMBOL));
36
54
  }
37
55
 
38
56
  // 在函数成功后执行
@@ -113,7 +131,7 @@ export class CrosscutNameAdviceExample implements IAdvice {
113
131
  }
114
132
  })
115
133
  @Advice()
116
- ****export class CrosscutCustomAdviceExample implements IAdvice {
134
+ export class CrosscutCustomAdviceExample implements IAdvice {
117
135
  }
118
136
 
119
137
  ```
@@ -1,5 +1,5 @@
1
- import { Application } from 'egg';
2
- export default class AopAppHook {
1
+ import { Application, type ILifecycleBoot } from 'egg';
2
+ export default class AopAppHook implements ILifecycleBoot {
3
3
  private readonly app;
4
4
  private readonly crosscutAdviceFactory;
5
5
  private readonly loadUnitAopHook;
@@ -9,5 +9,5 @@ export default class AopAppHook {
9
9
  constructor(app: Application);
10
10
  configDidLoad(): void;
11
11
  didLoad(): Promise<void>;
12
- beforeClose(): void;
12
+ beforeClose(): Promise<void>;
13
13
  }
package/dist/app.js ADDED
@@ -0,0 +1,41 @@
1
+ import assert from 'node:assert';
2
+ import { Application } from 'egg';
3
+ import { CrosscutAdviceFactory } from '@eggjs/tegg/aop';
4
+ import { crossCutGraphHook, EggObjectAopHook, EggPrototypeCrossCutHook, LoadUnitAopHook, pointCutGraphHook, } from '@eggjs/tegg-aop-runtime';
5
+ import { GlobalGraph } from '@eggjs/tegg-metadata';
6
+ import { AopContextHook } from "./lib/AopContextHook.js";
7
+ export default class AopAppHook {
8
+ app;
9
+ crosscutAdviceFactory;
10
+ loadUnitAopHook;
11
+ eggPrototypeCrossCutHook;
12
+ eggObjectAopHook;
13
+ aopContextHook;
14
+ constructor(app) {
15
+ this.app = app;
16
+ this.crosscutAdviceFactory = new CrosscutAdviceFactory();
17
+ this.loadUnitAopHook = new LoadUnitAopHook(this.crosscutAdviceFactory);
18
+ this.eggPrototypeCrossCutHook = new EggPrototypeCrossCutHook(this.crosscutAdviceFactory);
19
+ this.eggObjectAopHook = new EggObjectAopHook();
20
+ }
21
+ configDidLoad() {
22
+ this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.eggPrototypeCrossCutHook);
23
+ this.app.loadUnitLifecycleUtil.registerLifecycle(this.loadUnitAopHook);
24
+ this.app.eggObjectLifecycleUtil.registerLifecycle(this.eggObjectAopHook);
25
+ }
26
+ async didLoad() {
27
+ await this.app.moduleHandler.ready();
28
+ assert(GlobalGraph.instance, 'GlobalGraph.instance is not set');
29
+ GlobalGraph.instance.registerBuildHook(crossCutGraphHook);
30
+ GlobalGraph.instance.registerBuildHook(pointCutGraphHook);
31
+ this.aopContextHook = new AopContextHook(this.app.moduleHandler);
32
+ this.app.eggContextLifecycleUtil.registerLifecycle(this.aopContextHook);
33
+ }
34
+ async beforeClose() {
35
+ this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.eggPrototypeCrossCutHook);
36
+ this.app.loadUnitLifecycleUtil.deleteLifecycle(this.loadUnitAopHook);
37
+ this.app.eggObjectLifecycleUtil.deleteLifecycle(this.eggObjectAopHook);
38
+ this.app.eggContextLifecycleUtil.deleteLifecycle(this.aopContextHook);
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxLQUFLLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixpQkFBaUIsR0FDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXpELE1BQU0sQ0FBQyxPQUFPLE9BQU8sVUFBVTtJQUNaLEdBQUcsQ0FBYztJQUNqQixxQkFBcUIsQ0FBd0I7SUFDN0MsZUFBZSxDQUFrQjtJQUNqQyx3QkFBd0IsQ0FBMkI7SUFDbkQsZ0JBQWdCLENBQW1CO0lBQzVDLGNBQWMsQ0FBaUI7SUFFdkMsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNoRSxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ import './types.ts';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import "./types.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
@@ -1,7 +1,7 @@
1
1
  import type { Application } from 'egg';
2
2
  import type { EggContext, EggContextLifecycleContext } from '@eggjs/tegg-runtime';
3
3
  import type { EggProtoImplClass, LifecycleHook } from '@eggjs/tegg';
4
- import { EggPrototype } from '@eggjs/tegg-metadata';
4
+ import { type EggPrototype } from '@eggjs/tegg-metadata';
5
5
  export interface EggPrototypeWithClazz extends EggPrototype {
6
6
  clazz?: EggProtoImplClass;
7
7
  }
@@ -13,5 +13,5 @@ export declare class AopContextHook implements LifecycleHook<EggContextLifecycle
13
13
  private readonly moduleHandler;
14
14
  private requestProtoList;
15
15
  constructor(moduleHandler: Application['moduleHandler']);
16
- preCreate(_: any, ctx: EggContext): Promise<void>;
16
+ preCreate(_: unknown, ctx: EggContext): Promise<void>;
17
17
  }
@@ -0,0 +1,45 @@
1
+ import { PrototypeUtil, ObjectInitType } from '@eggjs/tegg';
2
+ import { AspectInfoUtil } from '@eggjs/aop-decorator';
3
+ import { TeggError } from '@eggjs/tegg-metadata';
4
+ import { ROOT_PROTO } from '@eggjs/egg-module-common';
5
+ export class AopContextHook {
6
+ moduleHandler;
7
+ requestProtoList = [];
8
+ constructor(moduleHandler) {
9
+ this.moduleHandler = moduleHandler;
10
+ for (const loadUnitInstance of this.moduleHandler.loadUnitInstances) {
11
+ const iterator = loadUnitInstance.loadUnit.iterateEggPrototype();
12
+ for (const proto of iterator) {
13
+ const protoWithClazz = proto;
14
+ const clazz = protoWithClazz.clazz;
15
+ if (!clazz)
16
+ continue;
17
+ const aspects = AspectInfoUtil.getAspectList(clazz);
18
+ for (const aspect of aspects) {
19
+ for (const advice of aspect.adviceList) {
20
+ const adviceProto = PrototypeUtil.getClazzProto(advice.clazz);
21
+ if (!adviceProto) {
22
+ throw TeggError.create(`Aop Advice(${advice.clazz.name}) not found in loadUnits`, 'advice_not_found');
23
+ }
24
+ if (adviceProto.initType === ObjectInitType.CONTEXT) {
25
+ this.requestProtoList.push({
26
+ name: advice.name,
27
+ proto: adviceProto,
28
+ });
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ async preCreate(_, ctx) {
36
+ // compatible with egg controller
37
+ // add context aspect to ctx
38
+ if (!ctx.get(ROOT_PROTO)) {
39
+ for (const proto of this.requestProtoList) {
40
+ ctx.addProtoToCreate(proto.name, proto.proto);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW9wQ29udGV4dEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0FvcENvbnRleHRIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVd0RCxNQUFNLE9BQU8sY0FBYztJQUNSLGFBQWEsQ0FBK0I7SUFDckQsZ0JBQWdCLEdBQXlCLEVBQUUsQ0FBQztJQUVwRCxZQUFZLGFBQTJDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDakUsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxjQUFjLEdBQUcsS0FBOEIsQ0FBQztnQkFDdEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEtBQUs7b0JBQUUsU0FBUztnQkFDckIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDN0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3ZDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBNkIsQ0FBQzt3QkFDMUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNqQixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzt3QkFDeEcsQ0FBQzt3QkFDRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dDQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0NBQ2pCLEtBQUssRUFBRSxXQUFXOzZCQUNuQixDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQVUsRUFBRSxHQUFlO1FBQ3pDLGlDQUFpQztRQUNqQyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ import '@eggjs/tegg-plugin/types';
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ import '@eggjs/tegg-plugin/types';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsQ0FBQyJ9
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@eggjs/tegg-aop-plugin",
3
- "version": "3.62.0",
3
+ "version": "4.0.0-beta.10",
4
4
  "eggPlugin": {
5
5
  "name": "aopModule",
6
6
  "dependencies": [
7
7
  "tegg"
8
8
  ]
9
9
  },
10
- "types": "typings/index.d.ts",
10
+ "types": "./dist/index.d.ts",
11
11
  "description": "tegg aop plugin",
12
12
  "keywords": [
13
13
  "egg",
@@ -17,19 +17,17 @@
17
17
  "tegg"
18
18
  ],
19
19
  "files": [
20
- "app.js",
21
- "app.d.ts",
22
- "lib/**/*.js",
23
- "lib/**/*.d.ts"
20
+ "dist"
24
21
  ],
25
- "scripts": {
26
- "test": "cross-env NODE_ENV=test NODE_OPTIONS='--no-deprecation' mocha",
27
- "clean": "tsc -b --clean",
28
- "tsc": "npm run clean && tsc -p ./tsconfig.json",
29
- "tsc:pub": "npm run clean && tsc -p ./tsconfig.pub.json",
30
- "prepublishOnly": "npm run tsc:pub"
22
+ "type": "module",
23
+ "exports": {
24
+ ".": "./dist/index.js",
25
+ "./app": "./dist/app.js",
26
+ "./lib/AopContextHook": "./dist/lib/AopContextHook.js",
27
+ "./types": "./dist/types.js",
28
+ "./package.json": "./package.json"
31
29
  },
32
- "homepage": "https://github.com/eggjs/tegg",
30
+ "homepage": "https://github.com/eggjs/tegg/tree/next/plugin/aop",
33
31
  "bugs": {
34
32
  "url": "https://github.com/eggjs/tegg/issues"
35
33
  },
@@ -39,29 +37,38 @@
39
37
  "directory": "plugin/aop"
40
38
  },
41
39
  "engines": {
42
- "node": ">=14.0.0"
40
+ "node": ">=22.18.0"
43
41
  },
44
42
  "dependencies": {
45
- "@eggjs/aop-decorator": "^3.62.0",
46
- "@eggjs/egg-module-common": "^3.62.0",
47
- "@eggjs/tegg": "^3.62.0",
48
- "@eggjs/tegg-aop-runtime": "^3.62.0",
49
- "@eggjs/tegg-metadata": "^3.62.0"
43
+ "@eggjs/aop-decorator": "4.0.0-beta.10",
44
+ "@eggjs/tegg-aop-runtime": "4.0.0-beta.10",
45
+ "@eggjs/egg-module-common": "4.0.0-beta.10",
46
+ "@eggjs/tegg": "4.0.0-beta.10",
47
+ "@eggjs/tegg-runtime": "4.0.0-beta.10",
48
+ "@eggjs/tegg-metadata": "4.0.0-beta.10"
49
+ },
50
+ "peerDependencies": {
51
+ "egg": "beta",
52
+ "@eggjs/tegg-plugin": "4.0.0-beta.10"
50
53
  },
51
54
  "devDependencies": {
52
- "@eggjs/tegg-config": "^3.62.0",
53
- "@eggjs/tegg-plugin": "^3.62.0",
54
- "@types/mocha": "^10.0.1",
55
- "@types/node": "^20.2.4",
56
- "cross-env": "^7.0.3",
57
- "egg": "^3.9.1",
58
- "egg-mock": "^5.5.0",
59
- "mocha": "^10.2.0",
60
- "ts-node": "^10.9.1",
61
- "typescript": "^5.0.4"
55
+ "@eggjs/mock": "beta",
56
+ "@types/node": "^22.10.5",
57
+ "egg": "beta",
58
+ "typescript": "^5.9.3",
59
+ "tsdown": "^0.15.6",
60
+ "unplugin-unused": "^0.5.3",
61
+ "@eggjs/tegg-config": "4.0.0-beta.10",
62
+ "@eggjs/tegg-plugin": "4.0.0-beta.10"
62
63
  },
63
64
  "publishConfig": {
64
65
  "access": "public"
65
66
  },
66
- "gitHead": "b0c5d2dbae617d227909f338013b1e6310054270"
67
- }
67
+ "main": "./dist/index.js",
68
+ "module": "./dist/index.js",
69
+ "scripts": {
70
+ "clean": "rimraf dist",
71
+ "build": "tsdown && rimraf dist && tsc -b --clean && tsc",
72
+ "typecheck": "tsc --noEmit"
73
+ }
74
+ }
package/app.js DELETED
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const aop_1 = require("@eggjs/tegg/aop");
4
- const tegg_aop_runtime_1 = require("@eggjs/tegg-aop-runtime");
5
- const AopContextHook_1 = require("./lib/AopContextHook");
6
- const tegg_metadata_1 = require("@eggjs/tegg-metadata");
7
- class AopAppHook {
8
- constructor(app) {
9
- this.app = app;
10
- this.crosscutAdviceFactory = new aop_1.CrosscutAdviceFactory();
11
- this.loadUnitAopHook = new tegg_aop_runtime_1.LoadUnitAopHook(this.crosscutAdviceFactory);
12
- this.eggPrototypeCrossCutHook = new tegg_aop_runtime_1.EggPrototypeCrossCutHook(this.crosscutAdviceFactory);
13
- this.eggObjectAopHook = new tegg_aop_runtime_1.EggObjectAopHook();
14
- }
15
- configDidLoad() {
16
- this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.eggPrototypeCrossCutHook);
17
- this.app.loadUnitLifecycleUtil.registerLifecycle(this.loadUnitAopHook);
18
- this.app.eggObjectLifecycleUtil.registerLifecycle(this.eggObjectAopHook);
19
- tegg_metadata_1.GlobalGraph.instance.registerBuildHook(tegg_aop_runtime_1.crossCutGraphHook);
20
- tegg_metadata_1.GlobalGraph.instance.registerBuildHook(tegg_aop_runtime_1.pointCutGraphHook);
21
- }
22
- async didLoad() {
23
- await this.app.moduleHandler.ready();
24
- this.aopContextHook = new AopContextHook_1.AopContextHook(this.app.moduleHandler);
25
- this.app.eggContextLifecycleUtil.registerLifecycle(this.aopContextHook);
26
- }
27
- beforeClose() {
28
- this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.eggPrototypeCrossCutHook);
29
- this.app.loadUnitLifecycleUtil.deleteLifecycle(this.loadUnitAopHook);
30
- this.app.eggObjectLifecycleUtil.deleteLifecycle(this.eggObjectAopHook);
31
- this.app.eggContextLifecycleUtil.deleteLifecycle(this.aopContextHook);
32
- }
33
- }
34
- exports.default = AopAppHook;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EseUNBQXdEO0FBQ3hELDhEQU1pQztBQUNqQyx5REFBc0Q7QUFDdEQsd0RBQW1EO0FBRW5ELE1BQXFCLFVBQVU7SUFTN0IsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDJCQUFxQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGtDQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksMkNBQXdCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RSwyQkFBVyxDQUFDLFFBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxvQ0FBaUIsQ0FBQyxDQUFDO1FBQzNELDJCQUFXLENBQUMsUUFBUyxDQUFDLGlCQUFpQixDQUFDLG9DQUFpQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksK0JBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0Y7QUFyQ0QsNkJBcUNDIn0=
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AopContextHook = void 0;
4
- const tegg_1 = require("@eggjs/tegg");
5
- const aop_decorator_1 = require("@eggjs/aop-decorator");
6
- const tegg_metadata_1 = require("@eggjs/tegg-metadata");
7
- const egg_module_common_1 = require("@eggjs/egg-module-common");
8
- class AopContextHook {
9
- constructor(moduleHandler) {
10
- this.requestProtoList = [];
11
- this.moduleHandler = moduleHandler;
12
- for (const loadUnitInstance of this.moduleHandler.loadUnitInstances) {
13
- const iterator = loadUnitInstance.loadUnit.iterateEggPrototype();
14
- for (const proto of iterator) {
15
- const protoWithClazz = proto;
16
- const clazz = protoWithClazz.clazz;
17
- if (!clazz)
18
- continue;
19
- const aspects = aop_decorator_1.AspectInfoUtil.getAspectList(clazz);
20
- for (const aspect of aspects) {
21
- for (const advice of aspect.adviceList) {
22
- const adviceProto = tegg_1.PrototypeUtil.getClazzProto(advice.clazz);
23
- if (!adviceProto) {
24
- throw tegg_metadata_1.TeggError.create(`Aop Advice(${advice.clazz.name}) not found in loadUnits`, 'advice_not_found');
25
- }
26
- if (adviceProto.initType === tegg_1.ObjectInitType.CONTEXT) {
27
- this.requestProtoList.push({
28
- name: advice.name,
29
- proto: adviceProto,
30
- });
31
- }
32
- }
33
- }
34
- }
35
- }
36
- }
37
- async preCreate(_, ctx) {
38
- // compatible with egg controller
39
- // add context aspect to ctx
40
- if (!ctx.get(egg_module_common_1.ROOT_PROTO)) {
41
- for (const proto of this.requestProtoList) {
42
- ctx.addProtoToCreate(proto.name, proto.proto);
43
- }
44
- }
45
- }
46
- }
47
- exports.AopContextHook = AopContextHook;
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW9wQ29udGV4dEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBb3BDb250ZXh0SG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxzQ0FBNEQ7QUFDNUQsd0RBQXNEO0FBQ3RELHdEQUErRDtBQUMvRCxnRUFBc0Q7QUFXdEQsTUFBYSxjQUFjO0lBSXpCLFlBQVksYUFBMkM7UUFGL0MscUJBQWdCLEdBQXlCLEVBQUUsQ0FBQztRQUdsRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2pFLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sY0FBYyxHQUFHLEtBQThCLENBQUM7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxLQUFLO29CQUFFLFNBQVM7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLDhCQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUM3QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDdkMsTUFBTSxXQUFXLEdBQUcsb0JBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBNkIsQ0FBQzt3QkFDMUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNqQixNQUFNLHlCQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLDBCQUEwQixFQUFFLGtCQUFrQixDQUFDLENBQUM7d0JBQ3hHLENBQUM7d0JBQ0QsSUFBSSxXQUFXLENBQUMsUUFBUSxLQUFLLHFCQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0NBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQ0FDakIsS0FBSyxFQUFFLFdBQVc7NkJBQ25CLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQWU7UUFDaEMsaUNBQWlDO1FBQ2pDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyw4QkFBVSxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4Q0Qsd0NBd0NDIn0=