@furystack/shades 14.0.0 → 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.
Files changed (76) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/esm/component-factory.spec.d.ts.map +1 -1
  3. package/esm/component-factory.spec.js +2 -2
  4. package/esm/component-factory.spec.js.map +1 -1
  5. package/esm/components/nested-hooks.js +2 -2
  6. package/esm/components/nested-hooks.js.map +1 -1
  7. package/esm/components/nested-hooks.spec.js +14 -14
  8. package/esm/components/nested-hooks.spec.js.map +1 -1
  9. package/esm/components/nested-navigate.js +1 -1
  10. package/esm/components/nested-navigate.js.map +1 -1
  11. package/esm/components/nested-navigate.spec.js +16 -16
  12. package/esm/components/nested-navigate.spec.js.map +1 -1
  13. package/esm/components/nested-replace.js +1 -1
  14. package/esm/components/nested-replace.js.map +1 -1
  15. package/esm/components/nested-replace.spec.js +6 -6
  16. package/esm/components/nested-replace.spec.js.map +1 -1
  17. package/esm/components/nested-route-link.js +1 -1
  18. package/esm/components/nested-route-link.js.map +1 -1
  19. package/esm/components/nested-route-link.spec.js +8 -8
  20. package/esm/components/nested-route-link.spec.js.map +1 -1
  21. package/esm/components/nested-router.js +3 -3
  22. package/esm/components/nested-router.js.map +1 -1
  23. package/esm/components/nested-router.spec.js +24 -24
  24. package/esm/components/nested-router.spec.js.map +1 -1
  25. package/esm/services/location-service.d.ts +39 -42
  26. package/esm/services/location-service.d.ts.map +1 -1
  27. package/esm/services/location-service.js +115 -134
  28. package/esm/services/location-service.js.map +1 -1
  29. package/esm/services/location-service.spec.js +32 -30
  30. package/esm/services/location-service.spec.js.map +1 -1
  31. package/esm/services/route-match-service.d.ts +3 -2
  32. package/esm/services/route-match-service.d.ts.map +1 -1
  33. package/esm/services/route-match-service.js +13 -22
  34. package/esm/services/route-match-service.js.map +1 -1
  35. package/esm/services/route-match-service.spec.js +40 -51
  36. package/esm/services/route-match-service.spec.js.map +1 -1
  37. package/esm/services/route-meta-utils.spec.js +3 -3
  38. package/esm/services/route-meta-utils.spec.js.map +1 -1
  39. package/esm/services/screen-service.d.ts +13 -72
  40. package/esm/services/screen-service.d.ts.map +1 -1
  41. package/esm/services/screen-service.js +45 -137
  42. package/esm/services/screen-service.js.map +1 -1
  43. package/esm/services/screen-service.spec.js +19 -18
  44. package/esm/services/screen-service.spec.js.map +1 -1
  45. package/esm/services/spatial-navigation-service.d.ts +17 -39
  46. package/esm/services/spatial-navigation-service.d.ts.map +1 -1
  47. package/esm/services/spatial-navigation-service.js +280 -313
  48. package/esm/services/spatial-navigation-service.js.map +1 -1
  49. package/esm/services/spatial-navigation-service.spec.js +163 -158
  50. package/esm/services/spatial-navigation-service.spec.js.map +1 -1
  51. package/esm/shade.d.ts +1 -1
  52. package/esm/shade.d.ts.map +1 -1
  53. package/esm/shade.js +10 -7
  54. package/esm/shade.js.map +1 -1
  55. package/package.json +5 -4
  56. package/src/component-factory.spec.tsx +3 -2
  57. package/src/components/nested-hooks.spec.ts +14 -14
  58. package/src/components/nested-hooks.ts +2 -2
  59. package/src/components/nested-navigate.spec.ts +17 -16
  60. package/src/components/nested-navigate.ts +1 -1
  61. package/src/components/nested-replace.spec.ts +7 -6
  62. package/src/components/nested-replace.ts +1 -1
  63. package/src/components/nested-route-link.spec.tsx +8 -8
  64. package/src/components/nested-route-link.tsx +1 -1
  65. package/src/components/nested-router.spec.tsx +24 -24
  66. package/src/components/nested-router.tsx +3 -3
  67. package/src/services/location-service.spec.ts +35 -31
  68. package/src/services/location-service.tsx +156 -122
  69. package/src/services/route-match-service.spec.ts +41 -32
  70. package/src/services/route-match-service.ts +17 -8
  71. package/src/services/route-meta-utils.spec.ts +3 -3
  72. package/src/services/screen-service.spec.ts +19 -18
  73. package/src/services/screen-service.ts +65 -110
  74. package/src/services/spatial-navigation-service.spec.ts +165 -160
  75. package/src/services/spatial-navigation-service.ts +299 -287
  76. package/src/shade.ts +11 -8
