@eggjs/tegg-runtime 3.52.0 → 4.0.0-beta.2

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 (53) hide show
  1. package/package.json +23 -23
  2. package/{dist/src → src}/factory/EggContainerFactory.d.ts +1 -0
  3. package/src/factory/EggContainerFactory.js +77 -0
  4. package/src/factory/EggObjectFactory.js +46 -0
  5. package/src/factory/LoadUnitInstanceFactory.js +57 -0
  6. package/src/factory/index.d.ts +3 -0
  7. package/src/factory/index.js +4 -0
  8. package/src/impl/ContextInitiator.js +37 -0
  9. package/src/impl/ContextObjectGraph.js +38 -0
  10. package/src/impl/EggAlwaysNewObjectContainer.js +32 -0
  11. package/{dist/src → src}/impl/EggObjectImpl.d.ts +1 -1
  12. package/src/impl/EggObjectImpl.js +178 -0
  13. package/src/impl/EggObjectUtil.js +172 -0
  14. package/src/impl/ModuleLoadUnitInstance.js +90 -0
  15. package/src/impl/index.d.ts +6 -0
  16. package/src/impl/index.js +7 -0
  17. package/src/index.d.ts +5 -0
  18. package/src/index.js +5 -0
  19. package/{dist/src → src}/model/AbstractEggContext.d.ts +1 -1
  20. package/src/model/AbstractEggContext.js +89 -0
  21. package/src/model/ContextHandler.js +14 -0
  22. package/src/model/EggContext.js +3 -0
  23. package/src/model/EggObject.js +3 -0
  24. package/src/model/LoadUnitInstance.js +3 -0
  25. package/src/model/index.d.ts +5 -0
  26. package/src/model/index.js +6 -0
  27. package/dist/index.d.ts +0 -13
  28. package/dist/index.js +0 -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 -39
  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 → src}/factory/EggObjectFactory.d.ts +0 -0
  44. /package/{dist/src → src}/factory/LoadUnitInstanceFactory.d.ts +0 -0
  45. /package/{dist/src → src}/impl/ContextInitiator.d.ts +0 -0
  46. /package/{dist/src → src}/impl/ContextObjectGraph.d.ts +0 -0
  47. /package/{dist/src → src}/impl/EggAlwaysNewObjectContainer.d.ts +0 -0
  48. /package/{dist/src → src}/impl/EggObjectUtil.d.ts +0 -0
  49. /package/{dist/src → src}/impl/ModuleLoadUnitInstance.d.ts +0 -0
  50. /package/{dist/src → src}/model/ContextHandler.d.ts +0 -0
  51. /package/{dist/src → src}/model/EggContext.d.ts +0 -0
  52. /package/{dist/src → src}/model/EggObject.d.ts +0 -0
  53. /package/{dist/src → src}/model/LoadUnitInstance.d.ts +0 -0
package/package.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "name": "@eggjs/tegg-runtime",
3
- "version": "3.52.0",
3
+ "version": "4.0.0-beta.2",
4
4
  "description": "tegg runtime",
5
- "main": "dist/index.js",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./src/index.d.ts",
9
+ "default": "./src/index.js"
10
+ }
11
+ },
6
12
  "files": [
7
- "dist/**/*.js",
8
- "dist/**/*.d.ts"
13
+ "src/**/*.js",
14
+ "src/**/*.d.ts"
9
15
  ],
10
- "typings": "dist/index.d.ts",
11
16
  "keywords": [
12
17
  "egg",
13
18
  "typescript",
@@ -15,11 +20,10 @@
15
20
  "tegg"
16
21
  ],
17
22
  "scripts": {
18
- "test": "cross-env NODE_ENV=test NODE_OPTIONS='--no-deprecation' mocha",
19
23
  "clean": "tsc -b --clean",
20
24
  "tsc": "npm run clean && tsc -p ./tsconfig.json",
21
- "tsc:pub": "npm run clean && tsc -p ./tsconfig.pub.json",
22
- "prepublishOnly": "npm run tsc:pub"
25
+ "tsc:pub": "npm run tsc",
26
+ "prepublishOnly": "npm run tsc"
23
27
  },
24
28
  "author": "killagu <killa123@126.com>",
25
29
  "license": "MIT",
@@ -33,27 +37,23 @@
33
37
  "directory": "core/runtime"
34
38
  },
35
39
  "engines": {
36
- "node": ">=14.0.0"
40
+ "node": ">=20.0.0"
37
41
  },
