@eggjs/metadata 4.0.0-beta.35 → 4.0.0-beta.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/errors.d.ts +14 -10
  2. package/dist/errors.js +29 -27
  3. package/dist/factory/EggPrototypeCreatorFactory.d.ts +13 -8
  4. package/dist/factory/EggPrototypeCreatorFactory.js +94 -111
  5. package/dist/factory/EggPrototypeFactory.d.ts +12 -8
  6. package/dist/factory/EggPrototypeFactory.js +40 -51
  7. package/dist/factory/LoadUnitFactory.d.ts +15 -11
  8. package/dist/factory/LoadUnitFactory.js +58 -59
  9. package/dist/factory/index.d.ts +3 -3
  10. package/dist/factory/index.js +5 -4
  11. package/dist/impl/EggPrototypeBuilder.d.ts +25 -21
  12. package/dist/impl/EggPrototypeBuilder.js +111 -126
  13. package/dist/impl/EggPrototypeImpl.d.ts +27 -23
  14. package/dist/impl/EggPrototypeImpl.js +52 -53
  15. package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +10 -6
  16. package/dist/impl/LoadUnitMultiInstanceProtoHook.js +16 -18
  17. package/dist/impl/ModuleLoadUnit.d.ts +37 -33
  18. package/dist/impl/ModuleLoadUnit.js +208 -261
  19. package/dist/impl/index.d.ts +4 -4
  20. package/dist/impl/index.js +6 -5
  21. package/dist/index.d.ts +27 -6
  22. package/dist/index.js +28 -7
  23. package/dist/model/AppGraph.d.ts +38 -35
  24. package/dist/model/AppGraph.js +190 -253
  25. package/dist/model/EggPrototype.d.ts +7 -3
  26. package/dist/model/EggPrototype.js +7 -3
  27. package/dist/model/LoadUnit.d.ts +7 -3
  28. package/dist/model/LoadUnit.js +7 -3
  29. package/dist/model/ModuleDescriptor.d.ts +19 -15
  30. package/dist/model/ModuleDescriptor.js +32 -46
  31. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +34 -30
  32. package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +35 -31
  33. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +14 -10
  34. package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +26 -29
  35. package/dist/model/ProtoDescriptor/index.d.ts +2 -2
  36. package/dist/model/ProtoDescriptor/index.js +4 -3
  37. package/dist/model/ProtoDescriptorHelper.d.ts +30 -25
  38. package/dist/model/ProtoDescriptorHelper.js +113 -129
  39. package/dist/model/graph/GlobalGraph.d.ts +64 -60
  40. package/dist/model/graph/GlobalGraph.js +173 -237
  41. package/dist/model/graph/GlobalModuleNode.d.ts +26 -22
  42. package/dist/model/graph/GlobalModuleNode.js +42 -38
  43. package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +16 -12
  44. package/dist/model/graph/GlobalModuleNodeBuilder.js +53 -52
  45. package/dist/model/graph/ProtoNode.d.ts +22 -16
  46. package/dist/model/graph/ProtoNode.js +42 -39
  47. package/dist/model/graph/ProtoSelector.d.ts +9 -5
  48. package/dist/model/graph/ProtoSelector.js +3 -2
  49. package/dist/model/graph/index.d.ts +5 -5
  50. package/dist/model/graph/index.js +7 -6
  51. package/dist/model/index.d.ts +14 -7
  52. package/dist/model/index.js +15 -8
  53. package/dist/util/ClassUtil.d.ts +8 -4
  54. package/dist/util/ClassUtil.js +18 -17
  55. package/dist/util/index.d.ts +1 -1
  56. package/dist/util/index.js +3 -2
  57. package/package.json +28 -32
