@eggjs/tegg-metadata 4.0.0-beta.6 → 4.0.0-beta.8

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 (51) hide show
  1. package/dist/index.d.ts +405 -21
  2. package/dist/index.js +1256 -24
  3. package/package.json +6 -7
  4. package/dist/errors.d.ts +0 -18
  5. package/dist/errors.js +0 -29
  6. package/dist/factory/EggPrototypeCreatorFactory.d.ts +0 -13
  7. package/dist/factory/EggPrototypeCreatorFactory.js +0 -95
  8. package/dist/factory/EggPrototypeFactory.d.ts +0 -13
  9. package/dist/factory/EggPrototypeFactory.js +0 -41
  10. package/dist/factory/LoadUnitFactory.d.ts +0 -16
  11. package/dist/factory/LoadUnitFactory.js +0 -58
  12. package/dist/factory/index.js +0 -5
  13. package/dist/impl/EggPrototypeBuilder.d.ts +0 -26
  14. package/dist/impl/EggPrototypeBuilder.js +0 -115
  15. package/dist/impl/EggPrototypeImpl.d.ts +0 -28
  16. package/dist/impl/EggPrototypeImpl.js +0 -52
  17. package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +0 -11
  18. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +0 -16
  19. package/dist/impl/ModuleLoadUnit.d.ts +0 -38
  20. package/dist/impl/ModuleLoadUnit.js +0 -211
  21. package/dist/impl/index.js +0 -6
  22. package/dist/model/AppGraph.d.ts +0 -42
  23. package/dist/model/AppGraph.js +0 -195
  24. package/dist/model/EggPrototype.d.ts +0 -7
  25. package/dist/model/EggPrototype.js +0 -7
  26. package/dist/model/LoadUnit.d.ts +0 -7
  27. package/dist/model/LoadUnit.js +0 -7
  28. package/dist/model/ModuleDescriptor.d.ts +0 -22
  29. package/dist/model/ModuleDescriptor.js +0 -33
  30. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +0 -36
  31. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +0 -35
  32. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +0 -16
  33. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +0 -27
  34. package/dist/model/ProtoDescriptor/index.js +0 -4
  35. package/dist/model/ProtoDescriptorHelper.d.ts +0 -30
  36. package/dist/model/ProtoDescriptorHelper.js +0 -113
  37. package/dist/model/graph/GlobalGraph.d.ts +0 -67
  38. package/dist/model/graph/GlobalGraph.js +0 -176
  39. package/dist/model/graph/GlobalModuleNode.d.ts +0 -29
  40. package/dist/model/graph/GlobalModuleNode.js +0 -42
  41. package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +0 -17
  42. package/dist/model/graph/GlobalModuleNodeBuilder.js +0 -56
  43. package/dist/model/graph/ProtoNode.d.ts +0 -25
  44. package/dist/model/graph/ProtoNode.js +0 -43
  45. package/dist/model/graph/ProtoSelector.d.ts +0 -10
  46. package/dist/model/graph/ProtoSelector.js +0 -3
  47. package/dist/model/graph/index.js +0 -7
  48. package/dist/model/index.js +0 -15
  49. package/dist/util/ClassUtil.d.ts +0 -9
  50. package/dist/util/ClassUtil.js +0 -18
  51. package/dist/util/index.js +0 -3
