@decohere/crucible 0.0.1-dev.9 → 0.0.1-dev.91

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