@rangojs/router 0.0.0-experimental.9 → 0.0.0-experimental.9c87b9aa

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 (1102) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +1536 -155
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4450 -2226
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +69 -62
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +294 -0
  811. package/skills/caching/SKILL.md +93 -23
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +6 -4
  816. package/skills/hooks/SKILL.md +333 -71
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +74 -15
  821. package/skills/loader/SKILL.md +403 -43
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +15 -11
  824. package/skills/parallel/SKILL.md +204 -1
  825. package/skills/prerender/SKILL.md +405 -45
  826. package/skills/rango/SKILL.md +85 -21
  827. package/skills/response-routes/SKILL.md +144 -91
  828. package/skills/route/SKILL.md +257 -14
  829. package/skills/router-setup/SKILL.md +123 -30
  830. package/skills/theme/SKILL.md +9 -8
  831. package/skills/typesafety/SKILL.md +326 -87
  832. package/skills/use-cache/SKILL.md +324 -0
  833. package/src/__internal.ts +102 -4
  834. package/src/bin/rango.ts +312 -15
  835. package/src/browser/action-coordinator.ts +97 -0
  836. package/src/browser/action-response-classifier.ts +99 -0
  837. package/src/browser/event-controller.ts +92 -64
  838. package/src/browser/history-state.ts +80 -0
  839. package/src/browser/intercept-utils.ts +52 -0
  840. package/src/browser/link-interceptor.ts +24 -4
  841. package/src/browser/logging.ts +55 -0
  842. package/src/browser/merge-segment-loaders.ts +20 -12
  843. package/src/browser/navigation-bridge.ts +282 -557
  844. package/src/browser/navigation-client.ts +156 -73
  845. package/src/browser/navigation-store.ts +33 -50
  846. package/src/browser/navigation-transaction.ts +297 -0
  847. package/src/browser/network-error-handler.ts +61 -0
  848. package/src/browser/partial-update.ts +303 -310
  849. package/src/browser/prefetch/cache.ts +206 -0
  850. package/src/browser/prefetch/fetch.ts +144 -0
  851. package/src/browser/prefetch/observer.ts +65 -0
  852. package/src/browser/prefetch/policy.ts +48 -0
  853. package/src/browser/prefetch/queue.ts +160 -0
  854. package/src/browser/prefetch/resource-ready.ts +77 -0
  855. package/src/browser/rango-state.ts +112 -0
  856. package/src/browser/react/Link.tsx +190 -70
  857. package/src/browser/react/NavigationProvider.tsx +78 -11
  858. package/src/browser/react/context.ts +6 -0
  859. package/src/browser/react/filter-segment-order.ts +11 -0
  860. package/src/browser/react/index.ts +12 -12
  861. package/src/browser/react/location-state-shared.ts +95 -53
  862. package/src/browser/react/location-state.ts +60 -15
  863. package/src/browser/react/mount-context.ts +6 -1
  864. package/src/browser/react/nonce-context.ts +23 -0
  865. package/src/browser/react/shallow-equal.ts +27 -0
  866. package/src/browser/react/use-action.ts +29 -51
  867. package/src/browser/react/use-client-cache.ts +5 -3
  868. package/src/browser/react/use-handle.ts +29 -70
  869. package/src/browser/react/use-link-status.ts +6 -5
  870. package/src/browser/react/use-navigation.ts +22 -63
  871. package/src/browser/react/use-params.ts +65 -0
  872. package/src/browser/react/use-pathname.ts +47 -0
  873. package/src/browser/react/use-router.ts +63 -0
  874. package/src/browser/react/use-search-params.ts +56 -0
  875. package/src/browser/react/use-segments.ts +80 -97
  876. package/src/browser/response-adapter.ts +73 -0
  877. package/src/browser/rsc-router.tsx +188 -57
  878. package/src/browser/scroll-restoration.ts +117 -44
  879. package/src/browser/segment-reconciler.ts +221 -0
  880. package/src/browser/segment-structure-assert.ts +16 -0
  881. package/src/browser/server-action-bridge.ts +504 -599
  882. package/src/browser/shallow.ts +6 -1
  883. package/src/browser/types.ts +116 -47
  884. package/src/browser/validate-redirect-origin.ts +29 -0
  885. package/src/build/generate-manifest.ts +82 -21
  886. package/src/build/generate-route-types.ts +36 -752
  887. package/src/build/index.ts +6 -5
  888. package/src/build/route-trie.ts +39 -13
  889. package/src/build/route-types/ast-helpers.ts +25 -0
  890. package/src/build/route-types/ast-route-extraction.ts +98 -0
  891. package/src/build/route-types/codegen.ts +102 -0
  892. package/src/build/route-types/include-resolution.ts +411 -0
  893. package/src/build/route-types/param-extraction.ts +48 -0
  894. package/src/build/route-types/per-module-writer.ts +128 -0
  895. package/src/build/route-types/router-processing.ts +479 -0
  896. package/src/build/route-types/scan-filter.ts +78 -0
  897. package/src/build/runtime-discovery.ts +231 -0
  898. package/src/cache/background-task.ts +34 -0
  899. package/src/cache/cache-key-utils.ts +44 -0
  900. package/src/cache/cache-policy.ts +125 -0
  901. package/src/cache/cache-runtime.ts +342 -0
  902. package/src/cache/cache-scope.ts +167 -307
  903. package/src/cache/cf/cf-cache-store.ts +571 -17
  904. package/src/cache/cf/index.ts +13 -3
  905. package/src/cache/document-cache.ts +116 -77
  906. package/src/cache/handle-capture.ts +81 -0
  907. package/src/cache/handle-snapshot.ts +41 -0
  908. package/src/cache/index.ts +1 -15
  909. package/src/cache/memory-segment-store.ts +191 -13
  910. package/src/cache/profile-registry.ts +73 -0
  911. package/src/cache/read-through-swr.ts +134 -0
  912. package/src/cache/segment-codec.ts +256 -0
  913. package/src/cache/taint.ts +153 -0
  914. package/src/cache/types.ts +72 -122
  915. package/src/client.rsc.tsx +3 -1
  916. package/src/client.tsx +84 -126
  917. package/src/component-utils.ts +4 -4
  918. package/src/components/DefaultDocument.tsx +5 -1
  919. package/src/context-var.ts +156 -0
  920. package/src/debug.ts +19 -9
  921. package/src/errors.ts +77 -7
  922. package/src/handle.ts +15 -10
  923. package/src/handles/MetaTags.tsx +73 -20
  924. package/src/handles/breadcrumbs.ts +66 -0
  925. package/src/handles/index.ts +1 -0
  926. package/src/handles/meta.ts +30 -13
  927. package/src/host/cookie-handler.ts +21 -15
  928. package/src/host/errors.ts +8 -8
  929. package/src/host/index.ts +4 -7
  930. package/src/host/pattern-matcher.ts +27 -27
  931. package/src/host/router.ts +61 -39
  932. package/src/host/testing.ts +8 -8
  933. package/src/host/types.ts +15 -7
  934. package/src/host/utils.ts +1 -1
  935. package/src/href-client.ts +65 -45
  936. package/src/index.rsc.ts +133 -21
  937. package/src/index.ts +164 -52
  938. package/src/internal-debug.ts +11 -0
  939. package/src/loader.rsc.ts +25 -143
  940. package/src/loader.ts +27 -10
  941. package/src/network-error-thrower.tsx +3 -1
  942. package/src/outlet-provider.tsx +45 -0
  943. package/src/prerender/param-hash.ts +4 -2
  944. package/src/prerender/store.ts +158 -13
  945. package/src/prerender.ts +333 -26
  946. package/src/reverse.ts +184 -121
  947. package/src/root-error-boundary.tsx +41 -29
  948. package/src/route-content-wrapper.tsx +7 -4
  949. package/src/route-definition/dsl-helpers.ts +959 -0
  950. package/src/route-definition/helper-factories.ts +200 -0
  951. package/src/route-definition/helpers-types.ts +431 -0
  952. package/src/route-definition/index.ts +52 -0
  953. package/src/route-definition/redirect.ts +93 -0
  954. package/src/route-definition.ts +1 -1431
  955. package/src/route-map-builder.ts +162 -123
  956. package/src/route-name.ts +53 -0
  957. package/src/route-types.ts +48 -9
  958. package/src/router/content-negotiation.ts +116 -0
  959. package/src/router/debug-manifest.ts +72 -0
  960. package/src/router/error-handling.ts +9 -9
  961. package/src/router/find-match.ts +160 -0
  962. package/src/router/handler-context.ts +400 -84
  963. package/src/router/intercept-resolution.ts +26 -16
  964. package/src/router/lazy-includes.ts +237 -0
  965. package/src/router/loader-resolution.ts +222 -123
  966. package/src/router/logging.ts +251 -0
  967. package/src/router/manifest.ts +89 -32
  968. package/src/router/match-api.ts +118 -119
  969. package/src/router/match-context.ts +4 -2
  970. package/src/router/match-handlers.ts +440 -0
  971. package/src/router/match-middleware/background-revalidation.ts +108 -93
  972. package/src/router/match-middleware/cache-lookup.ts +394 -85
  973. package/src/router/match-middleware/cache-store.ts +91 -29
  974. package/src/router/match-middleware/intercept-resolution.ts +48 -21
  975. package/src/router/match-middleware/segment-resolution.ts +20 -9
  976. package/src/router/match-pipelines.ts +10 -45
  977. package/src/router/match-result.ts +55 -33
  978. package/src/router/metrics.ts +240 -15
  979. package/src/router/middleware-cookies.ts +55 -0
  980. package/src/router/middleware-types.ts +226 -0
  981. package/src/router/middleware.ts +327 -369
  982. package/src/router/pattern-matching.ts +197 -41
  983. package/src/router/prerender-match.ts +402 -0
  984. package/src/router/preview-match.ts +170 -0
  985. package/src/router/revalidation.ts +137 -38
  986. package/src/router/router-context.ts +41 -21
  987. package/src/router/router-interfaces.ts +452 -0
  988. package/src/router/router-options.ts +592 -0
  989. package/src/router/router-registry.ts +24 -0
  990. package/src/router/segment-resolution/fresh.ts +683 -0
  991. package/src/router/segment-resolution/helpers.ts +263 -0
  992. package/src/router/segment-resolution/loader-cache.ts +199 -0
  993. package/src/router/segment-resolution/revalidation.ts +1301 -0
  994. package/src/router/segment-resolution/static-store.ts +67 -0
  995. package/src/router/segment-resolution.ts +21 -1315
  996. package/src/router/segment-wrappers.ts +291 -0
  997. package/src/router/telemetry-otel.ts +299 -0
  998. package/src/router/telemetry.ts +300 -0
  999. package/src/router/timeout.ts +148 -0
  1000. package/src/router/trie-matching.ts +96 -29
  1001. package/src/router/types.ts +16 -9
  1002. package/src/router.ts +594 -1983
  1003. package/src/rsc/handler-context.ts +45 -0
  1004. package/src/rsc/handler.ts +661 -1015
  1005. package/src/rsc/helpers.ts +140 -6
  1006. package/src/rsc/index.ts +0 -20
  1007. package/src/rsc/loader-fetch.ts +209 -0
  1008. package/src/rsc/manifest-init.ts +86 -0
  1009. package/src/rsc/nonce.ts +14 -0
  1010. package/src/rsc/origin-guard.ts +141 -0
  1011. package/src/rsc/progressive-enhancement.ts +379 -0
  1012. package/src/rsc/response-error.ts +37 -0
  1013. package/src/rsc/response-route-handler.ts +347 -0
  1014. package/src/rsc/rsc-rendering.ts +237 -0
  1015. package/src/rsc/runtime-warnings.ts +42 -0
  1016. package/src/rsc/server-action.ts +348 -0
  1017. package/src/rsc/ssr-setup.ts +128 -0
  1018. package/src/rsc/types.ts +38 -11
  1019. package/src/search-params.ts +230 -0
  1020. package/src/segment-system.tsx +165 -17
  1021. package/src/server/context.ts +270 -56
  1022. package/src/server/cookie-store.ts +190 -0
  1023. package/src/server/fetchable-loader-store.ts +37 -0
  1024. package/src/server/handle-store.ts +94 -15
  1025. package/src/server/loader-registry.ts +15 -56
  1026. package/src/server/request-context.ts +474 -74
  1027. package/src/server.ts +35 -155
  1028. package/src/ssr/index.tsx +101 -31
  1029. package/src/static-handler.ts +114 -0
  1030. package/src/theme/ThemeProvider.tsx +21 -15
  1031. package/src/theme/ThemeScript.tsx +5 -5
  1032. package/src/theme/constants.ts +5 -2
  1033. package/src/theme/index.ts +4 -14
  1034. package/src/theme/theme-context.ts +4 -30
  1035. package/src/theme/theme-script.ts +21 -18
  1036. package/src/types/boundaries.ts +158 -0
  1037. package/src/types/cache-types.ts +198 -0
  1038. package/src/types/error-types.ts +192 -0
  1039. package/src/types/global-namespace.ts +100 -0
  1040. package/src/types/handler-context.ts +785 -0
  1041. package/src/types/index.ts +88 -0
  1042. package/src/types/loader-types.ts +183 -0
  1043. package/src/types/route-config.ts +170 -0
  1044. package/src/types/route-entry.ts +109 -0
  1045. package/src/types/segments.ts +150 -0
  1046. package/src/types.ts +1 -1757
  1047. package/src/urls/include-helper.ts +197 -0
  1048. package/src/urls/index.ts +53 -0
  1049. package/src/urls/path-helper-types.ts +339 -0
  1050. package/src/urls/path-helper.ts +329 -0
  1051. package/src/urls/pattern-types.ts +95 -0
  1052. package/src/urls/response-types.ts +106 -0
  1053. package/src/urls/type-extraction.ts +372 -0
  1054. package/src/urls/urls-function.ts +98 -0
  1055. package/src/urls.ts +1 -1282
  1056. package/src/use-loader.tsx +85 -77
  1057. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1058. package/src/vite/discovery/discover-routers.ts +344 -0
  1059. package/src/vite/discovery/prerender-collection.ts +385 -0
  1060. package/src/vite/discovery/route-types-writer.ts +258 -0
  1061. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1062. package/src/vite/discovery/state.ts +108 -0
  1063. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1064. package/src/vite/index.ts +11 -1963
  1065. package/src/vite/plugin-types.ts +48 -0
  1066. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1067. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1068. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1069. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  1070. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1071. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1072. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1073. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1074. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1075. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1076. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1077. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1078. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1079. package/src/vite/plugins/version-injector.ts +83 -0
  1080. package/src/vite/plugins/version-plugin.ts +266 -0
  1081. package/src/vite/plugins/virtual-entries.ts +123 -0
  1082. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1083. package/src/vite/rango.ts +445 -0
  1084. package/src/vite/router-discovery.ts +777 -0
  1085. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1086. package/src/vite/utils/banner.ts +36 -0
  1087. package/src/vite/utils/bundle-analysis.ts +137 -0
  1088. package/src/vite/utils/manifest-utils.ts +70 -0
  1089. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1090. package/src/vite/utils/prerender-utils.ts +189 -0
  1091. package/src/vite/utils/shared-utils.ts +169 -0
  1092. package/CLAUDE.md +0 -43
  1093. package/src/browser/lru-cache.ts +0 -69
  1094. package/src/browser/request-controller.ts +0 -164
  1095. package/src/cache/memory-store.ts +0 -253
  1096. package/src/router.gen.ts +0 -6
  1097. package/src/urls.gen.ts +0 -8
  1098. package/src/vite/expose-handle-id.ts +0 -209
  1099. package/src/vite/expose-loader-id.ts +0 -426
  1100. package/src/vite/expose-location-state-id.ts +0 -177
  1101. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1102. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/errors.ts CHANGED
