@praxisjs/di 1.1.4 → 1.2.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/CHANGELOG.md +14 -0
- package/dist/__tests__/container.test.d.ts +1 -1
- package/dist/__tests__/container.test.d.ts.map +1 -1
- package/dist/__tests__/container.test.js +34 -54
- package/dist/__tests__/container.test.js.map +1 -1
- package/dist/__tests__/decorators.test.d.ts +1 -1
- package/dist/__tests__/decorators.test.d.ts.map +1 -1
- package/dist/__tests__/decorators.test.js +166 -37
- package/dist/__tests__/decorators.test.js.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +5 -14
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +0 -13
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +28 -16
- package/dist/decorators.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/src/__tests__/container.test.ts +33 -53
- package/src/__tests__/decorators.test.ts +38 -24
- package/src/container.ts +6 -34
- package/src/decorators.ts +33 -17
- package/src/index.ts +1 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @praxisjs/di
|
|
2
2
|
|
|
3
|
+
## 1.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7e90df6: Refactor `@Injectable` and `@Scope` to use `ClassBehavior` / `createClassDecorator` from `@praxisjs/decorators`. Simplify `Container.instantiate` to plain `new target()`, removing the internal TC39 metadata maps (`constructorDepsMap`, `propDepsMap`) and the associated `setConstructorDeps` / `setPropDep` helpers.
|
|
8
|
+
|
|
9
|
+
## 1.2.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 92880d1: Remove reflect-metadata dependency and implement TC39-compatible metadata storage
|
|
14
|
+
|
|
15
|
+
The DI container now uses WeakMaps for storing constructor and property dependency metadata instead of relying on the reflect-metadata polyfill. This reduces external dependencies while maintaining full API compatibility. New helpers `setConstructorDeps` and `setPropDep` are exported for manual metadata management when needed.
|
|
16
|
+
|
|
3
17
|
## 1.1.4
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=container.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
1
|
import { describe, it, expect } from "vitest";
|
|
3
2
|
import { Container, Token, token } from "../container";
|
|
4
3
|
describe("Token", () => {
|
|
@@ -86,22 +85,15 @@ describe("Container", () => {
|
|
|
86
85
|
const c = new Container();
|
|
87
86
|
expect(c.register(A).register(B)).toBe(c);
|
|
88
87
|
});
|
|
89
|
-
it("
|
|
90
|
-
class
|
|
91
|
-
}
|
|
92
|
-
class Service {
|
|
88
|
+
it("parent singleton is reused when resolved from child container", () => {
|
|
89
|
+
class SharedService {
|
|
93
90
|
}
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
Reflect.defineMetadata("di:props", propsMap, Service.prototype);
|
|
101
|
-
const instance = c.resolve(Service);
|
|
102
|
-
expect(instance.logger).toBeInstanceOf(Logger);
|
|
103
|
-
// Cleanup
|
|
104
|
-
Reflect.deleteMetadata("di:props", Service.prototype);
|
|
91
|
+
const parent = new Container();
|
|
92
|
+
parent.register(SharedService, { scope: "singleton" });
|
|
93
|
+
const child = parent.createChild();
|
|
94
|
+
const fromChild = child.resolve(SharedService);
|
|
95
|
+
const fromParent = parent.resolve(SharedService);
|
|
96
|
+
expect(fromChild).toBe(fromParent);
|
|
105
97
|
});
|
|
106
98
|
it("child container falls back to parent for unregistered service", () => {
|
|
107
99
|
class MyDep {
|
|
@@ -119,23 +111,17 @@ describe("Container", () => {
|
|
|
119
111
|
const grandchild = child.createChild();
|
|
120
112
|
expect(grandchild.resolve(URL_TOKEN)).toBe("https://grandparent.com");
|
|
121
113
|
});
|
|
122
|
-
it("
|
|
123
|
-
class
|
|
124
|
-
}
|
|
125
|
-
class Car {
|
|
126
|
-
constructor(engine) {
|
|
127
|
-
this.engine = engine;
|
|
128
|
-
}
|
|
114
|
+
it("registerFactory can resolve other services from the container", () => {
|
|
115
|
+
class Logger {
|
|
129
116
|
}
|
|
117
|
+
const LOG_WRAP = token("LOG_WRAP");
|
|
130
118
|
const c = new Container();
|
|
131
|
-
c.register(
|
|
132
|
-
c.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
expect(
|
|
137
|
-
expect(car.engine).toBeInstanceOf(Engine);
|
|
138
|
-
Reflect.deleteMetadata("di:inject", Car);
|
|
119
|
+
c.register(Logger);
|
|
120
|
+
c.registerFactory(LOG_WRAP, (container) => ({
|
|
121
|
+
logger: container.resolve(Logger),
|
|
122
|
+
}));
|
|
123
|
+
const result = c.resolve(LOG_WRAP);
|
|
124
|
+
expect(result.logger).toBeInstanceOf(Logger);
|
|
139
125
|
});
|
|
140
126
|
it("registering the same class twice replaces the previous registration", () => {
|
|
141
127
|
class Counter {
|
|
@@ -153,25 +139,17 @@ describe("Container", () => {
|
|
|
153
139
|
expect(second).toBeInstanceOf(Counter);
|
|
154
140
|
expect(second).not.toBe(first);
|
|
155
141
|
});
|
|
156
|
-
it("
|
|
157
|
-
class
|
|
158
|
-
constructor(b) {
|
|
159
|
-
this.b = b;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
class B {
|
|
163
|
-
constructor(a) {
|
|
164
|
-
this.a = a;
|
|
165
|
-
}
|
|
142
|
+
it("re-registering with different scope switches scope correctly", () => {
|
|
143
|
+
class Svc {
|
|
166
144
|
}
|
|
167
145
|
const c = new Container();
|
|
168
|
-
c.register(
|
|
169
|
-
c.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
146
|
+
c.register(Svc, { scope: "singleton" });
|
|
147
|
+
c.resolve(Svc); // warm up singleton
|
|
148
|
+
c.register(Svc, { scope: "transient" });
|
|
149
|
+
const a = c.resolve(Svc);
|
|
150
|
+
const b = c.resolve(Svc);
|
|
151
|
+
expect(a).toBeInstanceOf(Svc);
|
|
152
|
+
expect(a).not.toBe(b);
|
|
175
153
|
});
|
|
176
154
|
it("factory function that throws — error message includes which service failed", () => {
|
|
177
155
|
class Broken {
|
|
@@ -228,12 +206,14 @@ describe("Container", () => {
|
|
|
228
206
|
}
|
|
229
207
|
}
|
|
230
208
|
c.register(Outer);
|
|
231
|
-
const err = (() => {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
209
|
+
const err = (() => {
|
|
210
|
+
try {
|
|
211
|
+
c.resolve(Outer);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
return e;
|
|
215
|
+
}
|
|
216
|
+
})();
|
|
237
217
|
expect(err.message).toMatch(/\[DI\] Service not registered/);
|
|
238
218
|
expect(err.message).not.toMatch(/Failed to instantiate/);
|
|
239
219
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.test.js","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"container.test.js","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=decorators.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decorators.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":""}
|
|
@@ -32,53 +32,118 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
32
32
|
}
|
|
33
33
|
return useValue ? value : void 0;
|
|
34
34
|
};
|
|
35
|
-
import "reflect-metadata";
|
|
36
35
|
import { describe, it, expect, vi } from "vitest";
|
|
37
36
|
import { Container, container, token } from "../container";
|
|
38
|
-
import { Injectable, Inject, InjectContainer, Scope
|
|
37
|
+
import { Injectable, Inject, InjectContainer, Scope } from "../decorators";
|
|
39
38
|
function makeFieldCtx(name) {
|
|
40
39
|
const initializers = [];
|
|
41
40
|
return {
|
|
42
41
|
ctx: {
|
|
43
42
|
name,
|
|
44
43
|
kind: "field",
|
|
45
|
-
addInitializer(fn) {
|
|
44
|
+
addInitializer(fn) {
|
|
45
|
+
initializers.push(fn);
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
run(instance) {
|
|
49
|
+
initializers.forEach((fn) => {
|
|
50
|
+
fn.call(instance);
|
|
51
|
+
});
|
|
46
52
|
},
|
|
47
|
-
run(instance) { initializers.forEach((fn) => { fn.call(instance); }); },
|
|
48
53
|
};
|
|
49
54
|
}
|
|
50
55
|
// ── @Injectable ───────────────────────────────────────────────────────────────
|
|
51
56
|
describe("Injectable", () => {
|
|
52
57
|
it("with no arguments — defaults to singleton scope", () => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
+
})();
|
|
56
75
|
const a = container.resolve(SingletonByDefault);
|
|
57
76
|
const b = container.resolve(SingletonByDefault);
|
|
58
77
|
expect(a).toBe(b);
|
|
59
78
|
});
|
|
60
79
|
it("registers the class in the global container", () => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
})();
|
|
65
100
|
expect(container.resolve(MyService)).toBeInstanceOf(MyService);
|
|
66
101
|
expect(container.resolve(MyService).greet()).toBe("hello");
|
|
67
102
|
});
|
|
68
103
|
it("registers with transient scope — each resolve returns a new instance", () => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
+
})();
|
|
72
121
|
expect(container.resolve(TmpService)).not.toBe(container.resolve(TmpService));
|
|
73
122
|
});
|
|
74
123
|
});
|
|
75
124
|
// ── @Inject ───────────────────────────────────────────────────────────────────
|
|
76
125
|
describe("Inject", () => {
|
|
77
126
|
it("injects a registered service via property", () => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
+
})();
|
|
82
147
|
const { ctx, run } = makeFieldCtx("logger");
|
|
83
148
|
Inject(Logger)(undefined, ctx);
|
|
84
149
|
const instance = {};
|
|
@@ -99,9 +164,23 @@ describe("Inject", () => {
|
|
|
99
164
|
expect(() => instance.dep).toThrow("[Inject]");
|
|
100
165
|
});
|
|
101
166
|
it("warns on direct assignment in non-production", () => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
+
})();
|
|
105
184
|
const { ctx, run } = makeFieldCtx("dep2");
|
|
106
185
|
Inject(Dep2)(undefined, ctx);
|
|
107
186
|
const instance = {};
|
|
@@ -112,12 +191,26 @@ describe("Inject", () => {
|
|
|
112
191
|
spy.mockRestore();
|
|
113
192
|
});
|
|
114
193
|
it("returns cached value on second access (cache hit)", () => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
+
constructor() {
|
|
202
|
+
this.id = Math.random();
|
|
203
|
+
}
|
|
204
|
+
static {
|
|
205
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
206
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
207
|
+
CachedService = _classThis = _classDescriptor.value;
|
|
208
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
209
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
return CachedService = _classThis;
|
|
213
|
+
})();
|
|
121
214
|
const { ctx, run } = makeFieldCtx("svc");
|
|
122
215
|
Inject(CachedService)(undefined, ctx);
|
|
123
216
|
const instance = {};
|
|
@@ -127,9 +220,23 @@ describe("Inject", () => {
|
|
|
127
220
|
expect(first).toBe(second); // same cached instance
|
|
128
221
|
});
|
|
129
222
|
it("does not warn on direct assignment in production mode", () => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
223
|
+
let ProdDep = (() => {
|
|
224
|
+
let _classDecorators = [Injectable()];
|
|
225
|
+
let _classDescriptor;
|
|
226
|
+
let _classExtraInitializers = [];
|
|
227
|
+
let _classThis;
|
|
228
|
+
var ProdDep = class {
|
|
229
|
+
static { _classThis = this; }
|
|
230
|
+
static {
|
|
231
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
232
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
233
|
+
ProdDep = _classThis = _classDescriptor.value;
|
|
234
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
235
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
return ProdDep = _classThis;
|
|
239
|
+
})();
|
|
133
240
|
const { ctx, run } = makeFieldCtx("dep");
|
|
134
241
|
Inject(ProdDep)(undefined, ctx);
|
|
135
242
|
const instance = {};
|
|
@@ -214,7 +321,9 @@ describe("Scope", () => {
|
|
|
214
321
|
it("services registered in configure are resolvable within the scope", () => {
|
|
215
322
|
const DB_URL = token("DB_URL");
|
|
216
323
|
let DataModule = (() => {
|
|
217
|
-
let _classDecorators = [Scope((c) => {
|
|
324
|
+
let _classDecorators = [Scope((c) => {
|
|
325
|
+
c.registerValue(DB_URL, "postgres://localhost");
|
|
326
|
+
})];
|
|
218
327
|
let _classDescriptor;
|
|
219
328
|
let _classExtraInitializers = [];
|
|
220
329
|
let _classThis;
|
|
@@ -273,7 +382,9 @@ describe("Scope", () => {
|
|
|
273
382
|
});
|
|
274
383
|
it("@InjectContainer returns the scoped child container", () => {
|
|
275
384
|
let Service = (() => {
|
|
276
|
-
let _classDecorators = [Scope((c) => {
|
|
385
|
+
let _classDecorators = [Scope((c) => {
|
|
386
|
+
c.registerValue(token("X"), 42);
|
|
387
|
+
})];
|
|
277
388
|
let _classDescriptor;
|
|
278
389
|
let _classExtraInitializers = [];
|
|
279
390
|
let _classThis;
|
|
@@ -297,9 +408,23 @@ describe("Scope", () => {
|
|
|
297
408
|
expect(instance.container).not.toBe(container);
|
|
298
409
|
});
|
|
299
410
|
it("child container inherits registrations from the parent", () => {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
411
|
+
let GlobalService = (() => {
|
|
412
|
+
let _classDecorators = [Injectable()];
|
|
413
|
+
let _classDescriptor;
|
|
414
|
+
let _classExtraInitializers = [];
|
|
415
|
+
let _classThis;
|
|
416
|
+
var GlobalService = class {
|
|
417
|
+
static { _classThis = this; }
|
|
418
|
+
static {
|
|
419
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
420
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
421
|
+
GlobalService = _classThis = _classDescriptor.value;
|
|
422
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
423
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
return GlobalService = _classThis;
|
|
427
|
+
})();
|
|
303
428
|
let Child = (() => {
|
|
304
429
|
let _classDecorators = [Scope()];
|
|
305
430
|
let _classDescriptor;
|
|
@@ -327,7 +452,9 @@ describe("Scope", () => {
|
|
|
327
452
|
const PARENT_TOKEN = token("PARENT_VAL");
|
|
328
453
|
const CHILD_TOKEN = token("CHILD_VAL");
|
|
329
454
|
let Parent = (() => {
|
|
330
|
-
let _classDecorators = [Scope((c) => {
|
|
455
|
+
let _classDecorators = [Scope((c) => {
|
|
456
|
+
c.registerValue(PARENT_TOKEN, "parent");
|
|
457
|
+
})];
|
|
331
458
|
let _classDescriptor;
|
|
332
459
|
let _classExtraInitializers = [];
|
|
333
460
|
let _classThis;
|
|
@@ -344,7 +471,9 @@ describe("Scope", () => {
|
|
|
344
471
|
return Parent = _classThis;
|
|
345
472
|
})();
|
|
346
473
|
let Child = (() => {
|
|
347
|
-
let _classDecorators = [Scope((c) => {
|
|
474
|
+
let _classDecorators = [Scope((c) => {
|
|
475
|
+
c.registerValue(CHILD_TOKEN, "child");
|
|
476
|
+
})];
|
|
348
477
|
let _classDescriptor;
|
|
349
478
|
let _classExtraInitializers = [];
|
|
350
479
|
let _classThis;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.test.js","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decorators.test.js","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"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"}
|
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEjE,qBAAa,KAAK,CAAC,EAAE;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,WAAW,EAAE,MAAM;IAG/B,QAAQ;CAGT;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAEtD;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEjE,qBAAa,KAAK,CAAC,EAAE;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,WAAW,EAAE,MAAM;IAG/B,QAAQ;CAGT;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAEtD;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY;gBAExB,MAAM,CAAC,EAAE,SAAS;IAI9B,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAQ1E,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAKjD,eAAe,CAAC,CAAC,EACf,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,GACnC,IAAI;IAKP,OAAO,CAAC,CAAC,EACP,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACjC,eAAe,6CAA0C,GACxD,CAAC;IAwCJ,OAAO,CAAC,WAAW;IAWnB,WAAW,IAAI,SAAS;CAGzB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
package/dist/container.js
CHANGED
|
@@ -33,7 +33,7 @@ export class Container {
|
|
|
33
33
|
const key = target;
|
|
34
34
|
if (resolutionStack.has(key)) {
|
|
35
35
|
const chain = [...resolutionStack, key]
|
|
36
|
-
.map((k) => k instanceof Token ? k.toString() :
|
|
36
|
+
.map((k) => (k instanceof Token ? k.toString() : k.name))
|
|
37
37
|
.join(" → ");
|
|
38
38
|
throw new Error(`[DI] Circular dependency detected: ${chain}`);
|
|
39
39
|
}
|
|
@@ -54,33 +54,24 @@ export class Container {
|
|
|
54
54
|
}
|
|
55
55
|
const descriptor = entry;
|
|
56
56
|
if (descriptor.scope === "singleton") {
|
|
57
|
-
descriptor.instance ??= this.instantiate(descriptor.target
|
|
57
|
+
descriptor.instance ??= this.instantiate(descriptor.target);
|
|
58
58
|
return descriptor.instance;
|
|
59
59
|
}
|
|
60
|
-
return this.instantiate(descriptor.target
|
|
60
|
+
return this.instantiate(descriptor.target);
|
|
61
61
|
}
|
|
62
62
|
finally {
|
|
63
63
|
resolutionStack.delete(key);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
instantiate(target
|
|
67
|
-
const deps = Reflect.getMetadata("di:inject", target) ?? [];
|
|
68
|
-
const resolvedDeps = deps.map((dep) => this.resolve(dep, resolutionStack));
|
|
69
|
-
let instance;
|
|
66
|
+
instantiate(target) {
|
|
70
67
|
try {
|
|
71
|
-
|
|
68
|
+
return new target();
|
|
72
69
|
}
|
|
73
70
|
catch (err) {
|
|
74
71
|
if (err instanceof Error && err.message.startsWith("[DI]"))
|
|
75
72
|
throw err;
|
|
76
73
|
throw new Error(`[DI] Failed to instantiate "${target.name}": ${err.message}`);
|
|
77
74
|
}
|
|
78
|
-
const rawPropInjections = Reflect.getMetadata("di:props", target.prototype);
|
|
79
|
-
const propInjections = rawPropInjections ?? new Map();
|
|
80
|
-
for (const [prop, dep] of propInjections) {
|
|
81
|
-
instance[prop] = this.resolve(dep, resolutionStack);
|
|
82
|
-
}
|
|
83
|
-
return instance;
|
|
84
75
|
}
|
|
85
76
|
createChild() {
|
|
86
77
|
return new Container(this);
|
package/dist/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,KAAK;IAEhB,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IACD,QAAQ;QACN,OAAO,SAAS,IAAI,CAAC,WAAW,GAAG,CAAC;IACtC,CAAC;CACF;AAED,MAAM,UAAU,KAAK,CAAI,WAAmB;IAC1C,OAAO,IAAI,KAAK,CAAI,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,SAAS;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/decorators.d.ts
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
import { type Container, Token, type Constructor, type InjectableOptions } from "./container";
|
|
2
2
|
export declare function Injectable(options?: InjectableOptions): (value: Constructor, _context: ClassDecoratorContext) => void;
|
|
3
|
-
/**
|
|
4
|
-
* Creates a child DI container scoped to each instance of the decorated class.
|
|
5
|
-
* Services registered in the configure callback are available within the scope,
|
|
6
|
-
* and @Inject / @InjectContainer will resolve from it automatically.
|
|
7
|
-
*
|
|
8
|
-
* @Scope((c) => {
|
|
9
|
-
* c.register(UserRepository);
|
|
10
|
-
* c.registerValue(AuthToken, 'abc');
|
|
11
|
-
* })
|
|
12
|
-
* class UserModule extends StatefulComponent {
|
|
13
|
-
* @Inject(UserRepository) repo!: UserRepository;
|
|
14
|
-
* }
|
|
15
|
-
*/
|
|
16
3
|
export declare function Scope(configure?: (c: Container) => void): (cls: new (...args: any[]) => any, _ctx: ClassDecoratorContext) => any;
|
|
17
4
|
export declare function Inject<T>(dep: Constructor<T> | Token<T>): (_value: undefined, context: ClassFieldDecoratorContext<any>) => void;
|
|
18
5
|
export declare function InjectContainer(): (_value: undefined, context: ClassFieldDecoratorContext<any>) => void;
|
package/dist/decorators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA0BzG,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAEmB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CACzI;AA8BD,wBAAgB,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,GAEkB,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,qBAAqB,KAAK,GAAG,CAC/I;AAID,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAsCrC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC,KAAK,IAAI,CACvF;AAID,wBAAgB,eAAe,IAkBZ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC,KAAK,IAAI,CACvF"}
|
package/dist/decorators.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createFieldDecorator } from "@praxisjs/decorators";
|
|
1
|
+
import { createFieldDecorator, createClassDecorator, ClassBehavior } from "@praxisjs/decorators";
|
|
2
2
|
import { container, Token } from "./container";
|
|
3
3
|
// Maps instances to their scoped child containers (set by @Scope).
|
|
4
4
|
const scopedContainers = new WeakMap();
|
|
@@ -6,10 +6,21 @@ function resolveFrom(instance) {
|
|
|
6
6
|
return scopedContainers.get(instance) ?? container;
|
|
7
7
|
}
|
|
8
8
|
// ── @Injectable ───────────────────────────────────────────────────────────────
|
|
9
|
+
class InjectableBehavior extends ClassBehavior {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super();
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
create(_instance) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
+
initialize(Enhanced, _original) {
|
|
19
|
+
container.register(Enhanced, this.options);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
9
22
|
export function Injectable(options = {}) {
|
|
10
|
-
return
|
|
11
|
-
container.register(value, options);
|
|
12
|
-
};
|
|
23
|
+
return createClassDecorator(new InjectableBehavior(options));
|
|
13
24
|
}
|
|
14
25
|
// ── @Scope ────────────────────────────────────────────────────────────────────
|
|
15
26
|
/**
|
|
@@ -25,20 +36,21 @@ export function Injectable(options = {}) {
|
|
|
25
36
|
* @Inject(UserRepository) repo!: UserRepository;
|
|
26
37
|
* }
|
|
27
38
|
*/
|
|
39
|
+
class ScopeBehavior extends ClassBehavior {
|
|
40
|
+
constructor(configure) {
|
|
41
|
+
super();
|
|
42
|
+
this.configure = configure;
|
|
43
|
+
}
|
|
44
|
+
create(instance) {
|
|
45
|
+
const child = container.createChild();
|
|
46
|
+
this.configure?.(child);
|
|
47
|
+
scopedContainers.set(instance, child);
|
|
48
|
+
return {};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
28
51
|
export function Scope(configure) {
|
|
29
52
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
return
|
|
31
|
-
return class extends cls {
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
-
constructor(...args) {
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
35
|
-
super(...args);
|
|
36
|
-
const child = container.createChild();
|
|
37
|
-
configure?.(child);
|
|
38
|
-
scopedContainers.set(this, child);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
};
|
|
53
|
+
return createClassDecorator(new ScopeBehavior(configure));
|
|
42
54
|
}
|
|
43
55
|
// ── @Inject ───────────────────────────────────────────────────────────────────
|
|
44
56
|
export function Inject(dep) {
|
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":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export { Injectable, Inject, InjectContainer, Scope, } from "./decorators";
|
|
1
|
+
export { Injectable, Inject, InjectContainer, Scope } from "./decorators";
|
|
3
2
|
export { Container, container, Token, token } from "./container";
|
|
4
3
|
export type { Scope as ScopeType, InjectableOptions, Constructor, ServiceDescriptor, } from "./container";
|
|
5
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EACV,KAAK,IAAI,SAAS,EAClB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export { Injectable, Inject, InjectContainer, Scope, } from "./decorators";
|
|
1
|
+
export { Injectable, Inject, InjectContainer, Scope } from "./decorators";
|
|
3
2
|
export { Container, container, Token, token } from "./container";
|
|
4
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisjs/di",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"reflect-metadata": "^0.2.2",
|
|
15
14
|
"@praxisjs/core": "1.2.0",
|
|
16
15
|
"@praxisjs/decorators": "0.7.2"
|
|
17
16
|
},
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
1
|
import { describe, it, expect } from "vitest";
|
|
3
2
|
|
|
4
3
|
import { Container, Token, token, type Constructor } from "../container";
|
|
@@ -94,26 +93,15 @@ describe("Container", () => {
|
|
|
94
93
|
expect(c.register(A).register(B)).toBe(c);
|
|
95
94
|
});
|
|
96
95
|
|
|
97
|
-
it("
|
|
98
|
-
class
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const c = new Container();
|
|
104
|
-
c.register(Logger);
|
|
105
|
-
c.register(Service);
|
|
106
|
-
|
|
107
|
-
// Simulate what the @Inject decorator does — set di:props metadata
|
|
108
|
-
const propsMap = new Map<string, unknown>();
|
|
109
|
-
propsMap.set("logger", Logger);
|
|
110
|
-
Reflect.defineMetadata("di:props", propsMap, Service.prototype);
|
|
111
|
-
|
|
112
|
-
const instance = c.resolve(Service);
|
|
113
|
-
expect(instance.logger).toBeInstanceOf(Logger);
|
|
96
|
+
it("parent singleton is reused when resolved from child container", () => {
|
|
97
|
+
class SharedService {}
|
|
98
|
+
const parent = new Container();
|
|
99
|
+
parent.register(SharedService, { scope: "singleton" });
|
|
100
|
+
const child = parent.createChild();
|
|
114
101
|
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
const fromChild = child.resolve(SharedService);
|
|
103
|
+
const fromParent = parent.resolve(SharedService);
|
|
104
|
+
expect(fromChild).toBe(fromParent);
|
|
117
105
|
});
|
|
118
106
|
|
|
119
107
|
it("child container falls back to parent for unregistered service", () => {
|
|
@@ -133,24 +121,16 @@ describe("Container", () => {
|
|
|
133
121
|
expect(grandchild.resolve(URL_TOKEN)).toBe("https://grandparent.com");
|
|
134
122
|
});
|
|
135
123
|
|
|
136
|
-
it("
|
|
137
|
-
class
|
|
138
|
-
|
|
139
|
-
constructor(public engine: Engine) {}
|
|
140
|
-
}
|
|
141
|
-
|
|
124
|
+
it("registerFactory can resolve other services from the container", () => {
|
|
125
|
+
class Logger {}
|
|
126
|
+
const LOG_WRAP = token<{ logger: Logger }>("LOG_WRAP");
|
|
142
127
|
const c = new Container();
|
|
143
|
-
c.register(
|
|
144
|
-
c.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const car = c.resolve(Car);
|
|
150
|
-
expect(car).toBeInstanceOf(Car);
|
|
151
|
-
expect(car.engine).toBeInstanceOf(Engine);
|
|
152
|
-
|
|
153
|
-
Reflect.deleteMetadata("di:inject", Car);
|
|
128
|
+
c.register(Logger);
|
|
129
|
+
c.registerFactory(LOG_WRAP, (container) => ({
|
|
130
|
+
logger: container.resolve(Logger),
|
|
131
|
+
}));
|
|
132
|
+
const result = c.resolve(LOG_WRAP);
|
|
133
|
+
expect(result.logger).toBeInstanceOf(Logger);
|
|
154
134
|
});
|
|
155
135
|
|
|
156
136
|
it("registering the same class twice replaces the previous registration", () => {
|
|
@@ -170,23 +150,17 @@ describe("Container", () => {
|
|
|
170
150
|
expect(second).not.toBe(first);
|
|
171
151
|
});
|
|
172
152
|
|
|
173
|
-
it("
|
|
174
|
-
class
|
|
175
|
-
constructor(public b: unknown) {}
|
|
176
|
-
}
|
|
177
|
-
class B {
|
|
178
|
-
constructor(public a: unknown) {}
|
|
179
|
-
}
|
|
153
|
+
it("re-registering with different scope switches scope correctly", () => {
|
|
154
|
+
class Svc {}
|
|
180
155
|
const c = new Container();
|
|
181
|
-
c.register(
|
|
182
|
-
c.
|
|
183
|
-
Reflect.defineMetadata("di:inject", [B], A);
|
|
184
|
-
Reflect.defineMetadata("di:inject", [A], B);
|
|
185
|
-
|
|
186
|
-
expect(() => c.resolve(A)).toThrow("[DI] Circular dependency detected");
|
|
156
|
+
c.register(Svc, { scope: "singleton" });
|
|
157
|
+
c.resolve(Svc); // warm up singleton
|
|
187
158
|
|
|
188
|
-
|
|
189
|
-
|
|
159
|
+
c.register(Svc, { scope: "transient" });
|
|
160
|
+
const a = c.resolve(Svc);
|
|
161
|
+
const b = c.resolve(Svc);
|
|
162
|
+
expect(a).toBeInstanceOf(Svc);
|
|
163
|
+
expect(a).not.toBe(b);
|
|
190
164
|
});
|
|
191
165
|
|
|
192
166
|
it("factory function that throws — error message includes which service failed", () => {
|
|
@@ -250,7 +224,13 @@ describe("Container", () => {
|
|
|
250
224
|
}
|
|
251
225
|
c.register(Outer);
|
|
252
226
|
|
|
253
|
-
const err = (() => {
|
|
227
|
+
const err = (() => {
|
|
228
|
+
try {
|
|
229
|
+
c.resolve(Outer);
|
|
230
|
+
} catch (e) {
|
|
231
|
+
return e as Error;
|
|
232
|
+
}
|
|
233
|
+
})()!;
|
|
254
234
|
expect(err.message).toMatch(/\[DI\] Service not registered/);
|
|
255
235
|
expect(err.message).not.toMatch(/Failed to instantiate/);
|
|
256
236
|
});
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
1
|
import { describe, it, expect, vi } from "vitest";
|
|
3
2
|
|
|
4
3
|
import { Container, container, token } from "../container";
|
|
5
|
-
import {
|
|
6
|
-
Injectable,
|
|
7
|
-
Inject,
|
|
8
|
-
InjectContainer,
|
|
9
|
-
Scope,
|
|
10
|
-
} from "../decorators";
|
|
4
|
+
import { Injectable, Inject, InjectContainer, Scope } from "../decorators";
|
|
11
5
|
|
|
12
6
|
function makeFieldCtx(name: string) {
|
|
13
7
|
const initializers: Array<(this: unknown) => void> = [];
|
|
@@ -15,9 +9,15 @@ function makeFieldCtx(name: string) {
|
|
|
15
9
|
ctx: {
|
|
16
10
|
name,
|
|
17
11
|
kind: "field" as const,
|
|
18
|
-
addInitializer(fn: (this: unknown) => void) {
|
|
12
|
+
addInitializer(fn: (this: unknown) => void) {
|
|
13
|
+
initializers.push(fn);
|
|
14
|
+
},
|
|
19
15
|
} as ClassFieldDecoratorContext,
|
|
20
|
-
run(instance: unknown) {
|
|
16
|
+
run(instance: unknown) {
|
|
17
|
+
initializers.forEach((fn) => {
|
|
18
|
+
fn.call(instance);
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -25,26 +25,30 @@ function makeFieldCtx(name: string) {
|
|
|
25
25
|
|
|
26
26
|
describe("Injectable", () => {
|
|
27
27
|
it("with no arguments — defaults to singleton scope", () => {
|
|
28
|
+
@Injectable()
|
|
28
29
|
class SingletonByDefault {}
|
|
29
|
-
Injectable()(SingletonByDefault, {} as ClassDecoratorContext);
|
|
30
30
|
const a = container.resolve(SingletonByDefault);
|
|
31
31
|
const b = container.resolve(SingletonByDefault);
|
|
32
32
|
expect(a).toBe(b);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it("registers the class in the global container", () => {
|
|
36
|
+
@Injectable()
|
|
36
37
|
class MyService {
|
|
37
|
-
greet() {
|
|
38
|
+
greet() {
|
|
39
|
+
return "hello";
|
|
40
|
+
}
|
|
38
41
|
}
|
|
39
|
-
Injectable()(MyService, {} as ClassDecoratorContext);
|
|
40
42
|
expect(container.resolve(MyService)).toBeInstanceOf(MyService);
|
|
41
43
|
expect(container.resolve(MyService).greet()).toBe("hello");
|
|
42
44
|
});
|
|
43
45
|
|
|
44
46
|
it("registers with transient scope — each resolve returns a new instance", () => {
|
|
47
|
+
@Injectable({ scope: "transient" })
|
|
45
48
|
class TmpService {}
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
expect(container.resolve(TmpService)).not.toBe(
|
|
50
|
+
container.resolve(TmpService),
|
|
51
|
+
);
|
|
48
52
|
});
|
|
49
53
|
});
|
|
50
54
|
|
|
@@ -52,10 +56,12 @@ describe("Injectable", () => {
|
|
|
52
56
|
|
|
53
57
|
describe("Inject", () => {
|
|
54
58
|
it("injects a registered service via property", () => {
|
|
59
|
+
@Injectable()
|
|
55
60
|
class Logger {
|
|
56
|
-
log(msg: string) {
|
|
61
|
+
log(msg: string) {
|
|
62
|
+
return msg;
|
|
63
|
+
}
|
|
57
64
|
}
|
|
58
|
-
Injectable()(Logger, {} as ClassDecoratorContext);
|
|
59
65
|
|
|
60
66
|
const { ctx, run } = makeFieldCtx("logger");
|
|
61
67
|
Inject(Logger)(undefined, ctx);
|
|
@@ -77,8 +83,8 @@ describe("Inject", () => {
|
|
|
77
83
|
});
|
|
78
84
|
|
|
79
85
|
it("warns on direct assignment in non-production", () => {
|
|
86
|
+
@Injectable()
|
|
80
87
|
class Dep2 {}
|
|
81
|
-
Injectable()(Dep2, {} as ClassDecoratorContext);
|
|
82
88
|
const { ctx, run } = makeFieldCtx("dep2");
|
|
83
89
|
Inject(Dep2)(undefined, ctx);
|
|
84
90
|
const instance: Record<string, unknown> = {};
|
|
@@ -90,10 +96,10 @@ describe("Inject", () => {
|
|
|
90
96
|
});
|
|
91
97
|
|
|
92
98
|
it("returns cached value on second access (cache hit)", () => {
|
|
99
|
+
@Injectable()
|
|
93
100
|
class CachedService {
|
|
94
101
|
id = Math.random();
|
|
95
102
|
}
|
|
96
|
-
Injectable()(CachedService, {} as ClassDecoratorContext);
|
|
97
103
|
|
|
98
104
|
const { ctx, run } = makeFieldCtx("svc");
|
|
99
105
|
Inject(CachedService)(undefined, ctx);
|
|
@@ -106,8 +112,8 @@ describe("Inject", () => {
|
|
|
106
112
|
});
|
|
107
113
|
|
|
108
114
|
it("does not warn on direct assignment in production mode", () => {
|
|
115
|
+
@Injectable()
|
|
109
116
|
class ProdDep {}
|
|
110
|
-
Injectable()(ProdDep, {} as ClassDecoratorContext);
|
|
111
117
|
const { ctx, run } = makeFieldCtx("dep");
|
|
112
118
|
Inject(ProdDep)(undefined, ctx);
|
|
113
119
|
const instance: Record<string, unknown> = {};
|
|
@@ -188,7 +194,9 @@ describe("Scope", () => {
|
|
|
188
194
|
it("services registered in configure are resolvable within the scope", () => {
|
|
189
195
|
const DB_URL = token<string>("DB_URL");
|
|
190
196
|
|
|
191
|
-
@Scope((c) => {
|
|
197
|
+
@Scope((c) => {
|
|
198
|
+
c.registerValue(DB_URL, "postgres://localhost");
|
|
199
|
+
})
|
|
192
200
|
class DataModule {}
|
|
193
201
|
|
|
194
202
|
const { ctx, run } = makeFieldCtx("db");
|
|
@@ -225,7 +233,9 @@ describe("Scope", () => {
|
|
|
225
233
|
});
|
|
226
234
|
|
|
227
235
|
it("@InjectContainer returns the scoped child container", () => {
|
|
228
|
-
@Scope((c) => {
|
|
236
|
+
@Scope((c) => {
|
|
237
|
+
c.registerValue(token<number>("X"), 42);
|
|
238
|
+
})
|
|
229
239
|
class Service {}
|
|
230
240
|
|
|
231
241
|
const { ctx, run } = makeFieldCtx("container");
|
|
@@ -239,8 +249,8 @@ describe("Scope", () => {
|
|
|
239
249
|
});
|
|
240
250
|
|
|
241
251
|
it("child container inherits registrations from the parent", () => {
|
|
252
|
+
@Injectable()
|
|
242
253
|
class GlobalService {}
|
|
243
|
-
Injectable()(GlobalService, {} as ClassDecoratorContext);
|
|
244
254
|
|
|
245
255
|
@Scope()
|
|
246
256
|
class Child {}
|
|
@@ -257,10 +267,14 @@ describe("Scope", () => {
|
|
|
257
267
|
const PARENT_TOKEN = token<string>("PARENT_VAL");
|
|
258
268
|
const CHILD_TOKEN = token<string>("CHILD_VAL");
|
|
259
269
|
|
|
260
|
-
@Scope((c) => {
|
|
270
|
+
@Scope((c) => {
|
|
271
|
+
c.registerValue(PARENT_TOKEN, "parent");
|
|
272
|
+
})
|
|
261
273
|
class Parent {}
|
|
262
274
|
|
|
263
|
-
@Scope((c) => {
|
|
275
|
+
@Scope((c) => {
|
|
276
|
+
c.registerValue(CHILD_TOKEN, "child");
|
|
277
|
+
})
|
|
264
278
|
class Child extends (Parent as unknown as new () => object) {}
|
|
265
279
|
|
|
266
280
|
const { ctx: ctxC, run: runC } = makeFieldCtx("c");
|
package/src/container.ts
CHANGED
|
@@ -28,10 +28,7 @@ export function token<T>(description: string): Token<T> {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export class Container {
|
|
31
|
-
private readonly services = new Map<
|
|
32
|
-
Constructor | Token<unknown>,
|
|
33
|
-
unknown
|
|
34
|
-
>();
|
|
31
|
+
private readonly services = new Map<Constructor | Token<unknown>, unknown>();
|
|
35
32
|
private readonly parent?: Container;
|
|
36
33
|
|
|
37
34
|
constructor(parent?: Container) {
|
|
@@ -67,9 +64,7 @@ export class Container {
|
|
|
67
64
|
|
|
68
65
|
if (resolutionStack.has(key)) {
|
|
69
66
|
const chain = [...resolutionStack, key]
|
|
70
|
-
.map((k) =>
|
|
71
|
-
k instanceof Token ? k.toString() : (k).name,
|
|
72
|
-
)
|
|
67
|
+
.map((k) => (k instanceof Token ? k.toString() : k.name))
|
|
73
68
|
.join(" → ");
|
|
74
69
|
throw new Error(`[DI] Circular dependency detected: ${chain}`);
|
|
75
70
|
}
|
|
@@ -94,48 +89,25 @@ export class Container {
|
|
|
94
89
|
const descriptor = entry as ServiceDescriptor;
|
|
95
90
|
|
|
96
91
|
if (descriptor.scope === "singleton") {
|
|
97
|
-
descriptor.instance ??= this.instantiate(descriptor.target
|
|
92
|
+
descriptor.instance ??= this.instantiate(descriptor.target);
|
|
98
93
|
return descriptor.instance as T;
|
|
99
94
|
}
|
|
100
95
|
|
|
101
|
-
return this.instantiate(descriptor.target
|
|
96
|
+
return this.instantiate(descriptor.target) as T;
|
|
102
97
|
} finally {
|
|
103
98
|
resolutionStack.delete(key);
|
|
104
99
|
}
|
|
105
100
|
}
|
|
106
101
|
|
|
107
|
-
private instantiate<T>(
|
|
108
|
-
target: Constructor<T>,
|
|
109
|
-
resolutionStack = new Set<Constructor | Token<unknown>>(),
|
|
110
|
-
): T {
|
|
111
|
-
const deps: Array<Constructor | Token<unknown>> =
|
|
112
|
-
(Reflect.getMetadata("di:inject", target) as Array<Constructor | Token<unknown>> | undefined) ?? [];
|
|
113
|
-
|
|
114
|
-
const resolvedDeps = deps.map((dep) =>
|
|
115
|
-
this.resolve(dep as Constructor, resolutionStack),
|
|
116
|
-
);
|
|
117
|
-
let instance: T;
|
|
102
|
+
private instantiate<T>(target: Constructor<T>): T {
|
|
118
103
|
try {
|
|
119
|
-
|
|
104
|
+
return new target();
|
|
120
105
|
} catch (err) {
|
|
121
106
|
if (err instanceof Error && err.message.startsWith("[DI]")) throw err;
|
|
122
107
|
throw new Error(
|
|
123
108
|
`[DI] Failed to instantiate "${target.name}": ${(err as Error).message}`,
|
|
124
109
|
);
|
|
125
110
|
}
|
|
126
|
-
|
|
127
|
-
const rawPropInjections: unknown = Reflect.getMetadata("di:props", target.prototype as object);
|
|
128
|
-
const propInjections =
|
|
129
|
-
(rawPropInjections as Map<string, Constructor | Token<unknown>> | undefined) ?? new Map<string, Constructor | Token<unknown>>();
|
|
130
|
-
|
|
131
|
-
for (const [prop, dep] of propInjections) {
|
|
132
|
-
(instance as Record<string, unknown>)[prop] = this.resolve(
|
|
133
|
-
dep as Constructor,
|
|
134
|
-
resolutionStack,
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return instance;
|
|
139
111
|
}
|
|
140
112
|
|
|
141
113
|
createChild(): Container {
|
package/src/decorators.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { RootComponent } from "@praxisjs/core/internal";
|
|
2
|
+
import { createFieldDecorator, createClassDecorator, ClassBehavior, type FieldBinding, type ClassEnhancement } from "@praxisjs/decorators";
|
|
2
3
|
|
|
3
4
|
import { container, type Container, Token, type Constructor, type InjectableOptions } from "./container";
|
|
4
5
|
|
|
@@ -11,10 +12,24 @@ function resolveFrom(instance: object) {
|
|
|
11
12
|
|
|
12
13
|
// ── @Injectable ───────────────────────────────────────────────────────────────
|
|
13
14
|
|
|
15
|
+
class InjectableBehavior extends ClassBehavior {
|
|
16
|
+
constructor(private readonly options: InjectableOptions) {
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
create(_instance: RootComponent): ClassEnhancement {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
initialize(Enhanced: new (...args: any[]) => unknown, _original: new (...args: any[]) => unknown): void {
|
|
26
|
+
container.register(Enhanced as Constructor, this.options);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
14
30
|
export function Injectable(options: InjectableOptions = {}) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
31
|
+
|
|
32
|
+
return createClassDecorator(new InjectableBehavior(options)) as unknown as (value: Constructor, _context: ClassDecoratorContext) => void;
|
|
18
33
|
}
|
|
19
34
|
|
|
20
35
|
// ── @Scope ────────────────────────────────────────────────────────────────────
|
|
@@ -32,21 +47,22 @@ export function Injectable(options: InjectableOptions = {}) {
|
|
|
32
47
|
* @Inject(UserRepository) repo!: UserRepository;
|
|
33
48
|
* }
|
|
34
49
|
*/
|
|
50
|
+
class ScopeBehavior extends ClassBehavior {
|
|
51
|
+
constructor(private readonly configure?: (c: Container) => void) {
|
|
52
|
+
super();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
create(instance: RootComponent): ClassEnhancement {
|
|
56
|
+
const child = container.createChild();
|
|
57
|
+
this.configure?.(child);
|
|
58
|
+
scopedContainers.set(instance as object, child);
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
35
63
|
export function Scope(configure?: (c: Container) => void) {
|
|
36
64
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
-
return
|
|
38
|
-
|
|
39
|
-
return class extends cls {
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
constructor(...args: any[]) {
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
43
|
-
super(...args);
|
|
44
|
-
const child = container.createChild();
|
|
45
|
-
configure?.(child);
|
|
46
|
-
scopedContainers.set(this as object, child);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
};
|
|
65
|
+
return createClassDecorator(new ScopeBehavior(configure)) as unknown as (cls: new (...args: any[]) => any, _ctx: ClassDecoratorContext) => any;
|
|
50
66
|
}
|
|
51
67
|
|
|
52
68
|
// ── @Inject ───────────────────────────────────────────────────────────────────
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
Injectable,
|
|
5
|
-
Inject,
|
|
6
|
-
InjectContainer,
|
|
7
|
-
Scope,
|
|
8
|
-
} from "./decorators";
|
|
1
|
+
export { Injectable, Inject, InjectContainer, Scope } from "./decorators";
|
|
9
2
|
export { Container, container, Token, token } from "./container";
|
|
10
3
|
export type {
|
|
11
4
|
Scope as ScopeType,
|