@eggjs/tegg-runtime 4.0.0-beta.8 → 4.0.0-beta.9

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 (39) hide show
  1. package/dist/factory/EggContainerFactory.d.ts +26 -0
  2. package/dist/factory/EggContainerFactory.js +90 -0
  3. package/dist/factory/EggObjectFactory.d.ts +14 -0
  4. package/dist/factory/EggObjectFactory.js +46 -0
  5. package/dist/factory/LoadUnitInstanceFactory.d.ts +12 -0
  6. package/dist/factory/LoadUnitInstanceFactory.js +57 -0
  7. package/dist/factory/index.d.ts +3 -0
  8. package/dist/factory/index.js +4 -0
  9. package/dist/impl/ContextInitiator.d.ts +8 -0
  10. package/dist/impl/ContextInitiator.js +37 -0
  11. package/dist/impl/ContextObjectGraph.d.ts +6 -0
  12. package/dist/impl/ContextObjectGraph.js +38 -0
  13. package/dist/impl/EggAlwaysNewObjectContainer.d.ts +13 -0
  14. package/dist/impl/EggAlwaysNewObjectContainer.js +33 -0
  15. package/dist/impl/EggObjectImpl.d.ts +17 -0
  16. package/dist/impl/EggObjectImpl.js +179 -0
  17. package/dist/impl/EggObjectUtil.d.ts +7 -0
  18. package/dist/impl/EggObjectUtil.js +172 -0
  19. package/dist/impl/ModuleLoadUnitInstance.d.ts +18 -0
  20. package/dist/impl/ModuleLoadUnitInstance.js +90 -0
  21. package/dist/impl/index.d.ts +6 -0
  22. package/dist/impl/index.js +7 -0
  23. package/dist/index.d.ts +5 -171
  24. package/dist/index.js +5 -528
  25. package/dist/model/AbstractEggContext.d.ts +18 -0
  26. package/dist/model/AbstractEggContext.js +93 -0
  27. package/dist/model/ContextHandler.d.ts +9 -0
  28. package/dist/model/ContextHandler.js +14 -0
  29. package/dist/model/EggContext.d.ts +3 -0
  30. package/dist/model/EggContext.js +3 -0
  31. package/dist/model/EggObject.d.ts +3 -0
  32. package/dist/model/EggObject.js +3 -0
  33. package/dist/model/LoadUnitInstance.d.ts +3 -0
  34. package/dist/model/LoadUnitInstance.js +3 -0
  35. package/dist/model/index.d.ts +5 -0
  36. package/dist/model/index.js +6 -0
  37. package/package.json +8 -8
  38. package/dist/ContextInitiator-DazHfq05.js +0 -160
  39. package/dist/ContextInitiator-GmZYvMSm.js +0 -3
