@decohere/crucible 0.0.1-dev.29 → 0.0.1-dev.3

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.
Files changed (45) hide show
  1. package/package.json +3 -3
  2. package/{es6/src → src}/decorators/inject.decorator.js +2 -2
  3. package/src/services/crucible.js +133 -0
  4. package/tests/container.spec.js +259 -0
  5. package/commonjs/src/const.js +0 -33
  6. package/commonjs/src/decorators/index.js +0 -21
  7. package/commonjs/src/decorators/inject.decorator.js +0 -27
  8. package/commonjs/src/decorators/injectable.dectorator.js +0 -16
  9. package/commonjs/src/index.js +0 -22
  10. package/commonjs/src/models/registration-key.model.js +0 -31
  11. package/commonjs/src/models/service-registration.model.js +0 -30
  12. package/commonjs/src/services/crucible-builder.js +0 -68
  13. package/commonjs/src/services/crucible.js +0 -165
  14. package/commonjs/src/services/index.js +0 -21
  15. package/commonjs/src/services/service-registry.js +0 -50
  16. package/commonjs/src/types/errors.js +0 -29
  17. package/commonjs/src/types/index.js +0 -20
  18. package/commonjs/src/types/types.js +0 -6
  19. package/es6/src/services/crucible.js +0 -155
  20. package/types/src/const.d.ts +0 -9
  21. package/types/src/decorators/index.d.ts +0 -2
  22. package/types/src/decorators/inject.decorator.d.ts +0 -5
  23. package/types/src/decorators/injectable.dectorator.d.ts +0 -1
  24. package/types/src/index.d.ts +0 -3
  25. package/types/src/models/registration-key.model.d.ts +0 -7
  26. package/types/src/models/service-registration.model.d.ts +0 -11
  27. package/types/src/services/crucible-builder.d.ts +0 -26
  28. package/types/src/services/crucible.d.ts +0 -31
  29. package/types/src/services/index.d.ts +0 -2
  30. package/types/src/services/service-registry.d.ts +0 -16
  31. package/types/src/types/errors.d.ts +0 -6
  32. package/types/src/types/index.d.ts +0 -1
  33. package/types/src/types/types.d.ts +0 -1
  34. /package/{es6/src → src}/const.js +0 -0
  35. /package/{es6/src → src}/decorators/index.js +0 -0
  36. /package/{es6/src → src}/decorators/injectable.dectorator.js +0 -0
  37. /package/{es6/src → src}/index.js +0 -0
  38. /package/{es6/src → src}/models/registration-key.model.js +0 -0
  39. /package/{es6/src → src}/models/service-registration.model.js +0 -0
  40. /package/{es6/src → src}/services/crucible-builder.js +0 -0
  41. /package/{es6/src → src}/services/index.js +0 -0
  42. /package/{es6/src → src}/services/service-registry.js +0 -0
  43. /package/{es6/src → src}/types/errors.js +0 -0
  44. /package/{es6/src → src}/types/index.js +0 -0
  45. /package/{es6/src → src}/types/types.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/crucible",
3
- "version": "0.0.1-dev.29",
3
+ "version": "0.0.1-dev.3",
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.29",
34
- "@decohere/scribe": "0.0.1-dev.29"
33
+ "@decohere/nexus": "0.0.1-dev.3",
34
+ "@decohere/scribe": "0.0.1-dev.3"
35
35
  },
36
36
  "devDependencies": {}
37
37
  }
@@ -1,4 +1,4 @@
1
- import { defineMeta, getMeta } from "@decohere/nexus/reflection";
1
+ import { defineMeta, getMeta } from "../../../nexus/src/reflection/index.js";
2
2
  import { CrucibleMeta } from "../const.js";