@@ -1,156 +1,137 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
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
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Injectable } from '@furystack/inject';
1
+ import { defineService } from '@furystack/inject';
11
2
  import { deserializeQueryString as defaultDeserializeQueryString, serializeToQueryString as defaultSerializeToQueryString, } from '@furystack/rest';
12
3
  import { ObservableValue } from '@furystack/utils';
13
- /**
14
- * Singleton service that tracks browser location changes (pathname, search, hash)
15
- * and exposes them as observable values for reactive routing and URL-driven state.
16
- */
17
- let LocationService = class LocationService {
18
- serializeToQueryString;
19
- deserializeQueryString;
20
- constructor(serializeToQueryString = defaultSerializeToQueryString, deserializeQueryString = defaultDeserializeQueryString) {
21
- this.serializeToQueryString = serializeToQueryString;
22
- this.deserializeQueryString = deserializeQueryString;
23
- window.addEventListener('popstate', this.popStateListener);
24
- window.addEventListener('hashchange', this.hashChangeListener);
25
- this.onDeserializedLocationSearchChanged = new ObservableValue(this.deserializeQueryString(location.search));
26
- this.originalPushState = window.history.pushState.bind(window.history);
27
- window.history.pushState = ((...args) => {
28
- this.originalPushState(...args);
29
- this.updateState();
30
- }).bind(this);
31
- this.originalReplaceState = window.history.replaceState.bind(window.history);
32
- window.history.replaceState = ((...args) => {
33
- this.originalReplaceState(...args);
34
- this.updateState();
35
- }).bind(this);
36
- }
37
- originalPushState;
38
- originalReplaceState;
39
- [Symbol.dispose]() {
40
- window.removeEventListener('popstate', this.popStateListener);
41
- window.removeEventListener('hashchange', this.hashChangeListener);
42
- this.onLocationSearchChanged[Symbol.dispose]();
43
- this.onDeserializedLocationSearchChanged[Symbol.dispose]();
44
- this.locationDeserializerObserver[Symbol.dispose]();
45
- this.onLocationPathChanged[Symbol.dispose]();
46
- this.onLocationHashChanged[Symbol.dispose]();
47
- window.history.pushState = this.originalPushState;
48
- window.history.replaceState = this.originalReplaceState;
49
- }
50
- /**
51
- * Observable value that will be updated when the location pathname (e.g. /page/1) changes
52
- */
53
- onLocationPathChanged = new ObservableValue(new URL(location.href).pathname);
54
- /**
55
- * Observable value that will be updated when the location hash (e.g. #hash) changes
56
- */
57
- onLocationHashChanged = new ObservableValue(location.hash.replace('#', ''));
58
- /**
59
- * Observable value that will be updated when the location search (e.g. ?search=1) changes
60
- */
61
- onLocationSearchChanged = new ObservableValue(location.search);
62
- onDeserializedLocationSearchChanged;
63
- locationDeserializerObserver = this.onLocationSearchChanged.subscribe((search) => {
64
- this.onDeserializedLocationSearchChanged.setValue(this.deserializeQueryString(search));
65
- });
66
- /**
67
- * Synchronizes the observable state with the current browser location.
68
- * Called internally after navigation events and history state changes.
69
- */
70
- updateState = (() => {
71
- this.onLocationPathChanged.setValue(location.pathname);
72
- this.onLocationHashChanged.setValue(location.hash.replace('#', ''));
73
- this.onLocationSearchChanged.setValue(location.search);
74
- }).bind(this);
75
- /**
76
- * Navigate to a path. Use this instead of raw history.pushState for SPA routing.
77
- * The LocationService interceptor ensures routing state is updated correctly.
78
- */
79
- navigate(path) {
80
- // eslint-disable-next-line furystack/prefer-location-service -- This IS the LocationService.navigate() implementation.
81
- history.pushState(null, '', path);
82
- this.updateState();
83
- }
84
- /**
85
- * Replace the current history entry with a new path. Use this instead of
86
- * raw history.replaceState for SPA redirects (e.g. the intermediate URL
87
- * should not appear in the browser's back/forward stack).
88
- */
89
- replace(path) {
90
- // eslint-disable-next-line furystack/prefer-location-service -- This IS the LocationService.replace() implementation.
91
- history.replaceState(null, '', path);
92
- this.updateState();
93
- }
94
- /**
95
- * Internal cache of per-key search parameter observables created by {@link useSearchParam}.
96
- */
97
- searchParamObservables = new Map();
98
- /**
99
- * Gets or creates an observable for a search parameter
100
- * @param key The search param key (e.g. ?search=1 -> search)
101
- * @param defaultValue The default value if not provided
102
- * @returns An observable with the current value (or default value) of the search param
103
- */
104
- useSearchParam(key, defaultValue) {
105
- const existing = this.searchParamObservables.get(key);
106
- if (!existing) {
107
- const currentDeserialized = this.onDeserializedLocationSearchChanged.getValue();
4
+ export const LocationServiceSettings = defineService({
5
+ name: '@furystack/shades/LocationServiceSettings',
6
+ lifetime: 'singleton',
7
+ factory: () => ({
8
+ serialize: defaultSerializeToQueryString,
9
+ deserialize: defaultDeserializeQueryString,
10
+ }),
11
+ });
12
+ export const LocationService = defineService({
13
+ name: '@furystack/shades/LocationService',
14
+ lifetime: 'singleton',
15
+ factory: ({ inject, onDispose }) => {
16
+ const { serialize, deserialize } = inject(LocationServiceSettings);
17
+ const onLocationPathChanged = new ObservableValue(new URL(location.href).pathname);
18
+ const onLocationHashChanged = new ObservableValue(location.hash.replace('#', ''));
19
+ const onLocationSearchChanged = new ObservableValue(location.search);
20
+ const onDeserializedLocationSearchChanged = new ObservableValue(deserialize(location.search));
21
+ const searchParamObservables = new Map();
22
+ const updateState = () => {
23
+ onLocationPathChanged.setValue(location.pathname);
24
+ onLocationHashChanged.setValue(location.hash.replace('#', ''));
25
+ onLocationSearchChanged.setValue(location.search);
26
+ };
27
+ const locationDeserializerObserver = onLocationSearchChanged.subscribe((search) => {
28
+ onDeserializedLocationSearchChanged.setValue(deserialize(search));
29
+ });
30
+ const popStateListener = (_ev) => {
31
+ updateState();
32
+ };
33
+ const hashChangeListener = (_ev) => {
34
+ updateState();
35
+ };
36
+ window.addEventListener('popstate', popStateListener);
37
+ window.addEventListener('hashchange', hashChangeListener);
38
+ const originalPushState = window.history.pushState.bind(window.history);
39
+ window.history.pushState = (...args) => {
40
+ originalPushState(...args);
41
+ updateState();
42
+ };
43
+ const originalReplaceState = window.history.replaceState.bind(window.history);
44
+ window.history.replaceState = (...args) => {
45
+ originalReplaceState(...args);
46
+ updateState();
47
+ };
48
+ const navigate = (path) => {
49
+ // eslint-disable-next-line furystack/prefer-location-service -- This IS the LocationService.navigate() implementation.
50
+ history.pushState(null, '', path);
51
+ updateState();
52
+ };
53
+ const replace = (path) => {
54
+ // eslint-disable-next-line furystack/prefer-location-service -- This IS the LocationService.replace() implementation.
55
+ history.replaceState(null, '', path);
56
+ updateState();
57
+ };
58
+ const useSearchParam = (key, defaultValue) => {
59
+ const existing = searchParamObservables.get(key);
60
+ if (existing)
61
+ return existing;
62
+ const currentDeserialized = onDeserializedLocationSearchChanged.getValue();
108
63
  const actualValue = Object.prototype.hasOwnProperty.call(currentDeserialized, key)
109
64
  ? currentDeserialized[key]
110
65
  : defaultValue;
111
66
  const newObservable = new ObservableValue(actualValue);
112
- this.searchParamObservables.set(key, newObservable);
67
+ searchParamObservables.set(key, newObservable);
113
68
  newObservable.subscribe((value) => {
114
- const currentQueryStringObject = this.onDeserializedLocationSearchChanged.getValue();
69
+ const currentQueryStringObject = onDeserializedLocationSearchChanged.getValue();
115
70
  if (currentQueryStringObject[key] !== value) {
116
- const params = this.serializeToQueryString({ ...currentQueryStringObject, [key]: value });
71
+ const params = serialize({ ...currentQueryStringObject, [key]: value });
117
72
  const newUrl = `${location.pathname}?${params}`;
118
73
  // eslint-disable-next-line furystack/prefer-location-service -- Internal LocationService plumbing for search param sync.
119
74
  history.pushState({}, '', newUrl);
120
75
  }
121
76
  });
122
- this.onDeserializedLocationSearchChanged.subscribe((search) => {
77
+ onDeserializedLocationSearchChanged.subscribe((search) => {
123
78
  const value = search[key] ?? defaultValue;
124
- this.searchParamObservables.get(key)?.setValue(value);
79
+ searchParamObservables.get(key)?.setValue(value);
125
80
  });
126
81
  return newObservable;
127
- }
128
- return existing;
129
- }
130
- popStateListener = (_ev) => {
131
- this.updateState();
132
- };
133
- hashChangeListener = ((_ev) => {
134
- this.updateState();
135
- }).bind(this);
136
- };
137
- LocationService = __decorate([
138
- Injectable({ lifetime: 'singleton' }),
139
- __metadata("design:paramtypes", [Object, Object])
140
- ], LocationService);
141
- export { LocationService };
82
+ };
83
+ onDispose(() => {
84
+ window.removeEventListener('popstate', popStateListener);
85
+ window.removeEventListener('hashchange', hashChangeListener);
86
+ window.history.pushState = originalPushState;
87
+ window.history.replaceState = originalReplaceState;
88
+ locationDeserializerObserver[Symbol.dispose]();
89
+ // eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
90
+ onLocationSearchChanged[Symbol.dispose]();
91
+ // eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
92
+ onDeserializedLocationSearchChanged[Symbol.dispose]();
93
+ // eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
94
+ onLocationPathChanged[Symbol.dispose]();
95
+ // eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
96
+ onLocationHashChanged[Symbol.dispose]();
97
+ });
98
+ return {
99
+ deserializeQueryString: deserialize,
100
+ onLocationPathChanged,
101
+ onLocationHashChanged,
102
+ onLocationSearchChanged,
103
+ onDeserializedLocationSearchChanged,
104
+ searchParamObservables,
105
+ updateState,
106
+ navigate,
107
+ replace,
108
+ useSearchParam,
109
+ };
110
+ },
111
+ });
142
112
  /**
143
- * Configures custom serialization for URL search state.
144
- * Must be called **before** `LocationService` is first instantiated by the injector.
145
- * @param injector The root injector
146
- * @param serialize Function to serialize state to a query string
147
- * @param deserialize Function to deserialize a query string to state
113
+ * Configures custom (de)serialization for URL search state by binding
114
+ * {@link LocationServiceSettings} on the given injector.
115
+ *
116
+ * Must be called **before** any consumer resolves {@link LocationService}:
117
+ * the service patches `history.pushState` / `history.replaceState` and
118
+ * subscribes to `popstate` / `hashchange` on construction, and those
119
+ * listeners are only torn down when the owning injector is disposed.
120
+ * Rebinding after the first resolution would leak the previous instance,
121
+ * so this helper throws loudly if that happens.
122
+ *
123
+ * @param injector The root injector.
124
+ * @param serialize Function to serialize state to a query string.
125
+ * @param deserialize Function to deserialize a query string to state.
126
+ * @throws If {@link LocationService} has already been resolved on
127
+ * `injector` (or any reachable ancestor).
148
128
  */
149
129
  export const useCustomSearchStateSerializer = (injector, serialize, deserialize) => {
150
- if (injector.cachedSingletons.has(LocationService)) {
151
- throw new Error('useCustomSearchStateSerializer must be called before the LocationService is instantiated');
130
+ if (injector.isResolved(LocationService)) {
131
+ throw new Error('useCustomSearchStateSerializer must be called before LocationService is resolved for the first time. ' +
132
+ 'Configure serializers during injector bootstrap (e.g. before the first render).');
152
133
  }
153
- const locationService = new LocationService(serialize, deserialize);
154
- injector.setExplicitInstance(locationService, LocationService);
134
+ injector.bind(LocationServiceSettings, () => ({ serialize, deserialize }));
135
+ injector.invalidate(LocationServiceSettings);
155
136
  };
156
137
  //# sourceMappingURL=location-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD;;;GAGG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAe;IAEP;IAED;IAHlB,YACmB,yBAAyB,6BAA6B,EAEvD,yBAAyB,6BAA6B;QAFrD,2BAAsB,GAAtB,sBAAsB,CAAgC;QAEvD,2BAAsB,GAAtB,sBAAsB,CAAgC;QAEtE,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC1D,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAE9D,IAAI,CAAC,mCAAmC,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAE5G,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACtE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAiD,EAAE,EAAE;YACnF,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAA;YAC/B,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5E,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAoD,EAAE,EAAE;YACzF,IAAI,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IAEO,iBAAiB,CAAiC;IAClD,oBAAoB,CAAoC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC7D,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACjE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QAC9C,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QAC1D,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QACnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QAC5C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QAE5C,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAA;QACjD,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAA;IACzD,CAAC;IAED;;OAEG;IACI,qBAAqB,GAAG,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;IAEnF;;OAEG;IACI,qBAAqB,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAElF;;OAEG;IACI,uBAAuB,GAAG,IAAI,eAAe,CAAS,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEtE,mCAAmC,CAA0C;IAE7E,4BAA4B,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QACtF,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF;;;OAGG;IACI,WAAW,GAAG,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACtD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb;;;OAGG;IACI,QAAQ,CAAC,IAAY;QAC1B,uHAAuH;QACvH,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,IAAY;QACzB,sHAAsH;QACtH,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;OAEG;IACa,sBAAsB,GAAG,IAAI,GAAG,EAAgC,CAAA;IAEhF;;;;;OAKG;IACI,cAAc,CAAI,GAAW,EAAE,YAAe;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,mBAAmB,GAAG,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,CAAA;YAE/E,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC;gBAChF,CAAC,CAAE,mBAAmB,CAAC,GAAG,CAAO;gBACjC,CAAC,CAAC,YAAY,CAAA;YAEhB,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;YACtD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAEnD,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,wBAAwB,GAAG,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,CAAA;gBACpF,IAAI,wBAAwB,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,GAAG,wBAAwB,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBACzF,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAA;oBAC/C,yHAAyH;oBACzH,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC5D,MAAM,KAAK,GAAI,MAAM,CAAC,GAAG,CAAO,IAAI,YAAY,CAAA;gBAChD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;YACvD,CAAC,CAAC,CAAA;YACF,OAAO,aAAa,CAAA;QACtB,CAAC;QACD,OAAO,QAA8B,CAAA;IACvC,CAAC;IAEO,gBAAgB,GAAG,CAAC,GAAkB,EAAE,EAAE;QAChD,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC,CAAA;IAEO,kBAAkB,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE;QACrD,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;CACd,CAAA;AA9IY,eAAe;IAD3B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,eAAe,CA8I3B;;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAkB,EAClB,SAA+C,EAC/C,WAAiD,EACjD,EAAE;IACF,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAA;IAC7G,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACnE,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;AAChE,CAAC,CAAA"}
1
+ {"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAYlD,MAAM,CAAC,MAAM,uBAAuB,GAAgD,aAAa,CAAC;IAChG,IAAI,EAAE,2CAA2C;IACjD,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACd,SAAS,EAAE,6BAA6B;QACxC,WAAW,EAAE,6BAA6B;KAC3C,CAAC;CACH,CAAC,CAAA;AAkCF,MAAM,CAAC,MAAM,eAAe,GAAwC,aAAa,CAAC;IAChF,IAAI,EAAE,mCAAmC;IACzC,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAA;QAElE,MAAM,qBAAqB,GAAG,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;QAClF,MAAM,qBAAqB,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QACjF,MAAM,uBAAuB,GAAG,IAAI,eAAe,CAAS,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5E,MAAM,mCAAmC,GAAG,IAAI,eAAe,CAC7D,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC7B,CAAA;QACD,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAgC,CAAA;QAEtE,MAAM,WAAW,GAAG,GAAS,EAAE;YAC7B,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACjD,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;YAC9D,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,MAAM,4BAA4B,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;YAChF,mCAAmC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAG,CAAC,GAAkB,EAAQ,EAAE;YACpD,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QACD,MAAM,kBAAkB,GAAG,CAAC,GAAoB,EAAQ,EAAE;YACxD,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QACrD,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;QAEzD,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACvE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAiD,EAAE,EAAE;YAClF,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAA;YAC1B,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7E,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAoD,EAAE,EAAE;YACxF,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAA;YAC7B,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;YACtC,uHAAuH;YACvH,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YACjC,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE;YACrC,sHAAsH;YACtH,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YACpC,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QAED,MAAM,cAAc,GAAG,CAAK,GAAW,EAAE,YAAe,EAAsB,EAAE;YAC9E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAA8B,CAAA;YAEnD,MAAM,mBAAmB,GAAG,mCAAmC,CAAC,QAAQ,EAAE,CAAA;YAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC;gBAChF,CAAC,CAAE,mBAAmB,CAAC,GAAG,CAAO;gBACjC,CAAC,CAAC,YAAY,CAAA;YAEhB,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;YACtD,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAE9C,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,wBAAwB,GAAG,mCAAmC,CAAC,QAAQ,EAAE,CAAA;gBAC/E,IAAI,wBAAwB,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,wBAAwB,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBACvE,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAA;oBAC/C,yHAAyH;oBACzH,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,mCAAmC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvD,MAAM,KAAK,GAAI,MAAM,CAAC,GAAG,CAAO,IAAI,YAAY,CAAA;gBAChD,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;YAClD,CAAC,CAAC,CAAA;YAEF,OAAO,aAAa,CAAA;QACtB,CAAC,CAAA;QAED,SAAS,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;YACxD,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;YAC5D,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAA;YAC5C,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,oBAAoB,CAAA;YAClD,4BAA4B,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;YAC9C,oHAAoH;YACpH,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;YACzC,oHAAoH;YACpH,mCAAmC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;YACrD,oHAAoH;YACpH,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;YACvC,oHAAoH;YACpH,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,sBAAsB,EAAE,WAAW;YACnC,qBAAqB;YACrB,qBAAqB;YACrB,uBAAuB;YACvB,mCAAmC;YACnC,sBAAsB;YACtB,WAAW;YACX,QAAQ;YACR,OAAO;YACP,cAAc;SACf,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAkB,EAClB,SAA+C,EAC/C,WAAiD,EAC3C,EAAE;IACR,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,uGAAuG;YACrG,iFAAiF,CACpF,CAAA;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IAC1E,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAA;AAC9C,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Injector } from '@furystack/inject';
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(new Injector(), async (i) => {
15
- const s = i.getInstance(LocationService);
16
- expect(s).toBeInstanceOf(LocationService);
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(new Injector(), async (i) => {
21
+ await usingAsync(createInjector(), async (i) => {
21
22
  const onLocaionChanged = vi.fn();
22
- const s = i.getInstance(LocationService);
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,9 +35,9 @@ describe('LocationService', () => {
34
35
  });
35
36
  });
36
37
  it('Should update location path when navigate is called', async () => {
37
- await usingAsync(new Injector(), async (i) => {
38
+ await usingAsync(createInjector(), async (i) => {
38
39
  const onLocationChanged = vi.fn();
39
- const s = i.getInstance(LocationService);
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');
@@ -45,8 +46,8 @@ describe('LocationService', () => {
45
46
  });
46
47
  describe('replace', () => {
47
48
  it('Should update the observable path without pushing a new history entry', async () => {
48
- await usingAsync(new Injector(), async (i) => {
49
- const s = i.getInstance(LocationService);
49
+ await usingAsync(createInjector(), async (i) => {
50
+ const s = i.get(LocationService);
50
51
  const lengthBefore = history.length;
51
52
  s.replace('/replaced');
52
53
  expect(s.onLocationPathChanged.getValue()).toBe('/replaced');
@@ -54,8 +55,8 @@ describe('LocationService', () => {
54
55
  });
55
56
  });
56
57
  it('Should call history.replaceState rather than pushState', async () => {
57
- await usingAsync(new Injector(), async (i) => {
58
- const s = i.getInstance(LocationService);
58
+ await usingAsync(createInjector(), async (i) => {
59
+ const s = i.get(LocationService);
59
60
  const pushSpy = vi.spyOn(history, 'pushState');
60
61
  const replaceSpy = vi.spyOn(history, 'replaceState');
61
62
  s.replace('/replaced-2');
@@ -67,8 +68,8 @@ describe('LocationService', () => {
67
68
  });
68
69
  });
69
70
  it('Should notify path subscribers after replace', async () => {
70
- await usingAsync(new Injector(), async (i) => {
71
- const s = i.getInstance(LocationService);
71
+ await usingAsync(createInjector(), async (i) => {
72
+ const s = i.get(LocationService);
72
73
  const onLocationChanged = vi.fn();
73
74
  s.onLocationPathChanged.subscribe(onLocationChanged);
74
75
  s.replace('/notify');
@@ -78,8 +79,8 @@ describe('LocationService', () => {
78
79
  });
79
80
  describe('useSearchParam', () => {
80
81
  it('Should create observables lazily', async () => {
81
- await usingAsync(new Injector(), async (i) => {
82
- const service = i.getInstance(LocationService);
82
+ await usingAsync(createInjector(), async (i) => {
83
+ const service = i.get(LocationService);
83
84
  const observables = service.searchParamObservables;
84
85
  const testSearchParam = service.useSearchParam('test', null);
85
86
  expect(observables.size).toBe(1);
@@ -92,23 +93,23 @@ describe('LocationService', () => {
92
93
  });
93
94
  });
94
95
  it('Should return the default value, if not present in the query string', async () => {
95
- await usingAsync(new Injector(), async (i) => {
96
- const service = i.getInstance(LocationService);
96
+ await usingAsync(createInjector(), async (i) => {
97
+ const service = i.get(LocationService);
97
98
  const testSearchParam = service.useSearchParam('test', { value: 'foo' });
98
99
  expect(testSearchParam.getValue()).toEqual({ value: 'foo' });
99
100
  });
100
101
  });
101
102
  it('Should return the value from the query string', async () => {
102
- await usingAsync(new Injector(), async (i) => {
103
- const service = i.getInstance(LocationService);
103
+ await usingAsync(createInjector(), async (i) => {
104
+ const service = i.get(LocationService);
104
105
  history.pushState(null, '', `/loc1?test=${serializeValue(1)}`);
105
106
  const testSearchParam = service.useSearchParam('test', 123);
106
107
  expect(testSearchParam.getValue()).toBe(1);
107
108
  });
108
109
  });
109
110
  it('should update the observable value on push / replace states', async () => {
110
- await usingAsync(new Injector(), async (i) => {
111
- const service = i.getInstance(LocationService);
111
+ await usingAsync(createInjector(), async (i) => {
112
+ const service = i.get(LocationService);
112
113
  history.pushState(null, '', `/loc1?test=${serializeValue(1)}`);
113
114
  const testSearchParam = service.useSearchParam('test', 234);
114
115
  expect(testSearchParam.getValue()).toBe(1);
@@ -117,28 +118,29 @@ describe('LocationService', () => {
117
118
  });
118
119
  });
119
120
  it('Should update the URL based on search value change', async () => {
120
- await usingAsync(new Injector(), async (i) => {
121
- const service = i.getInstance(LocationService);
121
+ await usingAsync(createInjector(), async (i) => {
122
+ const service = i.get(LocationService);
122
123
  history.pushState(null, '', `/loc1?test=${serializeValue('2')}`);
123
124
  const testSearchParam = service.useSearchParam('test', '');
124
125
  testSearchParam.setValue('2');
125
126
  expect(location.search).toBe('?test=IjIi');
126
127
  });
127
128
  });
128
- it('Should throw an error when trying to use a custom serializer after LocationService has been instantiated', async () => {
129
- await usingAsync(new Injector(), async (i) => {
129
+ it('Should throw when called after LocationService has been resolved', async () => {
130
+ await usingAsync(createInjector(), async (i) => {
130
131
  const customSerializer = vi.fn((value) => serializeToQueryString(value));
131
132
  const customDeserializer = vi.fn((value) => deserializeQueryString(value));
132
- i.getInstance(LocationService);
133
- expect(() => useCustomSearchStateSerializer(i, customSerializer, customDeserializer)).toThrowError('useCustomSearchStateSerializer must be called before the LocationService is instantiated');
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/);
134
136
  });
135
137
  });
136
138
  it('Should use custom serializer and deserializer', async () => {
137
- await usingAsync(new Injector(), async (i) => {
139
+ await usingAsync(createInjector(), async (i) => {
138
140
  const customSerializer = vi.fn((value) => serializeToQueryString(value));
139
141
  const customDeserializer = vi.fn((value) => deserializeQueryString(value));
140
142
  useCustomSearchStateSerializer(i, customSerializer, customDeserializer);
141
- const locationService = i.getInstance(LocationService);
143
+ const locationService = i.get(LocationService);
142
144
  const testSearchParam = locationService.useSearchParam('test', { value: 'foo' });
143
145
  testSearchParam.setValue({ value: 'bar' });
144
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":"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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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"}
@@ -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 declare class RouteMatchService implements Disposable {
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":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAErE;;;;GAIG;AACH,qBACa,iBAAkB,YAAW,UAAU;IAClD,SAAgB,iBAAiB,qCAA6C;IAEvE,CAAC,MAAM,CAAC,OAAO,CAAC;CAGxB"}
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
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
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
- * Singleton service that exposes the current match chain from the nearest
11
- * NestedRouter as an observable. Consumers (breadcrumbs, document title,
12
- * navigation trees) subscribe to this instead of re-running route matching.
13
- */
14
- let RouteMatchService = class RouteMatchService {
15
- currentMatchChain = new ObservableValue([]);
16
- [Symbol.dispose]() {
17
- this.currentMatchChain[Symbol.dispose]();
18
- }
19
- };
20
- RouteMatchService = __decorate([
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":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlD;;;;GAIG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,iBAAiB,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;IAEvE,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IAC1C,CAAC;CACF,CAAA;AANY,iBAAiB;IAD7B,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,iBAAiB,CAM7B"}
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"}