@decohere/crucible 0.0.1-dev.9 → 0.0.1-dev.90
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/commonjs/src/decorators/inject.decorator.js +1 -1
- package/commonjs/src/services/crucible-builder.js +34 -33
- package/commonjs/src/services/crucible.js +24 -7
- package/commonjs/src/services/service-registry.js +16 -3
- package/commonjs/src/types/index.js +2 -1
- package/es6/src/decorators/inject.decorator.js +6 -2
- package/es6/src/services/crucible-builder.js +34 -33
- package/es6/src/services/crucible.js +24 -7
- package/es6/src/services/service-registry.js +16 -3
- package/es6/src/types/index.js +2 -1
- package/es6/src/types/types.js +1 -1
- package/package.json +3 -3
- package/types/src/decorators/inject.decorator.d.ts +8 -2
- package/types/src/services/crucible-builder.d.ts +5 -1
- package/types/src/services/crucible.d.ts +3 -1
- package/types/src/services/service-registry.d.ts +2 -0
- package/types/src/types/index.d.ts +1 -0
- package/types/src/types/types.d.ts +1 -1
|
@@ -24,4 +24,4 @@ function getExistingMeta(target) {
|
|
|
24
24
|
return meta;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RhYmxlLCBkZWZpbmVNZXRhLCBnZXRNZXRhIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDcnVjaWJsZU1ldGEgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgSW5qZWN0aW9uTWV0YWRhdGEgPSBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj47XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvblRva2VuID0ge1xuXHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGU7XG59O1xuXG4vKipcbiAqIEJpbmQgYSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gYSByZWdpc3RyYXRpb24ga2V5LlxuICogQSBjbGFzcyB1c2VzIGBDbGFzcy5uYW1lYCAoc2FtZSBrZXkgYXMgYHJlZ2lzdGVyU2luZ2xldG9uKENsYXNzKWApLlxuICogUHJlZmVyIHRoZSBjbGFzcyBvdmVyIGEgbmFtZSBzdHJpbmcuIFVzZSBhIHN5bWJvbCBvciBzdHJpbmcgd2hlbiB0aGUga2V5IGlzIG5vdCB0aGUgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpIHtcblx0cmV0dXJuICh0YXJnZXQ6IG9iamVjdCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBnZXRFeGlzdGluZ01ldGEodGFyZ2V0KTtcblx0XHRtZXRhZGF0YS5zZXQoaWR4LCB7IGtleSB9KTtcblx0XHRkZWZpbmVNZXRhKENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgbWV0YWRhdGEsIHRhcmdldCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEV4aXN0aW5nTWV0YSh0YXJnZXQ6IG9iamVjdCkge1xuXHRjb25zdCBtZXRhID1cblx0XHRnZXRNZXRhPE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPj4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0YXJnZXQpID8/XG5cdFx0bmV3IE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPigpO1xuXHRyZXR1cm4gbWV0YTtcbn1cbiJdLCJuYW1lcyI6WyJpbmplY3QiLCJrZXkiLCJ0YXJnZXQiLCJfcHJvcGVydHlLZXkiLCJpZHgiLCJtZXRhZGF0YSIsImdldEV4aXN0aW5nTWV0YSIsInNldCIsImRlZmluZU1ldGEiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3R0b2tlbiIsIm1ldGEiLCJnZXRNZXRhIiwiTWFwIl0sIm1hcHBpbmdzIjoiOzs7OytCQWNnQkE7OztlQUFBQTs7OzRCQWR3Qzt1QkFDM0I7QUFhdEIsU0FBU0EsT0FBT0MsR0FBb0M7SUFDMUQsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCTyxJQUFBQSxzQkFBVSxFQUFDQyxtQkFBWSxDQUFDQyxXQUFXLEVBQUVMLFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTVMsT0FDTEMsSUFBQUEsbUJBQU8sRUFBOEJILG1CQUFZLENBQUNDLFdBQVcsRUFBRVIsV0FDL0QsSUFBSVc7SUFDTCxPQUFPRjtBQUNSIn0=
|
|
@@ -16,53 +16,54 @@ class CrucibleBuilder {
|
|
|
16
16
|
constructor(options){
|
|
17
17
|
this.serviceRegistry = options?.serviceRegistry ?? new _serviceregistry.ServiceRegistry();
|
|
18
18
|
}
|
|
19
|
+
get override() {
|
|
20
|
+
return this.createRegistrar(true);
|
|
21
|
+
}
|
|
19
22
|
registerType(type, scope = _const.Scopes.transient) {
|
|
20
|
-
|
|
21
|
-
typeOrKey: type.name,
|
|
22
|
-
typeOrInstance: type
|
|
23
|
-
});
|
|
24
|
-
return registration;
|
|
23
|
+
return this.register(false)(scope)(type.name, type);
|
|
25
24
|
}
|
|
26
25
|
registerTypes(scopeOrType, ...types) {
|
|
27
|
-
|
|
28
|
-
const isScope = typeof scopeOrType !== "function";
|
|
29
|
-
const scope = isScope ? scopeOrType : _const.Scopes.transient;
|
|
30
|
-
const allTypes = isScope ? types : [
|
|
31
|
-
scopeOrType,
|
|
32
|
-
...types
|
|
33
|
-
];
|
|
34
|
-
for (const type of allTypes){
|
|
35
|
-
const registration = this.registerType(type, scope);
|
|
36
|
-
registrations.push(registration);
|
|
37
|
-
}
|
|
38
|
-
return registrations;
|
|
26
|
+
return this.registerMany(false, scopeOrType, types);
|
|
39
27
|
}
|
|
40
28
|
registerTransient(typeOrKey, type) {
|
|
41
|
-
|
|
42
|
-
typeOrKey,
|
|
43
|
-
typeOrInstance: type
|
|
44
|
-
});
|
|
45
|
-
return registration;
|
|
29
|
+
return this.register(false)(_const.Scopes.transient)(typeOrKey, type);
|
|
46
30
|
}
|
|
47
31
|
registerSingleton(typeOrKey, typeOrInstance) {
|
|
48
|
-
|
|
49
|
-
typeOrKey,
|
|
50
|
-
typeOrInstance
|
|
51
|
-
});
|
|
52
|
-
return registration;
|
|
32
|
+
return this.register(false)(_const.Scopes.singleton)(typeOrKey, typeOrInstance);
|
|
53
33
|
}
|
|
54
34
|
registerRequestScoped(typeOrKey, type) {
|
|
55
|
-
|
|
56
|
-
typeOrKey,
|
|
57
|
-
typeOrInstance: type
|
|
58
|
-
});
|
|
59
|
-
return registration;
|
|
35
|
+
return this.register(false)(_const.Scopes.request)(typeOrKey, type);
|
|
60
36
|
}
|
|
61
37
|
build() {
|
|
62
38
|
return new _crucible.Crucible({
|
|
63
39
|
serviceRegistry: this.serviceRegistry
|
|
64
40
|
});
|
|
65
41
|
}
|
|
42
|
+
register = (override)=>(scope)=>(typeOrKey, typeOrInstance)=>this.serviceRegistry.registerType(scope, {
|
|
43
|
+
typeOrKey,
|
|
44
|
+
typeOrInstance,
|
|
45
|
+
override
|
|
46
|
+
});
|
|
47
|
+
registerMany(override, scopeOrType, types) {
|
|
48
|
+
const bind = this.register(override);
|
|
49
|
+
const isScope = typeof scopeOrType !== "function";
|
|
50
|
+
const scope = isScope ? scopeOrType : _const.Scopes.transient;
|
|
51
|
+
const allTypes = isScope ? types : [
|
|
52
|
+
scopeOrType,
|
|
53
|
+
...types
|
|
54
|
+
];
|
|
55
|
+
return allTypes.map((type)=>bind(scope)(type.name, type));
|
|
56
|
+
}
|
|
57
|
+
createRegistrar(override) {
|
|
58
|
+
const bind = this.register(override);
|
|
59
|
+
return {
|
|
60
|
+
registerType: (type, scope = _const.Scopes.transient)=>bind(scope)(type.name, type),
|
|
61
|
+
registerTypes: (scopeOrType, ...types)=>this.registerMany(override, scopeOrType, types),
|
|
62
|
+
registerTransient: (typeOrKey, type)=>bind(_const.Scopes.transient)(typeOrKey, type),
|
|
63
|
+
registerSingleton: (typeOrKey, typeOrInstance)=>bind(_const.Scopes.singleton)(typeOrKey, typeOrInstance),
|
|
64
|
+
registerRequestScoped: (typeOrKey, type)=>bind(_const.Scopes.request)(typeOrKey, type)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgQ29udGFpbmVyUmVnaXN0cmFyLCBTY29wZSB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQ3J1Y2libGUgfSBmcm9tIFwiLi9jcnVjaWJsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RlclR5cGVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENvbnRhaW5lckJ1aWxkZXJPcHRpb25zID0ge1xuXHRzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeTtcbn07XG5cbnR5cGUgUmVnaXN0ZXJGbiA9IChcblx0dHlwZU9yS2V5OiBSZWdpc3RlclR5cGVPcHRpb25zW1widHlwZU9yS2V5XCJdLFxuXHR0eXBlT3JJbnN0YW5jZT86IFJlZ2lzdGVyVHlwZU9wdGlvbnNbXCJ0eXBlT3JJbnN0YW5jZVwiXSxcbikgPT4gU2VydmljZVJlZ2lzdHJhdGlvbjtcblxuZXhwb3J0IGNsYXNzIENydWNpYmxlQnVpbGRlciBpbXBsZW1lbnRzIENvbnRhaW5lckJ1aWxkZXIge1xuXHRwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5O1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbnRhaW5lckJ1aWxkZXJPcHRpb25zKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBvcHRpb25zPy5zZXJ2aWNlUmVnaXN0cnkgPz8gbmV3IFNlcnZpY2VSZWdpc3RyeSgpO1xuXHR9XG5cblx0cHVibGljIGdldCBvdmVycmlkZSgpOiBDb250YWluZXJSZWdpc3RyYXIge1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVJlZ2lzdHJhcih0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ29uc3RydWN0YWJsZSwgc2NvcGU6IFNjb3BlID0gU2NvcGVzLnRyYW5zaWVudCkge1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyKGZhbHNlKShzY29wZSkodHlwZS5uYW1lLCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNYW55KGZhbHNlLCBzY29wZU9yVHlwZSwgdHlwZXMpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KFxuXHRcdGtleTogc3RyaW5nIHwgc3ltYm9sLFxuXHRcdHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSwgdHlwZT86IENvbnN0cnVjdGFibGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWdpc3RlcihmYWxzZSkoU2NvcGVzLnRyYW5zaWVudCkodHlwZU9yS2V5LCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdFx0aW5zdGFuY2U6IG9iamVjdCxcblx0KTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKGtleTogc3RyaW5nIHwgc3ltYm9sLCB0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlLFxuXHRcdHR5cGVPckluc3RhbmNlPzogQ29uc3RydWN0YWJsZSB8IG9iamVjdCxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5zaW5nbGV0b24pKHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXIgPVxuXHRcdChvdmVycmlkZTogYm9vbGVhbikgPT5cblx0XHQoc2NvcGU6IFNjb3BlKTogUmVnaXN0ZXJGbiA9PlxuXHRcdCh0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlKSA9PlxuXHRcdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKHNjb3BlLCB7XG5cdFx0XHRcdHR5cGVPcktleSxcblx0XHRcdFx0dHlwZU9ySW5zdGFuY2UsXG5cdFx0XHRcdG92ZXJyaWRlLFxuXHRcdFx0fSk7XG5cblx0cHJpdmF0ZSByZWdpc3Rlck1hbnkoXG5cdFx0b3ZlcnJpZGU6IGJvb2xlYW4sXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlczogQ29uc3RydWN0YWJsZVtdLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGJpbmQgPSB0aGlzLnJlZ2lzdGVyKG92ZXJyaWRlKTtcblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0cmV0dXJuIGFsbFR5cGVzLm1hcCgodHlwZSkgPT4gYmluZChzY29wZSkodHlwZS5uYW1lLCB0eXBlKSk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhcihvdmVycmlkZTogYm9vbGVhbik6IENvbnRhaW5lclJlZ2lzdHJhciB7XG5cdFx0Y29uc3QgYmluZCA9IHRoaXMucmVnaXN0ZXIob3ZlcnJpZGUpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZWdpc3RlclR5cGU6ICh0eXBlLCBzY29wZSA9IFNjb3Blcy50cmFuc2llbnQpID0+IGJpbmQoc2NvcGUpKHR5cGUubmFtZSwgdHlwZSksXG5cdFx0XHRyZWdpc3RlclR5cGVzOiAoKHNjb3BlT3JUeXBlLCAuLi50eXBlcykgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3Rlck1hbnkoXG5cdFx0XHRcdFx0b3ZlcnJpZGUsXG5cdFx0XHRcdFx0c2NvcGVPclR5cGUsXG5cdFx0XHRcdFx0dHlwZXMsXG5cdFx0XHRcdCkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHlwZXNcIl0sXG5cdFx0XHRyZWdpc3RlclRyYW5zaWVudDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy50cmFuc2llbnQpKHR5cGVPcktleSwgdHlwZSkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHJhbnNpZW50XCJdLFxuXHRcdFx0cmVnaXN0ZXJTaW5nbGV0b246ICgodHlwZU9yS2V5LCB0eXBlT3JJbnN0YW5jZT8pID0+XG5cdFx0XHRcdGJpbmQoU2NvcGVzLnNpbmdsZXRvbikoXG5cdFx0XHRcdFx0dHlwZU9yS2V5LFxuXHRcdFx0XHRcdHR5cGVPckluc3RhbmNlLFxuXHRcdFx0XHQpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclNpbmdsZXRvblwiXSxcblx0XHRcdHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclJlcXVlc3RTY29wZWRcIl0sXG5cdFx0fTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNydWNpYmxlQnVpbGRlciIsInNlcnZpY2VSZWdpc3RyeSIsIm9wdGlvbnMiLCJTZXJ2aWNlUmVnaXN0cnkiLCJvdmVycmlkZSIsImNyZWF0ZVJlZ2lzdHJhciIsInJlZ2lzdGVyVHlwZSIsInR5cGUiLCJzY29wZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsInJlZ2lzdGVyIiwibmFtZSIsInJlZ2lzdGVyVHlwZXMiLCJzY29wZU9yVHlwZSIsInR5cGVzIiwicmVnaXN0ZXJNYW55IiwicmVnaXN0ZXJUcmFuc2llbnQiLCJ0eXBlT3JLZXkiLCJyZWdpc3RlclNpbmdsZXRvbiIsInR5cGVPckluc3RhbmNlIiwic2luZ2xldG9uIiwicmVnaXN0ZXJSZXF1ZXN0U2NvcGVkIiwicmVxdWVzdCIsImJ1aWxkIiwiQ3J1Y2libGUiLCJiaW5kIiwiaXNTY29wZSIsImFsbFR5cGVzIiwibWFwIl0sIm1hcHBpbmdzIjoiOzs7OytCQWlCYUE7OztlQUFBQTs7O3VCQWhCVTswQkFHRTtpQ0FFTztBQVd6QixNQUFNQTtJQUNKQyxnQkFBaUM7SUFDekMsWUFBbUJDLE9BQWlDLENBQUU7UUFDckQsSUFBSSxDQUFDRCxlQUFlLEdBQUdDLFNBQVNELG1CQUFtQixJQUFJRSxnQ0FBZTtJ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
|
|
@@ -18,6 +18,7 @@ class Crucible {
|
|
|
18
18
|
key;
|
|
19
19
|
instances = new Map();
|
|
20
20
|
serviceRegistry;
|
|
21
|
+
parent;
|
|
21
22
|
rootScope;
|
|
22
23
|
scopes = new Map();
|
|
23
24
|
logger = _scribe.scribe.logger(Crucible.name);
|
|
@@ -26,7 +27,8 @@ class Crucible {
|
|
|
26
27
|
this.key = options?.key;
|
|
27
28
|
this.serviceRegistry = new _serviceregistry.ServiceRegistry(options?.serviceRegistry);
|
|
28
29
|
this.registerLifetimeScope();
|
|
29
|
-
this.
|
|
30
|
+
this.parent = options?.parent;
|
|
31
|
+
this.rootScope = options?.parent?.rootScope ?? this;
|
|
30
32
|
}
|
|
31
33
|
resolveMany(resolveRequest) {
|
|
32
34
|
const key = new _registrationkeymodel.RegistrationKey(resolveRequest);
|
|
@@ -52,15 +54,20 @@ class Crucible {
|
|
|
52
54
|
return service;
|
|
53
55
|
}
|
|
54
56
|
beginScope(name) {
|
|
55
|
-
if (this.
|
|
57
|
+
if (this.isDisposed) {
|
|
58
|
+
throw new Error("This container has been disposed");
|
|
59
|
+
}
|
|
60
|
+
if (name != null && this.scopes.has(name)) {
|
|
56
61
|
throw new _errors.DuplicateScopeError(`Cannot create duplicate scope. Scope with ${name} is already created and has not been disposed.`);
|
|
57
62
|
}
|
|
58
63
|
const scope = new Crucible({
|
|
59
64
|
key: name,
|
|
60
65
|
serviceRegistry: this.serviceRegistry,
|
|
61
|
-
|
|
66
|
+
parent: this
|
|
62
67
|
});
|
|
63
|
-
|
|
68
|
+
if (name != null) {
|
|
69
|
+
this.scopes.set(name, scope);
|
|
70
|
+
}
|
|
64
71
|
return scope;
|
|
65
72
|
}
|
|
66
73
|
[Symbol.dispose]() {
|
|
@@ -80,6 +87,8 @@ class Crucible {
|
|
|
80
87
|
return;
|
|
81
88
|
}
|
|
82
89
|
this.isDisposed = true;
|
|
90
|
+
this.parent?.releaseScope(this.key);
|
|
91
|
+
this.scopes.clear();
|
|
83
92
|
for (const [, inst] of this.instances){
|
|
84
93
|
if (inst === this) {
|
|
85
94
|
continue;
|
|
@@ -92,6 +101,8 @@ class Crucible {
|
|
|
92
101
|
return;
|
|
93
102
|
}
|
|
94
103
|
this.isDisposed = true;
|
|
104
|
+
this.parent?.releaseScope(this.key);
|
|
105
|
+
this.scopes.clear();
|
|
95
106
|
for (const [, inst] of this.instances){
|
|
96
107
|
if (inst === this) {
|
|
97
108
|
continue;
|
|
@@ -120,7 +131,7 @@ class Crucible {
|
|
|
120
131
|
}
|
|
121
132
|
getOrCreateInstance(registration) {
|
|
122
133
|
if (this.isDisposed) {
|
|
123
|
-
throw new Error("This
|
|
134
|
+
throw new Error("This container has been disposed");
|
|
124
135
|
}
|
|
125
136
|
const { key, type, isInstance } = registration;
|
|
126
137
|
const cacheKey = isInstance ? key.value : type;
|
|
@@ -154,12 +165,18 @@ class Crucible {
|
|
|
154
165
|
}
|
|
155
166
|
return resolved;
|
|
156
167
|
}
|
|
168
|
+
releaseScope(name) {
|
|
169
|
+
if (name == null) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.scopes.delete(name);
|
|
173
|
+
}
|
|
157
174
|
registerLifetimeScope() {
|
|
158
|
-
this.serviceRegistry.
|
|
175
|
+
this.serviceRegistry.replaceType(_const.Scopes.request, {
|
|
159
176
|
typeOrKey: _const.LifetimeScopeToken,
|
|
160
177
|
typeOrInstance: this
|
|
161
178
|
});
|
|
162
179
|
}
|
|
163
180
|
}
|
|
164
181
|
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRyb290U2NvcGU/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucm9vdFNjb3BlID8/IHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZU1hbnk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ocmVzb2x2ZVJlcXVlc3Q6IFJlc29sdmVSZXF1ZXN0PFQ+KTogVFtdIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb25zID0gdGhpcy5nZXRSZWdpc3RyYXRpb25Gcm9tKGtleSkgPz8gW107XG5cblx0XHRjb25zdCBzZXJ2aWNlcyA9IEFycmF5Lm9mPFQ+KCk7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xuXHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb24pO1xuXHRcdFx0c2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlcnZpY2VzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmU8VCBleHRlbmRzIG9iamVjdCB8IG9iamVjdFtdPihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KTtcblx0XHRpZiAocmVnaXN0cmF0aW9uID09IG51bGwpIHtcblx0XHRcdHRoaXMubG9nZ2VyLndhcm4oYENhbm5vdCByZXNvbHZlIGRlcGVuZGVuY3kgJHtrZXkudG9TdHJpbmcoKX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWdpc3RyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlc29sdmVFcnJvcihcblx0XHRcdFx0YFRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2aWNlcyByZWdpc3RlcmVkIHdpdGgga2V5ICR7a2V5LnRvU3RyaW5nKCl9LiBVc2UgcmVzb2x2ZU1hbnkgdG8gcmVzb2x2ZSBhbGwgaW1wbGVtZW50YXRpb25zLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aGlzLnJlc29sdmVSZWdpc3RyYXRpb248VD4ocmVnaXN0cmF0aW9uWzBdKTtcblx0XHRyZXR1cm4gc2VydmljZTtcblx0fVxuXG5cdHB1YmxpYyBiZWdpblNjb3BlKG5hbWU/OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5zY29wZXMuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRHVwbGljYXRlU2NvcGVFcnJvcihcblx0XHRcdFx0YENhbm5vdCBjcmVhdGUgZHVwbGljYXRlIHNjb3BlLiBTY29wZSB3aXRoICR7bmFtZX0gaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBoYXMgbm90IGJlZW4gZGlzcG9zZWQuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBuZXcgQ3J1Y2libGUoe1xuXHRcdFx0a2V5OiBuYW1lLFxuXHRcdFx0c2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSxcblx0XHRcdHJvb3RTY29wZTogdGhpcyxcblx0XHR9KTtcblxuXHRcdHRoaXMuc2NvcGVzLnNldChuYW1lLCBzY29wZSk7XG5cdFx0cmV0dXJuIHNjb3BlO1xuXHR9XG5cblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2VTeW5jKCk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlQXN5bmMoKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZVN5bmMoKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpbnN0W1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwb3NlQXN5bmMoKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRjb25zdCB7IGtleSwgdHlwZSwgaXNJbnN0YW5jZSB9ID0gcmVnaXN0cmF0aW9uO1xuXHRcdGNvbnN0IGNhY2hlS2V5ID0gaXNJbnN0YW5jZSA/IGtleS52YWx1ZSA6IHR5cGU7XG5cdFx0Y29uc3QgZXhpc3RpbmdJbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmdldChjYWNoZUtleSk7XG5cdFx0aWYgKGV4aXN0aW5nSW5zdGFuY2UgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGV4aXN0aW5nSW5zdGFuY2UgYXMgVDtcblx0XHR9XG5cblx0XHRjb25zdCBpbnN0YW5jZSA9IGlzSW5zdGFuY2UgPyAodHlwZSBhcyBUKSA6IHRoaXMuY3JlYXRlSW5zdGFuY2U8VD4ocmVnaXN0cmF0aW9uKTtcblx0XHR0aGlzLmluc3RhbmNlcy5zZXQoY2FjaGVLZXksIGluc3RhbmNlKTtcblx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGNvbnN0IHR5cGUgPSByZWdpc3RyYXRpb24udHlwZSBhcyBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHRcdGNvbnN0IGNhbkNvbnN0cnVjdCA9IGlzQ29uc3RydWN0YWJsZSh0eXBlKTtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5yZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGUpO1xuXHRcdGNvbnN0IGluc3QgPSAoY2FuQ29uc3RydWN0ID8gbmV3IHR5cGUoLi4uZGVwcykgOiB0eXBlKCkpIGFzIFQ7XG5cdFx0cmV0dXJuIGluc3Q7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVEZXBlbmRlbmNpZXModHlwZTogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSk6IHVua25vd25bXSB7XG5cdFx0Y29uc3QgcGFyYW1zID0gZ2V0TWV0YTxBcnJheTxDb25zdHJ1Y3RhYmxlPj4oUmVmbGVjdGlvbk1ldGEucGFyYW10eXBlcywgdHlwZSkgPz8gW107XG5cblx0XHRjb25zdCBpbmplY3RUb2tlbnMgPVxuXHRcdFx0Z2V0TWV0YTxJbmplY3Rpb25NZXRhZGF0YT4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0eXBlKSA/PyBuZXcgTWFwKCk7XG5cblx0XHQvL1RPRE86IHB1dCBhIHRyeSBjYXRjaCBoZXJlIHNvIHdlIGNhbiB0aHJvdyB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxuXHRcdGxldCByZXNvbHZlZCA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCB0b2tlbiA9IGluamVjdFRva2Vucy5nZXQoaSk/LmtleSA/PyBwYXJhbXNbaV0ubmFtZTtcblx0XHRcdGNvbnN0IGRlcCA9IGlzQXJyYXlUeXBlKHBhcmFtc1tpXSkgPyB0aGlzLnJlc29sdmVNYW55KHRva2VuKSA6IHRoaXMucmVzb2x2ZSh0b2tlbik7XG5cdFx0XHRyZXNvbHZlZCA9IFsuLi5yZXNvbHZlZCwgZGVwXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc29sdmVkO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy5yZXF1ZXN0LCB7XG5cdFx0XHR0eXBlT3JLZXk6IExpZmV0aW1lU2NvcGVUb2tlbixcblx0XHRcdHR5cGVPckluc3RhbmNlOiB0aGlzLFxuXHRcdH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQ3J1Y2libGUiLCJrZXkiLCJpbnN0YW5jZXMiLCJNYXAiLCJzZXJ2aWNlUmVnaXN0cnkiLCJyb290U2NvcGUiLCJzY29wZXMiLCJsb2dnZXIiLCJzY3JpYmUiLCJuYW1lIiwiaXNEaXNwb3NlZCIsIm9wdGlvbnMiLCJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RlckxpZmV0aW1lU2NvcGUiLCJyZXNvbHZlTWFueSIsInJlc29sdmVSZXF1ZXN0IiwiUmVnaXN0cmF0aW9uS2V5IiwicmVnaXN0cmF0aW9ucyIsImdldFJlZ2lzdHJhdGlvbkZyb20iLCJzZXJ2aWNlcyIsIkFycmF5Iiwib2YiLCJyZWdpc3RyYXRpb24iLCJzZXJ2aWNlIiwicmVzb2x2ZVJlZ2lzdHJhdGlvbiIsInB1c2giLCJyZXNvbHZlIiwid2FybiIsInRvU3RyaW5nIiwibGVuZ3RoIiwiUmVzb2x2ZUVycm9yIiwiYmVnaW5TY29wZSIsImhhcyIsIkR1cGxpY2F0ZVNjb3BlRXJyb3IiLCJzY29wZSIsInNldCIsIlN5bWJvbCIsImRpc3Bvc2UiLCJkaXNwb3NlU3luYyIsImFzeW5jRGlzcG9zZSIsImRpc3Bvc2VBc3luYyIsImluc3QiLCJnZXRSZWdpc3RyYXRpb24iLCJ2YWx1ZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsImNyZWF0ZUluc3RhbmNlIiwic2luZ2xldG9uIiwiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsInJlcXVlc3QiLCJFcnJvciIsInR5cGUiLCJpc0luc3RhbmNlIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luc3RhbmNlIiwiZ2V0IiwiaW5zdGFuY2UiLCJjYW5Db25zdHJ1Y3QiLCJpc0NvbnN0cnVjdGFibGUiLCJkZXBzIiwicmVzb2x2ZURlcGVuZGVuY2llcyIsInBhcmFtcyIsImdldE1ldGEiLCJSZWZsZWN0aW9uTWV0YSIsInBhcmFtdHlwZXMiLCJpbmplY3RUb2tlbnMiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3R0b2tlbiIsInJlc29sdmVkIiwiaSIsInRva2VuIiwiZGVwIiwiaXNBcnJheVR5cGUiLCJyZWdpc3RlclR5cGUiLCJ0eXBlT3JLZXkiLCJMaWZldGltZVNjb3BlVG9rZW4iLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozs0QkFoQk47d0JBQ2dCO3VCQUNrQztzQ0FFekI7d0JBRWtCO2lDQUVsQjtBQVF6QixNQUFNQTtJQUNMQyxJQUFZO0lBQ1RDLFlBQVksSUFBSUMsTUFBdUI7SUFDekNDLGdCQUFpQztJQUNqQ0MsVUFBb0I7SUFDcEJDLFNBQVMsSUFBSUgsTUFBNkI7SUFDMUNJLFNBQVNDLGNBQU0sQ0FBQ0QsTUFBTSxDQUFDUCxTQUFTUyxJQUFJLEVBQUU7SUFDdENDLGFBQWEsTUFBTTtJQUMzQixZQUFtQkMsT0FBeUIsQ0FBRTtRQUM3QyxJQUFJLENBQUNWLEdBQUcsR0FBR1UsU0FBU1Y7UUFDcEIsSUFBSSxDQUFDRyxlQUFlLEdBQUcsSUFBSVEsZ0NBQWUsQ0FBQ0QsU0FBU1A7UUFDcEQsSUFBSSxDQUFDUyxxQkFBcUI7UUFDMUIsSUFBSSxDQUFDUixTQUFTLEdBQUdNLFNBQVNOLGFBQWEsSUFBSTtJQUM1QztJQUVPUyxZQUF1Q0MsY0FBaUMsRUFBTztRQUNyRixNQUFNZCxNQUFNLElBQUllLHFDQUFlLENBQUNEO1FBQ2hDLE1BQU1FLGdCQUFnQixJQUFJLENBQUNDLG1CQUFtQixDQUFDakIsUUFBUSxFQUFFO1FBRXpELE1BQU1rQixXQUFXQyxNQUFNQyxFQUFFO1FBQ3pCLEtBQUssTUFBTUMsZ0JBQWdCTCxjQUFlO1lBQ3pDLE1BQU1NLFVBQVUsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBSUY7WUFDNUNILFNBQVNNLElBQUksQ0FBQ0Y7UUFDZjtRQUNBLE9BQU9KO0lBQ1I7SUFFT08sUUFBcUNYLGNBQWlDLEVBQUs7UUFDakYsTUFBTWQsTUFBTSxJQUFJZSxxQ0FBZSxDQUFDRDtRQUNoQyxNQUFNTyxlQUFlLElBQUksQ0FBQ0osbUJBQW1CLENBQUNqQjtR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
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRwYXJlbnQ/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcGFyZW50PzogQ3J1Y2libGU7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucz8ucGFyZW50O1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucGFyZW50Py5yb290U2NvcGUgPz8gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlTWFueTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUW10ge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbnMgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KSA/PyBbXTtcblxuXHRcdGNvbnN0IHNlcnZpY2VzID0gQXJyYXkub2Y8VD4oKTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJhdGlvbiBvZiByZWdpc3RyYXRpb25zKSB7XG5cdFx0XHRjb25zdCBzZXJ2aWNlID0gdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VydmljZXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZTxUIGV4dGVuZHMgb2JqZWN0IHwgb2JqZWN0W10+KHJlc29sdmVSZXF1ZXN0OiBSZXNvbHZlUmVxdWVzdDxUPik6IFQge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuZ2V0UmVnaXN0cmF0aW9uRnJvbShrZXkpO1xuXHRcdGlmIChyZWdpc3RyYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sb2dnZXIud2FybihgQ2Fubm90IHJlc29sdmUgZGVwZW5kZW5jeSAke2tleS50b1N0cmluZygpfWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZ2lzdHJhdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVzb2x2ZUVycm9yKFxuXHRcdFx0XHRgVGhlcmUgYXJlIG11bHRpcGxlIHNlcnZpY2VzIHJlZ2lzdGVyZWQgd2l0aCBrZXkgJHtrZXkudG9TdHJpbmcoKX0uIFVzZSByZXNvbHZlTWFueSB0byByZXNvbHZlIGFsbCBpbXBsZW1lbnRhdGlvbnMuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb25bMF0pO1xuXHRcdHJldHVybiBzZXJ2aWNlO1xuXHR9XG5cblx0cHVibGljIGJlZ2luU2NvcGUobmFtZT86IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGFpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRpZiAobmFtZSAhPSBudWxsICYmIHRoaXMuc2NvcGVzLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IER1cGxpY2F0ZVNjb3BlRXJyb3IoXG5cdFx0XHRcdGBDYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBzY29wZS4gU2NvcGUgd2l0aCAke25hbWV9IGlzIGFscmVhZHkgY3JlYXRlZCBhbmQgaGFzIG5vdCBiZWVuIGRpc3Bvc2VkLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjb3BlID0gbmV3IENydWNpYmxlKHtcblx0XHRcdGtleTogbmFtZSxcblx0XHRcdHNlcnZpY2VSZWdpc3RyeTogdGhpcy5zZXJ2aWNlUmVnaXN0cnksXG5cdFx0XHRwYXJlbnQ6IHRoaXMsXG5cdFx0fSk7XG5cblx0XHRpZiAobmFtZSAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNjb3Blcy5zZXQobmFtZSwgc2NvcGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2NvcGU7XG5cdH1cblxuXHRwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZVN5bmMoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VBc3luYygpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNwb3NlU3luYygpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnBhcmVudD8ucmVsZWFzZVNjb3BlKHRoaXMua2V5KTtcblx0XHR0aGlzLnNjb3Blcy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgWywgaW5zdF0gb2YgdGhpcy5pbnN0YW5jZXMpIHtcblx0XHRcdGlmIChpbnN0ID09PSB0aGlzKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aW5zdFtTeW1ib2wuZGlzcG9zZV0/LigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUFzeW5jKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucGFyZW50Py5yZWxlYXNlU2NvcGUodGhpcy5rZXkpO1xuXHRcdHRoaXMuc2NvcGVzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRhaW5lciBoYXMgYmVlbiBkaXNwb3NlZFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgeyBrZXksIHR5cGUsIGlzSW5zdGFuY2UgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRjb25zdCBjYWNoZUtleSA9IGlzSW5zdGFuY2UgPyBrZXkudmFsdWUgOiB0eXBlO1xuXHRcdGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQoY2FjaGVLZXkpO1xuXHRcdGlmIChleGlzdGluZ0luc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBleGlzdGluZ0luc3RhbmNlIGFzIFQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBpc0luc3RhbmNlID8gKHR5cGUgYXMgVCkgOiB0aGlzLmNyZWF0ZUluc3RhbmNlPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0dGhpcy5pbnN0YW5jZXMuc2V0KGNhY2hlS2V5LCBpbnN0YW5jZSk7XG5cdFx0cmV0dXJuIGluc3RhbmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB0eXBlID0gcmVnaXN0cmF0aW9uLnR5cGUgYXMgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0XHRjb25zdCBjYW5Db25zdHJ1Y3QgPSBpc0NvbnN0cnVjdGFibGUodHlwZSk7XG5cdFx0Y29uc3QgZGVwcyA9IHRoaXMucmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlKTtcblx0XHRjb25zdCBpbnN0ID0gKGNhbkNvbnN0cnVjdCA/IG5ldyB0eXBlKC4uLmRlcHMpIDogdHlwZSgpKSBhcyBUO1xuXHRcdHJldHVybiBpbnN0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IGdldE1ldGE8QXJyYXk8Q29uc3RydWN0YWJsZT4+KFJlZmxlY3Rpb25NZXRhLnBhcmFtdHlwZXMsIHR5cGUpID8/IFtdO1xuXG5cdFx0Y29uc3QgaW5qZWN0VG9rZW5zID1cblx0XHRcdGdldE1ldGE8SW5qZWN0aW9uTWV0YWRhdGE+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdHlwZSkgPz8gbmV3IE1hcCgpO1xuXG5cdFx0Ly9UT0RPOiBwdXQgYSB0cnkgY2F0Y2ggaGVyZSBzbyB3ZSBjYW4gdGhyb3cgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2Vcblx0XHRsZXQgcmVzb2x2ZWQgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSBpbmplY3RUb2tlbnMuZ2V0KGkpPy5rZXkgPz8gcGFyYW1zW2ldLm5hbWU7XG5cdFx0XHRjb25zdCBkZXAgPSBpc0FycmF5VHlwZShwYXJhbXNbaV0pID8gdGhpcy5yZXNvbHZlTWFueSh0b2tlbikgOiB0aGlzLnJlc29sdmUodG9rZW4pO1xuXHRcdFx0cmVzb2x2ZWQgPSBbLi4ucmVzb2x2ZWQsIGRlcF07XG5cdFx0fVxuXHRcdHJldHVybiByZXNvbHZlZDtcblx0fVxuXG5cdHByaXZhdGUgcmVsZWFzZVNjb3BlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zY29wZXMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVwbGFjZVR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInBhcmVudCIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsInNjcmliZSIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsIlNlcnZpY2VSZWdpc3RyeSIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJSZWdpc3RyYXRpb25LZXkiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJSZXNvbHZlRXJyb3IiLCJiZWdpblNjb3BlIiwiRXJyb3IiLCJoYXMiLCJEdXBsaWNhdGVTY29wZUVycm9yIiwic2NvcGUiLCJzZXQiLCJTeW1ib2wiLCJkaXNwb3NlIiwiZGlzcG9zZVN5bmMiLCJhc3luY0Rpc3Bvc2UiLCJkaXNwb3NlQXN5bmMiLCJyZWxlYXNlU2NvcGUiLCJjbGVhciIsImluc3QiLCJnZXRSZWdpc3RyYXRpb24iLCJ2YWx1ZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsImNyZWF0ZUluc3RhbmNlIiwic2luZ2xldG9uIiwiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsInJlcXVlc3QiLCJ0eXBlIiwiaXNJbnN0YW5jZSIsImNhY2hlS2V5IiwiZXhpc3RpbmdJbnN0YW5jZSIsImdldCIsImluc3RhbmNlIiwiY2FuQ29uc3RydWN0IiwiaXNDb25zdHJ1Y3RhYmxlIiwiZGVwcyIsInJlc29sdmVEZXBlbmRlbmNpZXMiLCJwYXJhbXMiLCJnZXRNZXRhIiwiUmVmbGVjdGlvbk1ldGEiLCJwYXJhbXR5cGVzIiwiaW5qZWN0VG9rZW5zIiwiQ3J1Y2libGVNZXRhIiwiaW5qZWN0dG9rZW4iLCJyZXNvbHZlZCIsImkiLCJ0b2tlbiIsImRlcCIsImlzQXJyYXlUeXBlIiwiZGVsZXRlIiwicmVwbGFjZVR5cGUiLCJ0eXBlT3JLZXkiLCJMaWZldGltZVNjb3BlVG9rZW4iLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozs0QkFoQk47d0JBQ2dCO3VCQUNrQztzQ0FFekI7d0JBRWtCO2lDQUVsQjtBQVF6QixNQUFNQTtJQUNMQyxJQUFZO0lBQ1RDLFlBQVksSUFBSUMsTUFBdUI7SUFDekNDLGdCQUFpQztJQUNqQ0MsT0FBa0I7SUFDbEJDLFVBQW9CO0lBQ3BCQyxTQUFTLElBQUlKLE1BQTZCO0lBQzFDSyxTQUFTQyxjQUFNLENBQUNELE1BQU0sQ0FBQ1IsU0FBU1UsSUFBSSxFQUFFO0lBQ3RDQyxhQUFhLE1BQU07SUFD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
|
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "ServiceRegistry", {
|
|
|
10
10
|
});
|
|
11
11
|
const _registrationkeymodel = require("../models/registration-key.model.js");
|
|
12
12
|
const _serviceregistrationmodel = require("../models/service-registration.model.js");
|
|
13
|
+
const _errors = require("../types/errors.js");
|
|
13
14
|
class ServiceRegistry {
|
|
14
15
|
registrations;
|
|
15
16
|
constructor(parent){
|
|
@@ -17,10 +18,22 @@ class ServiceRegistry {
|
|
|
17
18
|
}
|
|
18
19
|
registerType(scope, options) {
|
|
19
20
|
const registration = this.createRegistrationFrom(scope, options);
|
|
20
|
-
const
|
|
21
|
+
const existing = this.getRegistrations(registration.key) ?? [];
|
|
22
|
+
const duplicate = existing.find((reg)=>reg.isEqual(registration));
|
|
23
|
+
if (duplicate != null && !options.override) {
|
|
24
|
+
throw new _errors.RegistrationError(`A service is already registered for key ${registration.key}. Use builder.override.registerSingleton() (or the matching register* method) to replace it.`);
|
|
25
|
+
}
|
|
26
|
+
const remaining = existing.filter((reg)=>!reg.isEqual(registration));
|
|
21
27
|
this.setRegistration(registration.key, [
|
|
22
28
|
registration,
|
|
23
|
-
...
|
|
29
|
+
...remaining
|
|
30
|
+
]);
|
|
31
|
+
return registration;
|
|
32
|
+
}
|
|
33
|
+
replaceType(scope, options) {
|
|
34
|
+
const registration = this.createRegistrationFrom(scope, options);
|
|
35
|
+
this.setRegistration(registration.key, [
|
|
36
|
+
registration
|
|
24
37
|
]);
|
|
25
38
|
return registration;
|
|
26
39
|
}
|
|
@@ -47,4 +60,4 @@ class ServiceRegistry {
|
|
|
47
60
|
}
|
|
48
61
|
}
|
|
49
62
|
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25FcnJvciB9IGZyb20gXCIuLi90eXBlcy9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJUeXBlT3B0aW9ucyA9IHtcblx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUgfCBvYmplY3Q7XG5cdG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUmVnaXN0cnkge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnM6IE1hcDxzdHJpbmcsIFNlcnZpY2VSZWdpc3RyYXRpb25bXT47XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTZXJ2aWNlUmVnaXN0cnkpIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKHBhcmVudD8ucmVnaXN0cmF0aW9ucyk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHNjb3BlOiBTY29wZSwgb3B0aW9uczogUmVnaXN0ZXJUeXBlT3B0aW9ucykge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSkgPz8gW107XG5cdFx0Y29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmcuZmluZCgocmVnKSA9PiByZWcuaXNFcXVhbChyZWdpc3RyYXRpb24pKTtcblx0XHRpZiAoZHVwbGljYXRlICE9IG51bGwgJiYgIW9wdGlvbnMub3ZlcnJpZGUpIHtcblx0XHRcdHRocm93IG5ldyBSZWdpc3RyYXRpb25FcnJvcihcblx0XHRcdFx0YEEgc2VydmljZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIGtleSAke3JlZ2lzdHJhdGlvbi5rZXl9LiBVc2UgYnVpbGRlci5vdmVycmlkZS5yZWdpc3RlclNpbmdsZXRvbigpIChvciB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIqIG1ldGhvZCkgdG8gcmVwbGFjZSBpdC5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCByZW1haW5pbmcgPSBleGlzdGluZy5maWx0ZXIoKHJlZykgPT4gIXJlZy5pc0VxdWFsKHJlZ2lzdHJhdGlvbikpO1xuXHRcdHRoaXMuc2V0UmVnaXN0cmF0aW9uKHJlZ2lzdHJhdGlvbi5rZXksIFtyZWdpc3RyYXRpb24sIC4uLnJlbWFpbmluZ10pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVwbGFjZVR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHR0aGlzLnNldFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24ua2V5LCBbcmVnaXN0cmF0aW9uXSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZWdpc3RyYXRpb24oa2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbltdIHtcblx0XHRjb25zdCBrZXlWYWwgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KGtleSkudmFsdWU7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChrZXlWYWwpO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhdGlvbkZyb20oc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgeyB0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IGlzS2V5ID0gdHlwZW9mIHR5cGVPcktleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN5bWJvbFwiO1xuXHRcdGNvbnN0IGlzSW5zdGFuY2UgPSB0eXBlb2YgdHlwZU9ySW5zdGFuY2UgPT09IFwib2JqZWN0XCI7XG5cdFx0Y29uc3Qga2V5ID0gbmV3IFJlZ2lzdHJhdGlvbktleSghaXNLZXkgPyB0eXBlT3JLZXkubmFtZSA6IHR5cGVPcktleSk7XG5cdFx0Y29uc3QgdHlwZSA9IGlzSW5zdGFuY2UgPyB0eXBlT3JJbnN0YW5jZSA6IGlzS2V5ID8gdHlwZU9ySW5zdGFuY2UgOiB0eXBlT3JLZXk7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IFNlcnZpY2VSZWdpc3RyYXRpb24oa2V5LCB0eXBlLCBzY29wZSwgaXNJbnN0YW5jZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVnaXN0cmF0aW9ucyhrZXk6IFJlZ2lzdHJhdGlvbktleSkge1xuXHRcdGNvbnN0IHZhbHVlID0ga2V5LnZhbHVlO1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0UmVnaXN0cmF0aW9uKGtleTogUmVnaXN0cmF0aW9uS2V5LCByZWdpc3RyYXRpb25zOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10pIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KGtleS52YWx1ZSwgcmVnaXN0cmF0aW9ucyk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RyYXRpb25zIiwicGFyZW50IiwiTWFwIiwicmVnaXN0ZXJUeXBlIiwic2NvcGUiLCJvcHRpb25zIiwicmVnaXN0cmF0aW9uIiwiY3JlYXRlUmVnaXN0cmF0aW9uRnJvbSIsImV4aXN0aW5nIiwiZ2V0UmVnaXN0cmF0aW9ucyIsImtleSIsImR1cGxpY2F0ZSIsImZpbmQiLCJyZWciLCJpc0VxdWFsIiwib3ZlcnJpZGUiLCJSZWdpc3RyYXRpb25FcnJvciIsInJlbWFpbmluZyIsImZpbHRlciIsInNldFJlZ2lzdHJhdGlvbiIsInJlcGxhY2VUeXBlIiwiZ2V0UmVnaXN0cmF0aW9uIiwia2V5VmFsIiwiUmVnaXN0cmF0aW9uS2V5IiwidmFsdWUiLCJnZXQiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSIsImlzS2V5IiwiaXNJbnN0YW5jZSIsIm5hbWUiLCJ0eXBlIiwiU2VydmljZVJlZ2lzdHJhdGlvbiIsInNldCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFZYUE7OztlQUFBQTs7O3NDQVhtQjswQ0FDSTt3QkFDRjtBQVMzQixNQUFNQTtJQUNLQyxjQUFrRDtJQUNuRSxZQUFtQkMsTUFBd0IsQ0FBRTtRQUM1QyxJQUFJLENBQUNELGFBQWEsR0FBRyxJQUFJRSxJQUFJRCxRQUFRRDtJQUN0QztJQUVPRyxhQUFhQyxLQUFZLEVBQUVDLE9BQTRCLEVBQUU7UUFDL0QsTUFBTUMsZUFBZSxJQUFJLENBQUNDLHNCQUFzQixDQUFDSCxPQUFPQztRQUN4RCxNQUFNRyxXQUFXLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNILGFBQWFJLEdBQUcsS0FBSyxFQUFFO1FBQzlELE1BQU1DLFlBQVlILFNBQVNJLElBQUksQ0FBQyxDQUFDQyxNQUFRQSxJQUFJQyxPQUFPLENBQUNSO1FBQ3JELElBQUlLLGFBQWEsUUFBUSxDQUFDTixRQUFRVSxRQUFRLEVBQUU7WUFDM0MsTUFBTSxJQUFJQyx5QkFBaUIsQ0FDMUIsQ0FBQyx3Q0FBd0MsRUFBRVYsYUFBYUksR0FBRyxDQUFDLDRGQUE0RixDQUFDO1FBRTNKO1FBRUEsTUFBTU8sWUFBWVQsU0FBU1UsTUFBTSxDQUFDLENBQUNMLE1BQVEsQ0FBQ0EsSUFBSUMsT0FBTyxDQUFDUjtRQUN4RCxJQUFJLENBQUNhLGVBQWUsQ0FBQ2IsYUFBYUksR0FBRyxFQUFFO1lBQUNKO2VBQWlCVztTQUFVO1FBQ25FLE9BQU9YO0lBQ1I7SUFFT2MsWUFBWWhCLEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUM5RCxNQUFNQyxlQUFlLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNILE9BQU9DO1FBQ3hELElBQUksQ0FBQ2MsZUFBZSxDQUFDYixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7U0FBYTtRQUNyRCxPQUFPQTtJQUNSO0lBRU9lLGdCQUFnQlgsR0FBb0MsRUFBeUI7UUFDbkYsTUFBTVksU0FBUyxJQUFJQyxxQ0FBZSxDQUFDYixLQUFLYyxLQUFLO1FBQzdDLE1BQU1sQixlQUFlLElBQUksQ0FBQ04sYUFBYSxDQUFDeUIsR0FBRyxDQUFDSDtRQUM1QyxPQUFPaEI7SUFDUjtJQUVRQyx1QkFBdUJILEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUMxRSxNQUFNLEVBQUVxQixTQUFTLEVBQUVDLGNBQWMsRUFBRSxHQUFHdEI7UUFDdEMsTUFBTXVCLFFBQVEsT0FBT0YsY0FBYyxZQUFZLE9BQU9BLGNBQWM7UUFDcEUsTUFBTUcsYUFBYSxPQUFPRixtQkFBbUI7UUFDN0MsTUFBTWpCLE1BQU0sSUFBSWEscUNBQWUsQ0FBQyxDQUFDSyxRQUFRRixVQUFVSSxJQUFJLEdBQUdKO1FBQzFELE1BQU1LLE9BQU9GLGFBQWFGLGlCQUFpQkMsUUFBUUQsaUJBQWlCRDtRQUNwRSxNQUFNcEIsZUFBZSxJQUFJMEIsNkNBQW1CLENBQUN0QixLQUFLcUIsTUFBTTNCLE9BQU95QjtRQUMvRCxPQUFPdkI7SUFDUjtJQUVRRyxpQkFBaUJDLEdBQW9CLEVBQUU7UUFDOUMsTUFBTWMsUUFBUWQsSUFBSWMsS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQ3hCLGFBQWEsQ0FBQ3lCLEdBQUcsQ0FBQ0Q7SUFDL0I7SUFFUUwsZ0JBQWdCVCxHQUFvQixFQUFFVixhQUFvQyxFQUFFO1FBQ25GLElBQUksQ0FBQ0EsYUFBYSxDQUFDaUMsR0FBRyxDQUFDdkIsSUFBSWMsS0FBSyxFQUFFeEI7SUFDbkM7QUFDRCJ9
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
+
_export_star(require("./errors.js"), exports);
|
|
5
6
|
_export_star(require("./types.js"), exports);
|
|
6
7
|
function _export_star(from, to) {
|
|
7
8
|
Object.keys(from).forEach(function(k) {
|
|
@@ -17,4 +18,4 @@ function _export_star(from, to) {
|
|
|
17
18
|
return from;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQSJ9
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { defineMeta, getMeta } from "@decohere/nexus/reflection";
|
|
2
2
|
import { CrucibleMeta } from "../const.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Bind a constructor parameter to a registration key.
|
|
5
|
+
* A class uses `Class.name` (same key as `registerSingleton(Class)`).
|
|
6
|
+
* Prefer the class over a name string. Use a symbol or string when the key is not the class name.
|
|
7
|
+
*/ export function inject(key) {
|
|
4
8
|
return (target, _propertyKey, idx)=>{
|
|
5
9
|
const metadata = getExistingMeta(target);
|
|
6
10
|
metadata.set(idx, {
|
|
@@ -14,4 +18,4 @@ function getExistingMeta(target) {
|
|
|
14
18
|
return meta;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RhYmxlLCBkZWZpbmVNZXRhLCBnZXRNZXRhIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDcnVjaWJsZU1ldGEgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgSW5qZWN0aW9uTWV0YWRhdGEgPSBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj47XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvblRva2VuID0ge1xuXHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGU7XG59O1xuXG4vKipcbiAqIEJpbmQgYSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gYSByZWdpc3RyYXRpb24ga2V5LlxuICogQSBjbGFzcyB1c2VzIGBDbGFzcy5uYW1lYCAoc2FtZSBrZXkgYXMgYHJlZ2lzdGVyU2luZ2xldG9uKENsYXNzKWApLlxuICogUHJlZmVyIHRoZSBjbGFzcyBvdmVyIGEgbmFtZSBzdHJpbmcuIFVzZSBhIHN5bWJvbCBvciBzdHJpbmcgd2hlbiB0aGUga2V5IGlzIG5vdCB0aGUgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpIHtcblx0cmV0dXJuICh0YXJnZXQ6IG9iamVjdCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBnZXRFeGlzdGluZ01ldGEodGFyZ2V0KTtcblx0XHRtZXRhZGF0YS5zZXQoaWR4LCB7IGtleSB9KTtcblx0XHRkZWZpbmVNZXRhKENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgbWV0YWRhdGEsIHRhcmdldCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEV4aXN0aW5nTWV0YSh0YXJnZXQ6IG9iamVjdCkge1xuXHRjb25zdCBtZXRhID1cblx0XHRnZXRNZXRhPE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPj4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0YXJnZXQpID8/XG5cdFx0bmV3IE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPigpO1xuXHRyZXR1cm4gbWV0YTtcbn1cbiJdLCJuYW1lcyI6WyJkZWZpbmVNZXRhIiwiZ2V0TWV0YSIsIkNydWNpYmxlTWV0YSIsImluamVjdCIsImtleSIsInRhcmdldCIsIl9wcm9wZXJ0eUtleSIsImlkeCIsIm1ldGFkYXRhIiwiZ2V0RXhpc3RpbmdNZXRhIiwic2V0IiwiaW5qZWN0dG9rZW4iLCJtZXRhIiwiTWFwIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUE2QkEsVUFBVSxFQUFFQyxPQUFPLFFBQVEsNkJBQTZCO0FBQ3JGLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBUTNDOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNDLE9BQU9DLEdBQW9DO0lBQzFELE9BQU8sQ0FBQ0MsUUFBZ0JDLGNBQTJDQztRQUNsRSxNQUFNQyxXQUFXQyxnQkFBZ0JKO1FBQ2pDRyxTQUFTRSxHQUFHLENBQUNILEtBQUs7WUFBRUg7UUFBSTtRQUN4QkosV0FBV0UsYUFBYVMsV0FBVyxFQUFFSCxVQUFVSDtJQUNoRDtBQUNEO0FBRUEsU0FBU0ksZ0JBQWdCSixNQUFjO0lBQ3RDLE1BQU1PLE9BQ0xYLFFBQXFDQyxhQUFhUyxXQUFXLEVBQUVOLFdBQy9ELElBQUlRO0lBQ0wsT0FBT0Q7QUFDUiJ9
|
|
@@ -6,53 +6,54 @@ export class CrucibleBuilder {
|
|
|
6
6
|
constructor(options){
|
|
7
7
|
this.serviceRegistry = options?.serviceRegistry ?? new ServiceRegistry();
|
|
8
8
|
}
|
|
9
|
+
get override() {
|
|
10
|
+
return this.createRegistrar(true);
|
|
11
|
+
}
|
|
9
12
|
registerType(type, scope = Scopes.transient) {
|
|
10
|
-
|
|
11
|
-
typeOrKey: type.name,
|
|
12
|
-
typeOrInstance: type
|
|
13
|
-
});
|
|
14
|
-
return registration;
|
|
13
|
+
return this.register(false)(scope)(type.name, type);
|
|
15
14
|
}
|
|
16
15
|
registerTypes(scopeOrType, ...types) {
|
|
17
|
-
|
|
18
|
-
const isScope = typeof scopeOrType !== "function";
|
|
19
|
-
const scope = isScope ? scopeOrType : Scopes.transient;
|
|
20
|
-
const allTypes = isScope ? types : [
|
|
21
|
-
scopeOrType,
|
|
22
|
-
...types
|
|
23
|
-
];
|
|
24
|
-
for (const type of allTypes){
|
|
25
|
-
const registration = this.registerType(type, scope);
|
|
26
|
-
registrations.push(registration);
|
|
27
|
-
}
|
|
28
|
-
return registrations;
|
|
16
|
+
return this.registerMany(false, scopeOrType, types);
|
|
29
17
|
}
|
|
30
18
|
registerTransient(typeOrKey, type) {
|
|
31
|
-
|
|
32
|
-
typeOrKey,
|
|
33
|
-
typeOrInstance: type
|
|
34
|
-
});
|
|
35
|
-
return registration;
|
|
19
|
+
return this.register(false)(Scopes.transient)(typeOrKey, type);
|
|
36
20
|
}
|
|
37
21
|
registerSingleton(typeOrKey, typeOrInstance) {
|
|
38
|
-
|
|
39
|
-
typeOrKey,
|
|
40
|
-
typeOrInstance
|
|
41
|
-
});
|
|
42
|
-
return registration;
|
|
22
|
+
return this.register(false)(Scopes.singleton)(typeOrKey, typeOrInstance);
|
|
43
23
|
}
|
|
44
24
|
registerRequestScoped(typeOrKey, type) {
|
|
45
|
-
|
|
46
|
-
typeOrKey,
|
|
47
|
-
typeOrInstance: type
|
|
48
|
-
});
|
|
49
|
-
return registration;
|
|
25
|
+
return this.register(false)(Scopes.request)(typeOrKey, type);
|
|
50
26
|
}
|
|
51
27
|
build() {
|
|
52
28
|
return new Crucible({
|
|
53
29
|
serviceRegistry: this.serviceRegistry
|
|
54
30
|
});
|
|
55
31
|
}
|
|
32
|
+
register = (override)=>(scope)=>(typeOrKey, typeOrInstance)=>this.serviceRegistry.registerType(scope, {
|
|
33
|
+
typeOrKey,
|
|
34
|
+
typeOrInstance,
|
|
35
|
+
override
|
|
36
|
+
});
|
|
37
|
+
registerMany(override, scopeOrType, types) {
|
|
38
|
+
const bind = this.register(override);
|
|
39
|
+
const isScope = typeof scopeOrType !== "function";
|
|
40
|
+
const scope = isScope ? scopeOrType : Scopes.transient;
|
|
41
|
+
const allTypes = isScope ? types : [
|
|
42
|
+
scopeOrType,
|
|
43
|
+
...types
|
|
44
|
+
];
|
|
45
|
+
return allTypes.map((type)=>bind(scope)(type.name, type));
|
|
46
|
+
}
|
|
47
|
+
createRegistrar(override) {
|
|
48
|
+
const bind = this.register(override);
|
|
49
|
+
return {
|
|
50
|
+
registerType: (type, scope = Scopes.transient)=>bind(scope)(type.name, type),
|
|
51
|
+
registerTypes: (scopeOrType, ...types)=>this.registerMany(override, scopeOrType, types),
|
|
52
|
+
registerTransient: (typeOrKey, type)=>bind(Scopes.transient)(typeOrKey, type),
|
|
53
|
+
registerSingleton: (typeOrKey, typeOrInstance)=>bind(Scopes.singleton)(typeOrKey, typeOrInstance),
|
|
54
|
+
registerRequestScoped: (typeOrKey, type)=>bind(Scopes.request)(typeOrKey, type)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgQ29udGFpbmVyUmVnaXN0cmFyLCBTY29wZSB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQ3J1Y2libGUgfSBmcm9tIFwiLi9jcnVjaWJsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RlclR5cGVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENvbnRhaW5lckJ1aWxkZXJPcHRpb25zID0ge1xuXHRzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeTtcbn07XG5cbnR5cGUgUmVnaXN0ZXJGbiA9IChcblx0dHlwZU9yS2V5OiBSZWdpc3RlclR5cGVPcHRpb25zW1widHlwZU9yS2V5XCJdLFxuXHR0eXBlT3JJbnN0YW5jZT86IFJlZ2lzdGVyVHlwZU9wdGlvbnNbXCJ0eXBlT3JJbnN0YW5jZVwiXSxcbikgPT4gU2VydmljZVJlZ2lzdHJhdGlvbjtcblxuZXhwb3J0IGNsYXNzIENydWNpYmxlQnVpbGRlciBpbXBsZW1lbnRzIENvbnRhaW5lckJ1aWxkZXIge1xuXHRwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5O1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbnRhaW5lckJ1aWxkZXJPcHRpb25zKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBvcHRpb25zPy5zZXJ2aWNlUmVnaXN0cnkgPz8gbmV3IFNlcnZpY2VSZWdpc3RyeSgpO1xuXHR9XG5cblx0cHVibGljIGdldCBvdmVycmlkZSgpOiBDb250YWluZXJSZWdpc3RyYXIge1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVJlZ2lzdHJhcih0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ29uc3RydWN0YWJsZSwgc2NvcGU6IFNjb3BlID0gU2NvcGVzLnRyYW5zaWVudCkge1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyKGZhbHNlKShzY29wZSkodHlwZS5uYW1lLCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNYW55KGZhbHNlLCBzY29wZU9yVHlwZSwgdHlwZXMpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KFxuXHRcdGtleTogc3RyaW5nIHwgc3ltYm9sLFxuXHRcdHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSwgdHlwZT86IENvbnN0cnVjdGFibGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWdpc3RlcihmYWxzZSkoU2NvcGVzLnRyYW5zaWVudCkodHlwZU9yS2V5LCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdFx0aW5zdGFuY2U6IG9iamVjdCxcblx0KTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKGtleTogc3RyaW5nIHwgc3ltYm9sLCB0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlLFxuXHRcdHR5cGVPckluc3RhbmNlPzogQ29uc3RydWN0YWJsZSB8IG9iamVjdCxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5zaW5nbGV0b24pKHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXIgPVxuXHRcdChvdmVycmlkZTogYm9vbGVhbikgPT5cblx0XHQoc2NvcGU6IFNjb3BlKTogUmVnaXN0ZXJGbiA9PlxuXHRcdCh0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlKSA9PlxuXHRcdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKHNjb3BlLCB7XG5cdFx0XHRcdHR5cGVPcktleSxcblx0XHRcdFx0dHlwZU9ySW5zdGFuY2UsXG5cdFx0XHRcdG92ZXJyaWRlLFxuXHRcdFx0fSk7XG5cblx0cHJpdmF0ZSByZWdpc3Rlck1hbnkoXG5cdFx0b3ZlcnJpZGU6IGJvb2xlYW4sXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlczogQ29uc3RydWN0YWJsZVtdLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGJpbmQgPSB0aGlzLnJlZ2lzdGVyKG92ZXJyaWRlKTtcblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0cmV0dXJuIGFsbFR5cGVzLm1hcCgodHlwZSkgPT4gYmluZChzY29wZSkodHlwZS5uYW1lLCB0eXBlKSk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhcihvdmVycmlkZTogYm9vbGVhbik6IENvbnRhaW5lclJlZ2lzdHJhciB7XG5cdFx0Y29uc3QgYmluZCA9IHRoaXMucmVnaXN0ZXIob3ZlcnJpZGUpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZWdpc3RlclR5cGU6ICh0eXBlLCBzY29wZSA9IFNjb3Blcy50cmFuc2llbnQpID0+IGJpbmQoc2NvcGUpKHR5cGUubmFtZSwgdHlwZSksXG5cdFx0XHRyZWdpc3RlclR5cGVzOiAoKHNjb3BlT3JUeXBlLCAuLi50eXBlcykgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3Rlck1hbnkoXG5cdFx0XHRcdFx0b3ZlcnJpZGUsXG5cdFx0XHRcdFx0c2NvcGVPclR5cGUsXG5cdFx0XHRcdFx0dHlwZXMsXG5cdFx0XHRcdCkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHlwZXNcIl0sXG5cdFx0XHRyZWdpc3RlclRyYW5zaWVudDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy50cmFuc2llbnQpKHR5cGVPcktleSwgdHlwZSkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHJhbnNpZW50XCJdLFxuXHRcdFx0cmVnaXN0ZXJTaW5nbGV0b246ICgodHlwZU9yS2V5LCB0eXBlT3JJbnN0YW5jZT8pID0+XG5cdFx0XHRcdGJpbmQoU2NvcGVzLnNpbmdsZXRvbikoXG5cdFx0XHRcdFx0dHlwZU9yS2V5LFxuXHRcdFx0XHRcdHR5cGVPckluc3RhbmNlLFxuXHRcdFx0XHQpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclNpbmdsZXRvblwiXSxcblx0XHRcdHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclJlcXVlc3RTY29wZWRcIl0sXG5cdFx0fTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNjb3BlcyIsIkNydWNpYmxlIiwiU2VydmljZVJlZ2lzdHJ5IiwiQ3J1Y2libGVCdWlsZGVyIiwic2VydmljZVJlZ2lzdHJ5Iiwib3B0aW9ucyIsIm92ZXJyaWRlIiwiY3JlYXRlUmVnaXN0cmFyIiwicmVnaXN0ZXJUeXBlIiwidHlwZSIsInNjb3BlIiwidHJhbnNpZW50IiwicmVnaXN0ZXIiLCJuYW1lIiwicmVnaXN0ZXJUeXBlcyIsInNjb3BlT3JUeXBlIiwidHlwZXMiLCJyZWdpc3Rlck1hbnkiLCJyZWdpc3RlclRyYW5zaWVudCIsInR5cGVPcktleSIsInJlZ2lzdGVyU2luZ2xldG9uIiwidHlwZU9ySW5zdGFuY2UiLCJzaW5nbGV0b24iLCJyZWdpc3RlclJlcXVlc3RTY29wZWQiLCJyZXF1ZXN0IiwiYnVpbGQiLCJiaW5kIiwiaXNTY29wZSIsImFsbFR5cGVzIiwibWFwIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxNQUFNLFFBQVEsY0FBYztBQUdyQyxTQUFTQyxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLFNBQVNDLGVBQWUsUUFBUSx3QkFBd0I7QUFXeEQsT0FBTyxNQUFNQztJQUNKQyxnQkFBaUM7SUFDekMsWUFBbUJDLE9BQWlDLENBQUU7UUFDckQs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
|
|
@@ -8,6 +8,7 @@ export class Crucible {
|
|
|
8
8
|
key;
|
|
9
9
|
instances = new Map();
|
|
10
10
|
serviceRegistry;
|
|
11
|
+
parent;
|
|
11
12
|
rootScope;
|
|
12
13
|
scopes = new Map();
|
|
13
14
|
logger = scribe.logger(Crucible.name);
|
|
@@ -16,7 +17,8 @@ export class Crucible {
|
|
|
16
17
|
this.key = options?.key;
|
|
17
18
|
this.serviceRegistry = new ServiceRegistry(options?.serviceRegistry);
|
|
18
19
|
this.registerLifetimeScope();
|
|
19
|
-
this.
|
|
20
|
+
this.parent = options?.parent;
|
|
21
|
+
this.rootScope = options?.parent?.rootScope ?? this;
|
|
20
22
|
}
|
|
21
23
|
resolveMany(resolveRequest) {
|
|
22
24
|
const key = new RegistrationKey(resolveRequest);
|
|
@@ -42,15 +44,20 @@ export class Crucible {
|
|
|
42
44
|
return service;
|
|
43
45
|
}
|
|
44
46
|
beginScope(name) {
|
|
45
|
-
if (this.
|
|
47
|
+
if (this.isDisposed) {
|
|
48
|
+
throw new Error("This container has been disposed");
|
|
49
|
+
}
|
|
50
|
+
if (name != null && this.scopes.has(name)) {
|
|
46
51
|
throw new DuplicateScopeError(`Cannot create duplicate scope. Scope with ${name} is already created and has not been disposed.`);
|
|
47
52
|
}
|
|
48
53
|
const scope = new Crucible({
|
|
49
54
|
key: name,
|
|
50
55
|
serviceRegistry: this.serviceRegistry,
|
|
51
|
-
|
|
56
|
+
parent: this
|
|
52
57
|
});
|
|
53
|
-
|
|
58
|
+
if (name != null) {
|
|
59
|
+
this.scopes.set(name, scope);
|
|
60
|
+
}
|
|
54
61
|
return scope;
|
|
55
62
|
}
|
|
56
63
|
[Symbol.dispose]() {
|
|
@@ -70,6 +77,8 @@ export class Crucible {
|
|
|
70
77
|
return;
|
|
71
78
|
}
|
|
72
79
|
this.isDisposed = true;
|
|
80
|
+
this.parent?.releaseScope(this.key);
|
|
81
|
+
this.scopes.clear();
|
|
73
82
|
for (const [, inst] of this.instances){
|
|
74
83
|
if (inst === this) {
|
|
75
84
|
continue;
|
|
@@ -82,6 +91,8 @@ export class Crucible {
|
|
|
82
91
|
return;
|
|
83
92
|
}
|
|
84
93
|
this.isDisposed = true;
|
|
94
|
+
this.parent?.releaseScope(this.key);
|
|
95
|
+
this.scopes.clear();
|
|
85
96
|
for (const [, inst] of this.instances){
|
|
86
97
|
if (inst === this) {
|
|
87
98
|
continue;
|
|
@@ -110,7 +121,7 @@ export class Crucible {
|
|
|
110
121
|
}
|
|
111
122
|
getOrCreateInstance(registration) {
|
|
112
123
|
if (this.isDisposed) {
|
|
113
|
-
throw new Error("This
|
|
124
|
+
throw new Error("This container has been disposed");
|
|
114
125
|
}
|
|
115
126
|
const { key, type, isInstance } = registration;
|
|
116
127
|
const cacheKey = isInstance ? key.value : type;
|
|
@@ -144,12 +155,18 @@ export class Crucible {
|
|
|
144
155
|
}
|
|
145
156
|
return resolved;
|
|
146
157
|
}
|
|
158
|
+
releaseScope(name) {
|
|
159
|
+
if (name == null) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.scopes.delete(name);
|
|
163
|
+
}
|
|
147
164
|
registerLifetimeScope() {
|
|
148
|
-
this.serviceRegistry.
|
|
165
|
+
this.serviceRegistry.replaceType(Scopes.request, {
|
|
149
166
|
typeOrKey: LifetimeScopeToken,
|
|
150
167
|
typeOrInstance: this
|
|
151
168
|
});
|
|
152
169
|
}
|
|
153
170
|
}
|
|
154
171
|
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRyb290U2NvcGU/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucm9vdFNjb3BlID8/IHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZU1hbnk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ocmVzb2x2ZVJlcXVlc3Q6IFJlc29sdmVSZXF1ZXN0PFQ+KTogVFtdIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb25zID0gdGhpcy5nZXRSZWdpc3RyYXRpb25Gcm9tKGtleSkgPz8gW107XG5cblx0XHRjb25zdCBzZXJ2aWNlcyA9IEFycmF5Lm9mPFQ+KCk7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xuXHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb24pO1xuXHRcdFx0c2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlcnZpY2VzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmU8VCBleHRlbmRzIG9iamVjdCB8IG9iamVjdFtdPihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KTtcblx0XHRpZiAocmVnaXN0cmF0aW9uID09IG51bGwpIHtcblx0XHRcdHRoaXMubG9nZ2VyLndhcm4oYENhbm5vdCByZXNvbHZlIGRlcGVuZGVuY3kgJHtrZXkudG9TdHJpbmcoKX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWdpc3RyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlc29sdmVFcnJvcihcblx0XHRcdFx0YFRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2aWNlcyByZWdpc3RlcmVkIHdpdGgga2V5ICR7a2V5LnRvU3RyaW5nKCl9LiBVc2UgcmVzb2x2ZU1hbnkgdG8gcmVzb2x2ZSBhbGwgaW1wbGVtZW50YXRpb25zLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aGlzLnJlc29sdmVSZWdpc3RyYXRpb248VD4ocmVnaXN0cmF0aW9uWzBdKTtcblx0XHRyZXR1cm4gc2VydmljZTtcblx0fVxuXG5cdHB1YmxpYyBiZWdpblNjb3BlKG5hbWU/OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5zY29wZXMuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRHVwbGljYXRlU2NvcGVFcnJvcihcblx0XHRcdFx0YENhbm5vdCBjcmVhdGUgZHVwbGljYXRlIHNjb3BlLiBTY29wZSB3aXRoICR7bmFtZX0gaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBoYXMgbm90IGJlZW4gZGlzcG9zZWQuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBuZXcgQ3J1Y2libGUoe1xuXHRcdFx0a2V5OiBuYW1lLFxuXHRcdFx0c2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSxcblx0XHRcdHJvb3RTY29wZTogdGhpcyxcblx0XHR9KTtcblxuXHRcdHRoaXMuc2NvcGVzLnNldChuYW1lLCBzY29wZSk7XG5cdFx0cmV0dXJuIHNjb3BlO1xuXHR9XG5cblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2VTeW5jKCk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlQXN5bmMoKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZVN5bmMoKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpbnN0W1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwb3NlQXN5bmMoKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRjb25zdCB7IGtleSwgdHlwZSwgaXNJbnN0YW5jZSB9ID0gcmVnaXN0cmF0aW9uO1xuXHRcdGNvbnN0IGNhY2hlS2V5ID0gaXNJbnN0YW5jZSA/IGtleS52YWx1ZSA6IHR5cGU7XG5cdFx0Y29uc3QgZXhpc3RpbmdJbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmdldChjYWNoZUtleSk7XG5cdFx0aWYgKGV4aXN0aW5nSW5zdGFuY2UgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGV4aXN0aW5nSW5zdGFuY2UgYXMgVDtcblx0XHR9XG5cblx0XHRjb25zdCBpbnN0YW5jZSA9IGlzSW5zdGFuY2UgPyAodHlwZSBhcyBUKSA6IHRoaXMuY3JlYXRlSW5zdGFuY2U8VD4ocmVnaXN0cmF0aW9uKTtcblx0XHR0aGlzLmluc3RhbmNlcy5zZXQoY2FjaGVLZXksIGluc3RhbmNlKTtcblx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGNvbnN0IHR5cGUgPSByZWdpc3RyYXRpb24udHlwZSBhcyBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHRcdGNvbnN0IGNhbkNvbnN0cnVjdCA9IGlzQ29uc3RydWN0YWJsZSh0eXBlKTtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5yZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGUpO1xuXHRcdGNvbnN0IGluc3QgPSAoY2FuQ29uc3RydWN0ID8gbmV3IHR5cGUoLi4uZGVwcykgOiB0eXBlKCkpIGFzIFQ7XG5cdFx0cmV0dXJuIGluc3Q7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVEZXBlbmRlbmNpZXModHlwZTogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSk6IHVua25vd25bXSB7XG5cdFx0Y29uc3QgcGFyYW1zID0gZ2V0TWV0YTxBcnJheTxDb25zdHJ1Y3RhYmxlPj4oUmVmbGVjdGlvbk1ldGEucGFyYW10eXBlcywgdHlwZSkgPz8gW107XG5cblx0XHRjb25zdCBpbmplY3RUb2tlbnMgPVxuXHRcdFx0Z2V0TWV0YTxJbmplY3Rpb25NZXRhZGF0YT4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0eXBlKSA/PyBuZXcgTWFwKCk7XG5cblx0XHQvL1RPRE86IHB1dCBhIHRyeSBjYXRjaCBoZXJlIHNvIHdlIGNhbiB0aHJvdyB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxuXHRcdGxldCByZXNvbHZlZCA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCB0b2tlbiA9IGluamVjdFRva2Vucy5nZXQoaSk/LmtleSA/PyBwYXJhbXNbaV0ubmFtZTtcblx0XHRcdGNvbnN0IGRlcCA9IGlzQXJyYXlUeXBlKHBhcmFtc1tpXSkgPyB0aGlzLnJlc29sdmVNYW55KHRva2VuKSA6IHRoaXMucmVzb2x2ZSh0b2tlbik7XG5cdFx0XHRyZXNvbHZlZCA9IFsuLi5yZXNvbHZlZCwgZGVwXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc29sdmVkO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy5yZXF1ZXN0LCB7XG5cdFx0XHR0eXBlT3JLZXk6IExpZmV0aW1lU2NvcGVUb2tlbixcblx0XHRcdHR5cGVPckluc3RhbmNlOiB0aGlzLFxuXHRcdH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiZ2V0TWV0YSIsImlzQXJyYXlUeXBlIiwiaXNDb25zdHJ1Y3RhYmxlIiwiUmVmbGVjdGlvbk1ldGEiLCJzY3JpYmUiLCJDcnVjaWJsZU1ldGEiLCJMaWZldGltZVNjb3BlVG9rZW4iLCJTY29wZXMiLCJSZWdpc3RyYXRpb25LZXkiLCJEdXBsaWNhdGVTY29wZUVycm9yIiwiUmVzb2x2ZUVycm9yIiwiU2VydmljZVJlZ2lzdHJ5IiwiQ3J1Y2libGUiLCJrZXkiLCJpbnN0YW5jZXMiLCJNYXAiLCJzZXJ2aWNlUmVnaXN0cnkiLCJyb290U2NvcGUiLCJzY29wZXMiLCJsb2dnZXIiLCJuYW1lIiwiaXNEaXNwb3NlZCIsIm9wdGlvbnMiLCJyZWdpc3RlckxpZmV0aW1lU2NvcGUiLCJyZXNvbHZlTWFueSIsInJlc29sdmVSZXF1ZXN0IiwicmVnaXN0cmF0aW9ucyIsImdldFJlZ2lzdHJhdGlvbkZyb20iLCJzZXJ2aWNlcyIsIkFycmF5Iiwib2YiLCJyZWdpc3RyYXRpb24iLCJzZXJ2aWNlIiwicmVzb2x2ZVJlZ2lzdHJhdGlvbiIsInB1c2giLCJyZXNvbHZlIiwid2FybiIsInRvU3RyaW5nIiwibGVuZ3RoIiwiYmVnaW5TY29wZSIsImhhcyIsInNjb3BlIiwic2V0IiwiU3ltYm9sIiwiZGlzcG9zZSIsImRpc3Bvc2VTeW5jIiwiYXN5bmNEaXNwb3NlIiwiZGlzcG9zZUFzeW5jIiwiaW5zdCIsImdldFJlZ2lzdHJhdGlvbiIsInZhbHVlIiwidHJhbnNpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJzaW5nbGV0b24iLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwicmVxdWVzdCIsIkVycm9yIiwidHlwZSIsImlzSW5zdGFuY2UiLCJjYWNoZUtleSIsImV4aXN0aW5nSW5zdGFuY2UiLCJnZXQiLCJpbnN0YW5jZSIsImNhbkNvbnN0cnVjdCIsImRlcHMiLCJyZXNvbHZlRGVwZW5kZW5jaWVzIiwicGFyYW1zIiwicGFyYW10eXBlcyIsImluamVjdFRva2VucyIsImluamVjdHRva2VuIiwicmVzb2x2ZWQiLCJpIiwidG9rZW4iLCJkZXAiLCJyZWdpc3RlclR5cGUiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FHQ0EsT0FBTyxFQUNQQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsY0FBYyxRQUNSLDZCQUE2QjtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsbUJBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxzQ0FBc0M7QUFFdEUsU0FBU0MsbUJBQW1CLEVBQUVDLFlBQVksUUFBUSxxQkFBcUI7QUFFdkUsU0FBU0MsZUFBZSxRQUFRLHdCQUF3QjtBQVF4RCxPQUFPLE1BQU1DO0lBQ0xDLElBQVk7SUFDVEMsWUFBWSxJQUFJQyxNQUF1QjtJQUN6Q0MsZ0JBQWlDO0lBQ2pDQyxVQUFvQjtJQUNwQkMsU0FBUyxJQUFJSCxNQUE2QjtJQUMxQ0ksU0FBU2YsT0FBT2UsTUFBTSxDQUFDUCxTQUFTUSxJQUFJLEVBQUU7SUFDdENDLGFBQWEsTUFBTTtJQUMzQixZQUFtQkMsT0FBeUIsQ0FBRTtRQUM3QyxJQUFJLENBQUNULEdBQUcsR0FBR1MsU0FBU1Q7UUFDcEIsSUFBSSxDQUFDRyxlQUFlLEdBQUcsSUFBSUwsZ0JBQWdCVyxTQUFTTjtRQUNwRCxJQUFJLENBQUNPLHFCQUFxQjtRQUMxQixJQUFJLENBQUNOLFNBQVMsR0FBR0ssU0FBU0wsYUFBYSxJQUFJO0lBQzVDO0lBRU9PLFlBQXVDQyxjQUFpQyxFQUFPO1FBQ3JGLE1BQU1aLE1BQU0sSUFBSUwsZ0JBQWdCaUI7UUFDaEMsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNkLFFBQVEsRUFBRTtRQUV6RCxNQUFNZSxXQUFXQyxNQUFNQyxFQUFFO1FBQ3pCLEtBQUssTUFBTUMsZ0JBQWdCTCxjQUFlO1lBQ3pDLE1BQU1NLFVBQVUsSUFB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
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRwYXJlbnQ/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcGFyZW50PzogQ3J1Y2libGU7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucz8ucGFyZW50O1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucGFyZW50Py5yb290U2NvcGUgPz8gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlTWFueTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUW10ge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbnMgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KSA/PyBbXTtcblxuXHRcdGNvbnN0IHNlcnZpY2VzID0gQXJyYXkub2Y8VD4oKTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJhdGlvbiBvZiByZWdpc3RyYXRpb25zKSB7XG5cdFx0XHRjb25zdCBzZXJ2aWNlID0gdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VydmljZXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZTxUIGV4dGVuZHMgb2JqZWN0IHwgb2JqZWN0W10+KHJlc29sdmVSZXF1ZXN0OiBSZXNvbHZlUmVxdWVzdDxUPik6IFQge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuZ2V0UmVnaXN0cmF0aW9uRnJvbShrZXkpO1xuXHRcdGlmIChyZWdpc3RyYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sb2dnZXIud2FybihgQ2Fubm90IHJlc29sdmUgZGVwZW5kZW5jeSAke2tleS50b1N0cmluZygpfWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZ2lzdHJhdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVzb2x2ZUVycm9yKFxuXHRcdFx0XHRgVGhlcmUgYXJlIG11bHRpcGxlIHNlcnZpY2VzIHJlZ2lzdGVyZWQgd2l0aCBrZXkgJHtrZXkudG9TdHJpbmcoKX0uIFVzZSByZXNvbHZlTWFueSB0byByZXNvbHZlIGFsbCBpbXBsZW1lbnRhdGlvbnMuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb25bMF0pO1xuXHRcdHJldHVybiBzZXJ2aWNlO1xuXHR9XG5cblx0cHVibGljIGJlZ2luU2NvcGUobmFtZT86IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGFpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRpZiAobmFtZSAhPSBudWxsICYmIHRoaXMuc2NvcGVzLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IER1cGxpY2F0ZVNjb3BlRXJyb3IoXG5cdFx0XHRcdGBDYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBzY29wZS4gU2NvcGUgd2l0aCAke25hbWV9IGlzIGFscmVhZHkgY3JlYXRlZCBhbmQgaGFzIG5vdCBiZWVuIGRpc3Bvc2VkLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjb3BlID0gbmV3IENydWNpYmxlKHtcblx0XHRcdGtleTogbmFtZSxcblx0XHRcdHNlcnZpY2VSZWdpc3RyeTogdGhpcy5zZXJ2aWNlUmVnaXN0cnksXG5cdFx0XHRwYXJlbnQ6IHRoaXMsXG5cdFx0fSk7XG5cblx0XHRpZiAobmFtZSAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNjb3Blcy5zZXQobmFtZSwgc2NvcGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2NvcGU7XG5cdH1cblxuXHRwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZVN5bmMoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VBc3luYygpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNwb3NlU3luYygpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnBhcmVudD8ucmVsZWFzZVNjb3BlKHRoaXMua2V5KTtcblx0XHR0aGlzLnNjb3Blcy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgWywgaW5zdF0gb2YgdGhpcy5pbnN0YW5jZXMpIHtcblx0XHRcdGlmIChpbnN0ID09PSB0aGlzKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aW5zdFtTeW1ib2wuZGlzcG9zZV0/LigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUFzeW5jKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucGFyZW50Py5yZWxlYXNlU2NvcGUodGhpcy5rZXkpO1xuXHRcdHRoaXMuc2NvcGVzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRhaW5lciBoYXMgYmVlbiBkaXNwb3NlZFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgeyBrZXksIHR5cGUsIGlzSW5zdGFuY2UgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRjb25zdCBjYWNoZUtleSA9IGlzSW5zdGFuY2UgPyBrZXkudmFsdWUgOiB0eXBlO1xuXHRcdGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQoY2FjaGVLZXkpO1xuXHRcdGlmIChleGlzdGluZ0luc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBleGlzdGluZ0luc3RhbmNlIGFzIFQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBpc0luc3RhbmNlID8gKHR5cGUgYXMgVCkgOiB0aGlzLmNyZWF0ZUluc3RhbmNlPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0dGhpcy5pbnN0YW5jZXMuc2V0KGNhY2hlS2V5LCBpbnN0YW5jZSk7XG5cdFx0cmV0dXJuIGluc3RhbmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB0eXBlID0gcmVnaXN0cmF0aW9uLnR5cGUgYXMgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0XHRjb25zdCBjYW5Db25zdHJ1Y3QgPSBpc0NvbnN0cnVjdGFibGUodHlwZSk7XG5cdFx0Y29uc3QgZGVwcyA9IHRoaXMucmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlKTtcblx0XHRjb25zdCBpbnN0ID0gKGNhbkNvbnN0cnVjdCA/IG5ldyB0eXBlKC4uLmRlcHMpIDogdHlwZSgpKSBhcyBUO1xuXHRcdHJldHVybiBpbnN0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IGdldE1ldGE8QXJyYXk8Q29uc3RydWN0YWJsZT4+KFJlZmxlY3Rpb25NZXRhLnBhcmFtdHlwZXMsIHR5cGUpID8/IFtdO1xuXG5cdFx0Y29uc3QgaW5qZWN0VG9rZW5zID1cblx0XHRcdGdldE1ldGE8SW5qZWN0aW9uTWV0YWRhdGE+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdHlwZSkgPz8gbmV3IE1hcCgpO1xuXG5cdFx0Ly9UT0RPOiBwdXQgYSB0cnkgY2F0Y2ggaGVyZSBzbyB3ZSBjYW4gdGhyb3cgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2Vcblx0XHRsZXQgcmVzb2x2ZWQgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSBpbmplY3RUb2tlbnMuZ2V0KGkpPy5rZXkgPz8gcGFyYW1zW2ldLm5hbWU7XG5cdFx0XHRjb25zdCBkZXAgPSBpc0FycmF5VHlwZShwYXJhbXNbaV0pID8gdGhpcy5yZXNvbHZlTWFueSh0b2tlbikgOiB0aGlzLnJlc29sdmUodG9rZW4pO1xuXHRcdFx0cmVzb2x2ZWQgPSBbLi4ucmVzb2x2ZWQsIGRlcF07XG5cdFx0fVxuXHRcdHJldHVybiByZXNvbHZlZDtcblx0fVxuXG5cdHByaXZhdGUgcmVsZWFzZVNjb3BlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zY29wZXMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVwbGFjZVR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRNZXRhIiwiaXNBcnJheVR5cGUiLCJpc0NvbnN0cnVjdGFibGUiLCJSZWZsZWN0aW9uTWV0YSIsInNjcmliZSIsIkNydWNpYmxlTWV0YSIsIkxpZmV0aW1lU2NvcGVUb2tlbiIsIlNjb3BlcyIsIlJlZ2lzdHJhdGlvbktleSIsIkR1cGxpY2F0ZVNjb3BlRXJyb3IiLCJSZXNvbHZlRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInBhcmVudCIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJiZWdpblNjb3BlIiwiRXJyb3IiLCJoYXMiLCJzY29wZSIsInNldCIsIlN5bWJvbCIsImRpc3Bvc2UiLCJkaXNwb3NlU3luYyIsImFzeW5jRGlzcG9zZSIsImRpc3Bvc2VBc3luYyIsInJlbGVhc2VTY29wZSIsImNsZWFyIiwiaW5zdCIsImdldFJlZ2lzdHJhdGlvbiIsInZhbHVlIiwidHJhbnNpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJzaW5nbGV0b24iLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwicmVxdWVzdCIsInR5cGUiLCJpc0luc3RhbmNlIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luc3RhbmNlIiwiZ2V0IiwiaW5zdGFuY2UiLCJjYW5Db25zdHJ1Y3QiLCJkZXBzIiwicmVzb2x2ZURlcGVuZGVuY2llcyIsInBhcmFtcyIsInBhcmFtdHlwZXMiLCJpbmplY3RUb2tlbnMiLCJpbmplY3R0b2tlbiIsInJlc29sdmVkIiwiaSIsInRva2VuIiwiZGVwIiwiZGVsZXRlIiwicmVwbGFjZVR5cGUiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FHQ0EsT0FBTyxFQUNQQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsY0FBYyxRQUNSLDZCQUE2QjtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsbUJBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxzQ0FBc0M7QUFFdEUsU0FBU0MsbUJBQW1CLEVBQUVDLFlBQVksUUFBUSxxQkFBcUI7QUFFdkUsU0FBU0MsZUFBZSxRQUFRLHdCQUF3QjtBQVF4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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RegistrationKey } from "../models/registration-key.model.js";
|
|
2
2
|
import { ServiceRegistration } from "../models/service-registration.model.js";
|
|
3
|
+
import { RegistrationError } from "../types/errors.js";
|
|
3
4
|
export class ServiceRegistry {
|
|
4
5
|
registrations;
|
|
5
6
|
constructor(parent){
|
|
@@ -7,10 +8,22 @@ export class ServiceRegistry {
|
|
|
7
8
|
}
|
|
8
9
|
registerType(scope, options) {
|
|
9
10
|
const registration = this.createRegistrationFrom(scope, options);
|
|
10
|
-
const
|
|
11
|
+
const existing = this.getRegistrations(registration.key) ?? [];
|
|
12
|
+
const duplicate = existing.find((reg)=>reg.isEqual(registration));
|
|
13
|
+
if (duplicate != null && !options.override) {
|
|
14
|
+
throw new RegistrationError(`A service is already registered for key ${registration.key}. Use builder.override.registerSingleton() (or the matching register* method) to replace it.`);
|
|
15
|
+
}
|
|
16
|
+
const remaining = existing.filter((reg)=>!reg.isEqual(registration));
|
|
11
17
|
this.setRegistration(registration.key, [
|
|
12
18
|
registration,
|
|
13
|
-
...
|
|
19
|
+
...remaining
|
|
20
|
+
]);
|
|
21
|
+
return registration;
|
|
22
|
+
}
|
|
23
|
+
replaceType(scope, options) {
|
|
24
|
+
const registration = this.createRegistrationFrom(scope, options);
|
|
25
|
+
this.setRegistration(registration.key, [
|
|
26
|
+
registration
|
|
14
27
|
]);
|
|
15
28
|
return registration;
|
|
16
29
|
}
|
|
@@ -37,4 +50,4 @@ export class ServiceRegistry {
|
|
|
37
50
|
}
|
|
38
51
|
}
|
|
39
52
|
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25FcnJvciB9IGZyb20gXCIuLi90eXBlcy9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJUeXBlT3B0aW9ucyA9IHtcblx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUgfCBvYmplY3Q7XG5cdG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUmVnaXN0cnkge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnM6IE1hcDxzdHJpbmcsIFNlcnZpY2VSZWdpc3RyYXRpb25bXT47XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTZXJ2aWNlUmVnaXN0cnkpIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKHBhcmVudD8ucmVnaXN0cmF0aW9ucyk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHNjb3BlOiBTY29wZSwgb3B0aW9uczogUmVnaXN0ZXJUeXBlT3B0aW9ucykge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSkgPz8gW107XG5cdFx0Y29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmcuZmluZCgocmVnKSA9PiByZWcuaXNFcXVhbChyZWdpc3RyYXRpb24pKTtcblx0XHRpZiAoZHVwbGljYXRlICE9IG51bGwgJiYgIW9wdGlvbnMub3ZlcnJpZGUpIHtcblx0XHRcdHRocm93IG5ldyBSZWdpc3RyYXRpb25FcnJvcihcblx0XHRcdFx0YEEgc2VydmljZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIGtleSAke3JlZ2lzdHJhdGlvbi5rZXl9LiBVc2UgYnVpbGRlci5vdmVycmlkZS5yZWdpc3RlclNpbmdsZXRvbigpIChvciB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIqIG1ldGhvZCkgdG8gcmVwbGFjZSBpdC5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCByZW1haW5pbmcgPSBleGlzdGluZy5maWx0ZXIoKHJlZykgPT4gIXJlZy5pc0VxdWFsKHJlZ2lzdHJhdGlvbikpO1xuXHRcdHRoaXMuc2V0UmVnaXN0cmF0aW9uKHJlZ2lzdHJhdGlvbi5rZXksIFtyZWdpc3RyYXRpb24sIC4uLnJlbWFpbmluZ10pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVwbGFjZVR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHR0aGlzLnNldFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24ua2V5LCBbcmVnaXN0cmF0aW9uXSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZWdpc3RyYXRpb24oa2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbltdIHtcblx0XHRjb25zdCBrZXlWYWwgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KGtleSkudmFsdWU7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChrZXlWYWwpO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhdGlvbkZyb20oc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgeyB0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IGlzS2V5ID0gdHlwZW9mIHR5cGVPcktleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN5bWJvbFwiO1xuXHRcdGNvbnN0IGlzSW5zdGFuY2UgPSB0eXBlb2YgdHlwZU9ySW5zdGFuY2UgPT09IFwib2JqZWN0XCI7XG5cdFx0Y29uc3Qga2V5ID0gbmV3IFJlZ2lzdHJhdGlvbktleSghaXNLZXkgPyB0eXBlT3JLZXkubmFtZSA6IHR5cGVPcktleSk7XG5cdFx0Y29uc3QgdHlwZSA9IGlzSW5zdGFuY2UgPyB0eXBlT3JJbnN0YW5jZSA6IGlzS2V5ID8gdHlwZU9ySW5zdGFuY2UgOiB0eXBlT3JLZXk7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IFNlcnZpY2VSZWdpc3RyYXRpb24oa2V5LCB0eXBlLCBzY29wZSwgaXNJbnN0YW5jZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVnaXN0cmF0aW9ucyhrZXk6IFJlZ2lzdHJhdGlvbktleSkge1xuXHRcdGNvbnN0IHZhbHVlID0ga2V5LnZhbHVlO1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0UmVnaXN0cmF0aW9uKGtleTogUmVnaXN0cmF0aW9uS2V5LCByZWdpc3RyYXRpb25zOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10pIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KGtleS52YWx1ZSwgcmVnaXN0cmF0aW9ucyk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJSZWdpc3RyYXRpb25LZXkiLCJTZXJ2aWNlUmVnaXN0cmF0aW9uIiwiUmVnaXN0cmF0aW9uRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RyYXRpb25zIiwicGFyZW50IiwiTWFwIiwicmVnaXN0ZXJUeXBlIiwic2NvcGUiLCJvcHRpb25zIiwicmVnaXN0cmF0aW9uIiwiY3JlYXRlUmVnaXN0cmF0aW9uRnJvbSIsImV4aXN0aW5nIiwiZ2V0UmVnaXN0cmF0aW9ucyIsImtleSIsImR1cGxpY2F0ZSIsImZpbmQiLCJyZWciLCJpc0VxdWFsIiwib3ZlcnJpZGUiLCJyZW1haW5pbmciLCJmaWx0ZXIiLCJzZXRSZWdpc3RyYXRpb24iLCJyZXBsYWNlVHlwZSIsImdldFJlZ2lzdHJhdGlvbiIsImtleVZhbCIsInZhbHVlIiwiZ2V0IiwidHlwZU9yS2V5IiwidHlwZU9ySW5zdGFuY2UiLCJpc0tleSIsImlzSW5zdGFuY2UiLCJuYW1lIiwidHlwZSIsInNldCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsZUFBZSxRQUFRLHNDQUFzQztBQUN0RSxTQUFTQyxtQkFBbUIsUUFBUSwwQ0FBMEM7QUFDOUUsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBU3ZELE9BQU8sTUFBTUM7SUFDS0MsY0FBa0Q7SUFDbkUsWUFBbUJDLE1BQXdCLENBQUU7UUFDNUMsSUFBSSxDQUFDRCxhQUFhLEdBQUcsSUFBSUUsSUFBSUQsUUFBUUQ7SUFDdEM7SUFFT0csYUFBYUMsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQy9ELE1BQU1DLGVBQWUsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0gsT0FBT0M7UUFDeEQsTUFBTUcsV0FBVyxJQUFJLENBQUNDLGdCQUFnQixDQUFDSCxhQUFhSSxHQUFHLEtBQUssRUFBRTtRQUM5RCxNQUFNQyxZQUFZSCxTQUFTSSxJQUFJLENBQUMsQ0FBQ0MsTUFBUUEsSUFBSUMsT0FBTyxDQUFDUjtRQUNyRCxJQUFJSyxhQUFhLFFBQVEsQ0FBQ04sUUFBUVUsUUFBUSxFQUFFO1lBQzNDLE1BQU0sSUFBSWpCLGtCQUNULENBQUMsd0NBQXdDLEVBQUVRLGFBQWFJLEdBQUcsQ0FBQyw0RkFBNEYsQ0FBQztRQUUzSjtRQUVBLE1BQU1NLFlBQVlSLFNBQVNTLE1BQU0sQ0FBQyxDQUFDSixNQUFRLENBQUNBLElBQUlDLE9BQU8sQ0FBQ1I7UUFDeEQsSUFBSSxDQUFDWSxlQUFlLENBQUNaLGFBQWFJLEdBQUcsRUFBRTtZQUFDSjtlQUFpQlU7U0FBVTtRQUNuRSxPQUFPVjtJQUNSO0lBRU9hLFlBQVlmLEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUM5RCxNQUFNQyxlQUFlLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNILE9BQU9DO1FBQ3hELElBQUksQ0FBQ2EsZUFBZSxDQUFDWixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7U0FBYTtRQUNyRCxPQUFPQTtJQUNSO0lBRU9jLGdCQUFnQlYsR0FBb0MsRUFBeUI7UUFDbkYsTUFBTVcsU0FBUyxJQUFJekIsZ0JBQWdCYyxLQUFLWSxLQUFLO1FBQzdDLE1BQU1oQixlQUFlLElBQUksQ0FBQ04sYUFBYSxDQUFDdUIsR0FBRyxDQUFDRjtRQUM1QyxPQUFPZjtJQUNSO0lBRVFDLHVCQUF1QkgsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQzFFLE1BQU0sRUFBRW1CLFNBQVMsRUFBRUMsY0FBYyxFQUFFLEdBQUdwQjtRQUN0QyxNQUFNcUIsUUFBUSxPQUFPRixjQUFjLFlBQVksT0FBT0EsY0FBYztRQUNwRSxNQUFNRyxhQUFhLE9BQU9GLG1CQUFtQjtRQUM3QyxNQUFNZixNQUFNLElBQUlkLGdCQUFnQixDQUFDOEIsUUFBUUYsVUFBVUksSUFBSSxHQUFHSjtRQUMxRCxNQUFNSyxPQUFPRixhQUFhRixpQkFBaUJDLFFBQVFELGlCQUFpQkQ7UUFDcEUsTUFBTWxCLGVBQWUsSUFBSVQsb0JBQW9CYSxLQUFLbUIsTUFBTXpCLE9BQU91QjtRQUMvRCxPQUFPckI7SUFDUjtJQUVRRyxpQkFBaUJDLEdBQW9CLEVBQUU7UUFDOUMsTUFBTVksUUFBUVosSUFBSVksS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ3VCLEdBQUcsQ0FBQ0Q7SUFDL0I7SUFFUUosZ0JBQWdCUixHQUFvQixFQUFFVixhQUFvQyxFQUFFO1FBQ25GLElBQUksQ0FBQ0EsYUFBYSxDQUFDOEIsR0FBRyxDQUFDcEIsSUFBSVksS0FBSyxFQUFFdEI7SUFDbkM7QUFDRCJ9
|
package/es6/src/types/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from "./errors.js";
|
|
1
2
|
export * from "./types.js";
|
|
2
3
|
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjO0FBQzVCLGNBQWMsYUFBYSJ9
|
package/es6/src/types/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { };
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7XG5cdENvbnRhaW5lckJ1aWxkZXIsXG5cdENvbnRhaW5lclJlZ2lzdHJhcixcblx0SUNvbnRhaW5lcixcblx0TGlmZXRpbWVTY29wZSxcblx0UmVzb2x2ZVJlcXVlc3QsXG5cdFNjb3BlLFxuXHRTZXJ2aWNlUHJvdmlkZXIsXG59IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29tcG9zaXRpb25cIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQVFxQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/crucible",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.90",
|
|
4
4
|
"description": "Lightweight dependency injection container with decorator-based wiring",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
34
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
33
|
+
"@decohere/nexus": "0.0.1-dev.90",
|
|
34
|
+
"@decohere/scribe": "0.0.1-dev.90"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {}
|
|
37
37
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { type Constructable } from "@decohere/nexus/reflection";
|
|
1
2
|
export type InjectionMetadata = Map<number, InjectionToken>;
|
|
2
3
|
export type InjectionToken = {
|
|
3
|
-
key: string | symbol;
|
|
4
|
+
key: string | symbol | Constructable;
|
|
4
5
|
};
|
|
5
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Bind a constructor parameter to a registration key.
|
|
8
|
+
* A class uses `Class.name` (same key as `registerSingleton(Class)`).
|
|
9
|
+
* Prefer the class over a name string. Use a symbol or string when the key is not the class name.
|
|
10
|
+
*/
|
|
11
|
+
export declare function inject(key: string | symbol | Constructable): (target: object, _propertyKey: string | symbol | undefined, idx: number) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable, FunctionType } from "@decohere/nexus/reflection";
|
|
2
2
|
import type { ServiceRegistration } from "../models/service-registration.model.js";
|
|
3
|
-
import type { ContainerBuilder, Scope } from "../types/types.js";
|
|
3
|
+
import type { ContainerBuilder, ContainerRegistrar, Scope } from "../types/types.js";
|
|
4
4
|
import { Crucible } from "./crucible.js";
|
|
5
5
|
import { ServiceRegistry } from "./service-registry.js";
|
|
6
6
|
type ContainerBuilderOptions = {
|
|
@@ -9,6 +9,7 @@ type ContainerBuilderOptions = {
|
|
|
9
9
|
export declare class CrucibleBuilder implements ContainerBuilder {
|
|
10
10
|
private serviceRegistry;
|
|
11
11
|
constructor(options?: ContainerBuilderOptions);
|
|
12
|
+
get override(): ContainerRegistrar;
|
|
12
13
|
registerType(type: Constructable, scope?: Scope): ServiceRegistration;
|
|
13
14
|
registerTypes(...types: Constructable[]): ServiceRegistration[];
|
|
14
15
|
registerTypes(scope: Scope, ...types: Constructable[]): ServiceRegistration[];
|
|
@@ -22,5 +23,8 @@ export declare class CrucibleBuilder implements ContainerBuilder {
|
|
|
22
23
|
registerRequestScoped(key: string | symbol, type: Constructable): ServiceRegistration;
|
|
23
24
|
registerRequestScoped(type: Constructable): ServiceRegistration;
|
|
24
25
|
build(): Crucible;
|
|
26
|
+
private register;
|
|
27
|
+
private registerMany;
|
|
28
|
+
private createRegistrar;
|
|
25
29
|
}
|
|
26
30
|
export {};
|
|
@@ -2,13 +2,14 @@ import type { IContainer, ResolveRequest } from "../types/types.js";
|
|
|
2
2
|
import { ServiceRegistry } from "./service-registry.js";
|
|
3
3
|
type CrucibleOptions = {
|
|
4
4
|
key?: string;
|
|
5
|
-
|
|
5
|
+
parent?: Crucible;
|
|
6
6
|
serviceRegistry: ServiceRegistry;
|
|
7
7
|
};
|
|
8
8
|
export declare class Crucible implements IContainer {
|
|
9
9
|
key: string;
|
|
10
10
|
protected instances: Map<unknown, object>;
|
|
11
11
|
private serviceRegistry;
|
|
12
|
+
private parent?;
|
|
12
13
|
private rootScope;
|
|
13
14
|
private scopes;
|
|
14
15
|
private logger;
|
|
@@ -26,6 +27,7 @@ export declare class Crucible implements IContainer {
|
|
|
26
27
|
private getOrCreateInstance;
|
|
27
28
|
private createInstance;
|
|
28
29
|
private resolveDependencies;
|
|
30
|
+
private releaseScope;
|
|
29
31
|
private registerLifetimeScope;
|
|
30
32
|
}
|
|
31
33
|
export {};
|
|
@@ -4,11 +4,13 @@ import type { Scope } from "../types/types.js";
|
|
|
4
4
|
export type RegisterTypeOptions = {
|
|
5
5
|
typeOrKey: string | symbol | Constructable | FunctionType;
|
|
6
6
|
typeOrInstance?: Constructable | FunctionType | object;
|
|
7
|
+
override?: boolean;
|
|
7
8
|
};
|
|
8
9
|
export declare class ServiceRegistry {
|
|
9
10
|
private readonly registrations;
|
|
10
11
|
constructor(parent?: ServiceRegistry);
|
|
11
12
|
registerType(scope: Scope, options: RegisterTypeOptions): ServiceRegistration;
|
|
13
|
+
replaceType(scope: Scope, options: RegisterTypeOptions): ServiceRegistration;
|
|
12
14
|
getRegistration(key: string | symbol | Constructable): ServiceRegistration[];
|
|
13
15
|
private createRegistrationFrom;
|
|
14
16
|
private getRegistrations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { ContainerBuilder, IContainer, LifetimeScope, ResolveRequest, Scope, ServiceProvider, } from "@decohere/nexus/composition";
|
|
1
|
+
export type { ContainerBuilder, ContainerRegistrar, IContainer, LifetimeScope, ResolveRequest, Scope, ServiceProvider, } from "@decohere/nexus/composition";
|