@@ -1,211 +0,0 @@
1
- import { MultiPrototypeFound } from "../errors.js";
2
- import { EggPrototypeFactory } from "../factory/EggPrototypeFactory.js";
3
- import { ClassProtoDescriptor } from "../model/ProtoDescriptor/ClassProtoDescriptor.js";
4
- import { GlobalGraph } from "../model/graph/GlobalGraph.js";
5
- import "../model/index.js";
6
- import { EggPrototypeCreatorFactory } from "../factory/EggPrototypeCreatorFactory.js";
7
- import { LoadUnitFactory } from "../factory/LoadUnitFactory.js";
8
- import "../factory/index.js";
9
- import { Graph, GraphNode, MapUtil } from "@eggjs/tegg-common-util";
10
- import { EggLoadUnitType, InitTypeQualifierAttribute } from "@eggjs/tegg-types";
11
- import { FrameworkErrorFormater } from "egg-errors";
12
- import assert from "node:assert";
13
- import { debuglog } from "node:util";
14
- import { PrototypeUtil, QualifierUtil } from "@eggjs/core-decorator";
15
- import { IdenticalUtil, LifecycleUtil } from "@eggjs/tegg-lifecycle";
16
- import path from "node:path";
17
- import { readFileSync } from "node:fs";
18
-
19
- //#region src/impl/ModuleLoadUnit.ts
20
- const debug = debuglog("tegg/core/metadata/impl/ModuleLoadUnit");
21
- let id = 0;
22
- var ProtoNode = class {
23
- clazz;
24
- name;
25
- id;
26
- qualifiers;
27
- initType;
28
- PrototypeUtil;
29
- constructor(clazz, objName, initType, qualifiers) {
30
- this.name = objName;
31
- this.id = "" + id++;
32
- this.clazz = clazz;
33
- this.qualifiers = qualifiers;
34
- this.initType = initType;
35
- }
36
- verifyQualifiers(qualifiers) {
37
- for (const qualifier of qualifiers) if (!this.verifyQualifier(qualifier)) return false;
38
- return true;
39
- }
40
- verifyQualifier(qualifier) {
41
- return this.qualifiers.find((t) => t.attribute === qualifier.attribute)?.value === qualifier.value;
42
- }
43
- toString() {
44
- return `${this.clazz.name}@${this.PrototypeUtil.getFilePath(this.clazz)}`;
45
- }
46
- };
47
- var ModuleGraph = class {
48
- graph;
49
- clazzList;
50
- unitPath;
51
- name;
52
- constructor(clazzList, unitPath, name) {
53
- this.clazzList = clazzList;
54
- this.graph = new Graph();
55
- this.unitPath = unitPath;
56
- this.name = name;
57
- debug("ModuleGraph constructor on moduleName: %o, unitPath: %o, clazzList size: %o", this.name, this.unitPath, this.clazzList.length);
58
- }
59
- findInjectNode(objName, qualifiers, parentInitTye) {
60
- let nodes = Array.from(this.graph.nodes.values()).filter((t) => t.val.name === objName).filter((t) => t.val.verifyQualifiers(qualifiers));
61
- if (nodes.length === 0) return;
62
- if (nodes.length === 1) return nodes[0];
63
- const initTypeQualifier = {
64
- attribute: InitTypeQualifierAttribute,
65
- value: parentInitTye
66
- };
67
- nodes = nodes.filter((t) => t.val.verifyQualifiers([initTypeQualifier]));
68
- if (nodes.length === 1) return nodes[0];
69
- const temp = /* @__PURE__ */ new Map();
70
- for (const node of nodes) temp.set(node.val.clazz, node);
71
- nodes = Array.from(temp.values());
72
- if (nodes.length === 1) return nodes[0];
73
- const result = nodes.map((node) => node.val.toString());
74
- throw FrameworkErrorFormater.formatError(new MultiPrototypeFound(String(objName), qualifiers, JSON.stringify(result)));
75
- }
76
- async build() {
77
- const protoGraphNodes = [];
78
- for (const clazz of this.clazzList) if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
79
- const properties = await PrototypeUtil.getMultiInstanceProperty(clazz, {
80
- unitPath: this.unitPath,
81
- moduleName: this.name
82
- });
83
- if (properties) {
84
- const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
85
- for (const obj of properties.objects || []) {
86
- const instanceQualifiers = [...qualifiers, ...obj.qualifiers];
87
- protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, obj.name, properties.initType, instanceQualifiers)));
88
- }
89
- }
90
- } else {
91
- const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
92
- const property = PrototypeUtil.getProperty(clazz);
93
- if (property) protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, property.name, property.initType, qualifiers)));
94
- }
95
- for (const node of protoGraphNodes) if (!this.graph.addVertex(node)) throw new Error(`duplicate proto: ${node.val.id}`);
96
- for (const node of protoGraphNodes) if (PrototypeUtil.isEggMultiInstancePrototype(node.val.clazz)) {
97
- const property = await PrototypeUtil.getMultiInstanceProperty(node.val.clazz, {
98
- moduleName: this.name,
99
- unitPath: this.unitPath
100
- });
101
- for (const objectInfo of property?.objects || []) {
102
- const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
103
- for (const injectObject of injectObjects) {
104
- const qualifiers = [...QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName), ...objectInfo.properQualifiers?.[injectObject.refName] ?? []];
105
- const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
106
- if (injectNode) this.graph.addEdge(node, injectNode);
107
- }
108
- }
109
- } else {
110
- const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
111
- for (const injectObject of injectObjects) {
112
- const qualifiers = QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName);
113
- const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
114
- if (injectNode) this.graph.addEdge(node, injectNode);
115
- }
116
- }
117
- }
118
- sort() {
119
- const loopPath = this.graph.loopPath();
120
- if (loopPath) throw new Error("proto has recursive deps: " + loopPath);
121
- const clazzSet = /* @__PURE__ */ new Set();
122
- for (const clazz of this.graph.sort()) clazzSet.add(clazz.val.clazz);
123
- this.clazzList = Array.from(clazzSet);
124
- }
125
- };
126
- var ModuleLoadUnit = class ModuleLoadUnit {
127
- protoMap = /* @__PURE__ */ new Map();
128
- protos;
129
- clazzList;
130
- id;
131
- name;
132
- unitPath;
133
- type = EggLoadUnitType.MODULE;
134
- get globalGraph() {
135
- return GlobalGraph.instance;
136
- }
137
- constructor(name, unitPath) {
138
- this.id = IdenticalUtil.createLoadUnitId(name);
139
- this.name = name;
140
- this.unitPath = unitPath;
141
- debug("ModuleLoadUnit constructor on moduleName: %o, unitPath: %o, id: %o", this.name, this.unitPath, this.id);
142
- }
143
- doLoadClazz() {
144
- const protos = this.globalGraph.moduleProtoDescriptorMap.get(this.name);
145
- if (protos) {
146
- this.protos = protos.filter((t) => ClassProtoDescriptor.isClassProtoDescriptor(t));
147
- this.clazzList = this.protos.map((t) => t.clazz);
148
- } else {
149
- this.protos = [];
150
- this.clazzList = [];
151
- }
152
- debug("doLoadClazz on moduleName: %o, protos size: %o, clazzList size: %o", this.name, this.protos.length, this.clazzList.length);
153
- }
154
- loadClazz() {
155
- if (!this.clazzList) this.doLoadClazz();
156
- }
157
- async preLoad() {
158
- this.loadClazz();
159
- for (const protoClass of this.clazzList) {
160
- const fnName = LifecycleUtil.getStaticLifecycleHook("preLoad", protoClass);
161
- if (fnName) {
162
- const lifecycleHook = Reflect.get(protoClass, fnName);
163
- if (typeof lifecycleHook === "function") await lifecycleHook();
164
- }
165
- }
166
- }
167
- async init() {
168
- this.loadClazz();
169
- for (const protoDescriptor of this.protos) {
170
- const proto = await EggPrototypeCreatorFactory.createProtoByDescriptor(protoDescriptor, this);
171
- EggPrototypeFactory.instance.registerPrototype(proto, this);
172
- }
173
- }
174
- containPrototype(proto) {
175
- return !!this.protoMap.get(proto.name)?.find((t) => t === proto);
176
- }
177
- getEggPrototype(name, qualifiers) {
178
- return this.protoMap.get(name)?.filter((proto) => proto.verifyQualifiers(qualifiers)) || [];
179
- }
180
- registerEggPrototype(proto) {
181
- MapUtil.getOrStore(this.protoMap, proto.name, []).push(proto);
182
- }
183
- deletePrototype(proto) {
184
- const protos = this.protoMap.get(proto.name);
185
- if (protos) {
186
- const index = protos.indexOf(proto);
187
- if (index !== -1) protos.splice(index, 1);
188
- }
189
- }
190
- async destroy() {
191
- for (const namedProtoMap of this.protoMap.values()) for (const proto of namedProtoMap.slice()) EggPrototypeFactory.instance.deletePrototype(proto, this);
192
- this.protoMap.clear();
193
- }
194
- iterateEggPrototype() {
195
- return Array.from(this.protoMap.values()).reduce((p, c) => {
196
- p = p.concat(c);
197
- return p;
198
- }, []).values();
199
- }
200
- static createModule(ctx) {
201
- const pkgPath = path.join(ctx.unitPath, "package.json");
202
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
203
- assert(pkg.eggModule, `module config not found in package ${pkgPath}`);
204
- const { name } = pkg.eggModule;
205
- return new ModuleLoadUnit(name, ctx.unitPath);
206
- }
207
- };
208
- LoadUnitFactory.registerLoadUnitCreator(EggLoadUnitType.MODULE, ModuleLoadUnit.createModule);
209
-
210
- //#endregion
211
- export { ModuleGraph, ModuleLoadUnit };
@@ -1,6 +0,0 @@
1
- import { EggPrototypeImpl } from "./EggPrototypeImpl.js";
2
- import { EggPrototypeBuilder } from "./EggPrototypeBuilder.js";
3
- import { LoadUnitMultiInstanceProtoHook } from "./LoadUnitMultiInstanceProtoHook.js";
4
- import { ModuleGraph, ModuleLoadUnit } from "./ModuleLoadUnit.js";
5
-
6
- export { };
@@ -1,42 +0,0 @@
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>;
12
- }
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>[];
20
- }
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[];
30
- }
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;
40
- }
41
- //#endregion
42
- export { AppGraph, ClazzMap, ClazzMetaMap, InstanceClazzMeta, ModuleNode };
@@ -1,195 +0,0 @@
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
8
- function verifyQualifier(clazzQualifiers, qualifier) {
9
- return clazzQualifiers.find((t) => t.attribute === qualifier.attribute)?.value === qualifier.value;
10
- }
11
- function verifyQualifiers(clazzQualifiers, qualifiers) {
12
- for (const qualifier of qualifiers) if (!verifyQualifier(clazzQualifiers, qualifier)) return false;
13
- return true;
14
- }
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 initTypeQualifierAttributeValue = await PrototypeUtil.getInitType(clazz, {
127
- unitPath: this.moduleConfig.path,
128
- moduleName: this.moduleConfig.name
129
- });
130
- const defaultQualifier = [{
131
- attribute: InitTypeQualifierAttribute,
132
- value: initTypeQualifierAttributeValue
133
- }, {
134
- attribute: LoadUnitNameQualifierAttribute,
135
- value: this.name
136
- }];
137
- for (const qualifier of defaultQualifier) QualifierUtil.addProtoQualifier(clazz, qualifier.attribute, qualifier.value);
138
- }
139
- }
140
- toString() {
141
- return `${this.name}@${this.moduleConfig.path}`;
142
- }
143
- getClazzList() {
144
- return this.clazzList;
145
- }
146
- };
147
- var AppGraph = class {
148
- graph;
149
- clazzMap;
150
- moduleConfigList;
151
- constructor() {
152
- this.graph = new Graph();
153
- }
154
- addNode(moduleNode) {
155
- if (!this.graph.addVertex(new GraphNode(moduleNode))) throw new Error(`duplicate module: ${moduleNode}`);
156
- }
157
- getClazzList() {
158
- const clazzSet = /* @__PURE__ */ new Set();
159
- for (const node of this.graph.nodes.values()) for (const clazz of node.val.getClazzList()) clazzSet.add(clazz);
160
- return Array.from(clazzSet);
161
- }
162
- async build() {
163
- this.clazzMap = new ClazzMap(this.graph);
164
- await this.clazzMap.build();
165
- for (const node of this.graph.nodes.values()) for (const clazz of node.val.getClazzList()) {
166
- const injectObjects = PrototypeUtil.getInjectObjects(clazz);
167
- for (const injectObject of injectObjects) if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) for (const instanceNode of this.graph.nodes.values()) {
168
- const property = await PrototypeUtil.getMultiInstanceProperty(clazz, {
169
- unitPath: instanceNode.val.moduleConfig.path,
170
- moduleName: instanceNode.val.moduleConfig.name
171
- });
172
- for (const info of property?.objects || []) {
173
- const properQualifiers = [...QualifierUtil.getProperQualifiers(clazz, injectObject.refName), ...info.properQualifiers?.[injectObject.refName] ?? []];
174
- const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
175
- for (const moduleNode of dependencyModules) if (instanceNode !== moduleNode) this.graph.addEdge(instanceNode, moduleNode);
176
- }
177
- }
178
- else {
179
- const properQualifiers = [...QualifierUtil.getProperQualifiers(clazz, injectObject.refName)];
180
- const dependencyModules = this.clazzMap.findDependencyModule(injectObject.objName, properQualifiers, node);
181
- for (const moduleNode of dependencyModules) if (node !== moduleNode) this.graph.addEdge(node, moduleNode);
182
- }
183
- }
184
- }
185
- sort() {
186
- const loopPath = this.graph.loopPath();
187
- if (loopPath) throw new Error("module has recursive deps: " + loopPath);
188
- this.moduleConfigList = this.graph.sort().filter((t) => {
189
- return t.val.moduleConfig.optional !== true || t.fromNodeMap.size > 0;
190
- }).map((t) => t.val.moduleConfig);
191
- }
192
- };
193
-
194
- //#endregion
195
- export { AppGraph, ClazzMap, ModuleNode };
@@ -1,7 +0,0 @@
1
- import { EggPrototype, EggPrototypeLifecycleContext } from "@eggjs/tegg-types";
2
- import { LifecycleUtil } from "@eggjs/tegg-lifecycle";
3
-
4
- //#region src/model/EggPrototype.d.ts
5
- declare const EggPrototypeLifecycleUtil: LifecycleUtil<EggPrototypeLifecycleContext, EggPrototype>;
6
- //#endregion
7
- export { EggPrototypeLifecycleUtil };
@@ -1,7 +0,0 @@
1
- import { LifecycleUtil } from "@eggjs/tegg-lifecycle";
2
-
3
- //#region src/model/EggPrototype.ts
4
- const EggPrototypeLifecycleUtil = new LifecycleUtil();
5
-
6
- //#endregion
7
- export { EggPrototypeLifecycleUtil };
@@ -1,7 +0,0 @@
1
- import { LoadUnit, LoadUnitLifecycleContext } from "@eggjs/tegg-types";
2
- import { LifecycleUtil } from "@eggjs/tegg-lifecycle";
3
-
4
- //#region src/model/LoadUnit.d.ts
5
- declare const LoadUnitLifecycleUtil: LifecycleUtil<LoadUnitLifecycleContext, LoadUnit>;
6
- //#endregion
7
- export { LoadUnitLifecycleUtil };
@@ -1,7 +0,0 @@
1
- import { LifecycleUtil } from "@eggjs/tegg-lifecycle";
2
-
3
- //#region src/model/LoadUnit.ts
4
- const LoadUnitLifecycleUtil = new LifecycleUtil();
5
-
6
- //#endregion
7
- export { LoadUnitLifecycleUtil };
@@ -1,22 +0,0 @@
1
- import { EggProtoImplClass, ProtoDescriptor } from "@eggjs/tegg-types";
2
-
3
- //#region src/model/ModuleDescriptor.d.ts
4
- interface ModuleDescriptor {
5
- name: string;
6
- unitPath: string;
7
- optional?: boolean;
8
- clazzList: EggProtoImplClass[];
9
- multiInstanceClazzList: EggProtoImplClass[];
10
- protos: ProtoDescriptor[];
11
- }
12
- interface ModuleDumpOptions {
13
- dumpDir?: string;
14
- }
15
- declare class ModuleDescriptorDumper {
16
- static stringifyDescriptor(moduleDescriptor: ModuleDescriptor): string;
17
- static stringifyClazz(clazz: EggProtoImplClass, moduleDescriptor: ModuleDescriptor): string;
18
- static dumpPath(desc: ModuleDescriptor, options?: ModuleDumpOptions): string;
19
- static dump(desc: ModuleDescriptor, options?: ModuleDumpOptions): Promise<void>;
20
- }
21
- //#endregion
22
- export { ModuleDescriptor, ModuleDescriptorDumper, ModuleDumpOptions };
@@ -1,33 +0,0 @@
1
- import "@eggjs/tegg-types";
2
- import { PrototypeUtil } from "@eggjs/core-decorator";
3
- import path from "node:path";
4
- import fs from "node:fs/promises";
5
-
6
- //#region src/model/ModuleDescriptor.ts
7
- const DUMP_PATH = process.env.MODULE_DUMP_PATH;
8
- var ModuleDescriptorDumper = class ModuleDescriptorDumper {
9
- static stringifyDescriptor(moduleDescriptor) {
10
- return `{"name": "${moduleDescriptor.name}","unitPath": "${moduleDescriptor.unitPath}",` + (typeof moduleDescriptor.optional !== "undefined" ? `"optional": ${moduleDescriptor.optional},` : "") + `"clazzList": [${moduleDescriptor.clazzList.map((t) => {
11
- return ModuleDescriptorDumper.stringifyClazz(t, moduleDescriptor);
12
- }).join(",")}],"multiInstanceClazzList": [${moduleDescriptor.multiInstanceClazzList.map((t) => {
13
- return ModuleDescriptorDumper.stringifyClazz(t, moduleDescriptor);
14
- }).join(",")}],"protos": [${moduleDescriptor.protos.map((t) => {
15
- return JSON.stringify(t);
16
- }).join(",")}]}`;
17
- }
18
- static stringifyClazz(clazz, moduleDescriptor) {
19
- return `{"name": "${clazz.name}",` + (PrototypeUtil.getFilePath(clazz) ? `"filePath": "${path.relative(moduleDescriptor.unitPath, PrototypeUtil.getFilePath(clazz))}"` : "") + "}";
20
- }
21
- static dumpPath(desc, options) {
22
- const dumpDir = DUMP_PATH ?? options?.dumpDir ?? desc.unitPath;
23
- return path.join(dumpDir, ".egg", `${desc.name}_module_desc.json`);
24
- }
25
- static async dump(desc, options) {
26
- const dumpPath = ModuleDescriptorDumper.dumpPath(desc, options);
27
- await fs.mkdir(path.dirname(dumpPath), { recursive: true });
28
- await fs.writeFile(dumpPath, ModuleDescriptorDumper.stringifyDescriptor(desc));
29
- }
30
- };
31
-
32
- //#endregion
33
- export { ModuleDescriptorDumper };
@@ -1,36 +0,0 @@
1
- import { AccessLevel, InjectObjectDescriptor, ObjectInitTypeLike, ProtoDescriptor, ProtoDescriptorTypeLike, QualifierInfo } from "@eggjs/tegg-types";
2
-
3
- //#region src/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts
4
- interface AbstractProtoDescriptorOptions {
5
- name: PropertyKey;
6
- accessLevel: AccessLevel;
7
- initType: ObjectInitTypeLike;
8
- qualifiers: QualifierInfo[];
9
- protoImplType: string;
10
- injectObjects: InjectObjectDescriptor[];
11
- defineModuleName: string;
12
- defineUnitPath: string;
13
- instanceModuleName: string;
14
- instanceDefineUnitPath: string;
15
- type: ProtoDescriptorTypeLike;
16
- properQualifiers: Record<PropertyKey, QualifierInfo[]>;
17
- }
18
- declare abstract class AbstractProtoDescriptor implements ProtoDescriptor {
19
- name: PropertyKey;
20
- accessLevel: AccessLevel;
21
- initType: ObjectInitTypeLike;
22
- qualifiers: QualifierInfo[];
23
- injectObjects: InjectObjectDescriptor[];
24
- protoImplType: string;
25
- defineModuleName: string;
26
- defineUnitPath: string;
27
- instanceModuleName: string;
28
- instanceDefineUnitPath: string;
29
- className?: string;
30
- properQualifiers: Record<PropertyKey, QualifierInfo[]>;
31
- type: ProtoDescriptorTypeLike;
32
- protected constructor(options: AbstractProtoDescriptorOptions);
33
- abstract equal(protoDescriptor: ProtoDescriptor): boolean;
34
- }
35
- //#endregion
36
- export { AbstractProtoDescriptor, AbstractProtoDescriptorOptions };
@@ -1,35 +0,0 @@
1
- import { AccessLevel } from "@eggjs/tegg-types";
2
-
3
- //#region src/model/ProtoDescriptor/AbstractProtoDescriptor.ts
4
- var AbstractProtoDescriptor = class {
5
- name;
6
- accessLevel;
7
- initType;
8
- qualifiers;
9
- injectObjects;
10
- protoImplType;
11
- defineModuleName;
12
- defineUnitPath;
13
- instanceModuleName;
14
- instanceDefineUnitPath;
15
- className;
16
- properQualifiers;
17
- type;
18
- constructor(options) {
19
- this.name = options.name;
20
- this.accessLevel = options.accessLevel;
21
- this.initType = options.initType;
22
- this.qualifiers = options.qualifiers;
23
- this.protoImplType = options.protoImplType;
24
- this.injectObjects = options.injectObjects;
25
- this.defineModuleName = options.defineModuleName;
26
- this.defineUnitPath = options.defineUnitPath;
27
- this.instanceModuleName = options.instanceModuleName;
28
- this.instanceDefineUnitPath = options.instanceDefineUnitPath;
29
- this.type = options.type;
30
- this.properQualifiers = options.properQualifiers;
31
- }
32
- };
33
-
34
- //#endregion
35
- export { AbstractProtoDescriptor };
@@ -1,16 +0,0 @@
1
- import { AbstractProtoDescriptor, AbstractProtoDescriptorOptions } from "./AbstractProtoDescriptor.js";
2
- import { EggProtoImplClass, ProtoDescriptor } from "@eggjs/tegg-types";
3
-
4
- //#region src/model/ProtoDescriptor/ClassProtoDescriptor.d.ts
5
- interface ClassProtoDescriptorOptions extends Omit<AbstractProtoDescriptorOptions, 'type'> {
6
- clazz: EggProtoImplClass;
7
- }
8
- declare class ClassProtoDescriptor extends AbstractProtoDescriptor {
9
- clazz: EggProtoImplClass;
10
- clazzName: string;
11
- static isClassProtoDescriptor(descriptor: ProtoDescriptor): descriptor is ClassProtoDescriptor;
12
- constructor(options: ClassProtoDescriptorOptions);
13
- equal(protoDescriptor: ProtoDescriptor): boolean;
14
- }
15
- //#endregion
16
- export { ClassProtoDescriptor, ClassProtoDescriptorOptions };
@@ -1,27 +0,0 @@
1
- import { AbstractProtoDescriptor } from "./AbstractProtoDescriptor.js";
2
- import { ProtoDescriptorType } from "@eggjs/tegg-types";
3
- import { QualifierUtil } from "@eggjs/core-decorator";
4
-
5
- //#region src/model/ProtoDescriptor/ClassProtoDescriptor.ts
6
- var ClassProtoDescriptor = class ClassProtoDescriptor extends AbstractProtoDescriptor {
7
- clazz;
8
- clazzName;
9
- static isClassProtoDescriptor(descriptor) {
10
- return descriptor.type === ProtoDescriptorType.CLASS;
11
- }
12
- constructor(options) {
13
- super({
14
- type: ProtoDescriptorType.CLASS,
15
- ...options
16
- });
17
- this.clazz = options.clazz;
18
- this.className = this.clazz.name;
19
- }
20
- equal(protoDescriptor) {
21
- if (!ClassProtoDescriptor.isClassProtoDescriptor(protoDescriptor)) return false;
22
- return this.clazz === protoDescriptor.clazz && this.name === protoDescriptor.name && this.accessLevel === protoDescriptor.accessLevel && this.initType === protoDescriptor.initType && this.instanceModuleName === protoDescriptor.instanceModuleName && QualifierUtil.equalQualifiers(this.qualifiers, protoDescriptor.qualifiers);
23
- }
24
- };
25
-
26
- //#endregion
27
- export { ClassProtoDescriptor };
@@ -1,4 +0,0 @@
1
- import { AbstractProtoDescriptor } from "./AbstractProtoDescriptor.js";
2
- import { ClassProtoDescriptor } from "./ClassProtoDescriptor.js";
3
-
4
- export { };