@praxisjs/di 0.2.3 → 1.1.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/CHANGELOG.md +65 -0
- package/dist/__tests__/container.test.js +108 -3
- package/dist/__tests__/container.test.js.map +1 -1
- package/dist/__tests__/decorators.test.js +322 -100
- package/dist/__tests__/decorators.test.js.map +1 -1
- package/dist/container.d.ts +2 -2
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +43 -24
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +16 -4
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +83 -45
- package/dist/decorators.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/__tests__/container.test.ts +106 -1
- package/src/__tests__/decorators.test.ts +204 -114
- package/src/container.ts +59 -25
- package/src/decorators.ts +99 -55
- package/src/index.ts +2 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,70 @@
|
|
|
1
1
|
# @praxisjs/di
|
|
2
2
|
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 029ef04: Circular dependencies are now detected during resolution and throw a descriptive error showing the full dependency chain (e.g. `ServiceA → ServiceB → ServiceA`).
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [029ef04]
|
|
12
|
+
- Updated dependencies [029ef04]
|
|
13
|
+
- Updated dependencies [029ef04]
|
|
14
|
+
- Updated dependencies [029ef04]
|
|
15
|
+
- Updated dependencies [029ef04]
|
|
16
|
+
- @praxisjs/core@1.1.0
|
|
17
|
+
- @praxisjs/decorators@0.6.0
|
|
18
|
+
|
|
19
|
+
## 1.0.0
|
|
20
|
+
|
|
21
|
+
### Major Changes
|
|
22
|
+
|
|
23
|
+
- 3372878: Migrate all packages from functional APIs to a decorator-first design.
|
|
24
|
+
|
|
25
|
+
**`@praxisjs/core`**
|
|
26
|
+
|
|
27
|
+
- Added `Composable` abstract base class for building class-based composables
|
|
28
|
+
- Removed `resource`, `createResource`, `Resource`, `ResourceStatus`, `ResourceOptions` from public exports — use `@Resource` from `@praxisjs/decorators` instead
|
|
29
|
+
|
|
30
|
+
**`@praxisjs/motion`**
|
|
31
|
+
|
|
32
|
+
- Replaced `useMotion`, `tween`, `spring`, `createTransition`, `Animate`, `easings`, `resolveEasing` with `@Tween` and `@Spring` decorators
|
|
33
|
+
|
|
34
|
+
**`@praxisjs/di`**
|
|
35
|
+
|
|
36
|
+
- Replaced `useService` and `createScope` with a `@Scope` decorator
|
|
37
|
+
- Renamed exported type `Scope` to `ScopeType` to free the name for the new decorator
|
|
38
|
+
|
|
39
|
+
**`@praxisjs/fsm`**
|
|
40
|
+
|
|
41
|
+
- Removed `createMachine` — use the `@StateMachine` and `@Transition` decorators directly
|
|
42
|
+
|
|
43
|
+
**`@praxisjs/router`**
|
|
44
|
+
|
|
45
|
+
- Removed `createRouter`, `lazy`, `useRouter`, `useParams`, `useQuery`, `useLocation`
|
|
46
|
+
- Added `@RouterConfig`, `@Lazy`, `@InjectRouter`, `@Params`, `@Query`, `@Location` decorators
|
|
47
|
+
|
|
48
|
+
**`@praxisjs/store`**
|
|
49
|
+
|
|
50
|
+
- Removed `createStore` — use the `@Store` and `@UseStore` decorators directly
|
|
51
|
+
|
|
52
|
+
**`@praxisjs/composables`**
|
|
53
|
+
|
|
54
|
+
- Replaced all `use*` composable functions with class-based composables extending `Composable`:
|
|
55
|
+
`WindowSize`, `ScrollPosition`, `ElementSize`, `Intersection`, `Focus`, `MediaQuery`, `ColorScheme`, `Mouse`, `KeyCombo`, `Idle`, `Clipboard`, `Geolocation`, `TimeAgo`, `Pagination`
|
|
56
|
+
|
|
57
|
+
**`@praxisjs/concurrent`**
|
|
58
|
+
|
|
59
|
+
- Removed `task`, `queue`, `pool` and their instance types — use `@Task`, `@Queue`, `@Pool` decorators instead
|
|
60
|
+
|
|
61
|
+
### Patch Changes
|
|
62
|
+
|
|
63
|
+
- Updated dependencies [3372878]
|
|
64
|
+
- Updated dependencies [feaa478]
|
|
65
|
+
- @praxisjs/core@1.0.0
|
|
66
|
+
- @praxisjs/decorators@0.5.0
|
|
67
|
+
|
|
3
68
|
## 0.2.3
|
|
4
69
|
|
|
5
70
|
### Patch Changes
|
|
@@ -29,7 +29,9 @@ describe("Container", () => {
|
|
|
29
29
|
});
|
|
30
30
|
it("creates new instance for transient scope", () => {
|
|
31
31
|
class Counter {
|
|
32
|
-
|
|
32
|
+
constructor() {
|
|
33
|
+
this.value = Math.random();
|
|
34
|
+
}
|
|
33
35
|
}
|
|
34
36
|
const c = new Container();
|
|
35
37
|
c.register(Counter, { scope: "transient" });
|
|
@@ -88,7 +90,6 @@ describe("Container", () => {
|
|
|
88
90
|
class Logger {
|
|
89
91
|
}
|
|
90
92
|
class Service {
|
|
91
|
-
logger;
|
|
92
93
|
}
|
|
93
94
|
const c = new Container();
|
|
94
95
|
c.register(Logger);
|
|
@@ -118,9 +119,29 @@ describe("Container", () => {
|
|
|
118
119
|
const grandchild = child.createChild();
|
|
119
120
|
expect(grandchild.resolve(URL_TOKEN)).toBe("https://grandparent.com");
|
|
120
121
|
});
|
|
122
|
+
it("resolves constructor injection from di:inject metadata", () => {
|
|
123
|
+
class Engine {
|
|
124
|
+
}
|
|
125
|
+
class Car {
|
|
126
|
+
constructor(engine) {
|
|
127
|
+
this.engine = engine;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const c = new Container();
|
|
131
|
+
c.register(Engine);
|
|
132
|
+
c.register(Car);
|
|
133
|
+
// Simulate what a @Inject constructor param decorator would set
|
|
134
|
+
Reflect.defineMetadata("di:inject", [Engine], Car);
|
|
135
|
+
const car = c.resolve(Car);
|
|
136
|
+
expect(car).toBeInstanceOf(Car);
|
|
137
|
+
expect(car.engine).toBeInstanceOf(Engine);
|
|
138
|
+
Reflect.deleteMetadata("di:inject", Car);
|
|
139
|
+
});
|
|
121
140
|
it("registering the same class twice replaces the previous registration", () => {
|
|
122
141
|
class Counter {
|
|
123
|
-
|
|
142
|
+
constructor() {
|
|
143
|
+
this.value = Math.random();
|
|
144
|
+
}
|
|
124
145
|
}
|
|
125
146
|
const c = new Container();
|
|
126
147
|
c.register(Counter, { scope: "singleton" });
|
|
@@ -132,5 +153,89 @@ describe("Container", () => {
|
|
|
132
153
|
expect(second).toBeInstanceOf(Counter);
|
|
133
154
|
expect(second).not.toBe(first);
|
|
134
155
|
});
|
|
156
|
+
it("circular dependency A → B → A throws a descriptive error", () => {
|
|
157
|
+
class A {
|
|
158
|
+
constructor(b) {
|
|
159
|
+
this.b = b;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
class B {
|
|
163
|
+
constructor(a) {
|
|
164
|
+
this.a = a;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const c = new Container();
|
|
168
|
+
c.register(A);
|
|
169
|
+
c.register(B);
|
|
170
|
+
Reflect.defineMetadata("di:inject", [B], A);
|
|
171
|
+
Reflect.defineMetadata("di:inject", [A], B);
|
|
172
|
+
expect(() => c.resolve(A)).toThrow("[DI] Circular dependency detected");
|
|
173
|
+
Reflect.deleteMetadata("di:inject", A);
|
|
174
|
+
Reflect.deleteMetadata("di:inject", B);
|
|
175
|
+
});
|
|
176
|
+
it("factory function that throws — error message includes which service failed", () => {
|
|
177
|
+
class Broken {
|
|
178
|
+
constructor() {
|
|
179
|
+
throw new Error("boom");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const c = new Container();
|
|
183
|
+
c.register(Broken);
|
|
184
|
+
expect(() => c.resolve(Broken)).toThrow("Broken");
|
|
185
|
+
expect(() => c.resolve(Broken)).toThrow("[DI] Failed to instantiate");
|
|
186
|
+
});
|
|
187
|
+
it("resolve() called concurrently on the same uninitialized singleton — returns same instance or does not crash", async () => {
|
|
188
|
+
class SlowService {
|
|
189
|
+
}
|
|
190
|
+
const c = new Container();
|
|
191
|
+
c.register(SlowService, { scope: "singleton" });
|
|
192
|
+
const [a, b] = await Promise.all([
|
|
193
|
+
Promise.resolve(c.resolve(SlowService)),
|
|
194
|
+
Promise.resolve(c.resolve(SlowService)),
|
|
195
|
+
]);
|
|
196
|
+
expect(a).toBeInstanceOf(SlowService);
|
|
197
|
+
expect(a).toBe(b);
|
|
198
|
+
});
|
|
199
|
+
it("re-registering a service clears the previous singleton instance", () => {
|
|
200
|
+
class Svc {
|
|
201
|
+
constructor() {
|
|
202
|
+
this.id = Math.random();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const c = new Container();
|
|
206
|
+
c.register(Svc, { scope: "singleton" });
|
|
207
|
+
const first = c.resolve(Svc);
|
|
208
|
+
c.register(Svc, { scope: "singleton" });
|
|
209
|
+
const second = c.resolve(Svc);
|
|
210
|
+
expect(second).not.toBe(first);
|
|
211
|
+
});
|
|
212
|
+
it("circular dependency chain including a Token shows the Token name in the error", () => {
|
|
213
|
+
const MY_TOKEN = token("MyToken");
|
|
214
|
+
const c = new Container();
|
|
215
|
+
c.registerValue(MY_TOKEN, "value");
|
|
216
|
+
// Pre-populate the stack as if we are already in the middle of resolving MY_TOKEN
|
|
217
|
+
const stack = new Set([MY_TOKEN]);
|
|
218
|
+
expect(() => c.resolve(MY_TOKEN, stack)).toThrow("Token(MyToken)");
|
|
219
|
+
});
|
|
220
|
+
it("instantiate rethrows DI errors thrown inside a constructor without wrapping", () => {
|
|
221
|
+
const c = new Container();
|
|
222
|
+
class Unregistered {
|
|
223
|
+
}
|
|
224
|
+
class Outer {
|
|
225
|
+
constructor() {
|
|
226
|
+
// Manually triggers a [DI] error inside the constructor body
|
|
227
|
+
c.resolve(Unregistered);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
c.register(Outer);
|
|
231
|
+
const err = (() => { try {
|
|
232
|
+
c.resolve(Outer);
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
return e;
|
|
236
|
+
} })();
|
|
237
|
+
expect(err.message).toMatch(/\[DI\] Service not registered/);
|
|
238
|
+
expect(err.message).not.toMatch(/Failed to instantiate/);
|
|
239
|
+
});
|
|
135
240
|
});
|
|
136
241
|
//# sourceMappingURL=container.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.test.js","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"container.test.js","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"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"}
|