@praxisjs/di 1.3.12 → 1.3.14
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/CHANGELOG.md +40 -0
- package/dist/container.d.ts +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +28 -21
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +4 -2
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +60 -69
- package/dist/decorators.js.map +1 -1
- package/package.json +14 -5
- package/src/container.ts +28 -23
- package/src/decorators.ts +72 -81
- package/dist/__tests__/container.test.d.ts +0 -2
- package/dist/__tests__/container.test.d.ts.map +0 -1
- package/dist/__tests__/container.test.js +0 -224
- package/dist/__tests__/container.test.js.map +0 -1
- package/dist/__tests__/decorators.test.d.ts +0 -2
- package/dist/__tests__/decorators.test.d.ts.map +0 -1
- package/dist/__tests__/decorators.test.js +0 -604
- package/dist/__tests__/decorators.test.js.map +0 -1
- package/src/__tests__/container.test.ts +0 -247
- package/src/__tests__/decorators.test.ts +0 -343
- package/tsconfig.json +0 -9
|
@@ -1,604 +0,0 @@
|
|
|
1
|
-
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
-
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
-
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
-
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
-
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
-
var _, done = false;
|
|
7
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
-
var context = {};
|
|
9
|
-
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
-
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
-
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
-
if (kind === "accessor") {
|
|
14
|
-
if (result === void 0) continue;
|
|
15
|
-
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
-
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
-
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
-
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
-
}
|
|
20
|
-
else if (_ = accept(result)) {
|
|
21
|
-
if (kind === "field") initializers.unshift(_);
|
|
22
|
-
else descriptor[key] = _;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
-
done = true;
|
|
27
|
-
};
|
|
28
|
-
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
-
var useValue = arguments.length > 2;
|
|
30
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
-
}
|
|
33
|
-
return useValue ? value : void 0;
|
|
34
|
-
};
|
|
35
|
-
import { describe, it, expect, vi } from "vitest";
|
|
36
|
-
import { Container, container, token } from "../container";
|
|
37
|
-
import { Injectable, Inject, InjectContainer, Scope, inject } from "../decorators";
|
|
38
|
-
function makeFieldCtx(name) {
|
|
39
|
-
const initializers = [];
|
|
40
|
-
return {
|
|
41
|
-
ctx: {
|
|
42
|
-
name,
|
|
43
|
-
kind: "field",
|
|
44
|
-
addInitializer(fn) {
|
|
45
|
-
initializers.push(fn);
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
run(instance) {
|
|
49
|
-
initializers.forEach((fn) => {
|
|
50
|
-
fn.call(instance);
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
// ── @Injectable ───────────────────────────────────────────────────────────────
|
|
56
|
-
describe("Injectable", () => {
|
|
57
|
-
it("with no arguments — defaults to singleton scope", () => {
|
|
58
|
-
let SingletonByDefault = (() => {
|
|
59
|
-
let _classDecorators = [Injectable()];
|
|
60
|
-
let _classDescriptor;
|
|
61
|
-
let _classExtraInitializers = [];
|
|
62
|
-
let _classThis;
|
|
63
|
-
var SingletonByDefault = class {
|
|
64
|
-
static { _classThis = this; }
|
|
65
|
-
static {
|
|
66
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
67
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
68
|
-
SingletonByDefault = _classThis = _classDescriptor.value;
|
|
69
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
70
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
return SingletonByDefault = _classThis;
|
|
74
|
-
})();
|
|
75
|
-
const a = container.resolve(SingletonByDefault);
|
|
76
|
-
const b = container.resolve(SingletonByDefault);
|
|
77
|
-
expect(a).toBe(b);
|
|
78
|
-
});
|
|
79
|
-
it("registers the class in the global container", () => {
|
|
80
|
-
let MyService = (() => {
|
|
81
|
-
let _classDecorators = [Injectable()];
|
|
82
|
-
let _classDescriptor;
|
|
83
|
-
let _classExtraInitializers = [];
|
|
84
|
-
let _classThis;
|
|
85
|
-
var MyService = class {
|
|
86
|
-
static { _classThis = this; }
|
|
87
|
-
static {
|
|
88
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
89
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
90
|
-
MyService = _classThis = _classDescriptor.value;
|
|
91
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
92
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
93
|
-
}
|
|
94
|
-
greet() {
|
|
95
|
-
return "hello";
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
return MyService = _classThis;
|
|
99
|
-
})();
|
|
100
|
-
expect(container.resolve(MyService)).toBeInstanceOf(MyService);
|
|
101
|
-
expect(container.resolve(MyService).greet()).toBe("hello");
|
|
102
|
-
});
|
|
103
|
-
it("registers with transient scope — each resolve returns a new instance", () => {
|
|
104
|
-
let TmpService = (() => {
|
|
105
|
-
let _classDecorators = [Injectable({ scope: "transient" })];
|
|
106
|
-
let _classDescriptor;
|
|
107
|
-
let _classExtraInitializers = [];
|
|
108
|
-
let _classThis;
|
|
109
|
-
var TmpService = class {
|
|
110
|
-
static { _classThis = this; }
|
|
111
|
-
static {
|
|
112
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
113
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
114
|
-
TmpService = _classThis = _classDescriptor.value;
|
|
115
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
116
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
return TmpService = _classThis;
|
|
120
|
-
})();
|
|
121
|
-
expect(container.resolve(TmpService)).not.toBe(container.resolve(TmpService));
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
// ── @Inject ───────────────────────────────────────────────────────────────────
|
|
125
|
-
describe("Inject", () => {
|
|
126
|
-
it("injects a registered service via property", () => {
|
|
127
|
-
let Logger = (() => {
|
|
128
|
-
let _classDecorators = [Injectable()];
|
|
129
|
-
let _classDescriptor;
|
|
130
|
-
let _classExtraInitializers = [];
|
|
131
|
-
let _classThis;
|
|
132
|
-
var Logger = class {
|
|
133
|
-
static { _classThis = this; }
|
|
134
|
-
static {
|
|
135
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
136
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
137
|
-
Logger = _classThis = _classDescriptor.value;
|
|
138
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
139
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
140
|
-
}
|
|
141
|
-
log(msg) {
|
|
142
|
-
return msg;
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
return Logger = _classThis;
|
|
146
|
-
})();
|
|
147
|
-
const { ctx, run } = makeFieldCtx("logger");
|
|
148
|
-
Inject(Logger)(undefined, ctx);
|
|
149
|
-
const instance = {};
|
|
150
|
-
run(instance);
|
|
151
|
-
expect(instance.logger).toBeInstanceOf(Logger);
|
|
152
|
-
// second access covers the cache-hit branch (line 62: !cache.has(this) === false)
|
|
153
|
-
expect(instance.logger).toBe(instance.logger);
|
|
154
|
-
});
|
|
155
|
-
it("throws a descriptive error when dep is not registered", () => {
|
|
156
|
-
class UnknownDep {
|
|
157
|
-
}
|
|
158
|
-
const { ctx, run } = makeFieldCtx("dep");
|
|
159
|
-
Inject(UnknownDep)(undefined, ctx);
|
|
160
|
-
class MyClass {
|
|
161
|
-
}
|
|
162
|
-
const instance = new MyClass();
|
|
163
|
-
run(instance);
|
|
164
|
-
expect(() => instance.dep).toThrow("[Inject]");
|
|
165
|
-
});
|
|
166
|
-
it("warns on direct assignment in non-production", () => {
|
|
167
|
-
let Dep2 = (() => {
|
|
168
|
-
let _classDecorators = [Injectable()];
|
|
169
|
-
let _classDescriptor;
|
|
170
|
-
let _classExtraInitializers = [];
|
|
171
|
-
let _classThis;
|
|
172
|
-
var Dep2 = class {
|
|
173
|
-
static { _classThis = this; }
|
|
174
|
-
static {
|
|
175
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
176
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
177
|
-
Dep2 = _classThis = _classDescriptor.value;
|
|
178
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
179
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
return Dep2 = _classThis;
|
|
183
|
-
})();
|
|
184
|
-
const { ctx, run } = makeFieldCtx("dep2");
|
|
185
|
-
Inject(Dep2)(undefined, ctx);
|
|
186
|
-
const instance = {};
|
|
187
|
-
run(instance);
|
|
188
|
-
const spy = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
189
|
-
instance.dep2 = "override";
|
|
190
|
-
expect(spy).toHaveBeenCalledWith(expect.stringContaining("[Inject]"));
|
|
191
|
-
spy.mockRestore();
|
|
192
|
-
});
|
|
193
|
-
it("returns cached value on second access (cache hit)", () => {
|
|
194
|
-
let CachedService = (() => {
|
|
195
|
-
let _classDecorators = [Injectable()];
|
|
196
|
-
let _classDescriptor;
|
|
197
|
-
let _classExtraInitializers = [];
|
|
198
|
-
let _classThis;
|
|
199
|
-
var CachedService = class {
|
|
200
|
-
static { _classThis = this; }
|
|
201
|
-
static {
|
|
202
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
203
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
204
|
-
CachedService = _classThis = _classDescriptor.value;
|
|
205
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
206
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
207
|
-
}
|
|
208
|
-
id = Math.random();
|
|
209
|
-
};
|
|
210
|
-
return CachedService = _classThis;
|
|
211
|
-
})();
|
|
212
|
-
const { ctx, run } = makeFieldCtx("svc");
|
|
213
|
-
Inject(CachedService)(undefined, ctx);
|
|
214
|
-
const instance = {};
|
|
215
|
-
run(instance);
|
|
216
|
-
const first = instance.svc;
|
|
217
|
-
const second = instance.svc;
|
|
218
|
-
expect(first).toBe(second); // same cached instance
|
|
219
|
-
});
|
|
220
|
-
it("does not warn on direct assignment in production mode", () => {
|
|
221
|
-
let ProdDep = (() => {
|
|
222
|
-
let _classDecorators = [Injectable()];
|
|
223
|
-
let _classDescriptor;
|
|
224
|
-
let _classExtraInitializers = [];
|
|
225
|
-
let _classThis;
|
|
226
|
-
var ProdDep = class {
|
|
227
|
-
static { _classThis = this; }
|
|
228
|
-
static {
|
|
229
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
230
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
231
|
-
ProdDep = _classThis = _classDescriptor.value;
|
|
232
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
233
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
return ProdDep = _classThis;
|
|
237
|
-
})();
|
|
238
|
-
const { ctx, run } = makeFieldCtx("dep");
|
|
239
|
-
Inject(ProdDep)(undefined, ctx);
|
|
240
|
-
const instance = {};
|
|
241
|
-
run(instance);
|
|
242
|
-
const spy = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
243
|
-
vi.stubEnv("NODE_ENV", "production");
|
|
244
|
-
instance.dep = "override";
|
|
245
|
-
expect(spy).not.toHaveBeenCalled();
|
|
246
|
-
vi.unstubAllEnvs();
|
|
247
|
-
spy.mockRestore();
|
|
248
|
-
});
|
|
249
|
-
it("includes the Token description in the error when resolution fails", () => {
|
|
250
|
-
const MY_TOKEN = token("MY_SERVICE");
|
|
251
|
-
const { ctx, run } = makeFieldCtx("svc");
|
|
252
|
-
Inject(MY_TOKEN)(undefined, ctx);
|
|
253
|
-
class Consumer {
|
|
254
|
-
}
|
|
255
|
-
const instance = new Consumer();
|
|
256
|
-
run(instance);
|
|
257
|
-
expect(() => instance.svc).toThrow("MY_SERVICE");
|
|
258
|
-
});
|
|
259
|
-
it("@Inject on an anonymous class — error message uses token description instead of empty class name", () => {
|
|
260
|
-
const ANON_TOKEN = token("ANON_TOKEN");
|
|
261
|
-
const { ctx, run } = makeFieldCtx("val");
|
|
262
|
-
Inject(ANON_TOKEN)(undefined, ctx);
|
|
263
|
-
const instance = {};
|
|
264
|
-
run(instance);
|
|
265
|
-
expect(() => instance.val).toThrow("ANON_TOKEN");
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
// ── @InjectContainer ──────────────────────────────────────────────────────────
|
|
269
|
-
describe("InjectContainer", () => {
|
|
270
|
-
it("injects the global container on an unscoped class", () => {
|
|
271
|
-
const { ctx, run } = makeFieldCtx("c");
|
|
272
|
-
InjectContainer()(undefined, ctx);
|
|
273
|
-
const instance = {};
|
|
274
|
-
run(instance);
|
|
275
|
-
expect(instance.c).toBeInstanceOf(Container);
|
|
276
|
-
expect(instance.c).toBe(container);
|
|
277
|
-
});
|
|
278
|
-
it("called multiple times on same instance — returns same container instance (cached)", () => {
|
|
279
|
-
const { ctx, run } = makeFieldCtx("c");
|
|
280
|
-
InjectContainer()(undefined, ctx);
|
|
281
|
-
const instance = {};
|
|
282
|
-
run(instance);
|
|
283
|
-
const first = instance.c;
|
|
284
|
-
const second = instance.c;
|
|
285
|
-
expect(first).toBe(second);
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
// ── @Scope ────────────────────────────────────────────────────────────────────
|
|
289
|
-
describe("Scope", () => {
|
|
290
|
-
it("creates a child container per instance", () => {
|
|
291
|
-
let Widget = (() => {
|
|
292
|
-
let _classDecorators = [Scope()];
|
|
293
|
-
let _classDescriptor;
|
|
294
|
-
let _classExtraInitializers = [];
|
|
295
|
-
let _classThis;
|
|
296
|
-
var Widget = class {
|
|
297
|
-
static { _classThis = this; }
|
|
298
|
-
static {
|
|
299
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
300
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
301
|
-
Widget = _classThis = _classDescriptor.value;
|
|
302
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
303
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
return Widget = _classThis;
|
|
307
|
-
})();
|
|
308
|
-
const { ctx, run } = makeFieldCtx("c");
|
|
309
|
-
InjectContainer()(undefined, ctx);
|
|
310
|
-
const a = new Widget();
|
|
311
|
-
run(a);
|
|
312
|
-
const b = new Widget();
|
|
313
|
-
run(b);
|
|
314
|
-
expect(a.c).toBeInstanceOf(Container);
|
|
315
|
-
expect(b.c).toBeInstanceOf(Container);
|
|
316
|
-
expect(a.c).not.toBe(b.c); // each instance gets its own scope
|
|
317
|
-
expect(a.c).not.toBe(container); // it's a child, not the root
|
|
318
|
-
});
|
|
319
|
-
it("services registered in configure are resolvable within the scope", () => {
|
|
320
|
-
const DB_URL = token("DB_URL");
|
|
321
|
-
let DataModule = (() => {
|
|
322
|
-
let _classDecorators = [Scope((c) => {
|
|
323
|
-
c.registerValue(DB_URL, "postgres://localhost");
|
|
324
|
-
})];
|
|
325
|
-
let _classDescriptor;
|
|
326
|
-
let _classExtraInitializers = [];
|
|
327
|
-
let _classThis;
|
|
328
|
-
var DataModule = class {
|
|
329
|
-
static { _classThis = this; }
|
|
330
|
-
static {
|
|
331
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
332
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
333
|
-
DataModule = _classThis = _classDescriptor.value;
|
|
334
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
335
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
336
|
-
}
|
|
337
|
-
};
|
|
338
|
-
return DataModule = _classThis;
|
|
339
|
-
})();
|
|
340
|
-
const { ctx, run } = makeFieldCtx("db");
|
|
341
|
-
Inject(DB_URL)(undefined, ctx);
|
|
342
|
-
const instance = new DataModule();
|
|
343
|
-
run(instance);
|
|
344
|
-
expect(instance.db).toBe("postgres://localhost");
|
|
345
|
-
});
|
|
346
|
-
it("@Inject resolves from the scoped container, not the global one", () => {
|
|
347
|
-
class ScopedRepo {
|
|
348
|
-
}
|
|
349
|
-
// NOT registered in global container
|
|
350
|
-
const VERSION = token("VERSION");
|
|
351
|
-
let App = (() => {
|
|
352
|
-
let _classDecorators = [Scope((c) => {
|
|
353
|
-
c.register(ScopedRepo);
|
|
354
|
-
c.registerValue(VERSION, "2.0");
|
|
355
|
-
})];
|
|
356
|
-
let _classDescriptor;
|
|
357
|
-
let _classExtraInitializers = [];
|
|
358
|
-
let _classThis;
|
|
359
|
-
var App = class {
|
|
360
|
-
static { _classThis = this; }
|
|
361
|
-
static {
|
|
362
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
363
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
364
|
-
App = _classThis = _classDescriptor.value;
|
|
365
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
366
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
367
|
-
}
|
|
368
|
-
};
|
|
369
|
-
return App = _classThis;
|
|
370
|
-
})();
|
|
371
|
-
const { ctx: repoCtx, run: runRepo } = makeFieldCtx("repo");
|
|
372
|
-
Inject(ScopedRepo)(undefined, repoCtx);
|
|
373
|
-
const { ctx: verCtx, run: runVer } = makeFieldCtx("version");
|
|
374
|
-
Inject(VERSION)(undefined, verCtx);
|
|
375
|
-
const instance = new App();
|
|
376
|
-
runRepo(instance);
|
|
377
|
-
runVer(instance);
|
|
378
|
-
expect(instance.repo).toBeInstanceOf(ScopedRepo);
|
|
379
|
-
expect(instance.version).toBe("2.0");
|
|
380
|
-
});
|
|
381
|
-
it("@InjectContainer returns the scoped child container", () => {
|
|
382
|
-
let Service = (() => {
|
|
383
|
-
let _classDecorators = [Scope((c) => {
|
|
384
|
-
c.registerValue(token("X"), 42);
|
|
385
|
-
})];
|
|
386
|
-
let _classDescriptor;
|
|
387
|
-
let _classExtraInitializers = [];
|
|
388
|
-
let _classThis;
|
|
389
|
-
var Service = class {
|
|
390
|
-
static { _classThis = this; }
|
|
391
|
-
static {
|
|
392
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
393
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
394
|
-
Service = _classThis = _classDescriptor.value;
|
|
395
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
396
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
return Service = _classThis;
|
|
400
|
-
})();
|
|
401
|
-
const { ctx, run } = makeFieldCtx("container");
|
|
402
|
-
InjectContainer()(undefined, ctx);
|
|
403
|
-
const instance = new Service();
|
|
404
|
-
run(instance);
|
|
405
|
-
expect(instance.container).toBeInstanceOf(Container);
|
|
406
|
-
expect(instance.container).not.toBe(container);
|
|
407
|
-
});
|
|
408
|
-
it("child container inherits registrations from the parent", () => {
|
|
409
|
-
let GlobalService = (() => {
|
|
410
|
-
let _classDecorators = [Injectable()];
|
|
411
|
-
let _classDescriptor;
|
|
412
|
-
let _classExtraInitializers = [];
|
|
413
|
-
let _classThis;
|
|
414
|
-
var GlobalService = class {
|
|
415
|
-
static { _classThis = this; }
|
|
416
|
-
static {
|
|
417
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
418
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
419
|
-
GlobalService = _classThis = _classDescriptor.value;
|
|
420
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
421
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
422
|
-
}
|
|
423
|
-
};
|
|
424
|
-
return GlobalService = _classThis;
|
|
425
|
-
})();
|
|
426
|
-
let Child = (() => {
|
|
427
|
-
let _classDecorators = [Scope()];
|
|
428
|
-
let _classDescriptor;
|
|
429
|
-
let _classExtraInitializers = [];
|
|
430
|
-
let _classThis;
|
|
431
|
-
var Child = class {
|
|
432
|
-
static { _classThis = this; }
|
|
433
|
-
static {
|
|
434
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
435
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
436
|
-
Child = _classThis = _classDescriptor.value;
|
|
437
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
438
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
439
|
-
}
|
|
440
|
-
};
|
|
441
|
-
return Child = _classThis;
|
|
442
|
-
})();
|
|
443
|
-
const { ctx, run } = makeFieldCtx("svc");
|
|
444
|
-
Inject(GlobalService)(undefined, ctx);
|
|
445
|
-
const instance = new Child();
|
|
446
|
-
run(instance);
|
|
447
|
-
expect(instance.svc).toBeInstanceOf(GlobalService);
|
|
448
|
-
});
|
|
449
|
-
it("@Scope on child class that inherits from @Scope parent — child gets own container", () => {
|
|
450
|
-
const PARENT_TOKEN = token("PARENT_VAL");
|
|
451
|
-
const CHILD_TOKEN = token("CHILD_VAL");
|
|
452
|
-
let Parent = (() => {
|
|
453
|
-
let _classDecorators = [Scope((c) => {
|
|
454
|
-
c.registerValue(PARENT_TOKEN, "parent");
|
|
455
|
-
})];
|
|
456
|
-
let _classDescriptor;
|
|
457
|
-
let _classExtraInitializers = [];
|
|
458
|
-
let _classThis;
|
|
459
|
-
var Parent = class {
|
|
460
|
-
static { _classThis = this; }
|
|
461
|
-
static {
|
|
462
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
463
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
464
|
-
Parent = _classThis = _classDescriptor.value;
|
|
465
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
466
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
return Parent = _classThis;
|
|
470
|
-
})();
|
|
471
|
-
let Child = (() => {
|
|
472
|
-
let _classDecorators = [Scope((c) => {
|
|
473
|
-
c.registerValue(CHILD_TOKEN, "child");
|
|
474
|
-
})];
|
|
475
|
-
let _classDescriptor;
|
|
476
|
-
let _classExtraInitializers = [];
|
|
477
|
-
let _classThis;
|
|
478
|
-
let _classSuper = Parent;
|
|
479
|
-
var Child = class extends _classSuper {
|
|
480
|
-
static { _classThis = this; }
|
|
481
|
-
static {
|
|
482
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
483
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
484
|
-
Child = _classThis = _classDescriptor.value;
|
|
485
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
486
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
487
|
-
}
|
|
488
|
-
};
|
|
489
|
-
return Child = _classThis;
|
|
490
|
-
})();
|
|
491
|
-
const { ctx: ctxC, run: runC } = makeFieldCtx("c");
|
|
492
|
-
InjectContainer()(undefined, ctxC);
|
|
493
|
-
const parentInstance = new Parent();
|
|
494
|
-
runC(parentInstance);
|
|
495
|
-
const childInstance = new Child();
|
|
496
|
-
runC(childInstance);
|
|
497
|
-
expect(parentInstance.c).toBeInstanceOf(Container);
|
|
498
|
-
expect(childInstance.c).toBeInstanceOf(Container);
|
|
499
|
-
// child has its own scoped container, different from the parent's
|
|
500
|
-
expect(childInstance.c).not.toBe(parentInstance.c);
|
|
501
|
-
expect(childInstance.c).not.toBe(container);
|
|
502
|
-
});
|
|
503
|
-
});
|
|
504
|
-
// ── inject() ──────────────────────────────────────────────────────────────────
|
|
505
|
-
describe("inject", () => {
|
|
506
|
-
it("resolves a registered class from the global container", () => {
|
|
507
|
-
let GreetService = (() => {
|
|
508
|
-
let _classDecorators = [Injectable()];
|
|
509
|
-
let _classDescriptor;
|
|
510
|
-
let _classExtraInitializers = [];
|
|
511
|
-
let _classThis;
|
|
512
|
-
var GreetService = class {
|
|
513
|
-
static { _classThis = this; }
|
|
514
|
-
static {
|
|
515
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
516
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
517
|
-
GreetService = _classThis = _classDescriptor.value;
|
|
518
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
519
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
520
|
-
}
|
|
521
|
-
greet() { return "hi"; }
|
|
522
|
-
};
|
|
523
|
-
return GreetService = _classThis;
|
|
524
|
-
})();
|
|
525
|
-
const svc = inject(GreetService);
|
|
526
|
-
expect(svc).toBeInstanceOf(GreetService);
|
|
527
|
-
expect(svc.greet()).toBe("hi");
|
|
528
|
-
});
|
|
529
|
-
it("returns the same singleton instance on repeated calls", () => {
|
|
530
|
-
let SingletonSvc = (() => {
|
|
531
|
-
let _classDecorators = [Injectable()];
|
|
532
|
-
let _classDescriptor;
|
|
533
|
-
let _classExtraInitializers = [];
|
|
534
|
-
let _classThis;
|
|
535
|
-
var SingletonSvc = class {
|
|
536
|
-
static { _classThis = this; }
|
|
537
|
-
static {
|
|
538
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
539
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
540
|
-
SingletonSvc = _classThis = _classDescriptor.value;
|
|
541
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
542
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
543
|
-
}
|
|
544
|
-
};
|
|
545
|
-
return SingletonSvc = _classThis;
|
|
546
|
-
})();
|
|
547
|
-
expect(inject(SingletonSvc)).toBe(inject(SingletonSvc));
|
|
548
|
-
});
|
|
549
|
-
it("returns a new instance each time for transient scope", () => {
|
|
550
|
-
let TransientSvc = (() => {
|
|
551
|
-
let _classDecorators = [Injectable({ scope: "transient" })];
|
|
552
|
-
let _classDescriptor;
|
|
553
|
-
let _classExtraInitializers = [];
|
|
554
|
-
let _classThis;
|
|
555
|
-
var TransientSvc = class {
|
|
556
|
-
static { _classThis = this; }
|
|
557
|
-
static {
|
|
558
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
559
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
560
|
-
TransientSvc = _classThis = _classDescriptor.value;
|
|
561
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
562
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
563
|
-
}
|
|
564
|
-
};
|
|
565
|
-
return TransientSvc = _classThis;
|
|
566
|
-
})();
|
|
567
|
-
expect(inject(TransientSvc)).not.toBe(inject(TransientSvc));
|
|
568
|
-
});
|
|
569
|
-
it("resolves a registered token value", () => {
|
|
570
|
-
const API_URL = token("API_URL");
|
|
571
|
-
container.registerValue(API_URL, "https://api.example.com");
|
|
572
|
-
expect(inject(API_URL)).toBe("https://api.example.com");
|
|
573
|
-
});
|
|
574
|
-
it("throws when the class is not registered", () => {
|
|
575
|
-
class Unregistered {
|
|
576
|
-
}
|
|
577
|
-
expect(() => inject(Unregistered)).toThrow("[DI]");
|
|
578
|
-
});
|
|
579
|
-
it("throws when the token is not registered", () => {
|
|
580
|
-
const MISSING = token("MISSING_TOKEN");
|
|
581
|
-
expect(() => inject(MISSING)).toThrow("MISSING_TOKEN");
|
|
582
|
-
});
|
|
583
|
-
it("result is identical to container.resolve() — same underlying call", () => {
|
|
584
|
-
let EqService = (() => {
|
|
585
|
-
let _classDecorators = [Injectable()];
|
|
586
|
-
let _classDescriptor;
|
|
587
|
-
let _classExtraInitializers = [];
|
|
588
|
-
let _classThis;
|
|
589
|
-
var EqService = class {
|
|
590
|
-
static { _classThis = this; }
|
|
591
|
-
static {
|
|
592
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
593
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
594
|
-
EqService = _classThis = _classDescriptor.value;
|
|
595
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
596
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
597
|
-
}
|
|
598
|
-
};
|
|
599
|
-
return EqService = _classThis;
|
|
600
|
-
})();
|
|
601
|
-
expect(inject(EqService)).toBe(container.resolve(EqService));
|
|
602
|
-
});
|
|
603
|
-
});
|
|
604
|
-
//# sourceMappingURL=decorators.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.test.js","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"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"}
|