@eggjs/metadata 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.js +27 -0
- package/dist/factory/EggPrototypeCreatorFactory.d.ts +9 -0
- package/dist/factory/EggPrototypeCreatorFactory.js +111 -0
- package/dist/factory/EggPrototypeFactory.d.ts +9 -0
- package/dist/factory/EggPrototypeFactory.js +52 -0
- package/dist/factory/LoadUnitFactory.d.ts +12 -0
- package/dist/factory/LoadUnitFactory.js +59 -0
- package/dist/factory/index.d.ts +3 -0
- package/dist/factory/index.js +4 -0
- package/dist/impl/EggPrototypeBuilder.d.ts +22 -0
- package/dist/impl/EggPrototypeBuilder.js +129 -0
- package/dist/impl/EggPrototypeImpl.d.ts +24 -0
- package/dist/impl/EggPrototypeImpl.js +53 -0
- package/dist/impl/LoadUnitMultiInstanceProtoHook.d.ts +7 -0
- package/dist/impl/LoadUnitMultiInstanceProtoHook.js +18 -0
- package/dist/impl/ModuleLoadUnit.d.ts +35 -0
- package/dist/impl/ModuleLoadUnit.js +264 -0
- package/dist/impl/index.d.ts +4 -0
- package/dist/impl/index.js +5 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/model/AppGraph.d.ts +39 -0
- package/dist/model/AppGraph.js +257 -0
- package/dist/model/EggPrototype.d.ts +3 -0
- package/dist/model/EggPrototype.js +3 -0
- package/dist/model/LoadUnit.d.ts +3 -0
- package/dist/model/LoadUnit.js +3 -0
- package/dist/model/ModuleDescriptor.d.ts +18 -0
- package/dist/model/ModuleDescriptor.js +47 -0
- package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +32 -0
- package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +31 -0
- package/dist/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +12 -0
- package/dist/model/ProtoDescriptor/ClassProtoDescriptor.js +30 -0
- package/dist/model/ProtoDescriptor/index.d.ts +2 -0
- package/dist/model/ProtoDescriptor/index.js +3 -0
- package/dist/model/ProtoDescriptorHelper.d.ts +26 -0
- package/dist/model/ProtoDescriptorHelper.js +129 -0
- package/dist/model/graph/GlobalGraph.d.ts +63 -0
- package/dist/model/graph/GlobalGraph.js +240 -0
- package/dist/model/graph/GlobalModuleNode.d.ts +25 -0
- package/dist/model/graph/GlobalModuleNode.js +38 -0
- package/dist/model/graph/GlobalModuleNodeBuilder.d.ts +13 -0
- package/dist/model/graph/GlobalModuleNodeBuilder.js +54 -0
- package/dist/model/graph/ProtoNode.d.ts +19 -0
- package/dist/model/graph/ProtoNode.js +40 -0
- package/dist/model/graph/ProtoSelector.d.ts +6 -0
- package/dist/model/graph/ProtoSelector.js +2 -0
- package/dist/model/graph/index.d.ts +5 -0
- package/dist/model/graph/index.js +6 -0
- package/dist/model/index.d.ts +7 -0
- package/dist/model/index.js +8 -0
- package/dist/util/ClassUtil.d.ts +5 -0
- package/dist/util/ClassUtil.js +17 -0
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +2 -0
- package/package.json +59 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
2
|
+
export class LoadUnitMultiInstanceProtoHook {
|
|
3
|
+
static multiInstanceClazzSet = new Set();
|
|
4
|
+
static setAllClassList(clazzList) {
|
|
5
|
+
for (const clazz of clazzList) {
|
|
6
|
+
if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
|
|
7
|
+
this.multiInstanceClazzSet.add(clazz);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
static clear() {
|
|
12
|
+
this.multiInstanceClazzSet.clear();
|
|
13
|
+
}
|
|
14
|
+
async preCreate() {
|
|
15
|
+
// ...
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRNdWx0aUluc3RhbmNlUHJvdG9Ib29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcGwvTG9hZFVuaXRNdWx0aUluc3RhbmNlUHJvdG9Ib29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd0RCxNQUFNLE9BQU8sOEJBQThCO0lBQ3pDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBMkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVqRSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQXVDO1FBQzVELEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxhQUFhLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNWLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNO0lBQ1IsQ0FBQyJ9
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EggLoadUnitType } from '@eggjs/tegg-types';
|
|
2
|
+
import type { EggProtoImplClass, EggPrototype, LoadUnit, LoadUnitLifecycleContext, QualifierInfo } from '@eggjs/tegg-types';
|
|
3
|
+
import { GlobalGraph } from '../model/index.ts';
|
|
4
|
+
export declare class ModuleGraph {
|
|
5
|
+
private graph;
|
|
6
|
+
clazzList: EggProtoImplClass[];
|
|
7
|
+
readonly unitPath: string;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
constructor(clazzList: EggProtoImplClass[], unitPath: string, name: string);
|
|
10
|
+
private findInjectNode;
|
|
11
|
+
build(): Promise<void>;
|
|
12
|
+
sort(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare class ModuleLoadUnit implements LoadUnit {
|
|
15
|
+
private protoMap;
|
|
16
|
+
private protos;
|
|
17
|
+
private clazzList;
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly unitPath: string;
|
|
21
|
+
readonly type: EggLoadUnitType;
|
|
22
|
+
get globalGraph(): GlobalGraph;
|
|
23
|
+
constructor(name: string, unitPath: string);
|
|
24
|
+
private doLoadClazz;
|
|
25
|
+
private loadClazz;
|
|
26
|
+
preLoad(): Promise<void>;
|
|
27
|
+
init(): Promise<void>;
|
|
28
|
+
containPrototype(proto: EggPrototype): boolean;
|
|
29
|
+
getEggPrototype(name: string, qualifiers: QualifierInfo[]): EggPrototype[];
|
|
30
|
+
registerEggPrototype(proto: EggPrototype): void;
|
|
31
|
+
deletePrototype(proto: EggPrototype): void;
|
|
32
|
+
destroy(): Promise<void>;
|
|
33
|
+
iterateEggPrototype(): IterableIterator<EggPrototype>;
|
|
34
|
+
static createModule(ctx: LoadUnitLifecycleContext): ModuleLoadUnit;
|
|
35
|
+
}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { debuglog } from 'node:util';
|
|
5
|
+
import { EggLoadUnitType, InitTypeQualifierAttribute, } from '@eggjs/tegg-types';
|
|
6
|
+
import { Graph, GraphNode, MapUtil } from '@eggjs/tegg-common-util';
|
|
7
|
+
import { IdenticalUtil, LifecycleUtil } from '@eggjs/lifecycle';
|
|
8
|
+
import { FrameworkErrorFormatter } from '@eggjs/errors';
|
|
9
|
+
import { PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
|
|
10
|
+
import { EggPrototypeFactory, LoadUnitFactory, EggPrototypeCreatorFactory } from "../factory/index.js";
|
|
11
|
+
import { ClassProtoDescriptor, GlobalGraph } from "../model/index.js";
|
|
12
|
+
import { MultiPrototypeFound } from "../errors.js";
|
|
13
|
+
const debug = debuglog('tegg/core/metadata/impl/ModuleLoadUnit');
|
|
14
|
+
let id = 0;
|
|
15
|
+
// TODO del ModuleGraph in next major version
|
|
16
|
+
class ProtoNode {
|
|
17
|
+
clazz;
|
|
18
|
+
name;
|
|
19
|
+
id;
|
|
20
|
+
qualifiers;
|
|
21
|
+
initType;
|
|
22
|
+
PrototypeUtil;
|
|
23
|
+
constructor(clazz, objName, initType, qualifiers) {
|
|
24
|
+
this.name = objName;
|
|
25
|
+
this.id = '' + id++;
|
|
26
|
+
this.clazz = clazz;
|
|
27
|
+
this.qualifiers = qualifiers;
|
|
28
|
+
this.initType = initType;
|
|
29
|
+
}
|
|
30
|
+
verifyQualifiers(qualifiers) {
|
|
31
|
+
for (const qualifier of qualifiers) {
|
|
32
|
+
if (!this.verifyQualifier(qualifier)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
verifyQualifier(qualifier) {
|
|
39
|
+
const selfQualifiers = this.qualifiers.find((t) => t.attribute === qualifier.attribute);
|
|
40
|
+
return selfQualifiers?.value === qualifier.value;
|
|
41
|
+
}
|
|
42
|
+
toString() {
|
|
43
|
+
return `${this.clazz.name}@${this.PrototypeUtil.getFilePath(this.clazz)}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class ModuleGraph {
|
|
47
|
+
graph;
|
|
48
|
+
clazzList;
|
|
49
|
+
unitPath;
|
|
50
|
+
name;
|
|
51
|
+
constructor(clazzList, unitPath, name) {
|
|
52
|
+
this.clazzList = clazzList;
|
|
53
|
+
this.graph = new Graph();
|
|
54
|
+
this.unitPath = unitPath;
|
|
55
|
+
this.name = name;
|
|
56
|
+
debug('ModuleGraph constructor on moduleName: %o, unitPath: %o, clazzList size: %o', this.name, this.unitPath, this.clazzList.length);
|
|
57
|
+
}
|
|
58
|
+
findInjectNode(objName, qualifiers, parentInitTye) {
|
|
59
|
+
let nodes = Array.from(this.graph.nodes.values())
|
|
60
|
+
.filter((t) => t.val.name === objName)
|
|
61
|
+
.filter((t) => t.val.verifyQualifiers(qualifiers));
|
|
62
|
+
if (nodes.length === 0) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
if (nodes.length === 1) {
|
|
66
|
+
return nodes[0];
|
|
67
|
+
}
|
|
68
|
+
const initTypeQualifier = {
|
|
69
|
+
attribute: InitTypeQualifierAttribute,
|
|
70
|
+
value: parentInitTye,
|
|
71
|
+
};
|
|
72
|
+
nodes = nodes.filter((t) => t.val.verifyQualifiers([initTypeQualifier]));
|
|
73
|
+
if (nodes.length === 1) {
|
|
74
|
+
return nodes[0];
|
|
75
|
+
}
|
|
76
|
+
const temp = new Map();
|
|
77
|
+
for (const node of nodes) {
|
|
78
|
+
temp.set(node.val.clazz, node);
|
|
79
|
+
}
|
|
80
|
+
nodes = Array.from(temp.values());
|
|
81
|
+
if (nodes.length === 1) {
|
|
82
|
+
return nodes[0];
|
|
83
|
+
}
|
|
84
|
+
const result = nodes.map((node) => node.val.toString());
|
|
85
|
+
throw FrameworkErrorFormatter.formatError(new MultiPrototypeFound(String(objName), qualifiers, JSON.stringify(result)));
|
|
86
|
+
}
|
|
87
|
+
async build() {
|
|
88
|
+
const protoGraphNodes = [];
|
|
89
|
+
for (const clazz of this.clazzList) {
|
|
90
|
+
if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
|
|
91
|
+
const properties = await PrototypeUtil.getMultiInstanceProperty(clazz, {
|
|
92
|
+
unitPath: this.unitPath,
|
|
93
|
+
moduleName: this.name,
|
|
94
|
+
});
|
|
95
|
+
if (properties) {
|
|
96
|
+
const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
|
|
97
|
+
for (const obj of properties.objects || []) {
|
|
98
|
+
const instanceQualifiers = [...qualifiers, ...obj.qualifiers];
|
|
99
|
+
protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, obj.name, properties.initType, instanceQualifiers)));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const qualifiers = QualifierUtil.getProtoQualifiers(clazz);
|
|
105
|
+
const property = PrototypeUtil.getProperty(clazz);
|
|
106
|
+
if (property) {
|
|
107
|
+
protoGraphNodes.push(new GraphNode(new ProtoNode(clazz, property.name, property.initType, qualifiers)));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const node of protoGraphNodes) {
|
|
112
|
+
if (!this.graph.addVertex(node)) {
|
|
113
|
+
throw new Error(`duplicate proto: ${node.val.id}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (const node of protoGraphNodes) {
|
|
117
|
+
if (PrototypeUtil.isEggMultiInstancePrototype(node.val.clazz)) {
|
|
118
|
+
const property = await PrototypeUtil.getMultiInstanceProperty(node.val.clazz, {
|
|
119
|
+
moduleName: this.name,
|
|
120
|
+
unitPath: this.unitPath,
|
|
121
|
+
});
|
|
122
|
+
for (const objectInfo of property?.objects || []) {
|
|
123
|
+
const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
|
|
124
|
+
for (const injectObject of injectObjects) {
|
|
125
|
+
const qualifiers = [
|
|
126
|
+
...QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName),
|
|
127
|
+
...(objectInfo.properQualifiers?.[injectObject.refName] ?? []),
|
|
128
|
+
];
|
|
129
|
+
const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
|
|
130
|
+
// If not found maybe in other module
|
|
131
|
+
if (injectNode) {
|
|
132
|
+
this.graph.addEdge(node, injectNode);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const injectObjects = PrototypeUtil.getInjectObjects(node.val.clazz);
|
|
139
|
+
for (const injectObject of injectObjects) {
|
|
140
|
+
const qualifiers = QualifierUtil.getProperQualifiers(node.val.clazz, injectObject.refName);
|
|
141
|
+
const injectNode = this.findInjectNode(injectObject.objName, qualifiers, node.val.initType);
|
|
142
|
+
// If not found maybe in other module
|
|
143
|
+
if (injectNode) {
|
|
144
|
+
this.graph.addEdge(node, injectNode);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
sort() {
|
|
151
|
+
const loopPath = this.graph.loopPath();
|
|
152
|
+
if (loopPath) {
|
|
153
|
+
throw new Error('proto has recursive deps: ' + loopPath);
|
|
154
|
+
}
|
|
155
|
+
const clazzSet = new Set();
|
|
156
|
+
for (const clazz of this.graph.sort()) {
|
|
157
|
+
clazzSet.add(clazz.val.clazz);
|
|
158
|
+
}
|
|
159
|
+
this.clazzList = Array.from(clazzSet);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export class ModuleLoadUnit {
|
|
163
|
+
// private loader: Loader;
|
|
164
|
+
protoMap = new Map();
|
|
165
|
+
protos;
|
|
166
|
+
clazzList;
|
|
167
|
+
id;
|
|
168
|
+
name;
|
|
169
|
+
unitPath;
|
|
170
|
+
type = EggLoadUnitType.MODULE;
|
|
171
|
+
get globalGraph() {
|
|
172
|
+
return GlobalGraph.instance;
|
|
173
|
+
}
|
|
174
|
+
constructor(name, unitPath) {
|
|
175
|
+
this.id = IdenticalUtil.createLoadUnitId(name);
|
|
176
|
+
this.name = name;
|
|
177
|
+
this.unitPath = unitPath;
|
|
178
|
+
debug('ModuleLoadUnit constructor on moduleName: %o, unitPath: %o, id: %o', this.name, this.unitPath, this.id);
|
|
179
|
+
}
|
|
180
|
+
doLoadClazz() {
|
|
181
|
+
const protos = this.globalGraph.moduleProtoDescriptorMap.get(this.name);
|
|
182
|
+
if (protos) {
|
|
183
|
+
// TODO ModuleLoadUnit should support all proto descriptor
|
|
184
|
+
this.protos = protos.filter((t) => ClassProtoDescriptor.isClassProtoDescriptor(t));
|
|
185
|
+
this.clazzList = this.protos.map((t) => t.clazz);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.protos = [];
|
|
189
|
+
this.clazzList = [];
|
|
190
|
+
}
|
|
191
|
+
debug('doLoadClazz on moduleName: %o, protos size: %o, clazzList size: %o', this.name, this.protos.length, this.clazzList.length);
|
|
192
|
+
}
|
|
193
|
+
loadClazz() {
|
|
194
|
+
if (!this.clazzList) {
|
|
195
|
+
this.doLoadClazz();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async preLoad() {
|
|
199
|
+
this.loadClazz();
|
|
200
|
+
for (const protoClass of this.clazzList) {
|
|
201
|
+
// TODO refactor lifecycle hook to ProtoDescriptor or EggPrototype
|
|
202
|
+
// ModuleLoadUnit should not use clazz list
|
|
203
|
+
const fnName = LifecycleUtil.getStaticLifecycleHook('preLoad', protoClass);
|
|
204
|
+
if (fnName) {
|
|
205
|
+
const lifecycleHook = Reflect.get(protoClass, fnName);
|
|
206
|
+
if (typeof lifecycleHook === 'function') {
|
|
207
|
+
await lifecycleHook();
|
|
208
|
+
}
|
|
209
|
+
// TODO(@fengmk2): lifecycleHook is not a function should throw error
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async init() {
|
|
214
|
+
this.loadClazz();
|
|
215
|
+
for (const protoDescriptor of this.protos) {
|
|
216
|
+
const proto = await EggPrototypeCreatorFactory.createProtoByDescriptor(protoDescriptor, this);
|
|
217
|
+
EggPrototypeFactory.instance.registerPrototype(proto, this);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
containPrototype(proto) {
|
|
221
|
+
return !!this.protoMap.get(proto.name)?.find((t) => t === proto);
|
|
222
|
+
}
|
|
223
|
+
getEggPrototype(name, qualifiers) {
|
|
224
|
+
const protos = this.protoMap.get(name);
|
|
225
|
+
return protos?.filter((proto) => proto.verifyQualifiers(qualifiers)) || [];
|
|
226
|
+
}
|
|
227
|
+
registerEggPrototype(proto) {
|
|
228
|
+
const protoList = MapUtil.getOrStore(this.protoMap, proto.name, []);
|
|
229
|
+
protoList.push(proto);
|
|
230
|
+
}
|
|
231
|
+
deletePrototype(proto) {
|
|
232
|
+
const protos = this.protoMap.get(proto.name);
|
|
233
|
+
if (protos) {
|
|
234
|
+
const index = protos.indexOf(proto);
|
|
235
|
+
if (index !== -1) {
|
|
236
|
+
protos.splice(index, 1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async destroy() {
|
|
241
|
+
for (const namedProtoMap of this.protoMap.values()) {
|
|
242
|
+
for (const proto of namedProtoMap.slice()) {
|
|
243
|
+
EggPrototypeFactory.instance.deletePrototype(proto, this);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
this.protoMap.clear();
|
|
247
|
+
}
|
|
248
|
+
iterateEggPrototype() {
|
|
249
|
+
const protos = Array.from(this.protoMap.values()).reduce((p, c) => {
|
|
250
|
+
p = p.concat(c);
|
|
251
|
+
return p;
|
|
252
|
+
}, []);
|
|
253
|
+
return protos.values();
|
|
254
|
+
}
|
|
255
|
+
static createModule(ctx) {
|
|
256
|
+
const pkgPath = path.join(ctx.unitPath, 'package.json');
|
|
257
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
258
|
+
assert(pkg.eggModule, `module config not found in package ${pkgPath}`);
|
|
259
|
+
const { name } = pkg.eggModule;
|
|
260
|
+
return new ModuleLoadUnit(name, ctx.unitPath);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
LoadUnitFactory.registerLoadUnitCreator(EggLoadUnitType.MODULE, ModuleLoadUnit.createModule);
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kdWxlTG9hZFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9Nb2R1bGVMb2FkVW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLDBCQUEwQixHQUUzQixNQUFNLG1CQUFtQixDQUFDO0FBUzNCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFFakUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRVgsNkNBQTZDO0FBQzdDLE1BQU0sU0FBUztJQUNKLEtBQUssQ0FBb0I7SUFDekIsSUFBSSxDQUFtQjtJQUN2QixFQUFFLENBQVM7SUFDWCxVQUFVLENBQWtCO0lBQzVCLFFBQVEsQ0FBcUI7SUFDOUIsYUFBYSxDQUFNO0lBRTNCLFlBQ0UsS0FBd0IsRUFDeEIsT0FBeUIsRUFDekIsUUFBNEIsRUFDNUIsVUFBMkI7UUFFM0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQTJCO1FBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUF3QjtRQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEYsT0FBTyxjQUFjLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDbkQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDZCxLQUFLLENBQW1CO0lBQ2hDLFNBQVMsQ0FBc0I7SUFDdEIsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBUztJQUV0QixZQUFZLFNBQThCLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO1FBQ3hFLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFLLENBQ0gsNkVBQTZFLEVBQzdFLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQ3BCLE9BQXlCLEVBQ3pCLFVBQTJCLEVBQzNCLGFBQWlDO1FBRWpDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDOUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7YUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsU0FBUyxFQUFFLDBCQUEwQjtZQUNyQyxLQUFLLEVBQUUsYUFBYTtTQUNyQixDQUFDO1FBRUYsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFpRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3JFLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSx1QkFBdUIsQ0FBQyxXQUFXLENBQ3ZDLElBQUksbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzdFLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLGVBQWUsR0FBMkIsRUFBRSxDQUFDO1FBQ25ELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksYUFBYSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRTtvQkFDckUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ3RCLENBQUMsQ0FBQztnQkFDSCxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNmLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO3dCQUMzQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzlELGVBQWUsQ0FBQyxJQUFJLENBQ2xCLElBQUksU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUN2RixDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFJLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO29CQUM1RSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDakQsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JFLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ3pDLE1BQU0sVUFBVSxHQUFHOzRCQUNqQixHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDOzRCQUMxRSxHQUFHLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDL0QsQ0FBQzt3QkFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzVGLHFDQUFxQzt3QkFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3ZDLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRSxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUN6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMzRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVGLHFDQUFxQztvQkFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUM5QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBYztJQUN6QiwwQkFBMEI7SUFDbEIsUUFBUSxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVELE1BQU0sQ0FBeUI7SUFDL0IsU0FBUyxDQUFzQjtJQUU5QixFQUFFLENBQVM7SUFDWCxJQUFJLENBQVM7SUFDYixRQUFRLENBQVM7SUFDakIsSUFBSSxHQUFvQixlQUFlLENBQUMsTUFBTSxDQUFDO0lBRXhELElBQUksV0FBVztRQUNiLE9BQU8sV0FBVyxDQUFDLFFBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxJQUFZLEVBQUUsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsS0FBSyxDQUFDLG9FQUFvRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxLQUFLLENBQ0gsb0VBQW9FLEVBQ3BFLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLGtFQUFrRTtZQUNsRSwyQ0FBMkM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzRSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4QyxNQUFNLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2dCQUNELHFFQUFxRTtZQUN2RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixLQUFLLE1BQU0sZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEtBQUssR0FBRyxNQUFNLDBCQUEwQixDQUFDLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RixtQkFBbUIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBbUI7UUFDbEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLFVBQTJCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFtQjtRQUN0QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBbUI7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDbkQsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDMUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxNQUFNLEdBQW1CLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNQLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQTZCO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBcUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsc0NBQXNDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDL0IsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQUVELGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./EggPrototypeBuilder.js";
|
|
2
|
+
export * from "./EggPrototypeImpl.js";
|
|
3
|
+
export * from "./LoadUnitMultiInstanceProtoHook.js";
|
|
4
|
+
export * from "./ModuleLoadUnit.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFCQUFxQixDQUFDIn0=
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from '@eggjs/tegg-types/metadata';
|
|
2
|
+
export * from "./factory/index.js";
|
|
3
|
+
export * from "./model/index.js";
|
|
4
|
+
export * from "./errors.js";
|
|
5
|
+
export * from "./util/index.js";
|
|
6
|
+
export * from "./impl/index.js";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlCQUFpQixDQUFDIn0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Graph, GraphNode } from '@eggjs/tegg-common-util';
|
|
2
|
+
import { AccessLevel } from '@eggjs/tegg-types';
|
|
3
|
+
import type { EggProtoImplClass, EggPrototypeName, GraphNodeObj, ModuleReference, QualifierInfo } from '@eggjs/tegg-types';
|
|
4
|
+
export interface InstanceClazzMeta {
|
|
5
|
+
name: PropertyKey;
|
|
6
|
+
qualifiers: QualifierInfo[];
|
|
7
|
+
properQualifiers: Record<PropertyKey, QualifierInfo[]>;
|
|
8
|
+
accessLevel: AccessLevel;
|
|
9
|
+
instanceModule: GraphNode<ModuleNode>;
|
|
10
|
+
ownerModule: GraphNode<ModuleNode>;
|
|
11
|
+
}
|
|
12
|
+
export type ClazzMetaMap = Record<EggPrototypeName, InstanceClazzMeta[]>;
|
|
13
|
+
export declare class ClazzMap {
|
|
14
|
+
private clazzMap;
|
|
15
|
+
private graph;
|
|
16
|
+
constructor(graph: Graph<ModuleNode>);
|
|
17
|
+
build(): Promise<void>;
|
|
18
|
+
findDependencyModule(objName: EggPrototypeName, properQualifiers: QualifierInfo[], intoModule: GraphNode<ModuleNode>): GraphNode<ModuleNode>[];
|
|
19
|
+
}
|
|
20
|
+
export declare class ModuleNode implements GraphNodeObj {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly moduleConfig: ModuleReference;
|
|
24
|
+
private readonly clazzList;
|
|
25
|
+
constructor(moduleConfig: ModuleReference);
|
|
26
|
+
addClazz(clazz: EggProtoImplClass): Promise<void>;
|
|
27
|
+
toString(): string;
|
|
28
|
+
getClazzList(): readonly EggProtoImplClass[];
|
|
29
|
+
}
|
|
30
|
+
export declare class AppGraph {
|
|
31
|
+
private graph;
|
|
32
|
+
private clazzMap;
|
|
33
|
+
moduleConfigList: Array<ModuleReference>;
|
|
34
|
+
constructor();
|
|
35
|
+
addNode(moduleNode: ModuleNode): void;
|
|
36
|
+
getClazzList(): readonly EggProtoImplClass[];
|
|
37
|
+
build(): Promise<void>;
|
|
38
|
+
sort(): void;
|
|
39
|
+
}
|