@furystack/shades 12.0.1 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.2.0] - 2026-02-22
4
+
5
+ ### ✨ Features
6
+
7
+ ### Dependency tracking for `useDisposable`
8
+
9
+ `useDisposable` now accepts an optional `deps` array parameter. When the serialized deps value changes between renders, the old resource is automatically disposed and a new one is created. This enables resources that depend on dynamic parameters (e.g., entity-sync subscriptions with changing query options) to be re-created without encoding all parameters into the cache key.
10
+
11
+ **Usage:**
12
+
13
+ ```typescript
14
+ const liveEntity = useDisposable('entitySync:MyModel', () => syncService.subscribeEntity(MyModel, currentKey), [
15
+ currentKey,
16
+ ])
17
+ ```
18
+
19
+ ### 🧪 Tests
20
+
21
+ - Added tests for `useDisposable` dependency tracking in `ResourceManager`, covering re-creation on deps change and no-op when deps are unchanged
22
+
23
+ ## [12.1.0] - 2026-02-19
24
+
25
+ ### ✨ Features
26
+
27
+ - Added `navigate(path)` method to `LocationService` for programmatic SPA routing. It calls `history.pushState` and updates the internal routing state in a single step, replacing the need to call `history.pushState` and manually trigger state updates.
28
+
29
+ ### ⬆️ Dependencies
30
+
31
+ - Updated `@furystack/inject` and `@furystack/utils`
32
+
3
33
  ## [12.0.1] - 2026-02-11
4
34
 
5
35
  ### 🐛 Bug Fixes
