@rangojs/router 0.0.0-experimental.124 → 0.0.0-experimental.125

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 (1009) hide show
  1. package/dist/bin/rango.js +3 -4
  2. package/dist/vite/index.js +9 -43
  3. package/package.json +1 -1
  4. package/skills/hooks/SKILL.md +2 -2
  5. package/skills/route/SKILL.md +6 -0
  6. package/src/__internal.ts +0 -65
  7. package/src/browser/action-coordinator.ts +1 -1
  8. package/src/browser/action-fence.ts +10 -0
  9. package/src/browser/event-controller.ts +1 -83
  10. package/src/browser/navigation-store-handle.ts +3 -4
  11. package/src/browser/navigation-store.ts +0 -39
  12. package/src/browser/navigation-transaction.ts +0 -32
  13. package/src/browser/partial-update.ts +1 -83
  14. package/src/browser/prefetch/cache.ts +6 -45
  15. package/src/browser/prefetch/queue.ts +6 -3
  16. package/src/browser/rango-state.ts +2 -23
  17. package/src/browser/react/Link.tsx +0 -2
  18. package/src/browser/react/NavigationProvider.tsx +2 -1
  19. package/src/browser/react/ScrollRestoration.tsx +10 -6
  20. package/src/browser/react/filter-segment-order.ts +0 -2
  21. package/src/browser/react/index.ts +0 -45
  22. package/src/browser/react/location-state-shared.ts +0 -13
  23. package/src/browser/react/location-state.ts +0 -1
  24. package/src/browser/react/use-action.ts +6 -15
  25. package/src/browser/react/use-handle.ts +0 -5
  26. package/src/browser/react/use-link-status.ts +0 -4
  27. package/src/browser/react/use-navigation.ts +0 -3
  28. package/src/browser/react/use-params.ts +0 -2
  29. package/src/browser/react/use-search-params.ts +0 -5
  30. package/src/browser/react/use-segments.ts +0 -13
  31. package/src/browser/rsc-router.tsx +2 -2
  32. package/src/browser/types.ts +0 -1
  33. package/src/browser/validate-redirect-origin.ts +4 -5
  34. package/src/build/route-trie.ts +3 -0
  35. package/src/build/route-types/param-extraction.ts +6 -3
  36. package/src/build/route-types/router-processing.ts +0 -8
  37. package/src/cache/cache-policy.ts +0 -54
  38. package/src/cache/cache-runtime.ts +27 -24
  39. package/src/cache/cache-scope.ts +0 -27
  40. package/src/cache/cache-tag.ts +0 -37
  41. package/src/cache/cf/cf-cache-store.ts +72 -45
  42. package/src/cache/cf/index.ts +0 -24
  43. package/src/cache/document-cache.ts +0 -36
  44. package/src/cache/handle-snapshot.ts +0 -40
  45. package/src/cache/index.ts +0 -27
  46. package/src/cache/memory-segment-store.ts +0 -52
  47. package/src/cache/profile-registry.ts +7 -3
  48. package/src/cache/read-through-swr.ts +41 -11
  49. package/src/cache/segment-codec.ts +0 -16
  50. package/src/cache/types.ts +0 -98
  51. package/src/client.rsc.tsx +1 -22
  52. package/src/client.tsx +14 -32
  53. package/src/deps/ssr.ts +0 -1
  54. package/src/handle.ts +2 -12
  55. package/src/handles/MetaTags.tsx +0 -14
  56. package/src/handles/meta.ts +0 -39
  57. package/src/host/cookie-handler.ts +0 -36
  58. package/src/host/errors.ts +0 -24
  59. package/src/host/index.ts +6 -0
  60. package/src/host/pattern-matcher.ts +7 -50
  61. package/src/host/router.ts +1 -65
  62. package/src/host/testing.ts +0 -16
  63. package/src/host/types.ts +6 -2
  64. package/src/href-client.ts +0 -4
  65. package/src/index.rsc.ts +20 -2
  66. package/src/internal-debug.ts +2 -4
  67. package/src/loader.rsc.ts +4 -15
  68. package/src/loader.ts +3 -9
  69. package/src/network-error-thrower.tsx +1 -6
  70. package/src/outlet-provider.tsx +1 -5
  71. package/src/prerender/param-hash.ts +10 -11
  72. package/src/prerender/store.ts +23 -30
  73. package/src/prerender.ts +34 -0
  74. package/src/root-error-boundary.tsx +1 -19
  75. package/src/route-content-wrapper.tsx +1 -44
  76. package/src/route-definition/dsl-helpers.ts +7 -19
  77. package/src/route-definition/helpers-types.ts +3 -3
  78. package/src/route-definition/redirect.ts +11 -1
  79. package/src/route-map-builder.ts +0 -16
  80. package/src/router/content-negotiation.ts +0 -13
  81. package/src/router/error-handling.ts +12 -16
  82. package/src/router/find-match.ts +4 -30
  83. package/src/router/intercept-resolution.ts +10 -1
  84. package/src/router/lazy-includes.ts +1 -57
  85. package/src/router/loader-resolution.ts +3 -2
  86. package/src/router/logging.ts +0 -6
  87. package/src/router/manifest.ts +1 -25
  88. package/src/router/match-api.ts +0 -20
  89. package/src/router/match-context.ts +0 -22
  90. package/src/router/match-handlers.ts +0 -43
  91. package/src/router/match-middleware/background-revalidation.ts +0 -7
  92. package/src/router/match-middleware/cache-lookup.ts +1 -54
  93. package/src/router/match-middleware/cache-store.ts +0 -31
  94. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  95. package/src/router/match-middleware/segment-resolution.ts +0 -21
  96. package/src/router/match-pipelines.ts +1 -42
  97. package/src/router/match-result.ts +1 -52
  98. package/src/router/metrics.ts +0 -34
  99. package/src/router/middleware-cookies.ts +0 -13
  100. package/src/router/middleware-types.ts +0 -115
  101. package/src/router/middleware.ts +7 -30
  102. package/src/router/navigation-snapshot.ts +0 -51
  103. package/src/router/params-util.ts +23 -0
  104. package/src/router/pattern-matching.ts +1 -33
  105. package/src/router/prerender-match.ts +29 -45
  106. package/src/router/request-classification.ts +1 -38
  107. package/src/router/revalidation.ts +5 -58
  108. package/src/router/router-context.ts +0 -26
  109. package/src/router/segment-resolution/fresh.ts +25 -57
  110. package/src/router/segment-resolution/helpers.ts +34 -0
  111. package/src/router/segment-resolution/loader-cache.ts +10 -13
  112. package/src/router/segment-resolution/revalidation.ts +5 -42
  113. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  114. package/src/router/segment-resolution.ts +4 -1
  115. package/src/router/telemetry-otel.ts +0 -20
  116. package/src/router/telemetry.ts +0 -22
  117. package/src/router/timeout.ts +0 -20
  118. package/src/router/trie-matching.ts +63 -40
  119. package/src/router/types.ts +1 -63
  120. package/src/router/url-params.ts +0 -5
  121. package/src/router.ts +4 -2
  122. package/src/rsc/handler.ts +11 -2
  123. package/src/rsc/helpers.ts +15 -0
  124. package/src/rsc/origin-guard.ts +0 -12
  125. package/src/rsc/progressive-enhancement.ts +2 -1
  126. package/src/rsc/rsc-rendering.ts +2 -7
  127. package/src/rsc/runtime-warnings.ts +14 -0
  128. package/src/rsc/server-action.ts +30 -28
  129. package/src/rsc/types.ts +0 -1
  130. package/src/search-params.ts +0 -16
  131. package/src/segment-loader-promise.ts +14 -2
  132. package/src/segment-system.tsx +79 -88
  133. package/src/server/handle-store.ts +7 -24
  134. package/src/server/loader-registry.ts +5 -24
  135. package/src/server/request-context.ts +6 -78
  136. package/src/ssr/index.tsx +14 -14
  137. package/src/static-handler.ts +2 -27
  138. package/src/testing/cache-status.ts +0 -47
  139. package/src/testing/collect-handle.ts +1 -24
  140. package/src/testing/e2e/index.ts +0 -22
  141. package/src/testing/e2e/matchers.ts +0 -16
  142. package/src/testing/flight-matchers.ts +0 -13
  143. package/src/testing/flight-normalize.ts +3 -30
  144. package/src/testing/flight.ts +0 -48
  145. package/src/testing/generated-routes.ts +1 -41
  146. package/src/testing/index.ts +0 -21
  147. package/src/testing/internal/context.ts +3 -45
  148. package/src/testing/internal/seed-vars.ts +0 -26
  149. package/src/testing/render-handler.ts +0 -49
  150. package/src/testing/render-route.tsx +0 -90
  151. package/src/testing/run-loader.ts +0 -96
  152. package/src/testing/run-middleware.ts +0 -26
  153. package/src/theme/ThemeProvider.tsx +0 -52
  154. package/src/theme/ThemeScript.tsx +0 -6
  155. package/src/theme/constants.ts +0 -12
  156. package/src/theme/index.ts +0 -7
  157. package/src/theme/theme-context.ts +1 -5
  158. package/src/theme/theme-script.ts +0 -14
  159. package/src/theme/use-theme.ts +0 -3
  160. package/src/types/boundaries.ts +0 -35
  161. package/src/types/error-types.ts +25 -89
  162. package/src/types/global-namespace.ts +4 -14
  163. package/src/types/handler-context.ts +0 -8
  164. package/src/types/index.ts +0 -10
  165. package/src/types/request-scope.ts +0 -19
  166. package/src/types/route-config.ts +6 -50
  167. package/src/types/route-entry.ts +0 -6
  168. package/src/types/segments.ts +0 -13
  169. package/src/urls/include-helper.ts +0 -4
  170. package/src/urls/index.ts +0 -6
  171. package/src/urls/path-helper-types.ts +2 -2
  172. package/src/urls/path-helper.ts +0 -54
  173. package/src/urls/urls-function.ts +0 -13
  174. package/src/use-loader.tsx +0 -186
  175. package/src/vite/discovery/bundle-postprocess.ts +2 -1
  176. package/src/vite/discovery/discover-routers.ts +6 -7
  177. package/src/vite/discovery/virtual-module-codegen.ts +1 -11
  178. package/src/vite/plugin-types.ts +3 -1
  179. package/src/vite/plugins/cjs-to-esm.ts +0 -11
  180. package/src/vite/plugins/client-ref-dedup.ts +0 -11
  181. package/src/vite/plugins/client-ref-hashing.ts +0 -10
  182. package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
  183. package/src/vite/plugins/expose-action-id.ts +2 -73
  184. package/src/vite/plugins/expose-id-utils.ts +0 -55
  185. package/src/vite/plugins/expose-ids/export-analysis.ts +0 -38
  186. package/src/vite/plugins/expose-ids/handler-transform.ts +0 -15
  187. package/src/vite/plugins/expose-ids/loader-transform.ts +0 -15
  188. package/src/vite/plugins/expose-ids/router-transform.ts +0 -13
  189. package/src/vite/plugins/expose-internal-ids.ts +10 -0
  190. package/src/vite/plugins/performance-tracks.ts +0 -3
  191. package/src/vite/plugins/use-cache-transform.ts +0 -36
  192. package/src/vite/plugins/version-injector.ts +0 -20
  193. package/src/vite/plugins/version-plugin.ts +1 -49
  194. package/src/vite/plugins/virtual-entries.ts +0 -15
  195. package/src/vite/rango.ts +1 -108
  196. package/src/vite/router-discovery.ts +2 -1
  197. package/src/vite/utils/ast-handler-extract.ts +0 -16
  198. package/src/vite/utils/bundle-analysis.ts +6 -13
  199. package/src/vite/utils/client-chunks.ts +0 -6
  200. package/src/vite/utils/forward-user-plugins.ts +0 -22
  201. package/src/vite/utils/manifest-utils.ts +0 -4
  202. package/src/vite/utils/package-resolution.ts +1 -73
  203. package/src/vite/utils/prerender-utils.ts +0 -35
  204. package/src/vite/utils/shared-utils.ts +3 -35
  205. package/dist/__internal.d.ts +0 -83
  206. package/dist/__internal.d.ts.map +0 -1
  207. package/dist/__internal.js +0 -19
  208. package/dist/__internal.js.map +0 -1
  209. package/dist/__mocks__/version.d.ts +0 -7
  210. package/dist/__mocks__/version.d.ts.map +0 -1
  211. package/dist/__mocks__/version.js +0 -7
  212. package/dist/__mocks__/version.js.map +0 -1
  213. package/dist/__tests__/client-href.test.d.ts +0 -2
  214. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  215. package/dist/__tests__/client-href.test.js +0 -74
  216. package/dist/__tests__/client-href.test.js.map +0 -1
  217. package/dist/__tests__/component-utils.test.d.ts +0 -2
  218. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  219. package/dist/__tests__/component-utils.test.js +0 -51
  220. package/dist/__tests__/component-utils.test.js.map +0 -1
  221. package/dist/__tests__/event-controller.test.d.ts +0 -2
  222. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  223. package/dist/__tests__/event-controller.test.js +0 -538
  224. package/dist/__tests__/event-controller.test.js.map +0 -1
  225. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  226. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  227. package/dist/__tests__/helpers/route-tree.js +0 -374
  228. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  229. package/dist/__tests__/match-result.test.d.ts +0 -2
  230. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  231. package/dist/__tests__/match-result.test.js +0 -154
  232. package/dist/__tests__/match-result.test.js.map +0 -1
  233. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  234. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  235. package/dist/__tests__/navigation-store.test.js +0 -440
  236. package/dist/__tests__/navigation-store.test.js.map +0 -1
  237. package/dist/__tests__/partial-update.test.d.ts +0 -2
  238. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  239. package/dist/__tests__/partial-update.test.js +0 -1009
  240. package/dist/__tests__/partial-update.test.js.map +0 -1
  241. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  242. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  243. package/dist/__tests__/reverse-types.test.js +0 -656
  244. package/dist/__tests__/reverse-types.test.js.map +0 -1
  245. package/dist/__tests__/route-definition.test.d.ts +0 -2
  246. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  247. package/dist/__tests__/route-definition.test.js +0 -55
  248. package/dist/__tests__/route-definition.test.js.map +0 -1
  249. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  250. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  251. package/dist/__tests__/router-helpers.test.js +0 -377
  252. package/dist/__tests__/router-helpers.test.js.map +0 -1
  253. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  254. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  255. package/dist/__tests__/router-integration-2.test.js +0 -426
  256. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  257. package/dist/__tests__/router-integration.test.d.ts +0 -2
  258. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  259. package/dist/__tests__/router-integration.test.js +0 -1051
  260. package/dist/__tests__/router-integration.test.js.map +0 -1
  261. package/dist/__tests__/search-params.test.d.ts +0 -5
  262. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  263. package/dist/__tests__/search-params.test.js +0 -306
  264. package/dist/__tests__/search-params.test.js.map +0 -1
  265. package/dist/__tests__/segment-system.test.d.ts +0 -2
  266. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  267. package/dist/__tests__/segment-system.test.js +0 -627
  268. package/dist/__tests__/segment-system.test.js.map +0 -1
  269. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  270. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  271. package/dist/__tests__/static-handler-types.test.js +0 -63
  272. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  273. package/dist/__tests__/urls.test.d.ts +0 -2
  274. package/dist/__tests__/urls.test.d.ts.map +0 -1
  275. package/dist/__tests__/urls.test.js +0 -421
  276. package/dist/__tests__/urls.test.js.map +0 -1
  277. package/dist/__tests__/use-mount.test.d.ts +0 -2
  278. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  279. package/dist/__tests__/use-mount.test.js +0 -35
  280. package/dist/__tests__/use-mount.test.js.map +0 -1
  281. package/dist/bin/rango.d.ts +0 -2
  282. package/dist/bin/rango.d.ts.map +0 -1
  283. package/dist/bin/rango.js.map +0 -1
  284. package/dist/browser/event-controller.d.ts +0 -191
  285. package/dist/browser/event-controller.d.ts.map +0 -1
  286. package/dist/browser/event-controller.js +0 -559
  287. package/dist/browser/event-controller.js.map +0 -1
  288. package/dist/browser/index.d.ts +0 -2
  289. package/dist/browser/index.d.ts.map +0 -1
  290. package/dist/browser/index.js +0 -14
  291. package/dist/browser/index.js.map +0 -1
  292. package/dist/browser/link-interceptor.d.ts +0 -38
  293. package/dist/browser/link-interceptor.d.ts.map +0 -1
  294. package/dist/browser/link-interceptor.js +0 -99
  295. package/dist/browser/link-interceptor.js.map +0 -1
  296. package/dist/browser/logging.d.ts +0 -10
  297. package/dist/browser/logging.d.ts.map +0 -1
  298. package/dist/browser/logging.js +0 -29
  299. package/dist/browser/logging.js.map +0 -1
  300. package/dist/browser/lru-cache.d.ts +0 -17
  301. package/dist/browser/lru-cache.d.ts.map +0 -1
  302. package/dist/browser/lru-cache.js +0 -50
  303. package/dist/browser/lru-cache.js.map +0 -1
  304. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  305. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  306. package/dist/browser/merge-segment-loaders.js +0 -102
  307. package/dist/browser/merge-segment-loaders.js.map +0 -1
  308. package/dist/browser/navigation-bridge.d.ts +0 -102
  309. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  310. package/dist/browser/navigation-bridge.js +0 -708
  311. package/dist/browser/navigation-bridge.js.map +0 -1
  312. package/dist/browser/navigation-client.d.ts +0 -25
  313. package/dist/browser/navigation-client.d.ts.map +0 -1
  314. package/dist/browser/navigation-client.js +0 -157
  315. package/dist/browser/navigation-client.js.map +0 -1
  316. package/dist/browser/navigation-store.d.ts +0 -101
  317. package/dist/browser/navigation-store.d.ts.map +0 -1
  318. package/dist/browser/navigation-store.js +0 -625
  319. package/dist/browser/navigation-store.js.map +0 -1
  320. package/dist/browser/partial-update.d.ts +0 -75
  321. package/dist/browser/partial-update.d.ts.map +0 -1
  322. package/dist/browser/partial-update.js +0 -426
  323. package/dist/browser/partial-update.js.map +0 -1
  324. package/dist/browser/react/Link.d.ts +0 -86
  325. package/dist/browser/react/Link.d.ts.map +0 -1
  326. package/dist/browser/react/Link.js +0 -128
  327. package/dist/browser/react/Link.js.map +0 -1
  328. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  329. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  330. package/dist/browser/react/NavigationProvider.js +0 -216
  331. package/dist/browser/react/NavigationProvider.js.map +0 -1
  332. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  333. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  334. package/dist/browser/react/ScrollRestoration.js +0 -57
  335. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  336. package/dist/browser/react/context.d.ts +0 -46
  337. package/dist/browser/react/context.d.ts.map +0 -1
  338. package/dist/browser/react/context.js +0 -10
  339. package/dist/browser/react/context.js.map +0 -1
  340. package/dist/browser/react/index.d.ts +0 -11
  341. package/dist/browser/react/index.d.ts.map +0 -1
  342. package/dist/browser/react/index.js +0 -22
  343. package/dist/browser/react/index.js.map +0 -1
  344. package/dist/browser/react/location-state-shared.d.ts +0 -63
  345. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  346. package/dist/browser/react/location-state-shared.js +0 -81
  347. package/dist/browser/react/location-state-shared.js.map +0 -1
  348. package/dist/browser/react/location-state.d.ts +0 -23
  349. package/dist/browser/react/location-state.d.ts.map +0 -1
  350. package/dist/browser/react/location-state.js +0 -29
  351. package/dist/browser/react/location-state.js.map +0 -1
  352. package/dist/browser/react/mount-context.d.ts +0 -24
  353. package/dist/browser/react/mount-context.d.ts.map +0 -1
  354. package/dist/browser/react/mount-context.js +0 -24
  355. package/dist/browser/react/mount-context.js.map +0 -1
  356. package/dist/browser/react/use-action.d.ts +0 -64
  357. package/dist/browser/react/use-action.d.ts.map +0 -1
  358. package/dist/browser/react/use-action.js +0 -134
  359. package/dist/browser/react/use-action.js.map +0 -1
  360. package/dist/browser/react/use-client-cache.d.ts +0 -41
  361. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  362. package/dist/browser/react/use-client-cache.js +0 -39
  363. package/dist/browser/react/use-client-cache.js.map +0 -1
  364. package/dist/browser/react/use-handle.d.ts +0 -31
  365. package/dist/browser/react/use-handle.d.ts.map +0 -1
  366. package/dist/browser/react/use-handle.js +0 -144
  367. package/dist/browser/react/use-handle.js.map +0 -1
  368. package/dist/browser/react/use-href.d.ts +0 -33
  369. package/dist/browser/react/use-href.d.ts.map +0 -1
  370. package/dist/browser/react/use-href.js +0 -39
  371. package/dist/browser/react/use-href.js.map +0 -1
  372. package/dist/browser/react/use-link-status.d.ts +0 -37
  373. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  374. package/dist/browser/react/use-link-status.js +0 -99
  375. package/dist/browser/react/use-link-status.js.map +0 -1
  376. package/dist/browser/react/use-mount.d.ts +0 -25
  377. package/dist/browser/react/use-mount.d.ts.map +0 -1
  378. package/dist/browser/react/use-mount.js +0 -30
  379. package/dist/browser/react/use-mount.js.map +0 -1
  380. package/dist/browser/react/use-navigation.d.ts +0 -27
  381. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  382. package/dist/browser/react/use-navigation.js +0 -87
  383. package/dist/browser/react/use-navigation.js.map +0 -1
  384. package/dist/browser/react/use-segments.d.ts +0 -38
  385. package/dist/browser/react/use-segments.d.ts.map +0 -1
  386. package/dist/browser/react/use-segments.js +0 -130
  387. package/dist/browser/react/use-segments.js.map +0 -1
  388. package/dist/browser/request-controller.d.ts +0 -26
  389. package/dist/browser/request-controller.d.ts.map +0 -1
  390. package/dist/browser/request-controller.js +0 -147
  391. package/dist/browser/request-controller.js.map +0 -1
  392. package/dist/browser/rsc-router.d.ts +0 -129
  393. package/dist/browser/rsc-router.d.ts.map +0 -1
  394. package/dist/browser/rsc-router.js +0 -195
  395. package/dist/browser/rsc-router.js.map +0 -1
  396. package/dist/browser/scroll-restoration.d.ts +0 -93
  397. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  398. package/dist/browser/scroll-restoration.js +0 -321
  399. package/dist/browser/scroll-restoration.js.map +0 -1
  400. package/dist/browser/segment-structure-assert.d.ts +0 -17
  401. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  402. package/dist/browser/segment-structure-assert.js +0 -59
  403. package/dist/browser/segment-structure-assert.js.map +0 -1
  404. package/dist/browser/server-action-bridge.d.ts +0 -26
  405. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  406. package/dist/browser/server-action-bridge.js +0 -668
  407. package/dist/browser/server-action-bridge.js.map +0 -1
  408. package/dist/browser/shallow.d.ts +0 -12
  409. package/dist/browser/shallow.d.ts.map +0 -1
  410. package/dist/browser/shallow.js +0 -34
  411. package/dist/browser/shallow.js.map +0 -1
  412. package/dist/browser/types.d.ts +0 -369
  413. package/dist/browser/types.d.ts.map +0 -1
  414. package/dist/browser/types.js +0 -2
  415. package/dist/browser/types.js.map +0 -1
  416. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  417. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  418. package/dist/build/__tests__/generate-cli.test.js +0 -237
  419. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  420. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  421. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  422. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  423. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  424. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  425. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  426. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  427. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  428. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  429. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  430. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  431. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  432. package/dist/build/generate-manifest.d.ts +0 -81
  433. package/dist/build/generate-manifest.d.ts.map +0 -1
  434. package/dist/build/generate-manifest.js +0 -276
  435. package/dist/build/generate-manifest.js.map +0 -1
  436. package/dist/build/generate-route-types.d.ts +0 -115
  437. package/dist/build/generate-route-types.d.ts.map +0 -1
  438. package/dist/build/generate-route-types.js +0 -740
  439. package/dist/build/generate-route-types.js.map +0 -1
  440. package/dist/build/index.d.ts +0 -21
  441. package/dist/build/index.d.ts.map +0 -1
  442. package/dist/build/index.js +0 -21
  443. package/dist/build/index.js.map +0 -1
  444. package/dist/build/route-trie.d.ts +0 -71
  445. package/dist/build/route-trie.d.ts.map +0 -1
  446. package/dist/build/route-trie.js +0 -175
  447. package/dist/build/route-trie.js.map +0 -1
  448. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  449. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  450. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  451. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  452. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  453. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  454. package/dist/cache/__tests__/document-cache.test.js +0 -345
  455. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  456. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  457. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  458. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  459. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  460. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  461. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  462. package/dist/cache/__tests__/memory-store.test.js +0 -367
  463. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  464. package/dist/cache/cache-scope.d.ts +0 -102
  465. package/dist/cache/cache-scope.d.ts.map +0 -1
  466. package/dist/cache/cache-scope.js +0 -440
  467. package/dist/cache/cache-scope.js.map +0 -1
  468. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  469. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  470. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  471. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  472. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  473. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  474. package/dist/cache/cf/cf-cache-store.js +0 -242
  475. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  476. package/dist/cache/cf/index.d.ts +0 -14
  477. package/dist/cache/cf/index.d.ts.map +0 -1
  478. package/dist/cache/cf/index.js +0 -17
  479. package/dist/cache/cf/index.js.map +0 -1
  480. package/dist/cache/document-cache.d.ts +0 -64
  481. package/dist/cache/document-cache.d.ts.map +0 -1
  482. package/dist/cache/document-cache.js +0 -228
  483. package/dist/cache/document-cache.js.map +0 -1
  484. package/dist/cache/index.d.ts +0 -19
  485. package/dist/cache/index.d.ts.map +0 -1
  486. package/dist/cache/index.js +0 -21
  487. package/dist/cache/index.js.map +0 -1
  488. package/dist/cache/memory-segment-store.d.ts +0 -110
  489. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  490. package/dist/cache/memory-segment-store.js +0 -117
  491. package/dist/cache/memory-segment-store.js.map +0 -1
  492. package/dist/cache/memory-store.d.ts +0 -41
  493. package/dist/cache/memory-store.d.ts.map +0 -1
  494. package/dist/cache/memory-store.js +0 -191
  495. package/dist/cache/memory-store.js.map +0 -1
  496. package/dist/cache/types.d.ts +0 -317
  497. package/dist/cache/types.d.ts.map +0 -1
  498. package/dist/cache/types.js +0 -12
  499. package/dist/cache/types.js.map +0 -1
  500. package/dist/client.d.ts +0 -248
  501. package/dist/client.d.ts.map +0 -1
  502. package/dist/client.js +0 -367
  503. package/dist/client.js.map +0 -1
  504. package/dist/client.rsc.d.ts +0 -26
  505. package/dist/client.rsc.d.ts.map +0 -1
  506. package/dist/client.rsc.js +0 -46
  507. package/dist/client.rsc.js.map +0 -1
  508. package/dist/component-utils.d.ts +0 -36
  509. package/dist/component-utils.d.ts.map +0 -1
  510. package/dist/component-utils.js +0 -61
  511. package/dist/component-utils.js.map +0 -1
  512. package/dist/components/DefaultDocument.d.ts +0 -13
  513. package/dist/components/DefaultDocument.d.ts.map +0 -1
  514. package/dist/components/DefaultDocument.js +0 -15
  515. package/dist/components/DefaultDocument.js.map +0 -1
  516. package/dist/debug.d.ts +0 -58
  517. package/dist/debug.d.ts.map +0 -1
  518. package/dist/debug.js +0 -157
  519. package/dist/debug.js.map +0 -1
  520. package/dist/default-error-boundary.d.ts +0 -11
  521. package/dist/default-error-boundary.d.ts.map +0 -1
  522. package/dist/default-error-boundary.js +0 -45
  523. package/dist/default-error-boundary.js.map +0 -1
  524. package/dist/deps/browser.d.ts +0 -2
  525. package/dist/deps/browser.d.ts.map +0 -1
  526. package/dist/deps/browser.js +0 -3
  527. package/dist/deps/browser.js.map +0 -1
  528. package/dist/deps/html-stream-client.d.ts +0 -2
  529. package/dist/deps/html-stream-client.d.ts.map +0 -1
  530. package/dist/deps/html-stream-client.js +0 -3
  531. package/dist/deps/html-stream-client.js.map +0 -1
  532. package/dist/deps/html-stream-server.d.ts +0 -2
  533. package/dist/deps/html-stream-server.d.ts.map +0 -1
  534. package/dist/deps/html-stream-server.js +0 -3
  535. package/dist/deps/html-stream-server.js.map +0 -1
  536. package/dist/deps/rsc.d.ts +0 -2
  537. package/dist/deps/rsc.d.ts.map +0 -1
  538. package/dist/deps/rsc.js +0 -4
  539. package/dist/deps/rsc.js.map +0 -1
  540. package/dist/deps/ssr.d.ts +0 -2
  541. package/dist/deps/ssr.d.ts.map +0 -1
  542. package/dist/deps/ssr.js +0 -3
  543. package/dist/deps/ssr.js.map +0 -1
  544. package/dist/errors.d.ts +0 -174
  545. package/dist/errors.d.ts.map +0 -1
  546. package/dist/errors.js +0 -241
  547. package/dist/errors.js.map +0 -1
  548. package/dist/handle.d.ts +0 -78
  549. package/dist/handle.d.ts.map +0 -1
  550. package/dist/handle.js +0 -82
  551. package/dist/handle.js.map +0 -1
  552. package/dist/handles/MetaTags.d.ts +0 -14
  553. package/dist/handles/MetaTags.d.ts.map +0 -1
  554. package/dist/handles/MetaTags.js +0 -136
  555. package/dist/handles/MetaTags.js.map +0 -1
  556. package/dist/handles/index.d.ts +0 -6
  557. package/dist/handles/index.d.ts.map +0 -1
  558. package/dist/handles/index.js +0 -6
  559. package/dist/handles/index.js.map +0 -1
  560. package/dist/handles/meta.d.ts +0 -39
  561. package/dist/handles/meta.d.ts.map +0 -1
  562. package/dist/handles/meta.js +0 -202
  563. package/dist/handles/meta.js.map +0 -1
  564. package/dist/host/__tests__/errors.test.d.ts +0 -2
  565. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  566. package/dist/host/__tests__/errors.test.js +0 -76
  567. package/dist/host/__tests__/errors.test.js.map +0 -1
  568. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  569. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  570. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  571. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  572. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  573. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  574. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  575. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  576. package/dist/host/__tests__/router.test.d.ts +0 -2
  577. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  578. package/dist/host/__tests__/router.test.js +0 -241
  579. package/dist/host/__tests__/router.test.js.map +0 -1
  580. package/dist/host/__tests__/testing.test.d.ts +0 -2
  581. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  582. package/dist/host/__tests__/testing.test.js +0 -64
  583. package/dist/host/__tests__/testing.test.js.map +0 -1
  584. package/dist/host/__tests__/utils.test.d.ts +0 -2
  585. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  586. package/dist/host/__tests__/utils.test.js +0 -29
  587. package/dist/host/__tests__/utils.test.js.map +0 -1
  588. package/dist/host/cookie-handler.d.ts +0 -34
  589. package/dist/host/cookie-handler.d.ts.map +0 -1
  590. package/dist/host/cookie-handler.js +0 -124
  591. package/dist/host/cookie-handler.js.map +0 -1
  592. package/dist/host/errors.d.ts +0 -56
  593. package/dist/host/errors.d.ts.map +0 -1
  594. package/dist/host/errors.js +0 -79
  595. package/dist/host/errors.js.map +0 -1
  596. package/dist/host/index.d.ts +0 -29
  597. package/dist/host/index.d.ts.map +0 -1
  598. package/dist/host/index.js +0 -32
  599. package/dist/host/index.js.map +0 -1
  600. package/dist/host/pattern-matcher.d.ts +0 -36
  601. package/dist/host/pattern-matcher.d.ts.map +0 -1
  602. package/dist/host/pattern-matcher.js +0 -172
  603. package/dist/host/pattern-matcher.js.map +0 -1
  604. package/dist/host/router.d.ts +0 -26
  605. package/dist/host/router.d.ts.map +0 -1
  606. package/dist/host/router.js +0 -218
  607. package/dist/host/router.js.map +0 -1
  608. package/dist/host/testing.d.ts +0 -36
  609. package/dist/host/testing.d.ts.map +0 -1
  610. package/dist/host/testing.js +0 -55
  611. package/dist/host/testing.js.map +0 -1
  612. package/dist/host/types.d.ts +0 -115
  613. package/dist/host/types.d.ts.map +0 -1
  614. package/dist/host/types.js +0 -7
  615. package/dist/host/types.js.map +0 -1
  616. package/dist/host/utils.d.ts +0 -21
  617. package/dist/host/utils.d.ts.map +0 -1
  618. package/dist/host/utils.js +0 -23
  619. package/dist/host/utils.js.map +0 -1
  620. package/dist/href-client.d.ts +0 -131
  621. package/dist/href-client.d.ts.map +0 -1
  622. package/dist/href-client.js +0 -64
  623. package/dist/href-client.js.map +0 -1
  624. package/dist/href-context.d.ts +0 -29
  625. package/dist/href-context.d.ts.map +0 -1
  626. package/dist/href-context.js +0 -21
  627. package/dist/href-context.js.map +0 -1
  628. package/dist/index.d.ts +0 -73
  629. package/dist/index.d.ts.map +0 -1
  630. package/dist/index.js +0 -91
  631. package/dist/index.js.map +0 -1
  632. package/dist/index.rsc.d.ts +0 -32
  633. package/dist/index.rsc.d.ts.map +0 -1
  634. package/dist/index.rsc.js +0 -40
  635. package/dist/index.rsc.js.map +0 -1
  636. package/dist/internal-debug.d.ts +0 -2
  637. package/dist/internal-debug.d.ts.map +0 -1
  638. package/dist/internal-debug.js +0 -5
  639. package/dist/internal-debug.js.map +0 -1
  640. package/dist/loader.d.ts +0 -14
  641. package/dist/loader.d.ts.map +0 -1
  642. package/dist/loader.js +0 -20
  643. package/dist/loader.js.map +0 -1
  644. package/dist/loader.rsc.d.ts +0 -19
  645. package/dist/loader.rsc.d.ts.map +0 -1
  646. package/dist/loader.rsc.js +0 -99
  647. package/dist/loader.rsc.js.map +0 -1
  648. package/dist/network-error-thrower.d.ts +0 -17
  649. package/dist/network-error-thrower.d.ts.map +0 -1
  650. package/dist/network-error-thrower.js +0 -14
  651. package/dist/network-error-thrower.js.map +0 -1
  652. package/dist/outlet-context.d.ts +0 -13
  653. package/dist/outlet-context.d.ts.map +0 -1
  654. package/dist/outlet-context.js +0 -3
  655. package/dist/outlet-context.js.map +0 -1
  656. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  657. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  658. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  659. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  660. package/dist/prerender/param-hash.d.ts +0 -16
  661. package/dist/prerender/param-hash.d.ts.map +0 -1
  662. package/dist/prerender/param-hash.js +0 -36
  663. package/dist/prerender/param-hash.js.map +0 -1
  664. package/dist/prerender/store.d.ts +0 -38
  665. package/dist/prerender/store.d.ts.map +0 -1
  666. package/dist/prerender/store.js +0 -61
  667. package/dist/prerender/store.js.map +0 -1
  668. package/dist/prerender.d.ts +0 -66
  669. package/dist/prerender.d.ts.map +0 -1
  670. package/dist/prerender.js +0 -57
  671. package/dist/prerender.js.map +0 -1
  672. package/dist/reverse.d.ts +0 -196
  673. package/dist/reverse.d.ts.map +0 -1
  674. package/dist/reverse.js +0 -78
  675. package/dist/reverse.js.map +0 -1
  676. package/dist/root-error-boundary.d.ts +0 -33
  677. package/dist/root-error-boundary.d.ts.map +0 -1
  678. package/dist/root-error-boundary.js +0 -165
  679. package/dist/root-error-boundary.js.map +0 -1
  680. package/dist/route-content-wrapper.d.ts +0 -46
  681. package/dist/route-content-wrapper.d.ts.map +0 -1
  682. package/dist/route-content-wrapper.js +0 -77
  683. package/dist/route-content-wrapper.js.map +0 -1
  684. package/dist/route-definition.d.ts +0 -421
  685. package/dist/route-definition.d.ts.map +0 -1
  686. package/dist/route-definition.js +0 -868
  687. package/dist/route-definition.js.map +0 -1
  688. package/dist/route-map-builder.d.ts +0 -155
  689. package/dist/route-map-builder.d.ts.map +0 -1
  690. package/dist/route-map-builder.js +0 -237
  691. package/dist/route-map-builder.js.map +0 -1
  692. package/dist/route-types.d.ts +0 -165
  693. package/dist/route-types.d.ts.map +0 -1
  694. package/dist/route-types.js +0 -7
  695. package/dist/route-types.js.map +0 -1
  696. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  697. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  698. package/dist/router/__tests__/handler-context.test.js +0 -65
  699. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  700. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  701. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  702. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  703. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  704. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  705. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  706. package/dist/router/__tests__/match-context.test.js +0 -92
  707. package/dist/router/__tests__/match-context.test.js.map +0 -1
  708. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  709. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  710. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  711. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  712. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  713. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  714. package/dist/router/__tests__/match-result.test.js +0 -457
  715. package/dist/router/__tests__/match-result.test.js.map +0 -1
  716. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  717. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  718. package/dist/router/__tests__/on-error.test.js +0 -678
  719. package/dist/router/__tests__/on-error.test.js.map +0 -1
  720. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  721. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  722. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  723. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  724. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  725. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  726. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  727. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  728. package/dist/router/error-handling.d.ts +0 -77
  729. package/dist/router/error-handling.d.ts.map +0 -1
  730. package/dist/router/error-handling.js +0 -202
  731. package/dist/router/error-handling.js.map +0 -1
  732. package/dist/router/handler-context.d.ts +0 -20
  733. package/dist/router/handler-context.d.ts.map +0 -1
  734. package/dist/router/handler-context.js +0 -198
  735. package/dist/router/handler-context.js.map +0 -1
  736. package/dist/router/intercept-resolution.d.ts +0 -66
  737. package/dist/router/intercept-resolution.d.ts.map +0 -1
  738. package/dist/router/intercept-resolution.js +0 -246
  739. package/dist/router/intercept-resolution.js.map +0 -1
  740. package/dist/router/loader-resolution.d.ts +0 -64
  741. package/dist/router/loader-resolution.d.ts.map +0 -1
  742. package/dist/router/loader-resolution.js +0 -284
  743. package/dist/router/loader-resolution.js.map +0 -1
  744. package/dist/router/logging.d.ts +0 -15
  745. package/dist/router/logging.d.ts.map +0 -1
  746. package/dist/router/logging.js +0 -99
  747. package/dist/router/logging.js.map +0 -1
  748. package/dist/router/manifest.d.ts +0 -22
  749. package/dist/router/manifest.d.ts.map +0 -1
  750. package/dist/router/manifest.js +0 -181
  751. package/dist/router/manifest.js.map +0 -1
  752. package/dist/router/match-api.d.ts +0 -35
  753. package/dist/router/match-api.d.ts.map +0 -1
  754. package/dist/router/match-api.js +0 -406
  755. package/dist/router/match-api.js.map +0 -1
  756. package/dist/router/match-context.d.ts +0 -206
  757. package/dist/router/match-context.d.ts.map +0 -1
  758. package/dist/router/match-context.js +0 -17
  759. package/dist/router/match-context.js.map +0 -1
  760. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  761. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  762. package/dist/router/match-middleware/background-revalidation.js +0 -75
  763. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  764. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  765. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  766. package/dist/router/match-middleware/cache-lookup.js +0 -257
  767. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  768. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  769. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  770. package/dist/router/match-middleware/cache-store.js +0 -108
  771. package/dist/router/match-middleware/cache-store.js.map +0 -1
  772. package/dist/router/match-middleware/index.d.ts +0 -81
  773. package/dist/router/match-middleware/index.d.ts.map +0 -1
  774. package/dist/router/match-middleware/index.js +0 -80
  775. package/dist/router/match-middleware/index.js.map +0 -1
  776. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  777. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  778. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  779. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  780. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  781. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  782. package/dist/router/match-middleware/segment-resolution.js +0 -53
  783. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  784. package/dist/router/match-pipelines.d.ts +0 -147
  785. package/dist/router/match-pipelines.d.ts.map +0 -1
  786. package/dist/router/match-pipelines.js +0 -82
  787. package/dist/router/match-pipelines.js.map +0 -1
  788. package/dist/router/match-result.d.ts +0 -126
  789. package/dist/router/match-result.d.ts.map +0 -1
  790. package/dist/router/match-result.js +0 -93
  791. package/dist/router/match-result.js.map +0 -1
  792. package/dist/router/metrics.d.ts +0 -20
  793. package/dist/router/metrics.d.ts.map +0 -1
  794. package/dist/router/metrics.js +0 -47
  795. package/dist/router/metrics.js.map +0 -1
  796. package/dist/router/middleware.d.ts +0 -249
  797. package/dist/router/middleware.d.ts.map +0 -1
  798. package/dist/router/middleware.js +0 -434
  799. package/dist/router/middleware.js.map +0 -1
  800. package/dist/router/middleware.test.d.ts +0 -2
  801. package/dist/router/middleware.test.d.ts.map +0 -1
  802. package/dist/router/middleware.test.js +0 -816
  803. package/dist/router/middleware.test.js.map +0 -1
  804. package/dist/router/pattern-matching.d.ts +0 -149
  805. package/dist/router/pattern-matching.d.ts.map +0 -1
  806. package/dist/router/pattern-matching.js +0 -349
  807. package/dist/router/pattern-matching.js.map +0 -1
  808. package/dist/router/revalidation.d.ts +0 -44
  809. package/dist/router/revalidation.d.ts.map +0 -1
  810. package/dist/router/revalidation.js +0 -147
  811. package/dist/router/revalidation.js.map +0 -1
  812. package/dist/router/router-context.d.ts +0 -135
  813. package/dist/router/router-context.d.ts.map +0 -1
  814. package/dist/router/router-context.js +0 -36
  815. package/dist/router/router-context.js.map +0 -1
  816. package/dist/router/segment-resolution.d.ts +0 -127
  817. package/dist/router/segment-resolution.d.ts.map +0 -1
  818. package/dist/router/segment-resolution.js +0 -919
  819. package/dist/router/segment-resolution.js.map +0 -1
  820. package/dist/router/trie-matching.d.ts +0 -40
  821. package/dist/router/trie-matching.d.ts.map +0 -1
  822. package/dist/router/trie-matching.js +0 -127
  823. package/dist/router/trie-matching.js.map +0 -1
  824. package/dist/router/types.d.ts +0 -136
  825. package/dist/router/types.d.ts.map +0 -1
  826. package/dist/router/types.js +0 -7
  827. package/dist/router/types.js.map +0 -1
  828. package/dist/router.d.ts +0 -753
  829. package/dist/router.d.ts.map +0 -1
  830. package/dist/router.gen.d.ts +0 -6
  831. package/dist/router.gen.d.ts.map +0 -1
  832. package/dist/router.gen.js +0 -6
  833. package/dist/router.gen.js.map +0 -1
  834. package/dist/router.js +0 -1304
  835. package/dist/router.js.map +0 -1
  836. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  837. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  838. package/dist/rsc/__tests__/helpers.test.js +0 -140
  839. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  840. package/dist/rsc/handler.d.ts +0 -45
  841. package/dist/rsc/handler.d.ts.map +0 -1
  842. package/dist/rsc/handler.js +0 -1172
  843. package/dist/rsc/handler.js.map +0 -1
  844. package/dist/rsc/helpers.d.ts +0 -16
  845. package/dist/rsc/helpers.d.ts.map +0 -1
  846. package/dist/rsc/helpers.js +0 -55
  847. package/dist/rsc/helpers.js.map +0 -1
  848. package/dist/rsc/index.d.ts +0 -22
  849. package/dist/rsc/index.d.ts.map +0 -1
  850. package/dist/rsc/index.js +0 -23
  851. package/dist/rsc/index.js.map +0 -1
  852. package/dist/rsc/nonce.d.ts +0 -9
  853. package/dist/rsc/nonce.d.ts.map +0 -1
  854. package/dist/rsc/nonce.js +0 -18
  855. package/dist/rsc/nonce.js.map +0 -1
  856. package/dist/rsc/types.d.ts +0 -206
  857. package/dist/rsc/types.d.ts.map +0 -1
  858. package/dist/rsc/types.js +0 -8
  859. package/dist/rsc/types.js.map +0 -1
  860. package/dist/search-params.d.ts +0 -103
  861. package/dist/search-params.d.ts.map +0 -1
  862. package/dist/search-params.js +0 -74
  863. package/dist/search-params.js.map +0 -1
  864. package/dist/segment-system.d.ts +0 -75
  865. package/dist/segment-system.d.ts.map +0 -1
  866. package/dist/segment-system.js +0 -336
  867. package/dist/segment-system.js.map +0 -1
  868. package/dist/server/context.d.ts +0 -245
  869. package/dist/server/context.d.ts.map +0 -1
  870. package/dist/server/context.js +0 -197
  871. package/dist/server/context.js.map +0 -1
  872. package/dist/server/fetchable-loader-store.d.ts +0 -18
  873. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  874. package/dist/server/fetchable-loader-store.js +0 -18
  875. package/dist/server/fetchable-loader-store.js.map +0 -1
  876. package/dist/server/handle-store.d.ts +0 -85
  877. package/dist/server/handle-store.d.ts.map +0 -1
  878. package/dist/server/handle-store.js +0 -142
  879. package/dist/server/handle-store.js.map +0 -1
  880. package/dist/server/loader-registry.d.ts +0 -55
  881. package/dist/server/loader-registry.d.ts.map +0 -1
  882. package/dist/server/loader-registry.js +0 -132
  883. package/dist/server/loader-registry.js.map +0 -1
  884. package/dist/server/request-context.d.ts +0 -226
  885. package/dist/server/request-context.d.ts.map +0 -1
  886. package/dist/server/request-context.js +0 -290
  887. package/dist/server/request-context.js.map +0 -1
  888. package/dist/server/root-layout.d.ts +0 -4
  889. package/dist/server/root-layout.d.ts.map +0 -1
  890. package/dist/server/root-layout.js +0 -5
  891. package/dist/server/root-layout.js.map +0 -1
  892. package/dist/server.d.ts +0 -15
  893. package/dist/server.d.ts.map +0 -1
  894. package/dist/server.js +0 -20
  895. package/dist/server.js.map +0 -1
  896. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  897. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  898. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  899. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  900. package/dist/ssr/index.d.ts +0 -98
  901. package/dist/ssr/index.d.ts.map +0 -1
  902. package/dist/ssr/index.js +0 -158
  903. package/dist/ssr/index.js.map +0 -1
  904. package/dist/static-handler.d.ts +0 -50
  905. package/dist/static-handler.d.ts.map +0 -1
  906. package/dist/static-handler.gen.d.ts +0 -5
  907. package/dist/static-handler.gen.d.ts.map +0 -1
  908. package/dist/static-handler.gen.js +0 -5
  909. package/dist/static-handler.gen.js.map +0 -1
  910. package/dist/static-handler.js +0 -29
  911. package/dist/static-handler.js.map +0 -1
  912. package/dist/theme/ThemeProvider.d.ts +0 -20
  913. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  914. package/dist/theme/ThemeProvider.js +0 -240
  915. package/dist/theme/ThemeProvider.js.map +0 -1
  916. package/dist/theme/ThemeScript.d.ts +0 -48
  917. package/dist/theme/ThemeScript.d.ts.map +0 -1
  918. package/dist/theme/ThemeScript.js +0 -13
  919. package/dist/theme/ThemeScript.js.map +0 -1
  920. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  921. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  922. package/dist/theme/__tests__/theme.test.js +0 -103
  923. package/dist/theme/__tests__/theme.test.js.map +0 -1
  924. package/dist/theme/constants.d.ts +0 -29
  925. package/dist/theme/constants.d.ts.map +0 -1
  926. package/dist/theme/constants.js +0 -48
  927. package/dist/theme/constants.js.map +0 -1
  928. package/dist/theme/index.d.ts +0 -31
  929. package/dist/theme/index.d.ts.map +0 -1
  930. package/dist/theme/index.js +0 -36
  931. package/dist/theme/index.js.map +0 -1
  932. package/dist/theme/theme-context.d.ts +0 -40
  933. package/dist/theme/theme-context.d.ts.map +0 -1
  934. package/dist/theme/theme-context.js +0 -60
  935. package/dist/theme/theme-context.js.map +0 -1
  936. package/dist/theme/theme-script.d.ts +0 -27
  937. package/dist/theme/theme-script.d.ts.map +0 -1
  938. package/dist/theme/theme-script.js +0 -147
  939. package/dist/theme/theme-script.js.map +0 -1
  940. package/dist/theme/types.d.ts +0 -163
  941. package/dist/theme/types.d.ts.map +0 -1
  942. package/dist/theme/types.js +0 -11
  943. package/dist/theme/types.js.map +0 -1
  944. package/dist/theme/use-theme.d.ts +0 -12
  945. package/dist/theme/use-theme.d.ts.map +0 -1
  946. package/dist/theme/use-theme.js +0 -40
  947. package/dist/theme/use-theme.js.map +0 -1
  948. package/dist/types.d.ts +0 -1479
  949. package/dist/types.d.ts.map +0 -1
  950. package/dist/types.js +0 -10
  951. package/dist/types.js.map +0 -1
  952. package/dist/urls.d.ts +0 -441
  953. package/dist/urls.d.ts.map +0 -1
  954. package/dist/urls.gen.d.ts +0 -8
  955. package/dist/urls.gen.d.ts.map +0 -1
  956. package/dist/urls.gen.js +0 -8
  957. package/dist/urls.gen.js.map +0 -1
  958. package/dist/urls.js +0 -443
  959. package/dist/urls.js.map +0 -1
  960. package/dist/use-loader.d.ts +0 -127
  961. package/dist/use-loader.d.ts.map +0 -1
  962. package/dist/use-loader.js +0 -237
  963. package/dist/use-loader.js.map +0 -1
  964. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  965. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  966. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  967. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  968. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  969. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  970. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  971. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  972. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  973. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  974. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  975. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  976. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  977. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  978. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  979. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  980. package/dist/vite/ast-handler-extract.d.ts +0 -49
  981. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  982. package/dist/vite/ast-handler-extract.js +0 -249
  983. package/dist/vite/ast-handler-extract.js.map +0 -1
  984. package/dist/vite/expose-action-id.d.ts +0 -19
  985. package/dist/vite/expose-action-id.d.ts.map +0 -1
  986. package/dist/vite/expose-action-id.js +0 -250
  987. package/dist/vite/expose-action-id.js.map +0 -1
  988. package/dist/vite/expose-id-utils.d.ts +0 -69
  989. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  990. package/dist/vite/expose-id-utils.js +0 -289
  991. package/dist/vite/expose-id-utils.js.map +0 -1
  992. package/dist/vite/expose-internal-ids.d.ts +0 -22
  993. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  994. package/dist/vite/expose-internal-ids.js +0 -886
  995. package/dist/vite/expose-internal-ids.js.map +0 -1
  996. package/dist/vite/index.d.ts +0 -149
  997. package/dist/vite/index.d.ts.map +0 -1
  998. package/dist/vite/index.js.bak +0 -5448
  999. package/dist/vite/index.js.map +0 -1
  1000. package/dist/vite/index.named-routes.gen.ts +0 -103
  1001. package/dist/vite/package-resolution.d.ts +0 -43
  1002. package/dist/vite/package-resolution.d.ts.map +0 -1
  1003. package/dist/vite/package-resolution.js +0 -112
  1004. package/dist/vite/package-resolution.js.map +0 -1
  1005. package/dist/vite/virtual-entries.d.ts +0 -25
  1006. package/dist/vite/virtual-entries.d.ts.map +0 -1
  1007. package/dist/vite/virtual-entries.js +0 -110
  1008. package/dist/vite/virtual-entries.js.map +0 -1
  1009. package/src/browser/shallow.ts +0 -40
