@decohere/crucible 0.0.1-dev.68 → 0.0.1-dev.7

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.
@@ -24,4 +24,4 @@ function getExistingMeta(target) {
24
24
  return meta;
25
25
  }
26
26
 
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RhYmxlLCBkZWZpbmVNZXRhLCBnZXRNZXRhIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDcnVjaWJsZU1ldGEgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgSW5qZWN0aW9uTWV0YWRhdGEgPSBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj47XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvblRva2VuID0ge1xuXHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGU7XG59O1xuXG4vKipcbiAqIEJpbmQgYSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gYSByZWdpc3RyYXRpb24ga2V5LlxuICogQSBjbGFzcyB1c2VzIGBDbGFzcy5uYW1lYCAoc2FtZSBrZXkgYXMgYHJlZ2lzdGVyU2luZ2xldG9uKENsYXNzKWApLlxuICogUHJlZmVyIHRoZSBjbGFzcyBvdmVyIGEgbmFtZSBzdHJpbmcuIFVzZSBhIHN5bWJvbCBvciBzdHJpbmcgd2hlbiB0aGUga2V5IGlzIG5vdCB0aGUgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpIHtcblx0cmV0dXJuICh0YXJnZXQ6IG9iamVjdCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBnZXRFeGlzdGluZ01ldGEodGFyZ2V0KTtcblx0XHRtZXRhZGF0YS5zZXQoaWR4LCB7IGtleSB9KTtcblx0XHRkZWZpbmVNZXRhKENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgbWV0YWRhdGEsIHRhcmdldCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEV4aXN0aW5nTWV0YSh0YXJnZXQ6IG9iamVjdCkge1xuXHRjb25zdCBtZXRhID1cblx0XHRnZXRNZXRhPE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPj4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0YXJnZXQpID8/XG5cdFx0bmV3IE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPigpO1xuXHRyZXR1cm4gbWV0YTtcbn1cbiJdLCJuYW1lcyI6WyJpbmplY3QiLCJrZXkiLCJ0YXJnZXQiLCJfcHJvcGVydHlLZXkiLCJpZHgiLCJtZXRhZGF0YSIsImdldEV4aXN0aW5nTWV0YSIsInNldCIsImRlZmluZU1ldGEiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3R0b2tlbiIsIm1ldGEiLCJnZXRNZXRhIiwiTWFwIl0sIm1hcHBpbmdzIjoiOzs7OytCQWNnQkE7OztlQUFBQTs7OzRCQWR3Qzt1QkFDM0I7QUFhdEIsU0FBU0EsT0FBT0MsR0FBb0M7SUFDMUQsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCTyxJQUFBQSxzQkFBVSxFQUFDQyxtQkFBWSxDQUFDQyxXQUFXLEVBQUVMLFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTVMsT0FDTEMsSUFBQUEsbUJBQU8sRUFBOEJILG1CQUFZLENBQUNDLFdBQVcsRUFBRVIsV0FDL0QsSUFBSVc7SUFDTCxPQUFPRjtBQUNSIn0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lTWV0YSwgZ2V0TWV0YSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhIH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvbk1ldGFkYXRhID0gTWFwPG51bWJlciwgSW5qZWN0aW9uVG9rZW4+O1xuXG5leHBvcnQgdHlwZSBJbmplY3Rpb25Ub2tlbiA9IHtcblx0a2V5OiBzdHJpbmcgfCBzeW1ib2w7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG5cdHJldHVybiAodGFyZ2V0OiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZ2V0RXhpc3RpbmdNZXRhKHRhcmdldCk7XG5cdFx0bWV0YWRhdGEuc2V0KGlkeCwgeyBrZXkgfSk7XG5cdFx0ZGVmaW5lTWV0YShDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIG1ldGFkYXRhLCB0YXJnZXQpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRFeGlzdGluZ01ldGEodGFyZ2V0OiBvYmplY3QpIHtcblx0Y29uc3QgbWV0YSA9XG5cdFx0Z2V0TWV0YTxNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdGFyZ2V0KSA/P1xuXHRcdG5ldyBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4oKTtcblx0cmV0dXJuIG1ldGE7XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0Iiwia2V5IiwidGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiaWR4IiwibWV0YWRhdGEiLCJnZXRFeGlzdGluZ01ldGEiLCJzZXQiLCJkZWZpbmVNZXRhIiwiQ3J1Y2libGVNZXRhIiwiaW5qZWN0dG9rZW4iLCJtZXRhIiwiZ2V0TWV0YSIsIk1hcCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFTZ0JBOzs7ZUFBQUE7Ozs0QkFUb0I7dUJBQ1A7QUFRdEIsU0FBU0EsT0FBT0MsR0FBb0I7SUFDMUMsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCTyxJQUFBQSxzQkFBVSxFQUFDQyxtQkFBWSxDQUFDQyxXQUFXLEVBQUVMLFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTVMsT0FDTEMsSUFBQUEsbUJBQU8sRUFBOEJILG1CQUFZLENBQUNDLFdBQVcsRUFBRVIsV0FDL0QsSUFBSVc7SUFDTCxPQUFPRjtBQUNSIn0=
@@ -16,54 +16,53 @@ 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
- }
22
19
  registerType(type, scope = _const.Scopes.transient) {
23
- return this.register(false)(scope)(type.name, type);
20
+ const registration = this.serviceRegistry.registerType(scope, {
21
+ typeOrKey: type.name,
22
+ typeOrInstance: type
23
+ });
24
+ return registration;
24
25
  }
25
26
  registerTypes(scopeOrType, ...types) {
26
- return this.registerMany(false, scopeOrType, types);
27
+ const registrations = Array.of();
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;
27
39
  }
28
40
  registerTransient(typeOrKey, type) {
29
- return this.register(false)(_const.Scopes.transient)(typeOrKey, type);
41
+ const registration = this.serviceRegistry.registerType(_const.Scopes.transient, {
42
+ typeOrKey,
43
+ typeOrInstance: type
44
+ });
45
+ return registration;
30
46
  }
31
47
  registerSingleton(typeOrKey, typeOrInstance) {
32
- return this.register(false)(_const.Scopes.singleton)(typeOrKey, typeOrInstance);
48
+ const registration = this.serviceRegistry.registerType(_const.Scopes.singleton, {
49
+ typeOrKey,
50
+ typeOrInstance
51
+ });
52
+ return registration;
33
53
  }
34
54
  registerRequestScoped(typeOrKey, type) {
35
- return this.register(false)(_const.Scopes.request)(typeOrKey, type);
55
+ const registration = this.serviceRegistry.registerType(_const.Scopes.request, {
56
+ typeOrKey,
57
+ typeOrInstance: type
58
+ });
59
+ return registration;
36
60
  }
37
61
  build() {
38
62
  return new _crucible.Crucible({
39
63
  serviceRegistry: this.serviceRegistry
40
64
  });
41
65
  }
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
- }
67
66
  }
