@eggjs/tegg-runtime 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 (52) hide show
  1. package/README.md +12 -0
  2. package/dist/{src/factory → factory}/EggContainerFactory.d.ts +1 -0
  3. package/dist/factory/EggContainerFactory.js +90 -0
  4. package/dist/factory/EggObjectFactory.js +46 -0
  5. package/dist/factory/LoadUnitInstanceFactory.js +57 -0
  6. package/dist/factory/index.d.ts +3 -0
  7. package/dist/factory/index.js +4 -0
  8. package/dist/{src/impl → impl}/ContextInitiator.d.ts +0 -1
  9. package/dist/impl/ContextInitiator.js +37 -0
  10. package/dist/impl/ContextObjectGraph.js +38 -0
  11. package/dist/impl/EggAlwaysNewObjectContainer.js +33 -0
  12. package/dist/{src/impl → impl}/EggObjectImpl.d.ts +1 -1
  13. package/dist/impl/EggObjectImpl.js +179 -0
  14. package/dist/impl/EggObjectUtil.js +172 -0
  15. package/dist/impl/ModuleLoadUnitInstance.js +90 -0
  16. package/dist/impl/index.d.ts +6 -0
  17. package/dist/impl/index.js +7 -0
  18. package/dist/index.d.ts +4 -12
  19. package/dist/index.js +5 -29
  20. package/dist/{src/model → model}/AbstractEggContext.d.ts +1 -1
  21. package/dist/model/AbstractEggContext.js +93 -0
  22. package/dist/model/ContextHandler.js +14 -0
  23. package/dist/model/EggContext.js +3 -0
  24. package/dist/model/EggObject.js +3 -0
  25. package/dist/model/LoadUnitInstance.js +3 -0
  26. package/dist/model/index.d.ts +5 -0
  27. package/dist/model/index.js +6 -0
  28. package/package.json +29 -29
  29. package/dist/src/factory/EggContainerFactory.js +0 -76
  30. package/dist/src/factory/EggObjectFactory.js +0 -53
  31. package/dist/src/factory/LoadUnitInstanceFactory.js +0 -62
  32. package/dist/src/impl/ContextInitiator.js +0 -46
  33. package/dist/src/impl/ContextObjectGraph.js +0 -44
  34. package/dist/src/impl/EggAlwaysNewObjectContainer.js +0 -36
  35. package/dist/src/impl/EggObjectImpl.js +0 -178
  36. package/dist/src/impl/EggObjectUtil.js +0 -176
  37. package/dist/src/impl/ModuleLoadUnitInstance.js +0 -91
  38. package/dist/src/model/AbstractEggContext.js +0 -96
  39. package/dist/src/model/ContextHandler.js +0 -19
  40. package/dist/src/model/EggContext.js +0 -6
  41. package/dist/src/model/EggObject.js +0 -6
  42. package/dist/src/model/LoadUnitInstance.js +0 -6
  43. /package/dist/{src/factory → factory}/EggObjectFactory.d.ts +0 -0
  44. /package/dist/{src/factory → factory}/LoadUnitInstanceFactory.d.ts +0 -0
  45. /package/dist/{src/impl → impl}/ContextObjectGraph.d.ts +0 -0
  46. /package/dist/{src/impl → impl}/EggAlwaysNewObjectContainer.d.ts +0 -0
  47. /package/dist/{src/impl → impl}/EggObjectUtil.d.ts +0 -0
  48. /package/dist/{src/impl → impl}/ModuleLoadUnitInstance.d.ts +0 -0
  49. /package/dist/{src/model → model}/ContextHandler.d.ts +0 -0
  50. /package/dist/{src/model → model}/EggContext.d.ts +0 -0
  51. /package/dist/{src/model → model}/EggObject.d.ts +0 -0
  52. /package/dist/{src/model → model}/LoadUnitInstance.d.ts +0 -0
