@decohere/crucible 0.0.1-dev.39 → 0.0.1-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/{es6/src → src}/decorators/inject.decorator.js +2 -2
- package/src/services/crucible.js +133 -0
- package/tests/container.spec.js +259 -0
- package/commonjs/src/const.js +0 -33
- package/commonjs/src/decorators/index.js +0 -21
- package/commonjs/src/decorators/inject.decorator.js +0 -27
- package/commonjs/src/decorators/injectable.dectorator.js +0 -16
- package/commonjs/src/index.js +0 -22
- package/commonjs/src/models/registration-key.model.js +0 -31
- package/commonjs/src/models/service-registration.model.js +0 -30
- package/commonjs/src/services/crucible-builder.js +0 -68
- package/commonjs/src/services/crucible.js +0 -165
- package/commonjs/src/services/index.js +0 -21
- package/commonjs/src/services/service-registry.js +0 -50
- package/commonjs/src/types/errors.js +0 -29
- package/commonjs/src/types/index.js +0 -20
- package/commonjs/src/types/types.js +0 -6
- package/es6/src/services/crucible.js +0 -155
- package/types/src/const.d.ts +0 -9
- package/types/src/decorators/index.d.ts +0 -2
- package/types/src/decorators/inject.decorator.d.ts +0 -5
- package/types/src/decorators/injectable.dectorator.d.ts +0 -1
- package/types/src/index.d.ts +0 -3
- package/types/src/models/registration-key.model.d.ts +0 -7
- package/types/src/models/service-registration.model.d.ts +0 -11
- package/types/src/services/crucible-builder.d.ts +0 -26
- package/types/src/services/crucible.d.ts +0 -31
- package/types/src/services/index.d.ts +0 -2
- package/types/src/services/service-registry.d.ts +0 -16
- package/types/src/types/errors.d.ts +0 -6
- package/types/src/types/index.d.ts +0 -1
- package/types/src/types/types.d.ts +0 -1
- /package/{es6/src → src}/const.js +0 -0
- /package/{es6/src → src}/decorators/index.js +0 -0
- /package/{es6/src → src}/decorators/injectable.dectorator.js +0 -0
- /package/{es6/src → src}/index.js +0 -0
- /package/{es6/src → src}/models/registration-key.model.js +0 -0
- /package/{es6/src → src}/models/service-registration.model.js +0 -0
- /package/{es6/src → src}/services/crucible-builder.js +0 -0
- /package/{es6/src → src}/services/index.js +0 -0
- /package/{es6/src → src}/services/service-registry.js +0 -0
- /package/{es6/src → src}/types/errors.js +0 -0
- /package/{es6/src → src}/types/index.js +0 -0
- /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.
|
|
3
|
+
"version": "0.0.1-dev.4",
|
|
4
4
|
"description": "Lightweight dependency injection container with decorator-based wiring",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
34
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
33
|
+
"@decohere/nexus": "0.0.1-dev.4",
|
|
34
|
+
"@decohere/scribe": "0.0.1-dev.4"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {}
|
|
37
37
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineMeta, getMeta } from "
|
|
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/
|
|
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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
|
package/commonjs/src/const.js
DELETED
|
@@ -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
|
package/commonjs/src/index.js
DELETED
|
@@ -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=
|