@eggjs/tegg-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.
Files changed (79) hide show
  1. package/README.md +13 -1
  2. package/dist/app/extend/application.d.ts +50 -0
  3. package/dist/app/extend/application.js +79 -0
  4. package/dist/app/extend/application.unittest.d.ts +22 -0
  5. package/dist/app/extend/application.unittest.js +55 -0
  6. package/dist/app/extend/context.d.ts +20 -0
  7. package/dist/app/extend/context.js +35 -0
  8. package/dist/app/middleware/tegg_ctx_lifecycle_middleware.d.ts +3 -0
  9. package/dist/app/middleware/tegg_ctx_lifecycle_middleware.js +5 -0
  10. package/{app.d.ts → dist/app.d.ts} +5 -5
  11. package/dist/app.js +63 -0
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.js +4 -0
  14. package/{lib → dist/lib}/AppLoadUnit.d.ts +2 -2
  15. package/dist/lib/AppLoadUnit.js +90 -0
  16. package/{lib → dist/lib}/AppLoadUnitInstance.d.ts +3 -3
  17. package/dist/lib/AppLoadUnitInstance.js +82 -0
  18. package/{lib → dist/lib}/CompatibleUtil.d.ts +4 -4
  19. package/dist/lib/CompatibleUtil.js +95 -0
  20. package/{lib → dist/lib}/ConfigSourceLoadUnitHook.d.ts +2 -2
  21. package/dist/lib/ConfigSourceLoadUnitHook.js +21 -0
  22. package/{lib → dist/lib}/EggAppLoader.d.ts +5 -4
  23. package/dist/lib/EggAppLoader.js +128 -0
  24. package/{lib → dist/lib}/EggCompatibleObject.d.ts +4 -4
  25. package/dist/lib/EggCompatibleObject.js +42 -0
  26. package/{lib → dist/lib}/EggCompatibleProtoImpl.d.ts +3 -2
  27. package/dist/lib/EggCompatibleProtoImpl.js +52 -0
  28. package/dist/lib/EggContextCompatibleHook.d.ts +10 -0
  29. package/dist/lib/EggContextCompatibleHook.js +44 -0
  30. package/{lib → dist/lib}/EggContextHandler.d.ts +3 -3
  31. package/dist/lib/EggContextHandler.js +26 -0
  32. package/{lib → dist/lib}/EggContextImpl.d.ts +2 -2
  33. package/dist/lib/EggContextImpl.js +15 -0
  34. package/{lib → dist/lib}/EggModuleLoader.d.ts +1 -1
  35. package/dist/lib/EggModuleLoader.js +54 -0
  36. package/{lib → dist/lib}/EggQualifierProtoHook.d.ts +2 -2
  37. package/dist/lib/EggQualifierProtoHook.js +62 -0
  38. package/{lib → dist/lib}/ModuleConfigLoader.d.ts +1 -1
  39. package/dist/lib/ModuleConfigLoader.js +81 -0
  40. package/{lib → dist/lib}/ModuleHandler.d.ts +3 -3
  41. package/dist/lib/ModuleHandler.js +53 -0
  42. package/dist/lib/Utils.js +36 -0
  43. package/dist/lib/ctx_lifecycle_middleware.d.ts +2 -0
  44. package/dist/lib/ctx_lifecycle_middleware.js +33 -0
  45. package/dist/lib/run_in_background.js +58 -0
  46. package/dist/types.d.ts +8 -0
  47. package/dist/types.js +5 -0
  48. package/package.json +67 -42
  49. package/app/extend/application.d.ts +0 -24
  50. package/app/extend/application.js +0 -78
  51. package/app/extend/application.unittest.d.ts +0 -8
  52. package/app/extend/application.unittest.js +0 -52
  53. package/app/extend/context.d.ts +0 -14
  54. package/app/extend/context.js +0 -36
  55. package/app/middleware/tegg_ctx_lifecycle_middleware.d.ts +0 -2
  56. package/app/middleware/tegg_ctx_lifecycle_middleware.js +0 -11
  57. package/app.js +0 -60
  58. package/lib/AppLoadUnit.js +0 -85
  59. package/lib/AppLoadUnitInstance.js +0 -83
  60. package/lib/CompatibleUtil.js +0 -98
  61. package/lib/ConfigSourceLoadUnitHook.js +0 -24
  62. package/lib/EggAppLoader.js +0 -129
  63. package/lib/EggCompatibleObject.js +0 -40
  64. package/lib/EggCompatibleProtoImpl.js +0 -49
  65. package/lib/EggContextCompatibleHook.d.ts +0 -10
  66. package/lib/EggContextCompatibleHook.js +0 -45
  67. package/lib/EggContextHandler.js +0 -28
  68. package/lib/EggContextImpl.js +0 -17
  69. package/lib/EggModuleLoader.js +0 -55
  70. package/lib/EggQualifierProtoHook.js +0 -53
  71. package/lib/ModuleConfigLoader.js +0 -87
  72. package/lib/ModuleHandler.js +0 -58
  73. package/lib/Utils.js +0 -39
  74. package/lib/ctx_lifecycle_middleware.d.ts +0 -2
  75. package/lib/ctx_lifecycle_middleware.js +0 -54
  76. package/lib/run_in_background.js +0 -59
  77. package/typings/index.d.ts +0 -79
  78. /package/{lib → dist/lib}/Utils.d.ts +0 -0
  79. /package/{lib → dist/lib}/run_in_background.d.ts +0 -0