38
42
  "dependencies": {
39
- "@eggjs/core-decorator": "^3.52.0",
40
- "@eggjs/tegg-common-util": "^3.52.0",
41
- "@eggjs/tegg-lifecycle": "^3.52.0",
42
- "@eggjs/tegg-metadata": "^3.52.0",
43
- "@eggjs/tegg-types": "^3.52.0"
43
+ "@eggjs/core-decorator": "^4.0.0-beta.2",
44
+ "@eggjs/tegg-common-util": "^4.0.0-beta.2",
45
+ "@eggjs/tegg-lifecycle": "^4.0.0-beta.2",
46
+ "@eggjs/tegg-metadata": "^4.0.0-beta.2",
47
+ "@eggjs/tegg-types": "^4.0.0-beta.2"
44
48
  },
45
49
  "devDependencies": {
46
- "@eggjs/tegg-loader": "^3.52.0",
47
- "@types/mocha": "^10.0.1",
48
- "@types/node": "^20.2.4",
49
- "cross-env": "^7.0.3",
50
- "mm": "^3.2.1",
51
- "mocha": "^10.2.0",
52
- "ts-node": "^10.9.1",
53
- "typescript": "^5.0.4"
50
+ "@eggjs/tegg-loader": "^4.0.0-beta.2",
51
+ "@types/node": "22",
52
+ "ts-node": "10",
53
+ "typescript": "5"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
57
57
  },
58
- "gitHead": "35ed34855041dd8898046c9f3834d09a39da8ada"
58
+ "gitHead": "7e29d49dcc2eb26909697d5543b3c4f596c9e927"
59
59
  }