@@ -1,1051 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { urls } from "../urls.js";
4
- import { createLoader } from "../loader.js";
5
- import { buildRouteTree } from "./helpers/route-tree.js";
6
- // Dummy components
7
- const RootLayout = (_jsx("div", { children: "root" }));
8
- const AuthLayout = (_jsx("div", { children: "auth" }));
9
- const BlogLayout = (_jsx("div", { children: "blog-layout" }));
10
- const ShopLayout = (_jsx("div", { children: "shop-layout" }));
11
- const HomePage = (_jsx("div", { children: "home" }));
12
- const AboutPage = (_jsx("div", { children: "about" }));
13
- const BlogIndex = (_jsx("div", { children: "blog-index" }));
14
- const BlogPost = (_jsx("div", { children: "blog-post" }));
15
- const UserProfile = (_jsx("div", { children: "user-profile" }));
16
- const Dashboard = (_jsx("div", { children: "dashboard" }));
17
- const ProductList = (_jsx("div", { children: "product-list" }));
18
- const ProductDetail = (_jsx("div", { children: "product-detail" }));
19
- const ProductModal = (_jsx("div", { children: "product-modal" }));
20
- const Sidebar = (_jsx("div", { children: "sidebar" }));
21
- const MainContent = (_jsx("div", { children: "main" }));
22
- const LoadingSpinner = (_jsx("div", { children: "loading..." }));
23
- const ErrorFallback = (_jsx("div", { children: "error" }));
24
- const NotFoundFallback = (_jsx("div", { children: "not found" }));
25
- // Dummy middleware
26
- const authMiddleware = async (_ctx, next) => next();
27
- const logMiddleware = async (_ctx, next) => next();
28
- const rateLimitMiddleware = async (_ctx, next) => next();
29
- // Dummy loaders
30
- const PostLoader = createLoader(async () => ({ title: "Post" }));
31
- const UserLoader = createLoader(async () => ({ name: "User" }));
32
- describe("route tree inspection", () => {
33
- // -------------------------------------------------------------------------
34
- // Pattern extraction & matching
35
- // -------------------------------------------------------------------------
36
- it("extracts route patterns", () => {
37
- const tree = buildRouteTree(urls(({ path }) => [
38
- path("/", HomePage, { name: "home" }),
39
- path("/about", AboutPage, { name: "about" }),
40
- ]));
41
- expect(tree.routes()).toEqual({
42
- home: "/",
43
- about: "/about",
44
- });
45
- });
46
- it("matches URLs and extracts params", () => {
47
- const tree = buildRouteTree(urls(({ path, layout }) => [
48
- path("/", HomePage, { name: "home" }),
49
- layout(BlogLayout, () => [
50
- path("/blog", BlogIndex, { name: "blog.index" }),
51
- path("/blog/:slug", BlogPost, { name: "blog.post" }),
52
- ]),
53
- path("/users/:id", UserProfile, { name: "users.profile" }),
54
- ]));
55
- expect(tree.match("/").routeKey).toBe("home");
56
- expect(tree.match("/blog").routeKey).toBe("blog.index");
57
- expect(tree.match("/blog/hello").routeKey).toBe("blog.post");
58
- expect(tree.match("/blog/hello").params).toEqual({ slug: "hello" });
59
- expect(tree.match("/users/42").params).toEqual({ id: "42" });
60
- expect(tree.match("/nonexistent")).toBeNull();
61
- });
62
- it("handles optional and constrained params", () => {
63
- const tree = buildRouteTree(urls(({ path }) => [
64
- path("/:locale(en|fr)?/about", AboutPage, { name: "about" }),
65
- ]));
66
- expect(tree.match("/about").routeKey).toBe("about");
67
- expect(tree.match("/fr/about").params).toEqual({ locale: "fr" });
68
- expect(tree.match("/de/about")).toBeNull();
69
- });
70
- it("handles include() with prefix and name prefix", () => {
71
- const blogPatterns = urls(({ path }) => [
72
- path("/", BlogIndex, { name: "index" }),
73
- path("/:slug", BlogPost, { name: "post" }),
74
- ]);
75
- const tree = buildRouteTree(urls(({ path, include }) => [
76
- path("/", HomePage, { name: "home" }),
77
- include("/blog", blogPatterns, { name: "blog" }),
78
- ]));
79
- expect(tree.routes()).toEqual({
80
- home: "/",
81
- "blog.index": "/blog",
82
- "blog.post": "/blog/:slug",
83
- });
84
- expect(tree.match("/blog").routeKey).toBe("blog.index");
85
- expect(tree.match("/blog/my-article").params).toEqual({
86
- slug: "my-article",
87
- });
88
- });
89
- // -------------------------------------------------------------------------
90
- // Segment IDs
91
- // -------------------------------------------------------------------------
92
- it("assigns segment IDs to flat routes", () => {
93
- const tree = buildRouteTree(urls(({ path }) => [
94
- path("/", HomePage, { name: "home" }),
95
- path("/about", AboutPage, { name: "about" }),
96
- ]));
97
- expect(tree.segmentId("home")).toBe("M0L0R0");
98
- expect(tree.segmentId("about")).toBe("M0L0R1");
99
- });
100
- it("assigns segment IDs to layouts and nested routes", () => {
101
- const tree = buildRouteTree(urls(({ path, layout }) => [
102
- layout(BlogLayout, () => [
103
- path("/blog", BlogIndex, { name: "blog.index" }),
104
- path("/blog/:slug", BlogPost, { name: "blog.post" }),
105
- ]),
106
- ]));
107
- expect(tree.segmentId("blog.index")).toBe("M0L0L0R0");
108
- expect(tree.segmentId("blog.post")).toBe("M0L0L0R1");
109
- const entry = tree.entry("blog.index");
110
- expect(entry.parent.type).toBe("layout");
111
- expect(entry.parent.shortCode).toBe("M0L0L0");
112
- });
113
- it("traces full segment path", () => {
114
- const tree = buildRouteTree(urls(({ path, layout }) => [
115
- layout(RootLayout, () => [
116
- path("/", HomePage, { name: "home" }),
117
- layout(BlogLayout, () => [
118
- path("/blog", BlogIndex, { name: "blog.index" }),
119
- path("/blog/:slug", BlogPost, { name: "blog.post" }),
120
- ]),
121
- ]),
122
- ]));
123
- const segPath = tree.segmentPath("blog.post");
124
- expect(segPath.map((s) => s.id)).toEqual([
125
- "M0L0", // synthetic root
126
- "M0L0L0", // root layout
127
- "M0L0L0L0", // blog layout
128
- "M0L0L0L0R1", // blog post (R1 because blog.index is R0)
129
- ]);
130
- expect(segPath.map((s) => s.type)).toEqual([
131
- "layout", "layout", "layout", "route",
132
- ]);
133
- });
134
- it("lists all segment IDs", () => {
135
- const tree = buildRouteTree(urls(({ path, layout }) => [
136
- layout(RootLayout, () => [
137
- path("/", HomePage, { name: "home" }),
138
- path("/about", AboutPage, { name: "about" }),
139
- ]),
140
- ]));
141
- expect(tree.segmentIds()).toEqual({
142
- home: "M0L0L0R0",
143
- about: "M0L0L0R1",
144
- });
145
- });
146
- // -------------------------------------------------------------------------
147
- // Middleware
148
- // -------------------------------------------------------------------------
149
- it("detects middleware on a layout", () => {
150
- const tree = buildRouteTree(urls(({ path, layout, middleware }) => [
151
- layout(RootLayout, () => [
152
- middleware(authMiddleware),
153
- path("/", HomePage, { name: "home" }),
154
- ]),
155
- ]));
156
- // Middleware is attached to the layout entry, not the route
157
- const homeEntry = tree.entry("home");
158
- const layoutEntry = homeEntry.parent;
159
- expect(layoutEntry.middleware).toHaveLength(1);
160
- expect(layoutEntry.middleware[0]).toBe(authMiddleware);
161
- });
162
- it("builds middleware chain through nested layouts", () => {
163
- const tree = buildRouteTree(urls(({ path, layout, middleware }) => [
164
- layout(RootLayout, () => [
165
- middleware(logMiddleware),
166
- layout(AuthLayout, () => [
167
- middleware(authMiddleware),
168
- path("/dashboard", Dashboard, { name: "dashboard" }),
169
- ]),
170
- ]),
171
- ]));
172
- const chain = tree.middlewareChain("dashboard");
173
- expect(chain).toEqual([
174
- { segmentId: "M0L0L0", count: 1 },
175
- { segmentId: "M0L0L0L0", count: 1 },
176
- ]);
177
- });
178
- it("handles multiple middleware on same layout", () => {
179
- const tree = buildRouteTree(urls(({ path, layout, middleware }) => [
180
- layout(RootLayout, () => [
181
- middleware(logMiddleware, authMiddleware, rateLimitMiddleware),
182
- path("/", HomePage, { name: "home" }),
183
- ]),
184
- ]));
185
- const homeEntry = tree.entry("home");
186
- expect(homeEntry.parent.middleware).toHaveLength(3);
187
- const chain = tree.middlewareChain("home");
188
- expect(chain).toEqual([
189
- { segmentId: "M0L0L0", count: 3 },
190
- ]);
191
- });
192
- // -------------------------------------------------------------------------
193
- // Loaders
194
- // -------------------------------------------------------------------------
195
- it("detects loaders on a route", () => {
196
- const tree = buildRouteTree(urls(({ path, loader }) => [
197
- path("/blog/:slug", BlogPost, { name: "blog.post" }, () => [
198
- loader(PostLoader),
199
- ]),
200
- ]));
201
- expect(tree.hasLoaders("blog.post")).toBe(true);
202
- expect(tree.loaders("blog.post")).toHaveLength(1);
203
- expect(tree.loaders("blog.post")[0].loader).toBe(PostLoader);
204
- });
205
- it("detects multiple loaders", () => {
206
- const tree = buildRouteTree(urls(({ path, loader }) => [
207
- path("/users/:id", UserProfile, { name: "users.profile" }, () => [
208
- loader(UserLoader),
209
- loader(PostLoader),
210
- ]),
211
- ]));
212
- expect(tree.loaders("users.profile")).toHaveLength(2);
213
- });
214
- it("route without loaders returns empty", () => {
215
- const tree = buildRouteTree(urls(({ path }) => [
216
- path("/", HomePage, { name: "home" }),
217
- ]));
218
- expect(tree.hasLoaders("home")).toBe(false);
219
- expect(tree.loaders("home")).toHaveLength(0);
220
- });
221
- // -------------------------------------------------------------------------
222
- // Intercepts
223
- // -------------------------------------------------------------------------
224
- it("detects intercept on a layout", () => {
225
- const tree = buildRouteTree(urls(({ path, layout, intercept }) => [
226
- layout(ShopLayout, () => [
227
- path("/products", ProductList, { name: "products" }),
228
- path("/products/:id", ProductDetail, { name: "product.detail" }),
229
- intercept("@modal", "product.detail", ProductModal),
230
- ]),
231
- ]));
232
- // Intercepts are stored on the layout entry (parent of products)
233
- const productsEntry = tree.entry("products");
234
- const layoutEntry = productsEntry.parent;
235
- expect(layoutEntry.intercept).toHaveLength(1);
236
- expect(layoutEntry.intercept[0].slotName).toBe("@modal");
237
- expect(layoutEntry.intercept[0].routeName).toBe("product.detail");
238
- });
239
- it("detects intercept with when() condition", () => {
240
- const whenFn = (ctx) => ctx.from.pathname.startsWith("/products");
241
- const tree = buildRouteTree(urls(({ path, layout, intercept, when }) => [
242
- layout(ShopLayout, () => [
243
- path("/products", ProductList, { name: "products" }),
244
- path("/products/:id", ProductDetail, { name: "product.detail" }),
245
- intercept("@modal", "product.detail", ProductModal, () => [
246
- when(whenFn),
247
- ]),
248
- ]),
249
- ]));
250
- const productsEntry = tree.entry("products");
251
- const layoutEntry = productsEntry.parent;
252
- const interceptEntry = layoutEntry.intercept[0];
253
- expect(interceptEntry.when).toHaveLength(1);
254
- expect(interceptEntry.when[0]).toBe(whenFn);
255
- });
256
- it("intercepts() returns structured info", () => {
257
- const tree = buildRouteTree(urls(({ path, layout, intercept, when, loader }) => [
258
- layout(ShopLayout, () => [
259
- path("/products", ProductList, { name: "products" }),
260
- path("/products/:id", ProductDetail, { name: "product.detail" }),
261
- intercept("@modal", "product.detail", ProductModal, () => [
262
- when(() => true),
263
- loader(PostLoader),
264
- ]),
265
- ]),
266
- ]));
267
- const productsEntry = tree.entry("products");
268
- const layoutEntry = productsEntry.parent;
269
- // Intercepts live on the parent layout entry
270
- expect(layoutEntry.intercept).toHaveLength(1);
271
- expect(layoutEntry.intercept[0].slotName).toBe("@modal");
272
- expect(layoutEntry.intercept[0].when).toHaveLength(1);
273
- expect(layoutEntry.intercept[0].loader).toHaveLength(1);
274
- // Also test via helper methods using the layout's manifest key
275
- const intercepts = tree.intercepts("products");
276
- // intercepts() looks up the named route, not the layout
277
- // The layout holding intercepts is accessed via entry().parent
278
- const layoutIntercepts = layoutEntry.intercept.map((i) => ({
279
- slotName: i.slotName,
280
- routeName: i.routeName,
281
- hasWhen: i.when.length > 0,
282
- whenCount: i.when.length,
283
- hasLoader: i.loader.length > 0,
284
- hasMiddleware: i.middleware.length > 0,
285
- }));
286
- expect(layoutIntercepts).toHaveLength(1);
287
- expect(layoutIntercepts[0].slotName).toBe("@modal");
288
- expect(layoutIntercepts[0].hasWhen).toBe(true);
289
- expect(layoutIntercepts[0].hasLoader).toBe(true);
290
- });
291
- // -------------------------------------------------------------------------
292
- // Parallel slots
293
- // -------------------------------------------------------------------------
294
- it("detects parallel slots", () => {
295
- const tree = buildRouteTree(urls(({ path, layout, parallel }) => [
296
- layout(RootLayout, () => [
297
- path("/", HomePage, { name: "home" }),
298
- parallel({ "@sidebar": Sidebar, "@main": MainContent }),
299
- ]),
300
- ]));
301
- const homeEntry = tree.entry("home");
302
- const layoutEntry = homeEntry.parent;
303
- expect(layoutEntry.parallel).toHaveLength(1);
304
- expect(layoutEntry.parallel[0].type).toBe("parallel");
305
- // Parallel slot names are on the layout entry's parallel array
306
- const parallelHandler = layoutEntry.parallel[0].handler;
307
- const slotNames = Object.keys(parallelHandler);
308
- expect(slotNames).toContain("@sidebar");
309
- expect(slotNames).toContain("@main");
310
- });
311
- // -------------------------------------------------------------------------
312
- // Error & NotFound boundaries
313
- // -------------------------------------------------------------------------
314
- it("detects error boundary on a route", () => {
315
- const tree = buildRouteTree(urls(({ path, errorBoundary }) => [
316
- path("/", HomePage, { name: "home" }, () => [
317
- errorBoundary(ErrorFallback),
318
- ]),
319
- ]));
320
- expect(tree.hasErrorBoundary("home")).toBe(true);
321
- });
322
- it("detects not-found boundary on a layout", () => {
323
- const tree = buildRouteTree(urls(({ path, layout, notFoundBoundary }) => [
324
- layout(RootLayout, () => [
325
- notFoundBoundary(NotFoundFallback),
326
- path("/", HomePage, { name: "home" }),
327
- ]),
328
- ]));
329
- const homeEntry = tree.entry("home");
330
- const layoutEntry = homeEntry.parent;
331
- expect(layoutEntry.notFoundBoundary).toHaveLength(1);
332
- });
333
- // -------------------------------------------------------------------------
334
- // Loading
335
- // -------------------------------------------------------------------------
336
- it("detects loading component on a route", () => {
337
- const tree = buildRouteTree(urls(({ path, loading }) => [
338
- path("/", HomePage, { name: "home" }, () => [
339
- loading(LoadingSpinner),
340
- ]),
341
- ]));
342
- expect(tree.hasLoading("home")).toBe(true);
343
- });
344
- it("route without loading returns false", () => {
345
- const tree = buildRouteTree(urls(({ path }) => [
346
- path("/", HomePage, { name: "home" }),
347
- ]));
348
- expect(tree.hasLoading("home")).toBe(false);
349
- });
350
- // -------------------------------------------------------------------------
351
- // Deeply nested layouts — segment hierarchy
352
- // -------------------------------------------------------------------------
353
- it("deeply nested layouts produce correct segment hierarchy", () => {
354
- const NavLayout = (_jsx("div", { children: "nav" }));
355
- const ContentLayout = (_jsx("div", { children: "content" }));
356
- const SettingsLayout = (_jsx("div", { children: "settings" }));
357
- const SettingsGeneral = (_jsx("div", { children: "settings-general" }));
358
- const SettingsSecurity = (_jsx("div", { children: "settings-security" }));
359
- const tree = buildRouteTree(urls(({ path, layout, middleware }) => [
360
- layout(RootLayout, () => [
361
- middleware(logMiddleware),
362
- layout(NavLayout, () => [
363
- layout(ContentLayout, () => [
364
- path("/", HomePage, { name: "home" }),
365
- layout(SettingsLayout, () => [
366
- middleware(authMiddleware),
367
- path("/settings", SettingsGeneral, { name: "settings.general" }),
368
- path("/settings/security", SettingsSecurity, { name: "settings.security" }),
369
- ]),
370
- ]),
371
- ]),
372
- ]),
373
- ]));
374
- // 4 layouts deep: synthetic root > RootLayout > NavLayout > ContentLayout > SettingsLayout
375
- const segPath = tree.segmentPath("settings.general");
376
- expect(segPath.map((s) => s.type)).toEqual([
377
- "layout", "layout", "layout", "layout", "layout", "route",
378
- ]);
379
- expect(segPath.map((s) => s.id)).toEqual([
380
- "M0L0", // synthetic root
381
- "M0L0L0", // RootLayout
382
- "M0L0L0L0", // NavLayout
383
- "M0L0L0L0L0", // ContentLayout
384
- "M0L0L0L0L0L0", // SettingsLayout
385
- "M0L0L0L0L0L0R0", // settings.general
386
- ]);
387
- // Security is R1 under SettingsLayout
388
- expect(tree.segmentId("settings.security")).toBe("M0L0L0L0L0L0R1");
389
- // Home is under ContentLayout directly (not SettingsLayout)
390
- const homePath = tree.segmentPath("home");
391
- expect(homePath).toHaveLength(5); // synthetic + Root + Nav + Content + route
392
- expect(homePath[3].id).toBe("M0L0L0L0L0"); // ContentLayout
393
- expect(homePath[4].id).toBe("M0L0L0L0L0R0"); // home (R0 before SettingsLayout takes L0)
394
- // Middleware chain: settings gets both logMw (root) and authMw (settings layout)
395
- const settingsChain = tree.middlewareChain("settings.general");
396
- expect(settingsChain).toEqual([
397
- { segmentId: "M0L0L0", count: 1 }, // logMw on RootLayout
398
- { segmentId: "M0L0L0L0L0L0", count: 1 }, // authMw on SettingsLayout
399
- ]);
400
- // Home only gets logMw
401
- expect(tree.middlewareChain("home")).toEqual([
402
- { segmentId: "M0L0L0", count: 1 },
403
- ]);
404
- });
405
- // -------------------------------------------------------------------------
406
- // Cache segments
407
- // -------------------------------------------------------------------------
408
- it("cache() wrapping children creates a C segment in the hierarchy", () => {
409
- const CachedPage = (_jsx("div", { children: "cached" }));
410
- const UncachedPage = (_jsx("div", { children: "uncached" }));
411
- const tree = buildRouteTree(urls(({ path, layout, cache }) => [
412
- layout(RootLayout, () => [
413
- path("/uncached", UncachedPage, { name: "uncached" }),
414
- cache({ ttl: 60 }, () => [
415
- path("/cached", CachedPage, { name: "cached" }),
416
- ]),
417
- ]),
418
- ]));
419
- // Both routes exist
420
- expect(tree.routes()).toEqual({
421
- uncached: "/uncached",
422
- cached: "/cached",
423
- });
424
- // Uncached route sits directly under RootLayout
425
- const uncachedPath = tree.segmentPath("uncached");
426
- expect(uncachedPath.map((s) => s.type)).toEqual(["layout", "layout", "route"]);
427
- // Cached route goes through a cache segment
428
- const cachedEntry = tree.entry("cached");
429
- expect(cachedEntry.parent.type).toBe("cache");
430
- expect(cachedEntry.parent.cache).toBeDefined();
431
- expect(cachedEntry.parent.cache.options).toEqual({ ttl: 60 });
432
- const cachedPath = tree.segmentPath("cached");
433
- expect(cachedPath.map((s) => s.type)).toEqual([
434
- "layout", "layout", "cache", "route",
435
- ]);
436
- // C segment gets a C prefix in the shortCode
437
- expect(cachedEntry.parent.shortCode).toMatch(/^M0L0L0C/);
438
- });
439
- it("nested cache segments with different TTLs", () => {
440
- const ListPage = (_jsx("div", { children: "list" }));
441
- const DetailPage = (_jsx("div", { children: "detail" }));
442
- const AdminPage = (_jsx("div", { children: "admin" }));
443
- const tree = buildRouteTree(urls(({ path, layout, cache }) => [
444
- layout(RootLayout, () => [
445
- cache({ ttl: 60 }, () => [
446
- path("/products", ListPage, { name: "products" }),
447
- cache({ ttl: 3600 }, () => [
448
- path("/products/:id", DetailPage, { name: "product.detail" }),
449
- ]),
450
- ]),
451
- cache(false, () => [
452
- path("/admin", AdminPage, { name: "admin" }),
453
- ]),
454
- ]),
455
- ]));
456
- // Products has outer cache (ttl: 60)
457
- const productsEntry = tree.entry("products");
458
- expect(productsEntry.parent.type).toBe("cache");
459
- expect(productsEntry.parent.cache.options).toEqual({ ttl: 60 });
460
- // Product detail has inner cache (ttl: 3600), parent is the outer cache
461
- const detailEntry = tree.entry("product.detail");
462
- expect(detailEntry.parent.type).toBe("cache");
463
- expect(detailEntry.parent.cache.options).toEqual({ ttl: 3600 });
464
- expect(detailEntry.parent.parent.type).toBe("cache");
465
- expect(detailEntry.parent.parent.cache.options).toEqual({ ttl: 60 });
466
- // Segment path has two cache levels
467
- const detailPath = tree.segmentPath("product.detail");
468
- const types = detailPath.map((s) => s.type);
469
- expect(types).toEqual(["layout", "layout", "cache", "cache", "route"]);
470
- // Admin has cache disabled (false)
471
- const adminEntry = tree.entry("admin");
472
- expect(adminEntry.parent.type).toBe("cache");
473
- expect(adminEntry.parent.cache.options).toBe(false);
474
- });
475
- // -------------------------------------------------------------------------
476
- // Parallel slots with loaders and loading
477
- // -------------------------------------------------------------------------
478
- it("parallel slots with loaders and loading", () => {
479
- const FeedContent = (_jsx("div", { children: "feed" }));
480
- const TrendingSidebar = (_jsx("div", { children: "trending" }));
481
- const FeedLoader = createLoader(async () => ({ items: [] }));
482
- const tree = buildRouteTree(urls(({ path, layout, parallel, loader, loading }) => [
483
- layout(RootLayout, () => [
484
- path("/feed", HomePage, { name: "feed" }),
485
- parallel({ "@sidebar": TrendingSidebar, "@content": FeedContent }, () => [
486
- loader(FeedLoader),
487
- loading(LoadingSpinner),
488
- ]),
489
- ]),
490
- ]));
491
- const feedEntry = tree.entry("feed");
492
- const layoutEntry = feedEntry.parent;
493
- // Parallel slot is on the layout
494
- expect(layoutEntry.parallel).toHaveLength(1);
495
- const parallelEntry = layoutEntry.parallel[0];
496
- expect(parallelEntry.type).toBe("parallel");
497
- // Parallel has its own loader and loading
498
- expect(parallelEntry.loader).toHaveLength(1);
499
- expect(parallelEntry.loader[0].loader).toBe(FeedLoader);
500
- expect(parallelEntry.loading).toBe(LoadingSpinner);
501
- // Slot names
502
- const handler = parallelEntry.handler;
503
- expect(Object.keys(handler)).toEqual(expect.arrayContaining(["@sidebar", "@content"]));
504
- // Parallel gets a P prefix shortCode
505
- expect(parallelEntry.shortCode).toMatch(/^M0L0L0P/);
506
- });
507
- // -------------------------------------------------------------------------
508
- // Include inside layout — segments inherit correctly
509
- // -------------------------------------------------------------------------
510
- it("include() inside a layout inherits the layout parent", () => {
511
- const apiPatterns = urls(({ path, loader }) => [
512
- path("/", (_jsx("div", { children: "api-index" })), { name: "index" }),
513
- path("/:id", (_jsx("div", { children: "api-detail" })), { name: "detail" }, () => [
514
- loader(PostLoader),
515
- ]),
516
- ]);
517
- const tree = buildRouteTree(urls(({ path, layout, include, middleware }) => [
518
- layout(RootLayout, () => [
519
- middleware(authMiddleware),
520
- path("/", HomePage, { name: "home" }),
521
- layout(AuthLayout, () => [
522
- include("/api/v1", apiPatterns, { name: "api" }),
523
- ]),
524
- ]),
525
- ]));
526
- // Included routes get prefixed names and patterns
527
- expect(tree.routes()).toEqual({
528
- home: "/",
529
- "api.index": "/api/v1",
530
- "api.detail": "/api/v1/:id",
531
- });
532
- // Matching works with full prefixed paths
533
- expect(tree.match("/api/v1").routeKey).toBe("api.index");
534
- expect(tree.match("/api/v1/42").params).toEqual({ id: "42" });
535
- // Lazy includes capture the parent at include() call time (AuthLayout).
536
- // The segment path for included routes starts from that captured parent.
537
- const detailEntry = tree.entry("api.detail");
538
- expect(detailEntry.parent.type).toBe("layout"); // AuthLayout
539
- expect(detailEntry.parent.shortCode).toBe("M0L0L0L0");
540
- // API detail has a loader
541
- expect(tree.hasLoaders("api.detail")).toBe(true);
542
- expect(tree.hasLoaders("api.index")).toBe(false);
543
- // Middleware: authMw is on RootLayout (M0L0L0), which is an ancestor
544
- // of AuthLayout. Since lazy includes capture AuthLayout as parent,
545
- // the middleware chain traverses from AuthLayout upward.
546
- const chain = tree.middlewareChain("api.detail");
547
- // authMw on RootLayout must be reachable through the parent chain
548
- expect(chain).toEqual([
549
- { segmentId: "M0L0L0", count: 1 },
550
- ]);
551
- // AuthLayout's parent must NOT be null — it must point to RootLayout
552
- // so the middleware chain is intact
553
- const authLayout = detailEntry.parent;
554
- expect(authLayout.parent).not.toBeNull();
555
- expect(authLayout.parent.shortCode).toBe("M0L0L0");
556
- });
557
- it("layout with middleware and only include children preserves middleware chain", () => {
558
- const blogPatterns = urls(({ path }) => [
559
- path("/", BlogIndex, { name: "index" }),
560
- path("/:slug", BlogPost, { name: "post" }),
561
- ]);
562
- const tree = buildRouteTree(urls(({ path, layout, include, middleware }) => [
563
- layout(RootLayout, () => [
564
- middleware(logMiddleware),
565
- path("/", HomePage, { name: "home" }),
566
- layout(AuthLayout, () => [
567
- middleware(authMiddleware),
568
- include("/blog", blogPatterns, { name: "blog" }),
569
- ]),
570
- ]),
571
- ]));
572
- // Routes include both direct and included routes
573
- expect(tree.routeNames()).toEqual(expect.arrayContaining(["home", "blog.index", "blog.post"]));
574
- // AuthLayout must NOT be orphaned — it has include children with routes
575
- const postEntry = tree.entry("blog.post");
576
- expect(postEntry.parent.type).toBe("layout"); // AuthLayout
577
- expect(postEntry.parent.parent).not.toBeNull(); // parent chain intact
578
- expect(postEntry.parent.middleware).toHaveLength(1);
579
- expect(postEntry.parent.middleware[0]).toBe(authMiddleware);
580
- // Full middleware chain: logMw (RootLayout) + authMw (AuthLayout)
581
- const chain = tree.middlewareChain("blog.post");
582
- expect(chain).toEqual([
583
- { segmentId: "M0L0L0", count: 1 }, // logMw on RootLayout
584
- { segmentId: "M0L0L0L0", count: 1 }, // authMw on AuthLayout
585
- ]);
586
- // Home route only gets logMw (not under AuthLayout)
587
- const homeChain = tree.middlewareChain("home");
588
- expect(homeChain).toEqual([
589
- { segmentId: "M0L0L0", count: 1 },
590
- ]);
591
- });
592
- // -------------------------------------------------------------------------
593
- // Orphan layouts — layouts without routes that wrap siblings
594
- // -------------------------------------------------------------------------
595
- it("orphan layout attaches to parent's layout array", () => {
596
- const WrapperLayout = (_jsx("div", { children: "wrapper" }));
597
- const tree = buildRouteTree(urls(({ path, layout, middleware }) => [
598
- layout(RootLayout, () => [
599
- layout(WrapperLayout, () => [
600
- middleware(authMiddleware),
601
- ]),
602
- path("/", HomePage, { name: "home" }),
603
- path("/about", AboutPage, { name: "about" }),
604
- ]),
605
- ]));
606
- // Routes still register correctly
607
- expect(tree.routes()).toEqual({ home: "/", about: "/about" });
608
- // The orphan layout (WrapperLayout) is stored in RootLayout's layout array
609
- const homeEntry = tree.entry("home");
610
- const rootLayout = homeEntry.parent;
611
- expect(rootLayout.type).toBe("layout");
612
- expect(rootLayout.layout).toHaveLength(1);
613
- const orphan = rootLayout.layout[0];
614
- expect(orphan.type).toBe("layout");
615
- // Orphan layouts have their parent cleared to prevent duplicate processing
616
- expect(orphan.parent).toBeNull();
617
- // But they carry their middleware
618
- expect(orphan.middleware).toHaveLength(1);
619
- expect(orphan.middleware[0]).toBe(authMiddleware);
620
- });
621
- it("orphan layout with loading attaches loading to the layout entry", () => {
622
- const WrapperLayout = (_jsx("div", { children: "wrapper" }));
623
- const tree = buildRouteTree(urls(({ path, layout, loading }) => [
624
- layout(RootLayout, () => [
625
- layout(WrapperLayout, () => [
626
- loading(LoadingSpinner),
627
- ]),
628
- path("/", HomePage, { name: "home" }),
629
- ]),
630
- ]));
631
- const homeEntry = tree.entry("home");
632
- const rootLayout = homeEntry.parent;
633
- const orphan = rootLayout.layout[0];
634
- expect(orphan.loading).toBe(LoadingSpinner);
635
- });
636
- it("orphan layout containing another orphan layout throws", () => {
637
- const Wrapper1 = (_jsx("div", { children: "w1" }));
638
- const Wrapper2 = (_jsx("div", { children: "w2" }));
639
- expect(() => buildRouteTree(urls(({ path, layout, middleware, loading }) => [
640
- layout(RootLayout, () => [
641
- layout(Wrapper1, () => [
642
- middleware(logMiddleware),
643
- layout(Wrapper2, () => [
644
- middleware(authMiddleware),
645
- loading(LoadingSpinner),
646
- ]),
647
- ]),
648
- path("/", HomePage, { name: "home" }),
649
- ]),
650
- ]))).toThrow("orphan layout cannot contain other layouts as children");
651
- });
652
- it("sibling orphan layouts stack as composable wrappers", () => {
653
- const Wrapper1 = (_jsx("div", { children: "w1" }));
654
- const Wrapper2 = (_jsx("div", { children: "w2" }));
655
- const tree = buildRouteTree(urls(({ path, layout, middleware, loading }) => [
656
- layout(RootLayout, () => [
657
- layout(Wrapper1, () => [
658
- middleware(logMiddleware),
659
- ]),
660
- layout(Wrapper2, () => [
661
- middleware(authMiddleware),
662
- loading(LoadingSpinner),
663
- ]),
664
- path("/", HomePage, { name: "home" }),
665
- ]),
666
- ]));
667
- expect(tree.routes()).toEqual({ home: "/" });
668
- const homeEntry = tree.entry("home");
669
- const rootLayout = homeEntry.parent;
670
- // Both wrappers are sibling orphan layouts on RootLayout
671
- expect(rootLayout.layout).toHaveLength(2);
672
- const wrapper1 = rootLayout.layout[0];
673
- const wrapper2 = rootLayout.layout[1];
674
- expect(wrapper1.type).toBe("layout");
675
- expect(wrapper2.type).toBe("layout");
676
- expect(wrapper1.parent).toBeNull();
677
- expect(wrapper2.parent).toBeNull();
678
- expect(wrapper1.middleware).toHaveLength(1);
679
- expect(wrapper1.middleware[0]).toBe(logMiddleware);
680
- expect(wrapper1.shortCode).toBe("M0L0L0L0");
681
- expect(wrapper2.middleware).toHaveLength(1);
682
- expect(wrapper2.middleware[0]).toBe(authMiddleware);
683
- expect(wrapper2.loading).toBe(LoadingSpinner);
684
- expect(wrapper2.shortCode).toBe("M0L0L0L1");
685
- expect(homeEntry.shortCode).toBe("M0L0L0R0");
686
- });
687
- it("orphan cache attaches to parent and wraps subsequent siblings", () => {
688
- const tree = buildRouteTree(urls(({ path, layout, cache }) => [
689
- layout(RootLayout, () => [
690
- cache({ ttl: 300 }),
691
- path("/", HomePage, { name: "home" }),
692
- path("/about", AboutPage, { name: "about" }),
693
- ]),
694
- ]));
695
- // Routes register correctly
696
- expect(tree.routes()).toEqual({ home: "/", about: "/about" });
697
- // With orphan cache(), the cache becomes the new parent for siblings
698
- // so routes attach under the cache segment
699
- const homeEntry = tree.entry("home");
700
- expect(homeEntry.parent.type).toBe("cache");
701
- expect(homeEntry.parent.cache.options).toEqual({ ttl: 300 });
702
- // Cache is a child of RootLayout
703
- const cacheParent = homeEntry.parent.parent;
704
- // Orphan cache has parent cleared (like orphan layout)
705
- // but the segment path still shows the hierarchy
706
- const homePath = tree.segmentPath("home");
707
- expect(homePath.map((s) => s.type)).toContain("cache");
708
- });
709
- // -------------------------------------------------------------------------
710
- // Invalid configurations — must error at definition time
711
- // -------------------------------------------------------------------------
712
- it("layout inside parallel throws", () => {
713
- expect(() => {
714
- buildRouteTree(urls(({ path, layout, parallel }) => [
715
- layout(RootLayout, () => [
716
- path("/", HomePage, { name: "home" }),
717
- // @ts-expect-error layout is not a valid parallel use item
718
- parallel({ "@sidebar": Sidebar }, () => [
719
- layout(AuthLayout, () => [
720
- // layout inside parallel is not allowed
721
- ]),
722
- ]),
723
- ]),
724
- ]));
725
- }).toThrow(/layout\(\) cannot be used inside parallel/);
726
- });
727
- it("orphan layout inside parallel throws", () => {
728
- expect(() => {
729
- buildRouteTree(urls(({ path, layout, parallel }) => [
730
- layout(RootLayout, () => [
731
- path("/", HomePage, { name: "home" }),
732
- // @ts-expect-error layout is not a valid parallel use item
733
- parallel({ "@sidebar": Sidebar }, () => [
734
- layout(AuthLayout),
735
- ]),
736
- ]),
737
- ]));
738
- }).toThrow(/layout\(\) cannot be used inside parallel/);
739
- });
740
- it("when() outside intercept throws", () => {
741
- expect(() => {
742
- buildRouteTree(urls(({ path, layout, when }) => [
743
- layout(RootLayout, () => [
744
- path("/", HomePage, { name: "home" }),
745
- // @ts-expect-error when is not a valid layout use item
746
- when(() => true),
747
- ]),
748
- ]));
749
- }).toThrow(/when\(\) can only be used inside intercept/);
750
- });
751
- it("duplicate route names throw", () => {
752
- expect(() => {
753
- buildRouteTree(urls(({ path }) => [
754
- path("/", HomePage, { name: "home" }),
755
- path("/other", AboutPage, { name: "home" }),
756
- ]));
757
- }).toThrow(/Duplicate route name: home/);
758
- });
759
- it("parallel inside parallel throws", () => {
760
- expect(() => {
761
- buildRouteTree(urls(({ path, layout, parallel }) => [
762
- layout(RootLayout, () => [
763
- path("/", HomePage, { name: "home" }),
764
- // @ts-expect-error parallel is not a valid parallel use item
765
- parallel({ "@sidebar": Sidebar }, () => [
766
- parallel({ "@inner": MainContent }),
767
- ]),
768
- ]),
769
- ]));
770
- }).toThrow(/parallel\(\) cannot be nested inside another parallel/);
771
- });
772
- it("intercept inside parallel throws", () => {
773
- expect(() => {
774
- buildRouteTree(urls(({ path, layout, parallel, intercept }) => [
775
- layout(RootLayout, () => [
776
- path("/", HomePage, { name: "home" }),
777
- path("/detail", AboutPage, { name: "detail" }),
778
- // @ts-expect-error intercept is not a valid parallel use item
779
- parallel({ "@sidebar": Sidebar }, () => [
780
- intercept("@modal", "detail", ProductModal),
781
- ]),
782
- ]),
783
- ]));
784
- }).toThrow(/intercept\(\) cannot be used inside parallel/);
785
- });
786
- it("path inside parallel throws", () => {
787
- expect(() => {
788
- buildRouteTree(urls(({ path, layout, parallel }) => [
789
- layout(RootLayout, () => [
790
- // @ts-expect-error path is not a valid parallel use item
791
- parallel({ "@sidebar": Sidebar }, () => [
792
- path("/nested", HomePage, { name: "nested" }),
793
- ]),
794
- ]),
795
- ]));
796
- }).toThrow(/path\(\) cannot be used inside parallel/);
797
- });
798
- it("path inside path throws", () => {
799
- expect(() => {
800
- buildRouteTree(urls(({ path, layout }) => [
801
- layout(RootLayout, () => [
802
- // @ts-expect-error path is not a valid route use item
803
- path("/parent", HomePage, { name: "parent" }, () => [
804
- path("/child", AboutPage, { name: "child" }),
805
- ]),
806
- ]),
807
- ]));
808
- }).toThrow(/path\(\) cannot be nested inside another path/);
809
- });
810
- it("path inside layout inside path throws", () => {
811
- expect(() => {
812
- buildRouteTree(urls(({ path, layout }) => [
813
- layout(RootLayout, () => [
814
- path("/parent", HomePage, { name: "parent" }, () => [
815
- layout(AuthLayout, () => [
816
- path("/child", AboutPage, { name: "child" }),
817
- ]),
818
- ]),
819
- ]),
820
- ]));
821
- }).toThrow(/path\(\) cannot be nested inside another path/);
822
- });
823
- it("path inside cache inside layout inside path throws", () => {
824
- expect(() => {
825
- buildRouteTree(urls(({ path, layout, cache }) => [
826
- layout(RootLayout, () => [
827
- path("/parent", HomePage, { name: "parent" }, () => [
828
- layout(AuthLayout, () => [
829
- cache({ ttl: 60 }, () => [
830
- path("/child", AboutPage, { name: "child" }),
831
- ]),
832
- ]),
833
- ]),
834
- ]),
835
- ]));
836
- }).toThrow(/path\(\) cannot be nested inside another path/);
837
- });
838
- // -------------------------------------------------------------------------
839
- // Combined: complex app with cache, parallel, nested layouts, include
840
- // -------------------------------------------------------------------------
841
- it("inspects a full app route tree", () => {
842
- const blogPatterns = urls(({ path, loader }) => [
843
- path("/", BlogIndex, { name: "index" }),
844
- path("/:slug", BlogPost, { name: "post" }, () => [
845
- loader(PostLoader),
846
- ]),
847
- ]);
848
- const tree = buildRouteTree(urls(({ path, layout, include, middleware, errorBoundary, loading }) => [
849
- layout(RootLayout, () => [
850
- middleware(logMiddleware),
851
- errorBoundary(ErrorFallback),
852
- path("/", HomePage, { name: "home" }),
853
- layout(AuthLayout, () => [
854
- middleware(authMiddleware),
855
- path("/dashboard", Dashboard, { name: "dashboard" }, () => [
856
- loading(LoadingSpinner),
857
- ]),
858
- ]),
859
- include("/blog", blogPatterns, { name: "blog" }),
860
- ]),
861
- ]));
862
- // Route patterns
863
- expect(tree.routeNames()).toContain("home");
864
- expect(tree.routeNames()).toContain("dashboard");
865
- expect(tree.routeNames()).toContain("blog.index");
866
- expect(tree.routeNames()).toContain("blog.post");
867
- // Matching
868
- expect(tree.match("/").routeKey).toBe("home");
869
- expect(tree.match("/dashboard").routeKey).toBe("dashboard");
870
- expect(tree.match("/blog").routeKey).toBe("blog.index");
871
- expect(tree.match("/blog/hello").params).toEqual({ slug: "hello" });
872
- // Middleware chain: dashboard goes through root + auth layouts
873
- const dashChain = tree.middlewareChain("dashboard");
874
- expect(dashChain).toHaveLength(2);
875
- // Home only goes through root layout
876
- const homeChain = tree.middlewareChain("home");
877
- expect(homeChain).toHaveLength(1);
878
- // Blog post has a loader
879
- expect(tree.hasLoaders("blog.post")).toBe(true);
880
- expect(tree.hasLoaders("blog.index")).toBe(false);
881
- // Dashboard has loading
882
- expect(tree.hasLoading("dashboard")).toBe(true);
883
- // Root layout has error boundary
884
- const homeEntry = tree.entry("home");
885
- expect(homeEntry.parent.errorBoundary).toHaveLength(1);
886
- // Debug output
887
- const debug = tree.debug();
888
- expect(debug).toContain("home:");
889
- expect(debug).toContain("dashboard:");
890
- });
891
- it("path with nested layouts carrying loading, loaders, and parallel", () => {
892
- const InnerLayout = (_jsx("div", { children: "inner" }));
893
- const DeepLayout = (_jsx("div", { children: "deep" }));
894
- const ComplexPage = (_jsx("div", { children: "complex" }));
895
- const PanelA = (_jsx("div", { children: "panel-a" }));
896
- const PanelB = (_jsx("div", { children: "panel-b" }));
897
- const InnerLoading = (_jsx("div", { children: "inner-loading" }));
898
- const ComplexLoader = createLoader(async () => ({ data: "complex" }));
899
- const DeepLoader = createLoader(async () => ({ nested: true }));
900
- const tree = buildRouteTree(urls(({ path, layout, loader, loading, parallel, middleware }) => [
901
- layout(RootLayout, () => [
902
- middleware(logMiddleware),
903
- path("/complex-extra", ComplexPage, { name: "complex.very" }, () => [
904
- loader(ComplexLoader),
905
- loading(LoadingSpinner),
906
- layout(InnerLayout, () => [
907
- loading(InnerLoading),
908
- loader(DeepLoader),
909
- parallel({ "@panelA": PanelA, "@panelB": PanelB }),
910
- ]),
911
- layout(DeepLayout, () => [
912
- middleware(authMiddleware),
913
- ]),
914
- ]),
915
- ]),
916
- ]));
917
- // Route registers correctly
918
- expect(tree.routes()).toEqual({ "complex.very": "/complex-extra" });
919
- expect(tree.match("/complex-extra").routeKey).toBe("complex.very");
920
- // Route entry itself
921
- const entry = tree.entry("complex.very");
922
- expect(entry.type).toBe("route");
923
- expect(entry.parent.type).toBe("layout"); // RootLayout
924
- // Route has its own loader and loading
925
- expect(entry.loader).toHaveLength(1);
926
- expect(entry.loader[0].loader).toBe(ComplexLoader);
927
- expect(entry.loading).toBe(LoadingSpinner);
928
- // Both orphan layouts are siblings on the route's layout array
929
- expect(entry.layout).toHaveLength(2);
930
- const innerLayout = entry.layout[0];
931
- const deepLayout = entry.layout[1];
932
- expect(innerLayout.type).toBe("layout");
933
- expect(deepLayout.type).toBe("layout");
934
- // InnerLayout carries its own loading and loader
935
- expect(innerLayout.loading).toBe(InnerLoading);
936
- expect(innerLayout.loader).toHaveLength(1);
937
- expect(innerLayout.loader[0].loader).toBe(DeepLoader);
938
- // InnerLayout has parallel slots
939
- expect(innerLayout.parallel).toHaveLength(1);
940
- const parallelEntry = innerLayout.parallel[0];
941
- expect(parallelEntry.type).toBe("parallel");
942
- const slots = parallelEntry.handler;
943
- expect(Object.keys(slots)).toEqual(expect.arrayContaining(["@panelA", "@panelB"]));
944
- // DeepLayout carries middleware (no nested orphan layouts)
945
- expect(innerLayout.layout).toHaveLength(0);
946
- expect(deepLayout.middleware).toHaveLength(1);
947
- expect(deepLayout.middleware[0]).toBe(authMiddleware);
948
- // Segment IDs: route is under RootLayout
949
- expect(tree.segmentId("complex.very")).toBe("M0L0L0R0");
950
- // Both layouts get L shortCodes directly under the route
951
- expect(innerLayout.shortCode).toBe("M0L0L0R0L0");
952
- expect(deepLayout.shortCode).toBe("M0L0L0R0L1");
953
- expect(parallelEntry.shortCode).toBe("M0L0L0R0L0P0");
954
- // Middleware chain for the route: only logMw from RootLayout
955
- // (authMw is on DeepLayout which wraps inside the route, not in parent chain)
956
- const chain = tree.middlewareChain("complex.very");
957
- expect(chain).toEqual([
958
- { segmentId: "M0L0L0", count: 1 },
959
- ]);
960
- });
961
- it("complex app: cache + parallel + nested layouts + intercept", () => {
962
- const NavLayout = (_jsx("div", { children: "nav" }));
963
- const ListPage = (_jsx("div", { children: "list" }));
964
- const DetailPage = (_jsx("div", { children: "detail" }));
965
- const ModalView = (_jsx("div", { children: "modal" }));
966
- const SidebarNav = (_jsx("div", { children: "sidebar-nav" }));
967
- const DetailLoader = createLoader(async () => ({ item: {} }));
968
- const ListLoader = createLoader(async () => ({ items: [] }));
969
- const tree = buildRouteTree(urls(({ path, layout, cache, parallel, intercept, when, middleware, loader, loading, errorBoundary }) => [
970
- layout(RootLayout, () => [
971
- middleware(logMiddleware),
972
- errorBoundary(ErrorFallback),
973
- layout(NavLayout, () => [
974
- parallel({ "@sidebar": SidebarNav }),
975
- cache({ ttl: 120 }, () => [
976
- path("/items", ListPage, { name: "items" }, () => [
977
- loader(ListLoader),
978
- loading(LoadingSpinner),
979
- ]),
980
- path("/items/:id", DetailPage, { name: "item.detail" }, () => [
981
- loader(DetailLoader),
982
- loading(LoadingSpinner),
983
- ]),
984
- intercept("@drawer", "item.detail", ModalView, () => [
985
- when((ctx) => ctx.from.pathname.startsWith("/items")),
986
- loader(DetailLoader),
987
- ]),
988
- ]),
989
- path("/", HomePage, { name: "home" }),
990
- ]),
991
- ]),
992
- ]));
993
- // All routes registered
994
- expect(tree.routeNames()).toEqual(expect.arrayContaining(["home", "items", "item.detail"]));
995
- // Matching
996
- expect(tree.match("/").routeKey).toBe("home");
997
- expect(tree.match("/items").routeKey).toBe("items");
998
- expect(tree.match("/items/abc").params).toEqual({ id: "abc" });
999
- // Segment hierarchy for items: synthetic > Root > Nav > Cache > route
1000
- const itemsPath = tree.segmentPath("items");
1001
- const itemsTypes = itemsPath.map((s) => s.type);
1002
- expect(itemsTypes).toEqual(["layout", "layout", "layout", "cache", "route"]);
1003
- // Home is NOT inside the cache segment
1004
- const homePath = tree.segmentPath("home");
1005
- const homeTypes = homePath.map((s) => s.type);
1006
- expect(homeTypes).toEqual(["layout", "layout", "layout", "route"]);
1007
- // Cache segment properties
1008
- const itemsEntry = tree.entry("items");
1009
- expect(itemsEntry.parent.type).toBe("cache");
1010
- expect(itemsEntry.parent.cache.options).toEqual({ ttl: 120 });
1011
- // Loaders on items and item.detail
1012
- expect(tree.hasLoaders("items")).toBe(true);
1013
- expect(tree.loaders("items")[0].loader).toBe(ListLoader);
1014
- expect(tree.hasLoaders("item.detail")).toBe(true);
1015
- expect(tree.loaders("item.detail")[0].loader).toBe(DetailLoader);
1016
- // Loading on both
1017
- expect(tree.hasLoading("items")).toBe(true);
1018
- expect(tree.hasLoading("item.detail")).toBe(true);
1019
- // Home has no loader or loading
1020
- expect(tree.hasLoaders("home")).toBe(false);
1021
- expect(tree.hasLoading("home")).toBe(false);
1022
- // Middleware: all routes get logMw from RootLayout
1023
- expect(tree.middlewareChain("items")).toEqual([
1024
- { segmentId: "M0L0L0", count: 1 },
1025
- ]);
1026
- expect(tree.middlewareChain("home")).toEqual([
1027
- { segmentId: "M0L0L0", count: 1 },
1028
- ]);
1029
- // Error boundary on RootLayout propagates
1030
- expect(itemsEntry.parent.parent.parent.errorBoundary).toHaveLength(1);
1031
- // Parallel sidebar on NavLayout
1032
- const homeEntry = tree.entry("home");
1033
- const navLayout = homeEntry.parent;
1034
- expect(navLayout.type).toBe("layout"); // NavLayout
1035
- expect(navLayout.parallel).toHaveLength(1);
1036
- const sidebarSlot = navLayout.parallel[0];
1037
- expect(sidebarSlot.type).toBe("parallel");
1038
- const sidebarHandler = sidebarSlot.handler;
1039
- expect(Object.keys(sidebarHandler)).toContain("@sidebar");
1040
- // Intercept on cache segment's parent (NavLayout holds the cache which holds the intercept)
1041
- // Intercepts are on the entry where intercept() is called — inside cache() children
1042
- const cacheEntry = itemsEntry.parent;
1043
- expect(cacheEntry.intercept).toHaveLength(1);
1044
- expect(cacheEntry.intercept[0].slotName).toBe("@drawer");
1045
- expect(cacheEntry.intercept[0].routeName).toBe("item.detail");
1046
- expect(cacheEntry.intercept[0].when).toHaveLength(1);
1047
- expect(cacheEntry.intercept[0].loader).toHaveLength(1);
1048
- expect(cacheEntry.intercept[0].loader[0].loader).toBe(DetailLoader);
1049
- });
1050
- });
1051
- //# sourceMappingURL=router-integration.test.js.map