package/README.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # `@eggjs/tegg-runtime`
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-runtime.svg?style=flat)](https://nodejs.org/en/download/)
7
+
8
+ [npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-runtime.svg?style=flat-square
9
+ [npm-url]: https://npmjs.org/package/@eggjs/tegg-runtime
10
+ [snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-runtime/badge.svg?style=flat-square
11
+ [snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-runtime
12
+ [download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-runtime.svg?style=flat-square
13
+ [download-url]: https://npmjs.org/package/@eggjs/tegg-runtime
14
+
3
15
  # Usage
4
16
 
5
17
  This is an internal tegg library, you probably shouldn't use it directly.
@@ -1,6 +1,7 @@
1
1
  import type { ContainerGetMethod, EggContainer, EggObject, EggObjectName, EggProtoImplClass, EggPrototype, LifecycleContext, ObjectInitTypeLike, QualifierInfo } from '@eggjs/tegg-types';
2
2
  export declare class EggContainerFactory {
3
3
  private static containerGetMethodMap;
4
+ private static ContextInitiatorClass;
4
5
  static registerContainerGetMethod(initType: ObjectInitTypeLike, method: ContainerGetMethod): void;
5
6
  static getContainer(proto: EggPrototype): EggContainer<LifecycleContext>;
6
7
  /**
@@ -0,0 +1,90 @@
1
+ import { debuglog } from 'node:util';
2
+ import { EggPrototypeFactory } from '@eggjs/tegg-metadata';
3
+ import { PrototypeUtil } from '@eggjs/core-decorator';
4
+ import { NameUtil } from '@eggjs/tegg-common-util';
5
+ import { ContextHandler } from "../model/ContextHandler.js";
6
+ const debug = debuglog('tegg/core/runtime/EggContainerFactory');
7
+ export class EggContainerFactory {
8
+ static containerGetMethodMap = new Map();
9
+ static ContextInitiatorClass;
10
+ static registerContainerGetMethod(initType, method) {
11
+ if (debug.enabled) {
12
+ debug('registerContainerGetMethod %o %o, exists: %s', initType, method.toString(), this.containerGetMethodMap.has(initType));
13
+ }
14
+ this.containerGetMethodMap.set(initType, method);
15
+ }
16
+ static getContainer(proto) {
17
+ const method = this.containerGetMethodMap.get(proto.initType);
18
+ if (!method) {
19
+ throw new Error(`InitType ${proto.initType} has not register ContainerGetMethod`);
20
+ }
21
+ return method(proto);
22
+ }
23
+ /**
24
+ * get or create egg object
25
+ * If get singleton egg object in context,
26
+ * will create context egg object for it.
27
+ */
28
+ static async getOrCreateEggObject(proto, name) {
29
+ const container = this.getContainer(proto);
30
+ name = name || proto.name;
31
+ const obj = await container.getOrCreateEggObject(name, proto);
32
+ const ctx = ContextHandler.getContext();
33
+ if (ctx) {
34
+ if (!EggContainerFactory.ContextInitiatorClass) {
35
+ // Dependency cycle between ContextInitiator and EggContainerFactory
36
+ const { ContextInitiator } = await import('../impl/ContextInitiator.js');
37
+ debug('import ContextInitiator to fix dependency cycle');
38
+ EggContainerFactory.ContextInitiatorClass = ContextInitiator;
39
+ }
40
+ const initiator = EggContainerFactory.ContextInitiatorClass.createContextInitiator(ctx);
41
+ await initiator.init(obj);
42
+ debug('getOrCreateEggObject with context eggObject:%o, from proto:%o, name:%s', obj.name, proto.name, name);
43
+ }
44
+ else {
45
+ debug('getOrCreateEggObject without context, get eggObject:%o, from proto:%o, name:%s', obj.name, proto.name, name);
46
+ }
47
+ return obj;
48
+ }
49
+ /**
50
+ * get or create egg object from the Class
51
+ * If get singleton egg object in context,
52
+ * will create context egg object for it.
53
+ */
54
+ static async getOrCreateEggObjectFromClazz(clazz, name, qualifiers) {
55
+ let proto = PrototypeUtil.getClazzProto(clazz);
56
+ const isMultiInstance = PrototypeUtil.isEggMultiInstancePrototype(clazz);
57
+ debug('getOrCreateEggObjectFromClazz:%o, isMultiInstance:%s, proto:%o', clazz.name, isMultiInstance, !!proto);
58
+ if (isMultiInstance) {
59
+ const defaultName = NameUtil.getClassName(clazz);
60
+ name = name ?? defaultName;
61
+ proto = EggPrototypeFactory.instance.getPrototype(name, undefined, qualifiers);
62
+ }
63
+ else if (proto) {
64
+ name = name ?? proto.name;
65
+ }
66
+ if (!proto) {
67
+ debug('getOrCreateEggObjectFromClazz:%o not found, eggObjectName:%s, qualifiers:%o, proto:%o, isMultiInstance:%s', clazz.name, name, qualifiers, proto, isMultiInstance);
68
+ throw new Error(`can not get proto for clazz ${clazz.name}`);
69
+ }
70
+ return await this.getOrCreateEggObject(proto, name);
71
+ }
72
+ /**
73
+ * get or create egg object from the Name
74
+ * If get singleton egg object in context,
75
+ * will create context egg object for it.
76
+ */
77
+ static async getOrCreateEggObjectFromName(name, qualifiers) {
78
+ const proto = EggPrototypeFactory.instance.getPrototype(name, undefined, qualifiers);
79
+ if (!proto) {
80
+ throw new Error(`can not get proto for clazz ${String(name)}`);
81
+ }
82
+ return await this.getOrCreateEggObject(proto, name);
83
+ }
84
+ static getEggObject(proto, name) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGFpbmVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5L0VnZ0NvbnRhaW5lckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVkzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUc1RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUVoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLE1BQU0sQ0FBQyxxQkFBcUIsR0FBZ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0RixNQUFNLENBQUMscUJBQXFCLENBQThCO0lBRWxFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUE0QixFQUFFLE1BQTBCO1FBQ3hGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBbUI7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFB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
@@ -0,0 +1,46 @@
1
+ import { LoadUnitFactory } from '@eggjs/tegg-metadata';
2
+ import { EggObjectImpl } from "../impl/EggObjectImpl.js";
3
+ import { EggObjectLifecycleUtil } from "../model/EggObject.js";
4
+ import { LoadUnitInstanceFactory } from "./LoadUnitInstanceFactory.js";
5
+ export class EggObjectFactory {
6
+ static eggObjectMap = new Map();
7
+ static eggObjectCreateMap = new Map();
8
+ static registerEggObjectCreateMethod(protoClass, method) {
9
+ this.eggObjectCreateMap.set(protoClass, method);
10
+ }
11
+ static getEggObjectCreateMethod(protoClass) {
12
+ if (this.eggObjectCreateMap.has(protoClass)) {
13
+ return this.eggObjectCreateMap.get(protoClass);
14
+ }
15
+ return EggObjectImpl.createObject;
16
+ }
17
+ static async createObject(name, proto) {
18
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
19
+ if (!loadUnit) {
20
+ throw new Error(`not found load unit ${proto.loadUnitId}`);
21
+ }
22
+ const loadUnitInstance = LoadUnitInstanceFactory.getLoadUnitInstance(loadUnit);
23
+ const lifecycleContext = {
24
+ loadUnit,
25
+ loadUnitInstance: loadUnitInstance,
26
+ };
27
+ const method = this.getEggObjectCreateMethod(proto.constructor);
28
+ const args = [name, proto, lifecycleContext];
29
+ const obj = await Reflect.apply(method, null, args);
30
+ this.eggObjectMap.set(obj.id, { obj, ctx: lifecycleContext });
31
+ return obj;
32
+ }
33
+ static async destroyObject(obj) {
34
+ const { ctx } = this.eggObjectMap.get(obj.id);
35
+ try {
36
+ if (obj.destroy) {
37
+ await obj.destroy(ctx);
38
+ }
39
+ }
40
+ finally {
41
+ this.eggObjectMap.delete(obj.id);
42
+ EggObjectLifecycleUtil.clearObjectLifecycle(obj);
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5L0VnZ09iamVjdEZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU92RSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxZQUFZLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUQsTUFBTSxDQUFDLGtCQUFrQixHQUErQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTNFLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUE2QixFQUFFLE1BQTBCO1FBQ25HLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBNkI7UUFDbEUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQW1CLEVBQUUsS0FBbUI7UUFDaEUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBOEI7WUFDbEQsUUFBUTtZQUNSLGdCQUFnQixFQUFFLGdCQUFpQjtTQUNwQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFnQyxDQUFDLENBQUM7UUFDckYsTUFBTSxJQUFJLEdBQUcsQ0FBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQWM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMifQ==
@@ -0,0 +1,57 @@
1
+ import { ObjectInitType } from '@eggjs/tegg-types';
2
+ import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
3
+ import { EggContainerFactory } from "./EggContainerFactory.js";
4
+ import { LoadUnitInstanceLifecycleUtil } from "../model/LoadUnitInstance.js";
5
+ export class LoadUnitInstanceFactory {
6
+ static creatorMap = new Map();
7
+ static instanceMap = new Map();
8
+ static registerLoadUnitInstanceClass(type, creator) {
9
+ this.creatorMap.set(type, creator);
10
+ }
11
+ static async createLoadUnitInstance(loadUnit) {
12
+ const creator = this.creatorMap.get(loadUnit.type);
13
+ if (!creator) {
14
+ throw new Error(`load unit instance type ${loadUnit.type} is not implement`);
15
+ }
16
+ const instanceId = IdenticalUtil.createLoadUnitInstanceId(loadUnit.id);
17
+ if (!this.instanceMap.has(instanceId)) {
18
+ const ctx = {
19
+ loadUnit,
20
+ };
21
+ const instance = creator(ctx);
22
+ this.instanceMap.set(instanceId, { instance, ctx });
23
+ if (instance.init) {
24
+ // Module init method will create egg object
25
+ // When inject objects, will find load unit instance
26
+ // so should add instance to instanceMap first
27
+ await instance.init(ctx);
28
+ }
29
+ }
30
+ return this.instanceMap.get(instanceId).instance;
31
+ }
32
+ static getLoadUnitInstance(loadUnit) {
33
+ const instanceId = IdenticalUtil.createLoadUnitInstanceId(loadUnit.id);
34
+ return this.instanceMap.get(instanceId)?.instance;
35
+ }
36
+ static async destroyLoadUnitInstance(loadUnitInstance) {
37
+ const { ctx } = this.instanceMap.get(loadUnitInstance.id);
38
+ await LoadUnitInstanceLifecycleUtil.objectPreDestroy(ctx, loadUnitInstance);
39
+ if (loadUnitInstance.destroy) {
40
+ await loadUnitInstance.destroy(ctx);
41
+ }
42
+ this.instanceMap.delete(loadUnitInstance.id);
43
+ LoadUnitInstanceLifecycleUtil.clearObjectLifecycle(loadUnitInstance);
44
+ }
45
+ static getLoadUnitInstanceByProto(proto) {
46
+ for (const { instance } of this.instanceMap.values()) {
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
+ }
54
+ EggContainerFactory.registerContainerGetMethod(ObjectInitType.SINGLETON, (proto) => {
55
+ return LoadUnitInstanceFactory.getLoadUnitInstanceByProto(proto);
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRJbnN0YW5jZUZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9Mb2FkVW5pdEluc3RhbmNlRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBUTdFLE1BQU0sT0FBTyx1QkFBdUI7SUFDMUIsTUFBTSxDQUFDLFVBQVUsR0FBc0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqRixNQUFNLENBQUMsV0FBVyxHQUFzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTFFLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUF5QixFQUFFLE9BQWdDO1FBQzlGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxRQUFrQjtRQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBcUM7Z0JBQzVDLFFBQVE7YUFDVCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQiw0Q0FBNEM7Z0JBQzVDLG9EQUFvRDtnQkFDcEQsOENBQThDO2dCQUM5QyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQWtCO1FBQzNDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsZ0JBQWtDO1FBQ3JFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUMzRCxNQUFNLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLDZCQUE2QixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxLQUFtQjtRQUNuRCxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDckQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUFHSCxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBbUIsRUFBRSxFQUFFO0lBQy9GLE9BQU8sdUJBQXVCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ export * from './EggContainerFactory.ts';
2
+ export * from './EggObjectFactory.ts';
3
+ export * from './LoadUnitInstanceFactory.ts';
@@ -0,0 +1,4 @@
1
+ export * from "./EggContainerFactory.js";
2
+ export * from "./EggObjectFactory.js";
3
+ export * from "./LoadUnitInstanceFactory.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw4QkFBOEIsQ0FBQyJ9
@@ -2,7 +2,6 @@ import type { EggRuntimeContext, EggObject } from '@eggjs/tegg-types';
2
2
  export declare class ContextInitiator {
3
3
  private readonly eggContext;
4
4
  private readonly eggObjectInitRecorder;
5
- private readonly eggObjectInitPromise;
6
5
  constructor(eggContext: EggRuntimeContext);
7
6
  init(obj: EggObject): Promise<void>;
8
7
  static createContextInitiator(context: EggRuntimeContext): ContextInitiator;
@@ -0,0 +1,37 @@
1
+ import { LoadUnitFactory } from '@eggjs/tegg-metadata';
2
+ import { ContextObjectGraph } from "./ContextObjectGraph.js";
3
+ import { EggContainerFactory } from "../factory/EggContainerFactory.js";
4
+ const CONTEXT_INITIATOR = Symbol('EggContext#ContextInitiator');
5
+ export class ContextInitiator {
6
+ eggContext;
7
+ eggObjectInitRecorder;
8
+ constructor(eggContext) {
9
+ this.eggContext = eggContext;
10
+ this.eggObjectInitRecorder = new WeakMap();
11
+ this.eggContext.set(CONTEXT_INITIATOR, this);
12
+ }
13
+ async init(obj) {
14
+ if (this.eggObjectInitRecorder.get(obj) === true) {
15
+ return;
16
+ }
17
+ this.eggObjectInitRecorder.set(obj, true);
18
+ const injectObjectProtos = ContextObjectGraph.getContextProto(obj.proto);
19
+ await Promise.all(injectObjectProtos.map(async (injectObject) => {
20
+ const proto = injectObject.proto;
21
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
22
+ if (!loadUnit) {
23
+ throw new Error(`can not find load unit: ${proto.loadUnitId}`);
24
+ }
25
+ await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
26
+ }));
27
+ }
28
+ static createContextInitiator(context) {
29
+ let initiator = context.get(CONTEXT_INITIATOR);
30
+ if (!initiator) {
31
+ initiator = new ContextInitiator(context);
32
+ context.set(CONTEXT_INITIATOR, initiator);
33
+ }
34
+ return initiator;
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dEluaXRpYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0NvbnRleHRJbml0aWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFaEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFVBQVUsQ0FBb0I7SUFDOUIscUJBQXFCLENBQThCO0lBRXBFLFlBQVksVUFBNkI7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBYztRQUN2QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE1BQU0sbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUEwQjtRQUN0RCxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
@@ -0,0 +1,38 @@
1
+ import { ObjectInitType } from '@eggjs/tegg-types';
2
+ class InjectProtoHolder {
3
+ idSet = new Set();
4
+ injectProtos = [];
5
+ addInjectProto(injectObjectProto) {
6
+ const id = `${String(injectObjectProto.objName)}:${injectObjectProto.proto.id}`;
7
+ if (this.idSet.has(id)) {
8
+ return;
9
+ }
10
+ this.idSet.add(id);
11
+ this.injectProtos.push(injectObjectProto);
12
+ }
13
+ dumpProtos() {
14
+ return this.injectProtos;
15
+ }
16
+ }
17
+ export class ContextObjectGraph {
18
+ static eggObjectInitRecorder = new WeakMap();
19
+ static getContextProto(proto) {
20
+ if (ContextObjectGraph.eggObjectInitRecorder.has(proto)) {
21
+ return ContextObjectGraph.eggObjectInitRecorder.get(proto);
22
+ }
23
+ const holder = new InjectProtoHolder();
24
+ this.doGetContextProto(proto, holder);
25
+ const injectObjectProtos = holder.dumpProtos();
26
+ ContextObjectGraph.eggObjectInitRecorder.set(proto, injectObjectProtos);
27
+ return injectObjectProtos;
28
+ }
29
+ static doGetContextProto(proto, holder) {
30
+ for (const injectObject of proto.injectObjects) {
31
+ if (injectObject.proto.initType === ObjectInitType.CONTEXT && proto.initType !== ObjectInitType.CONTEXT) {
32
+ holder.addInjectProto(injectObject);
33
+ }
34
+ ContextObjectGraph.doGetContextProto(injectObject.proto, holder);
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE9iamVjdEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcGwvQ29udGV4dE9iamVjdEdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLGlCQUFpQjtJQUNiLEtBQUssR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQTZCLEVBQUUsQ0FBQztJQUVwRCxjQUFjLENBQUMsaUJBQW9DO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsTUFBTSxDQUFDLHFCQUFxQixHQUFvRCxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXRHLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBbUI7UUFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0Msa0JBQWtCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFtQixFQUFFLE1BQXlCO1FBQzdFLEtBQUssTUFBTSxZQUFZLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0Qsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQyJ9
@@ -0,0 +1,33 @@
1
+ import { ObjectInitType } from '@eggjs/tegg-types';
2
+ import { EggObjectFactory } from "../factory/EggObjectFactory.js";
3
+ import { EggContainerFactory } from "../factory/EggContainerFactory.js";
4
+ export class EggAlwaysNewObjectContainer {
5
+ static instance = new EggAlwaysNewObjectContainer();
6
+ id;
7
+ constructor() {
8
+ this.id = 'ALWAYS_NEW_OBJECT_CONTAINER';
9
+ }
10
+ addProtoToCreate() {
11
+ return;
12
+ }
13
+ deleteProtoToCreate() {
14
+ return;
15
+ }
16
+ iterateProtoToCreate() {
17
+ return new Map().entries();
18
+ }
19
+ getEggObject() {
20
+ throw new Error('Always Object can not use getEggObject, should use getOrCreateEggObject');
21
+ }
22
+ async getOrCreateEggObject(name, proto) {
23
+ return EggObjectFactory.createObject(name, proto);
24
+ }
25
+ async destroy() {
26
+ // do nothing
27
+ }
28
+ async init() {
29
+ // do nothing
30
+ }
31
+ }
32
+ EggContainerFactory.registerContainerGetMethod(ObjectInitType.ALWAYS_NEW, () => EggAlwaysNewObjectContainer.instance);
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQWx3YXlzTmV3T2JqZWN0Q29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcGwvRWdnQWx3YXlzTmV3T2JqZWN0Q29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV4RSxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQzNDLEVBQUUsQ0FBSztJQUVoQjtRQUNFLElBQUksQ0FBQyxFQUFFLEdBQUcsNkJBQTZCLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU87SUFDVCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseUVBQXlFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQVksRUFBRSxLQUFtQjtRQUMxRCxPQUFPLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsYUFBYTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLGFBQWE7SUFDZixDQUFDOztBQUdILG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMifQ==
@@ -1,5 +1,5 @@
1
1
  import type { EggObject, EggObjectLifeCycleContext, EggObjectName, EggPrototype } from '@eggjs/tegg-types';
2
- export default class EggObjectImpl implements EggObject {
2
+ export declare class EggObjectImpl implements EggObject {
3
3
  private _obj;
4
4
  private status;
5
5
  readonly proto: EggPrototype;
@@ -0,0 +1,179 @@
1
+ import { LoadUnitFactory } from '@eggjs/tegg-metadata';
2
+ import { EggObjectStatus, InjectType, ObjectInitType } from '@eggjs/tegg-types';
3
+ import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
4
+ import { EggObjectLifecycleUtil } from "../model/EggObject.js";
5
+ import { ContextHandler } from "../model/ContextHandler.js";
6
+ import { EggContainerFactory } from "../factory/EggContainerFactory.js";
7
+ import { EggObjectUtil } from "./EggObjectUtil.js";
8
+ export class EggObjectImpl {
9
+ _obj;
10
+ status = EggObjectStatus.PENDING;
11
+ proto;
12
+ name;
13
+ id;
14
+ constructor(name, proto) {
15
+ this.name = name;
16
+ this.proto = proto;
17
+ const ctx = ContextHandler.getContext();
18
+ this.id = IdenticalUtil.createObjectId(this.proto.id, ctx?.id);
19
+ }
20
+ async initWithInjectProperty(ctx) {
21
+ // 1. create obj
22
+ // 2. call obj lifecycle preCreate
23
+ // 3. inject deps
24
+ // 4. call obj lifecycle postCreate
25
+ // 5. success create
26
+ try {
27
+ this._obj = this.proto.constructEggObject();
28
+ const objLifecycleHook = this._obj;
29
+ // global hook
30
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
31
+ // self hook
32
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook('postConstruct', this.proto) ?? 'postConstruct';
33
+ if (objLifecycleHook[postConstructMethod]) {
34
+ await objLifecycleHook[postConstructMethod](ctx, this);
35
+ }
36
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('preInject', this.proto) ?? 'preInject';
37
+ if (objLifecycleHook[preInjectMethod]) {
38
+ await objLifecycleHook[preInjectMethod](ctx, this);
39
+ }
40
+ await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
41
+ const proto = injectObject.proto;
42
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
43
+ if (!loadUnit) {
44
+ throw new Error(`can not find load unit: ${proto.loadUnitId}`);
45
+ }
46
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) {
47
+ this.injectProperty(injectObject.refName, EggObjectUtil.contextEggObjectGetProperty(proto, injectObject.objName));
48
+ }
49
+ else {
50
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
51
+ this.injectProperty(injectObject.refName, EggObjectUtil.eggObjectGetProperty(injectObj));
52
+ }
53
+ }));
54
+ // global hook
55
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
56
+ // self hook
57
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
58
+ if (objLifecycleHook[postInjectMethod]) {
59
+ await objLifecycleHook[postInjectMethod](ctx, this);
60
+ }
61
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
62
+ if (objLifecycleHook[initMethod]) {
63
+ await objLifecycleHook[initMethod](ctx, this);
64
+ }
65
+ this.status = EggObjectStatus.READY;
66
+ }
67
+ catch (e) {
68
+ this.status = EggObjectStatus.ERROR;
69
+ throw e;
70
+ }
71
+ }
72
+ async initWithInjectConstructor(ctx) {
73
+ // 1. create inject deps
74
+ // 2. create obj
75
+ // 3. call obj lifecycle preCreate
76
+ // 4. call obj lifecycle postCreate
77
+ // 5. success create
78
+ try {
79
+ const constructArgs = await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
80
+ const proto = injectObject.proto;
81
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
82
+ if (!loadUnit) {
83
+ throw new Error(`can not find load unit: ${proto.loadUnitId}`);
84
+ }
85
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) {
86
+ return EggObjectUtil.contextEggObjectProxy(proto, injectObject.objName);
87
+ }
88
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
89
+ return EggObjectUtil.eggObjectProxy(injectObj);
90
+ }));
91
+ if (typeof this.proto.multiInstanceConstructorIndex !== 'undefined') {
92
+ const qualifiers = this.proto.multiInstanceConstructorAttributes
93
+ ?.map(t => {
94
+ return {
95
+ attribute: t,
96
+ value: this.proto.getQualifier(t),
97
+ };
98
+ })
99
+ ?.filter(t => typeof t.value !== 'undefined')
100
+ ?? [];
101
+ const objInfo = {
102
+ name: this.proto.name,
103
+ qualifiers,
104
+ };
105
+ constructArgs.splice(this.proto.multiInstanceConstructorIndex, 0, objInfo);
106
+ }
107
+ this._obj = this.proto.constructEggObject(...constructArgs);
108
+ const objLifecycleHook = this._obj;
109
+ // global hook
110
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
111
+ // self hook
112
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook('postConstruct', this.proto) ?? 'postConstruct';
113
+ if (objLifecycleHook[postConstructMethod]) {
114
+ await objLifecycleHook[postConstructMethod](ctx, this);
115
+ }
116
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('preInject', this.proto) ?? 'preInject';
117
+ if (objLifecycleHook[preInjectMethod]) {
118
+ await objLifecycleHook[preInjectMethod](ctx, this);
119
+ }
120
+ // global hook
121
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
122
+ // self hook
123
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
124
+ if (objLifecycleHook[postInjectMethod]) {
125
+ await objLifecycleHook[postInjectMethod](ctx, this);
126
+ }
127
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
128
+ if (objLifecycleHook[initMethod]) {
129
+ await objLifecycleHook[initMethod](ctx, this);
130
+ }
131
+ this.status = EggObjectStatus.READY;
132
+ }
133
+ catch (e) {
134
+ this.status = EggObjectStatus.ERROR;
135
+ throw e;
136
+ }
137
+ }
138
+ async init(ctx) {
139
+ if (this.proto.injectType === InjectType.CONSTRUCTOR) {
140
+ await this.initWithInjectConstructor(ctx);
141
+ }
142
+ else {
143
+ await this.initWithInjectProperty(ctx);
144
+ }
145
+ }
146
+ async destroy(ctx) {
147
+ if (this.status === EggObjectStatus.READY) {
148
+ this.status = EggObjectStatus.DESTROYING;
149
+ // global hook
150
+ await EggObjectLifecycleUtil.objectPreDestroy(ctx, this);
151
+ // self hook
152
+ const objLifecycleHook = this._obj;
153
+ const preDestroyMethod = EggObjectLifecycleUtil.getLifecycleHook('preDestroy', this.proto) ?? 'preDestroy';
154
+ if (objLifecycleHook[preDestroyMethod]) {
155
+ await objLifecycleHook[preDestroyMethod](ctx, this);
156
+ }
157
+ const destroyMethod = EggObjectLifecycleUtil.getLifecycleHook('destroy', this.proto) ?? 'destroy';
158
+ if (objLifecycleHook[destroyMethod]) {
159
+ await objLifecycleHook[destroyMethod](ctx, this);
160
+ }
161
+ this.status = EggObjectStatus.DESTROYED;
162
+ }
163
+ }
164
+ injectProperty(name, descriptor) {
165
+ Reflect.defineProperty(this._obj, name, descriptor);
166
+ }
167
+ get obj() {
168
+ return this._obj;
169
+ }
170
+ get isReady() {
171
+ return this.status === EggObjectStatus.READY;
172
+ }
173
+ static async createObject(name, proto, lifecycleContext) {
174
+ const obj = new EggObjectImpl(name, proto);
175
+ await obj.init(lifecycleContext);
176
+ return obj;
177
+ }
178
+ }
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0SW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0VnZ09iamVjdEltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLElBQUksQ0FBUztJQUNiLE1BQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUVqRCxLQUFLLENBQWU7SUFDcEIsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsWUFBWSxJQUFtQixFQUFFLEtBQW1CO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBOEI7UUFDekQsZ0JBQWdCO1FBQ2hCLGtDQUFrQztRQUNsQyxpQkFBaUI7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