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

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,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
@@ -1,4 +1,4 @@
1
- import { AccessLevel, InjectObjectDescriptor, ObjectInitTypeLike, ProtoDescriptor, ProtoDescriptorTypeLike, QualifierInfo } from '@eggjs/tegg-types';
1
+ import { AccessLevel, type InjectObjectDescriptor, type ObjectInitTypeLike, type ProtoDescriptor, type ProtoDescriptorTypeLike, type QualifierInfo } from '@eggjs/tegg-types';
2
2
  export interface AbstractProtoDescriptorOptions {
3
3
  name: PropertyKey;
4
4
  accessLevel: AccessLevel;
@@ -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=
@@ -1,5 +1,5 @@
1
- import { EggProtoImplClass, ProtoDescriptor } from '@eggjs/tegg-types';
2
- import { AbstractProtoDescriptor, AbstractProtoDescriptorOptions } from './AbstractProtoDescriptor.js';
1
+ import { type EggProtoImplClass, type ProtoDescriptor } from '@eggjs/tegg-types';
2
+ import { AbstractProtoDescriptor, type AbstractProtoDescriptorOptions } from './AbstractProtoDescriptor.ts';
3
3
  export interface ClassProtoDescriptorOptions extends Omit<AbstractProtoDescriptorOptions, 'type'> {
4
4
  clazz: EggProtoImplClass;
5
5
  }
@@ -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
@@ -1,5 +1,5 @@
1
- import { EggProtoImplClass, ObjectInitTypeLike, ProtoDescriptor, QualifierInfo, MultiInstancePrototypeGetObjectsContext } from '@eggjs/tegg-types';
2
- import { ProtoSelectorContext } from './graph/index.js';
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
3
  export declare class ProtoDescriptorHelper {
4
4
  #private;
5
5
  static addDefaultQualifier(qualifiers: QualifierInfo[], initType: ObjectInitTypeLike, loadUnitName: string): QualifierInfo[];
@@ -0,0 +1,130 @@
1
+ import assert from 'node:assert';
2
+ import { PrototypeUtil, QualifierUtil, } from '@eggjs/core-decorator';
3
+ import { InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, AccessLevel, MultiInstanceType, } from '@eggjs/tegg-types';
4
+ import {} from "./graph/index.js";
5
+ import { ClassProtoDescriptor } from "./ProtoDescriptor/index.js";
6
+ export class ProtoDescriptorHelper {
7
+ static addDefaultQualifier(qualifiers, initType, loadUnitName) {
8
+ const defaultQualifiers = [{
9
+ attribute: InitTypeQualifierAttribute,
10
+ value: initType,
11
+ }, {
12
+ attribute: LoadUnitNameQualifierAttribute,
13
+ value: loadUnitName,
14
+ }];
15
+ const res = [
16
+ ...qualifiers,
17
+ ];
18
+ for (const defaultQualifier of defaultQualifiers) {
19
+ if (!qualifiers.find(t => t.attribute === defaultQualifier.attribute)) {
20
+ res.push(defaultQualifier);
21
+ }
22
+ }
23
+ return res;
24
+ }
25
+ static async createByMultiInstanceClazz(clazz, options) {
26
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
27
+ const type = PrototypeUtil.getEggMultiInstancePrototypeType(clazz);
28
+ if (type === MultiInstanceType.DYNAMIC) {
29
+ return await ProtoDescriptorHelper.createByDynamicMultiInstanceClazz(clazz, options);
30
+ }
31
+ else if (type === MultiInstanceType.STATIC) {
32
+ // static multi instance proto create only in self module
33
+ if (options.defineModuleName === options.instanceModuleName) {
34
+ return ProtoDescriptorHelper.createByStaticMultiInstanceClazz(clazz, options);
35
+ }
36
+ }
37
+ return [];
38
+ }
39
+ static async createByDynamicMultiInstanceClazz(clazz, options) {
40
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
41
+ const instanceProperty = await PrototypeUtil.getDynamicMultiInstanceProperty(clazz, {
42
+ moduleName: options.instanceModuleName,
43
+ unitPath: options.instanceDefineUnitPath,
44
+ });
45
+ assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
46
+ return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
47
+ }
48
+ static createByStaticMultiInstanceClazz(clazz, options) {
49
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
50
+ const instanceProperty = PrototypeUtil.getStaticMultiInstanceProperty(clazz);
51
+ assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
52
+ return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
53
+ }
54
+ static #createByMultiInstanceClazz(clazz, instanceProperty, options) {
55
+ const res = [];
56
+ for (const obj of instanceProperty.objects) {
57
+ let qualifiers = QualifierUtil.mergeQualifiers(QualifierUtil.getProtoQualifiers(clazz), obj.qualifiers);
58
+ qualifiers = ProtoDescriptorHelper.addDefaultQualifier(qualifiers, instanceProperty.initType, options.instanceModuleName);
59
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz)
60
+ .map(t => {
61
+ const qualifiers = QualifierUtil.getProperQualifiers(clazz, t.refName);
62
+ const instanceQualifier = obj.properQualifiers?.[t.refName] ?? [];
63
+ return {
64
+ ...t,
65
+ qualifiers: QualifierUtil.mergeQualifiers(qualifiers, instanceQualifier),
66
+ };
67
+ });
68
+ res.push(new ClassProtoDescriptor({
69
+ name: obj.name,
70
+ accessLevel: instanceProperty.accessLevel,
71
+ initType: instanceProperty.initType,
72
+ protoImplType: instanceProperty.protoImplType,
73
+ qualifiers,
74
+ injectObjects,
75
+ instanceModuleName: options.instanceModuleName,
76
+ instanceDefineUnitPath: options.instanceDefineUnitPath,
77
+ defineModuleName: options.defineModuleName,
78
+ defineUnitPath: options.defineUnitPath,
79
+ clazz,
80
+ properQualifiers: obj.properQualifiers || {},
81
+ }));
82
+ }
83
+ return res;
84
+ }
85
+ static createByInstanceClazz(clazz, ctx) {
86
+ assert(PrototypeUtil.isEggPrototype(clazz), `clazz ${clazz.name} is not EggPrototype`);
87
+ assert(!PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not Prototype`);
88
+ const property = PrototypeUtil.getProperty(clazz);
89
+ assert(property, `not found PrototypeInfo for clazz ${clazz.name}`);
90
+ const protoQualifiers = ProtoDescriptorHelper.addDefaultQualifier(QualifierUtil.getProtoQualifiers(clazz), property.initType, ctx.moduleName);
91
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz)
92
+ .map(t => {
93
+ const qualifiers = QualifierUtil.getProperQualifiers(clazz, t.refName);
94
+ return {
95
+ ...t,
96
+ qualifiers,
97
+ };
98
+ });
99
+ return new ClassProtoDescriptor({
100
+ name: property.name,
101
+ protoImplType: property.protoImplType,
102
+ accessLevel: property.accessLevel,
103
+ initType: property.initType,
104
+ qualifiers: protoQualifiers,
105
+ injectObjects,
106
+ instanceDefineUnitPath: ctx.unitPath,
107
+ instanceModuleName: ctx.moduleName,
108
+ defineUnitPath: ctx.unitPath,
109
+ defineModuleName: ctx.moduleName,
110
+ clazz,
111
+ properQualifiers: {},
112
+ });
113
+ }
114
+ static selectProto(proto, ctx) {
115
+ // 1. name match
116
+ if (proto.name !== ctx.name) {
117
+ return false;
118
+ }
119
+ // 2. access level match
120
+ if (proto.accessLevel !== AccessLevel.PUBLIC && proto.instanceModuleName !== ctx.moduleName) {
121
+ return false;
122
+ }
123
+ // 3. qualifier match
124
+ if (!QualifierUtil.matchQualifiers(proto.qualifiers, ctx.qualifiers)) {
125
+ return false;
126
+ }
127
+ return true;
128
+ }
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdG9EZXNjcmlwdG9ySGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL1Byb3RvRGVzY3JpcHRvckhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUVMLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBRUwsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUk5QixXQUFXLEVBRVgsaUJBQWlCLEdBQ2xCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUE2QixNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWxFLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQTJCLEVBQUUsUUFBNEIsRUFBRSxZQUFvQjtRQUN4RyxNQUFNLGlCQUFpQixHQUFHLENBQUM7Z0JBQ3pCLFNBQVMsRUFBRSwwQkFBMEI7Z0JBQ3JDLEtBQUssRUFBRSxRQUFRO2FBQ2hCLEVBQUU7Z0JBQ0QsU0FBUyxFQUFFLDhCQUE4QjtnQkFDekMsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUc7WUFDVixHQUFHLFVBQVU7U0FDZCxDQUFDO1FBQ0YsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FB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
@@ -1,8 +1,8 @@
1
- import { Graph, GraphNode, ModuleReference } from '@eggjs/tegg-common-util';
2
- import { InjectObjectDescriptor, ProtoDescriptor } from '@eggjs/tegg-types';
3
- import { ModuleDependencyMeta, GlobalModuleNode } from './GlobalModuleNode.js';
4
- import { ProtoDependencyMeta, ProtoNode } from './ProtoNode.js';
5
- import { ModuleDescriptor } from '../ModuleDescriptor.js';
1
+ import { Graph, GraphNode, type ModuleReference } from '@eggjs/tegg-common-util';
2
+ import { type InjectObjectDescriptor, type ProtoDescriptor } from '@eggjs/tegg-types';
3
+ import { ModuleDependencyMeta, GlobalModuleNode } from './GlobalModuleNode.ts';
4
+ import { ProtoDependencyMeta, ProtoNode } from './ProtoNode.ts';
5
+ import type { ModuleDescriptor } from '../ModuleDescriptor.ts';
6
6
  export interface GlobalGraphOptions {
7
7
  strict?: boolean;
8
8
  }
@@ -57,7 +57,7 @@ export declare class GlobalGraph {
57
57
  addInject(moduleNode: GraphNode<GlobalModuleNode, ModuleDependencyMeta>, protoNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectName: PropertyKey): void;
58
58
  findInjectProto(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): ProtoDescriptor | undefined;
59
59
  findDependencyProtoNode(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): GraphNode<ProtoNode, ProtoDependencyMeta> | undefined;
60
- findModuleNode(moduleName: string): GraphNode<GlobalModuleNode, ModuleDependencyMeta> | undefined;
60
+ findModuleNode(moduleName: string): GraphNode<GlobalModuleNode, ModuleDependencyMeta>;
61
61
  sort(): void;
62
62
  static create(moduleDescriptors: ModuleDescriptor[], options?: GlobalGraphOptions): Promise<GlobalGraph>;
63
63
  }
@@ -0,0 +1,233 @@
1
+ import { debuglog } from 'node:util';
2
+ import { Graph, GraphNode } from '@eggjs/tegg-common-util';
3
+ import { InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, ObjectInitType, } from '@eggjs/tegg-types';
4
+ import { FrameworkErrorFormater } from 'egg-errors';
5
+ import { QualifierUtil } from '@eggjs/core-decorator';
6
+ import { EggPrototypeNotFound, MultiPrototypeFound } from "../../errors.js";
7
+ import { ModuleDependencyMeta, GlobalModuleNode } from "./GlobalModuleNode.js";
8
+ import { ProtoDependencyMeta, ProtoNode } from "./ProtoNode.js";
9
+ import { GlobalModuleNodeBuilder } from "./GlobalModuleNodeBuilder.js";
10
+ const debug = debuglog('tegg/core/metadata/model/graph/GlobalGraph');
11
+ /**
12
+ * Sort all prototypes and modules in app.
13
+ * - 1. LoaderFactory.loadApp: get ModuleDescriptors
14
+ * - 2. GlobalGraph.create: create global graph instance
15
+ * - 3. graph.build:
16
+ * - check duplicated prototypes exits
17
+ * - check inject object exists (only in strict mode,
18
+ * can register proto in hooks now, in next major version,
19
+ * should use load to create dynamic ProtoDescriptor and delete
20
+ * strict false options
21
+ * )
22
+ * - 4. graph.sort: build moduleConfigList and moduleProtoDescriptorMap
23
+ */
24
+ export class GlobalGraph {
25
+ /**
26
+ * Vertex: ModuleNode, collect prototypes in module
27
+ * Edge: ModuleDependencyMeta, prototype and it's inject object
28
+ * @private
29
+ */
30
+ moduleGraph;
31
+ /**
32
+ * Vertex: ProtoNode, collect all prototypes in app
33
+ * Edge: ProtoDependencyMeta, inject object
34
+ * @private
35
+ */
36
+ protoGraph;
37
+ /**
38
+ * The order of the moduleConfigList is the order in which they are instantiated
39
+ */
40
+ moduleConfigList;
41
+ /**
42
+ * key: module name
43
+ * value: ProtoDescriptor in module, the order is the order in which they are instantiated
44
+ */
45
+ moduleProtoDescriptorMap;
46
+ strict;
47
+ buildHooks;
48
+ /**
49
+ * The global instance used in ModuleLoadUnit
50
+ */
51
+ static instance;
52
+ constructor(options) {
53
+ this.moduleGraph = new Graph();
54
+ this.protoGraph = new Graph();
55
+ this.strict = options?.strict ?? false;
56
+ this.moduleProtoDescriptorMap = new Map();
57
+ this.buildHooks = [];
58
+ }
59
+ registerBuildHook(hook) {
60
+ this.buildHooks.push(hook);
61
+ }
62
+ addModuleNode(moduleNode) {
63
+ if (!this.moduleGraph.addVertex(new GraphNode(moduleNode))) {
64
+ throw new Error(`duplicate module: ${moduleNode}`);
65
+ }
66
+ for (const protoNode of moduleNode.protos) {
67
+ if (!this.protoGraph.addVertex(protoNode)) {
68
+ throw new Error(`duplicate proto: ${protoNode.val}`);
69
+ }
70
+ }
71
+ }
72
+ build() {
73
+ for (const moduleNode of this.moduleGraph.nodes.values()) {
74
+ for (const protoNode of moduleNode.val.protos) {
75
+ for (const injectObj of protoNode.val.proto.injectObjects) {
76
+ this.buildInjectEdge(moduleNode, protoNode, injectObj);
77
+ }
78
+ }
79
+ }
80
+ for (const buildHook of this.buildHooks) {
81
+ buildHook(this);
82
+ }
83
+ }
84
+ buildInjectEdge(moduleNode, protoNode, injectObj) {
85
+ const injectProto = this.findDependencyProtoNode(protoNode.val.proto, injectObj);
86
+ if (!injectProto) {
87
+ if (!this.strict) {
88
+ return;
89
+ }
90
+ throw FrameworkErrorFormater.formatError(new EggPrototypeNotFound(injectObj.objName, protoNode.val.proto.instanceModuleName));
91
+ }
92
+ this.addInject(moduleNode, protoNode, injectProto, injectObj.objName);
93
+ }
94
+ addInject(moduleNode, protoNode, injectNode, injectName) {
95
+ this.protoGraph.addEdge(protoNode, injectNode, new ProtoDependencyMeta({
96
+ injectObj: injectName,
97
+ }));
98
+ const injectModule = this.findModuleNode(injectNode.val.proto.instanceModuleName);
99
+ if (!injectModule) {
100
+ if (!this.strict) {
101
+ return;
102
+ }
103
+ throw new Error(`not found module ${injectNode.val.proto.instanceModuleName}`);
104
+ }
105
+ if (moduleNode.val.id !== injectModule.val.id) {
106
+ this.moduleGraph.addEdge(moduleNode, injectModule, new ModuleDependencyMeta(protoNode.val.proto, injectName));
107
+ }
108
+ }
109
+ findInjectProto(proto, injectObject) {
110
+ const edge = this.protoGraph.findToNode(ProtoNode.createProtoId(proto), new ProtoDependencyMeta({
111
+ injectObj: injectObject.objName,
112
+ }));
113
+ return edge?.val.proto;
114
+ }
115
+ #findDependencyProtoWithDefaultQualifiers(proto, injectObject, qualifiers) {
116
+ // TODO perf O(n(proto count)*m(inject count)*n)
117
+ const result = [];
118
+ for (const node of this.protoGraph.nodes.values()) {
119
+ if (node.val.selectProto({
120
+ name: injectObject.objName,
121
+ qualifiers: QualifierUtil.mergeQualifiers(injectObject.qualifiers, qualifiers),
122
+ moduleName: proto.instanceModuleName,
123
+ })) {
124
+ result.push(node);
125
+ }
126
+ }
127
+ return result;
128
+ }
129
+ findDependencyProtoNode(proto, injectObject) {
130
+ // 1. find proto with request
131
+ // 2. try to add Context qualifier to find
132
+ // 3. try to add self init type qualifier to find
133
+ const protos = this.#findDependencyProtoWithDefaultQualifiers(proto, injectObject, []);
134
+ if (protos.length === 0) {
135
+ return;
136
+ // throw FrameworkErrorFormater.formatError(new EggPrototypeNotFound(injectObject.objName, proto.instanceModuleName));
137
+ }
138
+ if (protos.length === 1) {
139
+ return protos[0];
140
+ }
141
+ const protoWithContext = this.#findDependencyProtoWithDefaultQualifiers(proto, injectObject, [{
142
+ attribute: InitTypeQualifierAttribute,
143
+ value: ObjectInitType.CONTEXT,
144
+ }]);
145
+ if (protoWithContext.length === 1) {
146
+ return protoWithContext[0];
147
+ }
148
+ const protoWithSelfInitType = this.#findDependencyProtoWithDefaultQualifiers(proto, injectObject, [{
149
+ attribute: InitTypeQualifierAttribute,
150
+ value: proto.initType,
151
+ }]);
152
+ if (protoWithSelfInitType.length === 1) {
153
+ return protoWithSelfInitType[0];
154
+ }
155
+ const loadUnitQualifier = injectObject.qualifiers.find(t => t.attribute === LoadUnitNameQualifierAttribute);
156
+ if (!loadUnitQualifier) {
157
+ return this.findDependencyProtoNode(proto, {
158
+ ...injectObject,
159
+ qualifiers: QualifierUtil.mergeQualifiers(injectObject.qualifiers, [{
160
+ attribute: LoadUnitNameQualifierAttribute,
161
+ value: proto.instanceModuleName,
162
+ }]),
163
+ });
164
+ }
165
+ throw FrameworkErrorFormater.formatError(new MultiPrototypeFound(injectObject.objName, injectObject.qualifiers));
166
+ }
167
+ findModuleNode(moduleName) {
168
+ for (const node of this.moduleGraph.nodes.values()) {
169
+ if (node.val.name === moduleName) {
170
+ return node;
171
+ }
172
+ }
173
+ }
174
+ #sortModule() {
175
+ const loopPath = this.moduleGraph.loopPath();
176
+ if (loopPath) {
177
+ throw new Error('module has recursive deps: ' + loopPath);
178
+ }
179
+ debug('sortModule, loopPath: %o', loopPath);
180
+ this.moduleConfigList = this.moduleGraph.sort()
181
+ .filter(t => {
182
+ return t.val.optional !== true || t.fromNodeMap.size > 0;
183
+ })
184
+ .map(t => {
185
+ return {
186
+ name: t.val.name,
187
+ path: t.val.unitPath,
188
+ optional: t.val.optional,
189
+ };
190
+ });
191
+ }
192
+ #sortClazz() {
193
+ const loopPath = this.protoGraph.loopPath();
194
+ if (loopPath) {
195
+ throw new Error('proto has recursive deps: ' + loopPath);
196
+ }
197
+ debug('sortClazz, loopPath: %o', loopPath);
198
+ for (const proto of this.protoGraph.sort()) {
199
+ // // ignore the proto has no dependent
200
+ // if (proto.fromNodeMap.size === 0) continue;
201
+ const instanceModuleName = proto.val.proto.instanceModuleName;
202
+ let moduleProtoList = this.moduleProtoDescriptorMap.get(instanceModuleName);
203
+ if (!moduleProtoList) {
204
+ moduleProtoList = [];
205
+ this.moduleProtoDescriptorMap.set(instanceModuleName, moduleProtoList);
206
+ }
207
+ moduleProtoList.push(proto.val.proto);
208
+ }
209
+ }
210
+ sort() {
211
+ this.#sortModule();
212
+ this.#sortClazz();
213
+ }
214
+ static async create(moduleDescriptors, options) {
215
+ const graph = new GlobalGraph(options);
216
+ for (const moduleDescriptor of moduleDescriptors) {
217
+ const moduleNodeBuilder = new GlobalModuleNodeBuilder({
218
+ name: moduleDescriptor.name,
219
+ unitPath: moduleDescriptor.unitPath,
220
+ optional: moduleDescriptor.optional ?? false,
221
+ });
222
+ for (const clazz of moduleDescriptor.clazzList) {
223
+ moduleNodeBuilder.addClazz(clazz);
224
+ }
225
+ for (const clazz of moduleDescriptor.multiInstanceClazzList) {
226
+ await moduleNodeBuilder.addMultiInstanceClazz(clazz, moduleDescriptor.name, moduleDescriptor.unitPath);
227
+ }
228
+ graph.addModuleNode(moduleNodeBuilder.build());
229
+ }
230
+ return graph;
231
+ }
232
+ }
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2xvYmFsR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvZ3JhcGgvR2xvYmFsR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBd0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRixPQUFPLEVBQ0wsMEJBQTBCLEVBQ0csOEJBQThCLEVBQzNELGNBQWMsR0FHZixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3ZFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBVXJFOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3RCOzs7O09BSUc7SUFDSCxXQUFXLENBQWdEO0lBQzNEOzs7O09BSUc7SUFDSCxVQUFVLENBQXdDO0lBQ2xEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQTZCO0lBQzdDOzs7T0FHRztJQUNILHdCQUF3QixDQUFpQztJQUN6RCxNQUFNLENBQVU7SUFDUixVQUFVLENBQXlCO0lBRTNDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBZTtJQUU5QixZQUFZLE9BQTRCO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQTBDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBa0MsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUEwQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQTRCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBeUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25HLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3pELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNkQsRUFBRSxTQUFvRCxFQUFFLFNBQWlDO1FBQ3BLLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2hJLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxDQUNQLFVBQTZELEVBQzdELFNBQW9ELEVBQ3BELFVBQXFELEVBQ3JELFVBQXVCO1FBRXZCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQztZQUNyRSxTQUFTLEVBQUUsVUFBVTtTQUN0QixDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNoSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFzQixFQUFFLFlBQW9DO1FBQzFFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQztZQUM5RixTQUFTLEVBQUUsWUFBWSxDQUFDLE9BQU87U0FDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCx5Q0FBeUMsQ0FBQyxLQUFzQixFQUFFLFlBQW9DLEVBQUUsVUFBMkI7UUFDakksZ0RBQWdEO1FBQ2hELE1BQU0sTUFBTSxHQUFnRCxFQUFFLENBQUM7UUFDL0QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTztnQkFDMUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQ3ZDLFlBQVksQ0FBQyxVQUFVLEVBQ3ZCLFVBQVUsQ0FDWDtnQkFDRCxVQUFVLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjthQUNyQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQXNCLEVBQUUsWUFBb0M7UUFDbEYsNkJBQTZCO1FBQzdCLDBDQUEwQztRQUMxQyxpREFBaUQ7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU87WUFDUCxzSEFBc0g7UUFDeEgsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUNBQXlDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUM1RixTQUFTLEVBQUUsMEJBQTBCO2dCQUNyQyxLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU87YUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ2pHLFNBQVMsRUFBRSwwQkFBMEI7Z0JBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTthQUN0QixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLDhCQUE4QixDQUFDLENBQUM7UUFDNUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFO2dCQUN6QyxHQUFHLFlBQVk7Z0JBQ2YsVUFBVSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQ3ZDLFlBQVksQ0FBQyxVQUFVLEVBQ3ZCLENBQUM7d0JBQ0MsU0FBUyxFQUFFLDhCQUE4Qjt3QkFDekMsS0FBSyxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7cUJBQ2hDLENBQUMsQ0FDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFrQjtRQUMvQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsS0FBSyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTthQUM1QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsT0FBTztnQkFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRO2dCQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsS0FBSyxDQUFDLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzNDLHVDQUF1QztZQUN2Qyw4Q0FBOEM7WUFDOUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUM5RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyQixlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQXFDLEVBQUUsT0FBNEI7UUFDckYsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDakQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHVCQUF1QixDQUFDO2dCQUNwRCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtnQkFDM0IsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVE7Z0JBQ25DLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksS0FBSzthQUM3QyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMvQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELEtBQUssTUFBTSxLQUFLLElBQUksZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIn0=
@@ -1,6 +1,6 @@
1
- import { GraphNode, GraphNodeObj, EdgeMeta } from '@eggjs/tegg-common-util';
2
- import { ProtoDescriptor } from '@eggjs/tegg-types';
3
- import { ProtoDependencyMeta, ProtoNode } from './ProtoNode.js';
1
+ import { GraphNode, type GraphNodeObj, type EdgeMeta } from '@eggjs/tegg-common-util';
2
+ import { type ProtoDescriptor } from '@eggjs/tegg-types';
3
+ import { ProtoDependencyMeta, ProtoNode } from './ProtoNode.ts';
4
4
  export interface GlobalModuleNodeOptions {
5
5
  name: string;
6
6
  unitPath: string;
@@ -0,0 +1,39 @@
1
+ import { GraphNode } from '@eggjs/tegg-common-util';
2
+ import {} from '@eggjs/tegg-types';
3
+ import { ProtoDependencyMeta, ProtoNode } from "./ProtoNode.js";
4
+ export class ModuleDependencyMeta {
5
+ obj;
6
+ injectObj;
7
+ constructor(obj, injectObj) {
8
+ this.obj = obj;
9
+ this.injectObj = injectObj;
10
+ }
11
+ equal(meta) {
12
+ return this.obj.equal(meta.obj)
13
+ && this.injectObj === meta.injectObj;
14
+ }
15
+ toString() {
16
+ return `Object ${String(this.obj.name)} inject ${String(this.injectObj)}`;
17
+ }
18
+ }
19
+ export class GlobalModuleNode {
20
+ id;
21
+ name;
22
+ unitPath;
23
+ optional;
24
+ protos;
25
+ constructor(options) {
26
+ this.id = options.unitPath;
27
+ this.name = options.name;
28
+ this.unitPath = options.unitPath;
29
+ this.optional = options.optional;
30
+ this.protos = [];
31
+ }
32
+ addProto(proto) {
33
+ this.protos.push(new GraphNode(new ProtoNode(proto)));
34
+ }
35
+ toString() {
36
+ return `${this.name}@${this.unitPath}`;
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2xvYmFsTW9kdWxlTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9ncmFwaC9HbG9iYWxNb2R1bGVOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUF3QixNQUFNLG1CQUFtQixDQUFDO0FBRXpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVFoRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLEdBQUcsQ0FBa0I7SUFDckIsU0FBUyxDQUFjO0lBRWhDLFlBQVksR0FBb0IsRUFBRSxTQUFzQjtRQUN0RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBMEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2VBQzFCLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixFQUFFLENBQVM7SUFDWCxJQUFJLENBQVM7SUFDYixRQUFRLENBQVM7SUFDakIsUUFBUSxDQUFVO0lBQ2xCLE1BQU0sQ0FBOEM7SUFFN0QsWUFBWSxPQUFnQztRQUMxQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQztDQUNGIn0=
@@ -1,5 +1,5 @@
1
- import { EggProtoImplClass } from '@eggjs/tegg-types';
2
- import { GlobalModuleNode, GlobalModuleNodeOptions } from './GlobalModuleNode.js';
1
+ import { type EggProtoImplClass } from '@eggjs/tegg-types';
2
+ import { GlobalModuleNode, type GlobalModuleNodeOptions } from './GlobalModuleNode.ts';
3
3
  export declare class GlobalModuleNodeBuilder {
4
4
  private readonly name;
5
5
  private readonly unitPath;