@@ -27,6 +27,11 @@ export declare class LocationService implements Disposable {
27
27
  onDeserializedLocationSearchChanged: ObservableValue<Record<string, unknown>>;
28
28
  locationDeserializerObserver: import("@furystack/utils").ValueObserver<string>;
29
29
  updateState: () => void;
30
+ /**
31
+ * Navigate to a path. Use this instead of raw history.pushState for SPA routing.
32
+ * The LocationService interceptor ensures routing state is updated correctly.
33
+ */
34
+ navigate(path: string): void;
30
35
  readonly searchParamObservables: Map<string, ObservableValue<any>>;
31
36
  /**
32
37
  * Gets or creates an observable for a search parameter
@@ -1 +1 @@
1
- {"version":3,"file":"location-service.d.ts","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,EACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD;;;GAGG;AACH,qBACa,eAAgB,YAAW,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;aAEvB,sBAAsB;gBAFrB,sBAAsB,+CAAgC,EAEvD,sBAAsB,uDAAgC;IAoBxE,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,oBAAoB,CAAoC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;IAYvB;;OAEG;IACI,qBAAqB,0BAAuD;IAEnF;;OAEG;IACI,qBAAqB,0BAAsD;IAElF;;OAEG;IACI,uBAAuB,0BAA+C;IAEtE,mCAAmC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE7E,4BAA4B,mDAEjC;IAEK,WAAW,aAIL;IAEb,SAAgB,sBAAsB,oCAA0C;IAEhF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IA+BrD,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,kBAAkB,CAEb;CACd;AAED;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,QAAQ,EAClB,WAAW,OAAO,6BAA6B,EAC/C,aAAa,OAAO,6BAA6B,SAQlD,CAAA"}
1
+ {"version":3,"file":"location-service.d.ts","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,EACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD;;;GAGG;AACH,qBACa,eAAgB,YAAW,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;aAEvB,sBAAsB;gBAFrB,sBAAsB,+CAAgC,EAEvD,sBAAsB,uDAAgC;IAoBxE,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,oBAAoB,CAAoC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;IAYvB;;OAEG;IACI,qBAAqB,0BAAuD;IAEnF;;OAEG;IACI,qBAAqB,0BAAsD;IAElF;;OAEG;IACI,uBAAuB,0BAA+C;IAEtE,mCAAmC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE7E,4BAA4B,mDAEjC;IAEK,WAAW,aAIL;IAEb;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAgB,sBAAsB,oCAA0C;IAEhF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IA+BrD,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,kBAAkB,CAEb;CACd;AAED;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,QAAQ,EAClB,WAAW,OAAO,6BAA6B,EAC/C,aAAa,OAAO,6BAA6B,SAQlD,CAAA"}
@@ -67,6 +67,14 @@ let LocationService = class LocationService {
67
67
  this.onLocationHashChanged.setValue(location.hash.replace('#', ''));
68
68
  this.onLocationSearchChanged.setValue(location.search);
69
69
  }).bind(this);
70
+ /**
71
+ * Navigate to a path. Use this instead of raw history.pushState for SPA routing.
72
+ * The LocationService interceptor ensures routing state is updated correctly.
73
+ */
74
+ navigate(path) {
75
+ history.pushState(null, '', path);
76
+ this.updateState();
77
+ }
70
78
  searchParamObservables = new Map();
71
79
  /**
72
80
  * Gets or creates an observable for a search parameter
@@ -1 +1 @@
1
- {"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"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"}
@@ -33,6 +33,16 @@ describe('LocationService', () => {
33
33
  // expect(onLocaionChanged).toBeCalledTimes(4)
34
34
  });
35
35
  });
36
+ it('Should update location path when navigate is called', async () => {
37
+ await usingAsync(new Injector(), async (i) => {
38
+ const onLocationChanged = vi.fn();
39
+ const s = i.getInstance(LocationService);
40
+ s.onLocationPathChanged.subscribe(onLocationChanged);
41
+ s.navigate('/dashboard');
42
+ expect(s.onLocationPathChanged.getValue()).toBe('/dashboard');
43
+ expect(onLocationChanged).toHaveBeenCalledWith('/dashboard');
44
+ });
45
+ });
36
46
  describe('useSearchParam', () => {
37
47
  it('Should create observables lazily', async () => {
38
48
  await usingAsync(new Injector(), async (i) => {
@@ -1 +1 @@
1
- {"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,20 @@ import { ObservableValue } from '@furystack/utils';
5
5
  */
6
6
  export declare class ResourceManager implements AsyncDisposable {
7
7
  private readonly disposables;
8
+ private readonly disposableDeps;
8
9
  /**
9
10
  * Returns an existing disposable resource by key, or creates and caches a new one.
10
11
  * Resources are automatically disposed when the component is removed from the DOM.
12
+ * When `deps` is provided, the resource is re-created (and the old one disposed) whenever
13
+ * the serialized deps value changes. This is useful for resources that depend on dynamic
14
+ * parameters (e.g., entity-sync subscriptions with changing query options).
11
15
  * @param key Unique key for caching this resource
12
16
  * @param factory Factory function called once to create the resource
17
+ * @param deps Optional dependency array -- when deps change, the old resource is disposed and a new one is created.
18
+ * Values are compared via `JSON.stringify`, so `undefined` and `null` are treated as equal within arrays.
13
19
  * @returns The cached or newly created resource
14
20
  */
15
- useDisposable<T extends Disposable | AsyncDisposable>(key: string, factory: () => T): T;
21
+ useDisposable<T extends Disposable | AsyncDisposable>(key: string, factory: () => T, deps?: readonly unknown[]): T;
16
22
  readonly observers: Map<string, ValueObserver<any>>;
17
23
  /**
18
24
  * Subscribes to an observable value by key. If the observable changes between renders,
@@ -1 +1 @@
1
- {"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,EAAE,eAAe,EAAmC,MAAM,kBAAkB,CAAA;AAEnF;;GAEG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAE9E;;;;;;OAMG;IACI,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAU9F,SAAgB,SAAS,kCAAwC;IAEjE;;;;;;;;OAQG;IACI,aAAa,GAAI,CAAC,EACvB,KAAK,MAAM,EACX,YAAY,eAAe,CAAC,CAAC,CAAC,EAC9B,UAAU,mBAAmB,CAAC,CAAC,CAAC,EAChC,UAAU,oBAAoB,CAAC,CAAC,CAAC,KAChC,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAc7C;IAED,SAAgB,cAAc,oCAA0C;IAExE;;;;;;;OAOG;IACI,QAAQ,GAAI,CAAC,EAClB,KAAK,MAAM,EACX,cAAc,CAAC,EACf,UAAU,mBAAmB,CAAC,CAAC,CAAC,KAC/B,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAa7C;IAEY,CAAC,MAAM,CAAC,YAAY,CAAC;CA4BnC"}
1
+ {"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,EAAE,eAAe,EAAmC,MAAM,kBAAkB,CAAA;AAEnF;;GAEG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAC9E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D;;;;;;;;;;;OAWG;IACI,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,eAAe,EACzD,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,EAChB,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GACxB,CAAC;IAsBJ,SAAgB,SAAS,kCAAwC;IAEjE;;;;;;;;OAQG;IACI,aAAa,GAAI,CAAC,EACvB,KAAK,MAAM,EACX,YAAY,eAAe,CAAC,CAAC,CAAC,EAC9B,UAAU,mBAAmB,CAAC,CAAC,CAAC,EAChC,UAAU,oBAAoB,CAAC,CAAC,CAAC,KAChC,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAc7C;IAED,SAAgB,cAAc,oCAA0C;IAExE;;;;;;;OAOG;IACI,QAAQ,GAAI,CAAC,EAClB,KAAK,MAAM,EACX,cAAc,CAAC,EACf,UAAU,mBAAmB,CAAC,CAAC,CAAC,KAC/B,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAa7C;IAEY,CAAC,MAAM,CAAC,YAAY,CAAC;CA6BnC"}
@@ -5,21 +5,40 @@ import { ObservableValue, isAsyncDisposable, isDisposable } from '@furystack/uti
5
5
  */
6
6
  export class ResourceManager {
7
7
  disposables = new Map();
8
+ disposableDeps = new Map();
8
9
  /**
9
10
  * Returns an existing disposable resource by key, or creates and caches a new one.
10
11
  * Resources are automatically disposed when the component is removed from the DOM.
12
+ * When `deps` is provided, the resource is re-created (and the old one disposed) whenever
13
+ * the serialized deps value changes. This is useful for resources that depend on dynamic
14
+ * parameters (e.g., entity-sync subscriptions with changing query options).
11
15
  * @param key Unique key for caching this resource
12
16
  * @param factory Factory function called once to create the resource
17
+ * @param deps Optional dependency array -- when deps change, the old resource is disposed and a new one is created.
18
+ * Values are compared via `JSON.stringify`, so `undefined` and `null` are treated as equal within arrays.
13
19
  * @returns The cached or newly created resource
14
20
  */
15
- useDisposable(key, factory) {
21
+ useDisposable(key, factory, deps) {
16
22
  const existing = this.disposables.get(key);
17
- if (!existing) {
18
- const created = factory();
19
- this.disposables.set(key, created);
20
- return created;
23
+ const depsKey = deps !== undefined ? JSON.stringify(deps) : undefined;
24
+ if (existing) {
25
+ if (depsKey !== undefined && this.disposableDeps.get(key) !== depsKey) {
26
+ if (isDisposable(existing))
27
+ existing[Symbol.dispose]();
28
+ if (isAsyncDisposable(existing))
29
+ void existing[Symbol.asyncDispose]();
30
+ const created = factory();
31
+ this.disposables.set(key, created);
32
+ this.disposableDeps.set(key, depsKey);
33
+ return created;
34
+ }
35
+ return existing;
21
36
  }
22
- return existing;
37
+ const created = factory();
38
+ this.disposables.set(key, created);
39
+ if (depsKey !== undefined)
40
+ this.disposableDeps.set(key, depsKey);
41
+ return created;
23
42
  }
24
43
  observers = new Map();
25
44
  /**
@@ -84,6 +103,7 @@ export class ResourceManager {
84
103
  throw error;
85
104
  }
86
105
  this.disposables.clear();
106
+ this.disposableDeps.clear();
87
107
  this.observers.forEach((r) => r[Symbol.dispose]());
88
108
  this.observers.clear();
89
109
  this.stateObservers.forEach((r) => r[Symbol.dispose]());
@@ -1 +1 @@
1
- {"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"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"}
@@ -178,5 +178,82 @@ describe('ResourceManager', () => {
178
178
  })).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: There was an error during disposing 1 stores: Error: Failed to dispose]`);
179
179
  expect(disposable[Symbol.asyncDispose]).toHaveBeenCalledTimes(1);
180
180
  });
181
+ describe('useDisposable with deps', () => {
182
+ it('Should behave identically without deps (backward compat)', async () => {
183
+ await usingAsync(new ResourceManager(), async (rm) => {
184
+ const factory = vi.fn(() => ({
185
+ [Symbol.dispose]: () => { },
186
+ }));
187
+ const d1 = rm.useDisposable('test', factory);
188
+ const d2 = rm.useDisposable('test', factory);
189
+ expect(d1).toBe(d2);
190
+ expect(factory).toHaveBeenCalledTimes(1);
191
+ });
192
+ });
193
+ it('Should return cached resource when deps are the same', async () => {
194
+ await usingAsync(new ResourceManager(), async (rm) => {
195
+ const factory = vi.fn(() => ({
196
+ [Symbol.dispose]: () => { },
197
+ }));
198
+ const d1 = rm.useDisposable('test', factory, [1, 'a']);
199
+ const d2 = rm.useDisposable('test', factory, [1, 'a']);
200
+ expect(d1).toBe(d2);
201
+ expect(factory).toHaveBeenCalledTimes(1);
202
+ });
203
+ });
204
+ it('Should dispose old resource and create new one when deps change', async () => {
205
+ await usingAsync(new ResourceManager(), async (rm) => {
206
+ const dispose1 = vi.fn();
207
+ const dispose2 = vi.fn();
208
+ const d1 = rm.useDisposable('test', () => ({ [Symbol.dispose]: dispose1 }), ['v1']);
209
+ expect(dispose1).not.toHaveBeenCalled();
210
+ const d2 = rm.useDisposable('test', () => ({ [Symbol.dispose]: dispose2 }), ['v2']);
211
+ expect(dispose1).toHaveBeenCalledTimes(1);
212
+ expect(d1).not.toBe(d2);
213
+ });
214
+ });
215
+ it('Should call Symbol.asyncDispose on old async-disposable resource when deps change', async () => {
216
+ await usingAsync(new ResourceManager(), async (rm) => {
217
+ const asyncDispose1 = vi.fn();
218
+ rm.useDisposable('test', () => ({ [Symbol.asyncDispose]: asyncDispose1 }), ['v1']);
219
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: () => { } }), ['v2']);
220
+ expect(asyncDispose1).toHaveBeenCalledTimes(1);
221
+ });
222
+ });
223
+ it('Should handle multiple sequential dep changes (A -> B -> C)', async () => {
224
+ await usingAsync(new ResourceManager(), async (rm) => {
225
+ const disposeA = vi.fn();
226
+ const disposeB = vi.fn();
227
+ const disposeC = vi.fn();
228
+ const a = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeA }), ['A']);
229
+ const b = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeB }), ['B']);
230
+ const c = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeC }), ['C']);
231
+ expect(a).not.toBe(b);
232
+ expect(b).not.toBe(c);
233
+ expect(disposeA).toHaveBeenCalledTimes(1);
234
+ expect(disposeB).toHaveBeenCalledTimes(1);
235
+ expect(disposeC).not.toHaveBeenCalled();
236
+ });
237
+ });
238
+ it('Should dispose the final resource on ResourceManager disposal', async () => {
239
+ const disposeFn = vi.fn();
240
+ await usingAsync(new ResourceManager(), async (rm) => {
241
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: vi.fn() }), ['v1']);
242
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeFn }), ['v2']);
243
+ expect(disposeFn).not.toHaveBeenCalled();
244
+ });
245
+ expect(disposeFn).toHaveBeenCalledTimes(1);
246
+ });
247
+ it('Should treat undefined and null as equal within deps (JSON.stringify behavior)', async () => {
248
+ await usingAsync(new ResourceManager(), async (rm) => {
249
+ const factory = vi.fn(() => ({
250
+ [Symbol.dispose]: vi.fn(),
251
+ }));
252
+ rm.useDisposable('test', factory, [undefined]);
253
+ rm.useDisposable('test', factory, [null]);
254
+ expect(factory).toHaveBeenCalledTimes(1);
255
+ });
256
+ });
257
+ });
181
258
  });
182
259
  //# sourceMappingURL=resource-manager.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/shades",
3
- "version": "12.0.1",
3
+ "version": "12.2.0",
4
4
  "description": "A lightweight UI framework for FuryStack with JSX support",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -40,14 +40,14 @@
40
40
  "homepage": "https://github.com/furystack/furystack",
41
41
  "devDependencies": {
42
42
  "@types/jsdom": "^27.0.0",
43
- "@types/node": "^25.2.3",
44
- "jsdom": "^28.0.0",
43
+ "@types/node": "^25.3.0",
44
+ "jsdom": "^28.1.0",
45
45
  "typescript": "^5.9.3",
46
46
  "vitest": "^4.0.18"
47
47
  },
48
48
  "dependencies": {
49
49
  "@furystack/inject": "^12.0.30",
50
- "@furystack/rest": "^8.0.36",
50
+ "@furystack/rest": "^8.0.37",
51
51
  "@furystack/utils": "^8.1.10",
52
52
  "path-to-regexp": "^8.3.0"
53
53
  },
@@ -38,6 +38,17 @@ describe('LocationService', () => {
38
38
  })
39
39
  })
40
40
 
41
+ it('Should update location path when navigate is called', async () => {
42
+ await usingAsync(new Injector(), async (i) => {
43
+ const onLocationChanged = vi.fn()
44
+ const s = i.getInstance(LocationService)
45
+ s.onLocationPathChanged.subscribe(onLocationChanged)
46
+ s.navigate('/dashboard')
47
+ expect(s.onLocationPathChanged.getValue()).toBe('/dashboard')
48
+ expect(onLocationChanged).toHaveBeenCalledWith('/dashboard')
49
+ })
50
+ })
51
+
41
52
  describe('useSearchParam', () => {
42
53
  it('Should create observables lazily', async () => {
43
54
  await usingAsync(new Injector(), async (i) => {
@@ -75,6 +75,15 @@ export class LocationService implements Disposable {
75
75
  this.onLocationSearchChanged.setValue(location.search)
76
76
  }).bind(this)
77
77
 
78
+ /**
79
+ * Navigate to a path. Use this instead of raw history.pushState for SPA routing.
80
+ * The LocationService interceptor ensures routing state is updated correctly.
81
+ */
82
+ public navigate(path: string): void {
83
+ history.pushState(null, '', path)
84
+ this.updateState()
85
+ }
86
+
78
87
  public readonly searchParamObservables = new Map<string, ObservableValue<any>>()
79
88
 
80
89
  /**
@@ -227,4 +227,100 @@ describe('ResourceManager', () => {
227
227
 
228
228
  expect(disposable[Symbol.asyncDispose]).toHaveBeenCalledTimes(1)
229
229
  })
230
+
231
+ describe('useDisposable with deps', () => {
232
+ it('Should behave identically without deps (backward compat)', async () => {
233
+ await usingAsync(new ResourceManager(), async (rm) => {
234
+ const factory = vi.fn(() => ({
235
+ [Symbol.dispose]: () => {},
236
+ }))
237
+ const d1 = rm.useDisposable('test', factory)
238
+ const d2 = rm.useDisposable('test', factory)
239
+
240
+ expect(d1).toBe(d2)
241
+ expect(factory).toHaveBeenCalledTimes(1)
242
+ })
243
+ })
244
+
245
+ it('Should return cached resource when deps are the same', async () => {
246
+ await usingAsync(new ResourceManager(), async (rm) => {
247
+ const factory = vi.fn(() => ({
248
+ [Symbol.dispose]: () => {},
249
+ }))
250
+ const d1 = rm.useDisposable('test', factory, [1, 'a'])
251
+ const d2 = rm.useDisposable('test', factory, [1, 'a'])
252
+
253
+ expect(d1).toBe(d2)
254
+ expect(factory).toHaveBeenCalledTimes(1)
255
+ })
256
+ })
257
+
258
+ it('Should dispose old resource and create new one when deps change', async () => {
259
+ await usingAsync(new ResourceManager(), async (rm) => {
260
+ const dispose1 = vi.fn()
261
+ const dispose2 = vi.fn()
262
+
263
+ const d1 = rm.useDisposable('test', () => ({ [Symbol.dispose]: dispose1 }), ['v1'])
264
+ expect(dispose1).not.toHaveBeenCalled()
265
+
266
+ const d2 = rm.useDisposable('test', () => ({ [Symbol.dispose]: dispose2 }), ['v2'])
267
+ expect(dispose1).toHaveBeenCalledTimes(1)
268
+ expect(d1).not.toBe(d2)
269
+ })
270
+ })
271
+
272
+ it('Should call Symbol.asyncDispose on old async-disposable resource when deps change', async () => {
273
+ await usingAsync(new ResourceManager(), async (rm) => {
274
+ const asyncDispose1 = vi.fn()
275
+
276
+ rm.useDisposable('test', () => ({ [Symbol.asyncDispose]: asyncDispose1 }), ['v1'])
277
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: () => {} }), ['v2'])
278
+
279
+ expect(asyncDispose1).toHaveBeenCalledTimes(1)
280
+ })
281
+ })
282
+
283
+ it('Should handle multiple sequential dep changes (A -> B -> C)', async () => {
284
+ await usingAsync(new ResourceManager(), async (rm) => {
285
+ const disposeA = vi.fn()
286
+ const disposeB = vi.fn()
287
+ const disposeC = vi.fn()
288
+
289
+ const a = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeA }), ['A'])
290
+ const b = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeB }), ['B'])
291
+ const c = rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeC }), ['C'])
292
+
293
+ expect(a).not.toBe(b)
294
+ expect(b).not.toBe(c)
295
+ expect(disposeA).toHaveBeenCalledTimes(1)
296
+ expect(disposeB).toHaveBeenCalledTimes(1)
297
+ expect(disposeC).not.toHaveBeenCalled()
298
+ })
299
+ })
300
+
301
+ it('Should dispose the final resource on ResourceManager disposal', async () => {
302
+ const disposeFn = vi.fn()
303
+
304
+ await usingAsync(new ResourceManager(), async (rm) => {
305
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: vi.fn() }), ['v1'])
306
+ rm.useDisposable('test', () => ({ [Symbol.dispose]: disposeFn }), ['v2'])
307
+ expect(disposeFn).not.toHaveBeenCalled()
308
+ })
309
+
310
+ expect(disposeFn).toHaveBeenCalledTimes(1)
311
+ })
312
+
313
+ it('Should treat undefined and null as equal within deps (JSON.stringify behavior)', async () => {
314
+ await usingAsync(new ResourceManager(), async (rm) => {
315
+ const factory = vi.fn(() => ({
316
+ [Symbol.dispose]: vi.fn(),
317
+ }))
318
+
319
+ rm.useDisposable('test', factory, [undefined])
320
+ rm.useDisposable('test', factory, [null])
321
+
322
+ expect(factory).toHaveBeenCalledTimes(1)
323
+ })
324
+ })
325
+ })
230
326
  })
@@ -7,22 +7,44 @@ import { ObservableValue, isAsyncDisposable, isDisposable } from '@furystack/uti
7
7
  */
8
8
  export class ResourceManager implements AsyncDisposable {
9
9
  private readonly disposables = new Map<string, Disposable | AsyncDisposable>()
10
+ private readonly disposableDeps = new Map<string, string>()
10
11
 
11
12
  /**
12
13
  * Returns an existing disposable resource by key, or creates and caches a new one.
13
14
  * Resources are automatically disposed when the component is removed from the DOM.
15
+ * When `deps` is provided, the resource is re-created (and the old one disposed) whenever
16
+ * the serialized deps value changes. This is useful for resources that depend on dynamic
17
+ * parameters (e.g., entity-sync subscriptions with changing query options).
14
18
  * @param key Unique key for caching this resource
15
19
  * @param factory Factory function called once to create the resource
20
+ * @param deps Optional dependency array -- when deps change, the old resource is disposed and a new one is created.
21
+ * Values are compared via `JSON.stringify`, so `undefined` and `null` are treated as equal within arrays.
16
22
  * @returns The cached or newly created resource
17
23
  */
18
- public useDisposable<T extends Disposable | AsyncDisposable>(key: string, factory: () => T): T {
24
+ public useDisposable<T extends Disposable | AsyncDisposable>(
25
+ key: string,
26
+ factory: () => T,
27
+ deps?: readonly unknown[],
28
+ ): T {
19
29
  const existing = this.disposables.get(key)
20
- if (!existing) {
21
- const created = factory()
22
- this.disposables.set(key, created)
23
- return created
30
+ const depsKey = deps !== undefined ? JSON.stringify(deps) : undefined
31
+
32
+ if (existing) {
33
+ if (depsKey !== undefined && this.disposableDeps.get(key) !== depsKey) {
34
+ if (isDisposable(existing)) existing[Symbol.dispose]()
35
+ if (isAsyncDisposable(existing)) void existing[Symbol.asyncDispose]()
36
+ const created = factory()
37
+ this.disposables.set(key, created)
38
+ this.disposableDeps.set(key, depsKey)
39
+ return created
40
+ }
41
+ return existing as T
24
42
  }
25
- return existing as T
43
+
44
+ const created = factory()
45
+ this.disposables.set(key, created)
46
+ if (depsKey !== undefined) this.disposableDeps.set(key, depsKey)
47
+ return created
26
48
  }
27
49
 
28
50
  public readonly observers = new Map<string, ValueObserver<any>>()
@@ -108,6 +130,7 @@ export class ResourceManager implements AsyncDisposable {
108
130
  }
109
131
 
110
132
  this.disposables.clear()
133
+ this.disposableDeps.clear()
111
134
  this.observers.forEach((r) => r[Symbol.dispose]())
112
135
  this.observers.clear()
113
136