@eggjs/tegg-runtime 4.0.0-beta.35 → 4.0.0-beta.36
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/factory/EggContainerFactory.d.ts +29 -25
- package/dist/factory/EggContainerFactory.js +79 -89
- package/dist/factory/EggObjectFactory.d.ts +14 -11
- package/dist/factory/EggObjectFactory.js +47 -44
- package/dist/factory/LoadUnitInstanceFactory.d.ts +13 -10
- package/dist/factory/LoadUnitInstanceFactory.js +46 -54
- package/dist/factory/index.d.ts +3 -3
- package/dist/factory/index.js +5 -4
- package/dist/impl/ContextInitiator.d.ts +11 -7
- package/dist/impl/ContextInitiator.js +34 -35
- package/dist/impl/ContextObjectGraph.d.ts +9 -5
- package/dist/impl/ContextObjectGraph.js +36 -38
- package/dist/impl/EggAlwaysNewObjectContainer.d.ts +16 -12
- package/dist/impl/EggAlwaysNewObjectContainer.js +26 -30
- package/dist/impl/EggObjectImpl.d.ts +20 -16
- package/dist/impl/EggObjectImpl.js +121 -177
- package/dist/impl/EggObjectUtil.d.ts +10 -6
- package/dist/impl/EggObjectUtil.js +143 -171
- package/dist/impl/ModuleLoadUnitInstance.d.ts +21 -17
- package/dist/impl/ModuleLoadUnitInstance.js +71 -86
- package/dist/impl/index.d.ts +6 -6
- package/dist/impl/index.js +8 -7
- package/dist/index.d.ts +20 -5
- package/dist/index.js +21 -5
- package/dist/model/AbstractEggContext.d.ts +21 -17
- package/dist/model/AbstractEggContext.js +77 -88
- package/dist/model/ContextHandler.d.ts +10 -7
- package/dist/model/ContextHandler.js +18 -14
- package/dist/model/EggContext.d.ts +7 -3
- package/dist/model/EggContext.js +7 -3
- package/dist/model/EggObject.d.ts +7 -3
- package/dist/model/EggObject.js +7 -3
- package/dist/model/LoadUnitInstance.d.ts +7 -3
- package/dist/model/LoadUnitInstance.js +7 -3
- package/dist/model/index.d.ts +5 -5
- package/dist/model/index.js +7 -6
- package/package.json +28 -32
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import { ContainerGetMethod, EggContainer, EggObject, EggObjectName, EggProtoImplClass, EggPrototype, LifecycleContext, ObjectInitTypeLike, QualifierInfo } from "@eggjs/tegg-types";
|
|
2
|
+
|
|
3
|
+
//#region src/factory/EggContainerFactory.d.ts
|
|
4
|
+
declare class EggContainerFactory {
|
|
5
|
+
private static containerGetMethodMap;
|
|
6
|
+
private static ContextInitiatorClass;
|
|
7
|
+
static registerContainerGetMethod(initType: ObjectInitTypeLike, method: ContainerGetMethod): void;
|
|
8
|
+
static getContainer(proto: EggPrototype): EggContainer<LifecycleContext>;
|
|
9
|
+
/**
|
|
10
|
+
* get or create egg object
|
|
11
|
+
* If get singleton egg object in context,
|
|
12
|
+
* will create context egg object for it.
|
|
13
|
+
*/
|
|
14
|
+
static getOrCreateEggObject(proto: EggPrototype, name?: EggObjectName): Promise<EggObject>;
|
|
15
|
+
/**
|
|
16
|
+
* get or create egg object from the Class
|
|
17
|
+
* If get singleton egg object in context,
|
|
18
|
+
* will create context egg object for it.
|
|
19
|
+
*/
|
|
20
|
+
static getOrCreateEggObjectFromClazz(clazz: EggProtoImplClass, name?: EggObjectName, qualifiers?: QualifierInfo[]): Promise<EggObject>;
|
|
21
|
+
/**
|
|
22
|
+
* get or create egg object from the Name
|
|
23
|
+
* If get singleton egg object in context,
|
|
24
|
+
* will create context egg object for it.
|
|
25
|
+
*/
|
|
26
|
+
static getOrCreateEggObjectFromName(name: EggObjectName, qualifiers?: QualifierInfo[]): Promise<EggObject>;
|
|
27
|
+
static getEggObject(proto: EggPrototype, name?: EggObjectName): EggObject;
|
|
26
28
|
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { EggContainerFactory };
|
|
@@ -1,90 +1,80 @@
|
|
|
1
|
-
import { debuglog } from 'node:util';
|
|
2
|
-
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
3
|
-
import { EggPrototypeFactory } from '@eggjs/metadata';
|
|
4
|
-
import { NameUtil } from '@eggjs/tegg-common-util';
|
|
5
1
|
import { ContextHandler } from "../model/ContextHandler.js";
|
|
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
|
-
const container = this.getContainer(proto);
|
|
86
|
-
name = name || proto.name;
|
|
87
|
-
return container.getEggObject(name, proto);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGFpbmVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5L0VnZ0NvbnRhaW5lckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBY25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUVoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLE1BQU0sQ0FBQyxxQkFBcUIsR0FBZ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0RixNQUFNLENBQUMscUJBQXFCLENBQThCO0lBRWxFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUE0QixFQUFFLE1BQTBCO1FBQ3hGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FDSCw4Q0FBOEMsRUFDOUMsUUFBUSxFQUNSLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDekMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFtQjtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxJ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
|
|
2
|
+
import { debuglog } from "node:util";
|
|
3
|
+
import { EggPrototypeFactory } from "@eggjs/metadata";
|
|
4
|
+
import { NameUtil } from "@eggjs/tegg-common-util";
|
|
5
|
+
import { PrototypeUtil } from "@eggjs/core-decorator";
|
|
6
|
+
|
|
7
|
+
//#region src/factory/EggContainerFactory.ts
|
|
8
|
+
const debug = debuglog("tegg/core/runtime/EggContainerFactory");
|
|
9
|
+
var EggContainerFactory = class EggContainerFactory {
|
|
10
|
+
static containerGetMethodMap = /* @__PURE__ */ new Map();
|
|
11
|
+
static ContextInitiatorClass;
|
|
12
|
+
static registerContainerGetMethod(initType, method) {
|
|
13
|
+
if (debug.enabled) debug("registerContainerGetMethod %o %o, exists: %s", initType, method.toString(), this.containerGetMethodMap.has(initType));
|
|
14
|
+
this.containerGetMethodMap.set(initType, method);
|
|
15
|
+
}
|
|
16
|
+
static getContainer(proto) {
|
|
17
|
+
const method = this.containerGetMethodMap.get(proto.initType);
|
|
18
|
+
if (!method) throw new Error(`InitType ${proto.initType} has not register ContainerGetMethod`);
|
|
19
|
+
return method(proto);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* get or create egg object
|
|
23
|
+
* If get singleton egg object in context,
|
|
24
|
+
* will create context egg object for it.
|
|
25
|
+
*/
|
|
26
|
+
static async getOrCreateEggObject(proto, name) {
|
|
27
|
+
const container = this.getContainer(proto);
|
|
28
|
+
name = name || proto.name;
|
|
29
|
+
const obj = await container.getOrCreateEggObject(name, proto);
|
|
30
|
+
const ctx = ContextHandler.getContext();
|
|
31
|
+
if (ctx) {
|
|
32
|
+
if (!EggContainerFactory.ContextInitiatorClass) {
|
|
33
|
+
const { ContextInitiator } = await import("../impl/ContextInitiator.js");
|
|
34
|
+
debug("import ContextInitiator to fix dependency cycle");
|
|
35
|
+
EggContainerFactory.ContextInitiatorClass = ContextInitiator;
|
|
36
|
+
}
|
|
37
|
+
await EggContainerFactory.ContextInitiatorClass.createContextInitiator(ctx).init(obj);
|
|
38
|
+
debug("getOrCreateEggObject with context eggObject:%o, from proto:%o, name:%s", obj.name, proto.name, name);
|
|
39
|
+
} else debug("getOrCreateEggObject without context, get eggObject:%o, from proto:%o, name:%s", obj.name, proto.name, name);
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* get or create egg object from the Class
|
|
44
|
+
* If get singleton egg object in context,
|
|
45
|
+
* will create context egg object for it.
|
|
46
|
+
*/
|
|
47
|
+
static async getOrCreateEggObjectFromClazz(clazz, name, qualifiers) {
|
|
48
|
+
let proto = PrototypeUtil.getClazzProto(clazz);
|
|
49
|
+
const isMultiInstance = PrototypeUtil.isEggMultiInstancePrototype(clazz);
|
|
50
|
+
debug("getOrCreateEggObjectFromClazz:%o, isMultiInstance:%s, proto:%o", clazz.name, isMultiInstance, !!proto);
|
|
51
|
+
if (isMultiInstance) {
|
|
52
|
+
const defaultName = NameUtil.getClassName(clazz);
|
|
53
|
+
name = name ?? defaultName;
|
|
54
|
+
proto = EggPrototypeFactory.instance.getPrototype(name, void 0, qualifiers);
|
|
55
|
+
} else if (proto) name = name ?? proto.name;
|
|
56
|
+
if (!proto) {
|
|
57
|
+
debug("getOrCreateEggObjectFromClazz:%o not found, eggObjectName:%s, qualifiers:%o, proto:%o, isMultiInstance:%s", clazz.name, name, qualifiers, proto, isMultiInstance);
|
|
58
|
+
throw new Error(`can not get proto for clazz ${clazz.name}`);
|
|
59
|
+
}
|
|
60
|
+
return await this.getOrCreateEggObject(proto, name);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* get or create egg object from the Name
|
|
64
|
+
* If get singleton egg object in context,
|
|
65
|
+
* will create context egg object for it.
|
|
66
|
+
*/
|
|
67
|
+
static async getOrCreateEggObjectFromName(name, qualifiers) {
|
|
68
|
+
const proto = EggPrototypeFactory.instance.getPrototype(name, void 0, qualifiers);
|
|
69
|
+
if (!proto) throw new Error(`can not get proto for clazz ${String(name)}`);
|
|
70
|
+
return await this.getOrCreateEggObject(proto, name);
|
|
71
|
+
}
|
|
72
|
+
static getEggObject(proto, name) {
|
|
73
|
+
const container = this.getContainer(proto);
|
|
74
|
+
name = name || proto.name;
|
|
75
|
+
return container.getEggObject(name, proto);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { EggContainerFactory };
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CreateObjectMethod, EggObject, EggObjectLifeCycleContext, EggObjectName, EggPrototype, EggPrototypeClass } from "@eggjs/tegg-types";
|
|
2
|
+
|
|
3
|
+
//#region src/factory/EggObjectFactory.d.ts
|
|
2
4
|
interface EggObjectPair {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
obj: EggObject;
|
|
6
|
+
ctx: EggObjectLifeCycleContext;
|
|
5
7
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
declare class EggObjectFactory {
|
|
9
|
+
static eggObjectMap: Map<string, EggObjectPair>;
|
|
10
|
+
static eggObjectCreateMap: Map<EggPrototypeClass, CreateObjectMethod>;
|
|
11
|
+
static registerEggObjectCreateMethod(protoClass: EggPrototypeClass, method: CreateObjectMethod): void;
|
|
12
|
+
static getEggObjectCreateMethod(protoClass: EggPrototypeClass): CreateObjectMethod;
|
|
13
|
+
static createObject(name: EggObjectName, proto: EggPrototype): Promise<EggObject>;
|
|
14
|
+
static destroyObject(obj: EggObject): Promise<void>;
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
//#endregion
|
|
17
|
+
export { EggObjectFactory };
|
|
@@ -1,46 +1,49 @@
|
|
|
1
|
-
import { LoadUnitFactory } from '@eggjs/metadata';
|
|
2
|
-
import { EggObjectImpl } from "../impl/EggObjectImpl.js";
|
|
3
1
|
import { EggObjectLifecycleUtil } from "../model/EggObject.js";
|
|
2
|
+
import { EggObjectImpl } from "../impl/EggObjectImpl.js";
|
|
4
3
|
import { LoadUnitInstanceFactory } from "./LoadUnitInstanceFactory.js";
|
|
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
|
-
|
|
4
|
+
import { LoadUnitFactory } from "@eggjs/metadata";
|
|
5
|
+
|
|
6
|
+
//#region src/factory/EggObjectFactory.ts
|
|
7
|
+
var EggObjectFactory = class {
|
|
8
|
+
static eggObjectMap = /* @__PURE__ */ new Map();
|
|
9
|
+
static eggObjectCreateMap = /* @__PURE__ */ new Map();
|
|
10
|
+
static registerEggObjectCreateMethod(protoClass, method) {
|
|
11
|
+
this.eggObjectCreateMap.set(protoClass, method);
|
|
12
|
+
}
|
|
13
|
+
static getEggObjectCreateMethod(protoClass) {
|
|
14
|
+
if (this.eggObjectCreateMap.has(protoClass)) return this.eggObjectCreateMap.get(protoClass);
|
|
15
|
+
return EggObjectImpl.createObject;
|
|
16
|
+
}
|
|
17
|
+
static async createObject(name, proto) {
|
|
18
|
+
const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
|
|
19
|
+
if (!loadUnit) throw new Error(`not found load unit ${proto.loadUnitId}`);
|
|
20
|
+
const lifecycleContext = {
|
|
21
|
+
loadUnit,
|
|
22
|
+
loadUnitInstance: LoadUnitInstanceFactory.getLoadUnitInstance(loadUnit)
|
|
23
|
+
};
|
|
24
|
+
const method = this.getEggObjectCreateMethod(proto.constructor);
|
|
25
|
+
const args = [
|
|
26
|
+
name,
|
|
27
|
+
proto,
|
|
28
|
+
lifecycleContext
|
|
29
|
+
];
|
|
30
|
+
const obj = await Reflect.apply(method, null, args);
|
|
31
|
+
this.eggObjectMap.set(obj.id, {
|
|
32
|
+
obj,
|
|
33
|
+
ctx: lifecycleContext
|
|
34
|
+
});
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
static async destroyObject(obj) {
|
|
38
|
+
const { ctx } = this.eggObjectMap.get(obj.id);
|
|
39
|
+
try {
|
|
40
|
+
if (obj.destroy) await obj.destroy(ctx);
|
|
41
|
+
} finally {
|
|
42
|
+
this.eggObjectMap.delete(obj.id);
|
|
43
|
+
EggObjectLifecycleUtil.clearObjectLifecycle(obj);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { EggObjectFactory };
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EggLoadUnitTypeLike, EggPrototype, LoadUnit, LoadUnitInstance, LoadUnitInstanceLifecycleContext } from "@eggjs/tegg-types";
|
|
2
|
+
|
|
3
|
+
//#region src/factory/LoadUnitInstanceFactory.d.ts
|
|
2
4
|
type LoadUnitInstanceCreator = (ctx: LoadUnitInstanceLifecycleContext) => LoadUnitInstance;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
declare class LoadUnitInstanceFactory {
|
|
6
|
+
private static creatorMap;
|
|
7
|
+
private static instanceMap;
|
|
8
|
+
static registerLoadUnitInstanceClass(type: EggLoadUnitTypeLike, creator: LoadUnitInstanceCreator): void;
|
|
9
|
+
static createLoadUnitInstance(loadUnit: LoadUnit): Promise<LoadUnitInstance>;
|
|
10
|
+
static getLoadUnitInstance(loadUnit: LoadUnit): LoadUnitInstance | undefined;
|
|
11
|
+
static destroyLoadUnitInstance(loadUnitInstance: LoadUnitInstance): Promise<void>;
|
|
12
|
+
static getLoadUnitInstanceByProto(proto: EggPrototype): LoadUnitInstance;
|
|
11
13
|
}
|
|
12
|
-
|
|
14
|
+
//#endregion
|
|
15
|
+
export { LoadUnitInstanceFactory };
|
|
@@ -1,57 +1,49 @@
|
|
|
1
|
-
import { IdenticalUtil } from '@eggjs/lifecycle';
|
|
2
|
-
import { ObjectInitType } from '@eggjs/tegg-types';
|
|
3
|
-
import { LoadUnitInstanceLifecycleUtil } from "../model/LoadUnitInstance.js";
|
|
4
1
|
import { EggContainerFactory } from "./EggContainerFactory.js";
|
|
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
|
-
if (instance.loadUnit.containPrototype(proto)) {
|
|
48
|
-
return instance;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
throw new Error(`not found load unit for proto ${proto.id}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
2
|
+
import { LoadUnitInstanceLifecycleUtil } from "../model/LoadUnitInstance.js";
|
|
3
|
+
import { ObjectInitType } from "@eggjs/tegg-types";
|
|
4
|
+
import { IdenticalUtil } from "@eggjs/lifecycle";
|
|
5
|
+
|
|
6
|
+
//#region src/factory/LoadUnitInstanceFactory.ts
|
|
7
|
+
var LoadUnitInstanceFactory = class {
|
|
8
|
+
static creatorMap = /* @__PURE__ */ new Map();
|
|
9
|
+
static instanceMap = /* @__PURE__ */ new Map();
|
|
10
|
+
static registerLoadUnitInstanceClass(type, creator) {
|
|
11
|
+
this.creatorMap.set(type, creator);
|
|
12
|
+
}
|
|
13
|
+
static async createLoadUnitInstance(loadUnit) {
|
|
14
|
+
const creator = this.creatorMap.get(loadUnit.type);
|
|
15
|
+
if (!creator) throw new Error(`load unit instance type ${loadUnit.type} is not implement`);
|
|
16
|
+
const instanceId = IdenticalUtil.createLoadUnitInstanceId(loadUnit.id);
|
|
17
|
+
if (!this.instanceMap.has(instanceId)) {
|
|
18
|
+
const ctx = { loadUnit };
|
|
19
|
+
const instance = creator(ctx);
|
|
20
|
+
this.instanceMap.set(instanceId, {
|
|
21
|
+
instance,
|
|
22
|
+
ctx
|
|
23
|
+
});
|
|
24
|
+
if (instance.init) await instance.init(ctx);
|
|
25
|
+
}
|
|
26
|
+
return this.instanceMap.get(instanceId).instance;
|
|
27
|
+
}
|
|
28
|
+
static getLoadUnitInstance(loadUnit) {
|
|
29
|
+
const instanceId = IdenticalUtil.createLoadUnitInstanceId(loadUnit.id);
|
|
30
|
+
return this.instanceMap.get(instanceId)?.instance;
|
|
31
|
+
}
|
|
32
|
+
static async destroyLoadUnitInstance(loadUnitInstance) {
|
|
33
|
+
const { ctx } = this.instanceMap.get(loadUnitInstance.id);
|
|
34
|
+
await LoadUnitInstanceLifecycleUtil.objectPreDestroy(ctx, loadUnitInstance);
|
|
35
|
+
if (loadUnitInstance.destroy) await loadUnitInstance.destroy(ctx);
|
|
36
|
+
this.instanceMap.delete(loadUnitInstance.id);
|
|
37
|
+
LoadUnitInstanceLifecycleUtil.clearObjectLifecycle(loadUnitInstance);
|
|
38
|
+
}
|
|
39
|
+
static getLoadUnitInstanceByProto(proto) {
|
|
40
|
+
for (const { instance } of this.instanceMap.values()) if (instance.loadUnit.containPrototype(proto)) return instance;
|
|
41
|
+
throw new Error(`not found load unit for proto ${proto.id}`);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
54
44
|
EggContainerFactory.registerContainerGetMethod(ObjectInitType.SINGLETON, (proto) => {
|
|
55
|
-
|
|
45
|
+
return LoadUnitInstanceFactory.getLoadUnitInstanceByProto(proto);
|
|
56
46
|
});
|
|
57
|
-
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { LoadUnitInstanceFactory };
|
package/dist/factory/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { EggContainerFactory } from "./EggContainerFactory.js";
|
|
2
|
+
import { EggObjectFactory } from "./EggObjectFactory.js";
|
|
3
|
+
import { LoadUnitInstanceFactory } from "./LoadUnitInstanceFactory.js";
|
package/dist/factory/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { EggContainerFactory } from "./EggContainerFactory.js";
|
|
2
|
+
import { LoadUnitInstanceFactory } from "./LoadUnitInstanceFactory.js";
|
|
3
|
+
import { EggObjectFactory } from "./EggObjectFactory.js";
|
|
4
|
+
|
|
5
|
+
export { };
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { EggObject, EggRuntimeContext } from "@eggjs/tegg-types";
|
|
2
|
+
|
|
3
|
+
//#region src/impl/ContextInitiator.d.ts
|
|
4
|
+
declare class ContextInitiator {
|
|
5
|
+
private readonly eggContext;
|
|
6
|
+
private readonly eggObjectInitRecorder;
|
|
7
|
+
constructor(eggContext: EggRuntimeContext);
|
|
8
|
+
init(obj: EggObject): Promise<void>;
|
|
9
|
+
static createContextInitiator(context: EggRuntimeContext): ContextInitiator;
|
|
8
10
|
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ContextInitiator };
|