@eggjs/tegg-runtime 4.0.0-beta.34 → 4.0.0-beta.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/factory/EggContainerFactory.d.ts +29 -25
  2. package/dist/factory/EggContainerFactory.js +79 -89
  3. package/dist/factory/EggObjectFactory.d.ts +14 -11
  4. package/dist/factory/EggObjectFactory.js +47 -44
  5. package/dist/factory/LoadUnitInstanceFactory.d.ts +13 -10
  6. package/dist/factory/LoadUnitInstanceFactory.js +45 -53
  7. package/dist/factory/index.d.ts +3 -3
  8. package/dist/factory/index.js +5 -4
  9. package/dist/impl/ContextInitiator.d.ts +11 -7
  10. package/dist/impl/ContextInitiator.js +35 -36
  11. package/dist/impl/ContextObjectGraph.d.ts +9 -5
  12. package/dist/impl/ContextObjectGraph.js +36 -38
  13. package/dist/impl/EggAlwaysNewObjectContainer.d.ts +16 -12
  14. package/dist/impl/EggAlwaysNewObjectContainer.js +27 -31
  15. package/dist/impl/EggObjectImpl.d.ts +20 -16
  16. package/dist/impl/EggObjectImpl.js +121 -177
  17. package/dist/impl/EggObjectUtil.d.ts +10 -6
  18. package/dist/impl/EggObjectUtil.js +143 -171
  19. package/dist/impl/ModuleLoadUnitInstance.d.ts +21 -17
  20. package/dist/impl/ModuleLoadUnitInstance.js +71 -86
  21. package/dist/impl/index.d.ts +6 -6
  22. package/dist/impl/index.js +8 -7
  23. package/dist/index.d.ts +20 -5
  24. package/dist/index.js +21 -5
  25. package/dist/model/AbstractEggContext.d.ts +21 -17
  26. package/dist/model/AbstractEggContext.js +77 -88
  27. package/dist/model/ContextHandler.d.ts +10 -7
  28. package/dist/model/ContextHandler.js +18 -14
  29. package/dist/model/EggContext.d.ts +7 -3
  30. package/dist/model/EggContext.js +7 -3
  31. package/dist/model/EggObject.d.ts +7 -3
  32. package/dist/model/EggObject.js +7 -3
  33. package/dist/model/LoadUnitInstance.d.ts +7 -3
  34. package/dist/model/LoadUnitInstance.js +7 -3
  35. package/dist/model/index.d.ts +5 -5
  36. package/dist/model/index.js +7 -6
  37. package/package.json +29 -33
@@ -1,180 +1,124 @@
1
- import { LoadUnitFactory } from '@eggjs/metadata';
2
- import { EggObjectStatus, InjectType, ObjectInitType } from '@eggjs/tegg-types';
3
- import { IdenticalUtil } from '@eggjs/lifecycle';
4
- import { EggObjectLifecycleUtil } from "../model/EggObject.js";
5
1
  import { ContextHandler } from "../model/ContextHandler.js";
6
2
  import { EggContainerFactory } from "../factory/EggContainerFactory.js";
3
+ import { EggObjectLifecycleUtil } from "../model/EggObject.js";
7
4
  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 &&
