@eggjs/tegg-metadata 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 (57) hide show
  1. package/dist/errors.d.ts +14 -0
  2. package/dist/errors.js +27 -0
  3. package/dist/factory/EggPrototypeCreatorFactory.d.ts +9 -0
  4. package/dist/factory/EggPrototypeCreatorFactory.js +108 -0
  5. package/dist/factory/EggPrototypeFactory.d.ts +9 -0
  6. package/dist/factory/EggPrototypeFactory.js +52 -0
  7. package/dist/factory/LoadUnitFactory.d.ts +12 -0
  8. package/dist/factory/LoadUnitFactory.js +59 -0
  9. package/dist/factory/index.d.ts +3 -0
  10. package/dist/factory/index.js +4 -0
  11. package/dist/impl/EggPrototypeBuilder.d.ts +22 -0
  12. package/dist/impl/EggPrototypeBuilder.js +124 -0
  13. package/dist/impl/EggPrototypeImpl.d.ts +24 -0
  14. package/dist/impl/EggPrototypeImpl.js +53 -0
  15. package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +7 -0
  16. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +18 -0
  17. package/dist/impl/ModuleLoadUnit.d.ts +35 -0
  18. package/dist/impl/ModuleLoadUnit.js +268 -0
  19. package/dist/impl/index.d.ts +4 -0
  20. package/dist/impl/index.js +5 -0
  21. package/dist/index.d.ts +6 -407
  22. package/dist/index.js +7 -1260
  23. package/dist/model/AppGraph.d.ts +39 -0
  24. package/dist/model/AppGraph.js +264 -0
  25. package/dist/model/EggPrototype.d.ts +3 -0
  26. package/dist/model/EggPrototype.js +3 -0
  27. package/dist/model/LoadUnit.d.ts +3 -0
  28. package/dist/model/LoadUnit.js +3 -0
  29. package/dist/model/ModuleDescriptor.d.ts +18 -0
  30. package/dist/model/ModuleDescriptor.js +39 -0
  31. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +32 -0
  32. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +31 -0
  33. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +12 -0
  34. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +30 -0
  35. package/dist/model/ProtoDescriptor/index.d.ts +2 -0
  36. package/dist/model/ProtoDescriptor/index.js +3 -0
  37. package/dist/model/ProtoDescriptorHelper.d.ts +26 -0
  38. package/dist/model/ProtoDescriptorHelper.js +130 -0
  39. package/dist/model/graph/GlobalGraph.d.ts +63 -0
  40. package/dist/model/graph/GlobalGraph.js +233 -0
  41. package/dist/model/graph/GlobalModuleNode.d.ts +25 -0
  42. package/dist/model/graph/GlobalModuleNode.js +39 -0
  43. package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +13 -0
  44. package/dist/model/graph/GlobalModuleNodeBuilder.js +54 -0
  45. package/dist/model/graph/ProtoNode.d.ts +19 -0
  46. package/dist/model/graph/ProtoNode.js +40 -0
  47. package/dist/model/graph/ProtoSelector.d.ts +6 -0
  48. package/dist/model/graph/ProtoSelector.js +2 -0
  49. package/dist/model/graph/index.d.ts +5 -0
  50. package/dist/model/graph/index.js +6 -0
  51. package/dist/model/index.d.ts +7 -0
  52. package/dist/model/index.js +8 -0
  53. package/dist/util/ClassUtil.d.ts +5 -0
  54. package/dist/util/ClassUtil.js +17 -0
  55. package/dist/util/index.d.ts +1 -0
  56. package/dist/util/index.js +2 -0
  57. package/package.json +6 -6
