@eggjs/metadata 4.0.0-beta.0

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/errors.d.ts +14 -0
  4. package/dist/errors.js +27 -0
  5. package/dist/factory/EggPrototypeCreatorFactory.d.ts +9 -0
  6. package/dist/factory/EggPrototypeCreatorFactory.js +111 -0
  7. package/dist/factory/EggPrototypeFactory.d.ts +9 -0
  8. package/dist/factory/EggPrototypeFactory.js +52 -0
  9. package/dist/factory/LoadUnitFactory.d.ts +12 -0
  10. package/dist/factory/LoadUnitFactory.js +59 -0
  11. package/dist/factory/index.d.ts +3 -0
  12. package/dist/factory/index.js +4 -0
  13. package/dist/impl/EggPrototypeBuilder.d.ts +22 -0
  14. package/dist/impl/EggPrototypeBuilder.js +129 -0
  15. package/dist/impl/EggPrototypeImpl.d.ts +24 -0
  16. package/dist/impl/EggPrototypeImpl.js +53 -0
  17. package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +7 -0
  18. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +18 -0
  19. package/dist/impl/ModuleLoadUnit.d.ts +35 -0
  20. package/dist/impl/ModuleLoadUnit.js +264 -0
  21. package/dist/impl/index.d.ts +4 -0
  22. package/dist/impl/index.js +5 -0
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.js +7 -0
  25. package/dist/model/AppGraph.d.ts +39 -0
  26. package/dist/model/AppGraph.js +257 -0
  27. package/dist/model/EggPrototype.d.ts +3 -0
  28. package/dist/model/EggPrototype.js +3 -0
  29. package/dist/model/LoadUnit.d.ts +3 -0
  30. package/dist/model/LoadUnit.js +3 -0
  31. package/dist/model/ModuleDescriptor.d.ts +18 -0
  32. package/dist/model/ModuleDescriptor.js +47 -0
  33. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +32 -0
  34. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +31 -0
  35. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +12 -0
  36. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +30 -0
  37. package/dist/model/ProtoDescriptor/index.d.ts +2 -0
  38. package/dist/model/ProtoDescriptor/index.js +3 -0
  39. package/dist/model/ProtoDescriptorHelper.d.ts +26 -0
  40. package/dist/model/ProtoDescriptorHelper.js +129 -0
  41. package/dist/model/graph/GlobalGraph.d.ts +63 -0
  42. package/dist/model/graph/GlobalGraph.js +240 -0
  43. package/dist/model/graph/GlobalModuleNode.d.ts +25 -0
  44. package/dist/model/graph/GlobalModuleNode.js +38 -0
  45. package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +13 -0
  46. package/dist/model/graph/GlobalModuleNodeBuilder.js +54 -0
  47. package/dist/model/graph/ProtoNode.d.ts +19 -0
  48. package/dist/model/graph/ProtoNode.js +40 -0
  49. package/dist/model/graph/ProtoSelector.d.ts +6 -0
  50. package/dist/model/graph/ProtoSelector.js +2 -0
  51. package/dist/model/graph/index.d.ts +5 -0
  52. package/dist/model/graph/index.js +6 -0
  53. package/dist/model/index.d.ts +7 -0
  54. package/dist/model/index.js +8 -0
  55. package/dist/util/ClassUtil.d.ts +5 -0
  56. package/dist/util/ClassUtil.js +17 -0
  57. package/dist/util/index.d.ts +1 -0
  58. package/dist/util/index.js +2 -0
  59. package/package.json +59 -0