68
67
 
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgQ29udGFpbmVyUmVnaXN0cmFyLCBTY29wZSB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQ3J1Y2libGUgfSBmcm9tIFwiLi9jcnVjaWJsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RlclR5cGVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENvbnRhaW5lckJ1aWxkZXJPcHRpb25zID0ge1xuXHRzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeTtcbn07XG5cbnR5cGUgUmVnaXN0ZXJGbiA9IChcblx0dHlwZU9yS2V5OiBSZWdpc3RlclR5cGVPcHRpb25zW1widHlwZU9yS2V5XCJdLFxuXHR0eXBlT3JJbnN0YW5jZT86IFJlZ2lzdGVyVHlwZU9wdGlvbnNbXCJ0eXBlT3JJbnN0YW5jZVwiXSxcbikgPT4gU2VydmljZVJlZ2lzdHJhdGlvbjtcblxuZXhwb3J0IGNsYXNzIENydWNpYmxlQnVpbGRlciBpbXBsZW1lbnRzIENvbnRhaW5lckJ1aWxkZXIge1xuXHRwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5O1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbnRhaW5lckJ1aWxkZXJPcHRpb25zKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBvcHRpb25zPy5zZXJ2aWNlUmVnaXN0cnkgPz8gbmV3IFNlcnZpY2VSZWdpc3RyeSgpO1xuXHR9XG5cblx0cHVibGljIGdldCBvdmVycmlkZSgpOiBDb250YWluZXJSZWdpc3RyYXIge1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVJlZ2lzdHJhcih0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ29uc3RydWN0YWJsZSwgc2NvcGU6IFNjb3BlID0gU2NvcGVzLnRyYW5zaWVudCkge1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyKGZhbHNlKShzY29wZSkodHlwZS5uYW1lLCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNYW55KGZhbHNlLCBzY29wZU9yVHlwZSwgdHlwZXMpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KFxuXHRcdGtleTogc3RyaW5nIHwgc3ltYm9sLFxuXHRcdHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSwgdHlwZT86IENvbnN0cnVjdGFibGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWdpc3RlcihmYWxzZSkoU2NvcGVzLnRyYW5zaWVudCkodHlwZU9yS2V5LCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdFx0aW5zdGFuY2U6IG9iamVjdCxcblx0KTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKGtleTogc3RyaW5nIHwgc3ltYm9sLCB0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlLFxuXHRcdHR5cGVPckluc3RhbmNlPzogQ29uc3RydWN0YWJsZSB8IG9iamVjdCxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5zaW5nbGV0b24pKHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXIgPVxuXHRcdChvdmVycmlkZTogYm9vbGVhbikgPT5cblx0XHQoc2NvcGU6IFNjb3BlKTogUmVnaXN0ZXJGbiA9PlxuXHRcdCh0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlKSA9PlxuXHRcdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKHNjb3BlLCB7XG5cdFx0XHRcdHR5cGVPcktleSxcblx0XHRcdFx0dHlwZU9ySW5zdGFuY2UsXG5cdFx0XHRcdG92ZXJyaWRlLFxuXHRcdFx0fSk7XG5cblx0cHJpdmF0ZSByZWdpc3Rlck1hbnkoXG5cdFx0b3ZlcnJpZGU6IGJvb2xlYW4sXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlczogQ29uc3RydWN0YWJsZVtdLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGJpbmQgPSB0aGlzLnJlZ2lzdGVyKG92ZXJyaWRlKTtcblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0cmV0dXJuIGFsbFR5cGVzLm1hcCgodHlwZSkgPT4gYmluZChzY29wZSkodHlwZS5uYW1lLCB0eXBlKSk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhcihvdmVycmlkZTogYm9vbGVhbik6IENvbnRhaW5lclJlZ2lzdHJhciB7XG5cdFx0Y29uc3QgYmluZCA9IHRoaXMucmVnaXN0ZXIob3ZlcnJpZGUpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZWdpc3RlclR5cGU6ICh0eXBlLCBzY29wZSA9IFNjb3Blcy50cmFuc2llbnQpID0+IGJpbmQoc2NvcGUpKHR5cGUubmFtZSwgdHlwZSksXG5cdFx0XHRyZWdpc3RlclR5cGVzOiAoKHNjb3BlT3JUeXBlLCAuLi50eXBlcykgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3Rlck1hbnkoXG5cdFx0XHRcdFx0b3ZlcnJpZGUsXG5cdFx0XHRcdFx0c2NvcGVPclR5cGUsXG5cdFx0XHRcdFx0dHlwZXMsXG5cdFx0XHRcdCkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHlwZXNcIl0sXG5cdFx0XHRyZWdpc3RlclRyYW5zaWVudDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy50cmFuc2llbnQpKHR5cGVPcktleSwgdHlwZSkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHJhbnNpZW50XCJdLFxuXHRcdFx0cmVnaXN0ZXJTaW5nbGV0b246ICgodHlwZU9yS2V5LCB0eXBlT3JJbnN0YW5jZT8pID0+XG5cdFx0XHRcdGJpbmQoU2NvcGVzLnNpbmdsZXRvbikoXG5cdFx0XHRcdFx0dHlwZU9yS2V5LFxuXHRcdFx0XHRcdHR5cGVPckluc3RhbmNlLFxuXHRcdFx0XHQpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclNpbmdsZXRvblwiXSxcblx0XHRcdHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclJlcXVlc3RTY29wZWRcIl0sXG5cdFx0fTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNydWNpYmxlQnVpbGRlciIsInNlcnZpY2VSZWdpc3RyeSIsIm9wdGlvbnMiLCJTZXJ2aWNlUmVnaXN0cnkiLCJvdmVycmlkZSIsImNyZWF0ZVJlZ2lzdHJhciIsInJlZ2lzdGVyVHlwZSIsInR5cGUiLCJzY29wZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsInJlZ2lzdGVyIiwibmFtZSIsInJlZ2lzdGVyVHlwZXMiLCJzY29wZU9yVHlwZSIsInR5cGVzIiwicmVnaXN0ZXJNYW55IiwicmVnaXN0ZXJUcmFuc2llbnQiLCJ0eXBlT3JLZXkiLCJyZWdpc3RlclNpbmdsZXRvbiIsInR5cGVPckluc3RhbmNlIiwic2luZ2xldG9uIiwicmVnaXN0ZXJSZXF1ZXN0U2NvcGVkIiwicmVxdWVzdCIsImJ1aWxkIiwiQ3J1Y2libGUiLCJiaW5kIiwiaXNTY29wZSIsImFsbFR5cGVzIiwibWFwIl0sIm1hcHBpbmdzIjoiOzs7OytCQWlCYUE7OztlQUFBQTs7O3VCQWhCVTswQkFHRTtpQ0FFTztBQVd6QixNQUFNQTtJQUNKQyxnQkFBaUM7SUFDekMsWUFBbUJDLE9BQWlDLENBQUU7UUFDckQsSUFBSSxDQUFDRCxlQUFlLEdBQUdDLFNBQVNELG1CQUFtQixJQUFJRSxnQ0FBZTtJ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
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcbmltcG9ydCB7IENydWNpYmxlIH0gZnJvbSBcIi4vY3J1Y2libGUuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyeSB9IGZyb20gXCIuL3NlcnZpY2UtcmVnaXN0cnkuanNcIjtcblxudHlwZSBDb250YWluZXJCdWlsZGVyT3B0aW9ucyA9IHtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGVCdWlsZGVyIGltcGxlbWVudHMgQ29udGFpbmVyQnVpbGRlciB7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29udGFpbmVyQnVpbGRlck9wdGlvbnMpIHtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG9wdGlvbnM/LnNlcnZpY2VSZWdpc3RyeSA/PyBuZXcgU2VydmljZVJlZ2lzdHJ5KCk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHR5cGU6IENvbnN0cnVjdGFibGUsIHNjb3BlOiBTY29wZSA9IFNjb3Blcy50cmFuc2llbnQpIHtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlclR5cGUoc2NvcGUsIHtcblx0XHRcdHR5cGVPcktleTogdHlwZS5uYW1lLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHR5cGUsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9ucyA9IEFycmF5Lm9mPFNlcnZpY2VSZWdpc3RyYXRpb24+KCk7XG5cblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIGFsbFR5cGVzKSB7XG5cdFx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdGVyVHlwZSh0eXBlLCBzY29wZSk7XG5cdFx0XHRyZWdpc3RyYXRpb25zLnB1c2gocmVnaXN0cmF0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9ucztcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudChcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCxcblx0XHR0eXBlOiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJUcmFuc2llbnQodHlwZTogQ29uc3RydWN0YWJsZSk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlT3JLZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUsIHR5cGU/OiBDb25zdHJ1Y3RhYmxlKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy50cmFuc2llbnQsIHtcblx0XHRcdHR5cGVPcktleSxcblx0XHRcdHR5cGVPckluc3RhbmNlOiB0eXBlLFxuXHRcdH0pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0a2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgb2JqZWN0LFxuXHRcdGluc3RhbmNlOiBvYmplY3QsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogQ29uc3RydWN0YWJsZSk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbih0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdCkge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyVHlwZShTY29wZXMuc2luZ2xldG9uLCB7XG5cdFx0XHR0eXBlT3JLZXksXG5cdFx0XHR0eXBlT3JJbnN0YW5jZSxcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy5yZXF1ZXN0LCB7XG5cdFx0XHR0eXBlT3JLZXksXG5cdFx0XHR0eXBlT3JJbnN0YW5jZTogdHlwZSxcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNydWNpYmxlQnVpbGRlciIsInNlcnZpY2VSZWdpc3RyeSIsIm9wdGlvbnMiLCJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RlclR5cGUiLCJ0eXBlIiwic2NvcGUiLCJTY29wZXMiLCJ0cmFuc2llbnQiLCJyZWdpc3RyYXRpb24iLCJ0eXBlT3JLZXkiLCJuYW1lIiwidHlwZU9ySW5zdGFuY2UiLCJyZWdpc3RlclR5cGVzIiwic2NvcGVPclR5cGUiLCJ0eXBlcyIsInJlZ2lzdHJhdGlvbnMiLCJBcnJheSIsIm9mIiwiaXNTY29wZSIsImFsbFR5cGVzIiwicHVzaCIsInJlZ2lzdGVyVHJhbnNpZW50IiwicmVnaXN0ZXJTaW5nbGV0b24iLCJzaW5nbGV0b24iLCJyZWdpc3RlclJlcXVlc3RTY29wZWQiLCJyZXF1ZXN0IiwiYnVpbGQiLCJDcnVjaWJsZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFXYUE7OztlQUFBQTs7O3VCQVZVOzBCQUdFO2lDQUNPO0FBTXpCLE1BQU1BO0lBQ0pDLGdCQUFpQztJQUN6QyxZQUFtQkMsT0FBaUMsQ0FBRTtRQUNyRCxJQUFJLENBQUNELGVBQWUsR0FBR0MsU0FBU0QsbUJBQW1CLElBQUlFLGdDQUFlO0lBQ3ZFO0lBRU9DLGFBQWFDLElBQW1CLEVBQUVDLFFBQWVDLGFBQU0sQ0FBQ0MsU0FBUyxFQUFFO1FBQ3pFLE1BQU1DLGVBQWUsSUFBSSxDQUFDUixlQUFlLENBQUNHLFlBQVksQ0FBQ0UsT0FBTztZQUM3REksV0FBV0wsS0FBS00sSUFBSTtZQUNwQkMsZ0JBQWdCUDtRQUNqQjtRQUNBLE9BQU9JO0lBQ1I7SUFJT0ksY0FDTkMsV0FBa0MsRUFDbEMsR0FBR0MsS0FBc0IsRUFDRDtRQUN4QixNQUFNQyxnQkFBZ0JDLE1BQU1DLEVBQUU7UUFFOUIsTUFBTUMsVUFBVSxPQUFPTCxnQkFBZ0I7UUFDdkMsTUFBTVIsUUFBUWEsVUFBVUwsY0FBY1AsYUFBTSxDQUFDQyxTQUFTO1FBQ3RELE1BQU1ZLFdBQVdELFVBQVVKLFFBQVE7WUFBQ0Q7ZUFBZ0JDO1NBQU07UUFDMUQsS0FBSyxNQUFNVixRQUFRZSxTQUFVO1lBQzVCLE1BQU1YLGVBQWUsSUFBSSxDQUFDTCxZQUFZLENBQUNDLE1BQU1DO1lBQzdDVSxjQUFjSyxJQUFJLENBQUNaO1FBQ3BCO1FBRUEsT0FBT087SUFDUjtJQU9PTSxrQkFBa0JaLFNBQTBDLEVBQUVMLElBQW9CLEVBQUU7UUFDMUYsTUFBTUksZUFBZSxJQUFJLENBQUNSLGVBQWUsQ0FBQ0csWUFBWSxDQUFDRyxhQUFNLENBQUNDLFNBQVMsRUFBRTtZQUN4RUU7WUFDQUUsZ0JBQWdCUDtRQUNqQjtRQUNBLE9BQU9JO0lBQ1I7SUFRT2Msa0JBQ05iLFNBQTBDLEVBQzFDRSxjQUF1QyxFQUN0QztRQUNELE1BQU1ILGVBQWUsSUFBSSxDQUFDUixlQUFlLENBQUNHLFlBQVksQ0FBQ0csYUFBTSxDQUFDaUIsU0FBUyxFQUFFO1lBQ3hFZDtZQUNBRTtRQUNEO1FBQ0EsT0FBT0g7SUFDUjtJQU1PZ0Isc0JBQ05mLFNBQXlELEVBQ3pETCxJQUFtQyxFQUNsQztRQUNELE1BQU1JLGVBQWUsSUFBSSxDQUFDUixlQUFlLENBQUNHLFlBQVksQ0FBQ0csYUFBTSxDQUFDbUIsT0FBTyxFQUFFO1lBQ3RFaEI7WUFDQUUsZ0JBQWdCUDtRQUNqQjtRQUNBLE9BQU9JO0lBQ1I7SUFFT2tCLFFBQWtCO1FBQ3hCLE9BQU8sSUFBSUMsa0JBQVEsQ0FBQztZQUFFM0IsaUJBQWlCLElBQUksQ0FBQ0EsZUFBZTtRQUFDO0lBQzdEO0FBQ0QifQ==
@@ -18,7 +18,6 @@ class Crucible {
18
18
  key;
19
19
  instances = new Map();
20
20
  serviceRegistry;
21
- parent;
22
21
  rootScope;
23
22
  scopes = new Map();
24
23
  logger = _scribe.scribe.logger(Crucible.name);
@@ -27,8 +26,7 @@ class Crucible {
27
26
  this.key = options?.key;
28
27
  this.serviceRegistry = new _serviceregistry.ServiceRegistry(options?.serviceRegistry);
29
28
  this.registerLifetimeScope();
30
- this.parent = options?.parent;
31
- this.rootScope = options?.parent?.rootScope ?? this;
29
+ this.rootScope = options?.rootScope ?? this;
32
30
  }
33
31
  resolveMany(resolveRequest) {
34
32
  const key = new _registrationkeymodel.RegistrationKey(resolveRequest);
@@ -54,41 +52,28 @@ class Crucible {
54
52
  return service;
55
53
  }
56
54
  beginScope(name) {
57
- if (this.isDisposed) {
58
- throw new Error("This container has been disposed");
59
- }
60
- if (name != null && this.scopes.has(name)) {
55
+ if (this.scopes.has(name)) {
61
56
  throw new _errors.DuplicateScopeError(`Cannot create duplicate scope. Scope with ${name} is already created and has not been disposed.`);
62
57
  }
63
58
  const scope = new Crucible({
64
59
  key: name,
65
60
  serviceRegistry: this.serviceRegistry,
66
- parent: this
61
+ rootScope: this
67
62
  });
68
- if (name != null) {
69
- this.scopes.set(name, scope);
70
- }
63
+ this.scopes.set(name, scope);
71
64
  return scope;
72
65
  }
73
66
  [Symbol.dispose]() {
74
67
  if (this.isDisposed) {
75
68
  return;
76
69
  }
77
- this.disposeSync();
70
+ this.dispose();
78
71
  }
79
- async [Symbol.asyncDispose]() {
80
- if (this.isDisposed) {
81
- return;
82
- }
83
- await this.disposeAsync();
84
- }
85
- disposeSync() {
72
+ dispose() {
86
73
  if (this.isDisposed) {
87
74
  return;
88
75
  }
89
76
  this.isDisposed = true;
90
- this.parent?.releaseScope(this.key);
91
- this.scopes.clear();
92
77
  for (const [, inst] of this.instances){
93
78
  if (inst === this) {
94
79
  continue;
@@ -96,24 +81,6 @@ class Crucible {
96
81
  inst[Symbol.dispose]?.();
97
82
  }
98
83
  }
99
- async disposeAsync() {
100
- if (this.isDisposed) {
101
- return;
102
- }
103
- this.isDisposed = true;
104
- this.parent?.releaseScope(this.key);
105
- this.scopes.clear();
106
- for (const [, inst] of this.instances){
107
- if (inst === this) {
108
- continue;
109
- }
110
- if (Symbol.asyncDispose in inst) {
111
- await inst[Symbol.asyncDispose]();
112
- } else {
113
- inst[Symbol.dispose]?.();
114
- }
115
- }
116
- }
117
84
  getRegistrationFrom(key) {
118
85
  const registration = this.serviceRegistry.getRegistration(key.value);
119
86
  return registration;
@@ -131,7 +98,7 @@ class Crucible {
131
98
  }
132
99
  getOrCreateInstance(registration) {
133
100
  if (this.isDisposed) {
134
- throw new Error("This container has been disposed");
101
+ throw new Error("This continer has been disposed");
135
102
  }
136
103
  const { key, type, isInstance } = registration;
137
104
  const cacheKey = isInstance ? key.value : type;
@@ -165,18 +132,12 @@ class Crucible {
165
132
  }
166
133
  return resolved;
167
134
  }
168
- releaseScope(name) {
169
- if (name == null) {
170
- return;
171
- }
172
- this.scopes.delete(name);
173
- }
174
135
  registerLifetimeScope() {
175
- this.serviceRegistry.replaceType(_const.Scopes.request, {
136
+ this.serviceRegistry.registerType(_const.Scopes.request, {
176
137
  typeOrKey: _const.LifetimeScopeToken,
177
138
  typeOrInstance: this
178
139
  });
179
140
  }
180
141
  }
181
142
 
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRwYXJlbnQ/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcGFyZW50PzogQ3J1Y2libGU7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucz8ucGFyZW50O1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucGFyZW50Py5yb290U2NvcGUgPz8gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlTWFueTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUW10ge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbnMgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KSA/PyBbXTtcblxuXHRcdGNvbnN0IHNlcnZpY2VzID0gQXJyYXkub2Y8VD4oKTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJhdGlvbiBvZiByZWdpc3RyYXRpb25zKSB7XG5cdFx0XHRjb25zdCBzZXJ2aWNlID0gdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VydmljZXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZTxUIGV4dGVuZHMgb2JqZWN0IHwgb2JqZWN0W10+KHJlc29sdmVSZXF1ZXN0OiBSZXNvbHZlUmVxdWVzdDxUPik6IFQge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuZ2V0UmVnaXN0cmF0aW9uRnJvbShrZXkpO1xuXHRcdGlmIChyZWdpc3RyYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sb2dnZXIud2FybihgQ2Fubm90IHJlc29sdmUgZGVwZW5kZW5jeSAke2tleS50b1N0cmluZygpfWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZ2lzdHJhdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVzb2x2ZUVycm9yKFxuXHRcdFx0XHRgVGhlcmUgYXJlIG11bHRpcGxlIHNlcnZpY2VzIHJlZ2lzdGVyZWQgd2l0aCBrZXkgJHtrZXkudG9TdHJpbmcoKX0uIFVzZSByZXNvbHZlTWFueSB0byByZXNvbHZlIGFsbCBpbXBsZW1lbnRhdGlvbnMuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb25bMF0pO1xuXHRcdHJldHVybiBzZXJ2aWNlO1xuXHR9XG5cblx0cHVibGljIGJlZ2luU2NvcGUobmFtZT86IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGFpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRpZiAobmFtZSAhPSBudWxsICYmIHRoaXMuc2NvcGVzLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IER1cGxpY2F0ZVNjb3BlRXJyb3IoXG5cdFx0XHRcdGBDYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBzY29wZS4gU2NvcGUgd2l0aCAke25hbWV9IGlzIGFscmVhZHkgY3JlYXRlZCBhbmQgaGFzIG5vdCBiZWVuIGRpc3Bvc2VkLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjb3BlID0gbmV3IENydWNpYmxlKHtcblx0XHRcdGtleTogbmFtZSxcblx0XHRcdHNlcnZpY2VSZWdpc3RyeTogdGhpcy5zZXJ2aWNlUmVnaXN0cnksXG5cdFx0XHRwYXJlbnQ6IHRoaXMsXG5cdFx0fSk7XG5cblx0XHRpZiAobmFtZSAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNjb3Blcy5zZXQobmFtZSwgc2NvcGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2NvcGU7XG5cdH1cblxuXHRwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZVN5bmMoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VBc3luYygpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNwb3NlU3luYygpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnBhcmVudD8ucmVsZWFzZVNjb3BlKHRoaXMua2V5KTtcblx0XHR0aGlzLnNjb3Blcy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgWywgaW5zdF0gb2YgdGhpcy5pbnN0YW5jZXMpIHtcblx0XHRcdGlmIChpbnN0ID09PSB0aGlzKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aW5zdFtTeW1ib2wuZGlzcG9zZV0/LigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUFzeW5jKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucGFyZW50Py5yZWxlYXNlU2NvcGUodGhpcy5rZXkpO1xuXHRcdHRoaXMuc2NvcGVzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRhaW5lciBoYXMgYmVlbiBkaXNwb3NlZFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgeyBrZXksIHR5cGUsIGlzSW5zdGFuY2UgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRjb25zdCBjYWNoZUtleSA9IGlzSW5zdGFuY2UgPyBrZXkudmFsdWUgOiB0eXBlO1xuXHRcdGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQoY2FjaGVLZXkpO1xuXHRcdGlmIChleGlzdGluZ0luc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBleGlzdGluZ0luc3RhbmNlIGFzIFQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBpc0luc3RhbmNlID8gKHR5cGUgYXMgVCkgOiB0aGlzLmNyZWF0ZUluc3RhbmNlPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0dGhpcy5pbnN0YW5jZXMuc2V0KGNhY2hlS2V5LCBpbnN0YW5jZSk7XG5cdFx0cmV0dXJuIGluc3RhbmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB0eXBlID0gcmVnaXN0cmF0aW9uLnR5cGUgYXMgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0XHRjb25zdCBjYW5Db25zdHJ1Y3QgPSBpc0NvbnN0cnVjdGFibGUodHlwZSk7XG5cdFx0Y29uc3QgZGVwcyA9IHRoaXMucmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlKTtcblx0XHRjb25zdCBpbnN0ID0gKGNhbkNvbnN0cnVjdCA/IG5ldyB0eXBlKC4uLmRlcHMpIDogdHlwZSgpKSBhcyBUO1xuXHRcdHJldHVybiBpbnN0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IGdldE1ldGE8QXJyYXk8Q29uc3RydWN0YWJsZT4+KFJlZmxlY3Rpb25NZXRhLnBhcmFtdHlwZXMsIHR5cGUpID8/IFtdO1xuXG5cdFx0Y29uc3QgaW5qZWN0VG9rZW5zID1cblx0XHRcdGdldE1ldGE8SW5qZWN0aW9uTWV0YWRhdGE+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdHlwZSkgPz8gbmV3IE1hcCgpO1xuXG5cdFx0Ly9UT0RPOiBwdXQgYSB0cnkgY2F0Y2ggaGVyZSBzbyB3ZSBjYW4gdGhyb3cgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2Vcblx0XHRsZXQgcmVzb2x2ZWQgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSBpbmplY3RUb2tlbnMuZ2V0KGkpPy5rZXkgPz8gcGFyYW1zW2ldLm5hbWU7XG5cdFx0XHRjb25zdCBkZXAgPSBpc0FycmF5VHlwZShwYXJhbXNbaV0pID8gdGhpcy5yZXNvbHZlTWFueSh0b2tlbikgOiB0aGlzLnJlc29sdmUodG9rZW4pO1xuXHRcdFx0cmVzb2x2ZWQgPSBbLi4ucmVzb2x2ZWQsIGRlcF07XG5cdFx0fVxuXHRcdHJldHVybiByZXNvbHZlZDtcblx0fVxuXG5cdHByaXZhdGUgcmVsZWFzZVNjb3BlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zY29wZXMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVwbGFjZVR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInBhcmVudCIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsInNjcmliZSIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsIlNlcnZpY2VSZWdpc3RyeSIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJSZWdpc3RyYXRpb25LZXkiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJSZXNvbHZlRXJyb3IiLCJiZWdpblNjb3BlIiwiRXJyb3IiLCJoYXMiLCJEdXBsaWNhdGVTY29wZUVycm9yIiwic2NvcGUiLCJzZXQiLCJTeW1ib2wiLCJkaXNwb3NlIiwiZGlzcG9zZVN5bmMiLCJhc3luY0Rpc3Bvc2UiLCJkaXNwb3NlQXN5bmMiLCJyZWxlYXNlU2NvcGUiLCJjbGVhciIsImluc3QiLCJnZXRSZWdpc3RyYXRpb24iLCJ2YWx1ZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsImNyZWF0ZUluc3RhbmNlIiwic2luZ2xldG9uIiwiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsInJlcXVlc3QiLCJ0eXBlIiwiaXNJbnN0YW5jZSIsImNhY2hlS2V5IiwiZXhpc3RpbmdJbnN0YW5jZSIsImdldCIsImluc3RhbmNlIiwiY2FuQ29uc3RydWN0IiwiaXNDb25zdHJ1Y3RhYmxlIiwiZGVwcyIsInJlc29sdmVEZXBlbmRlbmNpZXMiLCJwYXJhbXMiLCJnZXRNZXRhIiwiUmVmbGVjdGlvbk1ldGEiLCJwYXJhbXR5cGVzIiwiaW5qZWN0VG9rZW5zIiwiQ3J1Y2libGVNZXRhIiwiaW5qZWN0dG9rZW4iLCJyZXNvbHZlZCIsImkiLCJ0b2tlbiIsImRlcCIsImlzQXJyYXlUeXBlIiwiZGVsZXRlIiwicmVwbGFjZVR5cGUiLCJ0eXBlT3JLZXkiLCJMaWZldGltZVNjb3BlVG9rZW4iLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozs0QkFoQk47d0JBQ2dCO3VCQUNrQztzQ0FFekI7d0JBRWtCO2lDQUVsQjtBQVF6QixNQUFNQTtJQUNMQyxJQUFZO0lBQ1RDLFlBQVksSUFBSUMsTUFBdUI7SUFDekNDLGdCQUFpQztJQUNqQ0MsT0FBa0I7SUFDbEJDLFVBQW9CO0lBQ3BCQyxTQUFTLElBQUlKLE1BQTZCO0lBQzFDSyxTQUFTQyxjQUFNLENBQUNELE1BQU0sQ0FBQ1IsU0FBU1UsSUFBSSxFQUFFO0lBQ3RDQyxhQUFhLE1BQU07SUFD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
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRyb290U2NvcGU/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucm9vdFNjb3BlID8/IHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZU1hbnk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ocmVzb2x2ZVJlcXVlc3Q6IFJlc29sdmVSZXF1ZXN0PFQ+KTogVFtdIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb25zID0gdGhpcy5nZXRSZWdpc3RyYXRpb25Gcm9tKGtleSkgPz8gW107XG5cblx0XHRjb25zdCBzZXJ2aWNlcyA9IEFycmF5Lm9mPFQ+KCk7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xuXHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb24pO1xuXHRcdFx0c2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlcnZpY2VzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmU8VCBleHRlbmRzIG9iamVjdCB8IG9iamVjdFtdPihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KTtcblx0XHRpZiAocmVnaXN0cmF0aW9uID09IG51bGwpIHtcblx0XHRcdHRoaXMubG9nZ2VyLndhcm4oYENhbm5vdCByZXNvbHZlIGRlcGVuZGVuY3kgJHtrZXkudG9TdHJpbmcoKX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWdpc3RyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlc29sdmVFcnJvcihcblx0XHRcdFx0YFRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2aWNlcyByZWdpc3RlcmVkIHdpdGgga2V5ICR7a2V5LnRvU3RyaW5nKCl9LiBVc2UgcmVzb2x2ZU1hbnkgdG8gcmVzb2x2ZSBhbGwgaW1wbGVtZW50YXRpb25zLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aGlzLnJlc29sdmVSZWdpc3RyYXRpb248VD4ocmVnaXN0cmF0aW9uWzBdKTtcblx0XHRyZXR1cm4gc2VydmljZTtcblx0fVxuXG5cdHB1YmxpYyBiZWdpblNjb3BlKG5hbWU/OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5zY29wZXMuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRHVwbGljYXRlU2NvcGVFcnJvcihcblx0XHRcdFx0YENhbm5vdCBjcmVhdGUgZHVwbGljYXRlIHNjb3BlLiBTY29wZSB3aXRoICR7bmFtZX0gaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBoYXMgbm90IGJlZW4gZGlzcG9zZWQuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBuZXcgQ3J1Y2libGUoe1xuXHRcdFx0a2V5OiBuYW1lLFxuXHRcdFx0c2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSxcblx0XHRcdHJvb3RTY29wZTogdGhpcyxcblx0XHR9KTtcblxuXHRcdHRoaXMuc2NvcGVzLnNldChuYW1lLCBzY29wZSk7XG5cdFx0cmV0dXJuIHNjb3BlO1xuXHR9XG5cblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IFssIGluc3RdIG9mIHRoaXMuaW5zdGFuY2VzKSB7XG5cdFx0XHRpZiAoaW5zdCA9PT0gdGhpcykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGluc3RbU3ltYm9sLmRpc3Bvc2VdPy4oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlZ2lzdHJhdGlvbkZyb20oa2V5OiBSZWdpc3RyYXRpb25LZXkpIHtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRSZWdpc3RyYXRpb24oa2V5LnZhbHVlKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVnaXN0cmF0aW9uPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGNvbnN0IHsgc2NvcGUgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0XHRjYXNlIFNjb3Blcy50cmFuc2llbnQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5zaW5nbGV0b246XG5cdFx0XHRcdHJldHVybiB0aGlzLnJvb3RTY29wZS5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5yZXF1ZXN0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRPckNyZWF0ZUluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGluZXIgaGFzIGJlZW4gZGlzcG9zZWRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHsga2V5LCB0eXBlLCBpc0luc3RhbmNlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0Y29uc3QgY2FjaGVLZXkgPSBpc0luc3RhbmNlID8ga2V5LnZhbHVlIDogdHlwZTtcblx0XHRjb25zdCBleGlzdGluZ0luc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KGNhY2hlS2V5KTtcblx0XHRpZiAoZXhpc3RpbmdJbnN0YW5jZSAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZXhpc3RpbmdJbnN0YW5jZSBhcyBUO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlID0gaXNJbnN0YW5jZSA/ICh0eXBlIGFzIFQpIDogdGhpcy5jcmVhdGVJbnN0YW5jZTxUPihyZWdpc3RyYXRpb24pO1xuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChjYWNoZUtleSwgaW5zdGFuY2UpO1xuXHRcdHJldHVybiBpbnN0YW5jZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlSW5zdGFuY2U8VCBleHRlbmRzIG9iamVjdD4ocmVnaXN0cmF0aW9uOiBTZXJ2aWNlUmVnaXN0cmF0aW9uKTogVCB7XG5cdFx0Y29uc3QgdHlwZSA9IHJlZ2lzdHJhdGlvbi50eXBlIGFzIENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGU7XG5cdFx0Y29uc3QgY2FuQ29uc3RydWN0ID0gaXNDb25zdHJ1Y3RhYmxlKHR5cGUpO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLnJlc29sdmVEZXBlbmRlbmNpZXModHlwZSk7XG5cdFx0Y29uc3QgaW5zdCA9IChjYW5Db25zdHJ1Y3QgPyBuZXcgdHlwZSguLi5kZXBzKSA6IHR5cGUoKSkgYXMgVDtcblx0XHRyZXR1cm4gaW5zdDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlOiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlKTogdW5rbm93bltdIHtcblx0XHRjb25zdCBwYXJhbXMgPSBnZXRNZXRhPEFycmF5PENvbnN0cnVjdGFibGU+PihSZWZsZWN0aW9uTWV0YS5wYXJhbXR5cGVzLCB0eXBlKSA/PyBbXTtcblxuXHRcdGNvbnN0IGluamVjdFRva2VucyA9XG5cdFx0XHRnZXRNZXRhPEluamVjdGlvbk1ldGFkYXRhPihDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIHR5cGUpID8/IG5ldyBNYXAoKTtcblxuXHRcdC8vVE9ETzogcHV0IGEgdHJ5IGNhdGNoIGhlcmUgc28gd2UgY2FuIHRocm93IHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG5cdFx0bGV0IHJlc29sdmVkID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHRva2VuID0gaW5qZWN0VG9rZW5zLmdldChpKT8ua2V5ID8/IHBhcmFtc1tpXS5uYW1lO1xuXHRcdFx0Y29uc3QgZGVwID0gaXNBcnJheVR5cGUocGFyYW1zW2ldKSA/IHRoaXMucmVzb2x2ZU1hbnkodG9rZW4pIDogdGhpcy5yZXNvbHZlKHRva2VuKTtcblx0XHRcdHJlc29sdmVkID0gWy4uLnJlc29sdmVkLCBkZXBdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpIHtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlclR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsInNjcmliZSIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsIlNlcnZpY2VSZWdpc3RyeSIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJSZWdpc3RyYXRpb25LZXkiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJSZXNvbHZlRXJyb3IiLCJiZWdpblNjb3BlIiwiaGFzIiwiRHVwbGljYXRlU2NvcGVFcnJvciIsInNjb3BlIiwic2V0IiwiU3ltYm9sIiwiZGlzcG9zZSIsImluc3QiLCJnZXRSZWdpc3RyYXRpb24iLCJ2YWx1ZSIsIlNjb3BlcyIsInRyYW5zaWVudCIsImNyZWF0ZUluc3RhbmNlIiwic2luZ2xldG9uIiwiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsInJlcXVlc3QiLCJFcnJvciIsInR5cGUiLCJpc0luc3RhbmNlIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luc3RhbmNlIiwiZ2V0IiwiaW5zdGFuY2UiLCJjYW5Db25zdHJ1Y3QiLCJpc0NvbnN0cnVjdGFibGUiLCJkZXBzIiwicmVzb2x2ZURlcGVuZGVuY2llcyIsInBhcmFtcyIsImdldE1ldGEiLCJSZWZsZWN0aW9uTWV0YSIsInBhcmFtdHlwZXMiLCJpbmplY3RUb2tlbnMiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3R0b2tlbiIsInJlc29sdmVkIiwiaSIsInRva2VuIiwiZGVwIiwiaXNBcnJheVR5cGUiLCJyZWdpc3RlclR5cGUiLCJ0eXBlT3JLZXkiLCJMaWZldGltZVNjb3BlVG9rZW4iLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1QmFBOzs7ZUFBQUE7Ozs0QkFoQk47d0JBQ2dCO3VCQUNrQztzQ0FFekI7d0JBRWtCO2lDQUVsQjtBQVF6QixNQUFNQTtJQUNMQyxJQUFZO0lBQ1RDLFlBQVksSUFBSUMsTUFBdUI7SUFDekNDLGdCQUFpQztJQUNqQ0MsVUFBb0I7SUFDcEJDLFNBQVMsSUFBSUgsTUFBNkI7SUFDMUNJLFNBQVNDLGNBQU0sQ0FBQ0QsTUFBTSxDQUFDUCxTQUFTUyxJQUFJLEVBQUU7SUFDdENDLGFBQWEsTUFBTTtJQUMzQixZQUFtQkMsT0FBeUIsQ0FBRTtRQUM3QyxJQUFJLENBQUNWLEdBQUcsR0FBR1UsU0FBU1Y7UUFDcEIsSUFBSSxDQUFDRyxlQUFlLEdBQUcsSUFBSVEsZ0NBQWUsQ0FBQ0QsU0FBU1A7UUFDcEQsSUFBSSxDQUFDUyxxQkFBcUI7UUFDMUIsSUFBSSxDQUFDUixTQUFTLEdBQUdNLFNBQVNOLGFBQWEsSUFBSTtJQUM1QztJQUVPUyxZQUF1Q0MsY0FBaUMsRUFBTztRQUNyRixNQUFNZCxNQUFNLElBQUllLHFDQUFlLENBQUNEO1FBQ2hDLE1B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
@@ -10,7 +10,6 @@ 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");
14
13
  class ServiceRegistry {
15
14
  registrations;
16
15
  constructor(parent){
@@ -18,22 +17,10 @@ class ServiceRegistry {
18
17
  }
19
18
  registerType(scope, options) {
20
19
  const registration = this.createRegistrationFrom(scope, options);
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));
20
+ const existingRegistration = this.getRegistrations(registration.key)?.filter((reg)=>!reg.isEqual(registration)) ?? [];
27
21
  this.setRegistration(registration.key, [
28
22
  registration,
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
23
+ ...existingRegistration
37
24
  ]);
38
25
  return registration;
39
26
  }
@@ -60,4 +47,4 @@ class ServiceRegistry {
60
47
  }
61
48
  }
62
49
 
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25FcnJvciB9IGZyb20gXCIuLi90eXBlcy9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJUeXBlT3B0aW9ucyA9IHtcblx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUgfCBvYmplY3Q7XG5cdG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUmVnaXN0cnkge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnM6IE1hcDxzdHJpbmcsIFNlcnZpY2VSZWdpc3RyYXRpb25bXT47XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTZXJ2aWNlUmVnaXN0cnkpIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKHBhcmVudD8ucmVnaXN0cmF0aW9ucyk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHNjb3BlOiBTY29wZSwgb3B0aW9uczogUmVnaXN0ZXJUeXBlT3B0aW9ucykge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSkgPz8gW107XG5cdFx0Y29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmcuZmluZCgocmVnKSA9PiByZWcuaXNFcXVhbChyZWdpc3RyYXRpb24pKTtcblx0XHRpZiAoZHVwbGljYXRlICE9IG51bGwgJiYgIW9wdGlvbnMub3ZlcnJpZGUpIHtcblx0XHRcdHRocm93IG5ldyBSZWdpc3RyYXRpb25FcnJvcihcblx0XHRcdFx0YEEgc2VydmljZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIGtleSAke3JlZ2lzdHJhdGlvbi5rZXl9LiBVc2UgYnVpbGRlci5vdmVycmlkZS5yZWdpc3RlclNpbmdsZXRvbigpIChvciB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIqIG1ldGhvZCkgdG8gcmVwbGFjZSBpdC5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCByZW1haW5pbmcgPSBleGlzdGluZy5maWx0ZXIoKHJlZykgPT4gIXJlZy5pc0VxdWFsKHJlZ2lzdHJhdGlvbikpO1xuXHRcdHRoaXMuc2V0UmVnaXN0cmF0aW9uKHJlZ2lzdHJhdGlvbi5rZXksIFtyZWdpc3RyYXRpb24sIC4uLnJlbWFpbmluZ10pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVwbGFjZVR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHR0aGlzLnNldFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24ua2V5LCBbcmVnaXN0cmF0aW9uXSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZWdpc3RyYXRpb24oa2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbltdIHtcblx0XHRjb25zdCBrZXlWYWwgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KGtleSkudmFsdWU7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChrZXlWYWwpO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhdGlvbkZyb20oc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgeyB0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IGlzS2V5ID0gdHlwZW9mIHR5cGVPcktleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN5bWJvbFwiO1xuXHRcdGNvbnN0IGlzSW5zdGFuY2UgPSB0eXBlb2YgdHlwZU9ySW5zdGFuY2UgPT09IFwib2JqZWN0XCI7XG5cdFx0Y29uc3Qga2V5ID0gbmV3IFJlZ2lzdHJhdGlvbktleSghaXNLZXkgPyB0eXBlT3JLZXkubmFtZSA6IHR5cGVPcktleSk7XG5cdFx0Y29uc3QgdHlwZSA9IGlzSW5zdGFuY2UgPyB0eXBlT3JJbnN0YW5jZSA6IGlzS2V5ID8gdHlwZU9ySW5zdGFuY2UgOiB0eXBlT3JLZXk7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IFNlcnZpY2VSZWdpc3RyYXRpb24oa2V5LCB0eXBlLCBzY29wZSwgaXNJbnN0YW5jZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVnaXN0cmF0aW9ucyhrZXk6IFJlZ2lzdHJhdGlvbktleSkge1xuXHRcdGNvbnN0IHZhbHVlID0ga2V5LnZhbHVlO1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0UmVnaXN0cmF0aW9uKGtleTogUmVnaXN0cmF0aW9uS2V5LCByZWdpc3RyYXRpb25zOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10pIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KGtleS52YWx1ZSwgcmVnaXN0cmF0aW9ucyk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RyYXRpb25zIiwicGFyZW50IiwiTWFwIiwicmVnaXN0ZXJUeXBlIiwic2NvcGUiLCJvcHRpb25zIiwicmVnaXN0cmF0aW9uIiwiY3JlYXRlUmVnaXN0cmF0aW9uRnJvbSIsImV4aXN0aW5nIiwiZ2V0UmVnaXN0cmF0aW9ucyIsImtleSIsImR1cGxpY2F0ZSIsImZpbmQiLCJyZWciLCJpc0VxdWFsIiwib3ZlcnJpZGUiLCJSZWdpc3RyYXRpb25FcnJvciIsInJlbWFpbmluZyIsImZpbHRlciIsInNldFJlZ2lzdHJhdGlvbiIsInJlcGxhY2VUeXBlIiwiZ2V0UmVnaXN0cmF0aW9uIiwia2V5VmFsIiwiUmVnaXN0cmF0aW9uS2V5IiwidmFsdWUiLCJnZXQiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSIsImlzS2V5IiwiaXNJbnN0YW5jZSIsIm5hbWUiLCJ0eXBlIiwiU2VydmljZVJlZ2lzdHJhdGlvbiIsInNldCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFZYUE7OztlQUFBQTs7O3NDQVhtQjswQ0FDSTt3QkFDRjtBQVMzQixNQUFNQTtJQUNLQyxjQUFrRDtJQUNuRSxZQUFtQkMsTUFBd0IsQ0FBRTtRQUM1QyxJQUFJLENBQUNELGFBQWEsR0FBRyxJQUFJRSxJQUFJRCxRQUFRRDtJQUN0QztJQUVPRyxhQUFhQyxLQUFZLEVBQUVDLE9BQTRCLEVBQUU7UUFDL0QsTUFBTUMsZUFBZSxJQUFJLENBQUNDLHNCQUFzQixDQUFDSCxPQUFPQztRQUN4RCxNQUFNRyxXQUFXLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNILGFBQWFJLEdBQUcsS0FBSyxFQUFFO1FBQzlELE1BQU1DLFlBQVlILFNBQVNJLElBQUksQ0FBQyxDQUFDQyxNQUFRQSxJQUFJQyxPQUFPLENBQUNSO1FBQ3JELElBQUlLLGFBQWEsUUFBUSxDQUFDTixRQUFRVSxRQUFRLEVBQUU7WUFDM0MsTUFBTSxJQUFJQyx5QkFBaUIsQ0FDMUIsQ0FBQyx3Q0FBd0MsRUFBRVYsYUFBYUksR0FBRyxDQUFDLDRGQUE0RixDQUFDO1FBRTNKO1FBRUEsTUFBTU8sWUFBWVQsU0FBU1UsTUFBTSxDQUFDLENBQUNMLE1BQVEsQ0FBQ0EsSUFBSUMsT0FBTyxDQUFDUjtRQUN4RCxJQUFJLENBQUNhLGVBQWUsQ0FBQ2IsYUFBYUksR0FBRyxFQUFFO1lBQUNKO2VBQWlCVztTQUFVO1FBQ25FLE9BQU9YO0lBQ1I7SUFFT2MsWUFBWWhCLEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUM5RCxNQUFNQyxlQUFlLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNILE9BQU9DO1FBQ3hELElBQUksQ0FBQ2MsZUFBZSxDQUFDYixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7U0FBYTtRQUNyRCxPQUFPQTtJQUNSO0lBRU9lLGdCQUFnQlgsR0FBb0MsRUFBeUI7UUFDbkYsTUFBTVksU0FBUyxJQUFJQyxxQ0FBZSxDQUFDYixLQUFLYyxLQUFLO1FBQzdDLE1BQU1sQixlQUFlLElBQUksQ0FBQ04sYUFBYSxDQUFDeUIsR0FBRyxDQUFDSDtRQUM1QyxPQUFPaEI7SUFDUjtJQUVRQyx1QkFBdUJILEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUMxRSxNQUFNLEVBQUVxQixTQUFTLEVBQUVDLGNBQWMsRUFBRSxHQUFHdEI7UUFDdEMsTUFBTXVCLFFBQVEsT0FBT0YsY0FBYyxZQUFZLE9BQU9BLGNBQWM7UUFDcEUsTUFBTUcsYUFBYSxPQUFPRixtQkFBbUI7UUFDN0MsTUFBTWpCLE1BQU0sSUFBSWEscUNBQWUsQ0FBQyxDQUFDSyxRQUFRRixVQUFVSSxJQUFJLEdBQUdKO1FBQzFELE1BQU1LLE9BQU9GLGFBQWFGLGlCQUFpQkMsUUFBUUQsaUJBQWlCRDtRQUNwRSxNQUFNcEIsZUFBZSxJQUFJMEIsNkNBQW1CLENBQUN0QixLQUFLcUIsTUFBTTNCLE9BQU95QjtRQUMvRCxPQUFPdkI7SUFDUjtJQUVRRyxpQkFBaUJDLEdBQW9CLEVBQUU7UUFDOUMsTUFBTWMsUUFBUWQsSUFBSWMsS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQ3hCLGFBQWEsQ0FBQ3lCLEdBQUcsQ0FBQ0Q7SUFDL0I7SUFFUUwsZ0JBQWdCVCxHQUFvQixFQUFFVixhQUFvQyxFQUFFO1FBQ25GLElBQUksQ0FBQ0EsYUFBYSxDQUFDaUMsR0FBRyxDQUFDdkIsSUFBSWMsS0FBSyxFQUFFeEI7SUFDbkM7QUFDRCJ9
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNjb3BlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyVHlwZU9wdGlvbnMgPSB7XG5cdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0dHlwZU9ySW5zdGFuY2U/OiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlIHwgb2JqZWN0O1xufTtcblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VSZWdpc3RyeSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cmF0aW9uczogTWFwPHN0cmluZywgU2VydmljZVJlZ2lzdHJhdGlvbltdPjtcblx0cHVibGljIGNvbnN0cnVjdG9yKHBhcmVudD86IFNlcnZpY2VSZWdpc3RyeSkge1xuXHRcdHRoaXMucmVnaXN0cmF0aW9ucyA9IG5ldyBNYXAocGFyZW50Py5yZWdpc3RyYXRpb25zKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHRjb25zdCBleGlzdGluZ1JlZ2lzdHJhdGlvbiA9XG5cdFx0XHR0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSk/LmZpbHRlcigocmVnKSA9PiAhcmVnLmlzRXF1YWwocmVnaXN0cmF0aW9uKSkgPz9cblx0XHRcdFtdO1xuXG5cdFx0dGhpcy5zZXRSZWdpc3RyYXRpb24ocmVnaXN0cmF0aW9uLmtleSwgW3JlZ2lzdHJhdGlvbiwgLi4uZXhpc3RpbmdSZWdpc3RyYXRpb25dKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIGdldFJlZ2lzdHJhdGlvbihrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGtleVZhbCA9IG5ldyBSZWdpc3RyYXRpb25LZXkoa2V5KS52YWx1ZTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGtleVZhbCk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZTogU2NvcGUsIG9wdGlvbnM6IFJlZ2lzdGVyVHlwZU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UgfSA9IG9wdGlvbnM7XG5cdFx0Y29uc3QgaXNLZXkgPSB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB0eXBlT3JLZXkgPT09IFwic3ltYm9sXCI7XG5cdFx0Y29uc3QgaXNJbnN0YW5jZSA9IHR5cGVvZiB0eXBlT3JJbnN0YW5jZSA9PT0gXCJvYmplY3RcIjtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KCFpc0tleSA/IHR5cGVPcktleS5uYW1lIDogdHlwZU9yS2V5KTtcblx0XHRjb25zdCB0eXBlID0gaXNJbnN0YW5jZSA/IHR5cGVPckluc3RhbmNlIDogaXNLZXkgPyB0eXBlT3JJbnN0YW5jZSA6IHR5cGVPcktleTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSBuZXcgU2VydmljZVJlZ2lzdHJhdGlvbihrZXksIHR5cGUsIHNjb3BlLCBpc0luc3RhbmNlKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25zKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrZXkudmFsdWU7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0cmF0aW9ucy5nZXQodmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRSZWdpc3RyYXRpb24oa2V5OiBSZWdpc3RyYXRpb25LZXksIHJlZ2lzdHJhdGlvbnM6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSkge1xuXHRcdHRoaXMucmVnaXN0cmF0aW9ucy5zZXQoa2V5LnZhbHVlLCByZWdpc3RyYXRpb25zKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNlcnZpY2VSZWdpc3RyeSIsInJlZ2lzdHJhdGlvbnMiLCJwYXJlbnQiLCJNYXAiLCJyZWdpc3RlclR5cGUiLCJzY29wZSIsIm9wdGlvbnMiLCJyZWdpc3RyYXRpb24iLCJjcmVhdGVSZWdpc3RyYXRpb25Gcm9tIiwiZXhpc3RpbmdSZWdpc3RyYXRpb24iLCJnZXRSZWdpc3RyYXRpb25zIiwia2V5IiwiZmlsdGVyIiwicmVnIiwiaXNFcXVhbCIsInNldFJlZ2lzdHJhdGlvbiIsImdldFJlZ2lzdHJhdGlvbiIsImtleVZhbCIsIlJlZ2lzdHJhdGlvbktleSIsInZhbHVlIiwiZ2V0IiwidHlwZU9yS2V5IiwidHlwZU9ySW5zdGFuY2UiLCJpc0tleSIsImlzSW5zdGFuY2UiLCJuYW1lIiwidHlwZSIsIlNlcnZpY2VSZWdpc3RyYXRpb24iLCJzZXQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBVWFBOzs7ZUFBQUE7OztzQ0FUbUI7MENBQ0k7QUFRN0IsTUFBTUE7SUFDS0MsY0FBa0Q7SUFDbkUsWUFBbUJDLE1BQXdCLENBQUU7UUFDNUMsSUFBSSxDQUFDRCxhQUFhLEdBQUcsSUFBSUUsSUFBSUQsUUFBUUQ7SUFDdEM7SUFFT0csYUFBYUMsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQy9ELE1BQU1DLGVBQWUsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0gsT0FBT0M7UUFDeEQsTUFBTUcsdUJBQ0wsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ0gsYUFBYUksR0FBRyxHQUFHQyxPQUFPLENBQUNDLE1BQVEsQ0FBQ0EsSUFBSUMsT0FBTyxDQUFDUCxrQkFDdEUsRUFBRTtRQUVILElBQUksQ0FBQ1EsZUFBZSxDQUFDUixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7ZUFBaUJFO1NBQXFCO1FBQzlFLE9BQU9GO0lBQ1I7SUFFT1MsZ0JBQWdCTCxHQUFvQyxFQUF5QjtRQUNuRixNQUFNTSxTQUFTLElBQUlDLHFDQUFlLENBQUNQLEtBQUtRLEtBQUs7UUFDN0MsTUFBTVosZUFBZSxJQUFJLENBQUNOLGFBQWEsQ0FBQ21CLEdBQUcsQ0FBQ0g7UUFDNUMsT0FBT1Y7SUFDUjtJQUVRQyx1QkFBdUJILEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUMxRSxNQUFNLEVBQUVlLFNBQVMsRUFBRUMsY0FBYyxFQUFFLEdBQUdoQjtRQUN0QyxNQUFNaUIsUUFBUSxPQUFPRixjQUFjLFlBQVksT0FBT0EsY0FBYztRQUNwRSxNQUFNRyxhQUFhLE9BQU9GLG1CQUFtQjtRQUM3QyxNQUFNWCxNQUFNLElBQUlPLHFDQUFlLENBQUMsQ0FBQ0ssUUFBUUYsVUFBVUksSUFBSSxHQUFHSjtRQUMxRCxNQUFNSyxPQUFPRixhQUFhRixpQkFBaUJDLFFBQVFELGlCQUFpQkQ7UUFDcEUsTUFBTWQsZUFBZSxJQUFJb0IsNkNBQW1CLENBQUNoQixLQUFLZSxNQUFNckIsT0FBT21CO1FBQy9ELE9BQU9qQjtJQUNSO0lBRVFHLGlCQUFpQkMsR0FBb0IsRUFBRTtRQUM5QyxNQUFNUSxRQUFRUixJQUFJUSxLQUFLO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDbEIsYUFBYSxDQUFDbUIsR0FBRyxDQUFDRDtJQUMvQjtJQUVRSixnQkFBZ0JKLEdBQW9CLEVBQUVWLGFBQW9DLEVBQUU7UUFDbkYsSUFBSSxDQUFDQSxhQUFhLENBQUMyQixHQUFHLENBQUNqQixJQUFJUSxLQUFLLEVBQUVsQjtJQUNuQztBQUNEIn0=
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- _export_star(require("./errors.js"), exports);
6
5
  _export_star(require("./types.js"), exports);
7
6
  function _export_star(from, to) {
8
7
  Object.keys(from).forEach(function(k) {
@@ -18,4 +17,4 @@ function _export_star(from, to) {
18
17
  return from;
19
18
  }
20
19
 
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQSJ9
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWMifQ==
@@ -1,10 +1,6 @@
1
1
  import { defineMeta, getMeta } from "@decohere/nexus/reflection";
2
2
  import { CrucibleMeta } from "../const.js";
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) {
3
+ export function inject(key) {
8
4
  return (target, _propertyKey, idx)=>{
9
5
  const metadata = getExistingMeta(target);
10
6
  metadata.set(idx, {
@@ -18,4 +14,4 @@ function getExistingMeta(target) {
18
14
  return meta;
19
15
  }
20
16
 
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RhYmxlLCBkZWZpbmVNZXRhLCBnZXRNZXRhIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBDcnVjaWJsZU1ldGEgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgSW5qZWN0aW9uTWV0YWRhdGEgPSBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj47XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvblRva2VuID0ge1xuXHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGU7XG59O1xuXG4vKipcbiAqIEJpbmQgYSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gYSByZWdpc3RyYXRpb24ga2V5LlxuICogQSBjbGFzcyB1c2VzIGBDbGFzcy5uYW1lYCAoc2FtZSBrZXkgYXMgYHJlZ2lzdGVyU2luZ2xldG9uKENsYXNzKWApLlxuICogUHJlZmVyIHRoZSBjbGFzcyBvdmVyIGEgbmFtZSBzdHJpbmcuIFVzZSBhIHN5bWJvbCBvciBzdHJpbmcgd2hlbiB0aGUga2V5IGlzIG5vdCB0aGUgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpIHtcblx0cmV0dXJuICh0YXJnZXQ6IG9iamVjdCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBnZXRFeGlzdGluZ01ldGEodGFyZ2V0KTtcblx0XHRtZXRhZGF0YS5zZXQoaWR4LCB7IGtleSB9KTtcblx0XHRkZWZpbmVNZXRhKENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgbWV0YWRhdGEsIHRhcmdldCk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEV4aXN0aW5nTWV0YSh0YXJnZXQ6IG9iamVjdCkge1xuXHRjb25zdCBtZXRhID1cblx0XHRnZXRNZXRhPE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPj4oQ3J1Y2libGVNZXRhLmluamVjdHRva2VuLCB0YXJnZXQpID8/XG5cdFx0bmV3IE1hcDxudW1iZXIsIEluamVjdGlvblRva2VuPigpO1xuXHRyZXR1cm4gbWV0YTtcbn1cbiJdLCJuYW1lcyI6WyJkZWZpbmVNZXRhIiwiZ2V0TWV0YSIsIkNydWNpYmxlTWV0YSIsImluamVjdCIsImtleSIsInRhcmdldCIsIl9wcm9wZXJ0eUtleSIsImlkeCIsIm1ldGFkYXRhIiwiZ2V0RXhpc3RpbmdNZXRhIiwic2V0IiwiaW5qZWN0dG9rZW4iLCJtZXRhIiwiTWFwIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUE2QkEsVUFBVSxFQUFFQyxPQUFPLFFBQVEsNkJBQTZCO0FBQ3JGLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBUTNDOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNDLE9BQU9DLEdBQW9DO0lBQzFELE9BQU8sQ0FBQ0MsUUFBZ0JDLGNBQTJDQztRQUNsRSxNQUFNQyxXQUFXQyxnQkFBZ0JKO1FBQ2pDRyxTQUFTRSxHQUFHLENBQUNILEtBQUs7WUFBRUg7UUFBSTtRQUN4QkosV0FBV0UsYUFBYVMsV0FBVyxFQUFFSCxVQUFVSDtJQUNoRDtBQUNEO0FBRUEsU0FBU0ksZ0JBQWdCSixNQUFjO0lBQ3RDLE1BQU1PLE9BQ0xYLFFBQXFDQyxhQUFhUyxXQUFXLEVBQUVOLFdBQy9ELElBQUlRO0lBQ0wsT0FBT0Q7QUFDUiJ9
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lTWV0YSwgZ2V0TWV0YSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhIH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvbk1ldGFkYXRhID0gTWFwPG51bWJlciwgSW5qZWN0aW9uVG9rZW4+O1xuXG5leHBvcnQgdHlwZSBJbmplY3Rpb25Ub2tlbiA9IHtcblx0a2V5OiBzdHJpbmcgfCBzeW1ib2w7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG5cdHJldHVybiAodGFyZ2V0OiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZ2V0RXhpc3RpbmdNZXRhKHRhcmdldCk7XG5cdFx0bWV0YWRhdGEuc2V0KGlkeCwgeyBrZXkgfSk7XG5cdFx0ZGVmaW5lTWV0YShDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIG1ldGFkYXRhLCB0YXJnZXQpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRFeGlzdGluZ01ldGEodGFyZ2V0OiBvYmplY3QpIHtcblx0Y29uc3QgbWV0YSA9XG5cdFx0Z2V0TWV0YTxNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdGFyZ2V0KSA/P1xuXHRcdG5ldyBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4oKTtcblx0cmV0dXJuIG1ldGE7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lTWV0YSIsImdldE1ldGEiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3QiLCJrZXkiLCJ0YXJnZXQiLCJfcHJvcGVydHlLZXkiLCJpZHgiLCJtZXRhZGF0YSIsImdldEV4aXN0aW5nTWV0YSIsInNldCIsImluamVjdHRva2VuIiwibWV0YSIsIk1hcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxPQUFPLFFBQVEsNkJBQTZCO0FBQ2pFLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBUTNDLE9BQU8sU0FBU0MsT0FBT0MsR0FBb0I7SUFDMUMsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCSixXQUFXRSxhQUFhUyxXQUFXLEVBQUVILFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTU8sT0FDTFgsUUFBcUNDLGFBQWFTLFdBQVcsRUFBRU4sV0FDL0QsSUFBSVE7SUFDTCxPQUFPRDtBQUNSIn0=
@@ -6,54 +6,53 @@ 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
- }
12
9
  registerType(type, scope = Scopes.transient) {
13
- return this.register(false)(scope)(type.name, type);
10
+ const registration = this.serviceRegistry.registerType(scope, {
11
+ typeOrKey: type.name,
12
+ typeOrInstance: type
13
+ });
14
+ return registration;
14
15
  }
15
16
  registerTypes(scopeOrType, ...types) {
16
- return this.registerMany(false, scopeOrType, types);
17
+ const registrations = Array.of();
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;
17
29
  }
18
30
  registerTransient(typeOrKey, type) {
19
- return this.register(false)(Scopes.transient)(typeOrKey, type);
31
+ const registration = this.serviceRegistry.registerType(Scopes.transient, {
32
+ typeOrKey,
33
+ typeOrInstance: type
34
+ });
35
+ return registration;
20
36
  }
21
37
  registerSingleton(typeOrKey, typeOrInstance) {
22
- return this.register(false)(Scopes.singleton)(typeOrKey, typeOrInstance);
38
+ const registration = this.serviceRegistry.registerType(Scopes.singleton, {
39
+ typeOrKey,
40
+ typeOrInstance
41
+ });
42
+ return registration;
23
43
  }
24
44
  registerRequestScoped(typeOrKey, type) {
25
- return this.register(false)(Scopes.request)(typeOrKey, type);
45
+ const registration = this.serviceRegistry.registerType(Scopes.request, {
46
+ typeOrKey,
47
+ typeOrInstance: type
48
+ });
49
+ return registration;
26
50
  }
27
51
  build() {
28
52
  return new Crucible({
29
53
  serviceRegistry: this.serviceRegistry
30
54
  });
31
55
  }
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
- }
57
56
  }
58
57
 
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgQ29udGFpbmVyUmVnaXN0cmFyLCBTY29wZSB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQ3J1Y2libGUgfSBmcm9tIFwiLi9jcnVjaWJsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RlclR5cGVPcHRpb25zIH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENvbnRhaW5lckJ1aWxkZXJPcHRpb25zID0ge1xuXHRzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeTtcbn07XG5cbnR5cGUgUmVnaXN0ZXJGbiA9IChcblx0dHlwZU9yS2V5OiBSZWdpc3RlclR5cGVPcHRpb25zW1widHlwZU9yS2V5XCJdLFxuXHR0eXBlT3JJbnN0YW5jZT86IFJlZ2lzdGVyVHlwZU9wdGlvbnNbXCJ0eXBlT3JJbnN0YW5jZVwiXSxcbikgPT4gU2VydmljZVJlZ2lzdHJhdGlvbjtcblxuZXhwb3J0IGNsYXNzIENydWNpYmxlQnVpbGRlciBpbXBsZW1lbnRzIENvbnRhaW5lckJ1aWxkZXIge1xuXHRwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5O1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbnRhaW5lckJ1aWxkZXJPcHRpb25zKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBvcHRpb25zPy5zZXJ2aWNlUmVnaXN0cnkgPz8gbmV3IFNlcnZpY2VSZWdpc3RyeSgpO1xuXHR9XG5cblx0cHVibGljIGdldCBvdmVycmlkZSgpOiBDb250YWluZXJSZWdpc3RyYXIge1xuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVJlZ2lzdHJhcih0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ29uc3RydWN0YWJsZSwgc2NvcGU6IFNjb3BlID0gU2NvcGVzLnRyYW5zaWVudCkge1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyKGZhbHNlKShzY29wZSkodHlwZS5uYW1lLCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNYW55KGZhbHNlLCBzY29wZU9yVHlwZSwgdHlwZXMpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KFxuXHRcdGtleTogc3RyaW5nIHwgc3ltYm9sLFxuXHRcdHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyVHJhbnNpZW50KHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSwgdHlwZT86IENvbnN0cnVjdGFibGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWdpc3RlcihmYWxzZSkoU2NvcGVzLnRyYW5zaWVudCkodHlwZU9yS2V5LCB0eXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdFx0aW5zdGFuY2U6IG9iamVjdCxcblx0KTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKGtleTogc3RyaW5nIHwgc3ltYm9sLCB0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlLFxuXHRcdHR5cGVPckluc3RhbmNlPzogQ29uc3RydWN0YWJsZSB8IG9iamVjdCxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5zaW5nbGV0b24pKHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXIoZmFsc2UpKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXIgPVxuXHRcdChvdmVycmlkZTogYm9vbGVhbikgPT5cblx0XHQoc2NvcGU6IFNjb3BlKTogUmVnaXN0ZXJGbiA9PlxuXHRcdCh0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlKSA9PlxuXHRcdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKHNjb3BlLCB7XG5cdFx0XHRcdHR5cGVPcktleSxcblx0XHRcdFx0dHlwZU9ySW5zdGFuY2UsXG5cdFx0XHRcdG92ZXJyaWRlLFxuXHRcdFx0fSk7XG5cblx0cHJpdmF0ZSByZWdpc3Rlck1hbnkoXG5cdFx0b3ZlcnJpZGU6IGJvb2xlYW4sXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlczogQ29uc3RydWN0YWJsZVtdLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGJpbmQgPSB0aGlzLnJlZ2lzdGVyKG92ZXJyaWRlKTtcblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0cmV0dXJuIGFsbFR5cGVzLm1hcCgodHlwZSkgPT4gYmluZChzY29wZSkodHlwZS5uYW1lLCB0eXBlKSk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhcihvdmVycmlkZTogYm9vbGVhbik6IENvbnRhaW5lclJlZ2lzdHJhciB7XG5cdFx0Y29uc3QgYmluZCA9IHRoaXMucmVnaXN0ZXIob3ZlcnJpZGUpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZWdpc3RlclR5cGU6ICh0eXBlLCBzY29wZSA9IFNjb3Blcy50cmFuc2llbnQpID0+IGJpbmQoc2NvcGUpKHR5cGUubmFtZSwgdHlwZSksXG5cdFx0XHRyZWdpc3RlclR5cGVzOiAoKHNjb3BlT3JUeXBlLCAuLi50eXBlcykgPT5cblx0XHRcdFx0dGhpcy5yZWdpc3Rlck1hbnkoXG5cdFx0XHRcdFx0b3ZlcnJpZGUsXG5cdFx0XHRcdFx0c2NvcGVPclR5cGUsXG5cdFx0XHRcdFx0dHlwZXMsXG5cdFx0XHRcdCkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHlwZXNcIl0sXG5cdFx0XHRyZWdpc3RlclRyYW5zaWVudDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy50cmFuc2llbnQpKHR5cGVPcktleSwgdHlwZSkpIGFzIENvbnRhaW5lclJlZ2lzdHJhcltcInJlZ2lzdGVyVHJhbnNpZW50XCJdLFxuXHRcdFx0cmVnaXN0ZXJTaW5nbGV0b246ICgodHlwZU9yS2V5LCB0eXBlT3JJbnN0YW5jZT8pID0+XG5cdFx0XHRcdGJpbmQoU2NvcGVzLnNpbmdsZXRvbikoXG5cdFx0XHRcdFx0dHlwZU9yS2V5LFxuXHRcdFx0XHRcdHR5cGVPckluc3RhbmNlLFxuXHRcdFx0XHQpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclNpbmdsZXRvblwiXSxcblx0XHRcdHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDogKCh0eXBlT3JLZXksIHR5cGU/KSA9PlxuXHRcdFx0XHRiaW5kKFNjb3Blcy5yZXF1ZXN0KSh0eXBlT3JLZXksIHR5cGUpKSBhcyBDb250YWluZXJSZWdpc3RyYXJbXCJyZWdpc3RlclJlcXVlc3RTY29wZWRcIl0sXG5cdFx0fTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNjb3BlcyIsIkNydWNpYmxlIiwiU2VydmljZVJlZ2lzdHJ5IiwiQ3J1Y2libGVCdWlsZGVyIiwic2VydmljZVJlZ2lzdHJ5Iiwib3B0aW9ucyIsIm92ZXJyaWRlIiwiY3JlYXRlUmVnaXN0cmFyIiwicmVnaXN0ZXJUeXBlIiwidHlwZSIsInNjb3BlIiwidHJhbnNpZW50IiwicmVnaXN0ZXIiLCJuYW1lIiwicmVnaXN0ZXJUeXBlcyIsInNjb3BlT3JUeXBlIiwidHlwZXMiLCJyZWdpc3Rlck1hbnkiLCJyZWdpc3RlclRyYW5zaWVudCIsInR5cGVPcktleSIsInJlZ2lzdGVyU2luZ2xldG9uIiwidHlwZU9ySW5zdGFuY2UiLCJzaW5nbGV0b24iLCJyZWdpc3RlclJlcXVlc3RTY29wZWQiLCJyZXF1ZXN0IiwiYnVpbGQiLCJiaW5kIiwiaXNTY29wZSIsImFsbFR5cGVzIiwibWFwIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxNQUFNLFFBQVEsY0FBYztBQUdyQyxTQUFTQyxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLFNBQVNDLGVBQWUsUUFBUSx3QkFBd0I7QUFXeEQsT0FBTyxNQUFNQztJQUNKQyxnQkFBaUM7SUFDekMsWUFBbUJDLE9BQWlDLENBQUU7UUFDckQs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
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBTY29wZXMgfSBmcm9tIFwiLi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvc2VydmljZS1yZWdpc3RyYXRpb24ubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyQnVpbGRlciwgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcbmltcG9ydCB7IENydWNpYmxlIH0gZnJvbSBcIi4vY3J1Y2libGUuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyeSB9IGZyb20gXCIuL3NlcnZpY2UtcmVnaXN0cnkuanNcIjtcblxudHlwZSBDb250YWluZXJCdWlsZGVyT3B0aW9ucyA9IHtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGVCdWlsZGVyIGltcGxlbWVudHMgQ29udGFpbmVyQnVpbGRlciB7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29udGFpbmVyQnVpbGRlck9wdGlvbnMpIHtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG9wdGlvbnM/LnNlcnZpY2VSZWdpc3RyeSA/PyBuZXcgU2VydmljZVJlZ2lzdHJ5KCk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHR5cGU6IENvbnN0cnVjdGFibGUsIHNjb3BlOiBTY29wZSA9IFNjb3Blcy50cmFuc2llbnQpIHtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlclR5cGUoc2NvcGUsIHtcblx0XHRcdHR5cGVPcktleTogdHlwZS5uYW1lLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHR5cGUsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKC4uLnR5cGVzOiBDb25zdHJ1Y3RhYmxlW10pOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW107XG5cdHB1YmxpYyByZWdpc3RlclR5cGVzKHNjb3BlOiBTY29wZSwgLi4udHlwZXM6IENvbnN0cnVjdGFibGVbXSk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXTtcblx0cHVibGljIHJlZ2lzdGVyVHlwZXMoXG5cdFx0c2NvcGVPclR5cGU6IFNjb3BlIHwgQ29uc3RydWN0YWJsZSxcblx0XHQuLi50eXBlczogQ29uc3RydWN0YWJsZVtdXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9ucyA9IEFycmF5Lm9mPFNlcnZpY2VSZWdpc3RyYXRpb24+KCk7XG5cblx0XHRjb25zdCBpc1Njb3BlID0gdHlwZW9mIHNjb3BlT3JUeXBlICE9PSBcImZ1bmN0aW9uXCI7XG5cdFx0Y29uc3Qgc2NvcGUgPSBpc1Njb3BlID8gc2NvcGVPclR5cGUgOiBTY29wZXMudHJhbnNpZW50O1xuXHRcdGNvbnN0IGFsbFR5cGVzID0gaXNTY29wZSA/IHR5cGVzIDogW3Njb3BlT3JUeXBlLCAuLi50eXBlc107XG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIGFsbFR5cGVzKSB7XG5cdFx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdGVyVHlwZSh0eXBlLCBzY29wZSk7XG5cdFx0XHRyZWdpc3RyYXRpb25zLnB1c2gocmVnaXN0cmF0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9ucztcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudChcblx0XHRrZXk6IHN0cmluZyB8IHN5bWJvbCxcblx0XHR0eXBlOiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlLFxuXHQpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJUcmFuc2llbnQodHlwZTogQ29uc3RydWN0YWJsZSk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclRyYW5zaWVudCh0eXBlT3JLZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUsIHR5cGU/OiBDb25zdHJ1Y3RhYmxlKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy50cmFuc2llbnQsIHtcblx0XHRcdHR5cGVPcktleSxcblx0XHRcdHR5cGVPckluc3RhbmNlOiB0eXBlLFxuXHRcdH0pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJTaW5nbGV0b24oXG5cdFx0a2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgb2JqZWN0LFxuXHRcdGluc3RhbmNlOiBvYmplY3QsXG5cdCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogQ29uc3RydWN0YWJsZSk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclNpbmdsZXRvbih0eXBlOiBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyU2luZ2xldG9uKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSxcblx0XHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBvYmplY3QsXG5cdCkge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyVHlwZShTY29wZXMuc2luZ2xldG9uLCB7XG5cdFx0XHR0eXBlT3JLZXksXG5cdFx0XHR0eXBlT3JJbnN0YW5jZSxcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPih0eXBlOiAoKSA9PiBUKTogU2VydmljZVJlZ2lzdHJhdGlvbjtcblx0cHVibGljIHJlZ2lzdGVyUmVxdWVzdFNjb3BlZDxUPihrZXk6IHN0cmluZyB8IHN5bWJvbCwgdHlwZTogKCkgPT4gVCk6IFNlcnZpY2VSZWdpc3RyYXRpb247XG5cdHB1YmxpYyByZWdpc3RlclJlcXVlc3RTY29wZWQoa2V5OiBzdHJpbmcgfCBzeW1ib2wsIHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKHR5cGU6IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uO1xuXHRwdWJsaWMgcmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKFxuXHRcdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0XHR0eXBlPzogQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZSxcblx0KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXJUeXBlKFNjb3Blcy5yZXF1ZXN0LCB7XG5cdFx0XHR0eXBlT3JLZXksXG5cdFx0XHR0eXBlT3JJbnN0YW5jZTogdHlwZSxcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IENydWNpYmxlIHtcblx0XHRyZXR1cm4gbmV3IENydWNpYmxlKHsgc2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSB9KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNjb3BlcyIsIkNydWNpYmxlIiwiU2VydmljZVJlZ2lzdHJ5IiwiQ3J1Y2libGVCdWlsZGVyIiwic2VydmljZVJlZ2lzdHJ5Iiwib3B0aW9ucyIsInJlZ2lzdGVyVHlwZSIsInR5cGUiLCJzY29wZSIsInRyYW5zaWVudCIsInJlZ2lzdHJhdGlvbiIsInR5cGVPcktleSIsIm5hbWUiLCJ0eXBlT3JJbnN0YW5jZSIsInJlZ2lzdGVyVHlwZXMiLCJzY29wZU9yVHlwZSIsInR5cGVzIiwicmVnaXN0cmF0aW9ucyIsIkFycmF5Iiwib2YiLCJpc1Njb3BlIiwiYWxsVHlwZXMiLCJwdXNoIiwicmVnaXN0ZXJUcmFuc2llbnQiLCJyZWdpc3RlclNpbmdsZXRvbiIsInNpbmdsZXRvbiIsInJlZ2lzdGVyUmVxdWVzdFNjb3BlZCIsInJlcXVlc3QiLCJidWlsZCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsTUFBTSxRQUFRLGNBQWM7QUFHckMsU0FBU0MsUUFBUSxRQUFRLGdCQUFnQjtBQUN6QyxTQUFTQyxlQUFlLFFBQVEsd0JBQXdCO0FBTXhELE9BQU8sTUFBTUM7SUFDSkMsZ0JBQWlDO0lBQ3pDLFlBQW1CQyxPQUFpQyxDQUFFO1FBQ3JELElBQUksQ0FBQ0QsZUFBZSxHQUFHQyxTQUFTRCxtQkFBbUIsSUFBSUY7SUFDeEQ7SUFFT0ksYUFBYUMsSUFBbUIsRUFBRUMsUUFBZVIsT0FBT1MsU0FBUyxFQUFFO1FBQ3pFLE1BQU1DLGVBQWUsSUFBSSxDQUFDTixlQUFlLENBQUNFLFlBQVksQ0FBQ0UsT0FBTztZQUM3REcsV0FBV0osS0FBS0ssSUFBSTtZQUNwQkMsZ0JBQWdCTjtRQUNqQjtRQUNBLE9BQU9HO0lBQ1I7SUFJT0ksY0FDTkMsV0FBa0MsRUFDbEMsR0FBR0MsS0FBc0IsRUFDRDtRQUN4QixNQUFNQyxnQkFBZ0JDLE1BQU1DLEVBQUU7UUFFOUIsTUFBTUMsVUFBVSxPQUFPTCxnQkFBZ0I7UUFDdkMsTUFBTVAsUUFBUVksVUFBVUwsY0FBY2YsT0FBT1MsU0FBUztRQUN0RCxNQUFNWSxXQUFXRCxVQUFVSixRQUFRO1lBQUNEO2VBQWdCQztTQUFNO1FBQzFELEtBQUssTUFBTVQsUUFBUWMsU0FBVTtZQUM1QixNQUFNWCxlQUFlLElBQUksQ0FBQ0osWUFBWSxDQUFDQyxNQUFNQztZQUM3Q1MsY0FBY0ssSUFBSSxDQUFDWjtRQUNwQjtRQUVBLE9BQU9PO0lBQ1I7SUFPT00sa0JBQWtCWixTQUEwQyxFQUFFSixJQUFvQixFQUFFO1FBQzFGLE1BQU1HLGVBQWUsSUFBSSxDQUFDTixlQUFlLENBQUNFLFlBQVksQ0FBQ04sT0FBT1MsU0FBUyxFQUFFO1lBQ3hFRTtZQUNBRSxnQkFBZ0JOO1FBQ2pCO1FBQ0EsT0FBT0c7SUFDUjtJQVFPYyxrQkFDTmIsU0FBMEMsRUFDMUNFLGNBQXVDLEVBQ3RDO1FBQ0QsTUFBTUgsZUFBZSxJQUFJLENBQUNOLGVBQWUsQ0FBQ0UsWUFBWSxDQUFDTixPQUFPeUIsU0FBUyxFQUFFO1lBQ3hFZDtZQUNBRTtRQUNEO1FBQ0EsT0FBT0g7SUFDUjtJQU1PZ0Isc0JBQ05mLFNBQXlELEVBQ3pESixJQUFtQyxFQUNsQztRQUNELE1BQU1HLGVBQWUsSUFBSSxDQUFDTixlQUFlLENBQUNFLFlBQVksQ0FBQ04sT0FBTzJCLE9BQU8sRUFBRTtZQUN0RWhCO1lBQ0FFLGdCQUFnQk47UUFDakI7UUFDQSxPQUFPRztJQUNSO0lBRU9rQixRQUFrQjtRQUN4QixPQUFPLElBQUkzQixTQUFTO1lBQUVHLGlCQUFpQixJQUFJLENBQUNBLGVBQWU7UUFBQztJQUM3RDtBQUNEIn0=
@@ -8,7 +8,6 @@ export class Crucible {
8
8
  key;
9
9
  instances = new Map();
10
10
  serviceRegistry;
11
- parent;
12
11
  rootScope;
13
12
  scopes = new Map();
14
13
  logger = scribe.logger(Crucible.name);
@@ -17,8 +16,7 @@ export class Crucible {
17
16
  this.key = options?.key;
18
17
  this.serviceRegistry = new ServiceRegistry(options?.serviceRegistry);
19
18
  this.registerLifetimeScope();
20
- this.parent = options?.parent;
21
- this.rootScope = options?.parent?.rootScope ?? this;
19
+ this.rootScope = options?.rootScope ?? this;
22
20
  }
23
21
  resolveMany(resolveRequest) {
24
22
  const key = new RegistrationKey(resolveRequest);
@@ -44,41 +42,28 @@ export class Crucible {
44
42
  return service;
45
43
  }
46
44
  beginScope(name) {
47
- if (this.isDisposed) {
48
- throw new Error("This container has been disposed");
49
- }
50
- if (name != null && this.scopes.has(name)) {
45
+ if (this.scopes.has(name)) {
51
46
  throw new DuplicateScopeError(`Cannot create duplicate scope. Scope with ${name} is already created and has not been disposed.`);
52
47
  }
53
48
  const scope = new Crucible({
54
49
  key: name,
55
50
  serviceRegistry: this.serviceRegistry,
56
- parent: this
51
+ rootScope: this
57
52
  });
58
- if (name != null) {
59
- this.scopes.set(name, scope);
60
- }
53
+ this.scopes.set(name, scope);
61
54
  return scope;
62
55
  }
63
56
  [Symbol.dispose]() {
64
57
  if (this.isDisposed) {
65
58
  return;
66
59
  }
67
- this.disposeSync();
60
+ this.dispose();
68
61
  }
69
- async [Symbol.asyncDispose]() {
70
- if (this.isDisposed) {
71
- return;
72
- }
73
- await this.disposeAsync();
74
- }
75
- disposeSync() {
62
+ dispose() {
76
63
  if (this.isDisposed) {
77
64
  return;
78
65
  }
79
66
  this.isDisposed = true;
80
- this.parent?.releaseScope(this.key);
81
- this.scopes.clear();
82
67
  for (const [, inst] of this.instances){
83
68
  if (inst === this) {
84
69
  continue;
@@ -86,24 +71,6 @@ export class Crucible {
86
71
  inst[Symbol.dispose]?.();
87
72
  }
88
73
  }
89
- async disposeAsync() {
90
- if (this.isDisposed) {
91
- return;
92
- }
93
- this.isDisposed = true;
94
- this.parent?.releaseScope(this.key);
95
- this.scopes.clear();
96
- for (const [, inst] of this.instances){
97
- if (inst === this) {
98
- continue;
99
- }
100
- if (Symbol.asyncDispose in inst) {
101
- await inst[Symbol.asyncDispose]();
102
- } else {
103
- inst[Symbol.dispose]?.();
104
- }
105
- }
106
- }
107
74
  getRegistrationFrom(key) {
108
75
  const registration = this.serviceRegistry.getRegistration(key.value);
109
76
  return registration;
@@ -121,7 +88,7 @@ export class Crucible {
121
88
  }
122
89
  getOrCreateInstance(registration) {
123
90
  if (this.isDisposed) {
124
- throw new Error("This container has been disposed");
91
+ throw new Error("This continer has been disposed");
125
92
  }
126
93
  const { key, type, isInstance } = registration;
127
94
  const cacheKey = isInstance ? key.value : type;
@@ -155,18 +122,12 @@ export class Crucible {
155
122
  }
156
123
  return resolved;
157
124
  }
158
- releaseScope(name) {
159
- if (name == null) {
160
- return;
161
- }
162
- this.scopes.delete(name);
163
- }
164
125
  registerLifetimeScope() {
165
- this.serviceRegistry.replaceType(Scopes.request, {
126
+ this.serviceRegistry.registerType(Scopes.request, {
166
127
  typeOrKey: LifetimeScopeToken,
167
128
  typeOrInstance: this
168
129
  });
169
130
  }
170
131
  }
171
132
 
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRwYXJlbnQ/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcGFyZW50PzogQ3J1Y2libGU7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucz8ucGFyZW50O1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucGFyZW50Py5yb290U2NvcGUgPz8gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlTWFueTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUW10ge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbnMgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KSA/PyBbXTtcblxuXHRcdGNvbnN0IHNlcnZpY2VzID0gQXJyYXkub2Y8VD4oKTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJhdGlvbiBvZiByZWdpc3RyYXRpb25zKSB7XG5cdFx0XHRjb25zdCBzZXJ2aWNlID0gdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VydmljZXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZTxUIGV4dGVuZHMgb2JqZWN0IHwgb2JqZWN0W10+KHJlc29sdmVSZXF1ZXN0OiBSZXNvbHZlUmVxdWVzdDxUPik6IFQge1xuXHRcdGNvbnN0IGtleSA9IG5ldyBSZWdpc3RyYXRpb25LZXkocmVzb2x2ZVJlcXVlc3QpO1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuZ2V0UmVnaXN0cmF0aW9uRnJvbShrZXkpO1xuXHRcdGlmIChyZWdpc3RyYXRpb24gPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sb2dnZXIud2FybihgQ2Fubm90IHJlc29sdmUgZGVwZW5kZW5jeSAke2tleS50b1N0cmluZygpfWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlZ2lzdHJhdGlvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVzb2x2ZUVycm9yKFxuXHRcdFx0XHRgVGhlcmUgYXJlIG11bHRpcGxlIHNlcnZpY2VzIHJlZ2lzdGVyZWQgd2l0aCBrZXkgJHtrZXkudG9TdHJpbmcoKX0uIFVzZSByZXNvbHZlTWFueSB0byByZXNvbHZlIGFsbCBpbXBsZW1lbnRhdGlvbnMuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb25bMF0pO1xuXHRcdHJldHVybiBzZXJ2aWNlO1xuXHR9XG5cblx0cHVibGljIGJlZ2luU2NvcGUobmFtZT86IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGFpbmVyIGhhcyBiZWVuIGRpc3Bvc2VkXCIpO1xuXHRcdH1cblx0XHRpZiAobmFtZSAhPSBudWxsICYmIHRoaXMuc2NvcGVzLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IER1cGxpY2F0ZVNjb3BlRXJyb3IoXG5cdFx0XHRcdGBDYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBzY29wZS4gU2NvcGUgd2l0aCAke25hbWV9IGlzIGFscmVhZHkgY3JlYXRlZCBhbmQgaGFzIG5vdCBiZWVuIGRpc3Bvc2VkLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjb3BlID0gbmV3IENydWNpYmxlKHtcblx0XHRcdGtleTogbmFtZSxcblx0XHRcdHNlcnZpY2VSZWdpc3RyeTogdGhpcy5zZXJ2aWNlUmVnaXN0cnksXG5cdFx0XHRwYXJlbnQ6IHRoaXMsXG5cdFx0fSk7XG5cblx0XHRpZiAobmFtZSAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNjb3Blcy5zZXQobmFtZSwgc2NvcGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2NvcGU7XG5cdH1cblxuXHRwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZVN5bmMoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VBc3luYygpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNwb3NlU3luYygpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnBhcmVudD8ucmVsZWFzZVNjb3BlKHRoaXMua2V5KTtcblx0XHR0aGlzLnNjb3Blcy5jbGVhcigpO1xuXHRcdGZvciAoY29uc3QgWywgaW5zdF0gb2YgdGhpcy5pbnN0YW5jZXMpIHtcblx0XHRcdGlmIChpbnN0ID09PSB0aGlzKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aW5zdFtTeW1ib2wuZGlzcG9zZV0/LigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUFzeW5jKCkge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucGFyZW50Py5yZWxlYXNlU2NvcGUodGhpcy5rZXkpO1xuXHRcdHRoaXMuc2NvcGVzLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBbLCBpbnN0XSBvZiB0aGlzLmluc3RhbmNlcykge1xuXHRcdFx0aWYgKGluc3QgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoU3ltYm9sLmFzeW5jRGlzcG9zZSBpbiBpbnN0KSB7XG5cdFx0XHRcdGF3YWl0IChpbnN0IGFzIEFzeW5jRGlzcG9zYWJsZSlbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChpbnN0IGFzIFBhcnRpYWw8RGlzcG9zYWJsZT4pW1N5bWJvbC5kaXNwb3NlXT8uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25Gcm9tKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0UmVnaXN0cmF0aW9uKGtleS52YWx1ZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlZ2lzdHJhdGlvbjxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB7IHNjb3BlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0c3dpdGNoIChzY29wZSkge1xuXHRcdFx0Y2FzZSBTY29wZXMudHJhbnNpZW50OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMuc2luZ2xldG9uOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yb290U2NvcGUuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdFx0Y2FzZSBTY29wZXMucmVxdWVzdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShyZWdpc3RyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRhaW5lciBoYXMgYmVlbiBkaXNwb3NlZFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgeyBrZXksIHR5cGUsIGlzSW5zdGFuY2UgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRjb25zdCBjYWNoZUtleSA9IGlzSW5zdGFuY2UgPyBrZXkudmFsdWUgOiB0eXBlO1xuXHRcdGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQoY2FjaGVLZXkpO1xuXHRcdGlmIChleGlzdGluZ0luc3RhbmNlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBleGlzdGluZ0luc3RhbmNlIGFzIFQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBpc0luc3RhbmNlID8gKHR5cGUgYXMgVCkgOiB0aGlzLmNyZWF0ZUluc3RhbmNlPFQ+KHJlZ2lzdHJhdGlvbik7XG5cdFx0dGhpcy5pbnN0YW5jZXMuc2V0KGNhY2hlS2V5LCBpbnN0YW5jZSk7XG5cdFx0cmV0dXJuIGluc3RhbmNlO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihyZWdpc3RyYXRpb246IFNlcnZpY2VSZWdpc3RyYXRpb24pOiBUIHtcblx0XHRjb25zdCB0eXBlID0gcmVnaXN0cmF0aW9uLnR5cGUgYXMgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0XHRjb25zdCBjYW5Db25zdHJ1Y3QgPSBpc0NvbnN0cnVjdGFibGUodHlwZSk7XG5cdFx0Y29uc3QgZGVwcyA9IHRoaXMucmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlKTtcblx0XHRjb25zdCBpbnN0ID0gKGNhbkNvbnN0cnVjdCA/IG5ldyB0eXBlKC4uLmRlcHMpIDogdHlwZSgpKSBhcyBUO1xuXHRcdHJldHVybiBpbnN0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHR5cGU6IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IHBhcmFtcyA9IGdldE1ldGE8QXJyYXk8Q29uc3RydWN0YWJsZT4+KFJlZmxlY3Rpb25NZXRhLnBhcmFtdHlwZXMsIHR5cGUpID8/IFtdO1xuXG5cdFx0Y29uc3QgaW5qZWN0VG9rZW5zID1cblx0XHRcdGdldE1ldGE8SW5qZWN0aW9uTWV0YWRhdGE+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdHlwZSkgPz8gbmV3IE1hcCgpO1xuXG5cdFx0Ly9UT0RPOiBwdXQgYSB0cnkgY2F0Y2ggaGVyZSBzbyB3ZSBjYW4gdGhyb3cgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2Vcblx0XHRsZXQgcmVzb2x2ZWQgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSBpbmplY3RUb2tlbnMuZ2V0KGkpPy5rZXkgPz8gcGFyYW1zW2ldLm5hbWU7XG5cdFx0XHRjb25zdCBkZXAgPSBpc0FycmF5VHlwZShwYXJhbXNbaV0pID8gdGhpcy5yZXNvbHZlTWFueSh0b2tlbikgOiB0aGlzLnJlc29sdmUodG9rZW4pO1xuXHRcdFx0cmVzb2x2ZWQgPSBbLi4ucmVzb2x2ZWQsIGRlcF07XG5cdFx0fVxuXHRcdHJldHVybiByZXNvbHZlZDtcblx0fVxuXG5cdHByaXZhdGUgcmVsZWFzZVNjb3BlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09IG51bGwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zY29wZXMuZGVsZXRlKG5hbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckxpZmV0aW1lU2NvcGUoKSB7XG5cdFx0dGhpcy5zZXJ2aWNlUmVnaXN0cnkucmVwbGFjZVR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRNZXRhIiwiaXNBcnJheVR5cGUiLCJpc0NvbnN0cnVjdGFibGUiLCJSZWZsZWN0aW9uTWV0YSIsInNjcmliZSIsIkNydWNpYmxlTWV0YSIsIkxpZmV0aW1lU2NvcGVUb2tlbiIsIlNjb3BlcyIsIlJlZ2lzdHJhdGlvbktleSIsIkR1cGxpY2F0ZVNjb3BlRXJyb3IiLCJSZXNvbHZlRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInBhcmVudCIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJiZWdpblNjb3BlIiwiRXJyb3IiLCJoYXMiLCJzY29wZSIsInNldCIsIlN5bWJvbCIsImRpc3Bvc2UiLCJkaXNwb3NlU3luYyIsImFzeW5jRGlzcG9zZSIsImRpc3Bvc2VBc3luYyIsInJlbGVhc2VTY29wZSIsImNsZWFyIiwiaW5zdCIsImdldFJlZ2lzdHJhdGlvbiIsInZhbHVlIiwidHJhbnNpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJzaW5nbGV0b24iLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwicmVxdWVzdCIsInR5cGUiLCJpc0luc3RhbmNlIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luc3RhbmNlIiwiZ2V0IiwiaW5zdGFuY2UiLCJjYW5Db25zdHJ1Y3QiLCJkZXBzIiwicmVzb2x2ZURlcGVuZGVuY2llcyIsInBhcmFtcyIsInBhcmFtdHlwZXMiLCJpbmplY3RUb2tlbnMiLCJpbmplY3R0b2tlbiIsInJlc29sdmVkIiwiaSIsInRva2VuIiwiZGVwIiwiZGVsZXRlIiwicmVwbGFjZVR5cGUiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FHQ0EsT0FBTyxFQUNQQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsY0FBYyxRQUNSLDZCQUE2QjtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsbUJBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxzQ0FBc0M7QUFFdEUsU0FBU0MsbUJBQW1CLEVBQUVDLFlBQVksUUFBUSxxQkFBcUI7QUFFdkUsU0FBU0MsZUFBZSxRQUFRLHdCQUF3QjtBQVF4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
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRyb290U2NvcGU/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucm9vdFNjb3BlID8/IHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZU1hbnk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ocmVzb2x2ZVJlcXVlc3Q6IFJlc29sdmVSZXF1ZXN0PFQ+KTogVFtdIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb25zID0gdGhpcy5nZXRSZWdpc3RyYXRpb25Gcm9tKGtleSkgPz8gW107XG5cblx0XHRjb25zdCBzZXJ2aWNlcyA9IEFycmF5Lm9mPFQ+KCk7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xuXHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb24pO1xuXHRcdFx0c2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlcnZpY2VzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmU8VCBleHRlbmRzIG9iamVjdCB8IG9iamVjdFtdPihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KTtcblx0XHRpZiAocmVnaXN0cmF0aW9uID09IG51bGwpIHtcblx0XHRcdHRoaXMubG9nZ2VyLndhcm4oYENhbm5vdCByZXNvbHZlIGRlcGVuZGVuY3kgJHtrZXkudG9TdHJpbmcoKX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWdpc3RyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlc29sdmVFcnJvcihcblx0XHRcdFx0YFRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2aWNlcyByZWdpc3RlcmVkIHdpdGgga2V5ICR7a2V5LnRvU3RyaW5nKCl9LiBVc2UgcmVzb2x2ZU1hbnkgdG8gcmVzb2x2ZSBhbGwgaW1wbGVtZW50YXRpb25zLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aGlzLnJlc29sdmVSZWdpc3RyYXRpb248VD4ocmVnaXN0cmF0aW9uWzBdKTtcblx0XHRyZXR1cm4gc2VydmljZTtcblx0fVxuXG5cdHB1YmxpYyBiZWdpblNjb3BlKG5hbWU/OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5zY29wZXMuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRHVwbGljYXRlU2NvcGVFcnJvcihcblx0XHRcdFx0YENhbm5vdCBjcmVhdGUgZHVwbGljYXRlIHNjb3BlLiBTY29wZSB3aXRoICR7bmFtZX0gaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBoYXMgbm90IGJlZW4gZGlzcG9zZWQuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBuZXcgQ3J1Y2libGUoe1xuXHRcdFx0a2V5OiBuYW1lLFxuXHRcdFx0c2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSxcblx0XHRcdHJvb3RTY29wZTogdGhpcyxcblx0XHR9KTtcblxuXHRcdHRoaXMuc2NvcGVzLnNldChuYW1lLCBzY29wZSk7XG5cdFx0cmV0dXJuIHNjb3BlO1xuXHR9XG5cblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IFssIGluc3RdIG9mIHRoaXMuaW5zdGFuY2VzKSB7XG5cdFx0XHRpZiAoaW5zdCA9PT0gdGhpcykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGluc3RbU3ltYm9sLmRpc3Bvc2VdPy4oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlZ2lzdHJhdGlvbkZyb20oa2V5OiBSZWdpc3RyYXRpb25LZXkpIHtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRSZWdpc3RyYXRpb24oa2V5LnZhbHVlKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVnaXN0cmF0aW9uPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGNvbnN0IHsgc2NvcGUgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0XHRjYXNlIFNjb3Blcy50cmFuc2llbnQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5zaW5nbGV0b246XG5cdFx0XHRcdHJldHVybiB0aGlzLnJvb3RTY29wZS5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5yZXF1ZXN0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRPckNyZWF0ZUluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGluZXIgaGFzIGJlZW4gZGlzcG9zZWRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHsga2V5LCB0eXBlLCBpc0luc3RhbmNlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0Y29uc3QgY2FjaGVLZXkgPSBpc0luc3RhbmNlID8ga2V5LnZhbHVlIDogdHlwZTtcblx0XHRjb25zdCBleGlzdGluZ0luc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KGNhY2hlS2V5KTtcblx0XHRpZiAoZXhpc3RpbmdJbnN0YW5jZSAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZXhpc3RpbmdJbnN0YW5jZSBhcyBUO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlID0gaXNJbnN0YW5jZSA/ICh0eXBlIGFzIFQpIDogdGhpcy5jcmVhdGVJbnN0YW5jZTxUPihyZWdpc3RyYXRpb24pO1xuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChjYWNoZUtleSwgaW5zdGFuY2UpO1xuXHRcdHJldHVybiBpbnN0YW5jZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlSW5zdGFuY2U8VCBleHRlbmRzIG9iamVjdD4ocmVnaXN0cmF0aW9uOiBTZXJ2aWNlUmVnaXN0cmF0aW9uKTogVCB7XG5cdFx0Y29uc3QgdHlwZSA9IHJlZ2lzdHJhdGlvbi50eXBlIGFzIENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGU7XG5cdFx0Y29uc3QgY2FuQ29uc3RydWN0ID0gaXNDb25zdHJ1Y3RhYmxlKHR5cGUpO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLnJlc29sdmVEZXBlbmRlbmNpZXModHlwZSk7XG5cdFx0Y29uc3QgaW5zdCA9IChjYW5Db25zdHJ1Y3QgPyBuZXcgdHlwZSguLi5kZXBzKSA6IHR5cGUoKSkgYXMgVDtcblx0XHRyZXR1cm4gaW5zdDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlOiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlKTogdW5rbm93bltdIHtcblx0XHRjb25zdCBwYXJhbXMgPSBnZXRNZXRhPEFycmF5PENvbnN0cnVjdGFibGU+PihSZWZsZWN0aW9uTWV0YS5wYXJhbXR5cGVzLCB0eXBlKSA/PyBbXTtcblxuXHRcdGNvbnN0IGluamVjdFRva2VucyA9XG5cdFx0XHRnZXRNZXRhPEluamVjdGlvbk1ldGFkYXRhPihDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIHR5cGUpID8/IG5ldyBNYXAoKTtcblxuXHRcdC8vVE9ETzogcHV0IGEgdHJ5IGNhdGNoIGhlcmUgc28gd2UgY2FuIHRocm93IHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG5cdFx0bGV0IHJlc29sdmVkID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHRva2VuID0gaW5qZWN0VG9rZW5zLmdldChpKT8ua2V5ID8/IHBhcmFtc1tpXS5uYW1lO1xuXHRcdFx0Y29uc3QgZGVwID0gaXNBcnJheVR5cGUocGFyYW1zW2ldKSA/IHRoaXMucmVzb2x2ZU1hbnkodG9rZW4pIDogdGhpcy5yZXNvbHZlKHRva2VuKTtcblx0XHRcdHJlc29sdmVkID0gWy4uLnJlc29sdmVkLCBkZXBdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpIHtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlclR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRNZXRhIiwiaXNBcnJheVR5cGUiLCJpc0NvbnN0cnVjdGFibGUiLCJSZWZsZWN0aW9uTWV0YSIsInNjcmliZSIsIkNydWNpYmxlTWV0YSIsIkxpZmV0aW1lU2NvcGVUb2tlbiIsIlNjb3BlcyIsIlJlZ2lzdHJhdGlvbktleSIsIkR1cGxpY2F0ZVNjb3BlRXJyb3IiLCJSZXNvbHZlRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJiZWdpblNjb3BlIiwiaGFzIiwic2NvcGUiLCJzZXQiLCJTeW1ib2wiLCJkaXNwb3NlIiwiaW5zdCIsImdldFJlZ2lzdHJhdGlvbiIsInZhbHVlIiwidHJhbnNpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJzaW5nbGV0b24iLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwicmVxdWVzdCIsIkVycm9yIiwidHlwZSIsImlzSW5zdGFuY2UiLCJjYWNoZUtleSIsImV4aXN0aW5nSW5zdGFuY2UiLCJnZXQiLCJpbnN0YW5jZSIsImNhbkNvbnN0cnVjdCIsImRlcHMiLCJyZXNvbHZlRGVwZW5kZW5jaWVzIiwicGFyYW1zIiwicGFyYW10eXBlcyIsImluamVjdFRva2VucyIsImluamVjdHRva2VuIiwicmVzb2x2ZWQiLCJpIiwidG9rZW4iLCJkZXAiLCJyZWdpc3RlclR5cGUiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FHQ0EsT0FBTyxFQUNQQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsY0FBYyxRQUNSLDZCQUE2QjtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsbUJBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxzQ0FBc0M7QUFFdEUsU0FBU0MsbUJBQW1CLEVBQUVDLFlBQVksUUFBUSxxQkFBcUI7QUFFdkUsU0FBU0MsZUFBZSxRQUFRLHdCQUF3QjtBQVF4RCxPQUFPLE1BQU1DO0lBQ0xDLElBQVk7SUFDVEMsWUFBWSxJQUFJQyxNQUF1QjtJQUN6Q0MsZ0JBQWlDO0lBQ2pDQyxVQUFvQjtJQUNwQkMsU0FBUyxJQUFJSCxNQUE2QjtJQUMxQ0ksU0FBU2YsT0FBT2UsTUFBTSxDQUFDUCxTQUFTUSxJQUFJLEVBQUU7SUFDdENDLGFBQWEsTUFBTTtJQUMzQixZQUFtQkMsT0FBeUIsQ0FBRTtRQUM3QyxJQUFJLENBQUNULEdBQUcsR0FBR1MsU0FBU1Q7UUFDcEIsSUFBSSxDQUFD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
@@ -1,6 +1,5 @@
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";
4
3
  export class ServiceRegistry {
5
4
  registrations;
6
5
  constructor(parent){
@@ -8,22 +7,10 @@ export class ServiceRegistry {
8
7
  }
9
8
  registerType(scope, options) {
10
9
  const registration = this.createRegistrationFrom(scope, options);
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));
10
+ const existingRegistration = this.getRegistrations(registration.key)?.filter((reg)=>!reg.isEqual(registration)) ?? [];
17
11
  this.setRegistration(registration.key, [
18
12
  registration,
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
13
+ ...existingRegistration
27
14
  ]);
28
15
  return registration;
29
16
  }
@@ -50,4 +37,4 @@ export class ServiceRegistry {
50
37
  }
51
38
  }
52
39
 
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25FcnJvciB9IGZyb20gXCIuLi90eXBlcy9lcnJvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2NvcGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXMuanNcIjtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJUeXBlT3B0aW9ucyA9IHtcblx0dHlwZU9yS2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlO1xuXHR0eXBlT3JJbnN0YW5jZT86IENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGUgfCBvYmplY3Q7XG5cdG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUmVnaXN0cnkge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnM6IE1hcDxzdHJpbmcsIFNlcnZpY2VSZWdpc3RyYXRpb25bXT47XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTZXJ2aWNlUmVnaXN0cnkpIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKHBhcmVudD8ucmVnaXN0cmF0aW9ucyk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJUeXBlKHNjb3BlOiBTY29wZSwgb3B0aW9uczogUmVnaXN0ZXJUeXBlT3B0aW9ucykge1xuXHRcdGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSkgPz8gW107XG5cdFx0Y29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmcuZmluZCgocmVnKSA9PiByZWcuaXNFcXVhbChyZWdpc3RyYXRpb24pKTtcblx0XHRpZiAoZHVwbGljYXRlICE9IG51bGwgJiYgIW9wdGlvbnMub3ZlcnJpZGUpIHtcblx0XHRcdHRocm93IG5ldyBSZWdpc3RyYXRpb25FcnJvcihcblx0XHRcdFx0YEEgc2VydmljZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIGtleSAke3JlZ2lzdHJhdGlvbi5rZXl9LiBVc2UgYnVpbGRlci5vdmVycmlkZS5yZWdpc3RlclNpbmdsZXRvbigpIChvciB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIqIG1ldGhvZCkgdG8gcmVwbGFjZSBpdC5gLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCByZW1haW5pbmcgPSBleGlzdGluZy5maWx0ZXIoKHJlZykgPT4gIXJlZy5pc0VxdWFsKHJlZ2lzdHJhdGlvbikpO1xuXHRcdHRoaXMuc2V0UmVnaXN0cmF0aW9uKHJlZ2lzdHJhdGlvbi5rZXksIFtyZWdpc3RyYXRpb24sIC4uLnJlbWFpbmluZ10pO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwdWJsaWMgcmVwbGFjZVR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHR0aGlzLnNldFJlZ2lzdHJhdGlvbihyZWdpc3RyYXRpb24ua2V5LCBbcmVnaXN0cmF0aW9uXSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZWdpc3RyYXRpb24oa2V5OiBzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RhYmxlKTogU2VydmljZVJlZ2lzdHJhdGlvbltdIHtcblx0XHRjb25zdCBrZXlWYWwgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KGtleSkudmFsdWU7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChrZXlWYWwpO1xuXHRcdHJldHVybiByZWdpc3RyYXRpb247XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJlZ2lzdHJhdGlvbkZyb20oc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgeyB0eXBlT3JLZXksIHR5cGVPckluc3RhbmNlIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IGlzS2V5ID0gdHlwZW9mIHR5cGVPcktleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN5bWJvbFwiO1xuXHRcdGNvbnN0IGlzSW5zdGFuY2UgPSB0eXBlb2YgdHlwZU9ySW5zdGFuY2UgPT09IFwib2JqZWN0XCI7XG5cdFx0Y29uc3Qga2V5ID0gbmV3IFJlZ2lzdHJhdGlvbktleSghaXNLZXkgPyB0eXBlT3JLZXkubmFtZSA6IHR5cGVPcktleSk7XG5cdFx0Y29uc3QgdHlwZSA9IGlzSW5zdGFuY2UgPyB0eXBlT3JJbnN0YW5jZSA6IGlzS2V5ID8gdHlwZU9ySW5zdGFuY2UgOiB0eXBlT3JLZXk7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IFNlcnZpY2VSZWdpc3RyYXRpb24oa2V5LCB0eXBlLCBzY29wZSwgaXNJbnN0YW5jZSk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVnaXN0cmF0aW9ucyhrZXk6IFJlZ2lzdHJhdGlvbktleSkge1xuXHRcdGNvbnN0IHZhbHVlID0ga2V5LnZhbHVlO1xuXHRcdHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0UmVnaXN0cmF0aW9uKGtleTogUmVnaXN0cmF0aW9uS2V5LCByZWdpc3RyYXRpb25zOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10pIHtcblx0XHR0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KGtleS52YWx1ZSwgcmVnaXN0cmF0aW9ucyk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJSZWdpc3RyYXRpb25LZXkiLCJTZXJ2aWNlUmVnaXN0cmF0aW9uIiwiUmVnaXN0cmF0aW9uRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RyYXRpb25zIiwicGFyZW50IiwiTWFwIiwicmVnaXN0ZXJUeXBlIiwic2NvcGUiLCJvcHRpb25zIiwicmVnaXN0cmF0aW9uIiwiY3JlYXRlUmVnaXN0cmF0aW9uRnJvbSIsImV4aXN0aW5nIiwiZ2V0UmVnaXN0cmF0aW9ucyIsImtleSIsImR1cGxpY2F0ZSIsImZpbmQiLCJyZWciLCJpc0VxdWFsIiwib3ZlcnJpZGUiLCJyZW1haW5pbmciLCJmaWx0ZXIiLCJzZXRSZWdpc3RyYXRpb24iLCJyZXBsYWNlVHlwZSIsImdldFJlZ2lzdHJhdGlvbiIsImtleVZhbCIsInZhbHVlIiwiZ2V0IiwidHlwZU9yS2V5IiwidHlwZU9ySW5zdGFuY2UiLCJpc0tleSIsImlzSW5zdGFuY2UiLCJuYW1lIiwidHlwZSIsInNldCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsZUFBZSxRQUFRLHNDQUFzQztBQUN0RSxTQUFTQyxtQkFBbUIsUUFBUSwwQ0FBMEM7QUFDOUUsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBU3ZELE9BQU8sTUFBTUM7SUFDS0MsY0FBa0Q7SUFDbkUsWUFBbUJDLE1BQXdCLENBQUU7UUFDNUMsSUFBSSxDQUFDRCxhQUFhLEdBQUcsSUFBSUUsSUFBSUQsUUFBUUQ7SUFDdEM7SUFFT0csYUFBYUMsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQy9ELE1BQU1DLGVBQWUsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0gsT0FBT0M7UUFDeEQsTUFBTUcsV0FBVyxJQUFJLENBQUNDLGdCQUFnQixDQUFDSCxhQUFhSSxHQUFHLEtBQUssRUFBRTtRQUM5RCxNQUFNQyxZQUFZSCxTQUFTSSxJQUFJLENBQUMsQ0FBQ0MsTUFBUUEsSUFBSUMsT0FBTyxDQUFDUjtRQUNyRCxJQUFJSyxhQUFhLFFBQVEsQ0FBQ04sUUFBUVUsUUFBUSxFQUFFO1lBQzNDLE1BQU0sSUFBSWpCLGtCQUNULENBQUMsd0NBQXdDLEVBQUVRLGFBQWFJLEdBQUcsQ0FBQyw0RkFBNEYsQ0FBQztRQUUzSjtRQUVBLE1BQU1NLFlBQVlSLFNBQVNTLE1BQU0sQ0FBQyxDQUFDSixNQUFRLENBQUNBLElBQUlDLE9BQU8sQ0FBQ1I7UUFDeEQsSUFBSSxDQUFDWSxlQUFlLENBQUNaLGFBQWFJLEdBQUcsRUFBRTtZQUFDSjtlQUFpQlU7U0FBVTtRQUNuRSxPQUFPVjtJQUNSO0lBRU9hLFlBQVlmLEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUM5RCxNQUFNQyxlQUFlLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNILE9BQU9DO1FBQ3hELElBQUksQ0FBQ2EsZUFBZSxDQUFDWixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7U0FBYTtRQUNyRCxPQUFPQTtJQUNSO0lBRU9jLGdCQUFnQlYsR0FBb0MsRUFBeUI7UUFDbkYsTUFBTVcsU0FBUyxJQUFJekIsZ0JBQWdCYyxLQUFLWSxLQUFLO1FBQzdDLE1BQU1oQixlQUFlLElBQUksQ0FBQ04sYUFBYSxDQUFDdUIsR0FBRyxDQUFDRjtRQUM1QyxPQUFPZjtJQUNSO0lBRVFDLHVCQUF1QkgsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQzFFLE1BQU0sRUFBRW1CLFNBQVMsRUFBRUMsY0FBYyxFQUFFLEdBQUdwQjtRQUN0QyxNQUFNcUIsUUFBUSxPQUFPRixjQUFjLFlBQVksT0FBT0EsY0FBYztRQUNwRSxNQUFNRyxhQUFhLE9BQU9GLG1CQUFtQjtRQUM3QyxNQUFNZixNQUFNLElBQUlkLGdCQUFnQixDQUFDOEIsUUFBUUYsVUFBVUksSUFBSSxHQUFHSjtRQUMxRCxNQUFNSyxPQUFPRixhQUFhRixpQkFBaUJDLFFBQVFELGlCQUFpQkQ7UUFDcEUsTUFBTWxCLGVBQWUsSUFBSVQsb0JBQW9CYSxLQUFLbUIsTUFBTXpCLE9BQU91QjtRQUMvRCxPQUFPckI7SUFDUjtJQUVRRyxpQkFBaUJDLEdBQW9CLEVBQUU7UUFDOUMsTUFBTVksUUFBUVosSUFBSVksS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ3VCLEdBQUcsQ0FBQ0Q7SUFDL0I7SUFFUUosZ0JBQWdCUixHQUFvQixFQUFFVixhQUFvQyxFQUFFO1FBQ25GLElBQUksQ0FBQ0EsYUFBYSxDQUFDOEIsR0FBRyxDQUFDcEIsSUFBSVksS0FBSyxFQUFFdEI7SUFDbkM7QUFDRCJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0YWJsZSwgRnVuY3Rpb25UeXBlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25LZXkgfSBmcm9tIFwiLi4vbW9kZWxzL3JlZ2lzdHJhdGlvbi1rZXkubW9kZWwuanNcIjtcbmltcG9ydCB7IFNlcnZpY2VSZWdpc3RyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2UtcmVnaXN0cmF0aW9uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNjb3BlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyVHlwZU9wdGlvbnMgPSB7XG5cdHR5cGVPcktleTogc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0YWJsZSB8IEZ1bmN0aW9uVHlwZTtcblx0dHlwZU9ySW5zdGFuY2U/OiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlIHwgb2JqZWN0O1xufTtcblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VSZWdpc3RyeSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cmF0aW9uczogTWFwPHN0cmluZywgU2VydmljZVJlZ2lzdHJhdGlvbltdPjtcblx0cHVibGljIGNvbnN0cnVjdG9yKHBhcmVudD86IFNlcnZpY2VSZWdpc3RyeSkge1xuXHRcdHRoaXMucmVnaXN0cmF0aW9ucyA9IG5ldyBNYXAocGFyZW50Py5yZWdpc3RyYXRpb25zKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclR5cGUoc2NvcGU6IFNjb3BlLCBvcHRpb25zOiBSZWdpc3RlclR5cGVPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Gcm9tKHNjb3BlLCBvcHRpb25zKTtcblx0XHRjb25zdCBleGlzdGluZ1JlZ2lzdHJhdGlvbiA9XG5cdFx0XHR0aGlzLmdldFJlZ2lzdHJhdGlvbnMocmVnaXN0cmF0aW9uLmtleSk/LmZpbHRlcigocmVnKSA9PiAhcmVnLmlzRXF1YWwocmVnaXN0cmF0aW9uKSkgPz9cblx0XHRcdFtdO1xuXG5cdFx0dGhpcy5zZXRSZWdpc3RyYXRpb24ocmVnaXN0cmF0aW9uLmtleSwgW3JlZ2lzdHJhdGlvbiwgLi4uZXhpc3RpbmdSZWdpc3RyYXRpb25dKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHVibGljIGdldFJlZ2lzdHJhdGlvbihrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpOiBTZXJ2aWNlUmVnaXN0cmF0aW9uW10ge1xuXHRcdGNvbnN0IGtleVZhbCA9IG5ldyBSZWdpc3RyYXRpb25LZXkoa2V5KS52YWx1ZTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGtleVZhbCk7XG5cdFx0cmV0dXJuIHJlZ2lzdHJhdGlvbjtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUmVnaXN0cmF0aW9uRnJvbShzY29wZTogU2NvcGUsIG9wdGlvbnM6IFJlZ2lzdGVyVHlwZU9wdGlvbnMpIHtcblx0XHRjb25zdCB7IHR5cGVPcktleSwgdHlwZU9ySW5zdGFuY2UgfSA9IG9wdGlvbnM7XG5cdFx0Y29uc3QgaXNLZXkgPSB0eXBlb2YgdHlwZU9yS2V5ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB0eXBlT3JLZXkgPT09IFwic3ltYm9sXCI7XG5cdFx0Y29uc3QgaXNJbnN0YW5jZSA9IHR5cGVvZiB0eXBlT3JJbnN0YW5jZSA9PT0gXCJvYmplY3RcIjtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KCFpc0tleSA/IHR5cGVPcktleS5uYW1lIDogdHlwZU9yS2V5KTtcblx0XHRjb25zdCB0eXBlID0gaXNJbnN0YW5jZSA/IHR5cGVPckluc3RhbmNlIDogaXNLZXkgPyB0eXBlT3JJbnN0YW5jZSA6IHR5cGVPcktleTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSBuZXcgU2VydmljZVJlZ2lzdHJhdGlvbihrZXksIHR5cGUsIHNjb3BlLCBpc0luc3RhbmNlKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25zKGtleTogUmVnaXN0cmF0aW9uS2V5KSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrZXkudmFsdWU7XG5cdFx0cmV0dXJuIHRoaXMucmVnaXN0cmF0aW9ucy5nZXQodmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRSZWdpc3RyYXRpb24oa2V5OiBSZWdpc3RyYXRpb25LZXksIHJlZ2lzdHJhdGlvbnM6IFNlcnZpY2VSZWdpc3RyYXRpb25bXSkge1xuXHRcdHRoaXMucmVnaXN0cmF0aW9ucy5zZXQoa2V5LnZhbHVlLCByZWdpc3RyYXRpb25zKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlJlZ2lzdHJhdGlvbktleSIsIlNlcnZpY2VSZWdpc3RyYXRpb24iLCJTZXJ2aWNlUmVnaXN0cnkiLCJyZWdpc3RyYXRpb25zIiwicGFyZW50IiwiTWFwIiwicmVnaXN0ZXJUeXBlIiwic2NvcGUiLCJvcHRpb25zIiwicmVnaXN0cmF0aW9uIiwiY3JlYXRlUmVnaXN0cmF0aW9uRnJvbSIsImV4aXN0aW5nUmVnaXN0cmF0aW9uIiwiZ2V0UmVnaXN0cmF0aW9ucyIsImtleSIsImZpbHRlciIsInJlZyIsImlzRXF1YWwiLCJzZXRSZWdpc3RyYXRpb24iLCJnZXRSZWdpc3RyYXRpb24iLCJrZXlWYWwiLCJ2YWx1ZSIsImdldCIsInR5cGVPcktleSIsInR5cGVPckluc3RhbmNlIiwiaXNLZXkiLCJpc0luc3RhbmNlIiwibmFtZSIsInR5cGUiLCJzZXQiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGVBQWUsUUFBUSxzQ0FBc0M7QUFDdEUsU0FBU0MsbUJBQW1CLFFBQVEsMENBQTBDO0FBUTlFLE9BQU8sTUFBTUM7SUFDS0MsY0FBa0Q7SUFDbkUsWUFBbUJDLE1BQXdCLENBQUU7UUFDNUMsSUFBSSxDQUFDRCxhQUFhLEdBQUcsSUFBSUUsSUFBSUQsUUFBUUQ7SUFDdEM7SUFFT0csYUFBYUMsS0FBWSxFQUFFQyxPQUE0QixFQUFFO1FBQy9ELE1BQU1DLGVBQWUsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0gsT0FBT0M7UUFDeEQsTUFBTUcsdUJBQ0wsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ0gsYUFBYUksR0FBRyxHQUFHQyxPQUFPLENBQUNDLE1BQVEsQ0FBQ0EsSUFBSUMsT0FBTyxDQUFDUCxrQkFDdEUsRUFBRTtRQUVILElBQUksQ0FBQ1EsZUFBZSxDQUFDUixhQUFhSSxHQUFHLEVBQUU7WUFBQ0o7ZUFBaUJFO1NBQXFCO1FBQzlFLE9BQU9GO0lBQ1I7SUFFT1MsZ0JBQWdCTCxHQUFvQyxFQUF5QjtRQUNuRixNQUFNTSxTQUFTLElBQUluQixnQkFBZ0JhLEtBQUtPLEtBQUs7UUFDN0MsTUFBTVgsZUFBZSxJQUFJLENBQUNOLGFBQWEsQ0FBQ2tCLEdBQUcsQ0FBQ0Y7UUFDNUMsT0FBT1Y7SUFDUjtJQUVRQyx1QkFBdUJILEtBQVksRUFBRUMsT0FBNEIsRUFBRTtRQUMxRSxNQUFNLEVBQUVjLFNBQVMsRUFBRUMsY0FBYyxFQUFFLEdBQUdmO1FBQ3RDLE1BQU1nQixRQUFRLE9BQU9GLGNBQWMsWUFBWSxPQUFPQSxjQUFjO1FBQ3BFLE1BQU1HLGFBQWEsT0FBT0YsbUJBQW1CO1FBQzdDLE1BQU1WLE1BQU0sSUFBSWIsZ0JBQWdCLENBQUN3QixRQUFRRixVQUFVSSxJQUFJLEdBQUdKO1FBQzFELE1BQU1LLE9BQU9GLGFBQWFGLGlCQUFpQkMsUUFBUUQsaUJBQWlCRDtRQUNwRSxNQUFNYixlQUFlLElBQUlSLG9CQUFvQlksS0FBS2MsTUFBTXBCLE9BQU9rQjtRQUMvRCxPQUFPaEI7SUFDUjtJQUVRRyxpQkFBaUJDLEdBQW9CLEVBQUU7UUFDOUMsTUFBTU8sUUFBUVAsSUFBSU8sS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQ2pCLGFBQWEsQ0FBQ2tCLEdBQUcsQ0FBQ0Q7SUFDL0I7SUFFUUgsZ0JBQWdCSixHQUFvQixFQUFFVixhQUFvQyxFQUFFO1FBQ25GLElBQUksQ0FBQ0EsYUFBYSxDQUFDeUIsR0FBRyxDQUFDZixJQUFJTyxLQUFLLEVBQUVqQjtJQUNuQztBQUNEIn0=
@@ -1,4 +1,3 @@
1
- export * from "./errors.js";
2
1
  export * from "./types.js";
3
2
 
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjO0FBQzVCLGNBQWMsYUFBYSJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSJ9
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7XG5cdENvbnRhaW5lckJ1aWxkZXIsXG5cdENvbnRhaW5lclJlZ2lzdHJhcixcblx0SUNvbnRhaW5lcixcblx0TGlmZXRpbWVTY29wZSxcblx0UmVzb2x2ZVJlcXVlc3QsXG5cdFNjb3BlLFxuXHRTZXJ2aWNlUHJvdmlkZXIsXG59IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29tcG9zaXRpb25cIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQVFxQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7XG5cdENvbnRhaW5lckJ1aWxkZXIsXG5cdElDb250YWluZXIsXG5cdExpZmV0aW1lU2NvcGUsXG5cdFJlc29sdmVSZXF1ZXN0LFxuXHRTY29wZSxcblx0U2VydmljZVByb3ZpZGVyLFxufSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NvbXBvc2l0aW9uXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FPcUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/crucible",
3
- "version": "0.0.1-dev.68",
3
+ "version": "0.0.1-dev.7",
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.68",
34
- "@decohere/scribe": "0.0.1-dev.68"
33
+ "@decohere/nexus": "0.0.1-dev.7",
34
+ "@decohere/scribe": "0.0.1-dev.7"
35
35
  },
36
36
  "devDependencies": {}
37
37
  }
@@ -3,7 +3,7 @@ export declare const CrucibleMeta: {
3
3
  injecttoken: string;
4
4
  };
5
5
  export declare const Scopes: {
6
- request: "request";
7
- singleton: "single-instance";
8
- transient: "transient";
6
+ request: string;
7
+ singleton: string;
8
+ transient: string;
9
9
  };
@@ -1,11 +1,5 @@
1
- import { type Constructable } from "@decohere/nexus/reflection";
2
1
  export type InjectionMetadata = Map<number, InjectionToken>;
3
2
  export type InjectionToken = {
4
- key: string | symbol | Constructable;
3
+ key: string | symbol;
5
4
  };
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;
5
+ export declare function inject(key: string | symbol): (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, ContainerRegistrar, Scope } from "../types/types.js";
3
+ import type { ContainerBuilder, 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,7 +9,6 @@ type ContainerBuilderOptions = {
9
9
  export declare class CrucibleBuilder implements ContainerBuilder {
10
10
  private serviceRegistry;
11
11
  constructor(options?: ContainerBuilderOptions);
12
- get override(): ContainerRegistrar;
13
12
  registerType(type: Constructable, scope?: Scope): ServiceRegistration;
14
13
  registerTypes(...types: Constructable[]): ServiceRegistration[];
15
14
  registerTypes(scope: Scope, ...types: Constructable[]): ServiceRegistration[];
@@ -23,8 +22,5 @@ export declare class CrucibleBuilder implements ContainerBuilder {
23
22
  registerRequestScoped(key: string | symbol, type: Constructable): ServiceRegistration;
24
23
  registerRequestScoped(type: Constructable): ServiceRegistration;
25
24
  build(): Crucible;
26
- private register;
27
- private registerMany;
28
- private createRegistrar;
29
25
  }
30
26
  export {};
@@ -2,14 +2,13 @@ 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
- parent?: Crucible;
5
+ rootScope?: 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?;
13
12
  private rootScope;
14
13
  private scopes;
15
14
  private logger;
@@ -19,15 +18,12 @@ export declare class Crucible implements IContainer {
19
18
  resolve<T extends object | object[]>(resolveRequest: ResolveRequest<T>): T;
20
19
  beginScope(name?: string): Crucible;
21
20
  [Symbol.dispose](): void;
22
- [Symbol.asyncDispose](): Promise<void>;
23
- private disposeSync;
24
- private disposeAsync;
21
+ private dispose;
25
22
  private getRegistrationFrom;
26
23
  private resolveRegistration;
27
24
  private getOrCreateInstance;
28
25
  private createInstance;
29
26
  private resolveDependencies;
30
- private releaseScope;
31
27
  private registerLifetimeScope;
32
28
  }
33
29
  export {};
@@ -4,13 +4,11 @@ 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;
8
7
  };
9
8
  export declare class ServiceRegistry {
10
9
  private readonly registrations;
11
10
  constructor(parent?: ServiceRegistry);
12
11
  registerType(scope: Scope, options: RegisterTypeOptions): ServiceRegistration;
13
- replaceType(scope: Scope, options: RegisterTypeOptions): ServiceRegistration;
14
12
  getRegistration(key: string | symbol | Constructable): ServiceRegistration[];
15
13
  private createRegistrationFrom;
16
14
  private getRegistrations;
@@ -1,2 +1 @@
1
- export * from "./errors.js";
2
1
  export * from "./types.js";
@@ -1 +1 @@
1
- export type { ContainerBuilder, ContainerRegistrar, IContainer, LifetimeScope, ResolveRequest, Scope, ServiceProvider, } from "@decohere/nexus/composition";
1
+ export type { ContainerBuilder, IContainer, LifetimeScope, ResolveRequest, Scope, ServiceProvider, } from "@decohere/nexus/composition";