@@ -0,0 +1,39 @@
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>;
11
+ }
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>[];
19
+ }
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[];
29
+ }
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;
39
+ }
@@ -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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
@@ -0,0 +1,3 @@
1
+ import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
+ import type { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/tegg-types';
3
+ export declare const EggPrototypeLifecycleUtil: LifecycleUtil<EggPrototypeLifecycleContext, EggPrototype>;
@@ -0,0 +1,3 @@
1
+ import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
+ export const EggPrototypeLifecycleUtil = new LifecycleUtil();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL0VnZ1Byb3RvdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdEQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxhQUFhLEVBQThDLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
+ import type { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-types';
3
+ export declare const LoadUnitLifecycleUtil: LifecycleUtil<LoadUnitLifecycleContext, LoadUnit>;
@@ -0,0 +1,3 @@
1
+ import { LifecycleUtil } from '@eggjs/tegg-lifecycle';
2
+ export const LoadUnitLifecycleUtil = new LifecycleUtil();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvTG9hZFVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksYUFBYSxFQUFzQyxDQUFDIn0=
@@ -0,0 +1,18 @@
1
+ import { type EggProtoImplClass, type ProtoDescriptor } from '@eggjs/tegg-types';
2
+ export interface ModuleDescriptor {
3
+ name: string;
4
+ unitPath: string;
5
+ optional?: boolean;
6
+ clazzList: EggProtoImplClass[];
7
+ multiInstanceClazzList: EggProtoImplClass[];
8
+ protos: ProtoDescriptor[];
9
+ }
10
+ export interface ModuleDumpOptions {
11
+ dumpDir?: string;
12
+ }
13
+ export declare class ModuleDescriptorDumper {
14
+ static stringifyDescriptor(moduleDescriptor: ModuleDescriptor): string;
15
+ static stringifyClazz(clazz: EggProtoImplClass, moduleDescriptor: ModuleDescriptor): string;
16
+ static dumpPath(desc: ModuleDescriptor, options?: ModuleDumpOptions): string;
17
+ static dump(desc: ModuleDescriptor, options?: ModuleDumpOptions): Promise<void>;
18
+ }
@@ -0,0 +1,39 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import {} from '@eggjs/tegg-types';
4
+ import { PrototypeUtil } from '@eggjs/core-decorator';
5
+ const DUMP_PATH = process.env.MODULE_DUMP_PATH;
6
+ export class ModuleDescriptorDumper {
7
+ static stringifyDescriptor(moduleDescriptor) {
8
+ return '{'
9
+ + `"name": "${moduleDescriptor.name}",`
10
+ + `"unitPath": "${moduleDescriptor.unitPath}",`
11
+ + (typeof moduleDescriptor.optional !== 'undefined' ? `"optional": ${moduleDescriptor.optional},` : '')
12
+ + `"clazzList": [${moduleDescriptor.clazzList.map(t => {
13
+ return ModuleDescriptorDumper.stringifyClazz(t, moduleDescriptor);
14
+ }).join(',')}],`
15
+ + `"multiInstanceClazzList": [${moduleDescriptor.multiInstanceClazzList.map(t => {
16
+ return ModuleDescriptorDumper.stringifyClazz(t, moduleDescriptor);
17
+ }).join(',')}],`
18
+ + `"protos": [${moduleDescriptor.protos.map(t => {
19
+ return JSON.stringify(t);
20
+ }).join(',')}]`
21
+ + '}';
22
+ }
23
+ static stringifyClazz(clazz, moduleDescriptor) {
24
+ return '{'
25
+ + `"name": "${clazz.name}",`
26
+ + (PrototypeUtil.getFilePath(clazz) ? `"filePath": "${path.relative(moduleDescriptor.unitPath, PrototypeUtil.getFilePath(clazz))}"` : '')
27
+ + '}';
28
+ }
29
+ static dumpPath(desc, options) {
30
+ const dumpDir = DUMP_PATH ?? options?.dumpDir ?? desc.unitPath;
31
+ return path.join(dumpDir, '.egg', `${desc.name}_module_desc.json`);
32
+ }
33
+ static async dump(desc, options) {
34
+ const dumpPath = ModuleDescriptorDumper.dumpPath(desc, options);
35
+ await fs.mkdir(path.dirname(dumpPath), { recursive: true });
36
+ await fs.writeFile(dumpPath, ModuleDescriptorDumper.stringifyDescriptor(desc));
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kdWxlRGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9Nb2R1bGVEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsQyxPQUFPLEVBQWdELE1BQU0sbUJBQW1CLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFlL0MsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsZ0JBQWtDO1FBQzNELE9BQU8sR0FBRztjQUNOLFlBQVksZ0JBQWdCLENBQUMsSUFBSSxJQUFJO2NBQ3JDLGdCQUFnQixnQkFBZ0IsQ0FBQyxRQUFRLElBQUk7Y0FDN0MsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNyRyxpQkFBaUIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEQsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO2NBQ2QsOEJBQThCLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUUsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO2NBQ2QsY0FBYyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO2NBQ2IsR0FBRyxDQUFDO0lBQ1YsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBd0IsRUFBRSxnQkFBa0M7UUFDaEYsT0FBTyxHQUFHO2NBQ04sWUFBWSxLQUFLLENBQUMsSUFBSSxJQUFJO2NBQzFCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDeEksR0FBRyxDQUFDO0lBQ1YsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBc0IsRUFBRSxPQUEyQjtRQUNqRSxNQUFNLE9BQU8sR0FBRyxTQUFTLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBc0IsRUFBRSxPQUEyQjtRQUNuRSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,32 @@
1
+ import { AccessLevel, type InjectObjectDescriptor, type ObjectInitTypeLike, type ProtoDescriptor, type ProtoDescriptorTypeLike, type QualifierInfo } from '@eggjs/tegg-types';
2
+ export interface AbstractProtoDescriptorOptions {
3
+ name: PropertyKey;
4
+ accessLevel: AccessLevel;
5
+ initType: ObjectInitTypeLike;
6
+ qualifiers: QualifierInfo[];
7
+ protoImplType: string;
8
+ injectObjects: InjectObjectDescriptor[];
9
+ defineModuleName: string;
10
+ defineUnitPath: string;
11
+ instanceModuleName: string;
12
+ instanceDefineUnitPath: string;
13
+ type: ProtoDescriptorTypeLike;
14
+ properQualifiers: Record<PropertyKey, QualifierInfo[]>;
15
+ }
16
+ export declare abstract class AbstractProtoDescriptor implements ProtoDescriptor {
17
+ name: PropertyKey;
18
+ accessLevel: AccessLevel;
19
+ initType: ObjectInitTypeLike;
20
+ qualifiers: QualifierInfo[];
21
+ injectObjects: InjectObjectDescriptor[];
22
+ protoImplType: string;
23
+ defineModuleName: string;
24
+ defineUnitPath: string;
25
+ instanceModuleName: string;
26
+ instanceDefineUnitPath: string;
27
+ className?: string;
28
+ properQualifiers: Record<PropertyKey, QualifierInfo[]>;
29
+ type: ProtoDescriptorTypeLike;
30
+ protected constructor(options: AbstractProtoDescriptorOptions);
31
+ abstract equal(protoDescriptor: ProtoDescriptor): boolean;
32
+ }
@@ -0,0 +1,31 @@
1
+ import { AccessLevel, } from '@eggjs/tegg-types';
2
+ export class AbstractProtoDescriptor {
3
+ name;
4
+ accessLevel;
5
+ initType;
6
+ qualifiers;
7
+ injectObjects;
8
+ protoImplType;
9
+ defineModuleName;
10
+ defineUnitPath;
11
+ instanceModuleName;
12
+ instanceDefineUnitPath;
13
+ className;
14
+ properQualifiers;
15
+ type;
16
+ constructor(options) {
17
+ this.name = options.name;
18
+ this.accessLevel = options.accessLevel;
19
+ this.initType = options.initType;
20
+ this.qualifiers = options.qualifiers;
21
+ this.protoImplType = options.protoImplType;
22
+ this.injectObjects = options.injectObjects;
23
+ this.defineModuleName = options.defineModuleName;
24
+ this.defineUnitPath = options.defineUnitPath;
25
+ this.instanceModuleName = options.instanceModuleName;
26
+ this.instanceDefineUnitPath = options.instanceDefineUnitPath;
27
+ this.type = options.type;
28
+ this.properQualifiers = options.properQualifiers;
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQcm90b0Rlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvUHJvdG9EZXNjcmlwdG9yL0Fic3RyYWN0UHJvdG9EZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEdBTVosTUFBTSxtQkFBbUIsQ0FBQztBQWlCM0IsTUFBTSxPQUFnQix1QkFBdUI7SUFDM0MsSUFBSSxDQUFjO0lBQ2xCLFdBQVcsQ0FBYztJQUN6QixRQUFRLENBQXFCO0lBQzdCLFVBQVUsQ0FBa0I7SUFDNUIsYUFBYSxDQUEyQjtJQUN4QyxhQUFhLENBQVM7SUFDdEIsZ0JBQWdCLENBQVM7SUFDekIsY0FBYyxDQUFTO0lBQ3ZCLGtCQUFrQixDQUFTO0lBQzNCLHNCQUFzQixDQUFTO0lBQy9CLFNBQVMsQ0FBVTtJQUNuQixnQkFBZ0IsQ0FBdUM7SUFDdkQsSUFBSSxDQUEwQjtJQUU5QixZQUFzQixPQUF1QztRQUMzRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1FBQ3JELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDbkQsQ0FBQztDQUdGIn0=
@@ -0,0 +1,12 @@
1
+ import { type EggProtoImplClass, type ProtoDescriptor } from '@eggjs/tegg-types';
2
+ import { AbstractProtoDescriptor, type AbstractProtoDescriptorOptions } from './AbstractProtoDescriptor.ts';
3
+ export interface ClassProtoDescriptorOptions extends Omit<AbstractProtoDescriptorOptions, 'type'> {
4
+ clazz: EggProtoImplClass;
5
+ }
6
+ export declare class ClassProtoDescriptor extends AbstractProtoDescriptor {
7
+ clazz: EggProtoImplClass;
8
+ clazzName: string;
9
+ static isClassProtoDescriptor(descriptor: ProtoDescriptor): descriptor is ClassProtoDescriptor;
10
+ constructor(options: ClassProtoDescriptorOptions);
11
+ equal(protoDescriptor: ProtoDescriptor): boolean;
12
+ }
@@ -0,0 +1,30 @@
1
+ import { QualifierUtil } from '@eggjs/core-decorator';
2
+ import { ProtoDescriptorType } from '@eggjs/tegg-types';
3
+ import { AbstractProtoDescriptor } from "./AbstractProtoDescriptor.js";
4
+ export class ClassProtoDescriptor extends AbstractProtoDescriptor {
5
+ clazz;
6
+ clazzName;
7
+ static isClassProtoDescriptor(descriptor) {
8
+ return descriptor.type === ProtoDescriptorType.CLASS;
9
+ }
10
+ constructor(options) {
11
+ super({
12
+ type: ProtoDescriptorType.CLASS,
13
+ ...options,
14
+ });
15
+ this.clazz = options.clazz;
16
+ this.className = this.clazz.name;
17
+ }
18
+ equal(protoDescriptor) {
19
+ if (!ClassProtoDescriptor.isClassProtoDescriptor(protoDescriptor)) {
20
+ return false;
21
+ }
22
+ return this.clazz === protoDescriptor.clazz
23
+ && this.name === protoDescriptor.name
24
+ && this.accessLevel === protoDescriptor.accessLevel
25
+ && this.initType === protoDescriptor.initType
26
+ && this.instanceModuleName === protoDescriptor.instanceModuleName
27
+ && QualifierUtil.equalQualifiers(this.qualifiers, protoDescriptor.qualifiers);
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3NQcm90b0Rlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvUHJvdG9EZXNjcmlwdG9yL0NsYXNzUHJvdG9EZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdELG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEcsT0FBTyxFQUFFLHVCQUF1QixFQUF1QyxNQUFNLDhCQUE4QixDQUFDO0FBTTVHLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx1QkFBdUI7SUFDL0QsS0FBSyxDQUFvQjtJQUN6QixTQUFTLENBQVM7SUFFbEIsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQTJCO1FBQ3ZELE9BQVEsVUFBc0MsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxZQUFZLE9BQW9DO1FBQzlDLEtBQUssQ0FBQztZQUNKLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxLQUFLO1lBQy9CLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZ0M7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxLQUFLO2VBQ3RDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUk7ZUFDbEMsSUFBSSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsV0FBVztlQUNoRCxJQUFJLENBQUMsUUFBUSxLQUFLLGVBQWUsQ0FBQyxRQUFRO2VBQzFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxlQUFlLENBQUMsa0JBQWtCO2VBQzlELGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNGIn0=
@@ -0,0 +1,2 @@
1
+ export * from './AbstractProtoDescriptor.ts';
2
+ export * from './ClassProtoDescriptor.ts';
@@ -0,0 +1,3 @@
1
+ export * from "./AbstractProtoDescriptor.js";
2
+ export * from "./ClassProtoDescriptor.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvUHJvdG9EZXNjcmlwdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQyJ9
@@ -0,0 +1,26 @@
1
+ import { type EggProtoImplClass, type ObjectInitTypeLike, type ProtoDescriptor, type QualifierInfo, type MultiInstancePrototypeGetObjectsContext } from '@eggjs/tegg-types';
2
+ import { type ProtoSelectorContext } from './graph/index.ts';
3
+ export declare class ProtoDescriptorHelper {
4
+ #private;
5
+ static addDefaultQualifier(qualifiers: QualifierInfo[], initType: ObjectInitTypeLike, loadUnitName: string): QualifierInfo[];
6
+ static createByMultiInstanceClazz(clazz: EggProtoImplClass, options: {
7
+ defineModuleName: string;
8
+ defineUnitPath: string;
9
+ instanceModuleName: string;
10
+ instanceDefineUnitPath: string;
11
+ }): Promise<ProtoDescriptor[]>;
12
+ static createByDynamicMultiInstanceClazz(clazz: EggProtoImplClass, options: {
13
+ defineModuleName: string;
14
+ defineUnitPath: string;
15
+ instanceModuleName: string;
16
+ instanceDefineUnitPath: string;
17
+ }): Promise<ProtoDescriptor[]>;
18
+ static createByStaticMultiInstanceClazz(clazz: EggProtoImplClass, options: {
19
+ defineModuleName: string;
20
+ defineUnitPath: string;
21
+ instanceModuleName: string;
22
+ instanceDefineUnitPath: string;
23
+ }): ProtoDescriptor[];
24
+ static createByInstanceClazz(clazz: EggProtoImplClass, ctx: MultiInstancePrototypeGetObjectsContext): ProtoDescriptor;
25
+ static selectProto(proto: ProtoDescriptor, ctx: ProtoSelectorContext): boolean;
26
+ }