47
- injectObject.proto.initType === ObjectInitType.CONTEXT) {
48
- this.injectProperty(injectObject.refName, EggObjectUtil.contextEggObjectGetProperty(proto, injectObject.objName));
49
- }
50
- else {
51
- const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
52
- this.injectProperty(injectObject.refName, EggObjectUtil.eggObjectGetProperty(injectObj));
53
- }
54
- }));
55
- // global hook
56
- await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
57
- // self hook
58
- const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
59
- if (objLifecycleHook[postInjectMethod]) {
60
- await objLifecycleHook[postInjectMethod](ctx, this);
61
- }
62
- const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
63
- if (objLifecycleHook[initMethod]) {
64
- await objLifecycleHook[initMethod](ctx, this);
65
- }
66
- this.status = EggObjectStatus.READY;
67
- }
68
- catch (e) {
69
- this.status = EggObjectStatus.ERROR;
70
- throw e;
71
- }
72
- }
73
- async initWithInjectConstructor(ctx) {
74
- // 1. create inject deps
75
- // 2. create obj
76
- // 3. call obj lifecycle preCreate
77
- // 4. call obj lifecycle postCreate
78
- // 5. success create
79
- try {
80
- const constructArgs = await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
81
- const proto = injectObject.proto;
82
- const loadUnit = LoadUnitFactory.getLoadUnitById(proto.loadUnitId);
83
- if (!loadUnit) {
84
- throw new Error(`can not find load unit: ${proto.loadUnitId}`);
85
- }
86
- if (this.proto.initType !== ObjectInitType.CONTEXT &&
87
- injectObject.proto.initType === ObjectInitType.CONTEXT) {
88
- return EggObjectUtil.contextEggObjectProxy(proto, injectObject.objName);
89
- }
90
- const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
91
- return EggObjectUtil.eggObjectProxy(injectObj);
92
- }));
93
- if (typeof this.proto.multiInstanceConstructorIndex !== 'undefined') {
94
- const qualifiers = this.proto.multiInstanceConstructorAttributes
95
- ?.map((t) => {
96
- return {
97
- attribute: t,
98
- value: this.proto.getQualifier(t),
99
- };
100
- })
101
- ?.filter((t) => typeof t.value !== 'undefined') ?? [];
102
- const objInfo = {
103
- name: this.proto.name,
104
- qualifiers,
105
- };
106
- constructArgs.splice(this.proto.multiInstanceConstructorIndex, 0, objInfo);
107
- }
108
- this._obj = this.proto.constructEggObject(...constructArgs);
109
- const objLifecycleHook = this._obj;
110
- // global hook
111
- await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
112
- // self hook
113
- const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook('postConstruct', this.proto) ?? 'postConstruct';
114
- if (objLifecycleHook[postConstructMethod]) {
115
- await objLifecycleHook[postConstructMethod](ctx, this);
116
- }
117
- const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('preInject', this.proto) ?? 'preInject';
118
- if (objLifecycleHook[preInjectMethod]) {
119
- await objLifecycleHook[preInjectMethod](ctx, this);
120
- }
121
- // global hook
122
- await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
123
- // self hook
124
- const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook('postInject', this.proto) ?? 'postInject';
125
- if (objLifecycleHook[postInjectMethod]) {
126
- await objLifecycleHook[postInjectMethod](ctx, this);
127
- }
128
- const initMethod = EggObjectLifecycleUtil.getLifecycleHook('init', this.proto) ?? 'init';
129
- if (objLifecycleHook[initMethod]) {
130
- await objLifecycleHook[initMethod](ctx, this);
131
- }
132
- this.status = EggObjectStatus.READY;
133
- }
134
- catch (e) {
135
- this.status = EggObjectStatus.ERROR;
136
- throw e;
137
- }
138
- }
139
- async init(ctx) {
140
- if (this.proto.injectType === InjectType.CONSTRUCTOR) {
141
- await this.initWithInjectConstructor(ctx);
142
- }
143
- else {
144
- await this.initWithInjectProperty(ctx);
145
- }
146
- }
147
- async destroy(ctx) {
148
- if (this.status === EggObjectStatus.READY) {
149
- this.status = EggObjectStatus.DESTROYING;
150
- // global hook
151
- await EggObjectLifecycleUtil.objectPreDestroy(ctx, this);
152
- // self hook
153
- const objLifecycleHook = this._obj;
154
- const preDestroyMethod = EggObjectLifecycleUtil.getLifecycleHook('preDestroy', this.proto) ?? 'preDestroy';
155
- if (objLifecycleHook[preDestroyMethod]) {
156
- await objLifecycleHook[preDestroyMethod](ctx, this);
157
- }
158
- const destroyMethod = EggObjectLifecycleUtil.getLifecycleHook('destroy', this.proto) ?? 'destroy';
159
- if (objLifecycleHook[destroyMethod]) {
160
- await objLifecycleHook[destroyMethod](ctx, this);
161
- }
162
- this.status = EggObjectStatus.DESTROYED;
163
- }
164
- }
165
- injectProperty(name, descriptor) {
166
- Reflect.defineProperty(this._obj, name, descriptor);
167
- }
168
- get obj() {
169
- return this._obj;
170
- }
171
- get isReady() {
172
- return this.status === EggObjectStatus.READY;
173
- }
174
- static async createObject(name, proto, lifecycleContext) {
175
- const obj = new EggObjectImpl(name, proto);
176
- await obj.init(lifecycleContext);
177
- return obj;
178
- }
179
- }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnT2JqZWN0SW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0VnZ09iamVjdEltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLElBQUksQ0FBUztJQUNiLE1BQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUVqRCxLQUFLLENBQWU7SUFDcEIsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsWUFBWSxJQUFtQixFQUFFLEtBQW1CO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBOEI7UUFDekQsZ0JBQWdCO1FBQ2hCLGtDQUFrQztRQUNsQyxpQkFBaUI7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
5
+ import { LoadUnitFactory } from "@eggjs/metadata";
6
+ import { EggObjectStatus, InjectType, ObjectInitType } from "@eggjs/tegg-types";
7
+ import { IdenticalUtil } from "@eggjs/lifecycle";
8
+
9
+ //#region src/impl/EggObjectImpl.ts
10
+ var EggObjectImpl = class EggObjectImpl {
11
+ _obj;
12
+ status = EggObjectStatus.PENDING;
13
+ proto;
14
+ name;
15
+ id;
16
+ constructor(name, proto) {
17
+ this.name = name;
18
+ this.proto = proto;
19
+ const ctx = ContextHandler.getContext();
20
+ this.id = IdenticalUtil.createObjectId(this.proto.id, ctx?.id);
21
+ }
22
+ async initWithInjectProperty(ctx) {
23
+ try {
24
+ this._obj = this.proto.constructEggObject();
25
+ const objLifecycleHook = this._obj;
26
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
27
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook("postConstruct", this.proto) ?? "postConstruct";
28
+ if (objLifecycleHook[postConstructMethod]) await objLifecycleHook[postConstructMethod](ctx, this);
29
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook("preInject", this.proto) ?? "preInject";
30
+ if (objLifecycleHook[preInjectMethod]) await objLifecycleHook[preInjectMethod](ctx, this);
31
+ await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
32
+ const proto = injectObject.proto;
33
+ if (!LoadUnitFactory.getLoadUnitById(proto.loadUnitId)) throw new Error(`can not find load unit: ${proto.loadUnitId}`);
34
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) this.injectProperty(injectObject.refName, EggObjectUtil.contextEggObjectGetProperty(proto, injectObject.objName));
35
+ else {
36
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
37
+ this.injectProperty(injectObject.refName, EggObjectUtil.eggObjectGetProperty(injectObj));
38
+ }
39
+ }));
40
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
41
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook("postInject", this.proto) ?? "postInject";
42
+ if (objLifecycleHook[postInjectMethod]) await objLifecycleHook[postInjectMethod](ctx, this);
43
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook("init", this.proto) ?? "init";
44
+ if (objLifecycleHook[initMethod]) await objLifecycleHook[initMethod](ctx, this);
45
+ this.status = EggObjectStatus.READY;
46
+ } catch (e) {
47
+ this.status = EggObjectStatus.ERROR;
48
+ throw e;
49
+ }
50
+ }
51
+ async initWithInjectConstructor(ctx) {
52
+ try {
53
+ const constructArgs = await Promise.all(this.proto.injectObjects.map(async (injectObject) => {
54
+ const proto = injectObject.proto;
55
+ if (!LoadUnitFactory.getLoadUnitById(proto.loadUnitId)) throw new Error(`can not find load unit: ${proto.loadUnitId}`);
56
+ if (this.proto.initType !== ObjectInitType.CONTEXT && injectObject.proto.initType === ObjectInitType.CONTEXT) return EggObjectUtil.contextEggObjectProxy(proto, injectObject.objName);
57
+ const injectObj = await EggContainerFactory.getOrCreateEggObject(proto, injectObject.objName);
58
+ return EggObjectUtil.eggObjectProxy(injectObj);
59
+ }));
60
+ if (typeof this.proto.multiInstanceConstructorIndex !== "undefined") {
61
+ const qualifiers = this.proto.multiInstanceConstructorAttributes?.map((t) => {
62
+ return {
63
+ attribute: t,
64
+ value: this.proto.getQualifier(t)
65
+ };
66
+ })?.filter((t) => typeof t.value !== "undefined") ?? [];
67
+ const objInfo = {
68
+ name: this.proto.name,
69
+ qualifiers
70
+ };
71
+ constructArgs.splice(this.proto.multiInstanceConstructorIndex, 0, objInfo);
72
+ }
73
+ this._obj = this.proto.constructEggObject(...constructArgs);
74
+ const objLifecycleHook = this._obj;
75
+ await EggObjectLifecycleUtil.objectPreCreate(ctx, this);
76
+ const postConstructMethod = EggObjectLifecycleUtil.getLifecycleHook("postConstruct", this.proto) ?? "postConstruct";
77
+ if (objLifecycleHook[postConstructMethod]) await objLifecycleHook[postConstructMethod](ctx, this);
78
+ const preInjectMethod = EggObjectLifecycleUtil.getLifecycleHook("preInject", this.proto) ?? "preInject";
79
+ if (objLifecycleHook[preInjectMethod]) await objLifecycleHook[preInjectMethod](ctx, this);
80
+ await EggObjectLifecycleUtil.objectPostCreate(ctx, this);
81
+ const postInjectMethod = EggObjectLifecycleUtil.getLifecycleHook("postInject", this.proto) ?? "postInject";
82
+ if (objLifecycleHook[postInjectMethod]) await objLifecycleHook[postInjectMethod](ctx, this);
83
+ const initMethod = EggObjectLifecycleUtil.getLifecycleHook("init", this.proto) ?? "init";
84
+ if (objLifecycleHook[initMethod]) await objLifecycleHook[initMethod](ctx, this);
85
+ this.status = EggObjectStatus.READY;
86
+ } catch (e) {
87
+ this.status = EggObjectStatus.ERROR;
88
+ throw e;
89
+ }
90
+ }
91
+ async init(ctx) {
92
+ if (this.proto.injectType === InjectType.CONSTRUCTOR) await this.initWithInjectConstructor(ctx);
93
+ else await this.initWithInjectProperty(ctx);
94
+ }
95
+ async destroy(ctx) {
96
+ if (this.status === EggObjectStatus.READY) {
97
+ this.status = EggObjectStatus.DESTROYING;
98
+ await EggObjectLifecycleUtil.objectPreDestroy(ctx, this);
99
+ const objLifecycleHook = this._obj;
100
+ const preDestroyMethod = EggObjectLifecycleUtil.getLifecycleHook("preDestroy", this.proto) ?? "preDestroy";
101
+ if (objLifecycleHook[preDestroyMethod]) await objLifecycleHook[preDestroyMethod](ctx, this);
102
+ const destroyMethod = EggObjectLifecycleUtil.getLifecycleHook("destroy", this.proto) ?? "destroy";
103
+ if (objLifecycleHook[destroyMethod]) await objLifecycleHook[destroyMethod](ctx, this);
104
+ this.status = EggObjectStatus.DESTROYED;
105
+ }
106
+ }
107
+ injectProperty(name, descriptor) {
108
+ Reflect.defineProperty(this._obj, name, descriptor);
109
+ }
110
+ get obj() {
111
+ return this._obj;
112
+ }
113
+ get isReady() {
114
+ return this.status === EggObjectStatus.READY;
115
+ }
116
+ static async createObject(name, proto, lifecycleContext) {
117
+ const obj = new EggObjectImpl(name, proto);
118
+ await obj.init(lifecycleContext);
119
+ return obj;
120
+ }
121
+ };
122
+
123
+ //#endregion
124
+ export { EggObjectImpl };
@@ -1,7 +1,11 @@
1
- import type { EggObject, EggPrototype } from '@eggjs/tegg-types';
2
- export declare class EggObjectUtil {
3
- static eggObjectGetProperty(eggObject: EggObject): PropertyDescriptor;
4
- static contextEggObjectGetProperty(proto: EggPrototype, objName: PropertyKey): PropertyDescriptor;
5
- static eggObjectProxy(eggObject: EggObject): PropertyDescriptor;
6
- static contextEggObjectProxy(proto: EggPrototype, objName: PropertyKey): PropertyDescriptor;
1
+ import { EggObject, EggPrototype } from "@eggjs/tegg-types";
2
+
3
+ //#region src/impl/EggObjectUtil.d.ts
4
+ declare class EggObjectUtil {
5
+ static eggObjectGetProperty(eggObject: EggObject): PropertyDescriptor;
6
+ static contextEggObjectGetProperty(proto: EggPrototype, objName: PropertyKey): PropertyDescriptor;
7
+ static eggObjectProxy(eggObject: EggObject): PropertyDescriptor;
8
+ static contextEggObjectProxy(proto: EggPrototype, objName: PropertyKey): PropertyDescriptor;
7
9
  }
10
+ //#endregion
11
+ export { EggObjectUtil };