@eggjs/tegg-metadata 4.0.0-beta.1 → 4.0.0-beta.11

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 (91) hide show
  1. package/README.md +12 -0
  2. package/dist/errors.js +27 -0
  3. package/{src → dist}/factory/EggPrototypeCreatorFactory.d.ts +1 -1
  4. package/dist/factory/EggPrototypeCreatorFactory.js +108 -0
  5. package/dist/factory/EggPrototypeFactory.js +52 -0
  6. package/dist/factory/LoadUnitFactory.js +59 -0
  7. package/dist/factory/index.d.ts +3 -0
  8. package/dist/factory/index.js +4 -0
  9. package/dist/impl/EggPrototypeBuilder.js +124 -0
  10. package/{src → dist}/impl/EggPrototypeImpl.d.ts +1 -1
  11. package/dist/impl/EggPrototypeImpl.js +53 -0
  12. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +18 -0
  13. package/{src → dist}/impl/ModuleLoadUnit.d.ts +1 -1
  14. package/dist/impl/ModuleLoadUnit.js +268 -0
  15. package/dist/impl/index.d.ts +4 -0
  16. package/dist/impl/index.js +5 -0
  17. package/dist/index.d.ts +6 -0
  18. package/dist/index.js +7 -0
  19. package/dist/model/AppGraph.js +264 -0
  20. package/{src → dist}/model/EggPrototype.js +1 -1
  21. package/{src → dist}/model/LoadUnit.js +1 -1
  22. package/{src → dist}/model/ModuleDescriptor.d.ts +1 -1
  23. package/dist/model/ModuleDescriptor.js +39 -0
  24. package/{src → dist}/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +1 -1
  25. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +31 -0
  26. package/{src → dist}/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +2 -2
  27. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +30 -0
  28. package/dist/model/ProtoDescriptor/index.d.ts +2 -0
  29. package/dist/model/ProtoDescriptor/index.js +3 -0
  30. package/{src → dist}/model/ProtoDescriptorHelper.d.ts +2 -2
  31. package/dist/model/ProtoDescriptorHelper.js +130 -0
  32. package/{src → dist}/model/graph/GlobalGraph.d.ts +6 -6
  33. package/dist/model/graph/GlobalGraph.js +233 -0
  34. package/{src → dist}/model/graph/GlobalModuleNode.d.ts +3 -3
  35. package/dist/model/graph/GlobalModuleNode.js +39 -0
  36. package/{src → dist}/model/graph/GlobalModuleNodeBuilder.d.ts +2 -2
  37. package/dist/model/graph/GlobalModuleNodeBuilder.js +54 -0
  38. package/{src → dist}/model/graph/ProtoNode.d.ts +3 -3
  39. package/dist/model/graph/ProtoNode.js +40 -0
  40. package/{src → dist}/model/graph/ProtoSelector.d.ts +1 -1
  41. package/dist/model/graph/ProtoSelector.js +2 -0
  42. package/dist/model/graph/index.d.ts +5 -0
  43. package/dist/model/graph/index.js +6 -0
  44. package/dist/model/index.d.ts +7 -0
  45. package/dist/model/index.js +8 -0
  46. package/dist/util/ClassUtil.js +17 -0
  47. package/dist/util/index.d.ts +1 -0
  48. package/dist/util/index.js +2 -0
  49. package/package.json +26 -26
  50. package/src/errors.js +0 -27
  51. package/src/factory/EggPrototypeCreatorFactory.js +0 -103
  52. package/src/factory/EggPrototypeFactory.js +0 -52
  53. package/src/factory/LoadUnitFactory.js +0 -59
  54. package/src/factory/index.d.ts +0 -3
  55. package/src/factory/index.js +0 -4
  56. package/src/impl/EggPrototypeBuilder.js +0 -124
  57. package/src/impl/EggPrototypeImpl.js +0 -53
  58. package/src/impl/LoadUnitMultiInstanceProtoHook.js +0 -18
  59. package/src/impl/ModuleLoadUnit.js +0 -268
  60. package/src/impl/index.d.ts +0 -4
  61. package/src/impl/index.js +0 -5
  62. package/src/index.d.ts +0 -6
  63. package/src/index.js +0 -7
  64. package/src/model/AppGraph.js +0 -264
  65. package/src/model/ModuleDescriptor.js +0 -38
  66. package/src/model/ProtoDescriptor/AbstractProtoDescriptor.js +0 -30
  67. package/src/model/ProtoDescriptor/ClassProtoDescriptor.js +0 -30
  68. package/src/model/ProtoDescriptor/index.d.ts +0 -2
  69. package/src/model/ProtoDescriptor/index.js +0 -3
  70. package/src/model/ProtoDescriptorHelper.js +0 -129
  71. package/src/model/graph/GlobalGraph.js +0 -233
  72. package/src/model/graph/GlobalModuleNode.js +0 -38
  73. package/src/model/graph/GlobalModuleNodeBuilder.js +0 -53
  74. package/src/model/graph/ProtoNode.js +0 -37
  75. package/src/model/graph/ProtoSelector.js +0 -2
  76. package/src/model/graph/index.d.ts +0 -5
  77. package/src/model/graph/index.js +0 -6
  78. package/src/model/index.d.ts +0 -7
  79. package/src/model/index.js +0 -8
  80. package/src/util/ClassUtil.js +0 -17
  81. package/src/util/index.d.ts +0 -1
  82. package/src/util/index.js +0 -2
  83. /package/{src → dist}/errors.d.ts +0 -0
  84. /package/{src → dist}/factory/EggPrototypeFactory.d.ts +0 -0
  85. /package/{src → dist}/factory/LoadUnitFactory.d.ts +0 -0
  86. /package/{src → dist}/impl/EggPrototypeBuilder.d.ts +0 -0
  87. /package/{src → dist}/impl/LoadUnitMultiInstanceProtoHook.d.ts +0 -0
  88. /package/{src → dist}/model/AppGraph.d.ts +0 -0
  89. /package/{src → dist}/model/EggPrototype.d.ts +0 -0
  90. /package/{src → dist}/model/LoadUnit.d.ts +0 -0
  91. /package/{src → dist}/util/ClassUtil.d.ts +0 -0
