@eggjs/tegg-plugin 4.0.0-beta.9 → 4.0.2-beta.0
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/dist/app/extend/application.d.ts +28 -49
- package/dist/app/extend/application.js +69 -79
- package/dist/app/extend/application.unittest.d.ts +9 -21
- package/dist/app/extend/application.unittest.js +39 -53
- package/dist/app/extend/context.d.ts +12 -19
- package/dist/app/extend/context.js +27 -34
- package/dist/app/middleware/tegg_ctx_lifecycle_middleware.d.ts +6 -3
- package/dist/app/middleware/tegg_ctx_lifecycle_middleware.js +7 -3
- package/dist/app.d.ts +20 -16
- package/dist/app.js +50 -56
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -3
- package/dist/lib/AppLoadUnit.d.ts +23 -18
- package/dist/lib/AppLoadUnit.js +77 -89
- package/dist/lib/AppLoadUnitInstance.d.ts +23 -19
- package/dist/lib/AppLoadUnitInstance.js +69 -81
- package/dist/lib/CompatibleUtil.d.ts +22 -13
- package/dist/lib/CompatibleUtil.js +99 -95
- package/dist/lib/ConfigSourceLoadUnitHook.d.ts +13 -8
- package/dist/lib/ConfigSourceLoadUnitHook.js +20 -20
- package/dist/lib/EggAppLoader.d.ts +19 -15
- package/dist/lib/EggAppLoader.js +104 -127
- package/dist/lib/EggCompatibleObject.d.ts +19 -17
- package/dist/lib/EggCompatibleObject.js +34 -40
- package/dist/lib/EggCompatibleProtoImpl.d.ts +25 -20
- package/dist/lib/EggCompatibleProtoImpl.js +49 -52
- package/dist/lib/EggContextCompatibleHook.d.ts +13 -9
- package/dist/lib/EggContextCompatibleHook.js +32 -44
- package/dist/lib/EggContextHandler.d.ts +12 -8
- package/dist/lib/EggContextHandler.js +28 -26
- package/dist/lib/EggContextImpl.d.ts +9 -5
- package/dist/lib/EggContextImpl.js +18 -15
- package/dist/lib/EggModuleLoader.d.ts +16 -10
- package/dist/lib/EggModuleLoader.js +53 -53
- package/dist/lib/EggQualifierProtoHook.d.ts +13 -9
- package/dist/lib/EggQualifierProtoHook.js +46 -62
- package/dist/lib/ModuleConfigLoader.d.ts +11 -7
- package/dist/lib/ModuleConfigLoader.js +81 -80
- package/dist/lib/ModuleHandler.d.ts +17 -12
- package/dist/lib/ModuleHandler.js +47 -52
- package/dist/lib/Utils.d.ts +4 -1
- package/dist/lib/Utils.js +30 -33
- package/dist/lib/ctx_lifecycle_middleware.d.ts +6 -2
- package/dist/lib/ctx_lifecycle_middleware.js +36 -31
- package/dist/lib/run_in_background.d.ts +7 -3
- package/dist/lib/run_in_background.js +46 -54
- package/dist/types.d.ts +54 -8
- package/dist/types.js +3 -5
- package/package.json +49 -54
|
@@ -1,95 +1,99 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EggPrototypeFactory } from
|
|
3
|
-
import {
|
|
4
|
-
import { EggContainerFactory } from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
1
|
+
import { InitTypeQualifierAttribute, ObjectInitType } from "@eggjs/core-decorator";
|
|
2
|
+
import { EggPrototypeFactory } from "@eggjs/metadata";
|
|
3
|
+
import { ProxyUtil } from "@eggjs/tegg-common-util";
|
|
4
|
+
import { EggContainerFactory } from "@eggjs/tegg-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/lib/CompatibleUtil.ts
|
|
7
|
+
var CompatibleUtil = class CompatibleUtil {
|
|
8
|
+
static singletonProtoCache = /* @__PURE__ */ new Map();
|
|
9
|
+
static requestProtoCache = /* @__PURE__ */ new Map();
|
|
10
|
+
static getSingletonProto(name) {
|
|
11
|
+
if (!this.singletonProtoCache.has(name)) {
|
|
12
|
+
const proto = EggPrototypeFactory.instance.getPrototype(name, void 0, [{
|
|
13
|
+
attribute: InitTypeQualifierAttribute,
|
|
14
|
+
value: ObjectInitType.SINGLETON
|
|
15
|
+
}]);
|
|
16
|
+
this.singletonProtoCache.set(name, proto);
|
|
17
|
+
}
|
|
18
|
+
return this.singletonProtoCache.get(name);
|
|
19
|
+
}
|
|
20
|
+
static getRequestProto(name) {
|
|
21
|
+
if (!this.requestProtoCache.has(name)) {
|
|
22
|
+
const proto = EggPrototypeFactory.instance.getPrototype(name, void 0, [{
|
|
23
|
+
attribute: InitTypeQualifierAttribute,
|
|
24
|
+
value: ObjectInitType.CONTEXT
|
|
25
|
+
}]);
|
|
26
|
+
this.requestProtoCache.set(name, proto);
|
|
27
|
+
}
|
|
28
|
+
return this.requestProtoCache.get(name);
|
|
29
|
+
}
|
|
30
|
+
static singletonModuleProxyFactory(app, loadUnitInstance) {
|
|
31
|
+
let deprecated = false;
|
|
32
|
+
return function(_, p) {
|
|
33
|
+
const proto = CompatibleUtil.getSingletonProto(p);
|
|
34
|
+
const eggObj = EggContainerFactory.getEggObject(proto);
|
|
35
|
+
if (!deprecated) {
|
|
36
|
+
deprecated = true;
|
|
37
|
+
app.deprecate(`[egg/module] Please use await app.getEggObject(clazzName) instead of app.${loadUnitInstance.name}.${String(p)}`);
|
|
38
|
+
}
|
|
39
|
+
return eggObj.obj;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
static appCompatible(app, loadUnitInstance) {
|
|
43
|
+
const moduleLoadUnitProxy = ProxyUtil.safeProxy(loadUnitInstance, CompatibleUtil.singletonModuleProxyFactory(app, loadUnitInstance));
|
|
44
|
+
Reflect.defineProperty(app.module, loadUnitInstance.name, {
|
|
45
|
+
configurable: true,
|
|
46
|
+
value: moduleLoadUnitProxy
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
static contextModuleProxyFactory(holder, ctx, loadUnitInstance) {
|
|
50
|
+
const cacheKey = `_${loadUnitInstance.name}Proxy`;
|
|
51
|
+
if (!holder[cacheKey]) {
|
|
52
|
+
let deprecated = false;
|
|
53
|
+
const getter = function(_, p) {
|
|
54
|
+
const proto = CompatibleUtil.getRequestProto(p);
|
|
55
|
+
const eggObj = EggContainerFactory.getEggObject(proto, p);
|
|
56
|
+
if (!deprecated) {
|
|
57
|
+
deprecated = true;
|
|
58
|
+
ctx.app.deprecate(`[egg/module] Please use await ctx.getEggObject(clazzName) instead of ctx.${loadUnitInstance.name}.${String(p)}`);
|
|
59
|
+
}
|
|
60
|
+
return eggObj.obj;
|
|
61
|
+
};
|
|
62
|
+
holder[cacheKey] = ProxyUtil.safeProxy(loadUnitInstance, getter);
|
|
63
|
+
}
|
|
64
|
+
return holder[cacheKey];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compatible the context module, only for koa application
|
|
68
|
+
* @param contextPrototype - The prototype of the context
|
|
69
|
+
* @param loadUnitInstances - The load unit instances
|
|
70
|
+
*/
|
|
71
|
+
static contextModuleCompatible(contextPrototype, loadUnitInstances) {
|
|
72
|
+
const loadUnitInstanceMap = loadUnitInstances.reduce((p, c) => {
|
|
73
|
+
p[c.name] = c;
|
|
74
|
+
return p;
|
|
75
|
+
}, {});
|
|
76
|
+
Reflect.defineProperty(contextPrototype, "module", {
|
|
77
|
+
configurable: true,
|
|
78
|
+
enumerable: true,
|
|
79
|
+
get() {
|
|
80
|
+
if (!this._moduleProxy) {
|
|
81
|
+
const ctxModule = Object.create(loadUnitInstanceMap);
|
|
82
|
+
this._moduleProxy = ProxyUtil.safeProxy(ctxModule, (_, p) => {
|
|
83
|
+
const loadUnitInstance = Reflect.get(ctxModule, p);
|
|
84
|
+
if (!loadUnitInstance) return;
|
|
85
|
+
return CompatibleUtil.contextModuleProxyFactory(ctxModule, this, loadUnitInstance);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return this._moduleProxy;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
static clean() {
|
|
93
|
+
this.singletonProtoCache.clear();
|
|
94
|
+
this.requestProtoCache.clear();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
//#endregion
|
|
99
|
+
export { CompatibleUtil };
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LifecycleHook } from "@eggjs/lifecycle";
|
|
2
|
+
import { LoadUnit, LoadUnitLifecycleContext } from "@eggjs/metadata";
|
|
3
|
+
|
|
4
|
+
//#region src/lib/ConfigSourceLoadUnitHook.d.ts
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
* Copy from standalone/src/ConfigSourceLoadUnitHook
|
|
8
|
+
* Hook for inject moduleConfig.
|
|
9
|
+
* Add default qualifier value is current module name.
|
|
10
|
+
*/
|
|
11
|
+
declare class ConfigSourceLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
12
|
+
preCreate(ctx: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
|
|
10
13
|
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { ConfigSourceLoadUnitHook };
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {} from
|
|
2
|
-
|
|
1
|
+
import { ConfigSourceQualifier, ConfigSourceQualifierAttribute, PrototypeUtil, QualifierUtil } from "@eggjs/core-decorator";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/ConfigSourceLoadUnitHook.ts
|
|
3
4
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnU291cmNlTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9Db25maWdTb3VyY2VMb2FkVW5pdEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBQ3BGLE9BQU8sRUFFTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxhQUFhLENBQUM7QUFFckI7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUE2QixFQUFFLFFBQWtCO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUN0SCxJQUFJLGtCQUFrQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDakQscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
5
|
+
* Copy from standalone/src/ConfigSourceLoadUnitHook
|
|
6
|
+
* Hook for inject moduleConfig.
|
|
7
|
+
* Add default qualifier value is current module name.
|
|
8
|
+
*/
|
|
9
|
+
var ConfigSourceLoadUnitHook = class {
|
|
10
|
+
async preCreate(ctx, loadUnit) {
|
|
11
|
+
const classList = await ctx.loader.load();
|
|
12
|
+
for (const clazz of classList) {
|
|
13
|
+
const moduleConfigObject = PrototypeUtil.getInjectObjects(clazz).find((t) => t.objName === "moduleConfig");
|
|
14
|
+
const configSourceQualifier = QualifierUtil.getProperQualifier(clazz, "moduleConfig", ConfigSourceQualifierAttribute);
|
|
15
|
+
if (moduleConfigObject && !configSourceQualifier) ConfigSourceQualifier(loadUnit.name)(clazz.prototype, moduleConfigObject.refName);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { ConfigSourceLoadUnitHook };
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { EggProtoImplClass } from "@eggjs/core-decorator";
|
|
2
|
+
import { Loader } from "@eggjs/metadata";
|
|
3
|
+
import { Application } from "egg";
|
|
4
|
+
|
|
5
|
+
//#region src/lib/EggAppLoader.d.ts
|
|
6
|
+
declare const APP_CLAZZ_BLACK_LIST: readonly string[];
|
|
7
|
+
declare const CONTEXT_CLAZZ_BLACK_LIST: readonly string[];
|
|
8
|
+
declare const DEFAULT_APP_CLAZZ: readonly string[];
|
|
9
|
+
declare const DEFAULT_CONTEXT_CLAZZ: readonly string[];
|
|
10
|
+
declare class EggAppLoader implements Loader {
|
|
11
|
+
private readonly app;
|
|
12
|
+
private readonly moduleConfigLoader;
|
|
13
|
+
constructor(app: Application);
|
|
14
|
+
private buildClazz;
|
|
15
|
+
private buildAppLoggerClazz;
|
|
16
|
+
private getLoggerNames;
|
|
17
|
+
load(): Promise<EggProtoImplClass[]>;
|
|
16
18
|
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { APP_CLAZZ_BLACK_LIST, CONTEXT_CLAZZ_BLACK_LIST, DEFAULT_APP_CLAZZ, DEFAULT_CONTEXT_CLAZZ, EggAppLoader };
|
package/dist/lib/EggAppLoader.js
CHANGED
|
@@ -1,128 +1,105 @@
|
|
|
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
1
|
import { COMPATIBLE_PROTO_IMPLE_TYPE } from "./EggCompatibleProtoImpl.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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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
|
|
2
|
+
import { ModuleConfigLoader } from "./ModuleConfigLoader.js";
|
|
3
|
+
import { AccessLevel, EggQualifierAttribute, EggType, InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, ObjectInitType, PrototypeUtil, QualifierUtil } from "@eggjs/core-decorator";
|
|
4
|
+
import { TeggError } from "@eggjs/metadata";
|
|
5
|
+
import { ObjectUtils } from "@eggjs/tegg-common-util";
|
|
6
|
+
import { BackgroundTaskHelper } from "@eggjs/background-task";
|
|
7
|
+
import { EggObjectFactory } from "@eggjs/dynamic-inject-runtime";
|
|
8
|
+
|
|
9
|
+
//#region src/lib/EggAppLoader.ts
|
|
10
|
+
const APP_CLAZZ_BLACK_LIST = ["eggObjectFactory", "moduleConfigs"];
|
|
11
|
+
const CONTEXT_CLAZZ_BLACK_LIST = ["logger"];
|
|
12
|
+
const DEFAULT_APP_CLAZZ = [];
|
|
13
|
+
const DEFAULT_CONTEXT_CLAZZ = ["user"];
|
|
14
|
+
var EggAppLoader = class {
|
|
15
|
+
app;
|
|
16
|
+
moduleConfigLoader;
|
|
17
|
+
constructor(app) {
|
|
18
|
+
this.app = app;
|
|
19
|
+
this.moduleConfigLoader = new ModuleConfigLoader(this.app);
|
|
20
|
+
}
|
|
21
|
+
buildClazz(name, eggType) {
|
|
22
|
+
const app = this.app;
|
|
23
|
+
let func;
|
|
24
|
+
if (eggType === EggType.APP) func = function() {
|
|
25
|
+
return app[name];
|
|
26
|
+
};
|
|
27
|
+
else func = function() {
|
|
28
|
+
const ctx = app.currentContext;
|
|
29
|
+
if (!ctx) throw TeggError.create(`Can not read property \`${name}\` because egg ctx has been destroyed`, "read_after_ctx_destroyed");
|
|
30
|
+
return ctx[name];
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(func, "name", {
|
|
33
|
+
value: name,
|
|
34
|
+
writable: false,
|
|
35
|
+
enumerable: false,
|
|
36
|
+
configurable: true
|
|
37
|
+
});
|
|
38
|
+
PrototypeUtil.setIsEggPrototype(func);
|
|
39
|
+
PrototypeUtil.setFilePath(func, "mock_file_path");
|
|
40
|
+
PrototypeUtil.setProperty(func, {
|
|
41
|
+
name,
|
|
42
|
+
initType: ObjectInitType.SINGLETON,
|
|
43
|
+
accessLevel: AccessLevel.PUBLIC,
|
|
44
|
+
protoImplType: COMPATIBLE_PROTO_IMPLE_TYPE
|
|
45
|
+
});
|
|
46
|
+
QualifierUtil.addProtoQualifier(func, LoadUnitNameQualifierAttribute, "app");
|
|
47
|
+
QualifierUtil.addProtoQualifier(func, InitTypeQualifierAttribute, ObjectInitType.SINGLETON);
|
|
48
|
+
QualifierUtil.addProtoQualifier(func, EggQualifierAttribute, eggType);
|
|
49
|
+
return func;
|
|
50
|
+
}
|
|
51
|
+
buildAppLoggerClazz(name) {
|
|
52
|
+
const app = this.app;
|
|
53
|
+
const func = function() {
|
|
54
|
+
return app.getLogger(name);
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(func, "name", {
|
|
57
|
+
value: name,
|
|
58
|
+
writable: false,
|
|
59
|
+
enumerable: false,
|
|
60
|
+
configurable: true
|
|
61
|
+
});
|
|
62
|
+
PrototypeUtil.setIsEggPrototype(func);
|
|
63
|
+
PrototypeUtil.setFilePath(func, "mock_file_path");
|
|
64
|
+
PrototypeUtil.setProperty(func, {
|
|
65
|
+
name,
|
|
66
|
+
initType: ObjectInitType.SINGLETON,
|
|
67
|
+
accessLevel: AccessLevel.PUBLIC,
|
|
68
|
+
protoImplType: COMPATIBLE_PROTO_IMPLE_TYPE
|
|
69
|
+
});
|
|
70
|
+
QualifierUtil.addProtoQualifier(func, LoadUnitNameQualifierAttribute, "app");
|
|
71
|
+
QualifierUtil.addProtoQualifier(func, InitTypeQualifierAttribute, ObjectInitType.SINGLETON);
|
|
72
|
+
QualifierUtil.addProtoQualifier(func, EggQualifierAttribute, EggType.APP);
|
|
73
|
+
return func;
|
|
74
|
+
}
|
|
75
|
+
getLoggerNames(ctxClazzNames, singletonClazzNames) {
|
|
76
|
+
return Array.from(this.app.loggers.keys()).filter((t) => !ctxClazzNames.includes(t) && !singletonClazzNames.includes(t));
|
|
77
|
+
}
|
|
78
|
+
async load() {
|
|
79
|
+
const app = this.app;
|
|
80
|
+
const appProperties = ObjectUtils.getProperties(app);
|
|
81
|
+
const contextProperties = ObjectUtils.getProperties(app.context);
|
|
82
|
+
const allSingletonClazzNameSet = new Set([...appProperties, ...DEFAULT_APP_CLAZZ]);
|
|
83
|
+
APP_CLAZZ_BLACK_LIST.forEach((t) => allSingletonClazzNameSet.delete(t));
|
|
84
|
+
const allSingletonClazzNames = Array.from(allSingletonClazzNameSet);
|
|
85
|
+
const allContextClazzNamesSet = new Set([...contextProperties, ...DEFAULT_CONTEXT_CLAZZ]);
|
|
86
|
+
CONTEXT_CLAZZ_BLACK_LIST.forEach((t) => allContextClazzNamesSet.delete(t));
|
|
87
|
+
const allContextClazzNames = Array.from(allContextClazzNamesSet);
|
|
88
|
+
const loggerNames = this.getLoggerNames(allContextClazzNames, allSingletonClazzNames);
|
|
89
|
+
const allSingletonClazzs = allSingletonClazzNames.map((name) => this.buildClazz(name, EggType.APP));
|
|
90
|
+
const allContextClazzs = allContextClazzNames.map((name) => this.buildClazz(name, EggType.CONTEXT));
|
|
91
|
+
const appLoggerClazzs = loggerNames.map((name) => this.buildAppLoggerClazz(name));
|
|
92
|
+
const moduleConfigList = this.moduleConfigLoader.loadModuleConfigList();
|
|
93
|
+
return [
|
|
94
|
+
...allSingletonClazzs,
|
|
95
|
+
...allContextClazzs,
|
|
96
|
+
...appLoggerClazzs,
|
|
97
|
+
...moduleConfigList,
|
|
98
|
+
BackgroundTaskHelper,
|
|
99
|
+
EggObjectFactory
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
//#endregion
|
|
105
|
+
export { APP_CLAZZ_BLACK_LIST, CONTEXT_CLAZZ_BLACK_LIST, DEFAULT_APP_CLAZZ, DEFAULT_CONTEXT_CLAZZ, EggAppLoader };
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { EggCompatibleProtoImpl } from "./EggCompatibleProtoImpl.js";
|
|
2
|
+
import { EggObjectName } from "@eggjs/core-decorator";
|
|
3
|
+
import { EggPrototype } from "@eggjs/metadata";
|
|
4
|
+
import { EggObject } from "@eggjs/tegg-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/lib/EggCompatibleObject.d.ts
|
|
7
|
+
declare class EggCompatibleObject implements EggObject {
|
|
8
|
+
#private;
|
|
9
|
+
readonly isReady: boolean;
|
|
10
|
+
readonly proto: EggCompatibleProtoImpl;
|
|
11
|
+
readonly name: EggObjectName;
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly isContext: boolean;
|
|
14
|
+
constructor(name: EggObjectName, proto: EggCompatibleProtoImpl);
|
|
15
|
+
get obj(): object;
|
|
16
|
+
injectProperty(): void;
|
|
17
|
+
static createObject(name: EggObjectName, proto: EggPrototype): Promise<EggCompatibleObject>;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
//#endregion
|
|
20
|
+
export { EggCompatibleObject };
|