@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.
Files changed (146) hide show
  1. package/CHANGELOG.md +157 -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/define-nested-routes.d.ts +27 -0
  6. package/esm/components/define-nested-routes.d.ts.map +1 -0
  7. package/esm/components/define-nested-routes.js +26 -0
  8. package/esm/components/define-nested-routes.js.map +1 -0
  9. package/esm/components/define-nested-routes.spec.d.ts +2 -0
  10. package/esm/components/define-nested-routes.spec.d.ts.map +1 -0
  11. package/esm/components/define-nested-routes.spec.js +81 -0
  12. package/esm/components/define-nested-routes.spec.js.map +1 -0
  13. package/esm/components/index.d.ts +3 -3
  14. package/esm/components/index.d.ts.map +1 -1
  15. package/esm/components/index.js +3 -3
  16. package/esm/components/index.js.map +1 -1
  17. package/esm/components/nested-hooks.d.ts +62 -0
  18. package/esm/components/nested-hooks.d.ts.map +1 -0
  19. package/esm/components/nested-hooks.js +73 -0
  20. package/esm/components/nested-hooks.js.map +1 -0
  21. package/esm/components/nested-hooks.spec.d.ts +2 -0
  22. package/esm/components/nested-hooks.spec.d.ts.map +1 -0
  23. package/esm/components/nested-hooks.spec.js +211 -0
  24. package/esm/components/nested-hooks.spec.js.map +1 -0
  25. package/esm/components/nested-navigate.d.ts +52 -21
  26. package/esm/components/nested-navigate.d.ts.map +1 -1
  27. package/esm/components/nested-navigate.js +32 -17
  28. package/esm/components/nested-navigate.js.map +1 -1
  29. package/esm/components/nested-navigate.spec.js +109 -19
  30. package/esm/components/nested-navigate.spec.js.map +1 -1
  31. package/esm/components/nested-replace.d.ts +36 -0
  32. package/esm/components/nested-replace.d.ts.map +1 -0
  33. package/esm/components/nested-replace.js +38 -0
  34. package/esm/components/nested-replace.js.map +1 -0
  35. package/esm/components/nested-replace.spec.d.ts +2 -0
  36. package/esm/components/nested-replace.spec.d.ts.map +1 -0
  37. package/esm/components/nested-replace.spec.js +59 -0
  38. package/esm/components/nested-replace.spec.js.map +1 -0
  39. package/esm/components/nested-route-link.d.ts +36 -26
  40. package/esm/components/nested-route-link.d.ts.map +1 -1
  41. package/esm/components/nested-route-link.js +18 -20
  42. package/esm/components/nested-route-link.js.map +1 -1
  43. package/esm/components/nested-route-link.spec.js +67 -17
  44. package/esm/components/nested-route-link.spec.js.map +1 -1
  45. package/esm/components/nested-route-types.d.ts +79 -2
  46. package/esm/components/nested-route-types.d.ts.map +1 -1
  47. package/esm/components/nested-router.d.ts +77 -7
  48. package/esm/components/nested-router.d.ts.map +1 -1
  49. package/esm/components/nested-router.js +139 -13
  50. package/esm/components/nested-router.js.map +1 -1
  51. package/esm/components/nested-router.spec.js +283 -52
  52. package/esm/components/nested-router.spec.js.map +1 -1
  53. package/esm/services/location-service.d.ts +39 -42
  54. package/esm/services/location-service.d.ts.map +1 -1
  55. package/esm/services/location-service.js +115 -134
  56. package/esm/services/location-service.js.map +1 -1
  57. package/esm/services/location-service.spec.js +59 -24
  58. package/esm/services/location-service.spec.js.map +1 -1
  59. package/esm/services/route-match-service.d.ts +3 -2
  60. package/esm/services/route-match-service.d.ts.map +1 -1
  61. package/esm/services/route-match-service.js +13 -22
  62. package/esm/services/route-match-service.js.map +1 -1
  63. package/esm/services/route-match-service.spec.js +42 -49
  64. package/esm/services/route-match-service.spec.js.map +1 -1
  65. package/esm/services/route-meta-utils.d.ts +28 -6
  66. package/esm/services/route-meta-utils.d.ts.map +1 -1
  67. package/esm/services/route-meta-utils.js +18 -4
  68. package/esm/services/route-meta-utils.js.map +1 -1
  69. package/esm/services/route-meta-utils.spec.js +60 -5
  70. package/esm/services/route-meta-utils.spec.js.map +1 -1
  71. package/esm/services/screen-service.d.ts +13 -72
  72. package/esm/services/screen-service.d.ts.map +1 -1
  73. package/esm/services/screen-service.js +45 -137
  74. package/esm/services/screen-service.js.map +1 -1
  75. package/esm/services/screen-service.spec.js +19 -18
  76. package/esm/services/screen-service.spec.js.map +1 -1
  77. package/esm/services/spatial-navigation-service.d.ts +17 -39
  78. package/esm/services/spatial-navigation-service.d.ts.map +1 -1
  79. package/esm/services/spatial-navigation-service.js +280 -313
  80. package/esm/services/spatial-navigation-service.js.map +1 -1
  81. package/esm/services/spatial-navigation-service.spec.js +163 -158
  82. package/esm/services/spatial-navigation-service.spec.js.map +1 -1
  83. package/esm/shade.d.ts +1 -1
  84. package/esm/shade.d.ts.map +1 -1
  85. package/esm/shade.js +10 -7
  86. package/esm/shade.js.map +1 -1
  87. package/esm/vnode.d.ts +1 -1
  88. package/esm/vnode.js +1 -1
  89. package/package.json +5 -4
  90. package/src/component-factory.spec.tsx +3 -2
  91. package/src/components/define-nested-routes.spec.ts +91 -0
  92. package/src/components/define-nested-routes.ts +27 -0
  93. package/src/components/index.ts +3 -3
  94. package/src/components/nested-hooks.spec.ts +254 -0
  95. package/src/components/nested-hooks.ts +109 -0
  96. package/src/components/nested-navigate.spec.ts +136 -32
  97. package/src/components/nested-navigate.ts +75 -26
  98. package/src/components/nested-replace.spec.ts +89 -0
  99. package/src/components/nested-replace.ts +46 -0
  100. package/src/components/nested-route-link.spec.tsx +90 -22
  101. package/src/components/nested-route-link.tsx +54 -29
  102. package/src/components/nested-route-types.ts +82 -2
  103. package/src/components/nested-router.spec.tsx +334 -51
  104. package/src/components/nested-router.tsx +184 -24
  105. package/src/services/location-service.spec.ts +68 -25
  106. package/src/services/location-service.tsx +156 -122
  107. package/src/services/route-match-service.spec.ts +41 -28
  108. package/src/services/route-match-service.ts +17 -8
  109. package/src/services/route-meta-utils.spec.ts +78 -10
  110. package/src/services/route-meta-utils.ts +44 -15
  111. package/src/services/screen-service.spec.ts +19 -18
  112. package/src/services/screen-service.ts +65 -110
  113. package/src/services/spatial-navigation-service.spec.ts +165 -160
  114. package/src/services/spatial-navigation-service.ts +299 -287
  115. package/src/shade.ts +11 -8
  116. package/src/vnode.ts +1 -1
  117. package/esm/components/link-to-route.d.ts +0 -10
  118. package/esm/components/link-to-route.d.ts.map +0 -1
  119. package/esm/components/link-to-route.js +0 -16
  120. package/esm/components/link-to-route.js.map +0 -1
  121. package/esm/components/link-to-route.spec.d.ts +0 -2
  122. package/esm/components/link-to-route.spec.d.ts.map +0 -1
  123. package/esm/components/link-to-route.spec.js +0 -30
  124. package/esm/components/link-to-route.spec.js.map +0 -1
  125. package/esm/components/route-link.d.ts +0 -10
  126. package/esm/components/route-link.d.ts.map +0 -1
  127. package/esm/components/route-link.js +0 -25
  128. package/esm/components/route-link.js.map +0 -1
  129. package/esm/components/route-link.spec.d.ts +0 -2
  130. package/esm/components/route-link.spec.d.ts.map +0 -1
  131. package/esm/components/route-link.spec.js +0 -34
  132. package/esm/components/route-link.spec.js.map +0 -1
  133. package/esm/components/router.d.ts +0 -44
  134. package/esm/components/router.d.ts.map +0 -1
  135. package/esm/components/router.js +0 -66
  136. package/esm/components/router.js.map +0 -1
  137. package/esm/components/router.spec.d.ts +0 -2
  138. package/esm/components/router.spec.d.ts.map +0 -1
  139. package/esm/components/router.spec.js +0 -161
  140. package/esm/components/router.spec.js.map +0 -1
  141. package/src/components/link-to-route.spec.tsx +0 -45
  142. package/src/components/link-to-route.tsx +0 -26
  143. package/src/components/route-link.spec.tsx +0 -44
  144. package/src/components/route-link.tsx +0 -29
  145. package/src/components/router.spec.tsx +0 -217
  146. 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":"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"}
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,19 +35,52 @@ 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');
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(new Injector(), async (i) => {
49
- const service = i.getInstance(LocationService);
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(new Injector(), async (i) => {
63
- const service = i.getInstance(LocationService);
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(new Injector(), async (i) => {
70
- const service = i.getInstance(LocationService);
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(new Injector(), async (i) => {
78
- const service = i.getInstance(LocationService);
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(new Injector(), async (i) => {
88
- const service = i.getInstance(LocationService);
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 an error when trying to use a custom serializer after LocationService has been instantiated', async () => {
96
- await usingAsync(new Injector(), async (i) => {
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
- i.getInstance(LocationService);
100
- 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/);
101
136
  });
102
137
  });
103
138
  it('Should use custom serializer and deserializer', async () => {
104
- await usingAsync(new Injector(), async (i) => {
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.getInstance(LocationService);
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":"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"}
1
+ {"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AAEvF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;YAChC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YACvB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;YAChC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YACnD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACvC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAE3C,iEAAiE;YACjE,+EAA+E;YAC/E,8CAA8C;YAC9C,0DAA0D;YAC1D,8CAA8C;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;YAChC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;YACpD,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;YACxB,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC7D,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAChC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAA;gBACnC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBACtB,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC5D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;gBAC9C,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;gBAEpD,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;gBAExB,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;gBAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,CAAA;gBAChE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;gBAEtC,OAAO,CAAC,WAAW,EAAE,CAAA;gBACrB,UAAU,CAAC,WAAW,EAAE,CAAA;YAC1B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAChC,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;gBACjC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;gBACpD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBACpB,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBACtC,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAA;gBAElD,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAEhC,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBAC7D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAEhC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBAE9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;gBACnE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAEhC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACrD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBACtC,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBACxE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC9D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBACtC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBAC3D,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBACtC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBAC3D,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBACtC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAChE,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;gBAC1D,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC7E,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;gBAElF,wEAAwE;gBACxE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAEtB,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAC3F,oCAAoC,CACrC,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC7E,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;gBAElF,8BAA8B,CAAC,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;gBAEvE,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAC9C,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAEhF,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC1C,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAA;YACzE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -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"}
@@ -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
- const env_1 = { stack: [], error: void 0, hasError: false };
58
- try {
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
- const env_2 = { stack: [], error: void 0, hasError: false };
72
- try {
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
- const env_3 = { stack: [], error: void 0, hasError: false };
93
- try {
94
- const service = __addDisposableResource(env_3, new RouteMatchService(), false);
95
- const listener = vi.fn();
96
- const _subscription = __addDisposableResource(env_3, service.currentMatchChain.subscribe(listener), false);
97
- const chain = [
98
- {
99
- route: { meta: { title: 'Home' }, component: () => ({}) },
100
- match: { path: '/', params: {} },
101
- },
102
- ];
103
- service.currentMatchChain.setValue(chain);
104
- expect(listener).toHaveBeenCalledWith(chain);
105
- }
106
- catch (e_3) {
107
- env_3.error = e_3;
108
- env_3.hasError = true;
109
- }
110
- finally {
111
- __disposeResources(env_3);
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 service disposal', () => {
115
- const service = new RouteMatchService();
116
- service[Symbol.dispose]();
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,GAAG,EAAE;;;YAChD,MAAM,OAAO,kCAAG,IAAI,iBAAiB,EAAE,QAAA,CAAA;YACvC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;;;;;;;;;KACzD,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;;;YACvC,MAAM,OAAO,kCAAG,IAAI,iBAAiB,EAAE,QAAA,CAAA;YACvC,MAAM,KAAK,GAAsB;gBAC/B;oBACE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAgB,EAAE;oBAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;iBACtC;aACF,CAAA;YACD,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;;;;;;;;KACzD,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;;;YACzD,MAAM,OAAO,kCAAG,IAAI,iBAAiB,EAAE,QAAA,CAAA;YACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YACxB,MAAM,aAAa,kCAAG,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAA,CAAA;YAEnE,MAAM,KAAK,GAAsB;gBAC/B;oBACE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAgB,EAAE;oBACxE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;iBACjC;aACF,CAAA;YACD,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAEzC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;;;;;;;;;KAC7C,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAA;QACvC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QAEzB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IAChE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
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
- * Useful for rendering sidebar navigation or sitemap-like structures.
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: (routes: Record<string, NestedRoute<unknown>>, parentPath?: string) => NavTreeNode[];
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;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,MAAM,KAAG,WAAW,EAU7G,CAAA"}
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
- * Useful for rendering sidebar navigation or sitemap-like structures.
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
- return Object.entries(routes).map(([pattern, route]) => {
55
- const fullPath = parentPath ? `${parentPath === '/' ? '' : parentPath}${pattern}` : pattern;
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 ? extractNavTree(route.children, fullPath) : undefined,
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":"AAIA;;;;;;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;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA4C,EAAE,UAAmB,EAAiB,EAAE;IACjH,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;QACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAC3F,OAAO;YACL,OAAO;YACP,QAAQ;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAChF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
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"}