@@ -0,0 +1,268 @@
1
+ import assert from 'node:assert';
2
+ import path from 'node:path';
3
+ import { readFileSync } from 'node:fs';
4
+ import { debuglog } from 'node:util';
5
+ import { EggLoadUnitType, InitTypeQualifierAttribute, } from '@eggjs/tegg-types';
6
+ import { Graph, GraphNode, MapUtil } from '@eggjs/tegg-common-util';
7
+ import { IdenticalUtil, LifecycleUtil } from '@eggjs/tegg-lifecycle';
8
+ import { FrameworkErrorFormater } from 'egg-errors';
9
+ import { PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
10
+ import { EggPrototypeFactory, LoadUnitFactory, EggPrototypeCreatorFactory } from "../factory/index.js";
11
+ import { ClassProtoDescriptor, GlobalGraph } from "../model/index.js";
12
+ import { MultiPrototypeFound } from "../errors.js";
13
+ const debug = debuglog('tegg/core/metadata/impl/ModuleLoadUnit');
14
+ let id = 0;
15
+ // TODO del ModuleGraph in next major version
16
+ class ProtoNode {
17
+ clazz;
18
+ name;
19
+ id;
20
+ qualifiers;
21
+ initType;
22
+ PrototypeUtil;
23
+ constructor(clazz, objName, initType, qualifiers) {
24
+ this.name = objName;
25
+ this.id = '' + (id++);
26
+ this.clazz = clazz;
27
+ this.qualifiers = qualifiers;
28
+ this.initType = initType;
29
+ }
30
+ verifyQualifiers(qualifiers) {
31
+ for (const qualifier of qualifiers) {
32
+ if (!this.verifyQualifier(qualifier)) {
33
+ return false;
34
+ }
35
+ }
36
+ return true;
37
+ }
38
+ verifyQualifier(qualifier) {
39
+ const selfQualifiers = this.qualifiers.find(t => t.attribute === qualifier.attribute);
40
+ return selfQualifiers?.value === qualifier.value;
41
+ }
42
+ toString() {
43
+ return `${this.clazz.name}@${this.PrototypeUtil.getFilePath(this.clazz)}`;
44
+ }
45
+ }
46
+ export class ModuleGraph {
47
+ graph;
48
+ clazzList;
49
+ unitPath;
50
+ name;
51
+ constructor(clazzList, unitPath, name) {
52
+ this.clazzList = clazzList;
53
+ this.graph = new Graph();
54
+ this.unitPath = unitPath;
55
+ this.name = name;
56
+ debug('ModuleGraph constructor on moduleName: %o, unitPath: %o, clazzList size: %o', this.name, this.unitPath, this.clazzList.length);
57
+ }
58
+ findInjectNode(objName, qualifiers, parentInitTye) {
59
+ let nodes = Array.from(this.graph.nodes.values())
60
+ .filter(t => t.val.name === objName)
61
+ .filter(t => t.val.verifyQualifiers(qualifiers));
62
+ if (nodes.length === 0) {
63
+ return undefined;
64
+ }
65
+ if (nodes.length === 1) {
66
+ return nodes[0];
67
+ }
68
+ const initTypeQualifier = {
69
+ attribute: InitTypeQualifierAttribute,
70
+ value: parentInitTye,
71
+ };
72
+ nodes = nodes.filter(t => t.val.verifyQualifiers([initTypeQualifier]));
73
+ if (nodes.length === 1) {
74
+ return nodes[0];
75
+ }
76
+ const temp = new Map();
77
+ for (const node of nodes) {
78
+ temp.set(node.val.clazz, node);
79
+ }
80
+ nodes = Array.from(temp.values());
81
+ if (nodes.length === 1) {
82
+ return nodes[0];
83
+ }
84
+ const result = nodes.map(node => node.val.toString());
85
+ throw FrameworkErrorFormater.formatError(new MultiPrototypeFound(String(objName), qualifiers, JSON.stringify(result)));
86
+ }
87
+ async build() {
88
+ const protoGraphNodes = [];
89
+ for (const clazz of this.clazzList) {
90
+ if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
91
+ const properties = await PrototypeUtil.getMultiInstanceProperty(clazz, {
92
+ unitPath: this.unitPath,
93
+ moduleName: this.name,
94
+ });
95
+ if (properties) {
96
+ const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
97
+ for (const obj of properties.objects || []) {
98
+ const instanceQualifiers = [
99
+ ...qualifiers,
100
+ ...obj.qualifiers,
101
+ ];
102
+ protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, obj.name, properties.initType, instanceQualifiers)));
103
+ }
104
+ }
105
+ }
106
+ else {
107
+ const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
108
+ const property = PrototypeUtil.getProperty(clazz);
109
+ if (property) {
110
+ protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, property.name, property.initType, qualifiers)));
111
+ }
112
+ }
113
+ }
114
+ for (const node of protoGraphNodes) {
115
+ if (!this.graph.addVertex(node)) {
116
+ throw new Error(`duplicate proto: ${node.val.id}`);
117
+ }
118
+ }
119
+ for (const node of protoGraphNodes) {
120
+ if (PrototypeUtil.isEggMultiInstancePrototype(node.val.clazz)) {
121
+ const property = await PrototypeUtil.getMultiInstanceProperty(node.val.clazz, {
122
+ moduleName: this.name,
123
+ unitPath: this.unitPath,
124
+ });
125
+ for (const objectInfo of property?.objects || []) {
126
+ const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
127
+ for (const injectObject of injectObjects) {
128
+ const qualifiers = [
129
+ ...QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName),
130
+ ...objectInfo.properQualifiers?.[injectObject.refName] ?? [],
131
+ ];
132
+ const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
133
+ // If not found maybe in other module
134
+ if (injectNode) {
135
+ this.graph.addEdge(node, injectNode);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ else {
141
+ const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
142
+ for (const injectObject of injectObjects) {
143
+ const qualifiers = QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName);
144
+ const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
145
+ // If not found maybe in other module
146
+ if (injectNode) {
147
+ this.graph.addEdge(node, injectNode);
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ sort() {
154
+ const loopPath = this.graph.loopPath();
155
+ if (loopPath) {
156
+ throw new Error('proto has recursive deps: ' + loopPath);
157
+ }
158
+ const clazzSet = new Set();
159
+ for (const clazz of this.graph.sort()) {
160
+ clazzSet.add(clazz.val.clazz);
161
+ }
162
+ this.clazzList = Array.from(clazzSet);
163
+ }
164
+ }
165
+ export class ModuleLoadUnit {
166
+ // private loader: Loader;
167
+ protoMap = new Map();
168
+ protos;
169
+ clazzList;
170
+ id;
171
+ name;
172
+ unitPath;
173
+ type = EggLoadUnitType.MODULE;
174
+ get globalGraph() {
175
+ return GlobalGraph.instance;
176
+ }
177
+ constructor(name, unitPath) {
178
+ this.id = IdenticalUtil.createLoadUnitId(name);
179
+ this.name = name;
180
+ this.unitPath = unitPath;
181
+ debug('ModuleLoadUnit constructor on moduleName: %o, unitPath: %o, id: %o', this.name, this.unitPath, this.id);
182
+ }
183
+ doLoadClazz() {
184
+ const protos = this.globalGraph.moduleProtoDescriptorMap.get(this.name);
185
+ if (protos) {
186
+ // TODO ModuleLoadUnit should support all proto descriptor
187
+ this.protos = protos.filter(t => ClassProtoDescriptor.isClassProtoDescriptor(t));
188
+ this.clazzList = this.protos.map(t => t.clazz);
189
+ }
190
+ else {
191
+ this.protos = [];
192
+ this.clazzList = [];
193
+ }
194
+ debug('doLoadClazz on moduleName: %o, protos size: %o, clazzList size: %o', this.name, this.protos.length, this.clazzList.length);
195
+ }
196
+ loadClazz() {
197
+ if (!this.clazzList) {
198
+ this.doLoadClazz();
199
+ }
200
+ }
201
+ async preLoad() {
202
+ this.loadClazz();
203
+ for (const protoClass of this.clazzList) {
204
+ // TODO refactor lifecycle hook to ProtoDescriptor or EggPrototype
205
+ // ModuleLoadUnit should not use clazz list
206
+ const fnName = LifecycleUtil.getStaticLifecycleHook('preLoad', protoClass);
207
+ if (fnName) {
208
+ const lifecycleHook = Reflect.get(protoClass, fnName);
209
+ if (typeof lifecycleHook === 'function') {
210
+ await lifecycleHook();
211
+ }
212
+ // TODO(@fengmk2): lifecycleHook is not a function should throw error
213
+ }
214
+ }
215
+ }
216
+ async init() {
217
+ this.loadClazz();
218
+ for (const protoDescriptor of this.protos) {
219
+ const proto = await EggPrototypeCreatorFactory.createProtoByDescriptor(protoDescriptor, this);
220
+ EggPrototypeFactory.instance.registerPrototype(proto, this);
221
+ }
222
+ }
223
+ containPrototype(proto) {
224
+ return !!(this.protoMap.get(proto.name)?.find(t => t === proto));
225
+ }
226
+ getEggPrototype(name, qualifiers) {
227
+ const protos = this.protoMap.get(name);
228
+ return protos?.filter(proto => proto.verifyQualifiers(qualifiers)) || [];
229
+ }
230
+ registerEggPrototype(proto) {
231
+ const protoList = MapUtil.getOrStore(this.protoMap, proto.name, []);
232
+ protoList.push(proto);
233
+ }
234
+ deletePrototype(proto) {
235
+ const protos = this.protoMap.get(proto.name);
236
+ if (protos) {
237
+ const index = protos.indexOf(proto);
238
+ if (index !== -1) {
239
+ protos.splice(index, 1);
240
+ }
241
+ }
242
+ }
243
+ async destroy() {
244
+ for (const namedProtoMap of this.protoMap.values()) {
245
+ for (const proto of namedProtoMap.slice()) {
246
+ EggPrototypeFactory.instance.deletePrototype(proto, this);
247
+ }
248
+ }
249
+ this.protoMap.clear();
250
+ }
251
+ iterateEggPrototype() {
252
+ const protos = Array.from(this.protoMap.values())
253
+ .reduce((p, c) => {
254
+ p = p.concat(c);
255
+ return p;
256
+ }, []);
257
+ return protos.values();
258
+ }
259
+ static createModule(ctx) {
260
+ const pkgPath = path.join(ctx.unitPath, 'package.json');
261
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
262
+ assert(pkg.eggModule, `module config not found in package ${pkgPath}`);
263
+ const { name } = pkg.eggModule;
264
+ return new ModuleLoadUnit(name, ctx.unitPath);
265
+ }
266
+ }
267
+ LoadUnitFactory.registerLoadUnitCreator(EggLoadUnitType.MODULE, ModuleLoadUnit.createModule);
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kdWxlTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9Nb2R1bGVMb2FkVW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLDBCQUEwQixHQUUzQixNQUFNLG1CQUFtQixDQUFDO0FBUzNCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFFakUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRVgsNkNBQTZDO0FBQzdDLE1BQU0sU0FBUztJQUNKLEtBQUssQ0FBb0I7SUFDekIsSUFBSSxDQUFtQjtJQUN2QixFQUFFLENBQVM7SUFDWCxVQUFVLENBQWtCO0lBQzVCLFFBQVEsQ0FBcUI7SUFDOUIsYUFB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
@@ -0,0 +1,4 @@
1
+ export * from './EggPrototypeBuilder.ts';
2
+ export * from './EggPrototypeImpl.ts';
3
+ export * from './LoadUnitMultiInstanceProtoHook.ts';
4
+ export * from './ModuleLoadUnit.ts';
@@ -0,0 +1,5 @@
1
+ export * from "./EggPrototypeBuilder.js";
2
+ export * from "./EggPrototypeImpl.js";
3
+ export * from "./LoadUnitMultiInstanceProtoHook.js";
4
+ export * from "./ModuleLoadUnit.js";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFCQUFxQixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ export * from '@eggjs/tegg-types/metadata';
2
+ export * from './factory/index.ts';
3
+ export * from './model/index.ts';
4
+ export * from './errors.ts';
5
+ export * from './util/index.ts';
6
+ export * from './impl/index.ts';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from '@eggjs/tegg-types/metadata';
2
+ export * from "./factory/index.js";
3
+ export * from "./model/index.js";
4
+ export * from "./errors.js";
5
+ export * from "./util/index.js";
6
+ export * from "./impl/index.js";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDIn0=
@@ -0,0 +1,264 @@
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';
6
+ function verifyQualifier(clazzQualifiers, qualifier) {
7
+ const selfQualifiers = clazzQualifiers.find(t => t.attribute === qualifier.attribute);
8
+ return selfQualifiers?.value === qualifier.value;
9
+ }
10
+ function verifyQualifiers(clazzQualifiers, qualifiers) {
11
+ for (const qualifier of qualifiers) {
12
+ if (!verifyQualifier(clazzQualifiers, qualifier)) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
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 = [
44
+ ...qualifiers,
45
+ ...info.qualifiers,
46
+ ];
47
+ clazzMap[info.name] = clazzMap[info.name] || [];
48
+ clazzMap[info.name].push({
49
+ name: info.name,
50
+ accessLevel: await PrototypeUtil.getAccessLevel(clazz, {
51
+ unitPath: instanceNode.val.moduleConfig.path,
52
+ moduleName: instanceNode.val.moduleConfig.name,
53
+ }),
54
+ qualifiers: instanceQualifiers,
55
+ properQualifiers: info.properQualifiers || {},
56
+ instanceModule: instanceNode,
57
+ ownerModule: ownerNode,
58
+ });
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ const property = PrototypeUtil.getProperty(clazz);
64
+ assert(property, `property not found for ${clazz.name}`);
65
+ clazzMap[property.name] = clazzMap[property.name] || [];
66
+ clazzMap[property.name].push({
67
+ name: property.name,
68
+ accessLevel: await PrototypeUtil.getAccessLevel(clazz, {
69
+ unitPath: ownerNode.val.moduleConfig.path,
70
+ moduleName: ownerNode.val.moduleConfig.name,
71
+ }),
72
+ qualifiers,
73
+ properQualifiers: {},
74
+ ownerModule: ownerNode,
75
+ instanceModule: ownerNode,
76
+ });
77
+ }
78
+ }
79
+ }
80
+ this.clazzMap = clazzMap;
81
+ }
82
+ findDependencyModule(objName, properQualifiers, intoModule) {
83
+ const result = new Set();
84
+ const objInfo = this.clazzMap[objName];
85
+ if (!objInfo) {
86
+ return [];
87
+ }
88
+ let mayObjs = objInfo.filter(obj => {
89
+ // 1. check accessLevel
90
+ if (obj.instanceModule !== intoModule && obj.accessLevel === AccessLevel.PRIVATE) {
91
+ return false;
92
+ }
93
+ // 2. check qualifier
94
+ return verifyQualifiers(obj.qualifiers, properQualifiers);
95
+ });
96
+ // 3. auto set init type qualifier
97
+ if (mayObjs.length > 1) {
98
+ const initTypeQualifiers = INIT_TYPE_TRY_ORDER.map(type => ({
99
+ attribute: InitTypeQualifierAttribute,
100
+ value: type,
101
+ }));
102
+ for (const initTypeQualifier of initTypeQualifiers) {
103
+ const mayInitTypeObjs = mayObjs.filter(obj => {
104
+ return verifyQualifiers(obj.qualifiers, [
105
+ ...properQualifiers,
106
+ initTypeQualifier,
107
+ ]);
108
+ });
109
+ if (mayInitTypeObjs.length > 0) {
110
+ mayObjs = mayInitTypeObjs;
111
+ }
112
+ }
113
+ }
114
+ // 4. auto set load unit name qualifier
115
+ if (mayObjs.length > 1) {
116
+ const moduleNameQualifiers = {
117
+ attribute: LoadUnitNameQualifierAttribute,
118
+ value: intoModule.val.name,
119
+ };
120
+ const mayLoadUnitNameObjs = mayObjs.filter(obj => {
121
+ return verifyQualifiers(obj.qualifiers, [
122
+ ...properQualifiers,
123
+ moduleNameQualifiers,
124
+ ]);
125
+ });
126
+ if (mayLoadUnitNameObjs.length > 0) {
127
+ mayObjs = mayLoadUnitNameObjs;
128
+ }
129
+ }
130
+ if (mayObjs.length > 1) {
131
+ const message = util.format('multi class found for %s@%o in module %j', objName, properQualifiers, mayObjs.map(t => {
132
+ return t.instanceModule.val.moduleConfig.path;
133
+ }));
134
+ throw new Error(message);
135
+ }
136
+ for (const obj of mayObjs) {
137
+ result.add(obj.instanceModule);
138
+ // result.add(obj.ownerModule);
139
+ }
140
+ return Array.from(result);
141
+ }
142
+ }
143
+ export class ModuleNode {
144
+ id;
145
+ name;
146
+ moduleConfig;
147
+ clazzList;
148
+ constructor(moduleConfig) {
149
+ this.moduleConfig = moduleConfig;
150
+ this.id = moduleConfig.path;
151
+ this.name = ModuleConfigUtil.readModuleNameSync(moduleConfig.path);
152
+ this.clazzList = [];
153
+ }
154
+ async addClazz(clazz) {
155
+ if (!this.clazzList.includes(clazz)) {
156
+ this.clazzList.push(clazz);
157
+ }
158
+ if (!PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
159
+ const initTypeQualifierAttributeValue = await PrototypeUtil.getInitType(clazz, {
160
+ unitPath: this.moduleConfig.path,
161
+ moduleName: this.moduleConfig.name,
162
+ });
163
+ const defaultQualifier = [{
164
+ attribute: InitTypeQualifierAttribute,
165
+ value: initTypeQualifierAttributeValue,
166
+ }, {
167
+ attribute: LoadUnitNameQualifierAttribute,
168
+ value: this.name,
169
+ }];
170
+ for (const qualifier of defaultQualifier) {
171
+ QualifierUtil.addProtoQualifier(clazz, qualifier.attribute, qualifier.value);
172
+ }
173
+ }
174
+ }
175
+ toString() {
176
+ return `${this.name}@${this.moduleConfig.path}`;
177
+ }
178
+ getClazzList() {
179
+ return this.clazzList;
180
+ }
181
+ }
182
+ export class AppGraph {
183
+ graph;
184
+ clazzMap;
185
+ moduleConfigList;
186
+ constructor() {
187
+ this.graph = new Graph();
188
+ }
189
+ addNode(moduleNode) {
190
+ if (!this.graph.addVertex(new GraphNode(moduleNode))) {
191
+ throw new Error(`duplicate module: ${moduleNode}`);
192
+ }
193
+ }
194
+ getClazzList() {
195
+ const clazzSet = new Set();
196
+ for (const node of this.graph.nodes.values()) {
197
+ for (const clazz of node.val.getClazzList()) {
198
+ clazzSet.add(clazz);
199
+ }
200
+ }
201
+ return Array.from(clazzSet);
202
+ }
203
+ async build() {
204
+ this.clazzMap = new ClazzMap(this.graph);
205
+ await this.clazzMap.build();
206
+ // 1. iterate all modules
207
+ for (const node of this.graph.nodes.values()) {
208
+ // 2. iterate all class
209
+ for (const clazz of node.val.getClazzList()) {
210
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz);
211
+ // 3. iterate all inject objects
212
+ for (const injectObject of injectObjects) {
213
+ if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
214
+ for (const instanceNode of this.graph.nodes.values()) {
215
+ const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
216
+ unitPath: instanceNode.val.moduleConfig.path,
217
+ moduleName: instanceNode.val.moduleConfig.name,
218
+ });
219
+ for (const info of property?.objects || []) {
220
+ const properQualifiers = [
221
+ ...QualifierUtil.getProperQualifiers(clazz, injectObject.refName),
222
+ ...info.properQualifiers?.[injectObject.refName] ?? [],
223
+ ];
224
+ // 4. find dependency module
225
+ const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
226
+ for (const moduleNode of dependencyModules) {
227
+ // 5. add edge
228
+ if (instanceNode !== moduleNode) {
229
+ this.graph.addEdge(instanceNode, moduleNode);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ else {
236
+ const properQualifiers = [
237
+ ...QualifierUtil.getProperQualifiers(clazz, injectObject.refName),
238
+ ];
239
+ // 4. find dependency module
240
+ const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
241
+ for (const moduleNode of dependencyModules) {
242
+ // 5. add edge
243
+ if (node !== moduleNode) {
244
+ this.graph.addEdge(node, moduleNode);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ sort() {
253
+ const loopPath = this.graph.loopPath();
254
+ if (loopPath) {
255
+ throw new Error('module has recursive deps: ' + loopPath);
256
+ }
257
+ this.moduleConfigList = this.graph.sort()
258
+ .filter(t => {
259
+ return t.val.moduleConfig.optional !== true || t.fromNodeMap.size > 0;
260
+ })
261
+ .map(t => t.val.moduleConfig);
262
+ }
263
+ }
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvQXBwR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBY2pJLFNBQVMsZUFBZSxDQUFDLGVBQWdDLEVBQUUsU0FBd0I7SUFDakYsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sY0FBYyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLGVBQWdDLEVBQUUsVUFBMkI7SUFDckYsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLE9BQU8sUUFBUTtJQUNYLFFBQVEsQ0FBZTtJQUN2QixLQUFLLENBQW9CO0lBRWpDLFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FB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
@@ -1,3 +1,3 @@
1
1
  import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
2
  export const EggPrototypeLifecycleUtil = new LifecycleUtil();
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRWdnUHJvdG90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd0RCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGFBQWEsRUFBOEMsQ0FBQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL0VnZ1Byb3RvdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdEQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxhQUFhLEVBQThDLENBQUMifQ==
@@ -1,3 +1,3 @@
1
1
  import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
2
  export const LoadUnitLifecycleUtil = new LifecycleUtil();
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2FkVW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxhQUFhLEVBQXNDLENBQUMifQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvTG9hZFVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksYUFBYSxFQUFzQyxDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import { EggProtoImplClass, ProtoDescriptor } from '@eggjs/tegg-types';
1
+ import { type EggProtoImplClass, type ProtoDescriptor } from '@eggjs/tegg-types';
2
2
  export interface ModuleDescriptor {
3
3
  name: string;
4
4
  unitPath: string;