@@ -0,0 +1,26 @@
1
+ import type { ContainerGetMethod, EggContainer, EggObject, EggObjectName, EggProtoImplClass, EggPrototype, LifecycleContext, ObjectInitTypeLike, QualifierInfo } from '@eggjs/tegg-types';
2
+ export declare class EggContainerFactory {
3
+ private static containerGetMethodMap;
4
+ private static ContextInitiatorClass;
5
+ static registerContainerGetMethod(initType: ObjectInitTypeLike, method: ContainerGetMethod): void;
6
+ static getContainer(proto: EggPrototype): EggContainer<LifecycleContext>;
7
+ /**
8
+ * get or create egg object
9
+ * If get singleton egg object in context,
10
+ * will create context egg object for it.
11
+ */
12
+ static getOrCreateEggObject(proto: EggPrototype, name?: EggObjectName): Promise<EggObject>;
13
+ /**
14
+ * get or create egg object from the Class
15
+ * If get singleton egg object in context,
16
+ * will create context egg object for it.
17
+ */
18
+ static getOrCreateEggObjectFromClazz(clazz: EggProtoImplClass, name?: EggObjectName, qualifiers?: QualifierInfo[]): Promise<EggObject>;
19
+ /**
20
+ * get or create egg object from the Name
21
+ * If get singleton egg object in context,
22
+ * will create context egg object for it.
23
+ */
24
+ static getOrCreateEggObjectFromName(name: EggObjectName, qualifiers?: QualifierInfo[]): Promise<EggObject>;
25
+ static getEggObject(proto: EggPrototype, name?: EggObjectName): EggObject;
26
+ }
@@ -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,14 @@
1
+ import type { CreateObjectMethod, EggObject, EggObjectLifeCycleContext, EggObjectName, EggPrototype, EggPrototypeClass } from '@eggjs/tegg-types';
2
+ interface EggObjectPair {
3
+ obj: EggObject;
4
+ ctx: EggObjectLifeCycleContext;
5
+ }
6
+ export declare class EggObjectFactory {
7
+ static eggObjectMap: Map<string, EggObjectPair>;
8
+ static eggObjectCreateMap: Map<EggPrototypeClass, CreateObjectMethod>;
9
+ static registerEggObjectCreateMethod(protoClass: EggPrototypeClass, method: CreateObjectMethod): void;
10
+ static getEggObjectCreateMethod(protoClass: EggPrototypeClass): CreateObjectMethod;
11
+ static createObject(name: EggObjectName, proto: EggPrototype): Promise<EggObject>;
12
+ static destroyObject(obj: EggObject): Promise<void>;
13
+ }
14
+ export {};
@@ -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,12 @@
1
+ import type { EggLoadUnitTypeLike, EggPrototype, LoadUnit, LoadUnitInstance, LoadUnitInstanceLifecycleContext } from '@eggjs/tegg-types';
2
+ type LoadUnitInstanceCreator = (ctx: LoadUnitInstanceLifecycleContext) => LoadUnitInstance;
3
+ export declare class LoadUnitInstanceFactory {
4
+ private static creatorMap;
5
+ private static instanceMap;
6
+ static registerLoadUnitInstanceClass(type: EggLoadUnitTypeLike, creator: LoadUnitInstanceCreator): void;
7
+ static createLoadUnitInstance(loadUnit: LoadUnit): Promise<LoadUnitInstance>;
8
+ static getLoadUnitInstance(loadUnit: LoadUnit): LoadUnitInstance | undefined;
9
+ static destroyLoadUnitInstance(loadUnitInstance: LoadUnitInstance): Promise<void>;
10
+ static getLoadUnitInstanceByProto(proto: EggPrototype): LoadUnitInstance;
11
+ }
12
+ export {};
@@ -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
@@ -0,0 +1,8 @@
1
+ import type { EggRuntimeContext, EggObject } from '@eggjs/tegg-types';
2
+ export declare class ContextInitiator {
3
+ private readonly eggContext;
4
+ private readonly eggObjectInitRecorder;
5
+ constructor(eggContext: EggRuntimeContext);
6
+ init(obj: EggObject): Promise<void>;
7
+ static createContextInitiator(context: EggRuntimeContext): ContextInitiator;
8
+ }
@@ -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,6 @@
1
+ import type { EggPrototype, InjectObjectProto } from '@eggjs/tegg-types';
2
+ export declare class ContextObjectGraph {
3
+ private static eggObjectInitRecorder;
4
+ static getContextProto(proto: EggPrototype): InjectObjectProto[];
5
+ private static doGetContextProto;
6
+ }
@@ -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,13 @@
1
+ import type { EggContainer, EggObject, EggObjectName, EggPrototype, Id, LifecycleContext } from '@eggjs/tegg-types';
2
+ export declare class EggAlwaysNewObjectContainer implements EggContainer<LifecycleContext> {
3
+ static instance: EggAlwaysNewObjectContainer;
4
+ readonly id: Id;
5
+ constructor();
6
+ addProtoToCreate(): void;
7
+ deleteProtoToCreate(): void;
8
+ iterateProtoToCreate(): IterableIterator<[EggObjectName, EggPrototype]>;
9
+ getEggObject(): EggObject;
10
+ getOrCreateEggObject(name: string, proto: EggPrototype): Promise<EggObject>;
11
+ destroy(): Promise<void>;
12
+ init(): Promise<void>;
13
+ }
@@ -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==
@@ -0,0 +1,17 @@
1
+ import type { EggObject, EggObjectLifeCycleContext, EggObjectName, EggPrototype } from '@eggjs/tegg-types';
2
+ export declare class EggObjectImpl implements EggObject {
3
+ private _obj;
4
+ private status;
5
+ readonly proto: EggPrototype;
6
+ readonly name: EggObjectName;
7
+ readonly id: string;
8
+ constructor(name: EggObjectName, proto: EggPrototype);
9
+ initWithInjectProperty(ctx: EggObjectLifeCycleContext): Promise<void>;
10
+ initWithInjectConstructor(ctx: EggObjectLifeCycleContext): Promise<void>;
11
+ init(ctx: EggObjectLifeCycleContext): Promise<void>;
12
+ destroy(ctx: EggObjectLifeCycleContext): Promise<void>;
13
+ injectProperty(name: EggObjectName, descriptor: PropertyDescriptor): void;
14
+ get obj(): object;
15
+ get isReady(): boolean;
16
+ static createObject(name: EggObjectName, proto: EggPrototype, lifecycleContext: EggObjectLifeCycleContext): Promise<EggObjectImpl>;
17
+ }
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0SW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0VnZ09iamVjdEltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLElBQUksQ0FBUztJQUNiLE1BQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUVqRCxLQUFLLENBQWU7SUFDcEIsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsWUFBWSxJQUFtQixFQUFFLEtBQW1CO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBOEI7UUFDekQsZ0JBQWdCO1FBQ2hCLGtDQUFrQztRQUNsQyxpQkFBaUI7UUFDakIsbUNBQW1DO1FBQ25DLG9CQUFvQjtRQUNwQixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUEwQixDQUFDO1lBRXpELGNBQWM7WUFDZCxNQUFNLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsWUFBWTtZQUNaLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDcEgsSUFBSSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDO1lBQ3hHLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFlBQVksRUFBQyxFQUFFO2dCQUNsRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzdHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsMkJBQTJCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNwSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM5RixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRUosY0FBYztZQUNkLE1BQU0sc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXpELFlBQVk7WUFDWixNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDO1lBQzNHLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQztZQUN6RixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDcEMsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUE4QjtRQUM1RCx3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGtDQUFrQztRQUNsQyxtQ0FBbUM7UUFDbkMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFVLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFlBQVksRUFBQyxFQUFFO2dCQUNoRyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzdHLE9BQU8sYUFBYSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RixPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtDQUFrQztvQkFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ1IsT0FBTzt3QkFDTCxTQUFTLEVBQUUsQ0FBQzt3QkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3FCQUNqQixDQUFDO2dCQUNyQixDQUFDLENBQUM7b0JBQ0YsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDO3VCQUMxQyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxPQUFPLEdBQWU7b0JBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQ3JCLFVBQVU7aUJBQ1gsQ0FBQztnQkFDRixhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUM1RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUEwQixDQUFDO1lBRXpELGNBQWM7WUFDZCxNQUFNLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsWUFBWTtZQUNaLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDcEgsSUFBSSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDO1lBQ3hHLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUVELGNBQWM7WUFDZCxNQUFNLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV6RCxZQUFZO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUMzRyxJQUFJLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7WUFDekYsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQ3RDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQThCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQThCO1FBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQ3pDLGNBQWM7WUFDZCxNQUFNLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV6RCxZQUFZO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBMEIsQ0FBQztZQUN6RCxNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDO1lBQzNHLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztZQUNsRyxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBbUIsRUFBRSxVQUE4QjtRQUNoRSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFtQixFQUFFLEtBQW1CLEVBQUUsZ0JBQTJDO1FBQzdHLE1BQU0sR0FBRyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiJ9