@eggjs/tegg-metadata 4.0.0-beta.1 → 4.0.0-beta.11
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/README.md +12 -0
- package/dist/errors.js +27 -0
- package/{src → dist}/factory/EggPrototypeCreatorFactory.d.ts +1 -1
- package/dist/factory/EggPrototypeCreatorFactory.js +108 -0
- package/dist/factory/EggPrototypeFactory.js +52 -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.js +124 -0
- package/{src → dist}/impl/EggPrototypeImpl.d.ts +1 -1
- package/dist/impl/EggPrototypeImpl.js +53 -0
- package/dist/impl/LoadUnitMultiInstanceProtoHook.js +18 -0
- package/{src → dist}/impl/ModuleLoadUnit.d.ts +1 -1
- 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 -0
- package/dist/index.js +7 -0
- package/dist/model/AppGraph.js +264 -0
- package/{src → dist}/model/EggPrototype.js +1 -1
- package/{src → dist}/model/LoadUnit.js +1 -1
- package/{src → dist}/model/ModuleDescriptor.d.ts +1 -1
- package/dist/model/ModuleDescriptor.js +39 -0
- package/{src → dist}/model/ProtoDescriptor/AbstractProtoDescriptor.d.ts +1 -1
- package/dist/model/ProtoDescriptor/AbstractProtoDescriptor.js +31 -0
- package/{src → dist}/model/ProtoDescriptor/ClassProtoDescriptor.d.ts +2 -2
- 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/{src → dist}/model/ProtoDescriptorHelper.d.ts +2 -2
- package/dist/model/ProtoDescriptorHelper.js +130 -0
- package/{src → dist}/model/graph/GlobalGraph.d.ts +6 -6
- package/dist/model/graph/GlobalGraph.js +233 -0
- package/{src → dist}/model/graph/GlobalModuleNode.d.ts +3 -3
- package/dist/model/graph/GlobalModuleNode.js +39 -0
- package/{src → dist}/model/graph/GlobalModuleNodeBuilder.d.ts +2 -2
- package/dist/model/graph/GlobalModuleNodeBuilder.js +54 -0
- package/{src → dist}/model/graph/ProtoNode.d.ts +3 -3
- package/dist/model/graph/ProtoNode.js +40 -0
- package/{src → dist}/model/graph/ProtoSelector.d.ts +1 -1
- 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.js +17 -0
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +2 -0
- package/package.json +26 -26
- package/src/errors.js +0 -27
- package/src/factory/EggPrototypeCreatorFactory.js +0 -103
- package/src/factory/EggPrototypeFactory.js +0 -52
- package/src/factory/LoadUnitFactory.js +0 -59
- package/src/factory/index.d.ts +0 -3
- package/src/factory/index.js +0 -4
- package/src/impl/EggPrototypeBuilder.js +0 -124
- package/src/impl/EggPrototypeImpl.js +0 -53
- package/src/impl/LoadUnitMultiInstanceProtoHook.js +0 -18
- package/src/impl/ModuleLoadUnit.js +0 -268
- package/src/impl/index.d.ts +0 -4
- package/src/impl/index.js +0 -5
- package/src/index.d.ts +0 -6
- package/src/index.js +0 -7
- package/src/model/AppGraph.js +0 -264
- package/src/model/ModuleDescriptor.js +0 -38
- package/src/model/ProtoDescriptor/AbstractProtoDescriptor.js +0 -30
- package/src/model/ProtoDescriptor/ClassProtoDescriptor.js +0 -30
- package/src/model/ProtoDescriptor/index.d.ts +0 -2
- package/src/model/ProtoDescriptor/index.js +0 -3
- package/src/model/ProtoDescriptorHelper.js +0 -129
- package/src/model/graph/GlobalGraph.js +0 -233
- package/src/model/graph/GlobalModuleNode.js +0 -38
- package/src/model/graph/GlobalModuleNodeBuilder.js +0 -53
- package/src/model/graph/ProtoNode.js +0 -37
- package/src/model/graph/ProtoSelector.js +0 -2
- package/src/model/graph/index.d.ts +0 -5
- package/src/model/graph/index.js +0 -6
- package/src/model/index.d.ts +0 -7
- package/src/model/index.js +0 -8
- package/src/util/ClassUtil.js +0 -17
- package/src/util/index.d.ts +0 -1
- package/src/util/index.js +0 -2
- /package/{src → dist}/errors.d.ts +0 -0
- /package/{src → dist}/factory/EggPrototypeFactory.d.ts +0 -0
- /package/{src → dist}/factory/LoadUnitFactory.d.ts +0 -0
- /package/{src → dist}/impl/EggPrototypeBuilder.d.ts +0 -0
- /package/{src → dist}/impl/LoadUnitMultiInstanceProtoHook.d.ts +0 -0
- /package/{src → dist}/model/AppGraph.d.ts +0 -0
- /package/{src → dist}/model/EggPrototype.d.ts +0 -0
- /package/{src → dist}/model/LoadUnit.d.ts +0 -0
- /package/{src → dist}/util/ClassUtil.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# `@eggjs/tegg-metadata`
|
|
2
2
|
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
5
|
+
[![npm download][download-image]][download-url]
|
|
6
|
+
[](https://nodejs.org/en/download/)
|
|
7
|
+
|
|
8
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-metadata.svg?style=flat-square
|
|
9
|
+
[npm-url]: https://npmjs.org/package/@eggjs/tegg-metadata
|
|
10
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-metadata/badge.svg?style=flat-square
|
|
11
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-metadata
|
|
12
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-metadata.svg?style=flat-square
|
|
13
|
+
[download-url]: https://npmjs.org/package/@eggjs/tegg-metadata
|
|
14
|
+
|
|
3
15
|
# Usage
|
|
4
16
|
|
|
5
17
|
This is an internal tegg library, you probably shouldn't use it directly.
|
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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EggProtoImplClass, EggPrototypeCreator, LoadUnit, EggPrototype } from '@eggjs/tegg-types';
|
|
2
|
-
import { ClassProtoDescriptor } from '../model/index.
|
|
2
|
+
import { ClassProtoDescriptor } from '../model/index.ts';
|
|
3
3
|
export declare class EggPrototypeCreatorFactory {
|
|
4
4
|
private static creatorMap;
|
|
5
5
|
static registerPrototypeCreator(type: string, creator: EggPrototypeCreator): void;
|
|
@@ -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,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,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,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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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InjectType, QualifierAttribute } from '@eggjs/core-decorator';
|
|
1
|
+
import { InjectType, type QualifierAttribute } from '@eggjs/core-decorator';
|
|
2
2
|
import type { AccessLevel, EggProtoImplClass, EggPrototype, EggPrototypeName, Id, InjectConstructorProto, InjectObjectProto, MetaDataKey, ObjectInitTypeLike, QualifierInfo, QualifierValue } from '@eggjs/tegg-types';
|
|
3
3
|
export declare class EggPrototypeImpl implements EggPrototype {
|
|
4
4
|
private readonly clazz;
|
|
@@ -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,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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EggLoadUnitType } from '@eggjs/tegg-types';
|
|
2
2
|
import type { EggProtoImplClass, EggPrototype, LoadUnit, LoadUnitLifecycleContext, QualifierInfo } from '@eggjs/tegg-types';
|
|
3
|
-
import { GlobalGraph } from '../model/index.
|
|
3
|
+
import { GlobalGraph } from '../model/index.ts';
|
|
4
4
|
export declare class ModuleGraph {
|
|
5
5
|
private graph;
|
|
6
6
|
clazzList: EggProtoImplClass[];
|