@@ -0,0 +1,18 @@
1
+ import { PrototypeUtil } from '@eggjs/core-decorator';
2
+ export class LoadUnitMultiInstanceProtoHook {
3
+ static multiInstanceClazzSet = new Set();
4
+ static setAllClassList(clazzList) {
5
+ for (const clazz of clazzList) {
6
+ if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
7
+ this.multiInstanceClazzSet.add(clazz);
8
+ }
9
+ }
10
+ }
11
+ static clear() {
12
+ this.multiInstanceClazzSet.clear();
13
+ }
14
+ async preCreate() {
15
+ // ...
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRNdWx0aUluc3RhbmNlUHJvdG9Ib29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcGwvTG9hZFVuaXRNdWx0aUluc3RhbmNlUHJvdG9Ib29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd0RCxNQUFNLE9BQU8sOEJBQThCO0lBQ3pDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBMkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVqRSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQXVDO1FBQzVELEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxhQUFhLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNWLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNO0lBQ1IsQ0FBQyJ9
@@ -0,0 +1,35 @@
1
+ import { EggLoadUnitType } from '@eggjs/tegg-types';
2
+ import type { EggProtoImplClass, EggPrototype, LoadUnit, LoadUnitLifecycleContext, QualifierInfo } from '@eggjs/tegg-types';
3
+ import { GlobalGraph } from '../model/index.ts';
4
+ export declare class ModuleGraph {
5
+ private graph;
6
+ clazzList: EggProtoImplClass[];
7
+ readonly unitPath: string;
8
+ readonly name: string;
9
+ constructor(clazzList: EggProtoImplClass[], unitPath: string, name: string);
10
+ private findInjectNode;
11
+ build(): Promise<void>;
12
+ sort(): void;
13
+ }
14
+ export declare class ModuleLoadUnit implements LoadUnit {
15
+ private protoMap;
16
+ private protos;
17
+ private clazzList;
18
+ readonly id: string;
19
+ readonly name: string;
20
+ readonly unitPath: string;
21
+ readonly type: EggLoadUnitType;
22
+ get globalGraph(): GlobalGraph;
23
+ constructor(name: string, unitPath: string);
24
+ private doLoadClazz;
25
+ private loadClazz;
26
+ preLoad(): Promise<void>;
27
+ init(): Promise<void>;
28
+ containPrototype(proto: EggPrototype): boolean;
29
+ getEggPrototype(name: string, qualifiers: QualifierInfo[]): EggPrototype[];
30
+ registerEggPrototype(proto: EggPrototype): void;
31
+ deletePrototype(proto: EggPrototype): void;
32
+ destroy(): Promise<void>;
33
+ iterateEggPrototype(): IterableIterator<EggPrototype>;
34
+ static createModule(ctx: LoadUnitLifecycleContext): ModuleLoadUnit;
35
+ }
@@ -0,0 +1,264 @@
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/lifecycle';
8
+ import { FrameworkErrorFormatter } from '@eggjs/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 FrameworkErrorFormatter.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 = [...qualifiers, ...obj.qualifiers];
99
+ protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, obj.name, properties.initType, instanceQualifiers)));
100
+ }
101
+ }
102
+ }
103
+ else {
104
+ const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
105
+ const property = PrototypeUtil.getProperty(clazz);
106
+ if (property) {
107
+ protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, property.name, property.initType, qualifiers)));
108
+ }
109
+ }
110
+ }
111
+ for (const node of protoGraphNodes) {
112
+ if (!this.graph.addVertex(node)) {
113
+ throw new Error(`duplicate proto: ${node.val.id}`);
114
+ }
115
+ }
116
+ for (const node of protoGraphNodes) {
117
+ if (PrototypeUtil.isEggMultiInstancePrototype(node.val.clazz)) {
118
+ const property = await PrototypeUtil.getMultiInstanceProperty(node.val.clazz, {
119
+ moduleName: this.name,
120
+ unitPath: this.unitPath,
121
+ });
122
+ for (const objectInfo of property?.objects || []) {
123
+ const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
124
+ for (const injectObject of injectObjects) {
125
+ const qualifiers = [
126
+ ...QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName),
127
+ ...(objectInfo.properQualifiers?.[injectObject.refName] ?? []),
128
+ ];
129
+ const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
130
+ // If not found maybe in other module
131
+ if (injectNode) {
132
+ this.graph.addEdge(node, injectNode);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ else {
138
+ const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
139
+ for (const injectObject of injectObjects) {
140
+ const qualifiers = QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName);
141
+ const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
142
+ // If not found maybe in other module
143
+ if (injectNode) {
144
+ this.graph.addEdge(node, injectNode);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ sort() {
151
+ const loopPath = this.graph.loopPath();
152
+ if (loopPath) {
153
+ throw new Error('proto has recursive deps: ' + loopPath);
154
+ }
155
+ const clazzSet = new Set();
156
+ for (const clazz of this.graph.sort()) {
157
+ clazzSet.add(clazz.val.clazz);
158
+ }
159
+ this.clazzList = Array.from(clazzSet);
160
+ }
161
+ }
162
+ export class ModuleLoadUnit {
163
+ // private loader: Loader;
164
+ protoMap = new Map();
165
+ protos;
166
+ clazzList;
167
+ id;
168
+ name;
169
+ unitPath;
170
+ type = EggLoadUnitType.MODULE;
171
+ get globalGraph() {
172
+ return GlobalGraph.instance;
173
+ }
174
+ constructor(name, unitPath) {
175
+ this.id = IdenticalUtil.createLoadUnitId(name);
176
+ this.name = name;
177
+ this.unitPath = unitPath;
178
+ debug('ModuleLoadUnit constructor on moduleName: %o, unitPath: %o, id: %o', this.name, this.unitPath, this.id);
179
+ }
180
+ doLoadClazz() {
181
+ const protos = this.globalGraph.moduleProtoDescriptorMap.get(this.name);
182
+ if (protos) {
183
+ // TODO ModuleLoadUnit should support all proto descriptor
184
+ this.protos = protos.filter((t) => ClassProtoDescriptor.isClassProtoDescriptor(t));
185
+ this.clazzList = this.protos.map((t) => t.clazz);
186
+ }
187
+ else {
188
+ this.protos = [];
189
+ this.clazzList = [];
190
+ }
191
+ debug('doLoadClazz on moduleName: %o, protos size: %o, clazzList size: %o', this.name, this.protos.length, this.clazzList.length);
192
+ }
193
+ loadClazz() {
194
+ if (!this.clazzList) {
195
+ this.doLoadClazz();
196
+ }
197
+ }
198
+ async preLoad() {
199
+ this.loadClazz();
200
+ for (const protoClass of this.clazzList) {
201
+ // TODO refactor lifecycle hook to ProtoDescriptor or EggPrototype
202
+ // ModuleLoadUnit should not use clazz list
203
+ const fnName = LifecycleUtil.getStaticLifecycleHook('preLoad', protoClass);
204
+ if (fnName) {
205
+ const lifecycleHook = Reflect.get(protoClass, fnName);
206
+ if (typeof lifecycleHook === 'function') {
207
+ await lifecycleHook();
208
+ }
209
+ // TODO(@fengmk2): lifecycleHook is not a function should throw error
210
+ }
211
+ }
212
+ }
213
+ async init() {
214
+ this.loadClazz();
215
+ for (const protoDescriptor of this.protos) {
216
+ const proto = await EggPrototypeCreatorFactory.createProtoByDescriptor(protoDescriptor, this);
217
+ EggPrototypeFactory.instance.registerPrototype(proto, this);
218
+ }
219
+ }
220
+ containPrototype(proto) {
221
+ return !!this.protoMap.get(proto.name)?.find((t) => t === proto);
222
+ }
223
+ getEggPrototype(name, qualifiers) {
224
+ const protos = this.protoMap.get(name);
225
+ return protos?.filter((proto) => proto.verifyQualifiers(qualifiers)) || [];
226
+ }
227
+ registerEggPrototype(proto) {
228
+ const protoList = MapUtil.getOrStore(this.protoMap, proto.name, []);
229
+ protoList.push(proto);
230
+ }
231
+ deletePrototype(proto) {
232
+ const protos = this.protoMap.get(proto.name);
233
+ if (protos) {
234
+ const index = protos.indexOf(proto);
235
+ if (index !== -1) {
236
+ protos.splice(index, 1);
237
+ }
238
+ }
239
+ }
240
+ async destroy() {
241
+ for (const namedProtoMap of this.protoMap.values()) {
242
+ for (const proto of namedProtoMap.slice()) {
243
+ EggPrototypeFactory.instance.deletePrototype(proto, this);
244
+ }
245
+ }
246
+ this.protoMap.clear();
247
+ }
248
+ iterateEggPrototype() {
249
+ const protos = Array.from(this.protoMap.values()).reduce((p, c) => {
250
+ p = p.concat(c);
251
+ return p;
252
+ }, []);
253
+ return protos.values();
254
+ }
255
+ static createModule(ctx) {
256
+ const pkgPath = path.join(ctx.unitPath, 'package.json');
257
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
258
+ assert(pkg.eggModule, `module config not found in package ${pkgPath}`);
259
+ const { name } = pkg.eggModule;
260
+ return new ModuleLoadUnit(name, ctx.unitPath);
261
+ }
262
+ }
263
+ LoadUnitFactory.registerLoadUnitCreator(EggLoadUnitType.MODULE, ModuleLoadUnit.createModule);
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kdWxlTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9Nb2R1bGVMb2FkVW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLDBCQUEwQixHQUUzQixNQUFNLG1CQUFtQixDQUFDO0FBUzNCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFFakUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRVgsNkNBQTZDO0FBQzdDLE1BQU0sU0FBUztJQUNKLEtBQUssQ0FBb0I7SUFDekIsSUFBSSxDQUFtQjtJQUN2QixFQUFFLENBQVM7SUFDWCxVQUFVLENBQWtCO0lBQzVCLFFBQVEsQ0FBcUI7SUFDOUIsYUFB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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,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
+ }