@eggjs/metadata 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 (57) hide show
  1. package/dist/errors.d.ts +14 -10
  2. package/dist/errors.js +29 -27
  3. package/dist/factory/EggPrototypeCreatorFactory.d.ts +13 -8
  4. package/dist/factory/EggPrototypeCreatorFactory.js +94 -111
  5. package/dist/factory/EggPrototypeFactory.d.ts +12 -8
  6. package/dist/factory/EggPrototypeFactory.js +40 -51
  7. package/dist/factory/LoadUnitFactory.d.ts +15 -11
  8. package/dist/factory/LoadUnitFactory.js +58 -59
  9. package/dist/factory/index.d.ts +3 -3
  10. package/dist/factory/index.js +5 -4
  11. package/dist/impl/EggPrototypeBuilder.d.ts +25 -21
  12. package/dist/impl/EggPrototypeBuilder.js +112 -127
  13. package/dist/impl/EggPrototypeImpl.d.ts +27 -23
  14. package/dist/impl/EggPrototypeImpl.js +52 -53
  15. package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +10 -6
  16. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +16 -18
  17. package/dist/impl/ModuleLoadUnit.d.ts +37 -33
  18. package/dist/impl/ModuleLoadUnit.js +208 -261
  19. package/dist/impl/index.d.ts +4 -4
  20. package/dist/impl/index.js +6 -5
  21. package/dist/index.d.ts +27 -6
  22. package/dist/index.js +28 -7
  23. package/dist/model/AppGraph.d.ts +38 -35
  24. package/dist/model/AppGraph.js +190 -253
  25. package/dist/model/EggPrototype.d.ts +7 -3
  26. package/dist/model/EggPrototype.js +7 -3
  27. package/dist/model/LoadUnit.d.ts +7 -3
  28. package/dist/model/LoadUnit.js +7 -3
  29. package/dist/model/ModuleDescriptor.d.ts +19 -15
  30. package/dist/model/ModuleDescriptor.js +32 -46
  31. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +34 -30
  32. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +35 -31
  33. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +14 -10
  34. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +26 -29
  35. package/dist/model/ProtoDescriptor/index.d.ts +2 -2
  36. package/dist/model/ProtoDescriptor/index.js +4 -3
  37. package/dist/model/ProtoDescriptorHelper.d.ts +30 -25
  38. package/dist/model/ProtoDescriptorHelper.js +113 -129
  39. package/dist/model/graph/GlobalGraph.d.ts +64 -60
  40. package/dist/model/graph/GlobalGraph.js +172 -236
  41. package/dist/model/graph/GlobalModuleNode.d.ts +26 -22
  42. package/dist/model/graph/GlobalModuleNode.js +42 -38
  43. package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +16 -12
  44. package/dist/model/graph/GlobalModuleNodeBuilder.js +53 -52
  45. package/dist/model/graph/ProtoNode.d.ts +22 -16
  46. package/dist/model/graph/ProtoNode.js +42 -39
  47. package/dist/model/graph/ProtoSelector.d.ts +9 -5
  48. package/dist/model/graph/ProtoSelector.js +3 -2
  49. package/dist/model/graph/index.d.ts +5 -5
  50. package/dist/model/graph/index.js +7 -6
  51. package/dist/model/index.d.ts +14 -7
  52. package/dist/model/index.js +15 -8
  53. package/dist/util/ClassUtil.d.ts +8 -4
  54. package/dist/util/ClassUtil.js +18 -17
  55. package/dist/util/index.d.ts +1 -1
  56. package/dist/util/index.js +3 -2
  57. package/package.json +29 -33