@@ -22,6 +22,7 @@ export class RouteNotFoundError extends Error {
22
22
 
23
23
  constructor(message: string, options?: ErrorOptions) {
24
24
  super(message);
25
+ Object.setPrototypeOf(this, RouteNotFoundError.prototype);
25
26
  this.cause = options?.cause;
26
27
  }
27
28
  }
@@ -45,6 +46,7 @@ export class DataNotFoundError extends Error {
45
46
 
46
47
  constructor(message: string = "Not found", options?: ErrorOptions) {
47
48
  super(message);
49
+ Object.setPrototypeOf(this, DataNotFoundError.prototype);
48
50
  this.cause = options?.cause;
49
51
  }
50
52
  }
@@ -74,6 +76,7 @@ export class MiddlewareError extends Error {
74
76
 
75
77
  constructor(message: string, options?: ErrorOptions) {
76
78
  super(message);
79
+ Object.setPrototypeOf(this, MiddlewareError.prototype);
77
80
  this.cause = options?.cause;
78
81
  }
79
82
  }
@@ -87,6 +90,7 @@ export class HandlerError extends Error {
87
90
 
88
91
  constructor(message: string, options?: ErrorOptions) {
89
92
  super(message);
93
+ Object.setPrototypeOf(this, HandlerError.prototype);
90
94
  this.cause = options?.cause;
91
95
  }
92
96
  }
