@zudojs/container 0.0.1
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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/containerCore/containerCore.core.d.ts +52 -0
- package/dist/containerCore/containerCore.core.d.ts.map +1 -0
- package/dist/containerCore/containerCore.core.js +150 -0
- package/dist/containerCore/containerCore.core.js.map +1 -0
- package/dist/containerCore/containerCore.scope.d.ts +58 -0
- package/dist/containerCore/containerCore.scope.d.ts.map +1 -0
- package/dist/containerCore/containerCore.scope.js +100 -0
- package/dist/containerCore/containerCore.scope.js.map +1 -0
- package/dist/containerCore/containerCore.type.d.ts +40 -0
- package/dist/containerCore/containerCore.type.d.ts.map +1 -0
- package/dist/containerCore/containerCore.type.js +5 -0
- package/dist/containerCore/containerCore.type.js.map +1 -0
- package/dist/containerCore/index.d.ts +9 -0
- package/dist/containerCore/index.d.ts.map +1 -0
- package/dist/containerCore/index.js +9 -0
- package/dist/containerCore/index.js.map +1 -0
- package/dist/containerLifecycle/containerLifecycle.core.d.ts +56 -0
- package/dist/containerLifecycle/containerLifecycle.core.d.ts.map +1 -0
- package/dist/containerLifecycle/containerLifecycle.core.js +145 -0
- package/dist/containerLifecycle/containerLifecycle.core.js.map +1 -0
- package/dist/containerLifecycle/index.d.ts +7 -0
- package/dist/containerLifecycle/index.d.ts.map +1 -0
- package/dist/containerLifecycle/index.js +7 -0
- package/dist/containerLifecycle/index.js.map +1 -0
- package/dist/containerOptions/containerOptions.type.d.ts +54 -0
- package/dist/containerOptions/containerOptions.type.d.ts.map +1 -0
- package/dist/containerOptions/containerOptions.type.js +73 -0
- package/dist/containerOptions/containerOptions.type.js.map +1 -0
- package/dist/containerOptions/index.d.ts +7 -0
- package/dist/containerOptions/index.d.ts.map +1 -0
- package/dist/containerOptions/index.js +7 -0
- package/dist/containerOptions/index.js.map +1 -0
- package/dist/containerProvider/containerProvider.core.d.ts +59 -0
- package/dist/containerProvider/containerProvider.core.d.ts.map +1 -0
- package/dist/containerProvider/containerProvider.core.js +61 -0
- package/dist/containerProvider/containerProvider.core.js.map +1 -0
- package/dist/containerProvider/index.d.ts +7 -0
- package/dist/containerProvider/index.d.ts.map +1 -0
- package/dist/containerProvider/index.js +7 -0
- package/dist/containerProvider/index.js.map +1 -0
- package/dist/containerRegistration/containerRegistration.core.d.ts +54 -0
- package/dist/containerRegistration/containerRegistration.core.d.ts.map +1 -0
- package/dist/containerRegistration/containerRegistration.core.js +135 -0
- package/dist/containerRegistration/containerRegistration.core.js.map +1 -0
- package/dist/containerRegistration/index.d.ts +7 -0
- package/dist/containerRegistration/index.d.ts.map +1 -0
- package/dist/containerRegistration/index.js +7 -0
- package/dist/containerRegistration/index.js.map +1 -0
- package/dist/containerRegistry/containerRegistry.core.d.ts +36 -0
- package/dist/containerRegistry/containerRegistry.core.d.ts.map +1 -0
- package/dist/containerRegistry/containerRegistry.core.js +153 -0
- package/dist/containerRegistry/containerRegistry.core.js.map +1 -0
- package/dist/containerRegistry/containerRegistry.error.d.ts +12 -0
- package/dist/containerRegistry/containerRegistry.error.d.ts.map +1 -0
- package/dist/containerRegistry/containerRegistry.error.js +22 -0
- package/dist/containerRegistry/containerRegistry.error.js.map +1 -0
- package/dist/containerRegistry/containerRegistry.type.d.ts +43 -0
- package/dist/containerRegistry/containerRegistry.type.d.ts.map +1 -0
- package/dist/containerRegistry/containerRegistry.type.js +14 -0
- package/dist/containerRegistry/containerRegistry.type.js.map +1 -0
- package/dist/containerRegistry/index.d.ts +9 -0
- package/dist/containerRegistry/index.d.ts.map +1 -0
- package/dist/containerRegistry/index.js +9 -0
- package/dist/containerRegistry/index.js.map +1 -0
- package/dist/containerResolution/containerResolution.core.d.ts +26 -0
- package/dist/containerResolution/containerResolution.core.d.ts.map +1 -0
- package/dist/containerResolution/containerResolution.core.js +125 -0
- package/dist/containerResolution/containerResolution.core.js.map +1 -0
- package/dist/containerResolution/containerResolution.error.d.ts +8 -0
- package/dist/containerResolution/containerResolution.error.d.ts.map +1 -0
- package/dist/containerResolution/containerResolution.error.js +8 -0
- package/dist/containerResolution/containerResolution.error.js.map +1 -0
- package/dist/containerResolution/containerResolution.type.d.ts +38 -0
- package/dist/containerResolution/containerResolution.type.d.ts.map +1 -0
- package/dist/containerResolution/containerResolution.type.js +5 -0
- package/dist/containerResolution/containerResolution.type.js.map +1 -0
- package/dist/containerResolution/index.d.ts +8 -0
- package/dist/containerResolution/index.d.ts.map +1 -0
- package/dist/containerResolution/index.js +8 -0
- package/dist/containerResolution/index.js.map +1 -0
- package/dist/containerScope/containerScope.type.d.ts +17 -0
- package/dist/containerScope/containerScope.type.d.ts.map +1 -0
- package/dist/containerScope/containerScope.type.js +43 -0
- package/dist/containerScope/containerScope.type.js.map +1 -0
- package/dist/containerScope/index.d.ts +7 -0
- package/dist/containerScope/index.d.ts.map +1 -0
- package/dist/containerScope/index.js +7 -0
- package/dist/containerScope/index.js.map +1 -0
- package/dist/containerToken/containerToken.type.d.ts +23 -0
- package/dist/containerToken/containerToken.type.d.ts.map +1 -0
- package/dist/containerToken/containerToken.type.js +45 -0
- package/dist/containerToken/containerToken.type.js.map +1 -0
- package/dist/containerToken/index.d.ts +7 -0
- package/dist/containerToken/index.d.ts.map +1 -0
- package/dist/containerToken/index.js +7 -0
- package/dist/containerToken/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container registration registry.
|
|
3
|
+
*/
|
|
4
|
+
import { defineRegistration, getRegistrationToken, } from "../containerRegistration/containerRegistration.core.js";
|
|
5
|
+
import { unwrapToken } from "../containerToken/containerToken.type.js";
|
|
6
|
+
import { RegistryOperation } from "./containerRegistry.type.js";
|
|
7
|
+
import { DuplicateRegistrationError, RegistrationNotFoundError, } from "@zudojs/errors";
|
|
8
|
+
import { describeRegistryToken } from "./containerRegistry.error.js";
|
|
9
|
+
export class ContainerRegistry {
|
|
10
|
+
registrations = new Map();
|
|
11
|
+
listeners = new Set();
|
|
12
|
+
allowDuplicates;
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
this.allowDuplicates = options.allowDuplicates ?? false;
|
|
15
|
+
}
|
|
16
|
+
register(token, provider, options = {}) {
|
|
17
|
+
const t = unwrapToken(token);
|
|
18
|
+
if (this.registrations.has(t) && !this.allowDuplicates)
|
|
19
|
+
throw new DuplicateRegistrationError(describeRegistryToken(t));
|
|
20
|
+
const prev = this.registrations.get(t);
|
|
21
|
+
const reg = defineRegistration(t, provider, options);
|
|
22
|
+
this.registrations.set(t, reg);
|
|
23
|
+
this.emit({
|
|
24
|
+
operation: prev ? RegistryOperation.REPLACE : RegistryOperation.REGISTER,
|
|
25
|
+
token: t,
|
|
26
|
+
registration: reg,
|
|
27
|
+
previous: prev,
|
|
28
|
+
timestamp: new Date(),
|
|
29
|
+
});
|
|
30
|
+
return reg;
|
|
31
|
+
}
|
|
32
|
+
registerRegistration(registration) {
|
|
33
|
+
const t = getRegistrationToken(registration);
|
|
34
|
+
if (this.registrations.has(t) && !this.allowDuplicates)
|
|
35
|
+
throw new DuplicateRegistrationError(describeRegistryToken(t));
|
|
36
|
+
const prev = this.registrations.get(t);
|
|
37
|
+
this.registrations.set(t, registration);
|
|
38
|
+
this.emit({
|
|
39
|
+
operation: prev ? RegistryOperation.REPLACE : RegistryOperation.REGISTER,
|
|
40
|
+
token: t,
|
|
41
|
+
registration,
|
|
42
|
+
previous: prev,
|
|
43
|
+
timestamp: new Date(),
|
|
44
|
+
});
|
|
45
|
+
return registration;
|
|
46
|
+
}
|
|
47
|
+
replace(token, provider, options = {}) {
|
|
48
|
+
const t = unwrapToken(token);
|
|
49
|
+
if (!this.registrations.has(t))
|
|
50
|
+
throw new RegistrationNotFoundError(describeRegistryToken(t));
|
|
51
|
+
const prev = this.registrations.get(t);
|
|
52
|
+
const reg = defineRegistration(t, provider, options);
|
|
53
|
+
this.registrations.set(t, reg);
|
|
54
|
+
this.emit({
|
|
55
|
+
operation: RegistryOperation.REPLACE,
|
|
56
|
+
token: t,
|
|
57
|
+
registration: reg,
|
|
58
|
+
previous: prev,
|
|
59
|
+
timestamp: new Date(),
|
|
60
|
+
});
|
|
61
|
+
return reg;
|
|
62
|
+
}
|
|
63
|
+
get(token) {
|
|
64
|
+
return this.registrations.get(unwrapToken(token));
|
|
65
|
+
}
|
|
66
|
+
getOrThrow(token) {
|
|
67
|
+
const r = this.get(token);
|
|
68
|
+
if (!r)
|
|
69
|
+
throw new RegistrationNotFoundError(describeRegistryToken(unwrapToken(token)));
|
|
70
|
+
return r;
|
|
71
|
+
}
|
|
72
|
+
has(token) {
|
|
73
|
+
return this.registrations.has(unwrapToken(token));
|
|
74
|
+
}
|
|
75
|
+
remove(token) {
|
|
76
|
+
const t = unwrapToken(token);
|
|
77
|
+
const prev = this.registrations.get(t);
|
|
78
|
+
if (!prev)
|
|
79
|
+
return false;
|
|
80
|
+
const removed = this.registrations.delete(t);
|
|
81
|
+
if (removed)
|
|
82
|
+
this.emit({
|
|
83
|
+
operation: RegistryOperation.REMOVE,
|
|
84
|
+
token: t,
|
|
85
|
+
previous: prev,
|
|
86
|
+
timestamp: new Date(),
|
|
87
|
+
});
|
|
88
|
+
return removed;
|
|
89
|
+
}
|
|
90
|
+
removeOrThrow(token) {
|
|
91
|
+
if (!this.remove(unwrapToken(token)))
|
|
92
|
+
throw new RegistrationNotFoundError(describeRegistryToken(unwrapToken(token)));
|
|
93
|
+
}
|
|
94
|
+
get size() {
|
|
95
|
+
return this.registrations.size;
|
|
96
|
+
}
|
|
97
|
+
getAll() {
|
|
98
|
+
return [...this.registrations.values()];
|
|
99
|
+
}
|
|
100
|
+
getTokens() {
|
|
101
|
+
return [...this.registrations.keys()];
|
|
102
|
+
}
|
|
103
|
+
getByModule(module) {
|
|
104
|
+
return [...this.registrations.values()].filter((r) => r.metadata.module === module);
|
|
105
|
+
}
|
|
106
|
+
getByScope(scope) {
|
|
107
|
+
return [...this.registrations.values()].filter((r) => r.scope === scope);
|
|
108
|
+
}
|
|
109
|
+
find(predicate) {
|
|
110
|
+
return [...this.registrations.values()].filter(predicate);
|
|
111
|
+
}
|
|
112
|
+
getMetadata(token) {
|
|
113
|
+
return this.get(token)?.metadata;
|
|
114
|
+
}
|
|
115
|
+
clear() {
|
|
116
|
+
if (this.registrations.size === 0)
|
|
117
|
+
return;
|
|
118
|
+
this.registrations.clear();
|
|
119
|
+
this.emit({
|
|
120
|
+
operation: RegistryOperation.CLEAR,
|
|
121
|
+
token: Symbol.for("zudojs:container:registry"),
|
|
122
|
+
timestamp: new Date(),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
subscribe(listener) {
|
|
126
|
+
this.listeners.add(listener);
|
|
127
|
+
return () => {
|
|
128
|
+
this.listeners.delete(listener);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
clearListeners() {
|
|
132
|
+
this.listeners.clear();
|
|
133
|
+
}
|
|
134
|
+
emit(event) {
|
|
135
|
+
for (const l of this.listeners) {
|
|
136
|
+
try {
|
|
137
|
+
l(event);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* noop */
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
snapshot() {
|
|
145
|
+
return this.getAll();
|
|
146
|
+
}
|
|
147
|
+
restore(regs) {
|
|
148
|
+
this.registrations.clear();
|
|
149
|
+
for (const r of regs)
|
|
150
|
+
this.registrations.set(getRegistrationToken(r), r);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=containerRegistry.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerRegistry.core.js","sourceRoot":"","sources":["../../src/containerRegistry/containerRegistry.core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,wDAAwD,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAQvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,OAAO,iBAAiB;IACX,aAAa,GAAG,IAAI,GAAG,EAGrC,CAAC;IACa,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,eAAe,CAAU;IAE1C,YAAY,OAAO,GAA6B,EAAE;QAChD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC;IAC1D,CAAC;IAED,QAAQ,CACN,KAA2B,EAC3B,QAA8B,EAC9B,OAAO,GAA8B,EAAE;QAEvC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;YACpD,MAAM,IAAI,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,GAAqC,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ;YACxE,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,GAAG;YACjB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oBAAoB,CAClB,YAAsC;QAEtC,MAAM,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;YACpD,MAAM,IAAI,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,YAA8C,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ;YACxE,KAAK,EAAE,CAAC;YACR,YAAY;YACZ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,CACL,KAA2B,EAC3B,QAA8B,EAC9B,OAAO,GAA8B,EAAE;QAEvC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,yBAAyB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,GAAqC,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,iBAAiB,CAAC,OAAO;YACpC,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,GAAG;YACjB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAI,KAA2B;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CACV,CAAC;IACzC,CAAC;IAED,UAAU,CAAI,KAA2B;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC;YACJ,MAAM,IAAI,yBAAyB,CACjC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAC1C,CAAC;QACJ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,GAAG,CAAI,KAA2B;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAI,KAA2B;QACnC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,OAAO;YACT,IAAI,CAAC,IAAI,CAAC;gBACR,SAAS,EAAE,iBAAiB,CAAC,MAAM;gBACnC,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAC;QACL,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAI,KAA2B;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,IAAI,yBAAyB,CACjC,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAC1C,CAAC;IACN,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CACpC,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAqB;QAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CACF,SAAgD;QAEhD,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,CACT,KAA2B;QAE3B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,iBAAiB,CAAC,KAAK;YAClC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC;YAC9C,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,QAA0B;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,IAAI,CAAC,KAA0B;QACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,CAAC,CAAC,KAAK,CAAC,CAAC;YACX,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,IAAsC;QAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI;YAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,oBAAoB,CAAC,CAAC,CAAC,EACvB,CAAmC,CACpC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/container/containerRegistry/containerRegistry.error
|
|
3
|
+
*
|
|
4
|
+
* Error classes re-exported from @zudojs/errors.
|
|
5
|
+
* This file retains the token description helper used by the registry.
|
|
6
|
+
*/
|
|
7
|
+
import type { InjectionToken, Token } from "../containerToken/containerToken.type.js";
|
|
8
|
+
/**
|
|
9
|
+
* Describes a token for registry diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
export declare function describeRegistryToken<T>(token: Token<T> | InjectionToken<T>): string;
|
|
12
|
+
//# sourceMappingURL=containerRegistry.error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerRegistry.error.d.ts","sourceRoot":"","sources":["../../src/containerRegistry/containerRegistry.error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACN,MAAM,0CAA0C,CAAC;AAIlD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAClC,MAAM,CASR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/container/containerRegistry/containerRegistry.error
|
|
3
|
+
*
|
|
4
|
+
* Error classes re-exported from @zudojs/errors.
|
|
5
|
+
* This file retains the token description helper used by the registry.
|
|
6
|
+
*/
|
|
7
|
+
import { unwrapToken } from "../containerToken/containerToken.type.js";
|
|
8
|
+
/**
|
|
9
|
+
* Describes a token for registry diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
export function describeRegistryToken(token) {
|
|
12
|
+
const normalized = unwrapToken(token);
|
|
13
|
+
if (typeof normalized === "string")
|
|
14
|
+
return normalized;
|
|
15
|
+
if (typeof normalized === "symbol") {
|
|
16
|
+
return normalized.description
|
|
17
|
+
? `Symbol(${normalized.description})`
|
|
18
|
+
: "Symbol()";
|
|
19
|
+
}
|
|
20
|
+
return normalized.name || "AnonymousConstructor";
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=containerRegistry.error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerRegistry.error.js","sourceRoot":"","sources":["../../src/containerRegistry/containerRegistry.error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAmC;IAEnC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC,WAAW;YAC3B,CAAC,CAAC,UAAU,UAAU,CAAC,WAAW,GAAG;YACrC,CAAC,CAAC,UAAU,CAAC;IACjB,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,IAAI,sBAAsB,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the container registry.
|
|
3
|
+
*/
|
|
4
|
+
import type { ContainerRegistration } from "../containerRegistration/containerRegistration.core.js";
|
|
5
|
+
import type { InjectionToken, Token } from "../containerToken/containerToken.type.js";
|
|
6
|
+
/**
|
|
7
|
+
* Normalized registry token.
|
|
8
|
+
*/
|
|
9
|
+
export type RegistryToken<T = unknown> = Token<T> | InjectionToken<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Registry change operation.
|
|
12
|
+
*/
|
|
13
|
+
export declare enum RegistryOperation {
|
|
14
|
+
REGISTER = "register",
|
|
15
|
+
REPLACE = "replace",
|
|
16
|
+
REMOVE = "remove",
|
|
17
|
+
CLEAR = "clear"
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Event emitted when the registry changes.
|
|
21
|
+
*/
|
|
22
|
+
export interface RegistryChangeEvent<T = unknown> {
|
|
23
|
+
readonly operation: RegistryOperation;
|
|
24
|
+
readonly token: RegistryToken<T>;
|
|
25
|
+
readonly registration?: ContainerRegistration<T>;
|
|
26
|
+
readonly previous?: ContainerRegistration<T>;
|
|
27
|
+
readonly timestamp: Date;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Registry subscription callback.
|
|
31
|
+
*/
|
|
32
|
+
export type RegistryListener<T = unknown> = (event: RegistryChangeEvent<T>) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Registry options.
|
|
35
|
+
*/
|
|
36
|
+
export interface ContainerRegistryOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Whether duplicate registrations are allowed.
|
|
39
|
+
* Defaults to false.
|
|
40
|
+
*/
|
|
41
|
+
readonly allowDuplicates?: boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=containerRegistry.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerRegistry.type.d.ts","sourceRoot":"","sources":["../../src/containerRegistry/containerRegistry.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAEpG,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACN,MAAM,0CAA0C,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAEtE;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAC1C,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAC1B,IAAI,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the container registry.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Registry change operation.
|
|
6
|
+
*/
|
|
7
|
+
export var RegistryOperation;
|
|
8
|
+
(function (RegistryOperation) {
|
|
9
|
+
RegistryOperation["REGISTER"] = "register";
|
|
10
|
+
RegistryOperation["REPLACE"] = "replace";
|
|
11
|
+
RegistryOperation["REMOVE"] = "remove";
|
|
12
|
+
RegistryOperation["CLEAR"] = "clear";
|
|
13
|
+
})(RegistryOperation || (RegistryOperation = {}));
|
|
14
|
+
//# sourceMappingURL=containerRegistry.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerRegistry.type.js","sourceRoot":"","sources":["../../src/containerRegistry/containerRegistry.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH;;GAEG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,wCAAmB,CAAA;IACnB,sCAAiB,CAAA;IACjB,oCAAe,CAAA;AACjB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/container/containerRegistry
|
|
3
|
+
*
|
|
4
|
+
* Service registry storage and lookup.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./containerRegistry.type.js";
|
|
7
|
+
export { describeRegistryToken } from "./containerRegistry.error.js";
|
|
8
|
+
export * from "./containerRegistry.core.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/containerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/container/containerRegistry
|
|
3
|
+
*
|
|
4
|
+
* Service registry storage and lookup.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./containerRegistry.type.js";
|
|
7
|
+
export { describeRegistryToken } from "./containerRegistry.error.js";
|
|
8
|
+
export * from "./containerRegistry.core.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/containerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency resolver for Zudojs.
|
|
3
|
+
*/
|
|
4
|
+
import type { RegistrationToken } from "../containerRegistration/containerRegistration.core.js";
|
|
5
|
+
import type { ContainerRegistry } from "../containerRegistry/containerRegistry.core.js";
|
|
6
|
+
import type { ResolutionCache, ResolutionOptions, ResolutionResult } from "./containerResolution.type.js";
|
|
7
|
+
export declare class ContainerResolver {
|
|
8
|
+
private readonly registry;
|
|
9
|
+
private readonly singletonCache;
|
|
10
|
+
constructor(registry: ContainerRegistry);
|
|
11
|
+
resolve<T>(token: RegistrationToken<T>, options?: ResolutionOptions): T;
|
|
12
|
+
resolveDetailed<T>(token: RegistrationToken<T>, options?: ResolutionOptions): ResolutionResult<T>;
|
|
13
|
+
private resolveInternal;
|
|
14
|
+
private createInstance;
|
|
15
|
+
private createFromFactory;
|
|
16
|
+
private createFromClass;
|
|
17
|
+
createScope(): ResolutionCache;
|
|
18
|
+
clearSingletons(): void;
|
|
19
|
+
hasSingleton<T>(token: RegistrationToken<T>): boolean;
|
|
20
|
+
getSingleton<T>(token: RegistrationToken<T>): T | undefined;
|
|
21
|
+
removeSingleton<T>(token: RegistrationToken<T>): boolean;
|
|
22
|
+
clearScope(cache: ResolutionCache): void;
|
|
23
|
+
resolveMany<T>(tokens: readonly RegistrationToken<T>[], options?: ResolutionOptions): T[];
|
|
24
|
+
canResolve<T>(token: RegistrationToken<T>): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=containerResolution.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.core.d.ts","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,wDAAwD,CAAC;AAIhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AASxF,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAQvC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IAEjD,YAAY,QAAQ,EAAE,iBAAiB,EAGtC;IAED,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,iBAAsB,GAAG,CAAC,CAE1E;IAED,eAAe,CAAC,CAAC,EACf,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAAC,CAAC,CAAC,CAKrB;IAED,OAAO,CAAC,eAAe;IAiEvB,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAIvB,WAAW,IAAI,eAAe,CAE7B;IACD,eAAe,IAAI,IAAI,CAEtB;IACD,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAEpD;IACD,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAE1D;IACD,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAEvD;IACD,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEvC;IAED,WAAW,CAAC,CAAC,EACX,MAAM,EAAE,SAAS,iBAAiB,CAAC,CAAC,CAAC,EAAE,EACvC,OAAO,GAAE,iBAAsB,GAC9B,CAAC,EAAE,CAEL;IAED,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAGlD;CACF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency resolver for Zudojs.
|
|
3
|
+
*/
|
|
4
|
+
import { isClassProvider, isExistingProvider, isFactoryProvider, isValueProvider, normalizeProvider, } from "../containerProvider/containerProvider.core.js";
|
|
5
|
+
import { ContainerScope as Scope } from "../containerScope/containerScope.type.js";
|
|
6
|
+
import { getRegistrationToken } from "../containerRegistration/containerRegistration.core.js";
|
|
7
|
+
import { RegistrationNotFoundError } from "@zudojs/errors";
|
|
8
|
+
import { describeRegistryToken } from "../containerRegistry/containerRegistry.error.js";
|
|
9
|
+
import { unwrapToken } from "../containerToken/containerToken.type.js";
|
|
10
|
+
import { CircularDependencyError, ProviderResolutionError, } from "@zudojs/errors";
|
|
11
|
+
import { describeToken } from "../containerToken/containerToken.type.js";
|
|
12
|
+
export class ContainerResolver {
|
|
13
|
+
registry;
|
|
14
|
+
singletonCache;
|
|
15
|
+
constructor(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
this.singletonCache = new Map();
|
|
18
|
+
}
|
|
19
|
+
resolve(token, options = {}) {
|
|
20
|
+
return this.resolveDetailed(token, options).value;
|
|
21
|
+
}
|
|
22
|
+
resolveDetailed(token, options = {}) {
|
|
23
|
+
const normalized = unwrapToken(token);
|
|
24
|
+
const cache = options.cache ?? this.singletonCache;
|
|
25
|
+
const path = options.path ?? [];
|
|
26
|
+
return this.resolveInternal(normalized, cache, path, options);
|
|
27
|
+
}
|
|
28
|
+
resolveInternal(token, cache, path, options) {
|
|
29
|
+
if (path.includes(token))
|
|
30
|
+
throw new CircularDependencyError([...path, token].map((t) => describeToken(t)));
|
|
31
|
+
const registration = this.registry.get(token);
|
|
32
|
+
if (!registration) {
|
|
33
|
+
if (options.autoRegisterClasses !== false &&
|
|
34
|
+
typeof token === "function") {
|
|
35
|
+
this.registry.register(token, { useClass: token }, { scope: Scope.TRANSIENT });
|
|
36
|
+
return this.resolveInternal(token, cache, path, {
|
|
37
|
+
...options,
|
|
38
|
+
autoRegisterClasses: false,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
throw new RegistrationNotFoundError(describeRegistryToken(token));
|
|
42
|
+
}
|
|
43
|
+
const currentPath = [...path, token];
|
|
44
|
+
if (registration.scope !== Scope.TRANSIENT) {
|
|
45
|
+
const cached = cache.get(token);
|
|
46
|
+
if (cached !== undefined) {
|
|
47
|
+
return {
|
|
48
|
+
value: cached,
|
|
49
|
+
token,
|
|
50
|
+
registration,
|
|
51
|
+
scope: registration.scope,
|
|
52
|
+
fromCache: true,
|
|
53
|
+
path: currentPath,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const value = this.createInstance(registration, cache, currentPath, options);
|
|
58
|
+
if (registration.scope === Scope.SINGLETON)
|
|
59
|
+
this.singletonCache.set(token, value);
|
|
60
|
+
else if (registration.scope === Scope.SCOPED)
|
|
61
|
+
cache.set(token, value);
|
|
62
|
+
return {
|
|
63
|
+
value,
|
|
64
|
+
token,
|
|
65
|
+
registration,
|
|
66
|
+
scope: registration.scope,
|
|
67
|
+
fromCache: false,
|
|
68
|
+
path: currentPath,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
createInstance(registration, cache, path, options) {
|
|
72
|
+
const provider = normalizeProvider(registration.provider);
|
|
73
|
+
try {
|
|
74
|
+
if (isValueProvider(provider))
|
|
75
|
+
return provider.useValue;
|
|
76
|
+
if (isExistingProvider(provider))
|
|
77
|
+
return this.resolve(provider.useExisting, { ...options, cache, path });
|
|
78
|
+
if (isFactoryProvider(provider))
|
|
79
|
+
return this.createFromFactory(provider, cache, path, options);
|
|
80
|
+
if (isClassProvider(provider))
|
|
81
|
+
return this.createFromClass(provider.useClass);
|
|
82
|
+
throw new Error("Unsupported container provider.");
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (error instanceof CircularDependencyError ||
|
|
86
|
+
error instanceof ProviderResolutionError)
|
|
87
|
+
throw error;
|
|
88
|
+
const message = error instanceof Error ? error.message : undefined;
|
|
89
|
+
throw new ProviderResolutionError(describeRegistryToken(getRegistrationToken(registration)), message, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
createFromFactory(provider, cache, path, options) {
|
|
93
|
+
const deps = provider.inject ?? [];
|
|
94
|
+
return provider.useFactory(...deps.map((d) => this.resolve(d, { ...options, cache, path })));
|
|
95
|
+
}
|
|
96
|
+
createFromClass(constructor) {
|
|
97
|
+
return new constructor();
|
|
98
|
+
}
|
|
99
|
+
createScope() {
|
|
100
|
+
return new Map();
|
|
101
|
+
}
|
|
102
|
+
clearSingletons() {
|
|
103
|
+
this.singletonCache.clear();
|
|
104
|
+
}
|
|
105
|
+
hasSingleton(token) {
|
|
106
|
+
return this.singletonCache.has(unwrapToken(token));
|
|
107
|
+
}
|
|
108
|
+
getSingleton(token) {
|
|
109
|
+
return this.singletonCache.get(unwrapToken(token));
|
|
110
|
+
}
|
|
111
|
+
removeSingleton(token) {
|
|
112
|
+
return this.singletonCache.delete(unwrapToken(token));
|
|
113
|
+
}
|
|
114
|
+
clearScope(cache) {
|
|
115
|
+
cache.clear();
|
|
116
|
+
}
|
|
117
|
+
resolveMany(tokens, options = {}) {
|
|
118
|
+
return tokens.map((t) => this.resolve(t, options));
|
|
119
|
+
}
|
|
120
|
+
canResolve(token) {
|
|
121
|
+
const t = unwrapToken(token);
|
|
122
|
+
return this.registry.has(t) || typeof t === "function";
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=containerResolution.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.core.js","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.error.d.ts","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.error.js","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for dependency resolution.
|
|
3
|
+
*/
|
|
4
|
+
import type { ContainerRegistration } from "../containerRegistration/containerRegistration.core.js";
|
|
5
|
+
import type { ContainerScope } from "../containerScope/containerScope.type.js";
|
|
6
|
+
import type { Token } from "../containerToken/containerToken.type.js";
|
|
7
|
+
/**
|
|
8
|
+
* A cache containing resolved dependency instances.
|
|
9
|
+
*/
|
|
10
|
+
export type ResolutionCache = Map<Token<unknown>, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Dependency resolution path.
|
|
13
|
+
* Used for diagnostics and circular dependency detection.
|
|
14
|
+
*/
|
|
15
|
+
export type ResolutionPath = readonly Token<unknown>[];
|
|
16
|
+
/**
|
|
17
|
+
* Options controlling dependency resolution.
|
|
18
|
+
*/
|
|
19
|
+
export interface ResolutionOptions {
|
|
20
|
+
/** Existing cache for the current resolution scope. */
|
|
21
|
+
readonly cache?: ResolutionCache;
|
|
22
|
+
/** Current dependency resolution path. Normally managed internally. */
|
|
23
|
+
readonly path?: ResolutionPath;
|
|
24
|
+
/** Whether to allow resolving unregistered classes directly from their constructors. Defaults to true. */
|
|
25
|
+
readonly autoRegisterClasses?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolution result containing the resolved value and diagnostic information.
|
|
29
|
+
*/
|
|
30
|
+
export interface ResolutionResult<T> {
|
|
31
|
+
readonly value: T;
|
|
32
|
+
readonly token: Token<T>;
|
|
33
|
+
readonly registration: ContainerRegistration<T>;
|
|
34
|
+
readonly scope: ContainerScope;
|
|
35
|
+
readonly fromCache: boolean;
|
|
36
|
+
readonly path: ResolutionPath;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=containerResolution.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.type.d.ts","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAEpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0CAA0C,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,uEAAuE;IACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAC/B,0GAA0G;IAC1G,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerResolution.type.js","sourceRoot":"","sources":["../../src/containerResolution/containerResolution.type.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/containerResolution/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/containerResolution/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines how long a dependency instance should live inside the dependency injection container.
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ContainerScope {
|
|
5
|
+
SINGLETON = "singleton",
|
|
6
|
+
SCOPED = "scoped",
|
|
7
|
+
TRANSIENT = "transient"
|
|
8
|
+
}
|
|
9
|
+
export declare const DEFAULT_CONTAINER_SCOPE: ContainerScope;
|
|
10
|
+
export declare function isContainerScope(value: unknown): value is ContainerScope;
|
|
11
|
+
export declare function resolveContainerScope(scope?: ContainerScope): ContainerScope;
|
|
12
|
+
export declare function isSingletonScope(scope: ContainerScope): boolean;
|
|
13
|
+
export declare function isScopedScope(scope: ContainerScope): boolean;
|
|
14
|
+
export declare function isTransientScope(scope: ContainerScope): boolean;
|
|
15
|
+
export declare function isCachedScope(scope: ContainerScope): boolean;
|
|
16
|
+
export declare function describeContainerScope(scope: ContainerScope): string;
|
|
17
|
+
//# sourceMappingURL=containerScope.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerScope.type.d.ts","sourceRoot":"","sources":["../../src/containerScope/containerScope.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,uBAAuB,EAAE,cAAyC,CAAC;AAEhF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAMxE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,cAAc,CAE5E;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAE/D;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAE5D;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAWpE"}
|