@lukman-ss/moke-core 0.1.0 → 0.2.0
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 +274 -21
- package/dist/application.d.ts +27 -2
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +194 -6
- package/dist/application.js.map +1 -1
- package/dist/container.d.ts +37 -4
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +272 -30
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +0 -8
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +3 -12
- package/dist/decorators.js.map +1 -1
- package/dist/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +98 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/formatter.d.ts +3 -0
- package/dist/internal/formatter.d.ts.map +1 -0
- package/dist/internal/formatter.js +20 -0
- package/dist/internal/formatter.js.map +1 -0
- package/dist/lifecycle.d.ts +13 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +2 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/logger.d.ts +14 -3
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +19 -5
- package/dist/logger.js.map +1 -1
- package/dist/module.d.ts +10 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -0
- package/dist/providers.d.ts +15 -11
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js.map +1 -1
- package/dist/reflection.d.ts +25 -0
- package/dist/reflection.d.ts.map +1 -0
- package/dist/reflection.js +34 -0
- package/dist/reflection.js.map +1 -0
- package/dist/service-provider.d.ts +8 -0
- package/dist/service-provider.d.ts.map +1 -0
- package/dist/service-provider.js +7 -0
- package/dist/service-provider.js.map +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +30 -6
package/dist/container.js
CHANGED
|
@@ -1,85 +1,327 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import {
|
|
2
|
+
import { ReflectionHost } from './reflection.js';
|
|
3
|
+
import { AsyncProviderResolutionError, CircularDependencyError, InvalidProviderError, UnknownProviderError, DependencyResolutionError, DuplicateProviderError, PrimitiveDependencyError } from './errors.js';
|
|
3
4
|
export class Container {
|
|
5
|
+
parent;
|
|
4
6
|
registrations = new Map();
|
|
7
|
+
instantiatedInstances = new Set();
|
|
8
|
+
isDisposed = false;
|
|
9
|
+
isActiveResolution = false;
|
|
10
|
+
isFrozen = false;
|
|
11
|
+
constructor(parent) {
|
|
12
|
+
this.parent = parent;
|
|
13
|
+
}
|
|
14
|
+
createChild() {
|
|
15
|
+
return new Container(this);
|
|
16
|
+
}
|
|
17
|
+
freeze() {
|
|
18
|
+
this.isFrozen = true;
|
|
19
|
+
}
|
|
20
|
+
unfrozen() {
|
|
21
|
+
return !this.isFrozen;
|
|
22
|
+
}
|
|
23
|
+
register(provider, scope = 'singleton') {
|
|
24
|
+
if (this.isActiveResolution) {
|
|
25
|
+
throw new Error('Cannot register providers during active resolution');
|
|
26
|
+
}
|
|
27
|
+
if (this.isFrozen) {
|
|
28
|
+
throw new Error('Cannot register providers on a frozen container. Container is already initialized.');
|
|
29
|
+
}
|
|
30
|
+
if (!('provide' in provider) || provider.provide === undefined) {
|
|
31
|
+
throw new InvalidProviderError('Provider must have a "provide" property when using register()');
|
|
32
|
+
}
|
|
33
|
+
const key = this.getTokenKey(provider.provide);
|
|
34
|
+
if (this.hasOwn(provider.provide)) {
|
|
35
|
+
throw new DuplicateProviderError(key);
|
|
36
|
+
}
|
|
37
|
+
this.bind(provider.provide, provider, scope);
|
|
38
|
+
}
|
|
5
39
|
bind(token, providerDef, scope = 'singleton') {
|
|
40
|
+
this.internalBind(token, providerDef, scope, false);
|
|
41
|
+
}
|
|
42
|
+
override(token, providerDef, scope = 'singleton') {
|
|
43
|
+
this.internalBind(token, providerDef, scope, true);
|
|
44
|
+
}
|
|
45
|
+
internalBind(token, providerDef, scope, isOverride) {
|
|
46
|
+
if (this.isFrozen) {
|
|
47
|
+
throw new Error('Cannot register providers on a frozen container. Container is already initialized.');
|
|
48
|
+
}
|
|
6
49
|
const key = this.getTokenKey(token);
|
|
50
|
+
if (!isOverride && this.hasOwn(token)) {
|
|
51
|
+
throw new DuplicateProviderError(key);
|
|
52
|
+
}
|
|
53
|
+
if (isOverride && this.registrations.has(key)) {
|
|
54
|
+
const existing = this.registrations.get(key);
|
|
55
|
+
// Clean up old instances/promises to allow immediate substitution
|
|
56
|
+
if (existing.instance && typeof existing.instance === 'object') {
|
|
57
|
+
this.instantiatedInstances.delete(existing.instance);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
7
60
|
let provider;
|
|
8
61
|
if (typeof providerDef === 'function') {
|
|
9
|
-
provider = {
|
|
62
|
+
provider = { useClass: providerDef };
|
|
10
63
|
}
|
|
11
64
|
else {
|
|
12
65
|
provider = providerDef;
|
|
66
|
+
if ('provide' in provider && provider.provide !== undefined && provider.provide !== token) {
|
|
67
|
+
throw new InvalidProviderError(`Mismatch between bound token and provider.provide`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (!('useClass' in provider) && !('useValue' in provider) && !('useFactory' in provider) && !('useExisting' in provider)) {
|
|
71
|
+
throw new InvalidProviderError(`Provider definition is invalid. Must provide useClass, useValue, useFactory, or useExisting.`);
|
|
13
72
|
}
|
|
73
|
+
if ('useExisting' in provider) {
|
|
74
|
+
scope = 'transient';
|
|
75
|
+
}
|
|
76
|
+
// Always create a fresh registration entry without instance or asyncPromise attached
|
|
14
77
|
this.registrations.set(key, { provider, scope });
|
|
15
78
|
}
|
|
16
79
|
singleton(token, providerDef) {
|
|
17
80
|
this.bind(token, providerDef || token, 'singleton');
|
|
18
81
|
}
|
|
82
|
+
scoped(token, providerDef) {
|
|
83
|
+
this.bind(token, providerDef || token, 'scoped');
|
|
84
|
+
}
|
|
19
85
|
transient(token, providerDef) {
|
|
20
86
|
this.bind(token, providerDef || token, 'transient');
|
|
21
87
|
}
|
|
22
88
|
instance(token, value) {
|
|
23
|
-
this.
|
|
24
|
-
|
|
89
|
+
const key = this.getTokenKey(token);
|
|
90
|
+
if (this.hasOwn(token))
|
|
91
|
+
throw new DuplicateProviderError(key);
|
|
92
|
+
this.registrations.set(key, {
|
|
93
|
+
provider: { useValue: value },
|
|
25
94
|
scope: 'singleton',
|
|
26
95
|
instance: value
|
|
27
96
|
});
|
|
97
|
+
this.instantiatedInstances.add(value);
|
|
28
98
|
}
|
|
29
99
|
factory(token, factory, scope = 'singleton') {
|
|
30
|
-
this.bind(token, {
|
|
100
|
+
this.bind(token, { useFactory: factory }, scope);
|
|
31
101
|
}
|
|
32
102
|
has(token) {
|
|
103
|
+
return this.hasRegistration(this.getTokenKey(token));
|
|
104
|
+
}
|
|
105
|
+
hasOwn(token) {
|
|
33
106
|
return this.registrations.has(this.getTokenKey(token));
|
|
34
107
|
}
|
|
35
108
|
resolve(token) {
|
|
36
|
-
|
|
109
|
+
try {
|
|
110
|
+
return this.internalResolveSync(token, []);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
if (e.name === 'DependencyResolutionError')
|
|
114
|
+
throw e;
|
|
115
|
+
throw new DependencyResolutionError(token, e, []);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async resolveAsync(token) {
|
|
119
|
+
try {
|
|
120
|
+
return await this.internalResolveAsync(token, []);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
if (e.name === 'DependencyResolutionError')
|
|
124
|
+
throw e;
|
|
125
|
+
throw new DependencyResolutionError(token, e, []);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
dispose() {
|
|
129
|
+
this.isDisposed = true;
|
|
130
|
+
this.registrations.clear();
|
|
131
|
+
this.instantiatedInstances.clear();
|
|
132
|
+
}
|
|
133
|
+
getInstantiatedInstances() {
|
|
134
|
+
return Array.from(this.instantiatedInstances);
|
|
135
|
+
}
|
|
136
|
+
hasRegistration(key) {
|
|
137
|
+
if (this.registrations.has(key))
|
|
138
|
+
return true;
|
|
139
|
+
return this.parent ? this.parent.hasRegistration(key) : false;
|
|
140
|
+
}
|
|
141
|
+
getRegistrationRecursively(key) {
|
|
142
|
+
if (this.registrations.has(key))
|
|
143
|
+
return this.registrations.get(key);
|
|
144
|
+
if (this.parent)
|
|
145
|
+
return this.parent.getRegistrationRecursively(key);
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
ensureRegistered(key, token, path) {
|
|
37
149
|
if (!this.registrations.has(key)) {
|
|
38
150
|
if (typeof token === 'function') {
|
|
39
|
-
this.
|
|
151
|
+
if (this.parent) {
|
|
152
|
+
this.parent.ensureRegistered(key, token, path);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.singleton(token);
|
|
156
|
+
}
|
|
40
157
|
}
|
|
41
158
|
else {
|
|
42
|
-
throw new
|
|
159
|
+
throw new UnknownProviderError(key, undefined, undefined, path);
|
|
43
160
|
}
|
|
44
161
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
162
|
+
}
|
|
163
|
+
createResolutionProxy(path) {
|
|
164
|
+
const resolve = (token) => this.internalResolveSync(token, path);
|
|
165
|
+
const resolveAsync = (token) => this.internalResolveAsync(token, path);
|
|
166
|
+
return {
|
|
167
|
+
resolve,
|
|
168
|
+
resolveAsync
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
internalResolveSync(token, path) {
|
|
172
|
+
if (this.isDisposed)
|
|
173
|
+
throw new Error('Cannot resolve from a disposed container');
|
|
174
|
+
const key = this.getTokenKey(token);
|
|
175
|
+
if (path.includes(key)) {
|
|
176
|
+
throw new CircularDependencyError([...path, key]);
|
|
177
|
+
}
|
|
178
|
+
let reg = this.registrations.get(key);
|
|
179
|
+
try {
|
|
180
|
+
if (!reg) {
|
|
181
|
+
if (this.hasRegistration(key)) {
|
|
182
|
+
const parentReg = this.getRegistrationRecursively(key);
|
|
183
|
+
if (parentReg.scope === 'singleton' || parentReg.scope === 'transient') {
|
|
184
|
+
return this.parent.internalResolveSync(token, path);
|
|
185
|
+
}
|
|
186
|
+
else if (parentReg.scope === 'scoped') {
|
|
187
|
+
reg = { provider: parentReg.provider, scope: 'scoped' };
|
|
188
|
+
this.registrations.set(key, reg);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.ensureRegistered(key, token, path);
|
|
193
|
+
return this.internalResolveSync(token, path);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if ('useExisting' in reg.provider) {
|
|
197
|
+
return this.internalResolveSync(reg.provider.useExisting, [...path, key]);
|
|
198
|
+
}
|
|
199
|
+
if ((reg.scope === 'singleton' || reg.scope === 'scoped') && 'instance' in reg) {
|
|
200
|
+
return reg.instance;
|
|
201
|
+
}
|
|
202
|
+
const instance = this.resolveProviderSync(reg.provider, key, [...path, key]);
|
|
203
|
+
if (reg.scope === 'singleton' || reg.scope === 'scoped') {
|
|
204
|
+
reg.instance = instance;
|
|
205
|
+
}
|
|
206
|
+
if (reg.scope !== 'transient' && instance && typeof instance === 'object') {
|
|
207
|
+
this.instantiatedInstances.add(instance);
|
|
208
|
+
}
|
|
209
|
+
return instance;
|
|
48
210
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
211
|
+
catch (e) {
|
|
212
|
+
if (e.name === 'DependencyResolutionError')
|
|
213
|
+
throw e;
|
|
214
|
+
throw new DependencyResolutionError(token, e, path);
|
|
52
215
|
}
|
|
53
|
-
return instance;
|
|
54
216
|
}
|
|
55
|
-
|
|
217
|
+
async internalResolveAsync(token, path) {
|
|
218
|
+
if (this.isDisposed)
|
|
219
|
+
throw new Error('Cannot resolve from a disposed container');
|
|
220
|
+
const key = this.getTokenKey(token);
|
|
221
|
+
if (path.includes(key)) {
|
|
222
|
+
throw new CircularDependencyError([...path, key]);
|
|
223
|
+
}
|
|
224
|
+
let reg = this.registrations.get(key);
|
|
225
|
+
try {
|
|
226
|
+
if (!reg) {
|
|
227
|
+
if (this.hasRegistration(key)) {
|
|
228
|
+
const parentReg = this.getRegistrationRecursively(key);
|
|
229
|
+
if (parentReg.scope === 'singleton' || parentReg.scope === 'transient') {
|
|
230
|
+
return this.parent.internalResolveAsync(token, path);
|
|
231
|
+
}
|
|
232
|
+
else if (parentReg.scope === 'scoped') {
|
|
233
|
+
reg = { provider: parentReg.provider, scope: 'scoped' };
|
|
234
|
+
this.registrations.set(key, reg);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this.ensureRegistered(key, token, path);
|
|
239
|
+
return this.internalResolveAsync(token, path);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if ('useExisting' in reg.provider) {
|
|
243
|
+
return this.internalResolveAsync(reg.provider.useExisting, [...path, key]);
|
|
244
|
+
}
|
|
245
|
+
if ((reg.scope === 'singleton' || reg.scope === 'scoped') && 'instance' in reg) {
|
|
246
|
+
return reg.instance;
|
|
247
|
+
}
|
|
248
|
+
if ((reg.scope === 'singleton' || reg.scope === 'scoped') && reg.asyncPromise) {
|
|
249
|
+
return reg.asyncPromise;
|
|
250
|
+
}
|
|
251
|
+
const resolutionPromise = this.resolveProviderAsync(reg.provider, [...path, key]);
|
|
252
|
+
if (reg.scope === 'singleton' || reg.scope === 'scoped') {
|
|
253
|
+
reg.asyncPromise = resolutionPromise;
|
|
254
|
+
try {
|
|
255
|
+
reg.instance = await resolutionPromise;
|
|
256
|
+
if (reg.instance && typeof reg.instance === 'object') {
|
|
257
|
+
this.instantiatedInstances.add(reg.instance);
|
|
258
|
+
}
|
|
259
|
+
return reg.instance;
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
delete reg.asyncPromise;
|
|
263
|
+
throw e;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return await resolutionPromise;
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
if (e.name === 'DependencyResolutionError')
|
|
270
|
+
throw e;
|
|
271
|
+
throw new DependencyResolutionError(token, e, path);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
resolveProviderSync(provider, key, path) {
|
|
56
275
|
if ('useValue' in provider) {
|
|
57
276
|
return provider.useValue;
|
|
58
277
|
}
|
|
59
278
|
if ('useFactory' in provider) {
|
|
60
|
-
|
|
279
|
+
const proxy = this.createResolutionProxy(path);
|
|
280
|
+
const result = provider.useFactory(proxy);
|
|
281
|
+
if (result instanceof Promise) {
|
|
282
|
+
throw new AsyncProviderResolutionError(key);
|
|
283
|
+
}
|
|
284
|
+
return result;
|
|
61
285
|
}
|
|
62
|
-
if ('
|
|
63
|
-
return this.
|
|
286
|
+
if ('useClass' in provider) {
|
|
287
|
+
return this.instantiateClassSync(provider.useClass, path);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async resolveProviderAsync(provider, path) {
|
|
291
|
+
if ('useValue' in provider) {
|
|
292
|
+
return provider.useValue;
|
|
293
|
+
}
|
|
294
|
+
if ('useFactory' in provider) {
|
|
295
|
+
const proxy = this.createResolutionProxy(path);
|
|
296
|
+
return await provider.useFactory(proxy);
|
|
64
297
|
}
|
|
65
298
|
if ('useClass' in provider) {
|
|
66
|
-
return this.
|
|
299
|
+
return this.instantiateClassAsync(provider.useClass, path);
|
|
67
300
|
}
|
|
68
301
|
}
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
302
|
+
instantiateClassSync(target, path) {
|
|
303
|
+
const injections = this.getConstructorInjections(target).map(t => this.internalResolveSync(t, path));
|
|
304
|
+
return new target(...injections);
|
|
305
|
+
}
|
|
306
|
+
async instantiateClassAsync(target, path) {
|
|
307
|
+
const injections = await Promise.all(this.getConstructorInjections(target).map(t => this.internalResolveAsync(t, path)));
|
|
308
|
+
return new target(...injections);
|
|
309
|
+
}
|
|
310
|
+
getConstructorInjections(target) {
|
|
311
|
+
const paramTypes = ReflectionHost.getParamTypes(target);
|
|
312
|
+
const explicitInjections = ReflectionHost.getExplicitInjections(target);
|
|
313
|
+
return paramTypes.map((type, index) => {
|
|
73
314
|
const explicit = explicitInjections.find(e => e.index === index);
|
|
74
|
-
if (explicit)
|
|
75
|
-
return
|
|
315
|
+
if (explicit)
|
|
316
|
+
return explicit.token;
|
|
317
|
+
if (!type) {
|
|
318
|
+
throw new UnknownProviderError(null, index, target.name);
|
|
76
319
|
}
|
|
77
|
-
if (
|
|
78
|
-
throw new
|
|
320
|
+
if (type === String || type === Number || type === Boolean || type === Object || type === Array || type === Function || type === Promise || type === Symbol) {
|
|
321
|
+
throw new PrimitiveDependencyError(index, target.name);
|
|
79
322
|
}
|
|
80
|
-
return
|
|
323
|
+
return type;
|
|
81
324
|
});
|
|
82
|
-
return new target(...injections);
|
|
83
325
|
}
|
|
84
326
|
getTokenKey(token) {
|
|
85
327
|
if (typeof token === 'object' && token !== null && 'key' in token) {
|
package/dist/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { Constructor, Token, InjectionToken } from './types.js';\nimport { Provider, ProviderDefinition, Scope, Resolver } from './providers.js';\nimport { ReflectionHost } from './reflection.js';\nimport { AsyncProviderResolutionError, CircularDependencyError, InvalidProviderError, UnknownProviderError, DependencyResolutionError, DuplicateProviderError, PrimitiveDependencyError } from './errors.js';\n\ninterface ProviderRegistration {\n provider: Provider;\n scope: Scope;\n instance?: unknown;\n asyncPromise?: Promise<unknown>;\n}\n\nexport class Container {\n private registrations = new Map<unknown, ProviderRegistration>();\n private instantiatedInstances = new Set<unknown>();\n private isDisposed = false;\n private isActiveResolution = false;\n private isFrozen = false;\n\n constructor(private parent?: Container) {}\n\n createChild(): Container {\n return new Container(this);\n }\n\n freeze(): void {\n this.isFrozen = true;\n }\n\n unfrozen(): boolean {\n return !this.isFrozen;\n }\n\n register<T>(provider: Provider<T>, scope: Scope = 'singleton'): void {\n if (this.isActiveResolution) {\n throw new Error('Cannot register providers during active resolution');\n }\n if (this.isFrozen) {\n throw new Error('Cannot register providers on a frozen container. Container is already initialized.');\n }\n if (!('provide' in provider) || provider.provide === undefined) {\n throw new InvalidProviderError('Provider must have a \"provide\" property when using register()');\n }\n \n const key = this.getTokenKey(provider.provide);\n if (this.hasOwn(provider.provide)) {\n throw new DuplicateProviderError(key);\n }\n \n this.bind(provider.provide, provider, scope);\n }\n\n bind<T>(token: Token<T>, providerDef: ProviderDefinition<T>, scope: Scope = 'singleton'): void {\n this.internalBind(token, providerDef, scope, false);\n }\n\n override<T>(token: Token<T>, providerDef: ProviderDefinition<T>, scope: Scope = 'singleton'): void {\n this.internalBind(token, providerDef, scope, true);\n }\n\n private internalBind<T>(token: Token<T>, providerDef: ProviderDefinition<T>, scope: Scope, isOverride: boolean): void {\n if (this.isFrozen) {\n throw new Error('Cannot register providers on a frozen container. Container is already initialized.');\n }\n\n const key = this.getTokenKey(token);\n\n if (!isOverride && this.hasOwn(token)) {\n throw new DuplicateProviderError(key);\n }\n\n if (isOverride && this.registrations.has(key)) {\n const existing = this.registrations.get(key)!;\n // Clean up old instances/promises to allow immediate substitution\n if (existing.instance && typeof existing.instance === 'object') {\n this.instantiatedInstances.delete(existing.instance);\n }\n }\n\n let provider: Provider<T>;\n\n if (typeof providerDef === 'function') {\n provider = { useClass: providerDef as Constructor<T> };\n } else {\n provider = providerDef as Provider<T>;\n \n if ('provide' in provider && provider.provide !== undefined && provider.provide !== token) {\n throw new InvalidProviderError(`Mismatch between bound token and provider.provide`);\n }\n }\n\n if (!('useClass' in provider) && !('useValue' in provider) && !('useFactory' in provider) && !('useExisting' in provider)) {\n throw new InvalidProviderError(`Provider definition is invalid. Must provide useClass, useValue, useFactory, or useExisting.`);\n }\n\n if ('useExisting' in provider) {\n scope = 'transient'; \n }\n\n // Always create a fresh registration entry without instance or asyncPromise attached\n this.registrations.set(key, { provider, scope });\n }\n\n singleton<T>(token: Token<T>, providerDef?: ProviderDefinition<T>): void {\n this.bind(token, providerDef || (token as Constructor<T>), 'singleton');\n }\n\n scoped<T>(token: Token<T>, providerDef?: ProviderDefinition<T>): void {\n this.bind(token, providerDef || (token as Constructor<T>), 'scoped');\n }\n\n transient<T>(token: Token<T>, providerDef?: ProviderDefinition<T>): void {\n this.bind(token, providerDef || (token as Constructor<T>), 'transient');\n }\n\n instance<T>(token: Token<T>, value: T): void {\n const key = this.getTokenKey(token);\n if (this.hasOwn(token)) throw new DuplicateProviderError(key);\n this.registrations.set(key, {\n provider: { useValue: value },\n scope: 'singleton',\n instance: value\n });\n this.instantiatedInstances.add(value);\n }\n\n factory<T>(token: Token<T>, factory: (resolver: Resolver) => T | Promise<T>, scope: Scope = 'singleton'): void {\n this.bind(token, { useFactory: factory }, scope);\n }\n\n has<T>(token: Token<T>): boolean {\n return this.hasRegistration(this.getTokenKey(token));\n }\n\n hasOwn<T>(token: Token<T>): boolean {\n return this.registrations.has(this.getTokenKey(token));\n }\n\n resolve<T>(token: Token<T>): T {\n try {\n return this.internalResolveSync(token, []) as T;\n } catch (e: any) {\n if (e.name === 'DependencyResolutionError') throw e;\n throw new DependencyResolutionError(token, e, []);\n }\n }\n\n async resolveAsync<T>(token: Token<T>): Promise<T> {\n try {\n return await this.internalResolveAsync(token, []) as T;\n } catch (e: any) {\n if (e.name === 'DependencyResolutionError') throw e;\n throw new DependencyResolutionError(token, e, []);\n }\n }\n\n dispose(): void {\n this.isDisposed = true;\n this.registrations.clear();\n this.instantiatedInstances.clear();\n }\n\n getInstantiatedInstances(): unknown[] {\n return Array.from(this.instantiatedInstances);\n }\n\n protected hasRegistration(key: unknown): boolean {\n if (this.registrations.has(key)) return true;\n return this.parent ? this.parent.hasRegistration(key) : false;\n }\n\n protected getRegistrationRecursively(key: unknown): ProviderRegistration | undefined {\n if (this.registrations.has(key)) return this.registrations.get(key);\n if (this.parent) return this.parent.getRegistrationRecursively(key);\n return undefined;\n }\n\n protected ensureRegistered(key: unknown, token: Token<unknown>, path: unknown[]): void {\n if (!this.registrations.has(key)) {\n if (typeof token === 'function') {\n if (this.parent) {\n this.parent.ensureRegistered(key, token, path);\n } else {\n this.singleton(token);\n }\n } else {\n throw new UnknownProviderError(key, undefined, undefined, path);\n }\n }\n }\n\n private createResolutionProxy(path: unknown[]): Resolver {\n const resolve = <T>(token: Token<T>): T => this.internalResolveSync(token, path) as T;\n const resolveAsync = <T>(token: Token<T>): Promise<T> => this.internalResolveAsync(token, path) as Promise<T>;\n \n return {\n resolve,\n resolveAsync\n };\n }\n\n private internalResolveSync(token: Token<unknown>, path: unknown[]): unknown {\n if (this.isDisposed) throw new Error('Cannot resolve from a disposed container');\n \n const key = this.getTokenKey(token);\n \n if (path.includes(key)) {\n throw new CircularDependencyError([...path, key]);\n }\n\n let reg = this.registrations.get(key);\n\n try {\n if (!reg) {\n if (this.hasRegistration(key)) {\n const parentReg = this.getRegistrationRecursively(key)!;\n if (parentReg.scope === 'singleton' || parentReg.scope === 'transient') {\n return this.parent!.internalResolveSync(token, path);\n } else if (parentReg.scope === 'scoped') {\n reg = { provider: parentReg.provider, scope: 'scoped' };\n this.registrations.set(key, reg);\n }\n } else {\n this.ensureRegistered(key, token, path);\n return this.internalResolveSync(token, path);\n }\n }\n\n if ('useExisting' in reg!.provider) {\n return this.internalResolveSync(reg!.provider.useExisting, [...path, key]);\n }\n\n if ((reg!.scope === 'singleton' || reg!.scope === 'scoped') && 'instance' in reg!) {\n return reg!.instance;\n }\n\n const instance = this.resolveProviderSync(reg!.provider, key, [...path, key]);\n\n if (reg!.scope === 'singleton' || reg!.scope === 'scoped') {\n reg!.instance = instance;\n }\n \n if (reg!.scope !== 'transient' && instance && typeof instance === 'object') {\n this.instantiatedInstances.add(instance);\n }\n\n return instance;\n } catch (e: any) {\n if (e.name === 'DependencyResolutionError') throw e;\n throw new DependencyResolutionError(token, e, path);\n }\n }\n\n private async internalResolveAsync(token: Token<unknown>, path: unknown[]): Promise<unknown> {\n if (this.isDisposed) throw new Error('Cannot resolve from a disposed container');\n \n const key = this.getTokenKey(token);\n\n if (path.includes(key)) {\n throw new CircularDependencyError([...path, key]);\n }\n\n let reg = this.registrations.get(key);\n\n try {\n if (!reg) {\n if (this.hasRegistration(key)) {\n const parentReg = this.getRegistrationRecursively(key)!;\n if (parentReg.scope === 'singleton' || parentReg.scope === 'transient') {\n return this.parent!.internalResolveAsync(token, path);\n } else if (parentReg.scope === 'scoped') {\n reg = { provider: parentReg.provider, scope: 'scoped' };\n this.registrations.set(key, reg);\n }\n } else {\n this.ensureRegistered(key, token, path);\n return this.internalResolveAsync(token, path);\n }\n }\n\n if ('useExisting' in reg!.provider) {\n return this.internalResolveAsync(reg!.provider.useExisting, [...path, key]);\n }\n\n if ((reg!.scope === 'singleton' || reg!.scope === 'scoped') && 'instance' in reg!) {\n return reg!.instance;\n }\n\n if ((reg!.scope === 'singleton' || reg!.scope === 'scoped') && reg!.asyncPromise) {\n return reg!.asyncPromise;\n }\n\n const resolutionPromise = this.resolveProviderAsync(reg!.provider, [...path, key]);\n\n if (reg!.scope === 'singleton' || reg!.scope === 'scoped') {\n reg!.asyncPromise = resolutionPromise;\n try {\n reg!.instance = await resolutionPromise;\n if (reg!.instance && typeof reg!.instance === 'object') {\n this.instantiatedInstances.add(reg!.instance);\n }\n return reg!.instance;\n } catch (e) {\n delete reg!.asyncPromise;\n throw e;\n }\n }\n\n return await resolutionPromise;\n } catch (e: any) {\n if (e.name === 'DependencyResolutionError') throw e;\n throw new DependencyResolutionError(token, e, path);\n }\n }\n\n private resolveProviderSync(provider: Provider, key: unknown, path: unknown[]): unknown {\n if ('useValue' in provider) {\n return provider.useValue;\n }\n\n if ('useFactory' in provider) {\n const proxy = this.createResolutionProxy(path);\n const result = provider.useFactory(proxy);\n if (result instanceof Promise) {\n throw new AsyncProviderResolutionError(key);\n }\n return result;\n }\n\n if ('useClass' in provider) {\n return this.instantiateClassSync(provider.useClass, path);\n }\n }\n\n private async resolveProviderAsync(provider: Provider, path: unknown[]): Promise<unknown> {\n if ('useValue' in provider) {\n return provider.useValue;\n }\n\n if ('useFactory' in provider) {\n const proxy = this.createResolutionProxy(path);\n return await provider.useFactory(proxy);\n }\n\n if ('useClass' in provider) {\n return this.instantiateClassAsync(provider.useClass, path);\n }\n }\n\n private instantiateClassSync(target: Constructor<unknown>, path: unknown[]): unknown {\n const injections = this.getConstructorInjections(target).map(t => this.internalResolveSync(t, path));\n return new target(...injections);\n }\n\n private async instantiateClassAsync(target: Constructor<unknown>, path: unknown[]): Promise<unknown> {\n const injections = await Promise.all(\n this.getConstructorInjections(target).map(t => this.internalResolveAsync(t, path))\n );\n return new target(...injections);\n }\n\n private getConstructorInjections(target: Constructor<unknown>): Token[] {\n const paramTypes = ReflectionHost.getParamTypes(target);\n const explicitInjections = ReflectionHost.getExplicitInjections(target);\n\n return paramTypes.map((type: unknown, index: number) => {\n const explicit = explicitInjections.find(e => e.index === index);\n if (explicit) return explicit.token;\n\n if (!type) {\n throw new UnknownProviderError(null, index, target.name);\n }\n\n if (type === String || type === Number || type === Boolean || type === Object || type === Array || type === Function || type === Promise || type === Symbol) {\n throw new PrimitiveDependencyError(index, target.name);\n }\n\n return type as Token;\n });\n }\n\n private getTokenKey(token: Token<unknown>): unknown {\n if (typeof token === 'object' && token !== null && 'key' in token) {\n return (token as InjectionToken<unknown>).key;\n }\n return token;\n }\n}\n\n"]}
|
package/dist/decorators.d.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import 'reflect-metadata';
|
|
2
1
|
import { Token } from './types.js';
|
|
3
|
-
export declare const INJECT_METADATA_KEY: unique symbol;
|
|
4
2
|
export declare function Inject(token: Token): ParameterDecorator;
|
|
5
|
-
/**
|
|
6
|
-
* Marks a class as injectable.
|
|
7
|
-
* Currently permissive: Moke Container can resolve classes without this decorator,
|
|
8
|
-
* provided they do not rely on TypeScript emitDecoratorMetadata for constructor arguments.
|
|
9
|
-
* Using @Injectable() forces TypeScript to emit design:paramtypes metadata.
|
|
10
|
-
*/
|
|
11
3
|
export declare function Injectable(): ClassDecorator;
|
|
12
4
|
//# sourceMappingURL=decorators.d.ts.map
|
package/dist/decorators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB,CAIvD;AAED,wBAAgB,UAAU,IAAI,cAAc,CAI3C"}
|
package/dist/decorators.js
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
import '
|
|
2
|
-
export const INJECT_METADATA_KEY = Symbol('moke:inject');
|
|
1
|
+
import { ReflectionHost } from './reflection.js';
|
|
3
2
|
export function Inject(token) {
|
|
4
3
|
return (target, propertyKey, parameterIndex) => {
|
|
5
|
-
|
|
6
|
-
injections.push({ index: parameterIndex, token });
|
|
7
|
-
Reflect.defineMetadata(INJECT_METADATA_KEY, injections, target);
|
|
4
|
+
ReflectionHost.setExplicitInjection(target, parameterIndex, token);
|
|
8
5
|
};
|
|
9
6
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Marks a class as injectable.
|
|
12
|
-
* Currently permissive: Moke Container can resolve classes without this decorator,
|
|
13
|
-
* provided they do not rely on TypeScript emitDecoratorMetadata for constructor arguments.
|
|
14
|
-
* Using @Injectable() forces TypeScript to emit design:paramtypes metadata.
|
|
15
|
-
*/
|
|
16
7
|
export function Injectable() {
|
|
17
8
|
return (target) => {
|
|
18
|
-
|
|
9
|
+
ReflectionHost.markInjectable(target);
|
|
19
10
|
};
|
|
20
11
|
}
|
|
21
12
|
//# sourceMappingURL=decorators.js.map
|
package/dist/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,UAAU,MAAM,CAAC,KAAY;IACjC,OAAO,CAAC,MAAc,EAAE,WAAwC,EAAE,cAAsB,EAAE,EAAE;QAC1F,cAAc,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Token } from './types.js';\nimport { ReflectionHost } from './reflection.js';\n\nexport function Inject(token: Token): ParameterDecorator {\n return (target: Object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n ReflectionHost.setExplicitInjection(target, parameterIndex, token);\n };\n}\n\nexport function Injectable(): ClassDecorator {\n return (target: any) => {\n ReflectionHost.markInjectable(target);\n };\n}\n"]}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare class MokeError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(message: string, code: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class UnknownProviderError extends MokeError {
|
|
6
|
+
constructor(tokenKey: unknown, index?: number, targetName?: string, path?: unknown[]);
|
|
7
|
+
}
|
|
8
|
+
export declare class CircularDependencyError extends MokeError {
|
|
9
|
+
constructor(path: unknown[]);
|
|
10
|
+
}
|
|
11
|
+
export declare class DuplicateProviderError extends MokeError {
|
|
12
|
+
constructor(tokenKey: unknown);
|
|
13
|
+
}
|
|
14
|
+
export declare class InvalidProviderError extends MokeError {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class AsyncProviderResolutionError extends MokeError {
|
|
18
|
+
constructor(tokenKey: unknown, path?: unknown[]);
|
|
19
|
+
}
|
|
20
|
+
export declare class MokeCircularModuleError extends MokeError {
|
|
21
|
+
constructor(path: unknown[]);
|
|
22
|
+
}
|
|
23
|
+
export declare class PrimitiveDependencyError extends MokeError {
|
|
24
|
+
constructor(index: number, targetName: string, path?: unknown[]);
|
|
25
|
+
}
|
|
26
|
+
export declare class DependencyResolutionError extends MokeError {
|
|
27
|
+
constructor(tokenKey: unknown, cause: Error, path?: unknown[]);
|
|
28
|
+
}
|
|
29
|
+
export declare class MokeBootstrapError extends MokeError {
|
|
30
|
+
readonly hook: string;
|
|
31
|
+
readonly instanceName?: string | undefined;
|
|
32
|
+
constructor(hook: string, cause: Error, instanceName?: string | undefined);
|
|
33
|
+
}
|
|
34
|
+
export declare class MokeShutdownError extends MokeError {
|
|
35
|
+
readonly errors: Error[];
|
|
36
|
+
constructor(errors: Error[]);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aACW,IAAI,EAAE,MAAM;gBAA7C,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,MAAM;CAI1D;AAED,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;CAcrF;AAED,qBAAa,uBAAwB,SAAQ,SAAS;gBACxC,IAAI,EAAE,OAAO,EAAE;CAI5B;AAED,qBAAa,sBAAuB,SAAQ,SAAS;gBACvC,QAAQ,EAAE,OAAO;CAI9B;AAED,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,4BAA6B,SAAQ,SAAS;gBAC7C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;CAQhD;AAED,qBAAa,uBAAwB,SAAQ,SAAS;gBACxC,IAAI,EAAE,OAAO,EAAE;CAI5B;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;CAQhE;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;CAa9D;AAED,qBAAa,kBAAmB,SAAQ,SAAS;aACnB,IAAI,EAAE,MAAM;aAAgC,YAAY,CAAC,EAAE,MAAM;gBAAjE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAkB,YAAY,CAAC,EAAE,MAAM,YAAA;CAK9F;AAED,qBAAa,iBAAkB,SAAQ,SAAS;aAClB,MAAM,EAAE,KAAK,EAAE;gBAAf,MAAM,EAAE,KAAK,EAAE;CAI5C"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { formatToken, formatPath } from './internal/formatter.js';
|
|
2
|
+
export class MokeError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.name = 'MokeError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class UnknownProviderError extends MokeError {
|
|
11
|
+
constructor(tokenKey, index, targetName, path) {
|
|
12
|
+
let msg = `No provider registered for ${formatToken(tokenKey)}.`;
|
|
13
|
+
if (index !== undefined && targetName) {
|
|
14
|
+
msg = `Unable to resolve parameter #${index} of ${targetName}.\n\nDependency:\n${formatToken(tokenKey)}\n\nReason:\nNo provider registered for ${formatToken(tokenKey)}.`;
|
|
15
|
+
}
|
|
16
|
+
if (path && path.length > 0) {
|
|
17
|
+
msg += `\n\nResolution path:\n${formatPath(path)}\n→ ${formatToken(tokenKey)}`;
|
|
18
|
+
}
|
|
19
|
+
super(msg, 'MOKE_DI_UNKNOWN_PROVIDER');
|
|
20
|
+
this.name = 'UnknownProviderError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class CircularDependencyError extends MokeError {
|
|
24
|
+
constructor(path) {
|
|
25
|
+
super(`Circular dependency detected:\n${formatPath(path)}`, 'MOKE_DI_CIRCULAR_DEPENDENCY');
|
|
26
|
+
this.name = 'CircularDependencyError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class DuplicateProviderError extends MokeError {
|
|
30
|
+
constructor(tokenKey) {
|
|
31
|
+
super(`Provider already registered for ${formatToken(tokenKey)}. Use override() to replace it explicitly.`, 'MOKE_DI_DUPLICATE_PROVIDER');
|
|
32
|
+
this.name = 'DuplicateProviderError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class InvalidProviderError extends MokeError {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message, 'MOKE_DI_INVALID_PROVIDER');
|
|
38
|
+
this.name = 'InvalidProviderError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class AsyncProviderResolutionError extends MokeError {
|
|
42
|
+
constructor(tokenKey, path) {
|
|
43
|
+
let msg = `Cannot synchronously resolve async provider for token: ${formatToken(tokenKey)}. Use resolveAsync() instead.`;
|
|
44
|
+
if (path && path.length > 0) {
|
|
45
|
+
msg += `\n\nResolution path:\n${formatPath(path)}\n→ ${formatToken(tokenKey)}`;
|
|
46
|
+
}
|
|
47
|
+
super(msg, 'MOKE_DI_ASYNC_PROVIDER_SYNC_RESOLUTION');
|
|
48
|
+
this.name = 'AsyncProviderResolutionError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class MokeCircularModuleError extends MokeError {
|
|
52
|
+
constructor(path) {
|
|
53
|
+
super(`Circular module dependency detected:\n${formatPath(path)}`, 'MOKE_MODULE_CIRCULAR_DEPENDENCY');
|
|
54
|
+
this.name = 'MokeCircularModuleError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class PrimitiveDependencyError extends MokeError {
|
|
58
|
+
constructor(index, targetName, path) {
|
|
59
|
+
let msg = `Moke cannot infer dependency for parameter #${index} of ${targetName}.\nPrimitive or interface-like dependencies require an explicit injection token.\nUse @Inject(TOKEN).`;
|
|
60
|
+
if (path && path.length > 0) {
|
|
61
|
+
msg += `\n\nResolution path:\n${formatPath(path)}\n→ Parameter #${index} of ${targetName}`;
|
|
62
|
+
}
|
|
63
|
+
super(msg, 'MOKE_DI_PRIMITIVE_DEPENDENCY');
|
|
64
|
+
this.name = 'PrimitiveDependencyError';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export class DependencyResolutionError extends MokeError {
|
|
68
|
+
constructor(tokenKey, cause, path) {
|
|
69
|
+
let msg = `Failed while constructing ${formatToken(tokenKey)}.`;
|
|
70
|
+
if (path && path.length > 0) {
|
|
71
|
+
msg += `\n\nResolution path:\n${formatPath(path)}\n→ ${formatToken(tokenKey)}`;
|
|
72
|
+
}
|
|
73
|
+
msg += `\n\nCause:\n${cause.message}`;
|
|
74
|
+
super(msg, 'MOKE_DI_RESOLUTION_FAILED');
|
|
75
|
+
this.name = 'DependencyResolutionError';
|
|
76
|
+
this.cause = cause;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class MokeBootstrapError extends MokeError {
|
|
80
|
+
hook;
|
|
81
|
+
instanceName;
|
|
82
|
+
constructor(hook, cause, instanceName) {
|
|
83
|
+
super(`Bootstrap failed during ${hook}${instanceName ? ` for ${instanceName}` : ''}: ${cause.message}`, 'MOKE_APP_BOOTSTRAP_ERROR');
|
|
84
|
+
this.hook = hook;
|
|
85
|
+
this.instanceName = instanceName;
|
|
86
|
+
this.name = 'MokeBootstrapError';
|
|
87
|
+
this.cause = cause;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export class MokeShutdownError extends MokeError {
|
|
91
|
+
errors;
|
|
92
|
+
constructor(errors) {
|
|
93
|
+
super(`Application shutdown completed with ${errors.length} error(s).`, 'MOKE_APP_SHUTDOWN_ERROR');
|
|
94
|
+
this.errors = errors;
|
|
95
|
+
this.name = 'MokeShutdownError';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatToken, formatPath } from './internal/formatter.js';\n\nexport class MokeError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = 'MokeError';\n }\n}\n\nexport class UnknownProviderError extends MokeError {\n constructor(tokenKey: unknown, index?: number, targetName?: string, path?: unknown[]) {\n let msg = `No provider registered for ${formatToken(tokenKey)}.`;\n \n if (index !== undefined && targetName) {\n msg = `Unable to resolve parameter #${index} of ${targetName}.\\n\\nDependency:\\n${formatToken(tokenKey)}\\n\\nReason:\\nNo provider registered for ${formatToken(tokenKey)}.`;\n }\n\n if (path && path.length > 0) {\n msg += `\\n\\nResolution path:\\n${formatPath(path)}\\n→ ${formatToken(tokenKey)}`;\n }\n\n super(msg, 'MOKE_DI_UNKNOWN_PROVIDER');\n this.name = 'UnknownProviderError';\n }\n}\n\nexport class CircularDependencyError extends MokeError {\n constructor(path: unknown[]) {\n super(`Circular dependency detected:\\n${formatPath(path)}`, 'MOKE_DI_CIRCULAR_DEPENDENCY');\n this.name = 'CircularDependencyError';\n }\n}\n\nexport class DuplicateProviderError extends MokeError {\n constructor(tokenKey: unknown) {\n super(`Provider already registered for ${formatToken(tokenKey)}. Use override() to replace it explicitly.`, 'MOKE_DI_DUPLICATE_PROVIDER');\n this.name = 'DuplicateProviderError';\n }\n}\n\nexport class InvalidProviderError extends MokeError {\n constructor(message: string) {\n super(message, 'MOKE_DI_INVALID_PROVIDER');\n this.name = 'InvalidProviderError';\n }\n}\n\nexport class AsyncProviderResolutionError extends MokeError {\n constructor(tokenKey: unknown, path?: unknown[]) {\n let msg = `Cannot synchronously resolve async provider for token: ${formatToken(tokenKey)}. Use resolveAsync() instead.`;\n if (path && path.length > 0) {\n msg += `\\n\\nResolution path:\\n${formatPath(path)}\\n→ ${formatToken(tokenKey)}`;\n }\n super(msg, 'MOKE_DI_ASYNC_PROVIDER_SYNC_RESOLUTION');\n this.name = 'AsyncProviderResolutionError';\n }\n}\n\nexport class MokeCircularModuleError extends MokeError {\n constructor(path: unknown[]) {\n super(`Circular module dependency detected:\\n${formatPath(path)}`, 'MOKE_MODULE_CIRCULAR_DEPENDENCY');\n this.name = 'MokeCircularModuleError';\n }\n}\n\nexport class PrimitiveDependencyError extends MokeError {\n constructor(index: number, targetName: string, path?: unknown[]) {\n let msg = `Moke cannot infer dependency for parameter #${index} of ${targetName}.\\nPrimitive or interface-like dependencies require an explicit injection token.\\nUse @Inject(TOKEN).`;\n if (path && path.length > 0) {\n msg += `\\n\\nResolution path:\\n${formatPath(path)}\\n→ Parameter #${index} of ${targetName}`;\n }\n super(msg, 'MOKE_DI_PRIMITIVE_DEPENDENCY');\n this.name = 'PrimitiveDependencyError';\n }\n}\n\nexport class DependencyResolutionError extends MokeError {\n constructor(tokenKey: unknown, cause: Error, path?: unknown[]) {\n let msg = `Failed while constructing ${formatToken(tokenKey)}.`;\n \n if (path && path.length > 0) {\n msg += `\\n\\nResolution path:\\n${formatPath(path)}\\n→ ${formatToken(tokenKey)}`;\n }\n\n msg += `\\n\\nCause:\\n${cause.message}`;\n\n super(msg, 'MOKE_DI_RESOLUTION_FAILED');\n this.name = 'DependencyResolutionError';\n this.cause = cause;\n }\n}\n\nexport class MokeBootstrapError extends MokeError {\n constructor(public readonly hook: string, cause: Error, public readonly instanceName?: string) {\n super(`Bootstrap failed during ${hook}${instanceName ? ` for ${instanceName}` : ''}: ${cause.message}`, 'MOKE_APP_BOOTSTRAP_ERROR');\n this.name = 'MokeBootstrapError';\n this.cause = cause;\n }\n}\n\nexport class MokeShutdownError extends MokeError {\n constructor(public readonly errors: Error[]) {\n super(`Application shutdown completed with ${errors.length} error(s).`, 'MOKE_APP_SHUTDOWN_ERROR');\n this.name = 'MokeShutdownError';\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
|
+
export * from './errors.js';
|
|
2
3
|
export * from './providers.js';
|
|
3
4
|
export * from './container.js';
|
|
4
5
|
export * from './decorators.js';
|
|
5
6
|
export * from './logger.js';
|
|
7
|
+
export * from './lifecycle.js';
|
|
6
8
|
export * from './application.js';
|
|
9
|
+
export * from './module.js';
|
|
10
|
+
export * from './service-provider.js';
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|