@@ -100,6 +104,7 @@ export class BuildError extends Error {
100
104
 
101
105
  constructor(message: string, options?: ErrorOptions) {
102
106
  super(message);
107
+ Object.setPrototypeOf(this, BuildError.prototype);
103
108
  this.cause = options?.cause;
104
109
  }
105
110
  }
@@ -133,9 +138,10 @@ export class NetworkError extends Error {
133
138
  options?: ErrorOptions & {
134
139
  url?: string;
135
140
  operation?: "action" | "navigation" | "revalidation";
136
- }
141
+ },
137
142
  ) {
138
143
  super(message);
144
+ Object.setPrototypeOf(this, NetworkError.prototype);
139
145
  this.cause = options?.cause;
140
146
  this.url = options?.url;
141
147
  this.operation = options?.operation;
@@ -194,12 +200,17 @@ export class RouterError extends Error {
194
200
  status: number;
195
201
  cause?: unknown;
196
202
 
197
- constructor(code: string, message: string, options?: {
198
- status?: number;
199
- type?: string;
200
- cause?: unknown;
201
- }) {
203
+ constructor(
204
+ code: string,
205
+ message: string,
206
+ options?: {
207
+ status?: number;
208
+ type?: string;
209
+ cause?: unknown;
210
+ },
211
+ ) {
202
212
  super(message);
213
+ Object.setPrototypeOf(this, RouterError.prototype);
203
214
  this.code = code;
204
215
  this.status = options?.status ?? 500;
205
216
  this.type = options?.type;
@@ -207,6 +218,59 @@ export class RouterError extends Error {
207
218
  }
208
219
  }
209
220
 
221
+ /**
222
+ * Thrown inside a Prerender or Static handler at build time to signal
223
+ * "skip this entry, log it, and continue with the rest."
224
+ *
225
+ * When thrown, the entry is excluded from the pre-render manifest
226
+ * but the build continues normally. Regular throws (non-Skip)
227
+ * stop all further pre-rendering and fail the build.
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * export const BlogPost = Prerender(
232
+ * async () => allPosts.map(p => ({ slug: p.slug })),
233
+ * async (ctx) => {
234
+ * const post = await getPost(ctx.params.slug);
235
+ * if (post.draft) throw new Skip(`"${ctx.params.slug}" is a draft`);
236
+ * return <PostPage post={post} />;
237
+ * },
238
+ * );
239
+ * ```
240
+ */
241
+ export class Skip extends Error {
242
+ name = "Skip" as const;
243
+ cause?: unknown;
244
+
245
+ constructor(message: string = "Entry skipped", options?: ErrorOptions) {
246
+ super(message);
247
+ Object.setPrototypeOf(this, Skip.prototype);
248
+ this.cause = options?.cause;
249
+ }
250
+ }
251
+
252
+ /**
253
+ * Type guard to check if a thrown value is a Skip signal.
254
+ */
255
+ export function isSkip(value: unknown): value is Skip {
256
+ return value instanceof Skip;
257
+ }
258
+
259
+ /**
260
+ * Thrown by the partial updater when the server responds with a redirect payload
261
+ * that carries location state. Caught by navigate() to re-navigate to the
262
+ * redirect target with the server-set state merged into history.pushState.
263
+ *
264
+ * Not an Error subclass -- this is a control flow signal, not a failure.
265
+ */
266
+ export class ServerRedirect {
267
+ readonly name = "ServerRedirect";
268
+ constructor(
269
+ public readonly url: string,
270
+ public readonly state: Record<string, unknown> | undefined,
271
+ ) {}
272
+ }
273
+
210
274
  /**
211
275
  * Thrown when route handler returns invalid type
212
276
  */
@@ -216,6 +280,7 @@ export class InvalidHandlerError extends Error {
216
280
 
217
281
  constructor(message: string, options?: ErrorOptions) {
218
282
  super(message);
283
+ Object.setPrototypeOf(this, InvalidHandlerError.prototype);
219
284
  this.cause = options?.cause;
220
285
  }
221
286
  }
@@ -262,7 +327,12 @@ export function sanitizeError(error: unknown): Response {
262
327
  return error;
263
328
  }
264
329
 
265
- const isDev = (import.meta as any).env?.DEV ?? true;
330
+ // Vite replaces import.meta.env.DEV at compile time. The fallback covers
331
+ // non-Vite environments (plain Node, test runners without Vite transforms).
332
+ // SECURITY: fail closed — default to production when the environment is ambiguous.
333
+ const isDev =
334
+ (import.meta as any).env?.DEV ??
335
+ globalThis.process?.env?.NODE_ENV === "development";
266
336
 
267
337
  if (isDev) {
268
338
  // Development: Send full error details for debugging
package/src/handle.ts CHANGED
@@ -29,7 +29,6 @@ export interface Handle<TData, TAccumulated = TData[]> {
29
29
  * Format: "filePath#ExportName" in dev, "hash#ExportName" in production
30
30
  */
31
31
  readonly $$id: string;
32
-
33
32
  }
34
33
 
35
34
  /**
@@ -48,14 +47,16 @@ const collectRegistry = new Map<string, (segments: unknown[][]) => unknown>();
48
47
  * Look up a collect function from the registry by handle $$id.
49
48
  * Returns undefined if not registered (falls back to defaultCollect in useHandle).
50
49
  */
51
- export function getCollectFn(id: string): ((segments: unknown[][]) => unknown) | undefined {
50
+ export function getCollectFn(
51
+ id: string,
52
+ ): ((segments: unknown[][]) => unknown) | undefined {
52
53
  return collectRegistry.get(id);
53
54
  }
54
55
 
55
56
  /**
56
57
  * Create a handle definition for accumulating data across route segments.
57
58
  *
58
- * The $$id is auto-generated by the Vite exposeHandleId plugin based on
59
+ * The $$id is auto-generated by the Vite exposeInternalIds plugin based on
59
60
  * file path and export name. No manual naming required.
60
61
  *
61
62
  * @param collect - Optional collect function (default: flatten into array)
@@ -90,25 +91,29 @@ export function getCollectFn(id: string): ((segments: unknown[][]) => unknown) |
90
91
  */
91
92
  export function createHandle<TData, TAccumulated = TData[]>(
92
93
  collect?: (segments: TData[][]) => TAccumulated,
93
- __injectedId?: string
94
+ __injectedId?: string,
94
95
  ): Handle<TData, TAccumulated> {
95
96
  const handleId = __injectedId ?? "";
96
97
 
97
- if (!handleId && process.env.NODE_ENV !== "production") {
98
- console.warn(
98
+ if (!handleId && process.env.NODE_ENV === "development") {
99
+ throw new Error(
99
100
  "[rsc-router] Handle is missing $$id. " +
100
- "Make sure the exposeHandleId Vite plugin is enabled and " +
101
- "the handle is exported with: export const MyHandle = createHandle(...)"
101
+ "Make sure the exposeInternalIds Vite plugin is enabled and " +
102
+ "the handle is exported with: export const MyHandle = createHandle(...)",
102
103
  );
103
104
  }
104
105
 
105
- const collectFn = collect ??
106
+ const collectFn =
107
+ collect ??
106
108
  (defaultCollect as unknown as (segments: TData[][]) => TAccumulated);
107
109
 
108
110
  // Register collect in module-level registry so useHandle() can recover it
109
111
  // when the handle is deserialized from RSC props (toJSON strips collect).
110
112
  if (handleId) {
111
- collectRegistry.set(handleId, collectFn as (segments: unknown[][]) => unknown);
113
+ collectRegistry.set(
114
+ handleId,
115
+ collectFn as (segments: unknown[][]) => unknown,
116
+ );
112
117
  }
113
118
 
114
119
  return {
@@ -28,8 +28,9 @@ import { use } from "react";
28
28
  import { useHandle } from "../browser/react/use-handle.js";
29
29
  import { Meta } from "./meta.js";
30
30
  import type { MetaDescriptor, MetaDescriptorBase } from "../router/types.js";
31
- import { getSSRThemeConfig } from "../theme/theme-context.js";
31
+ import { useThemeContext } from "../theme/theme-context.js";
32
32
  import { generateThemeScript } from "../theme/theme-script.js";
33
+ import { useNonce } from "../browser/react/nonce-context.js";
33
34
 
34
35
  // Type guards for MetaDescriptorBase variants
35
36
  function hasCharSet(d: MetaDescriptorBase): d is { charSet: "utf-8" } {
@@ -40,30 +41,53 @@ function hasTitle(d: MetaDescriptorBase): d is { title: string } {
40
41
  return "title" in d && typeof (d as { title?: unknown }).title === "string";
41
42
  }
42
43
 
43
- function hasNameContent(d: MetaDescriptorBase): d is { name: string; content: string } {
44
- return "name" in d && "content" in d &&
44
+ function hasNameContent(
45
+ d: MetaDescriptorBase,
46
+ ): d is { name: string; content: string } {
47
+ return (
48
+ "name" in d &&
49
+ "content" in d &&
45
50
  typeof (d as { name?: unknown }).name === "string" &&
46
- typeof (d as { content?: unknown }).content === "string";
51
+ typeof (d as { content?: unknown }).content === "string"
52
+ );
47
53
  }
48
54
 
49
- function hasPropertyContent(d: MetaDescriptorBase): d is { property: string; content: string } {
50
- return "property" in d && "content" in d &&
55
+ function hasPropertyContent(
56
+ d: MetaDescriptorBase,
57
+ ): d is { property: string; content: string } {
58
+ return (
59
+ "property" in d &&
60
+ "content" in d &&
51
61
  typeof (d as { property?: unknown }).property === "string" &&
52
- typeof (d as { content?: unknown }).content === "string";
62
+ typeof (d as { content?: unknown }).content === "string"
63
+ );
53
64
  }
54
65
 
55
- function hasHttpEquivContent(d: MetaDescriptorBase): d is { httpEquiv: string; content: string } {
56
- return "httpEquiv" in d && "content" in d &&
66
+ function hasHttpEquivContent(
67
+ d: MetaDescriptorBase,
68
+ ): d is { httpEquiv: string; content: string } {
69
+ return (
70
+ "httpEquiv" in d &&
71
+ "content" in d &&
57
72
  typeof (d as { httpEquiv?: unknown }).httpEquiv === "string" &&
58
- typeof (d as { content?: unknown }).content === "string";
73
+ typeof (d as { content?: unknown }).content === "string"
74
+ );
59
75
  }
60
76
 
61
- function hasScriptLdJson(d: MetaDescriptorBase): d is { "script:ld+json": object } {
77
+ function hasScriptLdJson(
78
+ d: MetaDescriptorBase,
79
+ ): d is { "script:ld+json": object } {
62
80
  return "script:ld+json" in d;
63
81
  }
64
82
 
65
- function hasTagName(d: MetaDescriptorBase): d is { tagName: "meta" | "link"; [name: string]: string } {
66
- return "tagName" in d && ((d as { tagName?: unknown }).tagName === "meta" || (d as { tagName?: unknown }).tagName === "link");
83
+ function hasTagName(
84
+ d: MetaDescriptorBase,
85
+ ): d is { tagName: "meta" | "link"; [name: string]: string } {
86
+ return (
87
+ "tagName" in d &&
88
+ ((d as { tagName?: unknown }).tagName === "meta" ||
89
+ (d as { tagName?: unknown }).tagName === "link")
90
+ );
67
91
  }
68
92
 
69
93
  /**
@@ -78,7 +102,7 @@ function isPromise(value: unknown): value is Promise<unknown> {
78
102
  */
79
103
  function renderMetaDescriptor(
80
104
  descriptor: MetaDescriptorBase,
81
- index: number
105
+ index: number,
82
106
  ): React.ReactNode {
83
107
  // charset
84
108
  if (hasCharSet(descriptor)) {
@@ -139,21 +163,42 @@ function renderMetaDescriptor(
139
163
  if (hasTagName(descriptor)) {
140
164
  const { tagName, ...rest } = descriptor;
141
165
  if (tagName === "link") {
142
- return <link key={`link-${index}`} {...(rest as React.LinkHTMLAttributes<HTMLLinkElement>)} />;
166
+ return (
167
+ <link
168
+ key={`link-${index}`}
169
+ {...(rest as React.LinkHTMLAttributes<HTMLLinkElement>)}
170
+ />
171
+ );
143
172
  }
144
173
  if (tagName === "meta") {
145
- return <meta key={`meta-${index}`} {...(rest as React.MetaHTMLAttributes<HTMLMetaElement>)} />;
174
+ return (
175
+ <meta
176
+ key={`meta-${index}`}
177
+ {...(rest as React.MetaHTMLAttributes<HTMLMetaElement>)}
178
+ />
179
+ );
146
180
  }
147
181
  }
148
182
 
149
183
  // Fallback: treat as meta attributes
150
- return <meta key={`meta-fallback-${index}`} {...(descriptor as React.MetaHTMLAttributes<HTMLMetaElement>)} />;
184
+ return (
185
+ <meta
186
+ key={`meta-fallback-${index}`}
187
+ {...(descriptor as React.MetaHTMLAttributes<HTMLMetaElement>)}
188
+ />
189
+ );
151
190
  }
152
191
 
153
192
  /**
154
193
  * Wrapper component to resolve a Promise<MetaDescriptorBase> using use().
155
194
  */
156
- function AsyncMetaTag({ promise, index }: { promise: Promise<MetaDescriptorBase>; index: number }): React.ReactNode {
195
+ function AsyncMetaTag({
196
+ promise,
197
+ index,
198
+ }: {
199
+ promise: Promise<MetaDescriptorBase>;
200
+ index: number;
201
+ }): React.ReactNode {
157
202
  const resolved = use(promise);
158
203
  return renderMetaDescriptor(resolved, index);
159
204
  }
@@ -172,19 +217,27 @@ function AsyncMetaTag({ promise, index }: { promise: Promise<MetaDescriptorBase>
172
217
  */
173
218
  export function MetaTags(): React.ReactNode {
174
219
  const descriptors = useHandle(Meta) as MetaDescriptor[];
175
- const themeConfig = getSSRThemeConfig();
220
+ const themeConfig = useThemeContext()?.config ?? null;
221
+ const nonce = useNonce();
176
222
 
177
223
  return (
178
224
  <>
179
225
  {/* Theme script must be first to prevent FOUC */}
180
226
  {themeConfig && (
181
227
  <script
228
+ nonce={nonce}
182
229
  dangerouslySetInnerHTML={{ __html: generateThemeScript(themeConfig) }}
183
230
  />
184
231
  )}
185
232
  {descriptors.map((descriptor, index) => {
186
233
  if (isPromise(descriptor)) {
187
- return <AsyncMetaTag key={`async-${index}`} promise={descriptor} index={index} />;
234
+ return (
235
+ <AsyncMetaTag
236
+ key={`async-${index}`}
237
+ promise={descriptor}
238
+ index={index}
239
+ />
240
+ );
188
241
  }
189
242
  return renderMetaDescriptor(descriptor, index);
190
243
  })}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Built-in Breadcrumbs handle for accumulating breadcrumb items across route segments.
3
+ *
4
+ * Each layout/route pushes breadcrumb items via `ctx.use(Breadcrumbs)`.
5
+ * Items are collected in parent-to-child order with automatic deduplication
6
+ * by `href` (last item for each href wins).
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * // In route handler
11
+ * route("/blog/:slug", (ctx) => {
12
+ * const breadcrumb = ctx.use(Breadcrumbs);
13
+ * breadcrumb({ label: "Blog", href: "/blog" });
14
+ * breadcrumb({ label: post.title, href: `/blog/${ctx.params.slug}` });
15
+ * });
16
+ *
17
+ * // In client component (consume with useHandle)
18
+ * const crumbs = useHandle(Breadcrumbs);
19
+ * crumbs.map((c) => <a href={c.href}>{c.label}</a>);
20
+ * ```
21
+ */
22
+
23
+ import type { ReactNode } from "react";
24
+ import { createHandle, type Handle } from "../handle.js";
25
+
26
+ /**
27
+ * A single breadcrumb item.
28
+ *
29
+ * @property label - Display text for the breadcrumb
30
+ * @property href - URL the breadcrumb links to
31
+ * @property content - Optional extra content (sync or async) rendered alongside the label
32
+ */
33
+ export interface BreadcrumbItem {
34
+ label: string;
35
+ href: string;
36
+ content?: ReactNode | Promise<ReactNode>;
37
+ }
38
+
39
+ /**
40
+ * Collect function for Breadcrumbs handle.
41
+ * Flattens segments in parent-to-child order with deduplication by href
42
+ * (last item for each href wins).
43
+ */
44
+ function collectBreadcrumbs(segments: BreadcrumbItem[][]): BreadcrumbItem[] {
45
+ const all = segments.flat();
46
+ const seen = new Map<string, number>();
47
+
48
+ for (let i = 0; i < all.length; i++) {
49
+ seen.set(all[i].href, i);
50
+ }
51
+
52
+ // Return items in order, keeping only the last occurrence per href
53
+ return all.filter((item, index) => seen.get(item.href) === index);
54
+ }
55
+
56
+ /**
57
+ * Built-in handle for accumulating breadcrumb navigation items.
58
+ *
59
+ * Use `ctx.use(Breadcrumbs)` in route handlers to push breadcrumb items.
60
+ * Use `useHandle(Breadcrumbs)` in client components to consume them.
61
+ */
62
+ export const Breadcrumbs: Handle<BreadcrumbItem, BreadcrumbItem[]> =
63
+ createHandle<BreadcrumbItem, BreadcrumbItem[]>(
64
+ collectBreadcrumbs,
65
+ "__rsc_router_breadcrumbs__",
66
+ );
@@ -4,3 +4,4 @@
4
4
 
5
5
  export { Meta } from "./meta.ts";
6
6
  export { MetaTags } from "./MetaTags.tsx";
7
+ export { Breadcrumbs, type BreadcrumbItem } from "./breadcrumbs.ts";
@@ -39,7 +39,7 @@ import type {
39
39
  * Type guard for unset descriptor
40
40
  */
41
41
  function isUnsetDescriptor(
42
- descriptor: MetaDescriptor
42
+ descriptor: MetaDescriptor,
43
43
  ): descriptor is UnsetDescriptor {
44
44
  return (
45
45
  typeof descriptor === "object" &&
@@ -53,7 +53,7 @@ function isUnsetDescriptor(
53
53
  * Type guard for title descriptor (any form)
54
54
  */
55
55
  function isTitleDescriptor(
56
- descriptor: MetaDescriptor
56
+ descriptor: MetaDescriptor,
57
57
  ): descriptor is { title: TitleDescriptor } {
58
58
  return (
59
59
  typeof descriptor === "object" &&
@@ -66,7 +66,7 @@ function isTitleDescriptor(
66
66
  * Type guard for title template descriptor
67
67
  */
68
68
  function isTitleTemplate(
69
- title: TitleDescriptor
69
+ title: TitleDescriptor,
70
70
  ): title is { template: string; default: string } {
71
71
  return (
72
72
  typeof title === "object" &&
@@ -79,7 +79,9 @@ function isTitleTemplate(
79
79
  /**
80
80
  * Type guard for absolute title descriptor
81
81
  */
82
- function isAbsoluteTitle(title: TitleDescriptor): title is { absolute: string } {
82
+ function isAbsoluteTitle(
83
+ title: TitleDescriptor,
84
+ ): title is { absolute: string } {
83
85
  return typeof title === "object" && title !== null && "absolute" in title;
84
86
  }
85
87
 
@@ -141,7 +143,7 @@ function addOrReplace(
141
143
  result: MetaDescriptor[],
142
144
  keyToIndex: Map<string, number>,
143
145
  descriptor: MetaDescriptor,
144
- key: string | undefined
146
+ key: string | undefined,
145
147
  ): void {
146
148
  if (key !== undefined && keyToIndex.has(key)) {
147
149
  result[keyToIndex.get(key)!] = descriptor;
@@ -158,7 +160,7 @@ function addOrReplace(
158
160
  */
159
161
  function updateIndicesAfterRemoval(
160
162
  keyToIndex: Map<string, number>,
161
- removedIndex: number
163
+ removedIndex: number,
162
164
  ): void {
163
165
  for (const [key, index] of keyToIndex) {
164
166
  if (index > removedIndex) {
@@ -208,13 +210,23 @@ function collectMeta(segments: MetaDescriptor[][]): MetaDescriptor[] {
208
210
  // Store template for subsequent title descriptors in child segments
209
211
  titleTemplate = titleValue.template;
210
212
  // Set the default title
211
- addOrReplace(result, keyToIndex, { title: titleValue.default }, "title");
213
+ addOrReplace(
214
+ result,
215
+ keyToIndex,
216
+ { title: titleValue.default },
217
+ "title",
218
+ );
212
219
  continue;
213
220
  }
214
221
 
215
222
  if (isAbsoluteTitle(titleValue)) {
216
223
  // Absolute title bypasses any template
217
- addOrReplace(result, keyToIndex, { title: titleValue.absolute }, "title");
224
+ addOrReplace(
225
+ result,
226
+ keyToIndex,
227
+ { title: titleValue.absolute },
228
+ "title",
229
+ );
218
230
  continue;
219
231
  }
220
232
 
@@ -222,7 +234,12 @@ function collectMeta(segments: MetaDescriptor[][]): MetaDescriptor[] {
222
234
  const finalTitle = titleTemplate
223
235
  ? titleTemplate.replace("%s", titleValue as string)
224
236
  : titleValue;
225
- addOrReplace(result, keyToIndex, { title: finalTitle as string }, "title");
237
+ addOrReplace(
238
+ result,
239
+ keyToIndex,
240
+ { title: finalTitle as string },
241
+ "title",
242
+ );
226
243
  continue;
227
244
  }
228
245
 
@@ -241,7 +258,7 @@ function collectMeta(segments: MetaDescriptor[][]): MetaDescriptor[] {
241
258
  * Use `ctx.use(Meta)` in route handlers to push meta descriptors.
242
259
  * Use `<MetaTags />` component to render them in the document head.
243
260
  */
244
- export const Meta: Handle<MetaDescriptor, MetaDescriptor[]> = createHandle<MetaDescriptor, MetaDescriptor[]>(
245
- collectMeta,
246
- "__rsc_router_meta__"
247
- );
261
+ export const Meta: Handle<MetaDescriptor, MetaDescriptor[]> = createHandle<
262
+ MetaDescriptor,
263
+ MetaDescriptor[]
264
+ >(collectMeta, "__rsc_router_meta__");
@@ -4,30 +4,36 @@
4
4
  * Manages cookie-based host override for development environments.
5
5
  */
6
6
 
7
- import type { HostOverrideConfig } from './types.js';
8
- import { matchPattern, parseRequest } from './pattern-matcher.js';
7
+ import type { HostOverrideConfig } from "./types.js";
8
+ import type { RouterRequestInput } from "../router/router-interfaces.js";
9
+ import { matchPattern, parseRequest } from "./pattern-matcher.js";
9
10
  import {
10
11
  HostOverrideNotAllowedError,
11
12
  InvalidHostnameError,
12
13
  HostValidationError,
13
- } from './errors.js';
14
+ } from "./errors.js";
14
15
 
15
16
  /**
16
17
  * Parse cookies from request
17
18
  */
18
19
  export function parseCookies(request: Request): Record<string, string> {
19
- const cookieHeader = request.headers.get('cookie');
20
+ const cookieHeader = request.headers.get("cookie");
20
21
  if (!cookieHeader) {
21
22
  return {};
22
23
  }
23
24
 
24
25
  const cookies: Record<string, string> = {};
25
- const pairs = cookieHeader.split(';');
26
+ const pairs = cookieHeader.split(";");
26
27
 
27
28
  for (const pair of pairs) {
28
- const [key, value] = pair.trim().split('=');
29
- if (key && value) {
30
- cookies[key] = decodeURIComponent(value);
29
+ const [name, ...rest] = pair.trim().split("=");
30
+ if (name && rest.length > 0) {
31
+ const value = rest.join("=");
32
+ try {
33
+ cookies[name] = decodeURIComponent(value);
34
+ } catch {
35
+ cookies[name] = value;
36
+ }
31
37
  }
32
38
  }
33
39
 
@@ -54,7 +60,7 @@ export function createDeleteCookieHeader(name: string): string {
54
60
  */
55
61
  export function createCookieErrorResponse(
56
62
  cookieName: string,
57
- message: string
63
+ message: string,
58
64
  ): Response {
59
65
  return new Response(
60
66
  JSON.stringify({
@@ -64,10 +70,10 @@ export function createCookieErrorResponse(
64
70
  {
65
71
  status: 400,
66
72
  headers: {
67
- 'Content-Type': 'application/json',
68
- 'Set-Cookie': createDeleteCookieHeader(cookieName),
73
+ "Content-Type": "application/json",
74
+ "Set-Cookie": createDeleteCookieHeader(cookieName),
69
75
  },
70
- }
76
+ },
71
77
  );
72
78
  }
73
79
 
@@ -76,7 +82,7 @@ export function createCookieErrorResponse(
76
82
  */
77
83
  export function isHostAllowed(
78
84
  request: Request,
79
- allowedHosts: string[]
85
+ allowedHosts: string[],
80
86
  ): boolean {
81
87
  const { hostname, pathname, parts } = parseRequest(request);
82
88
 
@@ -98,7 +104,7 @@ export function isHostAllowed(
98
104
  export function handleCookieOverride(
99
105
  request: Request,
100
106
  config: HostOverrideConfig | undefined,
101
- context: any
107
+ input: RouterRequestInput<any>,
102
108
  ): string {
103
109
  if (!config) {
104
110
  const { hostname } = parseRequest(request);
@@ -127,7 +133,7 @@ export function handleCookieOverride(
127
133
  // If allowed and has custom validation, run it
128
134
  if (validate) {
129
135
  try {
130
- const validatedHostname = validate(request, cookieValue, context);
136
+ const validatedHostname = validate(request, cookieValue, input);
131
137
  return validatedHostname;
132
138
  } catch (error) {
133
139
  // Wrap in HostValidationError