@@ -1,129 +1,113 @@
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
- {
10
- attribute: InitTypeQualifierAttribute,
11
- value: initType,
12
- },
13
- {
14
- attribute: LoadUnitNameQualifierAttribute,
15
- value: loadUnitName,
16
- },
17
- ];
18
- const res = [...qualifiers];
19
- for (const defaultQualifier of defaultQualifiers) {
20
- if (!qualifiers.find((t) => t.attribute === defaultQualifier.attribute)) {
21
- res.push(defaultQualifier);
22
- }
23
- }
24
- return res;
25
- }
26
- static async createByMultiInstanceClazz(clazz, options) {
27
- assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
28
- const type = PrototypeUtil.getEggMultiInstancePrototypeType(clazz);
29
- if (type === MultiInstanceType.DYNAMIC) {
30
- return await ProtoDescriptorHelper.createByDynamicMultiInstanceClazz(clazz, options);
31
- }
32
- else if (type === MultiInstanceType.STATIC) {
33
- // static multi instance proto create only in self module
34
- if (options.defineModuleName === options.instanceModuleName) {
35
- return ProtoDescriptorHelper.createByStaticMultiInstanceClazz(clazz, options);
36
- }
37
- }
38
- return [];
39
- }
40
- static async createByDynamicMultiInstanceClazz(clazz, options) {
41
- assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
42
- const instanceProperty = await PrototypeUtil.getDynamicMultiInstanceProperty(clazz, {
43
- moduleName: options.instanceModuleName,
44
- unitPath: options.instanceDefineUnitPath,
45
- });
46
- assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
47
- return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
48
- }
49
- static createByStaticMultiInstanceClazz(clazz, options) {
50
- assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
51
- const instanceProperty = PrototypeUtil.getStaticMultiInstanceProperty(clazz);
52
- assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
53
- return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
54
- }
55
- static #createByMultiInstanceClazz(clazz, instanceProperty, options) {
56
- const res = [];
57
- for (const obj of instanceProperty.objects) {
58
- let qualifiers = QualifierUtil.mergeQualifiers(QualifierUtil.getProtoQualifiers(clazz), obj.qualifiers);
59
- qualifiers = ProtoDescriptorHelper.addDefaultQualifier(qualifiers, instanceProperty.initType, options.instanceModuleName);
60
- const injectObjects = PrototypeUtil.getInjectObjects(clazz).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).map((t) => {
92
- const qualifiers = QualifierUtil.getProperQualifiers(clazz, t.refName);
93
- return {
94
- ...t,
95
- qualifiers,
96
- };
97
- });
98
- return new ClassProtoDescriptor({
99
- name: property.name,
100
- protoImplType: property.protoImplType,
101
- accessLevel: property.accessLevel,
102
- initType: property.initType,
103
- qualifiers: protoQualifiers,
104
- injectObjects,
105
- instanceDefineUnitPath: ctx.unitPath,
106
- instanceModuleName: ctx.moduleName,
107
- defineUnitPath: ctx.unitPath,
108
- defineModuleName: ctx.moduleName,
109
- clazz,
110
- properQualifiers: {},
111
- });
112
- }
113
- static selectProto(proto, ctx) {
114
- // 1. name match
115
- if (proto.name !== ctx.name) {
116
- return false;
117
- }
118
- // 2. access level match
119
- if (proto.accessLevel !== AccessLevel.PUBLIC && proto.instanceModuleName !== ctx.moduleName) {
120
- return false;
121
- }
122
- // 3. qualifier match
123
- if (!QualifierUtil.matchQualifiers(proto.qualifiers, ctx.qualifiers)) {
124
- return false;
125
- }
126
- return true;
127
- }
128
- }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdG9EZXNjcmlwdG9ySGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL1Byb3RvRGVzY3JpcHRvckhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFzQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekcsT0FBTyxFQUVMLDBCQUEwQixFQUUxQiw4QkFBOEIsRUFJOUIsV0FBVyxFQUVYLGlCQUFpQixHQUNsQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBNkIsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDeEIsVUFBMkIsRUFDM0IsUUFBNEIsRUFDNUIsWUFBb0I7UUFFcEIsTUFBTSxpQkFBaUIsR0FBRztZQUN4QjtnQkFDRSxTQUFTLEVBQUUsMEJBQTBCO2dCQUNyQyxLQUFLLEVBQUUsUUFBUTthQUNoQjtZQUNEO2dCQUNFLFNBQVMsRUFBRSw4QkFBOEI7Z0JBQ3pDLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM1QixLQUFLLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FB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
1
+ import { ClassProtoDescriptor } from "./ProtoDescriptor/ClassProtoDescriptor.js";
2
+ import "./ProtoDescriptor/index.js";
3
+ import "./graph/index.js";
4
+ import { AccessLevel, InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, MultiInstanceType } from "@eggjs/tegg-types";
5
+ import assert from "node:assert";
6
+ import { PrototypeUtil, QualifierUtil } from "@eggjs/core-decorator";
7
+
8
+ //#region src/model/ProtoDescriptorHelper.ts
9
+ var ProtoDescriptorHelper = class ProtoDescriptorHelper {
10
+ static addDefaultQualifier(qualifiers, initType, loadUnitName) {
11
+ const defaultQualifiers = [{
12
+ attribute: InitTypeQualifierAttribute,
13
+ value: initType
14
+ }, {
15
+ attribute: LoadUnitNameQualifierAttribute,
16
+ value: loadUnitName
17
+ }];
18
+ const res = [...qualifiers];
19
+ for (const defaultQualifier of defaultQualifiers) if (!qualifiers.find((t) => t.attribute === defaultQualifier.attribute)) res.push(defaultQualifier);
20
+ return res;
21
+ }
22
+ static async createByMultiInstanceClazz(clazz, options) {
23
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
24
+ const type = PrototypeUtil.getEggMultiInstancePrototypeType(clazz);
25
+ if (type === MultiInstanceType.DYNAMIC) return await ProtoDescriptorHelper.createByDynamicMultiInstanceClazz(clazz, options);
26
+ else if (type === MultiInstanceType.STATIC) {
27
+ if (options.defineModuleName === options.instanceModuleName) return ProtoDescriptorHelper.createByStaticMultiInstanceClazz(clazz, options);
28
+ }
29
+ return [];
30
+ }
31
+ static async createByDynamicMultiInstanceClazz(clazz, options) {
32
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
33
+ const instanceProperty = await PrototypeUtil.getDynamicMultiInstanceProperty(clazz, {
34
+ moduleName: options.instanceModuleName,
35
+ unitPath: options.instanceDefineUnitPath
36
+ });
37
+ assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
38
+ return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
39
+ }
40
+ static createByStaticMultiInstanceClazz(clazz, options) {
41
+ assert(PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not MultiInstancePrototype`);
42
+ const instanceProperty = PrototypeUtil.getStaticMultiInstanceProperty(clazz);
43
+ assert(instanceProperty, `not found PrototypeInfo for clazz ${clazz.name}`);
44
+ return ProtoDescriptorHelper.#createByMultiInstanceClazz(clazz, instanceProperty, options);
45
+ }
46
+ static #createByMultiInstanceClazz(clazz, instanceProperty, options) {
47
+ const res = [];
48
+ for (const obj of instanceProperty.objects) {
49
+ let qualifiers = QualifierUtil.mergeQualifiers(QualifierUtil.getProtoQualifiers(clazz), obj.qualifiers);
50
+ qualifiers = ProtoDescriptorHelper.addDefaultQualifier(qualifiers, instanceProperty.initType, options.instanceModuleName);
51
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz).map((t) => {
52
+ const qualifiers$1 = QualifierUtil.getProperQualifiers(clazz, t.refName);
53
+ const instanceQualifier = obj.properQualifiers?.[t.refName] ?? [];
54
+ return {
55
+ ...t,
56
+ qualifiers: QualifierUtil.mergeQualifiers(qualifiers$1, instanceQualifier)
57
+ };
58
+ });
59
+ res.push(new ClassProtoDescriptor({
60
+ name: obj.name,
61
+ accessLevel: instanceProperty.accessLevel,
62
+ initType: instanceProperty.initType,
63
+ protoImplType: instanceProperty.protoImplType,
64
+ qualifiers,
65
+ injectObjects,
66
+ instanceModuleName: options.instanceModuleName,
67
+ instanceDefineUnitPath: options.instanceDefineUnitPath,
68
+ defineModuleName: options.defineModuleName,
69
+ defineUnitPath: options.defineUnitPath,
70
+ clazz,
71
+ properQualifiers: obj.properQualifiers || {}
72
+ }));
73
+ }
74
+ return res;
75
+ }
76
+ static createByInstanceClazz(clazz, ctx) {
77
+ assert(PrototypeUtil.isEggPrototype(clazz), `clazz ${clazz.name} is not EggPrototype`);
78
+ assert(!PrototypeUtil.isEggMultiInstancePrototype(clazz), `clazz ${clazz.name} is not Prototype`);
79
+ const property = PrototypeUtil.getProperty(clazz);
80
+ assert(property, `not found PrototypeInfo for clazz ${clazz.name}`);
81
+ const protoQualifiers = ProtoDescriptorHelper.addDefaultQualifier(QualifierUtil.getProtoQualifiers(clazz), property.initType, ctx.moduleName);
82
+ const injectObjects = PrototypeUtil.getInjectObjects(clazz).map((t) => {
83
+ const qualifiers = QualifierUtil.getProperQualifiers(clazz, t.refName);
84
+ return {
85
+ ...t,
86
+ qualifiers
87
+ };
88
+ });
89
+ return new ClassProtoDescriptor({
90
+ name: property.name,
91
+ protoImplType: property.protoImplType,
92
+ accessLevel: property.accessLevel,
93
+ initType: property.initType,
94
+ qualifiers: protoQualifiers,
95
+ injectObjects,
96
+ instanceDefineUnitPath: ctx.unitPath,
97
+ instanceModuleName: ctx.moduleName,
98
+ defineUnitPath: ctx.unitPath,
99
+ defineModuleName: ctx.moduleName,
100
+ clazz,
101
+ properQualifiers: {}
102
+ });
103
+ }
104
+ static selectProto(proto, ctx) {
105
+ if (proto.name !== ctx.name) return false;
106
+ if (proto.accessLevel !== AccessLevel.PUBLIC && proto.instanceModuleName !== ctx.moduleName) return false;
107
+ if (!QualifierUtil.matchQualifiers(proto.qualifiers, ctx.qualifiers)) return false;
108
+ return true;
109
+ }
110
+ };
111
+
112
+ //#endregion
113
+ export { ProtoDescriptorHelper };
@@ -1,63 +1,67 @@
1
- import { Graph, GraphNode, type ModuleReference } from '@eggjs/tegg-common-util';
2
- import { type InjectObjectDescriptor, type ProtoDescriptor } from '@eggjs/tegg-types';
3
- import type { ModuleDescriptor } from '../ModuleDescriptor.ts';
4
- import { ModuleDependencyMeta, GlobalModuleNode } from './GlobalModuleNode.ts';
5
- import { ProtoDependencyMeta, ProtoNode } from './ProtoNode.ts';
6
- export interface GlobalGraphOptions {
7
- strict?: boolean;
1
+ import { ModuleDescriptor } from "../ModuleDescriptor.js";
2
+ import { ProtoDependencyMeta, ProtoNode } from "./ProtoNode.js";
3
+ import { GlobalModuleNode, ModuleDependencyMeta } from "./GlobalModuleNode.js";
4
+ import { Graph, GraphNode, ModuleReference } from "@eggjs/tegg-common-util";
5
+ import { InjectObjectDescriptor, ProtoDescriptor } from "@eggjs/tegg-types";
6
+
7
+ //#region src/model/graph/GlobalGraph.d.ts
8
+ interface GlobalGraphOptions {
9
+ strict?: boolean;
8
10
  }
9
- export type GlobalGraphBuildHook = (globalGraph: GlobalGraph) => void;
11
+ type GlobalGraphBuildHook = (globalGraph: GlobalGraph) => void;
10
12
  /**
11
- * Sort all prototypes and modules in app.
12
- * - 1. LoaderFactory.loadApp: get ModuleDescriptors
13
- * - 2. GlobalGraph.create: create global graph instance
14
- * - 3. graph.build:
15
- * - check duplicated prototypes exits
16
- * - check inject object exists (only in strict mode,
17
- * can register proto in hooks now, in next major version,
18
- * should use load to create dynamic ProtoDescriptor and delete
19
- * strict false options
20
- * )
21
- * - 4. graph.sort: build moduleConfigList and moduleProtoDescriptorMap
22
- */
23
- export declare class GlobalGraph {
24
- #private;
25
- /**
26
- * Vertex: ModuleNode, collect prototypes in module
27
- * Edge: ModuleDependencyMeta, prototype and it's inject object
28
- * @private
29
- */
30
- moduleGraph: Graph<GlobalModuleNode, ModuleDependencyMeta>;
31
- /**
32
- * Vertex: ProtoNode, collect all prototypes in app
33
- * Edge: ProtoDependencyMeta, inject object
34
- * @private
35
- */
36
- protoGraph: Graph<ProtoNode, ProtoDependencyMeta>;
37
- /**
38
- * The order of the moduleConfigList is the order in which they are instantiated
39
- */
40
- moduleConfigList: readonly ModuleReference[];
41
- /**
42
- * key: module name
43
- * value: ProtoDescriptor in module, the order is the order in which they are instantiated
44
- */
45
- moduleProtoDescriptorMap: Map<string, ProtoDescriptor[]>;
46
- strict: boolean;
47
- private buildHooks;
48
- /**
49
- * The global instance used in ModuleLoadUnit
50
- */
51
- static instance?: GlobalGraph;
52
- constructor(options?: GlobalGraphOptions);
53
- registerBuildHook(hook: GlobalGraphBuildHook): void;
54
- addModuleNode(moduleNode: GlobalModuleNode): void;
55
- build(): void;
56
- buildInjectEdge(moduleNode: GraphNode<GlobalModuleNode, ModuleDependencyMeta>, protoNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectObj: InjectObjectDescriptor): void;
57
- addInject(moduleNode: GraphNode<GlobalModuleNode, ModuleDependencyMeta>, protoNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectName: PropertyKey): void;
58
- findInjectProto(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): ProtoDescriptor | undefined;
59
- findDependencyProtoNode(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): GraphNode<ProtoNode, ProtoDependencyMeta> | undefined;
60
- findModuleNode(moduleName: string): GraphNode<GlobalModuleNode, ModuleDependencyMeta> | undefined;
61
- sort(): void;
62
- static create(moduleDescriptors: ModuleDescriptor[], options?: GlobalGraphOptions): Promise<GlobalGraph>;
13
+ * Sort all prototypes and modules in app.
14
+ * - 1. LoaderFactory.loadApp: get ModuleDescriptors
15
+ * - 2. GlobalGraph.create: create global graph instance
16
+ * - 3. graph.build:
17
+ * - check duplicated prototypes exits
18
+ * - check inject object exists (only in strict mode,
19
+ * can register proto in hooks now, in next major version,
20
+ * should use load to create dynamic ProtoDescriptor and delete
21
+ * strict false options
22
+ * )
23
+ * - 4. graph.sort: build moduleConfigList and moduleProtoDescriptorMap
24
+ */
25
+ declare class GlobalGraph {
26
+ #private;
27
+ /**
28
+ * Vertex: ModuleNode, collect prototypes in module
29
+ * Edge: ModuleDependencyMeta, prototype and it's inject object
30
+ * @private
31
+ */
32
+ moduleGraph: Graph<GlobalModuleNode, ModuleDependencyMeta>;
33
+ /**
34
+ * Vertex: ProtoNode, collect all prototypes in app
35
+ * Edge: ProtoDependencyMeta, inject object
36
+ * @private
37
+ */
38
+ protoGraph: Graph<ProtoNode, ProtoDependencyMeta>;
39
+ /**
40
+ * The order of the moduleConfigList is the order in which they are instantiated
41
+ */
42
+ moduleConfigList: readonly ModuleReference[];
43
+ /**
44
+ * key: module name
45
+ * value: ProtoDescriptor in module, the order is the order in which they are instantiated
46
+ */
47
+ moduleProtoDescriptorMap: Map<string, ProtoDescriptor[]>;
48
+ strict: boolean;
49
+ private buildHooks;
50
+ /**
51
+ * The global instance used in ModuleLoadUnit
52
+ */
53
+ static instance?: GlobalGraph;
54
+ constructor(options?: GlobalGraphOptions);
55
+ registerBuildHook(hook: GlobalGraphBuildHook): void;
56
+ addModuleNode(moduleNode: GlobalModuleNode): void;
57
+ build(): void;
58
+ buildInjectEdge(moduleNode: GraphNode<GlobalModuleNode, ModuleDependencyMeta>, protoNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectObj: InjectObjectDescriptor): void;
59
+ addInject(moduleNode: GraphNode<GlobalModuleNode, ModuleDependencyMeta>, protoNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectNode: GraphNode<ProtoNode, ProtoDependencyMeta>, injectName: PropertyKey): void;
60
+ findInjectProto(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): ProtoDescriptor | undefined;
61
+ findDependencyProtoNode(proto: ProtoDescriptor, injectObject: InjectObjectDescriptor): GraphNode<ProtoNode, ProtoDependencyMeta> | undefined;
62
+ findModuleNode(moduleName: string): GraphNode<GlobalModuleNode, ModuleDependencyMeta> | undefined;
63
+ sort(): void;
64
+ static create(moduleDescriptors: ModuleDescriptor[], options?: GlobalGraphOptions): Promise<GlobalGraph>;
63
65
  }
66
+ //#endregion
67
+ export { GlobalGraph, GlobalGraphBuildHook, GlobalGraphOptions };