@@ -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,77 @@
1
+ import { EggPrototypeFactory } from '@eggjs/tegg-metadata';
2
+ import { PrototypeUtil } from '@eggjs/core-decorator';
3
+ import { NameUtil } from '@eggjs/tegg-common-util';
4
+ import { ContextHandler } from '../model/index.js';
5
+ export class EggContainerFactory {
6
+ static containerGetMethodMap = new Map();
7
+ static ContextInitiatorClass;
8
+ static registerContainerGetMethod(initType, method) {
9
+ this.containerGetMethodMap.set(initType, method);
10
+ }
11
+ static getContainer(proto) {
12
+ const method = this.containerGetMethodMap.get(proto.initType);
13
+ if (!method) {
14
+ throw new Error(`InitType ${proto.initType} has not register ContainerGetMethod`);
15
+ }
16
+ return method(proto);
17
+ }
18
+ /**
19
+ * get or create egg object
20
+ * If get singleton egg object in context,
21
+ * will create context egg object for it.
22
+ */
23
+ static async getOrCreateEggObject(proto, name) {
24
+ const container = this.getContainer(proto);
25
+ name = name || proto.name;
26
+ const obj = await container.getOrCreateEggObject(name, proto);
27
+ const ctx = ContextHandler.getContext();
28
+ if (ctx) {
29
+ if (!EggContainerFactory.ContextInitiatorClass) {
30
+ // Dependency cycle between ContextInitiator and EggContainerFactory
31
+ const { ContextInitiator } = await import('../impl/ContextInitiator.js');
32
+ EggContainerFactory.ContextInitiatorClass = ContextInitiator;
33
+ }
34
+ const initiator = EggContainerFactory.ContextInitiatorClass.createContextInitiator(ctx);
35
+ await initiator.init(obj);
36
+ }
37
+ return obj;
38
+ }
39
+ /**
40
+ * get or create egg object from the Class
41
+ * If get singleton egg object in context,
42
+ * will create context egg object for it.
43
+ */
44
+ static async getOrCreateEggObjectFromClazz(clazz, name, qualifiers) {
45
+ let proto = PrototypeUtil.getClazzProto(clazz);
46
+ if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
47
+ const defaultName = NameUtil.getClassName(clazz);
48
+ name = name ?? defaultName;
49
+ proto = EggPrototypeFactory.instance.getPrototype(name, undefined, qualifiers);
50
+ }
51
+ else if (proto) {
52
+ name = name ?? proto.name;
53
+ }
54
+ if (!proto) {
55
+ throw new Error(`can not get proto for clazz ${clazz.name}`);
56
+ }
57
+ return await this.getOrCreateEggObject(proto, name);
58
+ }
59
+ /**
60
+ * get or create egg object from the Name
61
+ * If get singleton egg object in context,
62
+ * will create context egg object for it.
63
+ */
64
+ static async getOrCreateEggObjectFromName(name, qualifiers) {
65
+ const proto = EggPrototypeFactory.instance.getPrototype(name, undefined, qualifiers);
66
+ if (!proto) {
67
+ throw new Error(`can not get proto for clazz ${String(name)}`);
68
+ }
69
+ return await this.getOrCreateEggObject(proto, name);
70
+ }
71
+ static getEggObject(proto, name) {
72
+ const container = this.getContainer(proto);
73
+ name = name || proto.name;
74
+ return container.getEggObject(name, proto);
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQ29udGFpbmVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVnZ0NvbnRhaW5lckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxPQUFPLG1CQUFtQjtJQUN0QixNQUFNLENBQUMscUJBQXFCLEdBQWdELElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEYsTUFBTSxDQUFDLHFCQUFxQixDQUE4QjtJQUVsRSxNQUFNLENBQUMsMEJBQTBCLENBQUMsUUFBNEIsRUFBRSxNQUEwQjtRQUN4RixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFtQjtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxDQUFDLFFBQVEsc0NBQXNDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQW1CLEVBQUUsSUFBb0I7UUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMz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
@@ -0,0 +1,46 @@
1
+ import { LoadUnitFactory } from '@eggjs/tegg-metadata';
2
+ import { EggObjectImpl } from '../impl/index.js';
3
+ import { EggObjectLifecycleUtil } from '../model/index.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVnZ09iamVjdEZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU92RSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxZQUFZLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUQsTUFBTSxDQUFDLGtCQUFrQixHQUErQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTNFLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUE2QixFQUFFLE1BQTBCO1FBQ25HLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBNkI7UUFDbEUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQW1CLEVBQUUsS0FBbUI7UUFDaEUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBOEI7WUFDbEQsUUFBUTtZQUNSLGdCQUFnQixFQUFFLGdCQUFpQjtTQUNwQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFnQyxDQUFDLENBQUM7UUFDckYsTUFBTSxJQUFJLEdBQUcsQ0FBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQWM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMifQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRJbnN0YW5jZUZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2FkVW5pdEluc3RhbmNlRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFRbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBUTdFLE1BQU0sT0FBTyx1QkFBdUI7SUFDMUIsTUFBTSxDQUFDLFVBQVUsR0FBc0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqRixNQUFNLENBQUMsV0FBVyxHQUFzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTFFLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxJQUF5QixFQUFFLE9BQWdDO1FBQzlGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxRQUFrQjtRQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBcUM7Z0JBQzVDLFFBQVE7YUFDVCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQiw0Q0FBNEM7Z0JBQzVDLG9EQUFvRDtnQkFDcEQsOENBQThDO2dCQUM5QyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQWtCO1FBQzNDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsZ0JBQWtDO1FBQ3JFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUMzRCxNQUFNLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLDZCQUE2QixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxLQUFtQjtRQUNuRCxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDckQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUFHSCxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBbUIsRUFBRSxFQUFFO0lBQy9GLE9BQU8sdUJBQXVCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ export * from './EggContainerFactory.js';
2
+ export * from './EggObjectFactory.js';
3
+ export * from './LoadUnitInstanceFactory.js';
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw4QkFBOEIsQ0FBQyJ9
@@ -0,0 +1,37 @@
1
+ import { LoadUnitFactory } from '@eggjs/tegg-metadata';
2
+ import { ContextObjectGraph } from './ContextObjectGraph.js';
3
+ import { EggContainerFactory } from '../factory/index.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dEluaXRpYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnRleHRJbml0aWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTFELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFaEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFVBQVUsQ0FBb0I7SUFDOUIscUJBQXFCLENBQThCO0lBRXBFLFlBQVksVUFBNkI7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBYztRQUN2QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE1BQU0sbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUEwQjtRQUN0RCxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE9iamVjdEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQ29udGV4dE9iamVjdEdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxNQUFNLGlCQUFpQjtJQUNiLEtBQUssR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQTZCLEVBQUUsQ0FBQztJQUVwRCxjQUFjLENBQUMsaUJBQW9DO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsTUFBTSxDQUFDLHFCQUFxQixHQUFvRCxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXRHLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBbUI7UUFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0Msa0JBQWtCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFtQixFQUFFLE1BQXlCO1FBQzdFLEtBQUssTUFBTSxZQUFZLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0Qsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQyJ9
@@ -0,0 +1,32 @@
1
+ import { ObjectInitType } from '@eggjs/tegg-types';
2
+ import { EggObjectFactory, EggContainerFactory } from '../factory/index.js';
3
+ export class EggAlwaysNewObjectContainer {
4
+ static instance = new EggAlwaysNewObjectContainer();
5
+ id;
6
+ constructor() {
7
+ this.id = 'ALWAYS_NEW_OBJECT_CONTAINER';
8
+ }
9
+ addProtoToCreate() {
10
+ return;
11
+ }
12
+ deleteProtoToCreate() {
13
+ return;
14
+ }
15
+ iterateProtoToCreate() {
16
+ return new Map().entries();
17
+ }
18
+ getEggObject() {
19
+ throw new Error('Always Object can not use getEggObject, should use getOrCreateEggObject');
20
+ }
21
+ async getOrCreateEggObject(name, proto) {
22
+ return EggObjectFactory.createObject(name, proto);
23
+ }
24
+ async destroy() {
25
+ // do nothing
26
+ }
27
+ async init() {
28
+ // do nothing
29
+ }
30
+ }
31
+ EggContainerFactory.registerContainerGetMethod(ObjectInitType.ALWAYS_NEW, () => EggAlwaysNewObjectContainer.instance);
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnQWx3YXlzTmV3T2JqZWN0Q29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRWdnQWx3YXlzTmV3T2JqZWN0Q29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RSxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQzNDLEVBQUUsQ0FBSztJQUVoQjtRQUNFLElBQUksQ0FBQyxFQUFFLEdBQUcsNkJBQTZCLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU87SUFDVCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseUVBQXlFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQVksRUFBRSxLQUFtQjtRQUMxRCxPQUFPLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsYUFBYTtJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLGFBQWE7SUFDZixDQUFDOztBQUdILG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMifQ==
@@ -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,178 @@
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, ContextHandler } from '../model/index.js';
5
+ import { EggContainerFactory } from '../factory/index.js';
6
+ import { EggObjectUtil } from './EggObjectUtil.js';
7
+ export class EggObjectImpl {
8
+ _obj;
9
+ status = EggObjectStatus.PENDING;
10
+ proto;
11
+ name;
12
+ id;
13
+ constructor(name, proto) {
14
+ this.name = name;
15
+ this.proto = proto;
16
+ const ctx = ContextHandler.getContext();
17
+ this.id = IdenticalUtil.createObjectId(this.proto.id, ctx?.id);
18
+ }
19
+ async initWithInjectProperty(ctx) {
20
+ // 1. create obj
21
+ // 2. call obj lifecycle preCreate
22
+ // 3. inject deps
23
+ // 4. call obj lifecycle postCreate
24
+ // 5. success create
25
+ try {
26
+ this._obj = this.proto.constructEggObject();
27
+ const objLifecycleHook = this._obj;
28
+ // global hook
29
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
30
+ // self hook
31
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook('postConstruct', this.proto) ?? 'postConstruct';
32
+ if (objLifecycleHook[postConstructMethod]) {
33
+ await objLifecycleHook[postConstructMethod](ctx, this);
34
+ }
35
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('preInject', this.proto) ?? 'preInject';
36
+ if (objLifecycleHook[preInjectMethod]) {
37
+ await objLifecycleHook[preInjectMethod](ctx, this);
38
+ }
39
+ await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
40
+ const proto = injectObject.proto;
41
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
42
+ if (!loadUnit) {
43
+ throw new Error(`can not find load unit: ${proto.loadUnitId}`);
44
+ }
45
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) {
46
+ this.injectProperty(injectObject.refName, EggObjectUtil.contextEggObjectGetProperty(proto, injectObject.objName));
47
+ }
48
+ else {
49
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
50
+ this.injectProperty(injectObject.refName, EggObjectUtil.eggObjectGetProperty(injectObj));
51
+ }
52
+ }));
53
+ // global hook
54
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
55
+ // self hook
56
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
57
+ if (objLifecycleHook[postInjectMethod]) {
58
+ await objLifecycleHook[postInjectMethod](ctx, this);
59
+ }
60
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
61
+ if (objLifecycleHook[initMethod]) {
62
+ await objLifecycleHook[initMethod](ctx, this);
63
+ }
64
+ this.status = EggObjectStatus.READY;
65
+ }
66
+ catch (e) {
67
+ this.status = EggObjectStatus.ERROR;
68
+ throw e;
69
+ }
70
+ }
71
+ async initWithInjectConstructor(ctx) {
72
+ // 1. create inject deps
73
+ // 2. create obj
74
+ // 3. call obj lifecycle preCreate
75
+ // 4. call obj lifecycle postCreate
76
+ // 5. success create
77
+ try {
78
+ const constructArgs = await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
79
+ const proto = injectObject.proto;
80
+ const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
81
+ if (!loadUnit) {
82
+ throw new Error(`can not find load unit: ${proto.loadUnitId}`);
83
+ }
84
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) {
85
+ return EggObjectUtil.contextEggObjectProxy(proto, injectObject.objName);
86
+ }
87
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
88
+ return EggObjectUtil.eggObjectProxy(injectObj);
89
+ }));
90
+ if (typeof this.proto.multiInstanceConstructorIndex !== 'undefined') {
91
+ const qualifiers = this.proto.multiInstanceConstructorAttributes
92
+ ?.map(t => {
93
+ return {
94
+ attribute: t,
95
+ value: this.proto.getQualifier(t),
96
+ };
97
+ })
98
+ ?.filter(t => typeof t.value !== 'undefined')
99
+ ?? [];
100
+ const objInfo = {
101
+ name: this.proto.name,
102
+ qualifiers,
103
+ };
104
+ constructArgs.splice(this.proto.multiInstanceConstructorIndex, 0, objInfo);
105
+ }
106
+ this._obj = this.proto.constructEggObject(...constructArgs);
107
+ const objLifecycleHook = this._obj;
108
+ // global hook
109
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
110
+ // self hook
111
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook('postConstruct', this.proto) ?? 'postConstruct';
112
+ if (objLifecycleHook[postConstructMethod]) {
113
+ await objLifecycleHook[postConstructMethod](ctx, this);
114
+ }
115
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('preInject', this.proto) ?? 'preInject';
116
+ if (objLifecycleHook[preInjectMethod]) {
117
+ await objLifecycleHook[preInjectMethod](ctx, this);
118
+ }
119
+ // global hook
120
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
121
+ // self hook
122
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
123
+ if (objLifecycleHook[postInjectMethod]) {
124
+ await objLifecycleHook[postInjectMethod](ctx, this);
125
+ }
126
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
127
+ if (objLifecycleHook[initMethod]) {
128
+ await objLifecycleHook[initMethod](ctx, this);
129
+ }
130
+ this.status = EggObjectStatus.READY;
131
+ }
132
+ catch (e) {
133
+ this.status = EggObjectStatus.ERROR;
134
+ throw e;
135
+ }
136
+ }
137
+ async init(ctx) {
138
+ if (this.proto.injectType === InjectType.CONSTRUCTOR) {
139
+ await this.initWithInjectConstructor(ctx);
140
+ }
141
+ else {
142
+ await this.initWithInjectProperty(ctx);
143
+ }
144
+ }
145
+ async destroy(ctx) {
146
+ if (this.status === EggObjectStatus.READY) {
147
+ this.status = EggObjectStatus.DESTROYING;
148
+ // global hook
149
+ await EggObjectLifecycleUtil.objectPreDestroy(ctx, this);
150
+ // self hook
151
+ const objLifecycleHook = this._obj;
152
+ const preDestroyMethod = EggObjectLifecycleUtil.getLifecycleHook('preDestroy', this.proto) ?? 'preDestroy';
153
+ if (objLifecycleHook[preDestroyMethod]) {
154
+ await objLifecycleHook[preDestroyMethod](ctx, this);
155
+ }
156
+ const destroyMethod = EggObjectLifecycleUtil.getLifecycleHook('destroy', this.proto) ?? 'destroy';
157
+ if (objLifecycleHook[destroyMethod]) {
158
+ await objLifecycleHook[destroyMethod](ctx, this);
159
+ }
160
+ this.status = EggObjectStatus.DESTROYED;
161
+ }
162
+ }
163
+ injectProperty(name, descriptor) {
164
+ Reflect.defineProperty(this._obj, name, descriptor);
165
+ }
166
+ get obj() {
167
+ return this._obj;
168
+ }
169
+ get isReady() {
170
+ return this.status === EggObjectStatus.READY;
171
+ }
172
+ static async createObject(name, proto, lifecycleContext) {
173
+ const obj = new EggObjectImpl(name, proto);
174
+ await obj.init(lifecycleContext);
175
+ return obj;
176
+ }
177
+ }
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0SW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVnZ09iamVjdEltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLElBQUksQ0FBUztJQUNiLE1BQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUVqRCxLQUFLLENBQWU7SUFDcEIsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsWUFBWSxJQUFtQixFQUFFLEtBQW1CO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBOEI7UUFDekQsZ0JBQWdCO1FBQ2hCLGtDQUFrQztRQUNsQyxpQkFBaUI7UUFDakIsbUNBQW1DO1FBQ25DLG9CQUFvQjtRQUNwQixJQUFJLENBQUM7WUFDSCxJ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