@eggjs/tegg-metadata 4.0.0-beta.8 → 4.0.0-beta.9
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/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 +108 -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 +124 -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 +268 -0
- package/dist/impl/index.d.ts +4 -0
- package/dist/impl/index.js +5 -0
- package/dist/index.d.ts +6 -407
- package/dist/index.js +7 -1260
- package/dist/model/AppGraph.d.ts +39 -0
- package/dist/model/AppGraph.js +264 -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 +39 -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 +130 -0
- package/dist/model/graph/GlobalGraph.d.ts +63 -0
- package/dist/model/graph/GlobalGraph.js +233 -0
- package/dist/model/graph/GlobalModuleNode.d.ts +25 -0
- package/dist/model/graph/GlobalModuleNode.js +39 -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 +6 -6
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FrameworkBaseError } from 'egg-errors';
|
|
2
|
+
import type { EggPrototypeName, QualifierInfo } from '@eggjs/tegg-types';
|
|
3
|
+
export declare class TeggError extends FrameworkBaseError {
|
|
4
|
+
get module(): string;
|
|
5
|
+
}
|
|
6
|
+
export declare class EggPrototypeNotFound extends TeggError {
|
|
7
|
+
constructor(protoName: EggPrototypeName, loadUnitId: string | undefined);
|
|
8
|
+
}
|
|
9
|
+
export declare class MultiPrototypeFound extends TeggError {
|
|
10
|
+
constructor(name: EggPrototypeName, qualifier: QualifierInfo[], result?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class IncompatibleProtoInject extends TeggError {
|
|
13
|
+
constructor(msg: string);
|
|
14
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FrameworkBaseError } from 'egg-errors';
|
|
2
|
+
import { ErrorCodes } from '@eggjs/tegg-types';
|
|
3
|
+
export class TeggError extends FrameworkBaseError {
|
|
4
|
+
get module() {
|
|
5
|
+
return 'TEGG';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class EggPrototypeNotFound extends TeggError {
|
|
9
|
+
constructor(protoName, loadUnitId) {
|
|
10
|
+
const msg = loadUnitId
|
|
11
|
+
? `Object ${String(protoName)} not found in ${loadUnitId}`
|
|
12
|
+
: `Object ${String(protoName)} not found`;
|
|
13
|
+
super(msg, ErrorCodes.EGG_PROTO_NOT_FOUND);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class MultiPrototypeFound extends TeggError {
|
|
17
|
+
constructor(name, qualifier, result) {
|
|
18
|
+
const msg = `multi proto found for name:${String(name)} and qualifiers ${JSON.stringify(qualifier)}${result ? `, result is ${result}` : ''}`;
|
|
19
|
+
super(msg, ErrorCodes.MULTI_PROTO_FOUND);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class IncompatibleProtoInject extends TeggError {
|
|
23
|
+
constructor(msg) {
|
|
24
|
+
super(msg, ErrorCodes.INCOMPATIBLE_PROTO_INJECT);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxTQUFVLFNBQVEsa0JBQWtCO0lBQy9DLElBQUksTUFBTTtRQUNSLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxTQUFTO0lBQ2pELFlBQVksU0FBMkIsRUFBRSxVQUE4QjtRQUNyRSxNQUFNLEdBQUcsR0FBRyxVQUFVO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLFVBQVUsRUFBRTtZQUMxRCxDQUFDLENBQUMsVUFBVSxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM1QyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUFTO0lBQ2hELFlBQVksSUFBc0IsRUFBRSxTQUEwQixFQUFFLE1BQWU7UUFDN0UsTUFBTSxHQUFHLEdBQUcsOEJBQThCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3SSxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxTQUFTO0lBQ3BELFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EggProtoImplClass, EggPrototypeCreator, LoadUnit, EggPrototype } from '@eggjs/tegg-types';
|
|
2
|
+
import { ClassProtoDescriptor } from '../model/index.ts';
|
|
3
|
+
export declare class EggPrototypeCreatorFactory {
|
|
4
|
+
private static creatorMap;
|
|
5
|
+
static registerPrototypeCreator(type: string, creator: EggPrototypeCreator): void;
|
|
6
|
+
static getPrototypeCreator(type: string): EggPrototypeCreator | undefined;
|
|
7
|
+
static createProto(clazz: EggProtoImplClass, loadUnit: LoadUnit): Promise<EggPrototype[]>;
|
|
8
|
+
static createProtoByDescriptor(protoDescriptor: ClassProtoDescriptor, loadUnit: LoadUnit): Promise<EggPrototype>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { debuglog } from 'node:util';
|
|
3
|
+
import { InitTypeQualifierAttribute, LoadUnitNameQualifierAttribute, PrototypeUtil } from '@eggjs/core-decorator';
|
|
4
|
+
import { EggPrototypeLifecycleUtil, ClassProtoDescriptor } from "../model/index.js";
|
|
5
|
+
const debug = debuglog('tegg/core/metadata/factory/EggPrototypeCreatorFactory');
|
|
6
|
+
export class EggPrototypeCreatorFactory {
|
|
7
|
+
static creatorMap = new Map();
|
|
8
|
+
static registerPrototypeCreator(type, creator) {
|
|
9
|
+
this.creatorMap.set(type, creator);
|
|
10
|
+
}
|
|
11
|
+
static getPrototypeCreator(type) {
|
|
12
|
+
return this.creatorMap.get(type);
|
|
13
|
+
}
|
|
14
|
+
static async createProto(clazz, loadUnit) {
|
|
15
|
+
let properties = [];
|
|
16
|
+
const initTypeQualifierAttributeValue = await PrototypeUtil.getInitType(clazz, {
|
|
17
|
+
unitPath: loadUnit.unitPath,
|
|
18
|
+
moduleName: loadUnit.name,
|
|
19
|
+
});
|
|
20
|
+
const defaultQualifier = [{
|
|
21
|
+
attribute: InitTypeQualifierAttribute,
|
|
22
|
+
value: initTypeQualifierAttributeValue,
|
|
23
|
+
}, {
|
|
24
|
+
attribute: LoadUnitNameQualifierAttribute,
|
|
25
|
+
value: loadUnit.name,
|
|
26
|
+
}];
|
|
27
|
+
if (PrototypeUtil.isEggMultiInstancePrototype(clazz)) {
|
|
28
|
+
const multiInstanceProtoInfo = await PrototypeUtil.getMultiInstanceProperty(clazz, {
|
|
29
|
+
unitPath: loadUnit.unitPath,
|
|
30
|
+
moduleName: loadUnit.name,
|
|
31
|
+
});
|
|
32
|
+
assert(multiInstanceProtoInfo, `multiInstanceProtoInfo is undefined, clazz: ${clazz.name}, unitPath: ${loadUnit.unitPath}, moduleName: ${loadUnit.name}`);
|
|
33
|
+
for (const obj of multiInstanceProtoInfo.objects) {
|
|
34
|
+
defaultQualifier.forEach(qualifier => {
|
|
35
|
+
if (!obj.qualifiers.find(t => t.attribute === qualifier.attribute)) {
|
|
36
|
+
obj.qualifiers.push(qualifier);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
properties.push({
|
|
40
|
+
name: obj.name,
|
|
41
|
+
protoImplType: multiInstanceProtoInfo.protoImplType,
|
|
42
|
+
initType: multiInstanceProtoInfo.initType,
|
|
43
|
+
accessLevel: multiInstanceProtoInfo.accessLevel,
|
|
44
|
+
qualifiers: obj.qualifiers,
|
|
45
|
+
properQualifiers: obj.properQualifiers,
|
|
46
|
+
className: multiInstanceProtoInfo.className,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const property = PrototypeUtil.getProperty(clazz);
|
|
52
|
+
if (!property.qualifiers) {
|
|
53
|
+
property.qualifiers = [];
|
|
54
|
+
}
|
|
55
|
+
defaultQualifier.forEach(qualifier => {
|
|
56
|
+
if (!property.qualifiers.find(t => t.attribute === qualifier.attribute)) {
|
|
57
|
+
property.qualifiers.push(qualifier);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
properties = [property];
|
|
61
|
+
}
|
|
62
|
+
const protos = [];
|
|
63
|
+
for (const property of properties) {
|
|
64
|
+
const creator = this.getPrototypeCreator(property.protoImplType);
|
|
65
|
+
if (!creator) {
|
|
66
|
+
throw new Error(`not found proto creator for type: ${property.protoImplType}`);
|
|
67
|
+
}
|
|
68
|
+
const ctx = {
|
|
69
|
+
clazz,
|
|
70
|
+
loadUnit,
|
|
71
|
+
prototypeInfo: property,
|
|
72
|
+
};
|
|
73
|
+
const proto = creator(ctx);
|
|
74
|
+
// TODO release egg prototype
|
|
75
|
+
await EggPrototypeLifecycleUtil.objectPreCreate(ctx, proto);
|
|
76
|
+
if (proto.init) {
|
|
77
|
+
await proto.init(ctx);
|
|
78
|
+
}
|
|
79
|
+
await EggPrototypeLifecycleUtil.objectPostCreate(ctx, proto);
|
|
80
|
+
PrototypeUtil.setClazzProto(clazz, proto);
|
|
81
|
+
protos.push(proto);
|
|
82
|
+
}
|
|
83
|
+
if (debug.enabled && loadUnit.name === 'egg-app') {
|
|
84
|
+
debug('createProto, get protos:%o, from clazz:%o, from loadUnit:%o:%o:%o', protos.map(t => t.name), clazz.name, loadUnit.type, loadUnit.name, loadUnit.unitPath);
|
|
85
|
+
}
|
|
86
|
+
return protos;
|
|
87
|
+
}
|
|
88
|
+
static async createProtoByDescriptor(protoDescriptor, loadUnit) {
|
|
89
|
+
const creator = this.getPrototypeCreator(protoDescriptor.protoImplType);
|
|
90
|
+
if (!creator) {
|
|
91
|
+
throw new Error(`not found proto creator for type: ${protoDescriptor.protoImplType}`);
|
|
92
|
+
}
|
|
93
|
+
const ctx = {
|
|
94
|
+
clazz: protoDescriptor.clazz,
|
|
95
|
+
loadUnit,
|
|
96
|
+
prototypeInfo: protoDescriptor,
|
|
97
|
+
};
|
|
98
|
+
const proto = creator(ctx);
|
|
99
|
+
await EggPrototypeLifecycleUtil.objectPreCreate(ctx, proto);
|
|
100
|
+
if (proto.init) {
|
|
101
|
+
await proto.init(ctx);
|
|
102
|
+
}
|
|
103
|
+
await EggPrototypeLifecycleUtil.objectPostCreate(ctx, proto);
|
|
104
|
+
PrototypeUtil.setClazzProto(protoDescriptor.clazz, proto);
|
|
105
|
+
return proto;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlQ3JlYXRvckZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9FZ2dQcm90b3R5cGVDcmVhdG9yRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFVbEgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFFaEYsTUFBTSxPQUFPLDBCQUEwQjtJQUM3QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBRW5FLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFZLEVBQUUsT0FBNEI7UUFDeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBWTtRQUNyQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUF3QixFQUFFLFFBQWtCO1FBQ25FLElBQUksVUFBVSxHQUF1QixFQUFFLENBQUM7UUFDeEMsTUFBTSwrQkFBK0IsR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzdFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUk7U0FDMUIsQ0FBQyxDQUFD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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EggPrototype, LoadUnit, QualifierInfo } from '@eggjs/tegg-types';
|
|
2
|
+
export declare class EggPrototypeFactory {
|
|
3
|
+
static instance: EggPrototypeFactory;
|
|
4
|
+
private publicProtoMap;
|
|
5
|
+
registerPrototype(proto: EggPrototype, loadUnit: LoadUnit): void;
|
|
6
|
+
deletePrototype(proto: EggPrototype, loadUnit: LoadUnit): void;
|
|
7
|
+
getPrototype(name: PropertyKey, loadUnit?: LoadUnit, qualifiers?: QualifierInfo[]): EggPrototype;
|
|
8
|
+
private doGetPrototype;
|
|
9
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MapUtil } from '@eggjs/tegg-common-util';
|
|
2
|
+
import { AccessLevel } from '@eggjs/tegg-types';
|
|
3
|
+
import { FrameworkErrorFormater } from 'egg-errors';
|
|
4
|
+
import { EggPrototypeNotFound, MultiPrototypeFound } from "../errors.js";
|
|
5
|
+
export class EggPrototypeFactory {
|
|
6
|
+
static instance = new EggPrototypeFactory();
|
|
7
|
+
// Map<EggObjectInitTypeLike, Map<protoName, EggPrototype>>
|
|
8
|
+
publicProtoMap = new Map();
|
|
9
|
+
registerPrototype(proto, loadUnit) {
|
|
10
|
+
if (proto.accessLevel === AccessLevel.PUBLIC) {
|
|
11
|
+
const protoList = MapUtil.getOrStore(this.publicProtoMap, proto.name, []);
|
|
12
|
+
protoList.push(proto);
|
|
13
|
+
}
|
|
14
|
+
loadUnit.registerEggPrototype(proto);
|
|
15
|
+
}
|
|
16
|
+
deletePrototype(proto, loadUnit) {
|
|
17
|
+
if (proto.accessLevel === AccessLevel.PUBLIC) {
|
|
18
|
+
const protos = this.publicProtoMap.get(proto.name);
|
|
19
|
+
if (protos) {
|
|
20
|
+
const index = protos.indexOf(proto);
|
|
21
|
+
if (index !== -1) {
|
|
22
|
+
protos.splice(index, 1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
loadUnit.deletePrototype(proto);
|
|
27
|
+
}
|
|
28
|
+
getPrototype(name, loadUnit, qualifiers) {
|
|
29
|
+
qualifiers = qualifiers || [];
|
|
30
|
+
const protos = this.doGetPrototype(name, qualifiers, loadUnit);
|
|
31
|
+
if (!protos.length) {
|
|
32
|
+
throw FrameworkErrorFormater.formatError(new EggPrototypeNotFound(name, loadUnit?.id));
|
|
33
|
+
}
|
|
34
|
+
if (protos.length === 1) {
|
|
35
|
+
return protos[0];
|
|
36
|
+
}
|
|
37
|
+
throw FrameworkErrorFormater.formatError(new MultiPrototypeFound(name, qualifiers));
|
|
38
|
+
}
|
|
39
|
+
doGetPrototype(name, qualifiers, loadUnit) {
|
|
40
|
+
if (loadUnit) {
|
|
41
|
+
// 1. find private proto in load unit
|
|
42
|
+
const protos = loadUnit.getEggPrototype(name, qualifiers);
|
|
43
|
+
if (protos.length) {
|
|
44
|
+
return protos;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 2. find public proto in global
|
|
48
|
+
const protos = this.publicProtoMap.get(name);
|
|
49
|
+
return protos?.filter(proto => proto.verifyQualifiers(qualifiers)) || [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYWN0b3J5L0VnZ1Byb3RvdHlwZUZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxtQkFBbUI7SUFDdkIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFFbkQsMkRBQTJEO0lBQ25ELGNBQWMsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVuRSxpQkFBaUIsQ0FBQyxLQUFtQixFQUFFLFFBQWtCO1FBQzlELElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBbUIsRUFBRSxRQUFrQjtRQUM1RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBaUIsRUFBRSxRQUFtQixFQUFFLFVBQTRCO1FBQ3RGLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sc0JBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sc0JBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFzQixFQUFFLFVBQTJCLEVBQUUsUUFBbUI7UUFDN0YsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLHFDQUFxQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNFLENBQUMifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EggLoadUnitTypeLike, Id, LoadUnit, LoadUnitLifecycleContext, Loader, LoadUnitCreator } from '@eggjs/tegg-types';
|
|
2
|
+
export declare class LoadUnitFactory {
|
|
3
|
+
private static loadUnitCreatorMap;
|
|
4
|
+
private static loadUnitMap;
|
|
5
|
+
private static loadUnitIdMap;
|
|
6
|
+
protected static getLoanUnit(ctx: LoadUnitLifecycleContext, type: EggLoadUnitTypeLike): Promise<LoadUnit>;
|
|
7
|
+
static createLoadUnit(unitPath: string, type: EggLoadUnitTypeLike, loader: Loader): Promise<LoadUnit>;
|
|
8
|
+
static createPreloadLoadUnit(unitPath: string, type: EggLoadUnitTypeLike, loader: Loader): Promise<LoadUnit>;
|
|
9
|
+
static destroyLoadUnit(loadUnit: LoadUnit): Promise<void>;
|
|
10
|
+
static getLoadUnitById(id: Id): LoadUnit | undefined;
|
|
11
|
+
static registerLoadUnitCreator(type: EggLoadUnitTypeLike, creator: LoadUnitCreator): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { LoadUnitLifecycleUtil } from "../model/index.js";
|
|
2
|
+
export class LoadUnitFactory {
|
|
3
|
+
static loadUnitCreatorMap = new Map();
|
|
4
|
+
static loadUnitMap = new Map();
|
|
5
|
+
static loadUnitIdMap = new Map();
|
|
6
|
+
static async getLoanUnit(ctx, type) {
|
|
7
|
+
const creator = LoadUnitFactory.loadUnitCreatorMap.get(type);
|
|
8
|
+
if (!creator) {
|
|
9
|
+
throw new Error(`not find creator for load unit type ${type}`);
|
|
10
|
+
}
|
|
11
|
+
return await creator(ctx);
|
|
12
|
+
}
|
|
13
|
+
static async createLoadUnit(unitPath, type, loader) {
|
|
14
|
+
if (LoadUnitFactory.loadUnitMap.has(unitPath)) {
|
|
15
|
+
return LoadUnitFactory.loadUnitMap.get(unitPath).loadUnit;
|
|
16
|
+
}
|
|
17
|
+
const ctx = {
|
|
18
|
+
unitPath,
|
|
19
|
+
loader,
|
|
20
|
+
};
|
|
21
|
+
const loadUnit = await LoadUnitFactory.getLoanUnit(ctx, type);
|
|
22
|
+
await LoadUnitLifecycleUtil.objectPreCreate(ctx, loadUnit);
|
|
23
|
+
if (loadUnit.init) {
|
|
24
|
+
await loadUnit.init(ctx);
|
|
25
|
+
}
|
|
26
|
+
await LoadUnitLifecycleUtil.objectPostCreate(ctx, loadUnit);
|
|
27
|
+
LoadUnitFactory.loadUnitMap.set(unitPath, { loadUnit, ctx });
|
|
28
|
+
LoadUnitFactory.loadUnitIdMap.set(loadUnit.id, loadUnit);
|
|
29
|
+
return loadUnit;
|
|
30
|
+
}
|
|
31
|
+
static async createPreloadLoadUnit(unitPath, type, loader) {
|
|
32
|
+
const ctx = {
|
|
33
|
+
unitPath,
|
|
34
|
+
loader,
|
|
35
|
+
};
|
|
36
|
+
return await LoadUnitFactory.getLoanUnit(ctx, type);
|
|
37
|
+
}
|
|
38
|
+
static async destroyLoadUnit(loadUnit) {
|
|
39
|
+
const { ctx } = LoadUnitFactory.loadUnitMap.get(loadUnit.unitPath);
|
|
40
|
+
try {
|
|
41
|
+
await LoadUnitLifecycleUtil.objectPreDestroy(ctx, loadUnit);
|
|
42
|
+
if (loadUnit.destroy) {
|
|
43
|
+
await loadUnit.destroy(ctx);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
LoadUnitFactory.loadUnitMap.delete(loadUnit.unitPath);
|
|
48
|
+
LoadUnitFactory.loadUnitIdMap.delete(loadUnit.id);
|
|
49
|
+
LoadUnitLifecycleUtil.clearObjectLifecycle(loadUnit);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static getLoadUnitById(id) {
|
|
53
|
+
return LoadUnitFactory.loadUnitIdMap.get(id);
|
|
54
|
+
}
|
|
55
|
+
static registerLoadUnitCreator(type, creator) {
|
|
56
|
+
LoadUnitFactory.loadUnitCreatorMap.set(type, creator);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZFVuaXRGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhY3RvcnkvTG9hZFVuaXRGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTFELE1BQU0sT0FBTyxlQUFlO0lBQ2xCLE1BQU0sQ0FBQyxrQkFBa0IsR0FBOEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqRixNQUFNLENBQUMsV0FBVyxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzFELE1BQU0sQ0FBQyxhQUFhLEdBQXNCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBNkIsRUFBRSxJQUF5QjtRQUN6RixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQWdCLEVBQUUsSUFBeUIsRUFBRSxNQUFjO1FBQ3JGLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDLFFBQVEsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQTZCO1lBQ3BDLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUQsTUFBTSxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUQsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLElBQXlCLEVBQUUsTUFBYztRQUM1RixNQUFNLEdBQUcsR0FBNkI7WUFDcEMsUUFBUTtZQUNSLE1BQU07U0FDUCxDQUFDO1FBQ0YsT0FBTyxNQUFNLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFrQjtRQUM3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQztZQUNILE1BQU0scUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7Z0JBQVMsQ0FBQztZQUNULGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQU07UUFDM0IsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLElBQXlCLEVBQUUsT0FBd0I7UUFDaEYsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQyJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./EggPrototypeFactory.js";
|
|
2
|
+
export * from "./EggPrototypeCreatorFactory.js";
|
|
3
|
+
export * from "./LoadUnitFactory.js";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxzQkFBc0IsQ0FBQyJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/tegg-types';
|
|
2
|
+
export declare class EggPrototypeBuilder {
|
|
3
|
+
private clazz;
|
|
4
|
+
private name;
|
|
5
|
+
private initType;
|
|
6
|
+
private accessLevel;
|
|
7
|
+
private filepath;
|
|
8
|
+
private injectType;
|
|
9
|
+
private injectObjects;
|
|
10
|
+
private loadUnit;
|
|
11
|
+
private qualifiers;
|
|
12
|
+
private properQualifiers;
|
|
13
|
+
private className?;
|
|
14
|
+
private multiInstanceConstructorIndex?;
|
|
15
|
+
private multiInstanceConstructorAttributes?;
|
|
16
|
+
static create(ctx: EggPrototypeLifecycleContext): EggPrototype;
|
|
17
|
+
private tryFindDefaultPrototype;
|
|
18
|
+
private tryFindContextPrototype;
|
|
19
|
+
private tryFindSelfInitTypePrototype;
|
|
20
|
+
private findInjectObjectPrototype;
|
|
21
|
+
build(): EggPrototype;
|
|
22
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { InjectType, PrototypeUtil, QualifierUtil } from '@eggjs/core-decorator';
|
|
3
|
+
import { DEFAULT_PROTO_IMPL_TYPE, InitTypeQualifierAttribute, ObjectInitType, } from '@eggjs/tegg-types';
|
|
4
|
+
import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
|
|
5
|
+
import { EggPrototypeFactory, EggPrototypeCreatorFactory } from "../factory/index.js";
|
|
6
|
+
import { EggPrototypeImpl } from "./EggPrototypeImpl.js";
|
|
7
|
+
import { EggPrototypeNotFound, MultiPrototypeFound } from "../errors.js";
|
|
8
|
+
export class EggPrototypeBuilder {
|
|
9
|
+
clazz;
|
|
10
|
+
name;
|
|
11
|
+
initType;
|
|
12
|
+
accessLevel;
|
|
13
|
+
filepath;
|
|
14
|
+
injectType;
|
|
15
|
+
injectObjects = [];
|
|
16
|
+
loadUnit;
|
|
17
|
+
qualifiers = [];
|
|
18
|
+
properQualifiers = {};
|
|
19
|
+
className;
|
|
20
|
+
multiInstanceConstructorIndex;
|
|
21
|
+
multiInstanceConstructorAttributes;
|
|
22
|
+
static create(ctx) {
|
|
23
|
+
const { clazz, loadUnit } = ctx;
|
|
24
|
+
const filepath = PrototypeUtil.getFilePath(clazz);
|
|
25
|
+
assert(filepath, 'not find filepath');
|
|
26
|
+
const builder = new EggPrototypeBuilder();
|
|
27
|
+
builder.clazz = clazz;
|
|
28
|
+
builder.name = ctx.prototypeInfo.name;
|
|
29
|
+
builder.className = ctx.prototypeInfo.className;
|
|
30
|
+
builder.initType = ctx.prototypeInfo.initType;
|
|
31
|
+
builder.accessLevel = ctx.prototypeInfo.accessLevel;
|
|
32
|
+
builder.filepath = filepath;
|
|
33
|
+
builder.injectType = PrototypeUtil.getInjectType(clazz);
|
|
34
|
+
builder.injectObjects = PrototypeUtil.getInjectObjects(clazz) || [];
|
|
35
|
+
builder.loadUnit = loadUnit;
|
|
36
|
+
builder.qualifiers = QualifierUtil.mergeQualifiers(QualifierUtil.getProtoQualifiers(clazz), (ctx.prototypeInfo.qualifiers ?? []));
|
|
37
|
+
builder.properQualifiers = ctx.prototypeInfo.properQualifiers ?? {};
|
|
38
|
+
builder.multiInstanceConstructorIndex = PrototypeUtil.getMultiInstanceConstructorIndex(clazz);
|
|
39
|
+
builder.multiInstanceConstructorAttributes = PrototypeUtil.getMultiInstanceConstructorAttributes(clazz);
|
|
40
|
+
return builder.build();
|
|
41
|
+
}
|
|
42
|
+
tryFindDefaultPrototype(injectObject) {
|
|
43
|
+
const propertyQualifiers = QualifierUtil.getProperQualifiers(this.clazz, injectObject.refName);
|
|
44
|
+
const multiInstancePropertyQualifiers = this.properQualifiers[injectObject.refName] ?? [];
|
|
45
|
+
return EggPrototypeFactory.instance.getPrototype(injectObject.objName, this.loadUnit, QualifierUtil.mergeQualifiers(propertyQualifiers, multiInstancePropertyQualifiers));
|
|
46
|
+
}
|
|
47
|
+
tryFindContextPrototype(injectObject) {
|
|
48
|
+
const propertyQualifiers = QualifierUtil.getProperQualifiers(this.clazz, injectObject.refName);
|
|
49
|
+
const multiInstancePropertyQualifiers = this.properQualifiers[injectObject.refName] ?? [];
|
|
50
|
+
return EggPrototypeFactory.instance.getPrototype(injectObject.objName, this.loadUnit, QualifierUtil.mergeQualifiers(propertyQualifiers, multiInstancePropertyQualifiers, [{
|
|
51
|
+
attribute: InitTypeQualifierAttribute,
|
|
52
|
+
value: ObjectInitType.CONTEXT,
|
|
53
|
+
}]));
|
|
54
|
+
}
|
|
55
|
+
tryFindSelfInitTypePrototype(injectObject) {
|
|
56
|
+
const propertyQualifiers = QualifierUtil.getProperQualifiers(this.clazz, injectObject.refName);
|
|
57
|
+
const multiInstancePropertyQualifiers = this.properQualifiers[injectObject.refName] ?? [];
|
|
58
|
+
return EggPrototypeFactory.instance.getPrototype(injectObject.objName, this.loadUnit, QualifierUtil.mergeQualifiers(propertyQualifiers, multiInstancePropertyQualifiers, [{
|
|
59
|
+
attribute: InitTypeQualifierAttribute,
|
|
60
|
+
value: this.initType,
|
|
61
|
+
}]));
|
|
62
|
+
}
|
|
63
|
+
findInjectObjectPrototype(injectObject) {
|
|
64
|
+
const propertyQualifiers = QualifierUtil.getProperQualifiers(this.clazz, injectObject.refName);
|
|
65
|
+
try {
|
|
66
|
+
return this.tryFindDefaultPrototype(injectObject);
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
if (!(e instanceof MultiPrototypeFound && !propertyQualifiers.find(t => t.attribute === InitTypeQualifierAttribute))) {
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
return this.tryFindContextPrototype(injectObject);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
if (!(e instanceof EggPrototypeNotFound)) {
|
|
78
|
+
throw e;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return this.tryFindSelfInitTypePrototype(injectObject);
|
|
82
|
+
}
|
|
83
|
+
build() {
|
|
84
|
+
const injectObjectProtos = [];
|
|
85
|
+
for (const injectObject of this.injectObjects) {
|
|
86
|
+
const propertyQualifiers = QualifierUtil.getProperQualifiers(this.clazz, injectObject.refName);
|
|
87
|
+
try {
|
|
88
|
+
const proto = this.findInjectObjectPrototype(injectObject);
|
|
89
|
+
let injectObjectProto;
|
|
90
|
+
if (this.injectType === InjectType.PROPERTY) {
|
|
91
|
+
injectObjectProto = {
|
|
92
|
+
refName: injectObject.refName,
|
|
93
|
+
objName: injectObject.objName,
|
|
94
|
+
qualifiers: propertyQualifiers,
|
|
95
|
+
proto,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
injectObjectProto = {
|
|
100
|
+
refIndex: injectObject.refIndex,
|
|
101
|
+
refName: injectObject.refName,
|
|
102
|
+
objName: injectObject.objName,
|
|
103
|
+
qualifiers: propertyQualifiers,
|
|
104
|
+
proto,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (injectObject.optional) {
|
|
108
|
+
injectObject.optional = true;
|
|
109
|
+
}
|
|
110
|
+
injectObjectProtos.push(injectObjectProto);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
if (e instanceof EggPrototypeNotFound && injectObject.optional) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
throw e;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const id = IdenticalUtil.createProtoId(this.loadUnit.id, this.name);
|
|
120
|
+
return new EggPrototypeImpl(id, this.name, this.clazz, this.filepath, this.initType, this.accessLevel, injectObjectProtos, this.loadUnit.id, this.qualifiers, this.className, this.injectType, this.multiInstanceConstructorIndex, this.multiInstanceConstructorAttributes);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
EggPrototypeCreatorFactory.registerPrototypeCreator(DEFAULT_PROTO_IMPL_TYPE, EggPrototypeBuilder.create);
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0VnZ1Byb3RvdHlwZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUEyQixhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWExRyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUUxQixjQUFjLEdBQ2YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsS0FBSyxDQUFvQjtJQUN6QixJQUFJLENBQW1CO0lBQ3ZCLFFBQVEsQ0FBcUI7SUFDN0IsV0FBVyxDQUFjO0lBQ3pCLFFBQVEsQ0FBUztJQUNqQixVQUFVLENBQXlCO0lBQ25DLGFBQWEsR0FBNEMsRUFBRSxDQUFDO0lBQzVELFFBQVEsQ0FBVztJQUNuQixVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUNqQyxnQkFBZ0IsR0FBeUMsRUFBRSxDQUFDO0lBQzVELFNBQVMsQ0FBVTtJQUNuQiw2QkFBNkIsQ0FBVTtJQUN2QyxrQ0FBa0MsQ0FBd0I7SUFFbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFpQztRQUM3QyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLEtB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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { InjectType, type QualifierAttribute } from '@eggjs/core-decorator';
|
|
2
|
+
import type { AccessLevel, EggProtoImplClass, EggPrototype, EggPrototypeName, Id, InjectConstructorProto, InjectObjectProto, MetaDataKey, ObjectInitTypeLike, QualifierInfo, QualifierValue } from '@eggjs/tegg-types';
|
|
3
|
+
export declare class EggPrototypeImpl implements EggPrototype {
|
|
4
|
+
private readonly clazz;
|
|
5
|
+
private readonly qualifiers;
|
|
6
|
+
readonly filepath: string;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly name: EggPrototypeName;
|
|
9
|
+
readonly initType: ObjectInitTypeLike;
|
|
10
|
+
readonly accessLevel: AccessLevel;
|
|
11
|
+
readonly injectObjects: Array<InjectObjectProto | InjectConstructorProto>;
|
|
12
|
+
readonly injectType: InjectType;
|
|
13
|
+
readonly loadUnitId: Id;
|
|
14
|
+
readonly className?: string;
|
|
15
|
+
readonly multiInstanceConstructorIndex?: number;
|
|
16
|
+
readonly multiInstanceConstructorAttributes?: QualifierAttribute[];
|
|
17
|
+
[key: symbol]: PropertyDescriptor;
|
|
18
|
+
constructor(id: string, name: EggPrototypeName, clazz: EggProtoImplClass, filepath: string, initType: ObjectInitTypeLike, accessLevel: AccessLevel, injectObjectMap: Array<InjectObjectProto | InjectConstructorProto>, loadUnitId: Id, qualifiers: QualifierInfo[], className?: string, injectType?: InjectType, multiInstanceConstructorIndex?: number, multiInstanceConstructorAttributes?: QualifierAttribute[]);
|
|
19
|
+
verifyQualifiers(qualifiers: QualifierInfo[]): boolean;
|
|
20
|
+
verifyQualifier(qualifier: QualifierInfo): boolean;
|
|
21
|
+
getQualifier(attribute: string): QualifierValue | undefined;
|
|
22
|
+
constructEggObject(...args: any): object;
|
|
23
|
+
getMetaData<T>(metadataKey: MetaDataKey): T | undefined;
|
|
24
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { InjectType, MetadataUtil } from '@eggjs/core-decorator';
|
|
2
|
+
export class EggPrototypeImpl {
|
|
3
|
+
clazz;
|
|
4
|
+
qualifiers;
|
|
5
|
+
filepath;
|
|
6
|
+
id;
|
|
7
|
+
name;
|
|
8
|
+
initType;
|
|
9
|
+
accessLevel;
|
|
10
|
+
injectObjects;
|
|
11
|
+
injectType;
|
|
12
|
+
loadUnitId;
|
|
13
|
+
className;
|
|
14
|
+
multiInstanceConstructorIndex;
|
|
15
|
+
multiInstanceConstructorAttributes;
|
|
16
|
+
constructor(id, name, clazz, filepath, initType, accessLevel, injectObjectMap, loadUnitId, qualifiers, className, injectType, multiInstanceConstructorIndex, multiInstanceConstructorAttributes) {
|
|
17
|
+
this.id = id;
|
|
18
|
+
this.clazz = clazz;
|
|
19
|
+
this.name = name;
|
|
20
|
+
this.filepath = filepath;
|
|
21
|
+
this.initType = initType;
|
|
22
|
+
this.accessLevel = accessLevel;
|
|
23
|
+
this.injectObjects = injectObjectMap;
|
|
24
|
+
this.loadUnitId = loadUnitId;
|
|
25
|
+
this.qualifiers = qualifiers;
|
|
26
|
+
this.className = className;
|
|
27
|
+
this.injectType = injectType || InjectType.PROPERTY;
|
|
28
|
+
this.multiInstanceConstructorIndex = multiInstanceConstructorIndex;
|
|
29
|
+
this.multiInstanceConstructorAttributes = multiInstanceConstructorAttributes;
|
|
30
|
+
}
|
|
31
|
+
verifyQualifiers(qualifiers) {
|
|
32
|
+
for (const qualifier of qualifiers) {
|
|
33
|
+
if (!this.verifyQualifier(qualifier)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
verifyQualifier(qualifier) {
|
|
40
|
+
const selfQualifiers = this.qualifiers.find(t => t.attribute === qualifier.attribute);
|
|
41
|
+
return selfQualifiers?.value === qualifier.value;
|
|
42
|
+
}
|
|
43
|
+
getQualifier(attribute) {
|
|
44
|
+
return this.qualifiers.find(t => t.attribute === attribute)?.value;
|
|
45
|
+
}
|
|
46
|
+
constructEggObject(...args) {
|
|
47
|
+
return Reflect.construct(this.clazz, args);
|
|
48
|
+
}
|
|
49
|
+
getMetaData(metadataKey) {
|
|
50
|
+
return MetadataUtil.getMetaData(metadataKey, this.clazz);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnUHJvdG90eXBlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBsL0VnZ1Byb3RvdHlwZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFlMUYsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLEtBQUssQ0FBb0I7SUFDekIsVUFBVSxDQUFrQjtJQUNwQyxRQUFRLENBQVM7SUFFakIsRUFBRSxDQUFTO0lBQ1gsSUFBSSxDQUFtQjtJQUN2QixRQUFRLENBQXFCO0lBQzdCLFdBQVcsQ0FBYztJQUN6QixhQUFhLENBQW9EO0lBQ2pFLFVBQVUsQ0FBYTtJQUN2QixVQUFVLENBQUs7SUFDZixTQUFTLENBQVU7SUFDbkIsNkJBQTZCLENBQVU7SUFDdkMsa0NBQWtDLENBQXdCO0lBR25FLFlBQ0UsRUFBVSxFQUNWLElBQXNCLEVBQ3RCLEtBQXdCLEVBQ3hCLFFBQWdCLEVBQ2hCLFFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGVBQWtFLEVBQ2xFLFVBQWMsRUFDZCxVQUEyQixFQUMzQixTQUFrQixFQUNsQixVQUF1QixFQUN2Qiw2QkFBc0MsRUFDdEMsa0NBQXlEO1FBRXpELElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7UUFDbkUsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLGtDQUFrQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUEyQjtRQUMxQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBd0I7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLGNBQWMsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQWlCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBRyxJQUFTO1FBQzdCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUksV0FBd0I7UUFDckMsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EggProtoImplClass, LifecycleHook, LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-types';
|
|
2
|
+
export declare class LoadUnitMultiInstanceProtoHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
3
|
+
static multiInstanceClazzSet: Set<EggProtoImplClass>;
|
|
4
|
+
static setAllClassList(clazzList: readonly EggProtoImplClass[]): void;
|
|
5
|
+
static clear(): void;
|
|
6
|
+
preCreate(): Promise<void>;
|
|
7
|
+
}
|
|
@@ -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.MODULE;
|
|
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
|
+
}
|