@@ -0,0 +1,95 @@
1
+ import { Application, Context } from 'egg';
2
+ import { EggPrototypeFactory } from '@eggjs/tegg-metadata';
3
+ import { InitTypeQualifierAttribute, ObjectInitType } from '@eggjs/tegg';
4
+ import { EggContainerFactory } from '@eggjs/tegg-runtime';
5
+ import { ProxyUtil } from '@eggjs/tegg-common-util';
6
+ export class CompatibleUtil {
7
+ static singletonProtoCache = new Map();
8
+ static requestProtoCache = new Map();
9
+ static getSingletonProto(name) {
10
+ if (!this.singletonProtoCache.has(name)) {
11
+ const proto = EggPrototypeFactory.instance.getPrototype(name, undefined, [{
12
+ attribute: InitTypeQualifierAttribute,
13
+ value: ObjectInitType.SINGLETON,
14
+ }]);
15
+ this.singletonProtoCache.set(name, proto);
16
+ }
17
+ return this.singletonProtoCache.get(name);
18
+ }
19
+ static getRequestProto(name) {
20
+ if (!this.requestProtoCache.has(name)) {
21
+ const proto = EggPrototypeFactory.instance.getPrototype(name, undefined, [{
22
+ attribute: InitTypeQualifierAttribute,
23
+ value: ObjectInitType.CONTEXT,
24
+ }]);
25
+ this.requestProtoCache.set(name, proto);
26
+ }
27
+ return this.requestProtoCache.get(name);
28
+ }
29
+ static singletonModuleProxyFactory(app, loadUnitInstance) {
30
+ let deprecated = false;
31
+ return function (_, p) {
32
+ const proto = CompatibleUtil.getSingletonProto(p);
33
+ const eggObj = EggContainerFactory.getEggObject(proto);
34
+ if (!deprecated) {
35
+ deprecated = true;
36
+ app.deprecate(`[egg/module] Please use await app.getEggObject(clazzName) instead of app.${loadUnitInstance.name}.${String(p)}`);
37
+ }
38
+ return eggObj.obj;
39
+ };
40
+ }
41
+ static appCompatible(app, loadUnitInstance) {
42
+ const moduleLoadUnitProxy = ProxyUtil.safeProxy(loadUnitInstance, CompatibleUtil.singletonModuleProxyFactory(app, loadUnitInstance));
43
+ Reflect.defineProperty(app.module, loadUnitInstance.name, {
44
+ configurable: true,
45
+ value: moduleLoadUnitProxy,
46
+ });
47
+ }
48
+ static contextModuleProxyFactory(holder, ctx, loadUnitInstance) {
49
+ const cacheKey = `_${loadUnitInstance.name}Proxy`;
50
+ if (!holder[cacheKey]) {
51
+ let deprecated = false;
52
+ const getter = function (_, p) {
53
+ const proto = CompatibleUtil.getRequestProto(p);
54
+ const eggObj = EggContainerFactory.getEggObject(proto, p);
55
+ if (!deprecated) {
56
+ deprecated = true;
57
+ ctx.app.deprecate(`[egg/module] Please use await ctx.getEggObject(clazzName) instead of ctx.${loadUnitInstance.name}.${String(p)}`);
58
+ }
59
+ return eggObj.obj;
60
+ };
61
+ holder[cacheKey] = ProxyUtil.safeProxy(loadUnitInstance, getter);
62
+ }
63
+ return holder[cacheKey];
64
+ }
65
+ static contextModuleCompatible(ctx, loadUnitInstances) {
66
+ const loadUnitInstanceMap = loadUnitInstances.reduce((p, c) => {
67
+ p[c.name] = c;
68
+ return p;
69
+ }, {});
70
+ Reflect.defineProperty(ctx, 'module', {
71
+ configurable: true,
72
+ enumerable: true,
73
+ get() {
74
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
75
+ const ctx = this;
76
+ if (!this._moduleProxy) {
77
+ const ctxModule = Object.create(loadUnitInstanceMap);
78
+ this._moduleProxy = ProxyUtil.safeProxy(ctxModule, (_, p) => {
79
+ const loadUnitInstance = Reflect.get(ctxModule, p);
80
+ if (!loadUnitInstance) {
81
+ return;
82
+ }
83
+ return CompatibleUtil.contextModuleProxyFactory(ctxModule, ctx, loadUnitInstance);
84
+ });
85
+ }
86
+ return this._moduleProxy;
87
+ },
88
+ });
89
+ }
90
+ static clean() {
91
+ this.singletonProtoCache.clear();
92
+ this.requestProtoCache.clear();
93
+ }
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGF0aWJsZVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0NvbXBhdGlibGVVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQzNDLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLG1CQUFtQixHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZFLE1BQU0sQ0FBQyxpQkFBaUIsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVyRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBaUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDeEUsU0FBUyxFQUFFLDBCQUEwQjtvQkFDckMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxTQUFTO2lCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFl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
@@ -1,5 +1,5 @@
1
- import { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
2
- import { LifecycleHook } from '@eggjs/tegg';
1
+ import { type LoadUnit, type LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
2
+ import { type LifecycleHook } from '@eggjs/tegg';
3
3
  /**
4
4
  * Copy from standalone/src/ConfigSourceLoadUnitHook
5
5
  * Hook for inject moduleConfig.
@@ -0,0 +1,21 @@
1
+ import {} from '@eggjs/tegg-metadata';
2
+ import { PrototypeUtil, QualifierUtil, ConfigSourceQualifier, ConfigSourceQualifierAttribute, } from '@eggjs/tegg';
3
+ /**
4
+ * Copy from standalone/src/ConfigSourceLoadUnitHook
5
+ * Hook for inject moduleConfig.
6
+ * Add default qualifier value is current module name.
7
+ */
8
+ export class ConfigSourceLoadUnitHook {
9
+ async preCreate(ctx, loadUnit) {
10
+ const classList = await ctx.loader.load();
11
+ for (const clazz of classList) {
12
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz);
13
+ const moduleConfigObject = injectObjects.find(t => t.objName === 'moduleConfig');
14
+ const configSourceQualifier = QualifierUtil.getProperQualifier(clazz, 'moduleConfig', ConfigSourceQualifierAttribute);
15
+ if (moduleConfigObject && !configSourceQualifier) {
16
+ ConfigSourceQualifier(loadUnit.name)(clazz.prototype, moduleConfigObject.refName);
17
+ }
18
+ }
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnU291cmNlTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9Db25maWdTb3VyY2VMb2FkVW5pdEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBQ3BGLE9BQU8sRUFFTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxhQUFhLENBQUM7QUFFckI7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUE2QixFQUFFLFFBQWtCO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUN0SCxJQUFJLGtCQUFrQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDakQscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,5 +1,6 @@
1
- import { Loader } from '@eggjs/tegg-metadata';
2
- import { EggProtoImplClass } from '@eggjs/tegg';
1
+ import { Application } from 'egg';
2
+ import { type Loader } from '@eggjs/tegg-metadata';
3
+ import { type EggProtoImplClass } from '@eggjs/tegg';
3
4
  export declare const APP_CLAZZ_BLACK_LIST: string[];
4
5
  export declare const CONTEXT_CLAZZ_BLACK_LIST: string[];
5
6
  export declare const DEFAULT_APP_CLAZZ: string[];
@@ -7,9 +8,9 @@ export declare const DEFAULT_CONTEXT_CLAZZ: string[];
7
8
  export declare class EggAppLoader implements Loader {
8
9
  private readonly app;
9
10
  private readonly moduleConfigLoader;
10
- constructor(app: any);
11
+ constructor(app: Application);
11
12
  private buildClazz;
12
13
  private buildAppLoggerClazz;
13
14
  private getLoggerNames;
14
- load(): EggProtoImplClass[];
15
+ load(): Promise<EggProtoImplClass[]>;
15
16
  }
@@ -0,0 +1,128 @@
1
+ import { Application } from 'egg';
2
+ import { TeggError } from '@eggjs/tegg-metadata';
3
+ import { AccessLevel, EggQualifierAttribute, EggType, InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, ObjectInitType, PrototypeUtil, QualifierUtil, } from '@eggjs/tegg';
4
+ import { ObjectUtils } from '@eggjs/tegg-common-util';
5
+ import { BackgroundTaskHelper } from '@eggjs/tegg-background-task';
6
+ import { EggObjectFactory } from '@eggjs/tegg-dynamic-inject-runtime';
7
+ import { ModuleConfigLoader } from "./ModuleConfigLoader.js";
8
+ import { COMPATIBLE_PROTO_IMPLE_TYPE } from "./EggCompatibleProtoImpl.js";
9
+ export const APP_CLAZZ_BLACK_LIST = [
10
+ 'eggObjectFactory',
11
+ 'moduleConfigs',
12
+ ];
13
+ export const CONTEXT_CLAZZ_BLACK_LIST = [
14
+ // just use the app.logger, ctx logger is deprecated.
15
+ 'logger',
16
+ ];
17
+ export const DEFAULT_APP_CLAZZ = [];
18
+ export const DEFAULT_CONTEXT_CLAZZ = [
19
+ 'user',
20
+ ];
21
+ export class EggAppLoader {
22
+ app;
23
+ moduleConfigLoader;
24
+ constructor(app) {
25
+ this.app = app;
26
+ this.moduleConfigLoader = new ModuleConfigLoader(this.app);
27
+ }
28
+ buildClazz(name, eggType) {
29
+ const app = this.app;
30
+ let func;
31
+ if (eggType === EggType.APP) {
32
+ func = function () {
33
+ return app[name];
34
+ };
35
+ }
36
+ else {
37
+ func = function () {
38
+ const ctx = app.currentContext;
39
+ if (!ctx) {
40
+ // ctx has been destroyed, throw humanize error info
41
+ throw TeggError.create(`Can not read property \`${name}\` because egg ctx has been destroyed`, 'read_after_ctx_destroyed');
42
+ }
43
+ return ctx[name];
44
+ };
45
+ }
46
+ Object.defineProperty(func, 'name', {
47
+ value: name,
48
+ writable: false,
49
+ enumerable: false,
50
+ configurable: true,
51
+ });
52
+ PrototypeUtil.setIsEggPrototype(func);
53
+ PrototypeUtil.setFilePath(func, 'mock_file_path');
54
+ PrototypeUtil.setProperty(func, {
55
+ name,
56
+ initType: ObjectInitType.SINGLETON,
57
+ accessLevel: AccessLevel.PUBLIC,
58
+ protoImplType: COMPATIBLE_PROTO_IMPLE_TYPE,
59
+ });
60
+ QualifierUtil.addProtoQualifier(func, LoadUnitNameQualifierAttribute, 'app');
61
+ QualifierUtil.addProtoQualifier(func, InitTypeQualifierAttribute, ObjectInitType.SINGLETON);
62
+ QualifierUtil.addProtoQualifier(func, EggQualifierAttribute, eggType);
63
+ return func;
64
+ }
65
+ buildAppLoggerClazz(name) {
66
+ const app = this.app;
67
+ const func = function () {
68
+ return app.getLogger(name);
69
+ };
70
+ Object.defineProperty(func, 'name', {
71
+ value: name,
72
+ writable: false,
73
+ enumerable: false,
74
+ configurable: true,
75
+ });
76
+ PrototypeUtil.setIsEggPrototype(func);
77
+ PrototypeUtil.setFilePath(func, 'mock_file_path');
78
+ PrototypeUtil.setProperty(func, {
79
+ name,
80
+ initType: ObjectInitType.SINGLETON,
81
+ accessLevel: AccessLevel.PUBLIC,
82
+ protoImplType: COMPATIBLE_PROTO_IMPLE_TYPE,
83
+ });
84
+ QualifierUtil.addProtoQualifier(func, LoadUnitNameQualifierAttribute, 'app');
85
+ QualifierUtil.addProtoQualifier(func, InitTypeQualifierAttribute, ObjectInitType.SINGLETON);
86
+ QualifierUtil.addProtoQualifier(func, EggQualifierAttribute, EggType.APP);
87
+ return func;
88
+ }
89
+ getLoggerNames(ctxClazzNames, singletonClazzNames) {
90
+ const loggerNames = Array.from(this.app.loggers.keys());
91
+ // filter logger/coreLogger
92
+ return loggerNames.filter(t => !ctxClazzNames.includes(t) && !singletonClazzNames.includes(t));
93
+ }
94
+ async load() {
95
+ const app = this.app;
96
+ const appProperties = ObjectUtils.getProperties(app);
97
+ const contextProperties = ObjectUtils.getProperties(app.context);
98
+ // custom plugin may define property conflict with default list
99
+ const allSingletonClazzNameSet = new Set([
100
+ ...appProperties,
101
+ ...DEFAULT_APP_CLAZZ,
102
+ ]);
103
+ APP_CLAZZ_BLACK_LIST.forEach(t => allSingletonClazzNameSet.delete(t));
104
+ const allSingletonClazzNames = Array.from(allSingletonClazzNameSet);
105
+ const allContextClazzNamesSet = new Set([
106
+ ...contextProperties,
107
+ ...DEFAULT_CONTEXT_CLAZZ,
108
+ ]);
109
+ CONTEXT_CLAZZ_BLACK_LIST.forEach(t => allContextClazzNamesSet.delete(t));
110
+ const allContextClazzNames = Array.from(allContextClazzNamesSet);
111
+ const loggerNames = this.getLoggerNames(allContextClazzNames, allSingletonClazzNames);
112
+ const allSingletonClazzs = allSingletonClazzNames.map(name => this.buildClazz(name, EggType.APP));
113
+ const allContextClazzs = allContextClazzNames.map(name => this.buildClazz(name, EggType.CONTEXT));
114
+ const appLoggerClazzs = loggerNames.map(name => this.buildAppLoggerClazz(name));
115
+ const moduleConfigList = this.moduleConfigLoader.loadModuleConfigList();
116
+ return [
117
+ ...allSingletonClazzs,
118
+ ...allContextClazzs,
119
+ ...appLoggerClazzs,
120
+ ...moduleConfigList,
121
+ // inner helper class list
122
+ // TODO: should auto the inner class
123
+ BackgroundTaskHelper,
124
+ EggObjectFactory,
125
+ ];
126
+ }
127
+ }
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQXBwTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9FZ2dBcHBMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNsQyxPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLFdBQVcsRUFFWCxxQkFBcUIsRUFDckIsT0FBTyxFQUNQLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFDOUIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLGtCQUFrQjtJQUNsQixlQUFlO0NBQ2hCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxxREFBcUQ7SUFDckQsUUFBUTtDQUNULENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBYSxFQUFFLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsTUFBTTtDQUNQLENBQUM7QUFFRixNQUFNLE9BQU8sWUFBWTtJQUNOLEdBQUcsQ0FBYztJQUNqQixrQkFBa0IsQ0FBcUI7SUFFeEQsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxr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
@@ -1,7 +1,7 @@
1
- import { EggCompatibleProtoImpl } from './EggCompatibleProtoImpl';
2
- import { EggObject } from '@eggjs/tegg-runtime';
3
- import { EggObjectName } from '@eggjs/tegg';
4
- import { EggPrototype } from '@eggjs/tegg-metadata';
1
+ import { type EggObject } from '@eggjs/tegg-runtime';
2
+ import { type EggObjectName } from '@eggjs/tegg';
3
+ import { type EggPrototype } from '@eggjs/tegg-metadata';
4
+ import { EggCompatibleProtoImpl } from './EggCompatibleProtoImpl.ts';
5
5
  declare const OBJ: unique symbol;
6
6
  export declare class EggCompatibleObject implements EggObject {
7
7
  readonly isReady: boolean;
@@ -0,0 +1,42 @@
1
+ import { EggObjectFactory, } from '@eggjs/tegg-runtime';
2
+ import { IdenticalUtil, EggType, EggQualifierAttribute } from '@eggjs/tegg';
3
+ import {} from '@eggjs/tegg-metadata';
4
+ import { EggCompatibleProtoImpl } from "./EggCompatibleProtoImpl.js";
5
+ const OBJ = Symbol('EggCompatibleObject#obj');
6
+ export class EggCompatibleObject {
7
+ isReady = true;
8
+ [OBJ];
9
+ proto;
10
+ name;
11
+ id;
12
+ isContext;
13
+ constructor(name, proto) {
14
+ this.proto = proto;
15
+ this.name = name;
16
+ this.id = IdenticalUtil.createObjectId(this.proto.id);
17
+ this.isContext = this.proto.verifyQualifier({
18
+ value: EggType.CONTEXT,
19
+ attribute: EggQualifierAttribute,
20
+ });
21
+ }
22
+ // If the egg object is a getter,
23
+ // access may have side effect.
24
+ // So access egg object lazy.
25
+ get obj() {
26
+ if (this.isContext) {
27
+ return this.proto.constructEggObject();
28
+ }
29
+ if (!this[OBJ]) {
30
+ this[OBJ] = this.proto.constructEggObject();
31
+ }
32
+ return this[OBJ];
33
+ }
34
+ injectProperty() {
35
+ return;
36
+ }
37
+ static async createObject(name, proto) {
38
+ return new EggCompatibleObject(name, proto);
39
+ }
40
+ }
41
+ EggObjectFactory.registerEggObjectCreateMethod(EggCompatibleProtoImpl, EggCompatibleObject.createObject);
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29tcGF0aWJsZU9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRWdnQ29tcGF0aWJsZU9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBc0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hHLE9BQU8sRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUU5QyxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDekIsQ0FBQyxHQUFHLENBQUMsQ0FBUztJQUNiLEtBQUssQ0FBeUI7SUFDOUIsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFDWCxTQUFTLENBQVU7SUFFNUIsWUFBWSxJQUFtQixFQUFFLEtBQTZCO1FBQzVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlDQUFpQztJQUNqQywrQkFBK0I7SUFDL0IsNkJBQTZCO0lBQzdCLElBQUksR0FBRztRQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBbUIsRUFBRSxLQUFtQjtRQUNoRSxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQStCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0Y7QUFFRCxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyJ9
@@ -1,7 +1,8 @@
1
- import { AccessLevel, EggProtoImplClass, EggPrototypeName, MetaDataKey, ObjectInitTypeLike, QualifierInfo, Id, QualifierValue } from '@eggjs/tegg';
2
- import { EggPrototype, InjectObjectProto, EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
1
+ import { AccessLevel, type EggProtoImplClass, type EggPrototypeName, type MetaDataKey, type ObjectInitTypeLike, type QualifierInfo, type Id, type QualifierValue } from '@eggjs/tegg';
2
+ import { type EggPrototype, type InjectObjectProto, type EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
3
3
  export declare const COMPATIBLE_PROTO_IMPLE_TYPE = "EGG_COMPATIBLE";
4
4
  export declare class EggCompatibleProtoImpl implements EggPrototype {
5
+ [key: symbol]: PropertyDescriptor;
5
6
  private readonly clazz;
6
7
  private readonly qualifiers;
7
8
  readonly id: string;
@@ -0,0 +1,52 @@
1
+ import { AccessLevel, MetadataUtil, QualifierUtil, IdenticalUtil, } from '@eggjs/tegg';
2
+ import {} from '@eggjs/tegg-metadata';
3
+ export const COMPATIBLE_PROTO_IMPLE_TYPE = 'EGG_COMPATIBLE';
4
+ export class EggCompatibleProtoImpl {
5
+ clazz;
6
+ qualifiers;
7
+ id;
8
+ name;
9
+ initType;
10
+ accessLevel;
11
+ injectObjects;
12
+ loadUnitId;
13
+ constructor(id, name, clazz, initType, loadUnitId, qualifiers) {
14
+ this.id = id;
15
+ this.clazz = clazz;
16
+ this.name = name;
17
+ this.initType = initType;
18
+ this.accessLevel = AccessLevel.PUBLIC;
19
+ this.injectObjects = [];
20
+ this.loadUnitId = loadUnitId;
21
+ this.qualifiers = qualifiers;
22
+ }
23
+ verifyQualifiers(qualifiers) {
24
+ for (const qualifier of qualifiers) {
25
+ if (!this.verifyQualifier(qualifier)) {
26
+ return false;
27
+ }
28
+ }
29
+ return true;
30
+ }
31
+ verifyQualifier(qualifier) {
32
+ const selfQualifiers = this.qualifiers.find(t => t.attribute === qualifier.attribute);
33
+ return selfQualifiers?.value === qualifier.value;
34
+ }
35
+ getQualifier(attribute) {
36
+ return this.qualifiers.find(t => t.attribute === attribute)?.value;
37
+ }
38
+ constructEggObject() {
39
+ return Reflect.apply(this.clazz, null, []);
40
+ }
41
+ getMetaData(metadataKey) {
42
+ return MetadataUtil.getMetaData(metadataKey, this.clazz);
43
+ }
44
+ static create(ctx) {
45
+ const { clazz, loadUnit } = ctx;
46
+ const name = ctx.prototypeInfo.name;
47
+ const id = IdenticalUtil.createProtoId(loadUnit.id, name);
48
+ const proto = new EggCompatibleProtoImpl(id, name, clazz, ctx.prototypeInfo.initType, loadUnit.id, QualifierUtil.mergeQualifiers(QualifierUtil.getProtoQualifiers(clazz), (ctx.prototypeInfo.qualifiers ?? [])));
49
+ return proto;
50
+ }
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29tcGF0aWJsZVByb3RvSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRWdnQ29tcGF0aWJsZVByb3RvSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUdYLFlBQVksRUFHWixhQUFhLEVBRWIsYUFBYSxHQUVkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFJTixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQixDQUFDO0FBRTVELE1BQU0sT0FBTyxzQkFBc0I7SUFFaEIsS0FBSyxDQUFvQjtJQUN6QixVQUFVLENBQWtCO0lBRXBDLEVBQUUsQ0FBUztJQUNYLElBQUksQ0FBbUI7SUFDdkIsUUFBUSxDQUFxQjtJQUM3QixXQUFXLENBQWM7SUFDekIsYUFBYSxDQUFzQjtJQUNuQyxVQUFVLENBQUs7SUFFeEIsWUFDRSxFQUFVLEVBQ1YsSUFBc0IsRUFDdEIsS0FBd0IsRUFDeEIsUUFBNEIsRUFDNUIsVUFBYyxFQUNkLFVBQTJCO1FBRTNCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUEyQjtRQUMxQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBd0I7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLGNBQWMsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQWlCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVyxDQUFJLFdBQXdCO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQWlDO1FBQzdDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFzQixDQUN0QyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQ3JGLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDdkMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FDckMsQ0FDRixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,10 @@
1
+ import { type LifecycleHook } from '@eggjs/tegg';
2
+ import { type EggContext, type EggContextLifecycleContext } from '@eggjs/tegg-runtime';
3
+ import { ModuleHandler } from './ModuleHandler.ts';
4
+ export declare class EggContextCompatibleHook implements LifecycleHook<EggContextLifecycleContext, EggContext> {
5
+ private readonly moduleHandler;
6
+ private requestProtoList;
7
+ constructor(moduleHandler: ModuleHandler);
8
+ preCreate(_: unknown, ctx: EggContext): Promise<void>;
9
+ postCreate(_: unknown, ctx: EggContext): Promise<void>;
10
+ }
@@ -0,0 +1,44 @@
1
+ import { BackgroundTaskHelper, ObjectInitType, PrototypeUtil } from '@eggjs/tegg';
2
+ import { EggContainerFactory } from '@eggjs/tegg-runtime';
3
+ import {} from '@eggjs/tegg-metadata';
4
+ import { ROOT_PROTO } from '@eggjs/egg-module-common';
5
+ import { ModuleHandler } from "./ModuleHandler.js";
6
+ export class EggContextCompatibleHook {
7
+ moduleHandler;
8
+ requestProtoList = [];
9
+ constructor(moduleHandler) {
10
+ this.moduleHandler = moduleHandler;
11
+ for (const loadUnitInstance of this.moduleHandler.loadUnitInstances) {
12
+ const iterator = loadUnitInstance.loadUnit.iterateEggPrototype();
13
+ for (const proto of iterator) {
14
+ if (proto.initType === ObjectInitType.CONTEXT) {
15
+ this.requestProtoList.push(proto);
16
+ }
17
+ }
18
+ }
19
+ }
20
+ async preCreate(_, ctx) {
21
+ // root proto added in ctxLifecycleMiddleware
22
+ if (!ctx.get(ROOT_PROTO)) {
23
+ for (const proto of this.requestProtoList) {
24
+ ctx.addProtoToCreate(proto.name, proto);
25
+ }
26
+ }
27
+ else {
28
+ // Use for ctx.runInBackground.
29
+ // BackgroundTaskHelper should get by sync,
30
+ // or tegg context may be destroyed before background task run.
31
+ // So create it in preCreate.
32
+ const protoObj = PrototypeUtil.getClazzProto(BackgroundTaskHelper);
33
+ await EggContainerFactory.getOrCreateEggObject(protoObj);
34
+ }
35
+ }
36
+ async postCreate(_, ctx) {
37
+ const rootProto = ctx.get(ROOT_PROTO);
38
+ if (rootProto) {
39
+ // Ensure ContextInitiator be called.
40
+ await EggContainerFactory.getOrCreateEggObject(rootProto);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGV4dENvbXBhdGlibGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9FZ2dDb250ZXh0Q29tcGF0aWJsZUhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFzQixjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxtQkFBbUIsRUFBb0QsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RyxPQUFPLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLGFBQWEsQ0FBZ0I7SUFDdEMsZ0JBQWdCLEdBQXdCLEVBQUUsQ0FBQztJQUVuRCxZQUFZLGFBQTRCO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDakUsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBVSxFQUFFLEdBQWU7UUFDekMsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sK0JBQStCO1lBQy9CLDJDQUEyQztZQUMzQywrREFBK0Q7WUFDL0QsNkJBQTZCO1lBQzdCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxNQUFNLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLFFBQXdCLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBVSxFQUFFLEdBQWU7UUFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QscUNBQXFDO1lBQ3JDLE1BQU0sbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsU0FBeUIsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,9 +1,9 @@
1
- import { Application } from 'egg';
2
- import { EggContext } from '@eggjs/tegg-runtime';
1
+ import { type Application } from 'egg';
2
+ import { type EggContext } from '@eggjs/tegg-runtime';
3
3
  export declare class EggContextHandler {
4
4
  private readonly app;
5
5
  constructor(app: Application);
6
- getContextCallback(): EggContext;
6
+ getContextCallback(): EggContext | undefined;
7
7
  run<R>(eggContext: EggContext, fn: () => Promise<R>): Promise<R>;
8
8
  register(): void;
9
9
  }
@@ -0,0 +1,26 @@
1
+ import {} from 'egg';
2
+ import { ContextHandler } from '@eggjs/tegg-runtime';
3
+ import { EGG_CONTEXT } from '@eggjs/egg-module-common';
4
+ export class EggContextHandler {
5
+ app;
6
+ constructor(app) {
7
+ this.app = app;
8
+ }
9
+ getContextCallback() {
10
+ const ctx = this.app.currentContext;
11
+ return ctx?.teggContext;
12
+ }
13
+ async run(eggContext, fn) {
14
+ const ctx = eggContext.get(EGG_CONTEXT);
15
+ return await this.app.ctxStorage.run(ctx, fn);
16
+ }
17
+ register() {
18
+ ContextHandler.getContextCallback = () => {
19
+ return this.getContextCallback();
20
+ };
21
+ ContextHandler.runInContextCallback = async (context, fn) => {
22
+ return await this.run(context, fn);
23
+ };
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGV4dEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0VnZ0NvbnRleHRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsTUFBTSxLQUFLLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsTUFBTSxPQUFPLGlCQUFpQjtJQUNYLEdBQUcsQ0FBYztJQUVsQyxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDcEMsT0FBTyxHQUFHLEVBQUUsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFJLFVBQXNCLEVBQUUsRUFBb0I7UUFDdkQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUTtRQUNOLGNBQWMsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDdkMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFDRixjQUFjLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLE9BQW1CLEVBQUUsRUFBc0IsRUFBRSxFQUFFO1lBQzFGLE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
@@ -1,6 +1,6 @@
1
- import { Context } from 'egg';
1
+ import type { Context } from 'egg';
2
2
  import { AbstractEggContext } from '@eggjs/tegg-runtime';
3
3
  export declare class EggContextImpl extends AbstractEggContext {
4
4
  readonly id: string;
5
- constructor(context: Context);
5
+ constructor(ctx: Context);
6
6
  }
@@ -0,0 +1,15 @@
1
+ import { AbstractEggContext } from '@eggjs/tegg-runtime';
2
+ import { IdenticalUtil } from '@eggjs/tegg';
3
+ import { EGG_CONTEXT, TEGG_CONTEXT } from '@eggjs/egg-module-common';
4
+ // TEggContext 的实现
5
+ export class EggContextImpl extends AbstractEggContext {
6
+ id;
7
+ constructor(ctx) {
8
+ super();
9
+ this.set(EGG_CONTEXT, ctx);
10
+ ctx[TEGG_CONTEXT] = this;
11
+ const tracer = ctx.tracer;
12
+ this.id = IdenticalUtil.createContextId(tracer?.traceId);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGV4dEltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0VnZ0NvbnRleHRJbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRSxrQkFBa0I7QUFDbEIsTUFBTSxPQUFPLGNBQWUsU0FBUSxrQkFBa0I7SUFDM0MsRUFBRSxDQUFTO0lBRXBCLFlBQVksR0FBWTtRQUN0QixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQXlDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0YifQ==
@@ -3,7 +3,7 @@ import { Application } from 'egg';
3
3
  export declare class EggModuleLoader {
4
4
  app: Application;
5
5
  globalGraph: GlobalGraph;
6
- constructor(app: any);
6
+ constructor(app: Application);
7
7
  private loadApp;
8
8
  private buildAppGraph;
9
9
  private loadModule;
@@ -0,0 +1,54 @@
1
+ import { EggLoadUnitType, LoadUnitFactory, GlobalGraph, ModuleDescriptorDumper, } from '@eggjs/tegg-metadata';
2
+ import { LoaderFactory } from '@eggjs/tegg-loader';
3
+ import { Application } from 'egg';
4
+ import { EggAppLoader } from "./EggAppLoader.js";
5
+ export class EggModuleLoader {
6
+ app;
7
+ globalGraph;
8
+ constructor(app) {
9
+ this.app = app;
10
+ }
11
+ async loadApp() {
12
+ const loader = new EggAppLoader(this.app);
13
+ const loadUnit = await LoadUnitFactory.createLoadUnit(this.app.baseDir, EggLoadUnitType.APP, loader);
14
+ this.app.moduleHandler.loadUnits.push(loadUnit);
15
+ }
16
+ async buildAppGraph() {
17
+ for (const plugin of Object.values(this.app.plugins)) {
18
+ if (!plugin.enable)
19
+ continue;
20
+ const modulePlugin = this.app.moduleReferences.find(t => t.path === plugin.path);
21
+ if (modulePlugin) {
22
+ modulePlugin.optional = false;
23
+ }
24
+ }
25
+ const moduleDescriptors = await LoaderFactory.loadApp(this.app.moduleReferences);
26
+ for (const moduleDescriptor of moduleDescriptors) {
27
+ ModuleDescriptorDumper.dump(moduleDescriptor, {
28
+ dumpDir: this.app.baseDir,
29
+ }).catch(e => {
30
+ e.message = 'dump module descriptor failed: ' + e.message;
31
+ this.app.logger.warn(e);
32
+ });
33
+ }
34
+ const graph = await GlobalGraph.create(moduleDescriptors);
35
+ return graph;
36
+ }
37
+ async loadModule() {
38
+ this.globalGraph.build();
39
+ this.globalGraph.sort();
40
+ const moduleConfigList = this.globalGraph.moduleConfigList;
41
+ for (const moduleConfig of moduleConfigList) {
42
+ const modulePath = moduleConfig.path;
43
+ const loader = LoaderFactory.createLoader(modulePath, EggLoadUnitType.MODULE);
44
+ const loadUnit = await LoadUnitFactory.createLoadUnit(modulePath, EggLoadUnitType.MODULE, loader);
45
+ this.app.moduleHandler.loadUnits.push(loadUnit);
46
+ }
47
+ }
48
+ async load() {
49
+ GlobalGraph.instance = this.globalGraph = await this.buildAppGraph();
50
+ await this.loadApp();
51
+ await this.loadModule();
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnTW9kdWxlTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9FZ2dNb2R1bGVMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsV0FBVyxFQUFFLHNCQUFzQixHQUNwQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixHQUFHLENBQWM7SUFDakIsV0FBVyxDQUFjO0lBRXpCLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFBRSxTQUFTO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakYsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakYsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDakQsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPO2FBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU8sR0FBRyxpQ0FBaUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzRCxLQUFLLE1BQU0sWUFBWSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDNUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyRSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQixDQUFDO0NBQ0YifQ==
@@ -1,5 +1,5 @@
1
- import { LoadUnitLifecycleContext, LoadUnit } from '@eggjs/tegg-metadata';
2
- import { LifecycleHook } from '@eggjs/tegg';
1
+ import { type LoadUnitLifecycleContext, type LoadUnit } from '@eggjs/tegg-metadata';
2
+ import { type LifecycleHook } from '@eggjs/tegg';
3
3
  import { Application } from 'egg';
4
4
  export declare class EggQualifierProtoHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
5
5
  private readonly app;