@@ -1,39 +1,42 @@
1
- import { Graph, GraphNode } from '@eggjs/tegg-common-util';
2
- import { AccessLevel } from '@eggjs/tegg-types';
3
- import type { EggProtoImplClass, EggPrototypeName, GraphNodeObj, ModuleReference, QualifierInfo } from '@eggjs/tegg-types';
4
- export interface InstanceClazzMeta {
5
- name: PropertyKey;
6
- qualifiers: QualifierInfo[];
7
- properQualifiers: Record<PropertyKey, QualifierInfo[]>;
8
- accessLevel: AccessLevel;
9
- instanceModule: GraphNode<ModuleNode>;
10
- ownerModule: GraphNode<ModuleNode>;
1
+ import { Graph, GraphNode } from "@eggjs/tegg-common-util";
2
+ import { AccessLevel, EggProtoImplClass, EggPrototypeName, GraphNodeObj as GraphNodeObj$1, ModuleReference as ModuleReference$1, QualifierInfo } from "@eggjs/tegg-types";
3
+
4
+ //#region src/model/AppGraph.d.ts
5
+ interface InstanceClazzMeta {
6
+ name: PropertyKey;
7
+ qualifiers: QualifierInfo[];
8
+ properQualifiers: Record<PropertyKey, QualifierInfo[]>;
9
+ accessLevel: AccessLevel;
10
+ instanceModule: GraphNode<ModuleNode>;
11
+ ownerModule: GraphNode<ModuleNode>;
11
12
  }
12
- export type ClazzMetaMap = Record<EggPrototypeName, InstanceClazzMeta[]>;
13
- export declare class ClazzMap {
14
- private clazzMap;
15
- private graph;
16
- constructor(graph: Graph<ModuleNode>);
17
- build(): Promise<void>;
18
- findDependencyModule(objName: EggPrototypeName, properQualifiers: QualifierInfo[], intoModule: GraphNode<ModuleNode>): GraphNode<ModuleNode>[];
13
+ type ClazzMetaMap = Record<EggPrototypeName, InstanceClazzMeta[]>;
14
+ declare class ClazzMap {
15
+ private clazzMap;
16
+ private graph;
17
+ constructor(graph: Graph<ModuleNode>);
18
+ build(): Promise<void>;
19
+ findDependencyModule(objName: EggPrototypeName, properQualifiers: QualifierInfo[], intoModule: GraphNode<ModuleNode>): GraphNode<ModuleNode>[];
19
20
  }
20
- export declare class ModuleNode implements GraphNodeObj {
21
- readonly id: string;
22
- readonly name: string;
23
- readonly moduleConfig: ModuleReference;
24
- private readonly clazzList;
25
- constructor(moduleConfig: ModuleReference);
26
- addClazz(clazz: EggProtoImplClass): Promise<void>;
27
- toString(): string;
28
- getClazzList(): readonly EggProtoImplClass[];
21
+ declare class ModuleNode implements GraphNodeObj$1 {
22
+ readonly id: string;
23
+ readonly name: string;
24
+ readonly moduleConfig: ModuleReference$1;
25
+ private readonly clazzList;
26
+ constructor(moduleConfig: ModuleReference$1);
27
+ addClazz(clazz: EggProtoImplClass): Promise<void>;
28
+ toString(): string;
29
+ getClazzList(): readonly EggProtoImplClass[];
29
30
  }
30
- export declare class AppGraph {
31
- private graph;
32
- private clazzMap;
33
- moduleConfigList: Array<ModuleReference>;
34
- constructor();
35
- addNode(moduleNode: ModuleNode): void;
36
- getClazzList(): readonly EggProtoImplClass[];
37
- build(): Promise<void>;
38
- sort(): void;
31
+ declare class AppGraph {
32
+ private graph;
33
+ private clazzMap;
34
+ moduleConfigList: Array<ModuleReference$1>;
35
+ constructor();
36
+ addNode(moduleNode: ModuleNode): void;
37
+ getClazzList(): readonly EggProtoImplClass[];
38
+ build(): Promise<void>;
39
+ sort(): void;
39
40
  }
41
+ //#endregion
42
+ export { AppGraph, ClazzMap, ClazzMetaMap, InstanceClazzMeta, ModuleNode };
@@ -1,257 +1,194 @@
1
- import assert from 'node:assert';
2
- import util from 'node:util';
3
- import { Graph, GraphNode, ModuleConfigUtil } from '@eggjs/tegg-common-util';
4
- import { PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
5
- import { AccessLevel, INIT_TYPE_TRY_ORDER, InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, } from '@eggjs/tegg-types';
1
+ import { Graph, GraphNode, ModuleConfigUtil } from "@eggjs/tegg-common-util";
2
+ import { AccessLevel, INIT_TYPE_TRY_ORDER, InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute } from "@eggjs/tegg-types";
3
+ import assert from "node:assert";
4
+ import util from "node:util";
5
+ import { PrototypeUtil, QualifierUtil } from "@eggjs/core-decorator";
6
+
7
+ //#region src/model/AppGraph.ts
6
8
  function verifyQualifier(clazzQualifiers, qualifier) {
7
- const selfQualifiers = clazzQualifiers.find((t) => t.attribute === qualifier.attribute);
8
- return selfQualifiers?.value === qualifier.value;
9
+ return clazzQualifiers.find((t) => t.attribute === qualifier.attribute)?.value === qualifier.value;
9
10
  }
10
11
  function verifyQualifiers(clazzQualifiers, qualifiers) {
11
- for (const qualifier of qualifiers) {
12
- if (!verifyQualifier(clazzQualifiers, qualifier)) {
13
- return false;
14
- }
15
- }
16
- return true;
12
+ for (const qualifier of qualifiers) if (!verifyQualifier(clazzQualifiers, qualifier)) return false;
13
+ return true;
17
14
  }
18
- export class ClazzMap {
19
- clazzMap;
20
- graph;
21
- constructor(graph) {
22
- this.graph = graph;
23
- }
24
- async build() {
25
- const graph = this.graph;
26
- /**
27
- * 1. iterate all module get all MultiInstanceClazz
28
- * 2. iterate MultiInstanceClazz and all module get object meta
29
- * 3. iterate object meta and build clazz map
30
- */
31
- const clazzMap = {};
32
- for (const ownerNode of graph.nodes.values()) {
33
- for (const clazz of ownerNode.val.getClazzList()) {
34
- const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
35
- if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
36
- for (const instanceNode of graph.nodes.values()) {
37
- const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
38
- unitPath: instanceNode.val.moduleConfig.path,
39
- moduleName: instanceNode.val.moduleConfig.name,
40
- });
41
- assert(property, `multi instance property not found for ${clazz.name}`);
42
- for (const info of property.objects) {
43
- const instanceQualifiers = [...qualifiers, ...info.qualifiers];
44
- clazzMap[info.name] = clazzMap[info.name] || [];
45
- clazzMap[info.name].push({
46
- name: info.name,
47
- accessLevel: (await PrototypeUtil.getAccessLevel(clazz, {
48
- unitPath: instanceNode.val.moduleConfig.path,
49
- moduleName: instanceNode.val.moduleConfig.name,
50
- })),
51
- qualifiers: instanceQualifiers,
52
- properQualifiers: info.properQualifiers || {},
53
- instanceModule: instanceNode,
54
- ownerModule: ownerNode,
55
- });
56
- }
57
- }
58
- }
59
- else {
60
- const property = PrototypeUtil.getProperty(clazz);
61
- assert(property, `property not found for ${clazz.name}`);
62
- clazzMap[property.name] = clazzMap[property.name] || [];
63
- clazzMap[property.name].push({
64
- name: property.name,
65
- accessLevel: (await PrototypeUtil.getAccessLevel(clazz, {
66
- unitPath: ownerNode.val.moduleConfig.path,
67
- moduleName: ownerNode.val.moduleConfig.name,
68
- })),
69
- qualifiers,
70
- properQualifiers: {},
71
- ownerModule: ownerNode,
72
- instanceModule: ownerNode,
73
- });
74
- }
75
- }
76
- }
77
- this.clazzMap = clazzMap;
78
- }
79
- findDependencyModule(objName, properQualifiers, intoModule) {
80
- const result = new Set();
81
- const objInfo = this.clazzMap[objName];
82
- if (!objInfo) {
83
- return [];
84
- }
85
- let mayObjs = objInfo.filter((obj) => {
86
- // 1. check accessLevel
87
- if (obj.instanceModule !== intoModule && obj.accessLevel === AccessLevel.PRIVATE) {
88
- return false;
89
- }
90
- // 2. check qualifier
91
- return verifyQualifiers(obj.qualifiers, properQualifiers);
92
- });
93
- // 3. auto set init type qualifier
94
- if (mayObjs.length > 1) {
95
- const initTypeQualifiers = INIT_TYPE_TRY_ORDER.map((type) => ({
96
- attribute: InitTypeQualifierAttribute,
97
- value: type,
98
- }));
99
- for (const initTypeQualifier of initTypeQualifiers) {
100
- const mayInitTypeObjs = mayObjs.filter((obj) => {
101
- return verifyQualifiers(obj.qualifiers, [...properQualifiers, initTypeQualifier]);
102
- });
103
- if (mayInitTypeObjs.length > 0) {
104
- mayObjs = mayInitTypeObjs;
105
- }
106
- }
107
- }
108
- // 4. auto set load unit name qualifier
109
- if (mayObjs.length > 1) {
110
- const moduleNameQualifiers = {
111
- attribute: LoadUnitNameQualifierAttribute,
112
- value: intoModule.val.name,
113
- };
114
- const mayLoadUnitNameObjs = mayObjs.filter((obj) => {
115
- return verifyQualifiers(obj.qualifiers, [...properQualifiers, moduleNameQualifiers]);
116
- });
117
- if (mayLoadUnitNameObjs.length > 0) {
118
- mayObjs = mayLoadUnitNameObjs;
119
- }
120
- }
121
- if (mayObjs.length > 1) {
122
- const message = util.format('multi class found for %s@%o in module %j', objName, properQualifiers, mayObjs.map((t) => {
123
- return t.instanceModule.val.moduleConfig.path;
124
- }));
125
- throw new Error(message);
126
- }
127
- for (const obj of mayObjs) {
128
- result.add(obj.instanceModule);
129
- // result.add(obj.ownerModule);
130
- }
131
- return Array.from(result);
132
- }
133
- }
134
- export class ModuleNode {
135
- id;
136
- name;
137
- moduleConfig;
138
- clazzList;
139
- constructor(moduleConfig) {
140
- this.moduleConfig = moduleConfig;
141
- this.id = moduleConfig.path;
142
- this.name = ModuleConfigUtil.readModuleNameSync(moduleConfig.path);
143
- this.clazzList = [];
144
- }
145
- async addClazz(clazz) {
146
- if (!this.clazzList.includes(clazz)) {
147
- this.clazzList.push(clazz);
148
- }
149
- if (!PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
150
- const initTypeQualifierAttributeValue = await PrototypeUtil.getInitType(clazz, {
151
- unitPath: this.moduleConfig.path,
152
- moduleName: this.moduleConfig.name,
153
- });
154
- const defaultQualifier = [
155
- {
156
- attribute: InitTypeQualifierAttribute,
157
- value: initTypeQualifierAttributeValue,
158
- },
159
- {
160
- attribute: LoadUnitNameQualifierAttribute,
161
- value: this.name,
162
- },
163
- ];
164
- for (const qualifier of defaultQualifier) {
165
- QualifierUtil.addProtoQualifier(clazz, qualifier.attribute, qualifier.value);
166
- }
167
- }
168
- }
169
- toString() {
170
- return `${this.name}@${this.moduleConfig.path}`;
171
- }
172
- getClazzList() {
173
- return this.clazzList;
174
- }
175
- }
176
- export class AppGraph {
177
- graph;
178
- clazzMap;
179
- moduleConfigList;
180
- constructor() {
181
- this.graph = new Graph();
182
- }
183
- addNode(moduleNode) {
184
- if (!this.graph.addVertex(new GraphNode(moduleNode))) {
185
- throw new Error(`duplicate module: ${moduleNode}`);
186
- }
187
- }
188
- getClazzList() {
189
- const clazzSet = new Set();
190
- for (const node of this.graph.nodes.values()) {
191
- for (const clazz of node.val.getClazzList()) {
192
- clazzSet.add(clazz);
193
- }
194
- }
195
- return Array.from(clazzSet);
196
- }
197
- async build() {
198
- this.clazzMap = new ClazzMap(this.graph);
199
- await this.clazzMap.build();
200
- // 1. iterate all modules
201
- for (const node of this.graph.nodes.values()) {
202
- // 2. iterate all class
203
- for (const clazz of node.val.getClazzList()) {
204
- const injectObjects = PrototypeUtil.getInjectObjects(clazz);
205
- // 3. iterate all inject objects
206
- for (const injectObject of injectObjects) {
207
- if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
208
- for (const instanceNode of this.graph.nodes.values()) {
209
- const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
210
- unitPath: instanceNode.val.moduleConfig.path,
211
- moduleName: instanceNode.val.moduleConfig.name,
212
- });
213
- for (const info of property?.objects || []) {
214
- const properQualifiers = [
215
- ...QualifierUtil.getProperQualifiers(clazz, injectObject.refName),
216
- ...(info.properQualifiers?.[injectObject.refName] ?? []),
217
- ];
218
- // 4. find dependency module
219
- const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
220
- for (const moduleNode of dependencyModules) {
221
- // 5. add edge
222
- if (instanceNode !== moduleNode) {
223
- this.graph.addEdge(instanceNode, moduleNode);
224
- }
225
- }
226
- }
227
- }
228
- }
229
- else {
230
- const properQualifiers = [...QualifierUtil.getProperQualifiers(clazz, injectObject.refName)];
231
- // 4. find dependency module
232
- const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
233
- for (const moduleNode of dependencyModules) {
234
- // 5. add edge
235
- if (node !== moduleNode) {
236
- this.graph.addEdge(node, moduleNode);
237
- }
238
- }
239
- }
240
- }
241
- }
242
- }
243
- }
244
- sort() {
245
- const loopPath = this.graph.loopPath();
246
- if (loopPath) {
247
- throw new Error('module has recursive deps: ' + loopPath);
248
- }
249
- this.moduleConfigList = this.graph
250
- .sort()
251
- .filter((t) => {
252
- return t.val.moduleConfig.optional !== true || t.fromNodeMap.size > 0;
253
- })
254
- .map((t) => t.val.moduleConfig);
255
- }
256
- }
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvQXBwR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLDhCQUE4QixHQUMvQixNQUFNLG1CQUFtQixDQUFDO0FBb0IzQixTQUFTLGVBQWUsQ0FBQyxlQUFnQyxFQUFFLFNBQXdCO0lBQ2pGLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hGLE9BQU8sY0FBYyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLGVBQWdDLEVBQUUsVUFBMkI7SUFDckYsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLE9BQU8sUUFBUTtJQUNYLFFBQVEsQ0FBZTtJQUN2QixLQUFLLENBQW9CO0lBRWpDLFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7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
15
+ var ClazzMap = class {
16
+ clazzMap;
17
+ graph;
18
+ constructor(graph) {
19
+ this.graph = graph;
20
+ }
21
+ async build() {
22
+ const graph = this.graph;
23
+ /**
24
+ * 1. iterate all module get all MultiInstanceClazz
25
+ * 2. iterate MultiInstanceClazz and all module get object meta
26
+ * 3. iterate object meta and build clazz map
27
+ */
28
+ const clazzMap = {};
29
+ for (const ownerNode of graph.nodes.values()) for (const clazz of ownerNode.val.getClazzList()) {
30
+ const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
31
+ if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) for (const instanceNode of graph.nodes.values()) {
32
+ const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
33
+ unitPath: instanceNode.val.moduleConfig.path,
34
+ moduleName: instanceNode.val.moduleConfig.name
35
+ });
36
+ assert(property, `multi instance property not found for ${clazz.name}`);
37
+ for (const info of property.objects) {
38
+ const instanceQualifiers = [...qualifiers, ...info.qualifiers];
39
+ clazzMap[info.name] = clazzMap[info.name] || [];
40
+ clazzMap[info.name].push({
41
+ name: info.name,
42
+ accessLevel: await PrototypeUtil.getAccessLevel(clazz, {
43
+ unitPath: instanceNode.val.moduleConfig.path,
44
+ moduleName: instanceNode.val.moduleConfig.name
45
+ }),
46
+ qualifiers: instanceQualifiers,
47
+ properQualifiers: info.properQualifiers || {},
48
+ instanceModule: instanceNode,
49
+ ownerModule: ownerNode
50
+ });
51
+ }
52
+ }
53
+ else {
54
+ const property = PrototypeUtil.getProperty(clazz);
55
+ assert(property, `property not found for ${clazz.name}`);
56
+ clazzMap[property.name] = clazzMap[property.name] || [];
57
+ clazzMap[property.name].push({
58
+ name: property.name,
59
+ accessLevel: await PrototypeUtil.getAccessLevel(clazz, {
60
+ unitPath: ownerNode.val.moduleConfig.path,
61
+ moduleName: ownerNode.val.moduleConfig.name
62
+ }),
63
+ qualifiers,
64
+ properQualifiers: {},
65
+ ownerModule: ownerNode,
66
+ instanceModule: ownerNode
67
+ });
68
+ }
69
+ }
70
+ this.clazzMap = clazzMap;
71
+ }
72
+ findDependencyModule(objName, properQualifiers, intoModule) {
73
+ const result = /* @__PURE__ */ new Set();
74
+ const objInfo = this.clazzMap[objName];
75
+ if (!objInfo) return [];
76
+ let mayObjs = objInfo.filter((obj) => {
77
+ if (obj.instanceModule !== intoModule && obj.accessLevel === AccessLevel.PRIVATE) return false;
78
+ return verifyQualifiers(obj.qualifiers, properQualifiers);
79
+ });
80
+ if (mayObjs.length > 1) {
81
+ const initTypeQualifiers = INIT_TYPE_TRY_ORDER.map((type) => ({
82
+ attribute: InitTypeQualifierAttribute,
83
+ value: type
84
+ }));
85
+ for (const initTypeQualifier of initTypeQualifiers) {
86
+ const mayInitTypeObjs = mayObjs.filter((obj) => {
87
+ return verifyQualifiers(obj.qualifiers, [...properQualifiers, initTypeQualifier]);
88
+ });
89
+ if (mayInitTypeObjs.length > 0) mayObjs = mayInitTypeObjs;
90
+ }
91
+ }
92
+ if (mayObjs.length > 1) {
93
+ const moduleNameQualifiers = {
94
+ attribute: LoadUnitNameQualifierAttribute,
95
+ value: intoModule.val.name
96
+ };
97
+ const mayLoadUnitNameObjs = mayObjs.filter((obj) => {
98
+ return verifyQualifiers(obj.qualifiers, [...properQualifiers, moduleNameQualifiers]);
99
+ });
100
+ if (mayLoadUnitNameObjs.length > 0) mayObjs = mayLoadUnitNameObjs;
101
+ }
102
+ if (mayObjs.length > 1) {
103
+ const message = util.format("multi class found for %s@%o in module %j", objName, properQualifiers, mayObjs.map((t) => {
104
+ return t.instanceModule.val.moduleConfig.path;
105
+ }));
106
+ throw new Error(message);
107
+ }
108
+ for (const obj of mayObjs) result.add(obj.instanceModule);
109
+ return Array.from(result);
110
+ }
111
+ };
112
+ var ModuleNode = class {
113
+ id;
114
+ name;
115
+ moduleConfig;
116
+ clazzList;
117
+ constructor(moduleConfig) {
118
+ this.moduleConfig = moduleConfig;
119
+ this.id = moduleConfig.path;
120
+ this.name = ModuleConfigUtil.readModuleNameSync(moduleConfig.path);
121
+ this.clazzList = [];
122
+ }
123
+ async addClazz(clazz) {
124
+ if (!this.clazzList.includes(clazz)) this.clazzList.push(clazz);
125
+ if (!PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
126
+ const defaultQualifier = [{
127
+ attribute: InitTypeQualifierAttribute,
128
+ value: await PrototypeUtil.getInitType(clazz, {
129
+ unitPath: this.moduleConfig.path,
130
+ moduleName: this.moduleConfig.name
131
+ })
132
+ }, {
133
+ attribute: LoadUnitNameQualifierAttribute,
134
+ value: this.name
135
+ }];
136
+ for (const qualifier of defaultQualifier) QualifierUtil.addProtoQualifier(clazz, qualifier.attribute, qualifier.value);
137
+ }
138
+ }
139
+ toString() {
140
+ return `${this.name}@${this.moduleConfig.path}`;
141
+ }
142
+ getClazzList() {
143
+ return this.clazzList;
144
+ }
145
+ };
146
+ var AppGraph = class {
147
+ graph;
148
+ clazzMap;
149
+ moduleConfigList;
150
+ constructor() {
151
+ this.graph = new Graph();
152
+ }
153
+ addNode(moduleNode) {
154
+ if (!this.graph.addVertex(new GraphNode(moduleNode))) throw new Error(`duplicate module: ${moduleNode}`);
155
+ }
156
+ getClazzList() {
157
+ const clazzSet = /* @__PURE__ */ new Set();
158
+ for (const node of this.graph.nodes.values()) for (const clazz of node.val.getClazzList()) clazzSet.add(clazz);
159
+ return Array.from(clazzSet);
160
+ }
161
+ async build() {
162
+ this.clazzMap = new ClazzMap(this.graph);
163
+ await this.clazzMap.build();
164
+ for (const node of this.graph.nodes.values()) for (const clazz of node.val.getClazzList()) {
165
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz);
166
+ for (const injectObject of injectObjects) if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) for (const instanceNode of this.graph.nodes.values()) {
167
+ const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
168
+ unitPath: instanceNode.val.moduleConfig.path,
169
+ moduleName: instanceNode.val.moduleConfig.name
170
+ });
171
+ for (const info of property?.objects || []) {
172
+ const properQualifiers = [...QualifierUtil.getProperQualifiers(clazz, injectObject.refName), ...info.properQualifiers?.[injectObject.refName] ?? []];
173
+ const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
174
+ for (const moduleNode of dependencyModules) if (instanceNode !== moduleNode) this.graph.addEdge(instanceNode, moduleNode);
175
+ }
176
+ }
177
+ else {
178
+ const properQualifiers = [...QualifierUtil.getProperQualifiers(clazz, injectObject.refName)];
179
+ const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
180
+ for (const moduleNode of dependencyModules) if (node !== moduleNode) this.graph.addEdge(node, moduleNode);
181
+ }
182
+ }
183
+ }
184
+ sort() {
185
+ const loopPath = this.graph.loopPath();
186
+ if (loopPath) throw new Error("module has recursive deps: " + loopPath);
187
+ this.moduleConfigList = this.graph.sort().filter((t) => {
188
+ return t.val.moduleConfig.optional !== true || t.fromNodeMap.size > 0;
189
+ }).map((t) => t.val.moduleConfig);
190
+ }
191
+ };
192
+
193
+ //#endregion
194
+ export { AppGraph, ClazzMap, ModuleNode };
@@ -1,3 +1,7 @@
1
- import { LifecycleUtil } from '@eggjs/lifecycle';
2
- import type { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/tegg-types';
3
- export declare const EggPrototypeLifecycleUtil: LifecycleUtil<EggPrototypeLifecycleContext, EggPrototype>;
1
+ import { EggPrototype, EggPrototypeLifecycleContext } from "@eggjs/tegg-types";
2
+ import { LifecycleUtil } from "@eggjs/lifecycle";
3
+
4
+ //#region src/model/EggPrototype.d.ts
5
+ declare const EggPrototypeLifecycleUtil: LifecycleUtil<EggPrototypeLifecycleContext, EggPrototype>;
6
+ //#endregion
7
+ export { EggPrototypeLifecycleUtil };
@@ -1,3 +1,7 @@
1
- import { LifecycleUtil } from '@eggjs/lifecycle';
2
- export const EggPrototypeLifecycleUtil = new LifecycleUtil();
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL0VnZ1Byb3RvdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQThELElBQUksYUFBYSxFQUFFLENBQUMifQ==
1
+ import { LifecycleUtil } from "@eggjs/lifecycle";
2
+
3
+ //#region src/model/EggPrototype.ts
4
+ const EggPrototypeLifecycleUtil = new LifecycleUtil();
5
+
6
+ //#endregion
7
+ export { EggPrototypeLifecycleUtil };
@@ -1,3 +1,7 @@
1
- import { LifecycleUtil } from '@eggjs/lifecycle';
2
- import type { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-types';
3
- export declare const LoadUnitLifecycleUtil: LifecycleUtil<LoadUnitLifecycleContext, LoadUnit>;
1
+ import { LoadUnit, LoadUnitLifecycleContext } from "@eggjs/tegg-types";
2
+ import { LifecycleUtil } from "@eggjs/lifecycle";
3
+
4
+ //#region src/model/LoadUnit.d.ts
5
+ declare const LoadUnitLifecycleUtil: LifecycleUtil<LoadUnitLifecycleContext, LoadUnit>;
6
+ //#endregion
7
+ export { LoadUnitLifecycleUtil };
@@ -1,3 +1,7 @@
1
- import { LifecycleUtil } from '@eggjs/lifecycle';
2
- export const LoadUnitLifecycleUtil = new LifecycleUtil();
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvTG9hZFVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFzRCxJQUFJLGFBQWEsRUFBRSxDQUFDIn0=
1
+ import { LifecycleUtil } from "@eggjs/lifecycle";
2
+
3
+ //#region src/model/LoadUnit.ts
4
+ const LoadUnitLifecycleUtil = new LifecycleUtil();
5
+
6
+ //#endregion
7
+ export { LoadUnitLifecycleUtil };