@furystack/shades 13.2.2 → 15.0.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 +157 -0
- package/esm/component-factory.spec.d.ts.map +1 -1
- package/esm/component-factory.spec.js +2 -2
- package/esm/component-factory.spec.js.map +1 -1
- package/esm/components/define-nested-routes.d.ts +27 -0
- package/esm/components/define-nested-routes.d.ts.map +1 -0
- package/esm/components/define-nested-routes.js +26 -0
- package/esm/components/define-nested-routes.js.map +1 -0
- package/esm/components/define-nested-routes.spec.d.ts +2 -0
- package/esm/components/define-nested-routes.spec.d.ts.map +1 -0
- package/esm/components/define-nested-routes.spec.js +81 -0
- package/esm/components/define-nested-routes.spec.js.map +1 -0
- package/esm/components/index.d.ts +3 -3
- package/esm/components/index.d.ts.map +1 -1
- package/esm/components/index.js +3 -3
- package/esm/components/index.js.map +1 -1
- package/esm/components/nested-hooks.d.ts +62 -0
- package/esm/components/nested-hooks.d.ts.map +1 -0
- package/esm/components/nested-hooks.js +73 -0
- package/esm/components/nested-hooks.js.map +1 -0
- package/esm/components/nested-hooks.spec.d.ts +2 -0
- package/esm/components/nested-hooks.spec.d.ts.map +1 -0
- package/esm/components/nested-hooks.spec.js +211 -0
- package/esm/components/nested-hooks.spec.js.map +1 -0
- package/esm/components/nested-navigate.d.ts +52 -21
- package/esm/components/nested-navigate.d.ts.map +1 -1
- package/esm/components/nested-navigate.js +32 -17
- package/esm/components/nested-navigate.js.map +1 -1
- package/esm/components/nested-navigate.spec.js +109 -19
- package/esm/components/nested-navigate.spec.js.map +1 -1
- package/esm/components/nested-replace.d.ts +36 -0
- package/esm/components/nested-replace.d.ts.map +1 -0
- package/esm/components/nested-replace.js +38 -0
- package/esm/components/nested-replace.js.map +1 -0
- package/esm/components/nested-replace.spec.d.ts +2 -0
- package/esm/components/nested-replace.spec.d.ts.map +1 -0
- package/esm/components/nested-replace.spec.js +59 -0
- package/esm/components/nested-replace.spec.js.map +1 -0
- package/esm/components/nested-route-link.d.ts +36 -26
- package/esm/components/nested-route-link.d.ts.map +1 -1
- package/esm/components/nested-route-link.js +18 -20
- package/esm/components/nested-route-link.js.map +1 -1
- package/esm/components/nested-route-link.spec.js +67 -17
- package/esm/components/nested-route-link.spec.js.map +1 -1
- package/esm/components/nested-route-types.d.ts +79 -2
- package/esm/components/nested-route-types.d.ts.map +1 -1
- package/esm/components/nested-router.d.ts +77 -7
- package/esm/components/nested-router.d.ts.map +1 -1
- package/esm/components/nested-router.js +139 -13
- package/esm/components/nested-router.js.map +1 -1
- package/esm/components/nested-router.spec.js +283 -52
- package/esm/components/nested-router.spec.js.map +1 -1
- package/esm/services/location-service.d.ts +39 -42
- package/esm/services/location-service.d.ts.map +1 -1
- package/esm/services/location-service.js +115 -134
- package/esm/services/location-service.js.map +1 -1
- package/esm/services/location-service.spec.js +59 -24
- package/esm/services/location-service.spec.js.map +1 -1
- package/esm/services/route-match-service.d.ts +3 -2
- package/esm/services/route-match-service.d.ts.map +1 -1
- package/esm/services/route-match-service.js +13 -22
- package/esm/services/route-match-service.js.map +1 -1
- package/esm/services/route-match-service.spec.js +42 -49
- package/esm/services/route-match-service.spec.js.map +1 -1
- package/esm/services/route-meta-utils.d.ts +28 -6
- package/esm/services/route-meta-utils.d.ts.map +1 -1
- package/esm/services/route-meta-utils.js +18 -4
- package/esm/services/route-meta-utils.js.map +1 -1
- package/esm/services/route-meta-utils.spec.js +60 -5
- package/esm/services/route-meta-utils.spec.js.map +1 -1
- package/esm/services/screen-service.d.ts +13 -72
- package/esm/services/screen-service.d.ts.map +1 -1
- package/esm/services/screen-service.js +45 -137
- package/esm/services/screen-service.js.map +1 -1
- package/esm/services/screen-service.spec.js +19 -18
- package/esm/services/screen-service.spec.js.map +1 -1
- package/esm/services/spatial-navigation-service.d.ts +17 -39
- package/esm/services/spatial-navigation-service.d.ts.map +1 -1
- package/esm/services/spatial-navigation-service.js +280 -313
- package/esm/services/spatial-navigation-service.js.map +1 -1
- package/esm/services/spatial-navigation-service.spec.js +163 -158
- package/esm/services/spatial-navigation-service.spec.js.map +1 -1
- package/esm/shade.d.ts +1 -1
- package/esm/shade.d.ts.map +1 -1
- package/esm/shade.js +10 -7
- package/esm/shade.js.map +1 -1
- package/esm/vnode.d.ts +1 -1
- package/esm/vnode.js +1 -1
- package/package.json +5 -4
- package/src/component-factory.spec.tsx +3 -2
- package/src/components/define-nested-routes.spec.ts +91 -0
- package/src/components/define-nested-routes.ts +27 -0
- package/src/components/index.ts +3 -3
- package/src/components/nested-hooks.spec.ts +254 -0
- package/src/components/nested-hooks.ts +109 -0
- package/src/components/nested-navigate.spec.ts +136 -32
- package/src/components/nested-navigate.ts +75 -26
- package/src/components/nested-replace.spec.ts +89 -0
- package/src/components/nested-replace.ts +46 -0
- package/src/components/nested-route-link.spec.tsx +90 -22
- package/src/components/nested-route-link.tsx +54 -29
- package/src/components/nested-route-types.ts +82 -2
- package/src/components/nested-router.spec.tsx +334 -51
- package/src/components/nested-router.tsx +184 -24
- package/src/services/location-service.spec.ts +68 -25
- package/src/services/location-service.tsx +156 -122
- package/src/services/route-match-service.spec.ts +41 -28
- package/src/services/route-match-service.ts +17 -8
- package/src/services/route-meta-utils.spec.ts +78 -10
- package/src/services/route-meta-utils.ts +44 -15
- package/src/services/screen-service.spec.ts +19 -18
- package/src/services/screen-service.ts +65 -110
- package/src/services/spatial-navigation-service.spec.ts +165 -160
- package/src/services/spatial-navigation-service.ts +299 -287
- package/src/shade.ts +11 -8
- package/src/vnode.ts +1 -1
- package/esm/components/link-to-route.d.ts +0 -10
- package/esm/components/link-to-route.d.ts.map +0 -1
- package/esm/components/link-to-route.js +0 -16
- package/esm/components/link-to-route.js.map +0 -1
- package/esm/components/link-to-route.spec.d.ts +0 -2
- package/esm/components/link-to-route.spec.d.ts.map +0 -1
- package/esm/components/link-to-route.spec.js +0 -30
- package/esm/components/link-to-route.spec.js.map +0 -1
- package/esm/components/route-link.d.ts +0 -10
- package/esm/components/route-link.d.ts.map +0 -1
- package/esm/components/route-link.js +0 -25
- package/esm/components/route-link.js.map +0 -1
- package/esm/components/route-link.spec.d.ts +0 -2
- package/esm/components/route-link.spec.d.ts.map +0 -1
- package/esm/components/route-link.spec.js +0 -34
- package/esm/components/route-link.spec.js.map +0 -1
- package/esm/components/router.d.ts +0 -44
- package/esm/components/router.d.ts.map +0 -1
- package/esm/components/router.js +0 -66
- package/esm/components/router.js.map +0 -1
- package/esm/components/router.spec.d.ts +0 -2
- package/esm/components/router.spec.d.ts.map +0 -1
- package/esm/components/router.spec.js +0 -161
- package/esm/components/router.spec.js.map +0 -1
- package/src/components/link-to-route.spec.tsx +0 -45
- package/src/components/link-to-route.tsx +0 -26
- package/src/components/route-link.spec.tsx +0 -44
- package/src/components/route-link.tsx +0 -29
- package/src/components/router.spec.tsx +0 -217
- package/src/components/router.tsx +0 -103
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createInjector } from '@furystack/inject';
|
|
2
2
|
import { deserializeQueryString, serializeToQueryString, serializeValue } from '@furystack/rest';
|
|
3
3
|
import { usingAsync } from '@furystack/utils';
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
@@ -11,15 +11,16 @@ describe('LocationService', () => {
|
|
|
11
11
|
document.body.innerHTML = '';
|
|
12
12
|
});
|
|
13
13
|
it('Shuld be constructed', async () => {
|
|
14
|
-
await usingAsync(
|
|
15
|
-
const s = i.
|
|
16
|
-
expect(s).
|
|
14
|
+
await usingAsync(createInjector(), async (i) => {
|
|
15
|
+
const s = i.get(LocationService);
|
|
16
|
+
expect(s).toBeDefined();
|
|
17
|
+
expect(typeof s.navigate).toBe('function');
|
|
17
18
|
});
|
|
18
19
|
});
|
|
19
20
|
it('Shuld update state on events', async () => {
|
|
20
|
-
await usingAsync(
|
|
21
|
+
await usingAsync(createInjector(), async (i) => {
|
|
21
22
|
const onLocaionChanged = vi.fn();
|
|
22
|
-
const s = i.
|
|
23
|
+
const s = i.get(LocationService);
|
|
23
24
|
s.onLocationPathChanged.subscribe(onLocaionChanged);
|
|
24
25
|
expect(onLocaionChanged).toBeCalledTimes(0);
|
|
25
26
|
history.pushState(null, '', '/loc1');
|
|
@@ -34,19 +35,52 @@ describe('LocationService', () => {
|
|
|
34
35
|
});
|
|
35
36
|
});
|
|
36
37
|
it('Should update location path when navigate is called', async () => {
|
|
37
|
-
await usingAsync(
|
|
38
|
+
await usingAsync(createInjector(), async (i) => {
|
|
38
39
|
const onLocationChanged = vi.fn();
|
|
39
|
-
const s = i.
|
|
40
|
+
const s = i.get(LocationService);
|
|
40
41
|
s.onLocationPathChanged.subscribe(onLocationChanged);
|
|
41
42
|
s.navigate('/dashboard');
|
|
42
43
|
expect(s.onLocationPathChanged.getValue()).toBe('/dashboard');
|
|
43
44
|
expect(onLocationChanged).toHaveBeenCalledWith('/dashboard');
|
|
44
45
|
});
|
|
45
46
|
});
|
|
47
|
+
describe('replace', () => {
|
|
48
|
+
it('Should update the observable path without pushing a new history entry', async () => {
|
|
49
|
+
await usingAsync(createInjector(), async (i) => {
|
|
50
|
+
const s = i.get(LocationService);
|
|
51
|
+
const lengthBefore = history.length;
|
|
52
|
+
s.replace('/replaced');
|
|
53
|
+
expect(s.onLocationPathChanged.getValue()).toBe('/replaced');
|
|
54
|
+
expect(history.length).toBe(lengthBefore);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
it('Should call history.replaceState rather than pushState', async () => {
|
|
58
|
+
await usingAsync(createInjector(), async (i) => {
|
|
59
|
+
const s = i.get(LocationService);
|
|
60
|
+
const pushSpy = vi.spyOn(history, 'pushState');
|
|
61
|
+
const replaceSpy = vi.spyOn(history, 'replaceState');
|
|
62
|
+
s.replace('/replaced-2');
|
|
63
|
+
expect(replaceSpy).toHaveBeenCalledTimes(1);
|
|
64
|
+
expect(replaceSpy).toHaveBeenCalledWith(null, '', '/replaced-2');
|
|
65
|
+
expect(pushSpy).not.toHaveBeenCalled();
|
|
66
|
+
pushSpy.mockRestore();
|
|
67
|
+
replaceSpy.mockRestore();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
it('Should notify path subscribers after replace', async () => {
|
|
71
|
+
await usingAsync(createInjector(), async (i) => {
|
|
72
|
+
const s = i.get(LocationService);
|
|
73
|
+
const onLocationChanged = vi.fn();
|
|
74
|
+
s.onLocationPathChanged.subscribe(onLocationChanged);
|
|
75
|
+
s.replace('/notify');
|
|
76
|
+
expect(onLocationChanged).toHaveBeenCalledWith('/notify');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
46
80
|
describe('useSearchParam', () => {
|
|
47
81
|
it('Should create observables lazily', async () => {
|
|
48
|
-
await usingAsync(
|
|
49
|
-
const service = i.
|
|
82
|
+
await usingAsync(createInjector(), async (i) => {
|
|
83
|
+
const service = i.get(LocationService);
|
|
50
84
|
const observables = service.searchParamObservables;
|
|
51
85
|
const testSearchParam = service.useSearchParam('test', null);
|
|
52
86
|
expect(observables.size).toBe(1);
|
|
@@ -59,23 +93,23 @@ describe('LocationService', () => {
|
|
|
59
93
|
});
|
|
60
94
|
});
|
|
61
95
|
it('Should return the default value, if not present in the query string', async () => {
|
|
62
|
-
await usingAsync(
|
|
63
|
-
const service = i.
|
|
96
|
+
await usingAsync(createInjector(), async (i) => {
|
|
97
|
+
const service = i.get(LocationService);
|
|
64
98
|
const testSearchParam = service.useSearchParam('test', { value: 'foo' });
|
|
65
99
|
expect(testSearchParam.getValue()).toEqual({ value: 'foo' });
|
|
66
100
|
});
|
|
67
101
|
});
|
|
68
102
|
it('Should return the value from the query string', async () => {
|
|
69
|
-
await usingAsync(
|
|
70
|
-
const service = i.
|
|
103
|
+
await usingAsync(createInjector(), async (i) => {
|
|
104
|
+
const service = i.get(LocationService);
|
|
71
105
|
history.pushState(null, '', `/loc1?test=${serializeValue(1)}`);
|
|
72
106
|
const testSearchParam = service.useSearchParam('test', 123);
|
|
73
107
|
expect(testSearchParam.getValue()).toBe(1);
|
|
74
108
|
});
|
|
75
109
|
});
|
|
76
110
|
it('should update the observable value on push / replace states', async () => {
|
|
77
|
-
await usingAsync(
|
|
78
|
-
const service = i.
|
|
111
|
+
await usingAsync(createInjector(), async (i) => {
|
|
112
|
+
const service = i.get(LocationService);
|
|
79
113
|
history.pushState(null, '', `/loc1?test=${serializeValue(1)}`);
|
|
80
114
|
const testSearchParam = service.useSearchParam('test', 234);
|
|
81
115
|
expect(testSearchParam.getValue()).toBe(1);
|
|
@@ -84,28 +118,29 @@ describe('LocationService', () => {
|
|
|
84
118
|
});
|
|
85
119
|
});
|
|
86
120
|
it('Should update the URL based on search value change', async () => {
|
|
87
|
-
await usingAsync(
|
|
88
|
-
const service = i.
|
|
121
|
+
await usingAsync(createInjector(), async (i) => {
|
|
122
|
+
const service = i.get(LocationService);
|
|
89
123
|
history.pushState(null, '', `/loc1?test=${serializeValue('2')}`);
|
|
90
124
|
const testSearchParam = service.useSearchParam('test', '');
|
|
91
125
|
testSearchParam.setValue('2');
|
|
92
126
|
expect(location.search).toBe('?test=IjIi');
|
|
93
127
|
});
|
|
94
128
|
});
|
|
95
|
-
it('Should throw
|
|
96
|
-
await usingAsync(
|
|
129
|
+
it('Should throw when called after LocationService has been resolved', async () => {
|
|
130
|
+
await usingAsync(createInjector(), async (i) => {
|
|
97
131
|
const customSerializer = vi.fn((value) => serializeToQueryString(value));
|
|
98
132
|
const customDeserializer = vi.fn((value) => deserializeQueryString(value));
|
|
99
|
-
|
|
100
|
-
|
|
133
|
+
// Eagerly resolve once so the service patches history / adds listeners.
|
|
134
|
+
i.get(LocationService);
|
|
135
|
+
expect(() => useCustomSearchStateSerializer(i, customSerializer, customDeserializer)).toThrow(/before LocationService is resolved/);
|
|
101
136
|
});
|
|
102
137
|
});
|
|
103
138
|
it('Should use custom serializer and deserializer', async () => {
|
|
104
|
-
await usingAsync(
|
|
139
|
+
await usingAsync(createInjector(), async (i) => {
|
|
105
140
|
const customSerializer = vi.fn((value) => serializeToQueryString(value));
|
|
106
141
|
const customDeserializer = vi.fn((value) => deserializeQueryString(value));
|
|
107
142
|
useCustomSearchStateSerializer(i, customSerializer, customDeserializer);
|
|
108
|
-
const locationService = i.
|
|
143
|
+
const locationService = i.get(LocationService);
|
|
109
144
|
const testSearchParam = locationService.useSearchParam('test', { value: 'foo' });
|
|
110
145
|
testSearchParam.setValue({ value: 'bar' });
|
|
111
146
|
expect(customSerializer).toBeCalledWith({ test: { value: 'bar' } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Token } from '@furystack/inject';
|
|
1
2
|
import { ObservableValue } from '@furystack/utils';
|
|
2
3
|
import type { MatchChainEntry } from '../components/nested-router.js';
|
|
3
4
|
/**
|
|
@@ -5,8 +6,8 @@ import type { MatchChainEntry } from '../components/nested-router.js';
|
|
|
5
6
|
* NestedRouter as an observable. Consumers (breadcrumbs, document title,
|
|
6
7
|
* navigation trees) subscribe to this instead of re-running route matching.
|
|
7
8
|
*/
|
|
8
|
-
export
|
|
9
|
+
export interface RouteMatchService {
|
|
9
10
|
readonly currentMatchChain: ObservableValue<MatchChainEntry[]>;
|
|
10
|
-
[Symbol.dispose](): void;
|
|
11
11
|
}
|
|
12
|
+
export declare const RouteMatchService: Token<RouteMatchService, 'singleton'>;
|
|
12
13
|
//# sourceMappingURL=route-match-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-match-service.d.ts","sourceRoot":"","sources":["../../src/services/route-match-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-match-service.d.ts","sourceRoot":"","sources":["../../src/services/route-match-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAErE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC,eAAe,EAAE,CAAC,CAAA;CAC/D;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,WAAW,CAWlE,CAAA"}
|
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { Injectable } from '@furystack/inject';
|
|
1
|
+
import { defineService } from '@furystack/inject';
|
|
8
2
|
import { ObservableValue } from '@furystack/utils';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
Injectable({ lifetime: 'singleton' })
|
|
22
|
-
], RouteMatchService);
|
|
23
|
-
export { RouteMatchService };
|
|
3
|
+
export const RouteMatchService = defineService({
|
|
4
|
+
name: '@furystack/shades/RouteMatchService',
|
|
5
|
+
lifetime: 'singleton',
|
|
6
|
+
factory: ({ onDispose }) => {
|
|
7
|
+
const currentMatchChain = new ObservableValue([]);
|
|
8
|
+
onDispose(() => {
|
|
9
|
+
// eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
|
|
10
|
+
currentMatchChain[Symbol.dispose]();
|
|
11
|
+
});
|
|
12
|
+
return { currentMatchChain };
|
|
13
|
+
},
|
|
14
|
+
});
|
|
24
15
|
//# sourceMappingURL=route-match-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-match-service.js","sourceRoot":"","sources":["../../src/services/route-match-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-match-service.js","sourceRoot":"","sources":["../../src/services/route-match-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAYlD,MAAM,CAAC,MAAM,iBAAiB,GAA0C,aAAa,CAAC;IACpF,IAAI,EAAE,qCAAqC;IAC3C,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;QACpE,SAAS,CAAC,GAAG,EAAE;YACb,oHAAoH;YACpH,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QACrC,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC9B,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -50,70 +50,63 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
50
50
|
var e = new Error(message);
|
|
51
51
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
52
|
});
|
|
53
|
+
import { createInjector } from '@furystack/inject';
|
|
54
|
+
import { usingAsync } from '@furystack/utils';
|
|
53
55
|
import { describe, expect, it, vi } from 'vitest';
|
|
54
56
|
import { RouteMatchService } from './route-match-service.js';
|
|
55
57
|
describe('RouteMatchService', () => {
|
|
56
|
-
it('should start with an empty match chain', () => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const service = __addDisposableResource(env_1, new RouteMatchService(), false);
|
|
58
|
+
it('should start with an empty match chain', async () => {
|
|
59
|
+
await usingAsync(createInjector(), async (i) => {
|
|
60
|
+
const service = i.get(RouteMatchService);
|
|
60
61
|
expect(service.currentMatchChain.getValue()).toEqual([]);
|
|
61
|
-
}
|
|
62
|
-
catch (e_1) {
|
|
63
|
-
env_1.error = e_1;
|
|
64
|
-
env_1.hasError = true;
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
__disposeResources(env_1);
|
|
68
|
-
}
|
|
62
|
+
});
|
|
69
63
|
});
|
|
70
|
-
it('should update the match chain', () => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const service = __addDisposableResource(env_2, new RouteMatchService(), false);
|
|
64
|
+
it('should update the match chain', async () => {
|
|
65
|
+
await usingAsync(createInjector(), async (i) => {
|
|
66
|
+
const service = i.get(RouteMatchService);
|
|
74
67
|
const chain = [
|
|
75
68
|
{
|
|
76
69
|
route: { component: () => ({}) },
|
|
77
70
|
match: { path: '/about', params: {} },
|
|
71
|
+
query: null,
|
|
72
|
+
hash: undefined,
|
|
78
73
|
},
|
|
79
74
|
];
|
|
80
75
|
service.currentMatchChain.setValue(chain);
|
|
81
76
|
expect(service.currentMatchChain.getValue()).toBe(chain);
|
|
82
|
-
}
|
|
83
|
-
catch (e_2) {
|
|
84
|
-
env_2.error = e_2;
|
|
85
|
-
env_2.hasError = true;
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
__disposeResources(env_2);
|
|
89
|
-
}
|
|
77
|
+
});
|
|
90
78
|
});
|
|
91
|
-
it('should notify subscribers on match chain change', () => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
79
|
+
it('should notify subscribers on match chain change', async () => {
|
|
80
|
+
await usingAsync(createInjector(), async (i) => {
|
|
81
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
82
|
+
try {
|
|
83
|
+
const service = i.get(RouteMatchService);
|
|
84
|
+
const listener = vi.fn();
|
|
85
|
+
const _subscription = __addDisposableResource(env_1, service.currentMatchChain.subscribe(listener), false);
|
|
86
|
+
const chain = [
|
|
87
|
+
{
|
|
88
|
+
route: { meta: { title: 'Home' }, component: () => ({}) },
|
|
89
|
+
match: { path: '/', params: {} },
|
|
90
|
+
query: null,
|
|
91
|
+
hash: undefined,
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
service.currentMatchChain.setValue(chain);
|
|
95
|
+
expect(listener).toHaveBeenCalledWith(chain);
|
|
96
|
+
}
|
|
97
|
+
catch (e_1) {
|
|
98
|
+
env_1.error = e_1;
|
|
99
|
+
env_1.hasError = true;
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
__disposeResources(env_1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
113
105
|
});
|
|
114
|
-
it('should dispose the observable on
|
|
115
|
-
const
|
|
116
|
-
service
|
|
106
|
+
it('should dispose the observable on injector disposal', async () => {
|
|
107
|
+
const injector = createInjector();
|
|
108
|
+
const service = injector.get(RouteMatchService);
|
|
109
|
+
await injector[Symbol.asyncDispose]();
|
|
117
110
|
expect(() => service.currentMatchChain.setValue([])).toThrow();
|
|
118
111
|
});
|
|
119
112
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-match-service.spec.js","sourceRoot":"","sources":["../../src/services/route-match-service.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wCAAwC,EAAE,
|
|
1
|
+
{"version":3,"file":"route-match-service.spec.js","sourceRoot":"","sources":["../../src/services/route-match-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Injector } from '@furystack/inject';
|
|
2
|
+
import type { ExtractRoutePaths } from '../components/nested-route-types.js';
|
|
2
3
|
import type { MatchChainEntry, NestedRoute, NestedRouteMeta } from '../components/nested-router.js';
|
|
3
4
|
/**
|
|
4
5
|
* Resolves the title for a single match chain entry.
|
|
@@ -39,19 +40,40 @@ export declare const buildDocumentTitle: (titles: Array<string | undefined>, opt
|
|
|
39
40
|
}) => string;
|
|
40
41
|
/**
|
|
41
42
|
* A node in a navigation tree extracted from route definitions.
|
|
43
|
+
*
|
|
44
|
+
* When {@link extractNavTree} is called with an explicit route tree type
|
|
45
|
+
* parameter (e.g. `extractNavTree<typeof appRoutes>(...)`), `pattern` narrows
|
|
46
|
+
* to the declared route keys and `fullPath` narrows to the union of all
|
|
47
|
+
* composed paths in the subtree. Without a type parameter the generic falls
|
|
48
|
+
* back to a widened shape so ad-hoc consumers keep compiling.
|
|
49
|
+
*
|
|
50
|
+
* @typeParam TRoutes - The route tree the node was extracted from
|
|
42
51
|
*/
|
|
43
|
-
export type NavTreeNode = {
|
|
44
|
-
pattern: string;
|
|
45
|
-
fullPath: string;
|
|
52
|
+
export type NavTreeNode<TRoutes extends Record<string, NestedRoute<any, any, any>> = Record<string, NestedRoute<any, any, any>>> = {
|
|
53
|
+
pattern: keyof TRoutes & string;
|
|
54
|
+
fullPath: ExtractRoutePaths<TRoutes> & string;
|
|
46
55
|
meta?: NestedRouteMeta;
|
|
47
|
-
children?: NavTreeNode
|
|
56
|
+
children?: Array<NavTreeNode<TRoutes>>;
|
|
48
57
|
};
|
|
49
58
|
/**
|
|
50
59
|
* Extracts a navigation tree from route definitions.
|
|
51
|
-
*
|
|
60
|
+
*
|
|
61
|
+
* The returned nodes preserve the route tree's static typing: `pattern` is
|
|
62
|
+
* narrowed to the declared keys of `TRoutes` and `fullPath` is narrowed to
|
|
63
|
+
* the union of composed paths reachable from `TRoutes` (as produced by
|
|
64
|
+
* {@link ExtractRoutePaths}). This makes the output a single, typed source
|
|
65
|
+
* of truth for sidebar navigation, breadcrumbs and other route-tree-aware
|
|
66
|
+
* UIs — without requiring `as` casts at the call site.
|
|
67
|
+
*
|
|
68
|
+
* Child nodes share their parent's `TRoutes` type parameter; the resulting
|
|
69
|
+
* union is a safe upper bound of the actual paths at any depth, which keeps
|
|
70
|
+
* the helper simple while still accepted by `createNestedRouteLink`,
|
|
71
|
+
* `createNestedNavigate` and `createNestedReplace` factories bound to the
|
|
72
|
+
* same route tree.
|
|
73
|
+
*
|
|
52
74
|
* @param routes - The route definitions to extract from
|
|
53
75
|
* @param parentPath - The parent path prefix (used internally for recursion)
|
|
54
76
|
* @returns An array of navigation tree nodes
|
|
55
77
|
*/
|
|
56
|
-
export declare const extractNavTree:
|
|
78
|
+
export declare const extractNavTree: <TRoutes extends Record<string, NestedRoute<any, any, any>>>(routes: TRoutes, parentPath?: string) => Array<NavTreeNode<TRoutes>>;
|
|
57
79
|
//# sourceMappingURL=route-meta-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-meta-utils.d.ts","sourceRoot":"","sources":["../../src/services/route-meta-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAU,OAAO,eAAe,EAAE,UAAU,QAAQ,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAI9G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EAAE,EACxB,UAAU,QAAQ,KACjB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EACjC,UAAU;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAChD,MAIF,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"route-meta-utils.d.ts","sourceRoot":"","sources":["../../src/services/route-meta-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAU,OAAO,eAAe,EAAE,UAAU,QAAQ,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAI9G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EAAE,EACxB,UAAU,QAAQ,KACjB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EACjC,UAAU;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAChD,MAIF,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,CACrB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,IACrG;IACF,OAAO,EAAE,MAAM,OAAO,GAAG,MAAM,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAA;IAC7C,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;CACvC,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACvF,QAAQ,OAAO,EACf,aAAa,MAAM,KAClB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAY5B,CAAA"}
|
|
@@ -45,20 +45,34 @@ export const buildDocumentTitle = (titles, options) => {
|
|
|
45
45
|
};
|
|
46
46
|
/**
|
|
47
47
|
* Extracts a navigation tree from route definitions.
|
|
48
|
-
*
|
|
48
|
+
*
|
|
49
|
+
* The returned nodes preserve the route tree's static typing: `pattern` is
|
|
50
|
+
* narrowed to the declared keys of `TRoutes` and `fullPath` is narrowed to
|
|
51
|
+
* the union of composed paths reachable from `TRoutes` (as produced by
|
|
52
|
+
* {@link ExtractRoutePaths}). This makes the output a single, typed source
|
|
53
|
+
* of truth for sidebar navigation, breadcrumbs and other route-tree-aware
|
|
54
|
+
* UIs — without requiring `as` casts at the call site.
|
|
55
|
+
*
|
|
56
|
+
* Child nodes share their parent's `TRoutes` type parameter; the resulting
|
|
57
|
+
* union is a safe upper bound of the actual paths at any depth, which keeps
|
|
58
|
+
* the helper simple while still accepted by `createNestedRouteLink`,
|
|
59
|
+
* `createNestedNavigate` and `createNestedReplace` factories bound to the
|
|
60
|
+
* same route tree.
|
|
61
|
+
*
|
|
49
62
|
* @param routes - The route definitions to extract from
|
|
50
63
|
* @param parentPath - The parent path prefix (used internally for recursion)
|
|
51
64
|
* @returns An array of navigation tree nodes
|
|
52
65
|
*/
|
|
53
66
|
export const extractNavTree = (routes, parentPath) => {
|
|
54
|
-
|
|
55
|
-
const fullPath =
|
|
67
|
+
const build = (rs, pp) => Object.entries(rs).map(([pattern, route]) => {
|
|
68
|
+
const fullPath = pp ? `${pp === '/' ? '' : pp}${pattern}` : pattern;
|
|
56
69
|
return {
|
|
57
70
|
pattern,
|
|
58
71
|
fullPath,
|
|
59
72
|
meta: route.meta,
|
|
60
|
-
children: route.children ?
|
|
73
|
+
children: route.children ? build(route.children, fullPath) : undefined,
|
|
61
74
|
};
|
|
62
75
|
});
|
|
76
|
+
return build(routes, parentPath);
|
|
63
77
|
};
|
|
64
78
|
//# sourceMappingURL=route-meta-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-meta-utils.js","sourceRoot":"","sources":["../../src/services/route-meta-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-meta-utils.js","sourceRoot":"","sources":["../../src/services/route-meta-utils.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAsB,EAAE,QAAkB,EAA+B,EAAE;IACjH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAA;IACrC,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IACrF,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,KAAwB,EACxB,QAAkB,EACkB,EAAE;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAiC,EACjC,OAAiD,EACzC,EAAE;IACV,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC5E,CAAC,CAAA;AAsBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAe,EACf,UAAmB,EACU,EAAE;IAC/B,MAAM,KAAK,GAAG,CAAC,EAA8C,EAAE,EAAW,EAA+B,EAAE,CACzG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QACnE,OAAO;YACL,OAAO;YACP,QAAQ;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/C,CAAA;IAC3B,CAAC,CAAC,CAAA;IACJ,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAClC,CAAC,CAAA"}
|