3
3
  export function inject(key) {
4
4
  return (target, _propertyKey, idx)=>{
@@ -14,4 +14,4 @@ function getExistingMeta(target) {
14
14
  return meta;
15
15
  }
16
16
 
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lTWV0YSwgZ2V0TWV0YSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhIH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvbk1ldGFkYXRhID0gTWFwPG51bWJlciwgSW5qZWN0aW9uVG9rZW4+O1xuXG5leHBvcnQgdHlwZSBJbmplY3Rpb25Ub2tlbiA9IHtcblx0a2V5OiBzdHJpbmcgfCBzeW1ib2w7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG5cdHJldHVybiAodGFyZ2V0OiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZ2V0RXhpc3RpbmdNZXRhKHRhcmdldCk7XG5cdFx0bWV0YWRhdGEuc2V0KGlkeCwgeyBrZXkgfSk7XG5cdFx0ZGVmaW5lTWV0YShDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIG1ldGFkYXRhLCB0YXJnZXQpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRFeGlzdGluZ01ldGEodGFyZ2V0OiBvYmplY3QpIHtcblx0Y29uc3QgbWV0YSA9XG5cdFx0Z2V0TWV0YTxNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdGFyZ2V0KSA/P1xuXHRcdG5ldyBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4oKTtcblx0cmV0dXJuIG1ldGE7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lTWV0YSIsImdldE1ldGEiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3QiLCJrZXkiLCJ0YXJnZXQiLCJfcHJvcGVydHlLZXkiLCJpZHgiLCJtZXRhZGF0YSIsImdldEV4aXN0aW5nTWV0YSIsInNldCIsImluamVjdHRva2VuIiwibWV0YSIsIk1hcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxPQUFPLFFBQVEsNkJBQTZCO0FBQ2pFLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBUTNDLE9BQU8sU0FBU0MsT0FBT0MsR0FBb0I7SUFDMUMsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCSixXQUFXRSxhQUFhUyxXQUFXLEVBQUVILFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTU8sT0FDTFgsUUFBcUNDLGFBQWFTLFdBQVcsRUFBRU4sV0FDL0QsSUFBSVE7SUFDTCxPQUFPRDtBQUNSIn0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lTWV0YSwgZ2V0TWV0YSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhIH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvbk1ldGFkYXRhID0gTWFwPG51bWJlciwgSW5qZWN0aW9uVG9rZW4+O1xuXG5leHBvcnQgdHlwZSBJbmplY3Rpb25Ub2tlbiA9IHtcblx0a2V5OiBzdHJpbmcgfCBzeW1ib2w7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG5cdHJldHVybiAodGFyZ2V0OiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZ2V0RXhpc3RpbmdNZXRhKHRhcmdldCk7XG5cdFx0bWV0YWRhdGEuc2V0KGlkeCwgeyBrZXkgfSk7XG5cdFx0ZGVmaW5lTWV0YShDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIG1ldGFkYXRhLCB0YXJnZXQpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRFeGlzdGluZ01ldGEodGFyZ2V0OiBvYmplY3QpIHtcblx0Y29uc3QgbWV0YSA9XG5cdFx0Z2V0TWV0YTxNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdGFyZ2V0KSA/P1xuXHRcdG5ldyBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4oKTtcblx0cmV0dXJuIG1ldGE7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lTWV0YSIsImdldE1ldGEiLCJDcnVjaWJsZU1ldGEiLCJpbmplY3QiLCJrZXkiLCJ0YXJnZXQiLCJfcHJvcGVydHlLZXkiLCJpZHgiLCJtZXRhZGF0YSIsImdldEV4aXN0aW5nTWV0YSIsInNldCIsImluamVjdHRva2VuIiwibWV0YSIsIk1hcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxPQUFPLFFBQVEseUNBQTZCO0FBQ2pFLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBUTNDLE9BQU8sU0FBU0MsT0FBT0MsR0FBb0I7SUFDMUMsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCSixXQUFXRSxhQUFhUyxXQUFXLEVBQUVILFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTU8sT0FDTFgsUUFBcUNDLGFBQWFTLFdBQVcsRUFBRU4sV0FDL0QsSUFBSVE7SUFDTCxPQUFPRDtBQUNSIn0=
@@ -0,0 +1,133 @@
1
+ import { getMeta, isArrayType, isConstructable, ReflectionMeta } from "../../../nexus/src/reflection/index.js";
2
+ import { scribe } from "../../../scribe/scribe/src/index.js";
3
+ import { CrucibleMeta, LifetimeScopeToken, Scopes } from "../const.js";
4
+ import { RegistrationKey } from "../models/registration-key.model.js";
5
+ import { DuplicateScopeError, ResolveError } from "../types/errors.js";
6
+ import { ServiceRegistry } from "./service-registry.js";
7
+ export class Crucible {
8
+ key;
9
+ instances = new Map();
10
+ serviceRegistry;
11
+ rootScope;
12
+ scopes = new Map();
13
+ logger = scribe.logger(Crucible.name);
14
+ isDisposed = false;
15
+ constructor(options){
16
+ this.key = options?.key;
17
+ this.serviceRegistry = new ServiceRegistry(options?.serviceRegistry);
18
+ this.registerLifetimeScope();
19
+ this.rootScope = options?.rootScope ?? this;
20
+ }
21
+ resolveMany(resolveRequest) {
22
+ const key = new RegistrationKey(resolveRequest);
23
+ const registrations = this.getRegistrationFrom(key) ?? [];
24
+ const services = Array.of();
25
+ for (const registration of registrations){
26
+ const service = this.resolveRegistration(registration);
27
+ services.push(service);
28
+ }
29
+ return services;
30
+ }
31
+ resolve(resolveRequest) {
32
+ const key = new RegistrationKey(resolveRequest);
33
+ const registration = this.getRegistrationFrom(key);
34
+ if (registration == null) {
35
+ this.logger.warn(`Cannot resolve dependency ${key.toString()}`);
36
+ return null;
37
+ }
38
+ if (registration.length > 1) {
39
+ throw new ResolveError(`There are multiple services registered with key ${key.toString()}. Use resolveMany to resolve all implementations.`);
40
+ }
41
+ const service = this.resolveRegistration(registration[0]);
42
+ return service;
43
+ }
44
+ beginScope(name) {
45
+ if (this.scopes.has(name)) {
46
+ throw new DuplicateScopeError(`Cannot create duplicate scope. Scope with ${name} is already created and has not been disposed.`);
47
+ }
48
+ const scope = new Crucible({
49
+ key: name,
50
+ serviceRegistry: this.serviceRegistry,
51
+ rootScope: this
52
+ });
53
+ this.scopes.set(name, scope);
54
+ return scope;
55
+ }
56
+ [Symbol.dispose]() {
57
+ if (this.isDisposed) {
58
+ return;
59
+ }
60
+ this.dispose();
61
+ }
62
+ dispose() {
63
+ if (this.isDisposed) {
64
+ return;
65
+ }
66
+ this.isDisposed = true;
67
+ for (const [, inst] of this.instances){
68
+ if (inst === this) {
69
+ continue;
70
+ }
71
+ inst[Symbol.dispose]?.();
72
+ }
73
+ }
74
+ getRegistrationFrom(key) {
75
+ const registration = this.serviceRegistry.getRegistration(key.value);
76
+ return registration;
77
+ }
78
+ resolveRegistration(registration) {
79
+ const { scope } = registration;
80
+ switch(scope){
81
+ case Scopes.transient:
82
+ return this.createInstance(registration);
83
+ case Scopes.singleton:
84
+ return this.rootScope.getOrCreateInstance(registration);
85
+ case Scopes.request:
86
+ return this.getOrCreateInstance(registration);
87
+ }
88
+ }
89
+ getOrCreateInstance(registration) {
90
+ if (this.isDisposed) {
91
+ throw new Error("This continer has been disposed");
92
+ }
93
+ const { key, type, isInstance } = registration;
94
+ const cacheKey = isInstance ? key.value : type;
95
+ const existingInstance = this.instances.get(cacheKey);
96
+ if (existingInstance != null) {
97
+ return existingInstance;
98
+ }
99
+ const instance = isInstance ? type : this.createInstance(registration);
100
+ this.instances.set(cacheKey, instance);
101
+ return instance;
102
+ }
103
+ createInstance(registration) {
104
+ const type = registration.type;
105
+ const canConstruct = isConstructable(type);
106
+ const deps = this.resolveDependencies(type);
107
+ const inst = canConstruct ? new type(...deps) : type();
108
+ return inst;
109
+ }
110
+ resolveDependencies(type) {
111
+ const params = getMeta(ReflectionMeta.paramtypes, type) ?? [];
112
+ const injectTokens = getMeta(CrucibleMeta.injecttoken, type) ?? new Map();
113
+ //TODO: put a try catch here so we can throw the name of the service
114
+ let resolved = [];
115
+ for(let i = 0; i < params.length; i++){
116
+ const token = injectTokens.get(i)?.key ?? params[i].name;
117
+ const dep = isArrayType(params[i]) ? this.resolveMany(token) : this.resolve(token);
118
+ resolved = [
119
+ ...resolved,
120
+ dep
121
+ ];
122
+ }
123
+ return resolved;
124
+ }
125
+ registerLifetimeScope() {
126
+ this.serviceRegistry.registerType(Scopes.request, {
127
+ typeOrKey: LifetimeScopeToken,
128
+ typeOrInstance: this
129
+ });
130
+ }
131
+ }
132
+
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9zZXJ2aWNlcy9jcnVjaWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIENvbnN0cnVjdGFibGUsXG5cdHR5cGUgRnVuY3Rpb25UeXBlLFxuXHRnZXRNZXRhLFxuXHRpc0FycmF5VHlwZSxcblx0aXNDb25zdHJ1Y3RhYmxlLFxuXHRSZWZsZWN0aW9uTWV0YSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhLCBMaWZldGltZVNjb3BlVG9rZW4sIFNjb3BlcyB9IGZyb20gXCIuLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25NZXRhZGF0YSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbktleSB9IGZyb20gXCIuLi9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVnaXN0cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlLXJlZ2lzdHJhdGlvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRHVwbGljYXRlU2NvcGVFcnJvciwgUmVzb2x2ZUVycm9yIH0gZnJvbSBcIi4uL3R5cGVzL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29udGFpbmVyLCBMaWZldGltZVNjb3BlLCBSZXNvbHZlUmVxdWVzdCB9IGZyb20gXCIuLi90eXBlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc2VydmljZS1yZWdpc3RyeS5qc1wiO1xuXG50eXBlIENydWNpYmxlT3B0aW9ucyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRyb290U2NvcGU/OiBDcnVjaWJsZTtcblx0c2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG59O1xuXG5leHBvcnQgY2xhc3MgQ3J1Y2libGUgaW1wbGVtZW50cyBJQ29udGFpbmVyIHtcblx0cHVibGljIGtleTogc3RyaW5nO1xuXHRwcm90ZWN0ZWQgaW5zdGFuY2VzID0gbmV3IE1hcDx1bmtub3duLCBvYmplY3Q+KCk7XG5cdHByaXZhdGUgc2VydmljZVJlZ2lzdHJ5OiBTZXJ2aWNlUmVnaXN0cnk7XG5cdHByaXZhdGUgcm9vdFNjb3BlOiBDcnVjaWJsZTtcblx0cHJpdmF0ZSBzY29wZXMgPSBuZXcgTWFwPHN0cmluZywgTGlmZXRpbWVTY29wZT4oKTtcblx0cHJpdmF0ZSBsb2dnZXIgPSBzY3JpYmUubG9nZ2VyKENydWNpYmxlLm5hbWUpO1xuXHRwcml2YXRlIGlzRGlzcG9zZWQgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDcnVjaWJsZU9wdGlvbnMpIHtcblx0XHR0aGlzLmtleSA9IG9wdGlvbnM/LmtleTtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IG5ldyBTZXJ2aWNlUmVnaXN0cnkob3B0aW9ucz8uc2VydmljZVJlZ2lzdHJ5KTtcblx0XHR0aGlzLnJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpO1xuXHRcdHRoaXMucm9vdFNjb3BlID0gb3B0aW9ucz8ucm9vdFNjb3BlID8/IHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVzb2x2ZU1hbnk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ocmVzb2x2ZVJlcXVlc3Q6IFJlc29sdmVSZXF1ZXN0PFQ+KTogVFtdIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb25zID0gdGhpcy5nZXRSZWdpc3RyYXRpb25Gcm9tKGtleSkgPz8gW107XG5cblx0XHRjb25zdCBzZXJ2aWNlcyA9IEFycmF5Lm9mPFQ+KCk7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9ucykge1xuXHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbjxUPihyZWdpc3RyYXRpb24pO1xuXHRcdFx0c2VydmljZXMucHVzaChzZXJ2aWNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlcnZpY2VzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmU8VCBleHRlbmRzIG9iamVjdCB8IG9iamVjdFtdPihyZXNvbHZlUmVxdWVzdDogUmVzb2x2ZVJlcXVlc3Q8VD4pOiBUIHtcblx0XHRjb25zdCBrZXkgPSBuZXcgUmVnaXN0cmF0aW9uS2V5KHJlc29sdmVSZXF1ZXN0KTtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLmdldFJlZ2lzdHJhdGlvbkZyb20oa2V5KTtcblx0XHRpZiAocmVnaXN0cmF0aW9uID09IG51bGwpIHtcblx0XHRcdHRoaXMubG9nZ2VyLndhcm4oYENhbm5vdCByZXNvbHZlIGRlcGVuZGVuY3kgJHtrZXkudG9TdHJpbmcoKX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChyZWdpc3RyYXRpb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlc29sdmVFcnJvcihcblx0XHRcdFx0YFRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2aWNlcyByZWdpc3RlcmVkIHdpdGgga2V5ICR7a2V5LnRvU3RyaW5nKCl9LiBVc2UgcmVzb2x2ZU1hbnkgdG8gcmVzb2x2ZSBhbGwgaW1wbGVtZW50YXRpb25zLmAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aGlzLnJlc29sdmVSZWdpc3RyYXRpb248VD4ocmVnaXN0cmF0aW9uWzBdKTtcblx0XHRyZXR1cm4gc2VydmljZTtcblx0fVxuXG5cdHB1YmxpYyBiZWdpblNjb3BlKG5hbWU/OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5zY29wZXMuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRHVwbGljYXRlU2NvcGVFcnJvcihcblx0XHRcdFx0YENhbm5vdCBjcmVhdGUgZHVwbGljYXRlIHNjb3BlLiBTY29wZSB3aXRoICR7bmFtZX0gaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBoYXMgbm90IGJlZW4gZGlzcG9zZWQuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBuZXcgQ3J1Y2libGUoe1xuXHRcdFx0a2V5OiBuYW1lLFxuXHRcdFx0c2VydmljZVJlZ2lzdHJ5OiB0aGlzLnNlcnZpY2VSZWdpc3RyeSxcblx0XHRcdHJvb3RTY29wZTogdGhpcyxcblx0XHR9KTtcblxuXHRcdHRoaXMuc2NvcGVzLnNldChuYW1lLCBzY29wZSk7XG5cdFx0cmV0dXJuIHNjb3BlO1xuXHR9XG5cblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0aWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcblx0XHRmb3IgKGNvbnN0IFssIGluc3RdIG9mIHRoaXMuaW5zdGFuY2VzKSB7XG5cdFx0XHRpZiAoaW5zdCA9PT0gdGhpcykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGluc3RbU3ltYm9sLmRpc3Bvc2VdPy4oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlZ2lzdHJhdGlvbkZyb20oa2V5OiBSZWdpc3RyYXRpb25LZXkpIHtcblx0XHRjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRSZWdpc3RyYXRpb24oa2V5LnZhbHVlKTtcblx0XHRyZXR1cm4gcmVnaXN0cmF0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVnaXN0cmF0aW9uPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGNvbnN0IHsgc2NvcGUgfSA9IHJlZ2lzdHJhdGlvbjtcblx0XHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0XHRjYXNlIFNjb3Blcy50cmFuc2llbnQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5zaW5nbGV0b246XG5cdFx0XHRcdHJldHVybiB0aGlzLnJvb3RTY29wZS5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0XHRjYXNlIFNjb3Blcy5yZXF1ZXN0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKHJlZ2lzdHJhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRPckNyZWF0ZUluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KHJlZ2lzdHJhdGlvbjogU2VydmljZVJlZ2lzdHJhdGlvbik6IFQge1xuXHRcdGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udGluZXIgaGFzIGJlZW4gZGlzcG9zZWRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHsga2V5LCB0eXBlLCBpc0luc3RhbmNlIH0gPSByZWdpc3RyYXRpb247XG5cdFx0Y29uc3QgY2FjaGVLZXkgPSBpc0luc3RhbmNlID8ga2V5LnZhbHVlIDogdHlwZTtcblx0XHRjb25zdCBleGlzdGluZ0luc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KGNhY2hlS2V5KTtcblx0XHRpZiAoZXhpc3RpbmdJbnN0YW5jZSAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZXhpc3RpbmdJbnN0YW5jZSBhcyBUO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlID0gaXNJbnN0YW5jZSA/ICh0eXBlIGFzIFQpIDogdGhpcy5jcmVhdGVJbnN0YW5jZTxUPihyZWdpc3RyYXRpb24pO1xuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChjYWNoZUtleSwgaW5zdGFuY2UpO1xuXHRcdHJldHVybiBpbnN0YW5jZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlSW5zdGFuY2U8VCBleHRlbmRzIG9iamVjdD4ocmVnaXN0cmF0aW9uOiBTZXJ2aWNlUmVnaXN0cmF0aW9uKTogVCB7XG5cdFx0Y29uc3QgdHlwZSA9IHJlZ2lzdHJhdGlvbi50eXBlIGFzIENvbnN0cnVjdGFibGUgfCBGdW5jdGlvblR5cGU7XG5cdFx0Y29uc3QgY2FuQ29uc3RydWN0ID0gaXNDb25zdHJ1Y3RhYmxlKHR5cGUpO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLnJlc29sdmVEZXBlbmRlbmNpZXModHlwZSk7XG5cdFx0Y29uc3QgaW5zdCA9IChjYW5Db25zdHJ1Y3QgPyBuZXcgdHlwZSguLi5kZXBzKSA6IHR5cGUoKSkgYXMgVDtcblx0XHRyZXR1cm4gaW5zdDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZURlcGVuZGVuY2llcyh0eXBlOiBDb25zdHJ1Y3RhYmxlIHwgRnVuY3Rpb25UeXBlKTogdW5rbm93bltdIHtcblx0XHRjb25zdCBwYXJhbXMgPSBnZXRNZXRhPEFycmF5PENvbnN0cnVjdGFibGU+PihSZWZsZWN0aW9uTWV0YS5wYXJhbXR5cGVzLCB0eXBlKSA/PyBbXTtcblxuXHRcdGNvbnN0IGluamVjdFRva2VucyA9XG5cdFx0XHRnZXRNZXRhPEluamVjdGlvbk1ldGFkYXRhPihDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIHR5cGUpID8/IG5ldyBNYXAoKTtcblxuXHRcdC8vVE9ETzogcHV0IGEgdHJ5IGNhdGNoIGhlcmUgc28gd2UgY2FuIHRocm93IHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG5cdFx0bGV0IHJlc29sdmVkID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHRva2VuID0gaW5qZWN0VG9rZW5zLmdldChpKT8ua2V5ID8/IHBhcmFtc1tpXS5uYW1lO1xuXHRcdFx0Y29uc3QgZGVwID0gaXNBcnJheVR5cGUocGFyYW1zW2ldKSA/IHRoaXMucmVzb2x2ZU1hbnkodG9rZW4pIDogdGhpcy5yZXNvbHZlKHRva2VuKTtcblx0XHRcdHJlc29sdmVkID0gWy4uLnJlc29sdmVkLCBkZXBdO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyTGlmZXRpbWVTY29wZSgpIHtcblx0XHR0aGlzLnNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlclR5cGUoU2NvcGVzLnJlcXVlc3QsIHtcblx0XHRcdHR5cGVPcktleTogTGlmZXRpbWVTY29wZVRva2VuLFxuXHRcdFx0dHlwZU9ySW5zdGFuY2U6IHRoaXMsXG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRNZXRhIiwiaXNBcnJheVR5cGUiLCJpc0NvbnN0cnVjdGFibGUiLCJSZWZsZWN0aW9uTWV0YSIsInNjcmliZSIsIkNydWNpYmxlTWV0YSIsIkxpZmV0aW1lU2NvcGVUb2tlbiIsIlNjb3BlcyIsIlJlZ2lzdHJhdGlvbktleSIsIkR1cGxpY2F0ZVNjb3BlRXJyb3IiLCJSZXNvbHZlRXJyb3IiLCJTZXJ2aWNlUmVnaXN0cnkiLCJDcnVjaWJsZSIsImtleSIsImluc3RhbmNlcyIsIk1hcCIsInNlcnZpY2VSZWdpc3RyeSIsInJvb3RTY29wZSIsInNjb3BlcyIsImxvZ2dlciIsIm5hbWUiLCJpc0Rpc3Bvc2VkIiwib3B0aW9ucyIsInJlZ2lzdGVyTGlmZXRpbWVTY29wZSIsInJlc29sdmVNYW55IiwicmVzb2x2ZVJlcXVlc3QiLCJyZWdpc3RyYXRpb25zIiwiZ2V0UmVnaXN0cmF0aW9uRnJvbSIsInNlcnZpY2VzIiwiQXJyYXkiLCJvZiIsInJlZ2lzdHJhdGlvbiIsInNlcnZpY2UiLCJyZXNvbHZlUmVnaXN0cmF0aW9uIiwicHVzaCIsInJlc29sdmUiLCJ3YXJuIiwidG9TdHJpbmciLCJsZW5ndGgiLCJiZWdpblNjb3BlIiwiaGFzIiwic2NvcGUiLCJzZXQiLCJTeW1ib2wiLCJkaXNwb3NlIiwiaW5zdCIsImdldFJlZ2lzdHJhdGlvbiIsInZhbHVlIiwidHJhbnNpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJzaW5nbGV0b24iLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwicmVxdWVzdCIsIkVycm9yIiwidHlwZSIsImlzSW5zdGFuY2UiLCJjYWNoZUtleSIsImV4aXN0aW5nSW5zdGFuY2UiLCJnZXQiLCJpbnN0YW5jZSIsImNhbkNvbnN0cnVjdCIsImRlcHMiLCJyZXNvbHZlRGVwZW5kZW5jaWVzIiwicGFyYW1zIiwicGFyYW10eXBlcyIsImluamVjdFRva2VucyIsImluamVjdHRva2VuIiwicmVzb2x2ZWQiLCJpIiwidG9rZW4iLCJkZXAiLCJyZWdpc3RlclR5cGUiLCJ0eXBlT3JLZXkiLCJ0eXBlT3JJbnN0YW5jZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FHQ0EsT0FBTyxFQUNQQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsY0FBYyxRQUNSLHlDQUE2QjtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsc0NBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxjQUFjO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxzQ0FBc0M7QUFFdEUsU0FBU0MsbUJBQW1CLEVBQUVDLFlBQVksUUFBUSxxQkFBcUI7QUFFdkUsU0FBU0MsZUFBZSxRQUFRLHdCQUF3QjtBQVF4RCxPQUFPLE1BQU1DO0lBQ0xDLElBQVk7SUFDVEMsWUFBWSxJQUFJQyxNQUF1QjtJQUN6Q0MsZ0JBQWlDO0lBQ2pDQyxVQUFvQjtJQUNwQkMsU0FBUyxJQUFJSCxNQUE2QjtJQUMxQ0ksU0FBU2YsT0FBT2UsTUFBTSxDQUFDUCxTQUFTUSxJQUFJLEVBQUU7SUFDdENDLGFBQWEsTUFBTTtJQUMzQixZQUFtQkMsT0FBeUIsQ0FBRTtRQUM3QyxJQUFJLENBQUNULEdBQUcsR0FBR1MsU0FBU1Q7UUFDcEIsSUFBSSxDQUFD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
@@ -0,0 +1,259 @@
1
+ function _ts_add_disposable_resource(env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ env.stack.push({
23
+ value: value,
24
+ dispose: dispose,
25
+ async: async
26
+ });
27
+ } else if (async) {
28
+ env.stack.push({
29
+ async: true
30
+ });
31
+ }
32
+ return value;
33
+ }
34
+ function _ts_dispose_resources(env) {
35
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
36
+ var e = new Error(message);
37
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
+ };
39
+ return (_ts_dispose_resources = function _ts_dispose_resources(env) {
40
+ function fail(e) {
41
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
42
+ env.hasError = true;
43
+ }
44
+ var r, s = 0;
45
+ function next() {
46
+ while(r = env.stack.pop()){
47
+ try {
48
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
49
+ if (r.dispose) {
50
+ var result = r.dispose.call(r.value);
51
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
52
+ fail(e);
53
+ return next();
54
+ });
55
+ } else s |= 1;
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
61
+ if (env.hasError) throw env.error;
62
+ }
63
+ return next();
64
+ })(env);
65
+ }
66
+ import { CrucibleBuilder } from "../src/index.js";
67
+ import { beforeEach, describe, expect, it, vi } from "vitest";
68
+ class Disposable {
69
+ [Symbol.dispose]() {
70
+ this.dispose();
71
+ }
72
+ dispose() {}
73
+ }
74
+ class Singleton {
75
+ nonce;
76
+ constructor(){
77
+ this.nonce = getRandomInt();
78
+ }
79
+ }
80
+ describe("CrucibleBuilder", ()=>{
81
+ let builder;
82
+ beforeEach(()=>{
83
+ vi.clearAllMocks();
84
+ builder = new CrucibleBuilder();
85
+ });
86
+ describe("Factories", ()=>{
87
+ const FACTORY_KEY = "MY_FACTORY";
88
+ // using a spy for the factory changes the type
89
+ // this is the only way to ensure the factory is actually called
90
+ it("should support arrow functions", ()=>{
91
+ const builder = new CrucibleBuilder();
92
+ const expected = {
93
+ field: "fieldValue"
94
+ };
95
+ const factory = ()=>expected;
96
+ builder.registerRequestScoped(FACTORY_KEY, factory);
97
+ const container = builder.build();
98
+ const actual = container.resolve(FACTORY_KEY);
99
+ expect(actual).toEqual(expected);
100
+ });
101
+ });
102
+ describe("Dispose", ()=>{
103
+ const dispose = vi.spyOn(Disposable.prototype, "dispose");
104
+ it("should dispose the child scope", ()=>{
105
+ {
106
+ const env = {
107
+ stack: [],
108
+ error: void 0,
109
+ hasError: false
110
+ };
111
+ try {
112
+ const builder = new CrucibleBuilder();
113
+ builder.registerRequestScoped(Disposable);
114
+ const container = builder.build();
115
+ const scope = _ts_add_disposable_resource(env, container.beginScope(), false);
116
+ scope.resolve(Disposable);
117
+ } catch (e) {
118
+ env.error = e;
119
+ env.hasError = true;
120
+ } finally{
121
+ _ts_dispose_resources(env);
122
+ }
123
+ }
124
+ expect(dispose).toHaveBeenCalled();
125
+ });
126
+ it("should dispose root container without recursive self-disposal", ()=>{
127
+ const builder = new CrucibleBuilder();
128
+ const container = builder.build();
129
+ container.resolve("LIFETIME_SCOPE");
130
+ expect(()=>container[Symbol.dispose]()).not.toThrow();
131
+ });
132
+ // it("should support n level scoped?", () => {
133
+ // const builder = new CrucibleBuilder();
134
+ // builder.registerRequestScoped(Disposable);
135
+ // const container = builder.build();
136
+ // using scope = container.beginScope();
137
+ // });
138
+ });
139
+ describe("Singletons", ()=>{
140
+ it("should resolve singleton from the root scope", ()=>{
141
+ // this checks that the same singleton is resolved in all child scopes
142
+ const builder = new CrucibleBuilder();
143
+ builder.registerSingleton(Singleton);
144
+ const container = builder.build();
145
+ const child = container.beginScope();
146
+ const inst1 = container.resolve(Singleton);
147
+ const inst2 = child.resolve(Singleton);
148
+ const manualInst = new Singleton();
149
+ expect(inst1).toBe(inst2);
150
+ expect(manualInst).not.toEqual(inst1);
151
+ expect(manualInst).not.toEqual(inst2);
152
+ });
153
+ });
154
+ describe("registerRequestScoped", ()=>{
155
+ it("should resolve the same instance in the same scope", ()=>{
156
+ builder.registerRequestScoped(Disposable);
157
+ const container = builder.build();
158
+ const childA = container.beginScope(getRandomInt().toString());
159
+ const serviceA = childA.resolve(Disposable);
160
+ const serviceB = childA.resolve(Disposable);
161
+ expect(serviceA).toBe(serviceB);
162
+ });
163
+ it("should resolve a new instance per scope", ()=>{
164
+ builder.registerRequestScoped(Disposable);
165
+ const container = builder.build();
166
+ const childA = container.beginScope(generateScopeId());
167
+ const serviceA = childA.resolve(Disposable);
168
+ const childB = container.beginScope(generateScopeId());
169
+ const serviceB = childB.resolve(Disposable);
170
+ expect(serviceA).not.toBe(serviceB);
171
+ });
172
+ });
173
+ describe("beginScope", ()=>{
174
+ it("should support n level isolated scopes", ()=>{
175
+ builder.registerRequestScoped(Disposable);
176
+ const container = builder.build();
177
+ const childA = container.beginScope(generateScopeId());
178
+ const gandchildA = childA.beginScope(generateScopeId());
179
+ const serviceChildA = childA.resolve(Disposable);
180
+ const serviceGandchildA = gandchildA.resolve(Disposable);
181
+ expect(serviceChildA).not.toBe(serviceGandchildA);
182
+ });
183
+ it("should not dispose the child scope if parent is disposed", ()=>{
184
+ builder.registerRequestScoped(Disposable);
185
+ const container = builder.build();
186
+ let grandChild;
187
+ {
188
+ const env = {
189
+ stack: [],
190
+ error: void 0,
191
+ hasError: false
192
+ };
193
+ try {
194
+ const child = _ts_add_disposable_resource(env, container.beginScope(generateScopeId()), false);
195
+ grandChild = child.beginScope(generateScopeId());
196
+ } catch (e) {
197
+ env.error = e;
198
+ env.hasError = true;
199
+ } finally{
200
+ _ts_dispose_resources(env);
201
+ }
202
+ }
203
+ expect(()=>grandChild.resolve(Disposable)).not.toThrow();
204
+ });
205
+ it("should throw if resolving singleton owned by root if roto scope disposed", ()=>{
206
+ builder.registerSingleton(Singleton);
207
+ let child;
208
+ {
209
+ const env = {
210
+ stack: [],
211
+ error: void 0,
212
+ hasError: false
213
+ };
214
+ try {
215
+ const container = _ts_add_disposable_resource(env, builder.build(), false);
216
+ child = container.beginScope(generateScopeId());
217
+ } catch (e) {
218
+ env.error = e;
219
+ env.hasError = true;
220
+ } finally{
221
+ _ts_dispose_resources(env);
222
+ }
223
+ }
224
+ expect(()=>child.resolve(Singleton)).toThrow();
225
+ });
226
+ it("should dispose if exception is throw", ()=>{
227
+ builder.registerRequestScoped(Disposable);
228
+ let containerRef;
229
+ try {
230
+ const env = {
231
+ stack: [],
232
+ error: void 0,
233
+ hasError: false
234
+ };
235
+ try {
236
+ const container = _ts_add_disposable_resource(env, builder.build(), false);
237
+ containerRef = container;
238
+ throw "ERROR";
239
+ } catch (e) {
240
+ env.error = e;
241
+ env.hasError = true;
242
+ } finally{
243
+ _ts_dispose_resources(env);
244
+ }
245
+ } catch {}
246
+ expect(()=>containerRef.resolve(Disposable)).toThrow();
247
+ });
248
+ });
249
+ });
250
+ function generateScopeId() {
251
+ return getRandomInt().toString();
252
+ }
253
+ function getRandomInt() {
254
+ const min = Math.ceil(0);
255
+ const max = Math.floor(10_000);
256
+ return Math.floor(Math.random() * (max - min + 1)) + min;
257
+ }
258
+
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3Rlc3RzL2NvbnRhaW5lci5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ3J1Y2libGUsIENydWNpYmxlQnVpbGRlciwgdHlwZSBMaWZldGltZVNjb3BlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZVwiO1xuaW1wb3J0IHsgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpIH0gZnJvbSBcInZpdGVzdFwiO1xuXG5jbGFzcyBEaXNwb3NhYmxlIHtcblx0cHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKSB7XG5cdFx0dGhpcy5kaXNwb3NlKCk7XG5cdH1cblx0cHVibGljIGRpc3Bvc2UoKSB7fVxufVxuXG5jbGFzcyBTaW5nbGV0b24ge1xuXHRwdWJsaWMgbm9uY2U6IG51bWJlcjtcblx0cHVibGljIGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubm9uY2UgPSBnZXRSYW5kb21JbnQoKTtcblx0fVxufVxuXG5kZXNjcmliZShcIkNydWNpYmxlQnVpbGRlclwiLCAoKSA9PiB7XG5cdGxldCBidWlsZGVyOiBDcnVjaWJsZUJ1aWxkZXI7XG5cdGJlZm9yZUVhY2goKCkgPT4ge1xuXHRcdHZpLmNsZWFyQWxsTW9ja3MoKTtcblx0XHRidWlsZGVyID0gbmV3IENydWNpYmxlQnVpbGRlcigpO1xuXHR9KTtcblxuXHRkZXNjcmliZShcIkZhY3Rvcmllc1wiLCAoKSA9PiB7XG5cdFx0dHlwZSBGYWN0b3J5UmVzcG9uc2UgPSB7IGZpZWxkOiBcImZpZWxkVmFsdWVcIiB9O1xuXHRcdGNvbnN0IEZBQ1RPUllfS0VZID0gXCJNWV9GQUNUT1JZXCI7XG5cdFx0Ly8gdXNpbmcgYSBzcHkgZm9yIHRoZSBmYWN0b3J5IGNoYW5nZXMgdGhlIHR5cGVcblx0XHQvLyB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBlbnN1cmUgdGhlIGZhY3RvcnkgaXMgYWN0dWFsbHkgY2FsbGVkXG5cdFx0aXQoXCJzaG91bGQgc3VwcG9ydCBhcnJvdyBmdW5jdGlvbnNcIiwgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYnVpbGRlciA9IG5ldyBDcnVjaWJsZUJ1aWxkZXIoKTtcblx0XHRcdGNvbnN0IGV4cGVjdGVkOiBGYWN0b3J5UmVzcG9uc2UgPSB7IGZpZWxkOiBcImZpZWxkVmFsdWVcIiB9O1xuXHRcdFx0Y29uc3QgZmFjdG9yeSA9ICgpID0+IGV4cGVjdGVkO1xuXHRcdFx0YnVpbGRlci5yZWdpc3RlclJlcXVlc3RTY29wZWQ8RmFjdG9yeVJlc3BvbnNlPihGQUNUT1JZX0tFWSwgZmFjdG9yeSk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBidWlsZGVyLmJ1aWxkKCk7XG5cdFx0XHRjb25zdCBhY3R1YWwgPSBjb250YWluZXIucmVzb2x2ZShGQUNUT1JZX0tFWSk7XG5cdFx0XHRleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJEaXNwb3NlXCIsICgpID0+IHtcblx0XHRjb25zdCBkaXNwb3NlID0gdmkuc3B5T24oRGlzcG9zYWJsZS5wcm90b3R5cGUsIFwiZGlzcG9zZVwiKTtcblxuXHRcdGl0KFwic2hvdWxkIGRpc3Bvc2UgdGhlIGNoaWxkIHNjb3BlXCIsICgpID0+IHtcblx0XHRcdHtcblx0XHRcdFx0Y29uc3QgYnVpbGRlciA9IG5ldyBDcnVjaWJsZUJ1aWxkZXIoKTtcblx0XHRcdFx0YnVpbGRlci5yZWdpc3RlclJlcXVlc3RTY29wZWQoRGlzcG9zYWJsZSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IGJ1aWxkZXIuYnVpbGQoKTtcblx0XHRcdFx0dXNpbmcgc2NvcGUgPSBjb250YWluZXIuYmVnaW5TY29wZSgpO1xuXHRcdFx0XHRzY29wZS5yZXNvbHZlKERpc3Bvc2FibGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRleHBlY3QoZGlzcG9zZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJzaG91bGQgZGlzcG9zZSByb290IGNvbnRhaW5lciB3aXRob3V0IHJlY3Vyc2l2ZSBzZWxmLWRpc3Bvc2FsXCIsICgpID0+IHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ3J1Y2libGVCdWlsZGVyKCk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBidWlsZGVyLmJ1aWxkKCk7XG5cdFx0XHRjb250YWluZXIucmVzb2x2ZShcIkxJRkVUSU1FX1NDT1BFXCIpO1xuXG5cdFx0XHRleHBlY3QoKCkgPT4gY29udGFpbmVyW1N5bWJvbC5kaXNwb3NlXSgpKS5ub3QudG9UaHJvdygpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gaXQoXCJzaG91bGQgc3VwcG9ydCBuIGxldmVsIHNjb3BlZD9cIiwgKCkgPT4ge1xuXHRcdC8vIFx0Y29uc3QgYnVpbGRlciA9IG5ldyBDcnVjaWJsZUJ1aWxkZXIoKTtcblx0XHQvLyBcdGJ1aWxkZXIucmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKERpc3Bvc2FibGUpO1xuXHRcdC8vIFx0Y29uc3QgY29udGFpbmVyID0gYnVpbGRlci5idWlsZCgpO1xuXHRcdC8vIFx0dXNpbmcgc2NvcGUgPSBjb250YWluZXIuYmVnaW5TY29wZSgpO1xuXG5cdFx0Ly8gfSk7XG5cdH0pO1xuXG5cdGRlc2NyaWJlKFwiU2luZ2xldG9uc1wiLCAoKSA9PiB7XG5cdFx0aXQoXCJzaG91bGQgcmVzb2x2ZSBzaW5nbGV0b24gZnJvbSB0aGUgcm9vdCBzY29wZVwiLCAoKSA9PiB7XG5cdFx0XHQvLyB0aGlzIGNoZWNrcyB0aGF0IHRoZSBzYW1lIHNpbmdsZXRvbiBpcyByZXNvbHZlZCBpbiBhbGwgY2hpbGQgc2NvcGVzXG5cdFx0XHRjb25zdCBidWlsZGVyID0gbmV3IENydWNpYmxlQnVpbGRlcigpO1xuXHRcdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihTaW5nbGV0b24pO1xuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gYnVpbGRlci5idWlsZCgpO1xuXHRcdFx0Y29uc3QgY2hpbGQgPSBjb250YWluZXIuYmVnaW5TY29wZSgpO1xuXHRcdFx0Y29uc3QgaW5zdDEgPSBjb250YWluZXIucmVzb2x2ZShTaW5nbGV0b24pO1xuXHRcdFx0Y29uc3QgaW5zdDIgPSBjaGlsZC5yZXNvbHZlKFNpbmdsZXRvbik7XG5cdFx0XHRjb25zdCBtYW51YWxJbnN0ID0gbmV3IFNpbmdsZXRvbigpO1xuXHRcdFx0ZXhwZWN0KGluc3QxKS50b0JlKGluc3QyKTtcblx0XHRcdGV4cGVjdChtYW51YWxJbnN0KS5ub3QudG9FcXVhbChpbnN0MSk7XG5cdFx0XHRleHBlY3QobWFudWFsSW5zdCkubm90LnRvRXF1YWwoaW5zdDIpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInJlZ2lzdGVyUmVxdWVzdFNjb3BlZFwiLCAoKSA9PiB7XG5cdFx0aXQoXCJzaG91bGQgcmVzb2x2ZSB0aGUgc2FtZSBpbnN0YW5jZSBpbiB0aGUgc2FtZSBzY29wZVwiLCAoKSA9PiB7XG5cdFx0XHRidWlsZGVyLnJlZ2lzdGVyUmVxdWVzdFNjb3BlZChEaXNwb3NhYmxlKTtcblx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IGJ1aWxkZXIuYnVpbGQoKTtcblx0XHRcdGNvbnN0IGNoaWxkQSA9IGNvbnRhaW5lci5iZWdpblNjb3BlKGdldFJhbmRvbUludCgpLnRvU3RyaW5nKCkpO1xuXHRcdFx0Y29uc3Qgc2VydmljZUEgPSBjaGlsZEEucmVzb2x2ZShEaXNwb3NhYmxlKTtcblx0XHRcdGNvbnN0IHNlcnZpY2VCID0gY2hpbGRBLnJlc29sdmUoRGlzcG9zYWJsZSk7XG5cdFx0XHRleHBlY3Qoc2VydmljZUEpLnRvQmUoc2VydmljZUIpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJzaG91bGQgcmVzb2x2ZSBhIG5ldyBpbnN0YW5jZSBwZXIgc2NvcGVcIiwgKCkgPT4ge1xuXHRcdFx0YnVpbGRlci5yZWdpc3RlclJlcXVlc3RTY29wZWQoRGlzcG9zYWJsZSk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBidWlsZGVyLmJ1aWxkKCk7XG5cdFx0XHRjb25zdCBjaGlsZEEgPSBjb250YWluZXIuYmVnaW5TY29wZShnZW5lcmF0ZVNjb3BlSWQoKSk7XG5cdFx0XHRjb25zdCBzZXJ2aWNlQSA9IGNoaWxkQS5yZXNvbHZlKERpc3Bvc2FibGUpO1xuXHRcdFx0Y29uc3QgY2hpbGRCID0gY29udGFpbmVyLmJlZ2luU2NvcGUoZ2VuZXJhdGVTY29wZUlkKCkpO1xuXHRcdFx0Y29uc3Qgc2VydmljZUIgPSBjaGlsZEIucmVzb2x2ZShEaXNwb3NhYmxlKTtcblx0XHRcdGV4cGVjdChzZXJ2aWNlQSkubm90LnRvQmUoc2VydmljZUIpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcImJlZ2luU2NvcGVcIiwgKCkgPT4ge1xuXHRcdGl0KFwic2hvdWxkIHN1cHBvcnQgbiBsZXZlbCBpc29sYXRlZCBzY29wZXNcIiwgKCkgPT4ge1xuXHRcdFx0YnVpbGRlci5yZWdpc3RlclJlcXVlc3RTY29wZWQoRGlzcG9zYWJsZSk7XG5cdFx0XHRjb25zdCBjb250YWluZXIgPSBidWlsZGVyLmJ1aWxkKCk7XG5cdFx0XHRjb25zdCBjaGlsZEEgPSBjb250YWluZXIuYmVnaW5TY29wZShnZW5lcmF0ZVNjb3BlSWQoKSk7XG5cdFx0XHRjb25zdCBnYW5kY2hpbGRBID0gY2hpbGRBLmJlZ2luU2NvcGUoZ2VuZXJhdGVTY29wZUlkKCkpO1xuXHRcdFx0Y29uc3Qgc2VydmljZUNoaWxkQSA9IGNoaWxkQS5yZXNvbHZlKERpc3Bvc2FibGUpO1xuXHRcdFx0Y29uc3Qgc2VydmljZUdhbmRjaGlsZEEgPSBnYW5kY2hpbGRBLnJlc29sdmUoRGlzcG9zYWJsZSk7XG5cdFx0XHRleHBlY3Qoc2VydmljZUNoaWxkQSkubm90LnRvQmUoc2VydmljZUdhbmRjaGlsZEEpO1xuXHRcdH0pO1xuXG5cdFx0aXQoXCJzaG91bGQgbm90IGRpc3Bvc2UgdGhlIGNoaWxkIHNjb3BlIGlmIHBhcmVudCBpcyBkaXNwb3NlZFwiLCAoKSA9PiB7XG5cdFx0XHRidWlsZGVyLnJlZ2lzdGVyUmVxdWVzdFNjb3BlZChEaXNwb3NhYmxlKTtcblx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IGJ1aWxkZXIuYnVpbGQoKTtcblx0XHRcdGxldCBncmFuZENoaWxkOiBDcnVjaWJsZTtcblx0XHRcdHtcblx0XHRcdFx0dXNpbmcgY2hpbGQgPSBjb250YWluZXIuYmVnaW5TY29wZShnZW5lcmF0ZVNjb3BlSWQoKSk7XG5cdFx0XHRcdGdyYW5kQ2hpbGQgPSBjaGlsZC5iZWdpblNjb3BlKGdlbmVyYXRlU2NvcGVJZCgpKTtcblx0XHRcdH1cblx0XHRcdGV4cGVjdCgoKSA9PiBncmFuZENoaWxkLnJlc29sdmUoRGlzcG9zYWJsZSkpLm5vdC50b1Rocm93KCk7XG5cdFx0fSk7XG5cblx0XHRpdChcInNob3VsZCB0aHJvdyBpZiByZXNvbHZpbmcgc2luZ2xldG9uIG93bmVkIGJ5IHJvb3QgaWYgcm90byBzY29wZSBkaXNwb3NlZFwiLCAoKSA9PiB7XG5cdFx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKFNpbmdsZXRvbik7XG5cdFx0XHRsZXQgY2hpbGQ6IExpZmV0aW1lU2NvcGU7XG5cdFx0XHR7XG5cdFx0XHRcdHVzaW5nIGNvbnRhaW5lciA9IGJ1aWxkZXIuYnVpbGQoKTtcblx0XHRcdFx0Y2hpbGQgPSBjb250YWluZXIuYmVnaW5TY29wZShnZW5lcmF0ZVNjb3BlSWQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGV4cGVjdCgoKSA9PiBjaGlsZC5yZXNvbHZlKFNpbmdsZXRvbikpLnRvVGhyb3coKTtcblx0XHR9KTtcblxuXHRcdGl0KFwic2hvdWxkIGRpc3Bvc2UgaWYgZXhjZXB0aW9uIGlzIHRocm93XCIsICgpID0+IHtcblx0XHRcdGJ1aWxkZXIucmVnaXN0ZXJSZXF1ZXN0U2NvcGVkKERpc3Bvc2FibGUpO1xuXHRcdFx0bGV0IGNvbnRhaW5lclJlZjogQ3J1Y2libGU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1c2luZyBjb250YWluZXIgPSBidWlsZGVyLmJ1aWxkKCk7XG5cdFx0XHRcdGNvbnRhaW5lclJlZiA9IGNvbnRhaW5lcjtcblx0XHRcdFx0dGhyb3cgXCJFUlJPUlwiO1xuXHRcdFx0fSBjYXRjaCB7fVxuXG5cdFx0XHRleHBlY3QoKCkgPT4gY29udGFpbmVyUmVmLnJlc29sdmUoRGlzcG9zYWJsZSkpLnRvVGhyb3coKTtcblx0XHR9KTtcblx0fSk7XG59KTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVTY29wZUlkKCkge1xuXHRyZXR1cm4gZ2V0UmFuZG9tSW50KCkudG9TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmFuZG9tSW50KCkge1xuXHRjb25zdCBtaW4gPSBNYXRoLmNlaWwoMCk7XG5cdGNvbnN0IG1heCA9IE1hdGguZmxvb3IoMTBfMDAwKTtcblx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG59XG4iXSwibmFtZXMiOlsiQ3J1Y2libGVCdWlsZGVyIiwiYmVmb3JlRWFjaCIsImRlc2NyaWJlIiwiZXhwZWN0IiwiaXQiLCJ2aSIsIkRpc3Bvc2FibGUiLCJTeW1ib2wiLCJkaXNwb3NlIiwiU2luZ2xldG9uIiwibm9uY2UiLCJnZXRSYW5kb21JbnQiLCJidWlsZGVyIiwiY2xlYXJBbGxNb2NrcyIsIkZBQ1RPUllfS0VZIiwiZXhwZWN0ZWQiLCJmaWVsZCIsImZhY3RvcnkiLCJyZWdpc3RlclJlcXVlc3RTY29wZWQiLCJjb250YWluZXIiLCJidWlsZCIsImFjdHVhbCIsInJlc29sdmUiLCJ0b0VxdWFsIiwic3B5T24iLCJwcm90b3R5cGUiLCJzY29wZSIsImJlZ2luU2NvcGUiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwibm90IiwidG9UaHJvdyIsInJlZ2lzdGVyU2luZ2xldG9uIiwiY2hpbGQiLCJpbnN0MSIsImluc3QyIiwibWFudWFsSW5zdCIsInRvQmUiLCJjaGlsZEEiLCJ0b1N0cmluZyIsInNlcnZpY2VBIiwic2VydmljZUIiLCJnZW5lcmF0ZVNjb3BlSWQiLCJjaGlsZEIiLCJnYW5kY2hpbGRBIiwic2VydmljZUNoaWxkQSIsInNlcnZpY2VHYW5kY2hpbGRBIiwiZ3JhbmRDaGlsZCIsImNvbnRhaW5lclJlZiIsIm1pbiIsIk1hdGgiLCJjZWlsIiwibWF4IiwiZmxvb3IiLCJyYW5kb20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBd0JBLGVBQWUsUUFBNEIsa0JBQXFCO0FBQ3hGLFNBQVNDLFVBQVUsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxRQUFRLFNBQVM7QUFFOUQsTUFBTUM7SUFDRSxDQUFDQyxPQUFPQyxPQUFPLENBQUMsR0FBRztRQUN6QixJQUFJLENBQUNBLE9BQU87SUFDYjtJQUNPQSxVQUFVLENBQUM7QUFDbkI7QUFFQSxNQUFNQztJQUNFQyxNQUFjO0lBQ3JCLGFBQXFCO1FBQ3BCLElBQUksQ0FBQ0EsS0FBSyxHQUFHQztJQUNkO0FBQ0Q7QUFFQVQsU0FBUyxtQkFBbUI7SUFDM0IsSUFBSVU7SUFDSlgsV0FBVztRQUNWSSxHQUFHUSxhQUFhO1FBQ2hCRCxVQUFVLElBQUlaO0lBQ2Y7SUFFQUUsU0FBUyxhQUFhO1FBRXJCLE1BQU1ZLGNBQWM7UUFDcEIsK0NBQStDO1FBQy9DLGdFQUFnRTtRQUNoRVYsR0FBRyxrQ0FBa0M7WUFDcEMsTUFBTVEsVUFBVSxJQUFJWjtZQUNwQixNQUFNZSxXQUE0QjtnQkFBRUMsT0FBTztZQUFhO1lBQ3hELE1BQU1DLFVBQVUsSUFBTUY7WUFDdEJILFFBQVFNLHFCQUFxQixDQUFrQkosYUFBYUc7WUFDNUQsTUFBTUUsWUFBWVAsUUFBUVEsS0FBSztZQUMvQixNQUFNQyxTQUFTRixVQUFVRyxPQUFPLENBQUNSO1lBQ2pDWCxPQUFPa0IsUUFBUUUsT0FBTyxDQUFDUjtRQUN4QjtJQUNEO0lBRUFiLFNBQVMsV0FBVztRQUNuQixNQUFNTSxVQUFVSCxHQUFHbUIsS0FBSyxDQUFDbEIsV0FBV21CLFNBQVMsRUFBRTtRQUUv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
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get CrucibleMeta () {
13
- return CrucibleMeta;
14
- },
15
- get LifetimeScopeToken () {
16
- return LifetimeScopeToken;
17
- },
18
- get Scopes () {
19
- return Scopes;
20
- }
21
- });
22
- const Crucible = "Crucible";
23
- const LifetimeScopeToken = Symbol("LifetimeScope");
24
- const CrucibleMeta = {
25
- injecttoken: `${Crucible}:injecttoken`
26
- };
27
- const Scopes = {
28
- request: "request",
29
- singleton: "single-instance",
30
- transient: "transient"
31
- };
32
-
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9jb25zdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNjb3BlIH0gZnJvbSBcIi4vdHlwZXMvdHlwZXMuanNcIjtcblxuY29uc3QgQ3J1Y2libGUgPSBcIkNydWNpYmxlXCI7XG50eXBlIENydWNpYmxlTWV0YSA9IFwiaW5qZWN0dG9rZW5cIjtcblxuZXhwb3J0IGNvbnN0IExpZmV0aW1lU2NvcGVUb2tlbiA9IFN5bWJvbChcIkxpZmV0aW1lU2NvcGVcIik7XG5cbmV4cG9ydCBjb25zdCBDcnVjaWJsZU1ldGEgPSB7XG5cdGluamVjdHRva2VuOiBgJHtDcnVjaWJsZX06aW5qZWN0dG9rZW5gLFxufSBzYXRpc2ZpZXMgUmVjb3JkPENydWNpYmxlTWV0YSwgc3RyaW5nPjtcblxuZXhwb3J0IGNvbnN0IFNjb3BlcyA9IHtcblx0cmVxdWVzdDogXCJyZXF1ZXN0XCIsXG5cdHNpbmdsZXRvbjogXCJzaW5nbGUtaW5zdGFuY2VcIixcblx0dHJhbnNpZW50OiBcInRyYW5zaWVudFwiLFxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgU2NvcGU+O1xuIl0sIm5hbWVzIjpbIkNydWNpYmxlTWV0YSIsIkxpZmV0aW1lU2NvcGVUb2tlbiIsIlNjb3BlcyIsIkNydWNpYmxlIiwiU3ltYm9sIiwiaW5qZWN0dG9rZW4iLCJyZXF1ZXN0Iiwic2luZ2xldG9uIiwidHJhbnNpZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQU9hQTtlQUFBQTs7UUFGQUM7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7QUFUYixNQUFNQyxXQUFXO0FBR1YsTUFBTUYscUJBQXFCRyxPQUFPO0FBRWxDLE1BQU1KLGVBQWU7SUFDM0JLLGFBQWEsR0FBR0YsU0FBUyxZQUFZLENBQUM7QUFDdkM7QUFFTyxNQUFNRCxTQUFTO0lBQ3JCSSxTQUFTO0lBQ1RDLFdBQVc7SUFDWEMsV0FBVztBQUNaIn0=
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./inject.decorator.js"), exports);
6
- _export_star(require("./injectable.dectorator.js"), exports);
7
- function _export_star(from, to) {
8
- Object.keys(from).forEach(function(k) {
9
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
10
- Object.defineProperty(to, k, {
11
- enumerable: true,
12
- get: function() {
13
- return from[k];
14
- }
15
- });
16
- }
17
- });
18
- return from;
19
- }
20
-
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2luamVjdC5kZWNvcmF0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luamVjdGFibGUuZGVjdG9yYXRvci5qc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0EifQ==
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "inject", {
6
- enumerable: true,
7
- get: function() {
8
- return inject;
9
- }
10
- });
11
- const _reflection = require("@decohere/nexus/reflection");
12
- const _const = require("../const.js");
13
- function inject(key) {
14
- return (target, _propertyKey, idx)=>{
15
- const metadata = getExistingMeta(target);
16
- metadata.set(idx, {
17
- key
18
- });
19
- (0, _reflection.defineMeta)(_const.CrucibleMeta.injecttoken, metadata, target);
20
- };
21
- }
22
- function getExistingMeta(target) {
23
- const meta = (0, _reflection.getMeta)(_const.CrucibleMeta.injecttoken, target) ?? new Map();
24
- return meta;
25
- }
26
-
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdC5kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lTWV0YSwgZ2V0TWV0YSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ3J1Y2libGVNZXRhIH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEluamVjdGlvbk1ldGFkYXRhID0gTWFwPG51bWJlciwgSW5qZWN0aW9uVG9rZW4+O1xuXG5leHBvcnQgdHlwZSBJbmplY3Rpb25Ub2tlbiA9IHtcblx0a2V5OiBzdHJpbmcgfCBzeW1ib2w7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG5cdHJldHVybiAodGFyZ2V0OiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sIHwgdW5kZWZpbmVkLCBpZHg6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZ2V0RXhpc3RpbmdNZXRhKHRhcmdldCk7XG5cdFx0bWV0YWRhdGEuc2V0KGlkeCwgeyBrZXkgfSk7XG5cdFx0ZGVmaW5lTWV0YShDcnVjaWJsZU1ldGEuaW5qZWN0dG9rZW4sIG1ldGFkYXRhLCB0YXJnZXQpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRFeGlzdGluZ01ldGEodGFyZ2V0OiBvYmplY3QpIHtcblx0Y29uc3QgbWV0YSA9XG5cdFx0Z2V0TWV0YTxNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4+KENydWNpYmxlTWV0YS5pbmplY3R0b2tlbiwgdGFyZ2V0KSA/P1xuXHRcdG5ldyBNYXA8bnVtYmVyLCBJbmplY3Rpb25Ub2tlbj4oKTtcblx0cmV0dXJuIG1ldGE7XG59XG4iXSwibmFtZXMiOlsiaW5qZWN0Iiwia2V5IiwidGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiaWR4IiwibWV0YWRhdGEiLCJnZXRFeGlzdGluZ01ldGEiLCJzZXQiLCJkZWZpbmVNZXRhIiwiQ3J1Y2libGVNZXRhIiwiaW5qZWN0dG9rZW4iLCJtZXRhIiwiZ2V0TWV0YSIsIk1hcCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFTZ0JBOzs7ZUFBQUE7Ozs0QkFUb0I7dUJBQ1A7QUFRdEIsU0FBU0EsT0FBT0MsR0FBb0I7SUFDMUMsT0FBTyxDQUFDQyxRQUFnQkMsY0FBMkNDO1FBQ2xFLE1BQU1DLFdBQVdDLGdCQUFnQko7UUFDakNHLFNBQVNFLEdBQUcsQ0FBQ0gsS0FBSztZQUFFSDtRQUFJO1FBQ3hCTyxJQUFBQSxzQkFBVSxFQUFDQyxtQkFBWSxDQUFDQyxXQUFXLEVBQUVMLFVBQVVIO0lBQ2hEO0FBQ0Q7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDdEMsTUFBTVMsT0FDTEMsSUFBQUEsbUJBQU8sRUFBOEJILG1CQUFZLENBQUNDLFdBQVcsRUFBRVIsV0FDL0QsSUFBSVc7SUFDTCxPQUFPRjtBQUNSIn0=
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "injectable", {
6
- enumerable: true,
7
- get: function() {
8
- return injectable;
9
- }
10
- });
11
- function injectable() {
12
- // no implementation for now. Just used to ensure reflect metadata is generated
13
- return ()=>{};
14
- }
15
-
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9kZWNvcmF0b3JzL2luamVjdGFibGUuZGVjdG9yYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZSgpOiBDbGFzc0RlY29yYXRvciB7XG5cdC8vIG5vIGltcGxlbWVudGF0aW9uIGZvciBub3cuIEp1c3QgdXNlZCB0byBlbnN1cmUgcmVmbGVjdCBtZXRhZGF0YSBpcyBnZW5lcmF0ZWRcblx0cmV0dXJuICgpID0+IHt9O1xufVxuIl0sIm5hbWVzIjpbImluamVjdGFibGUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBQWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQTtJQUNmLCtFQUErRTtJQUMvRSxPQUFPLEtBQU87QUFDZiJ9
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./const.js"), exports);
6
- _export_star(require("./services/index.js"), exports);
7
- _export_star(require("./types/index.js"), exports);
8
- function _export_star(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
- Object.defineProperty(to, k, {
12
- enumerable: true,
13
- get: function() {
14
- return from[k];
15
- }
16
- });
17
- }
18
- });
19
- return from;
20
- }
21
-
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb25zdC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VydmljZXMvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQTtxQkFDQSJ9
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "RegistrationKey", {
6
- enumerable: true,
7
- get: function() {
8
- return RegistrationKey;
9
- }
10
- });
11
- class RegistrationKey {
12
- constructor(key){
13
- this.value = this.getValue(key);
14
- }
15
- value;
16
- getValue(key) {
17
- switch(typeof key){
18
- case "string":
19
- return key;
20
- case "symbol":
21
- return key.valueOf().description;
22
- default:
23
- return key.name;
24
- }
25
- }
26
- toString() {
27
- return this.value;
28
- }
29
- }
30
-
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NydWNpYmxlL3NyYy9tb2RlbHMvcmVnaXN0cmF0aW9uLWtleS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3JlZmxlY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJhdGlvbktleSB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpIHtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZShrZXkpO1xuXHR9XG5cblx0cHVibGljIHZhbHVlOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBnZXRWYWx1ZShrZXk6IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdGFibGUpOiBzdHJpbmcge1xuXHRcdHN3aXRjaCAodHlwZW9mIGtleSkge1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4ga2V5O1xuXHRcdFx0Y2FzZSBcInN5bWJvbFwiOlxuXHRcdFx0XHRyZXR1cm4ga2V5LnZhbHVlT2YoKS5kZXNjcmlwdGlvbjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJSZWdpc3RyYXRpb25LZXkiLCJrZXkiLCJ2YWx1ZSIsImdldFZhbHVlIiwidmFsdWVPZiIsImRlc2NyaXB0aW9uIiwibmFtZSIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7OytCQUVhQTs7O2VBQUFBOzs7QUFBTixNQUFNQTtJQUNaLFlBQW1CQyxHQUFvQyxDQUFFO1FBQ3hELElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDRjtJQUM1QjtJQUVPQyxNQUFjO0lBRWJDLFNBQVNGLEdBQW9DLEVBQVU7UUFDOUQsT0FBUSxPQUFPQTtZQUNkLEtBQUs7Z0JBQ0osT0FBT0E7WUFDUixLQUFLO2dCQUNKLE9BQU9BLElBQUlHLE9BQU8sR0FBR0MsV0FBVztZQUNqQztnQkFDQyxPQUFPSixJQUFJSyxJQUFJO1FBQ2pCO0lBQ0Q7SUFFT0MsV0FBVztRQUNqQixPQUFPLElBQUksQ0FBQ0wsS0FBSztJQUNsQjtBQUNEIn0=