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

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 (909) hide show
  1. package/dist/__internal.d.ts +83 -0
  2. package/dist/__internal.d.ts.map +1 -0
  3. package/dist/__internal.js +19 -0
  4. package/dist/__internal.js.map +1 -0
  5. package/dist/__mocks__/version.d.ts +7 -0
  6. package/dist/__mocks__/version.d.ts.map +1 -0
  7. package/dist/__mocks__/version.js +7 -0
  8. package/dist/__mocks__/version.js.map +1 -0
  9. package/dist/__tests__/client-href.test.d.ts +2 -0
  10. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  11. package/dist/__tests__/client-href.test.js +74 -0
  12. package/dist/__tests__/client-href.test.js.map +1 -0
  13. package/dist/__tests__/component-utils.test.d.ts +2 -0
  14. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  15. package/dist/__tests__/component-utils.test.js +51 -0
  16. package/dist/__tests__/component-utils.test.js.map +1 -0
  17. package/dist/__tests__/event-controller.test.d.ts +2 -0
  18. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  19. package/dist/__tests__/event-controller.test.js +538 -0
  20. package/dist/__tests__/event-controller.test.js.map +1 -0
  21. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.js +374 -0
  24. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  25. package/dist/__tests__/match-result.test.d.ts +2 -0
  26. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  27. package/dist/__tests__/match-result.test.js +154 -0
  28. package/dist/__tests__/match-result.test.js.map +1 -0
  29. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  30. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  31. package/dist/__tests__/navigation-store.test.js +440 -0
  32. package/dist/__tests__/navigation-store.test.js.map +1 -0
  33. package/dist/__tests__/partial-update.test.d.ts +2 -0
  34. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  35. package/dist/__tests__/partial-update.test.js +1009 -0
  36. package/dist/__tests__/partial-update.test.js.map +1 -0
  37. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  38. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  39. package/dist/__tests__/reverse-types.test.js +656 -0
  40. package/dist/__tests__/reverse-types.test.js.map +1 -0
  41. package/dist/__tests__/route-definition.test.d.ts +2 -0
  42. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  43. package/dist/__tests__/route-definition.test.js +55 -0
  44. package/dist/__tests__/route-definition.test.js.map +1 -0
  45. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  46. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  47. package/dist/__tests__/router-helpers.test.js +377 -0
  48. package/dist/__tests__/router-helpers.test.js.map +1 -0
  49. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.js +426 -0
  52. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  53. package/dist/__tests__/router-integration.test.d.ts +2 -0
  54. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/router-integration.test.js +1051 -0
  56. package/dist/__tests__/router-integration.test.js.map +1 -0
  57. package/dist/__tests__/search-params.test.d.ts +5 -0
  58. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  59. package/dist/__tests__/search-params.test.js +306 -0
  60. package/dist/__tests__/search-params.test.js.map +1 -0
  61. package/dist/__tests__/segment-system.test.d.ts +2 -0
  62. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  63. package/dist/__tests__/segment-system.test.js +627 -0
  64. package/dist/__tests__/segment-system.test.js.map +1 -0
  65. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.js +63 -0
  68. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  69. package/dist/__tests__/urls.test.d.ts +2 -0
  70. package/dist/__tests__/urls.test.d.ts.map +1 -0
  71. package/dist/__tests__/urls.test.js +421 -0
  72. package/dist/__tests__/urls.test.js.map +1 -0
  73. package/dist/__tests__/use-mount.test.d.ts +2 -0
  74. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  75. package/dist/__tests__/use-mount.test.js +35 -0
  76. package/dist/__tests__/use-mount.test.js.map +1 -0
  77. package/dist/bin/rango.d.ts +2 -0
  78. package/dist/bin/rango.d.ts.map +1 -0
  79. package/dist/bin/rango.js +7 -2
  80. package/dist/bin/rango.js.map +1 -0
  81. package/dist/browser/event-controller.d.ts +191 -0
  82. package/dist/browser/event-controller.d.ts.map +1 -0
  83. package/dist/browser/event-controller.js +559 -0
  84. package/dist/browser/event-controller.js.map +1 -0
  85. package/dist/browser/index.d.ts +2 -0
  86. package/dist/browser/index.d.ts.map +1 -0
  87. package/dist/browser/index.js +14 -0
  88. package/dist/browser/index.js.map +1 -0
  89. package/dist/browser/link-interceptor.d.ts +38 -0
  90. package/dist/browser/link-interceptor.d.ts.map +1 -0
  91. package/dist/browser/link-interceptor.js +99 -0
  92. package/dist/browser/link-interceptor.js.map +1 -0
  93. package/dist/browser/logging.d.ts +10 -0
  94. package/dist/browser/logging.d.ts.map +1 -0
  95. package/dist/browser/logging.js +29 -0
  96. package/dist/browser/logging.js.map +1 -0
  97. package/dist/browser/lru-cache.d.ts +17 -0
  98. package/dist/browser/lru-cache.d.ts.map +1 -0
  99. package/dist/browser/lru-cache.js +50 -0
  100. package/dist/browser/lru-cache.js.map +1 -0
  101. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  102. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  103. package/dist/browser/merge-segment-loaders.js +102 -0
  104. package/dist/browser/merge-segment-loaders.js.map +1 -0
  105. package/dist/browser/navigation-bridge.d.ts +102 -0
  106. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  107. package/dist/browser/navigation-bridge.js +708 -0
  108. package/dist/browser/navigation-bridge.js.map +1 -0
  109. package/dist/browser/navigation-client.d.ts +25 -0
  110. package/dist/browser/navigation-client.d.ts.map +1 -0
  111. package/dist/browser/navigation-client.js +157 -0
  112. package/dist/browser/navigation-client.js.map +1 -0
  113. package/dist/browser/navigation-store.d.ts +101 -0
  114. package/dist/browser/navigation-store.d.ts.map +1 -0
  115. package/dist/browser/navigation-store.js +625 -0
  116. package/dist/browser/navigation-store.js.map +1 -0
  117. package/dist/browser/partial-update.d.ts +75 -0
  118. package/dist/browser/partial-update.d.ts.map +1 -0
  119. package/dist/browser/partial-update.js +426 -0
  120. package/dist/browser/partial-update.js.map +1 -0
  121. package/dist/browser/react/Link.d.ts +86 -0
  122. package/dist/browser/react/Link.d.ts.map +1 -0
  123. package/dist/browser/react/Link.js +128 -0
  124. package/dist/browser/react/Link.js.map +1 -0
  125. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  126. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  127. package/dist/browser/react/NavigationProvider.js +216 -0
  128. package/dist/browser/react/NavigationProvider.js.map +1 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.js +57 -0
  132. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  133. package/dist/browser/react/context.d.ts +46 -0
  134. package/dist/browser/react/context.d.ts.map +1 -0
  135. package/dist/browser/react/context.js +10 -0
  136. package/dist/browser/react/context.js.map +1 -0
  137. package/dist/browser/react/index.d.ts +11 -0
  138. package/dist/browser/react/index.d.ts.map +1 -0
  139. package/dist/browser/react/index.js +22 -0
  140. package/dist/browser/react/index.js.map +1 -0
  141. package/dist/browser/react/location-state-shared.d.ts +63 -0
  142. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  143. package/dist/browser/react/location-state-shared.js +81 -0
  144. package/dist/browser/react/location-state-shared.js.map +1 -0
  145. package/dist/browser/react/location-state.d.ts +23 -0
  146. package/dist/browser/react/location-state.d.ts.map +1 -0
  147. package/dist/browser/react/location-state.js +29 -0
  148. package/dist/browser/react/location-state.js.map +1 -0
  149. package/dist/browser/react/mount-context.d.ts +24 -0
  150. package/dist/browser/react/mount-context.d.ts.map +1 -0
  151. package/dist/browser/react/mount-context.js +24 -0
  152. package/dist/browser/react/mount-context.js.map +1 -0
  153. package/dist/browser/react/use-action.d.ts +64 -0
  154. package/dist/browser/react/use-action.d.ts.map +1 -0
  155. package/dist/browser/react/use-action.js +134 -0
  156. package/dist/browser/react/use-action.js.map +1 -0
  157. package/dist/browser/react/use-client-cache.d.ts +41 -0
  158. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  159. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  160. package/dist/browser/react/use-client-cache.js.map +1 -0
  161. package/dist/browser/react/use-handle.d.ts +31 -0
  162. package/dist/browser/react/use-handle.d.ts.map +1 -0
  163. package/dist/browser/react/use-handle.js +144 -0
  164. package/dist/browser/react/use-handle.js.map +1 -0
  165. package/dist/browser/react/use-href.d.ts +33 -0
  166. package/dist/browser/react/use-href.d.ts.map +1 -0
  167. package/dist/browser/react/use-href.js +39 -0
  168. package/dist/browser/react/use-href.js.map +1 -0
  169. package/dist/browser/react/use-link-status.d.ts +37 -0
  170. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  171. package/dist/browser/react/use-link-status.js +99 -0
  172. package/dist/browser/react/use-link-status.js.map +1 -0
  173. package/dist/browser/react/use-mount.d.ts +25 -0
  174. package/dist/browser/react/use-mount.d.ts.map +1 -0
  175. package/dist/browser/react/use-mount.js +30 -0
  176. package/dist/browser/react/use-mount.js.map +1 -0
  177. package/dist/browser/react/use-navigation.d.ts +27 -0
  178. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  179. package/dist/browser/react/use-navigation.js +87 -0
  180. package/dist/browser/react/use-navigation.js.map +1 -0
  181. package/dist/browser/react/use-segments.d.ts +38 -0
  182. package/dist/browser/react/use-segments.d.ts.map +1 -0
  183. package/dist/browser/react/use-segments.js +130 -0
  184. package/dist/browser/react/use-segments.js.map +1 -0
  185. package/dist/browser/request-controller.d.ts +26 -0
  186. package/dist/browser/request-controller.d.ts.map +1 -0
  187. package/dist/browser/request-controller.js +147 -0
  188. package/dist/browser/request-controller.js.map +1 -0
  189. package/dist/browser/rsc-router.d.ts +129 -0
  190. package/dist/browser/rsc-router.d.ts.map +1 -0
  191. package/dist/browser/rsc-router.js +195 -0
  192. package/dist/browser/rsc-router.js.map +1 -0
  193. package/dist/browser/scroll-restoration.d.ts +93 -0
  194. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  195. package/dist/browser/scroll-restoration.js +321 -0
  196. package/dist/browser/scroll-restoration.js.map +1 -0
  197. package/dist/browser/segment-structure-assert.d.ts +17 -0
  198. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  199. package/dist/browser/segment-structure-assert.js +59 -0
  200. package/dist/browser/segment-structure-assert.js.map +1 -0
  201. package/dist/browser/server-action-bridge.d.ts +26 -0
  202. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  203. package/dist/browser/server-action-bridge.js +668 -0
  204. package/dist/browser/server-action-bridge.js.map +1 -0
  205. package/dist/browser/shallow.d.ts +12 -0
  206. package/dist/browser/shallow.d.ts.map +1 -0
  207. package/dist/browser/shallow.js +34 -0
  208. package/dist/browser/shallow.js.map +1 -0
  209. package/dist/browser/types.d.ts +369 -0
  210. package/dist/browser/types.d.ts.map +1 -0
  211. package/dist/browser/types.js +2 -0
  212. package/dist/browser/types.js.map +1 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.js +237 -0
  216. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  220. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  224. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  229. package/dist/build/generate-manifest.d.ts +81 -0
  230. package/dist/build/generate-manifest.d.ts.map +1 -0
  231. package/dist/build/generate-manifest.js +276 -0
  232. package/dist/build/generate-manifest.js.map +1 -0
  233. package/dist/build/generate-route-types.d.ts +115 -0
  234. package/dist/build/generate-route-types.d.ts.map +1 -0
  235. package/dist/build/generate-route-types.js +740 -0
  236. package/dist/build/generate-route-types.js.map +1 -0
  237. package/dist/build/index.d.ts +21 -0
  238. package/dist/build/index.d.ts.map +1 -0
  239. package/dist/build/index.js +21 -0
  240. package/dist/build/index.js.map +1 -0
  241. package/dist/build/route-trie.d.ts +71 -0
  242. package/dist/build/route-trie.d.ts.map +1 -0
  243. package/dist/build/route-trie.js +175 -0
  244. package/dist/build/route-trie.js.map +1 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  248. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.js +345 -0
  252. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.js +367 -0
  260. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  261. package/dist/cache/cache-scope.d.ts +102 -0
  262. package/dist/cache/cache-scope.d.ts.map +1 -0
  263. package/dist/cache/cache-scope.js +440 -0
  264. package/dist/cache/cache-scope.js.map +1 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.js +242 -0
  272. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  273. package/dist/cache/cf/index.d.ts +14 -0
  274. package/dist/cache/cf/index.d.ts.map +1 -0
  275. package/dist/cache/cf/index.js +17 -0
  276. package/dist/cache/cf/index.js.map +1 -0
  277. package/dist/cache/document-cache.d.ts +64 -0
  278. package/dist/cache/document-cache.d.ts.map +1 -0
  279. package/dist/cache/document-cache.js +228 -0
  280. package/dist/cache/document-cache.js.map +1 -0
  281. package/dist/cache/index.d.ts +19 -0
  282. package/dist/cache/index.d.ts.map +1 -0
  283. package/dist/cache/index.js +21 -0
  284. package/dist/cache/index.js.map +1 -0
  285. package/dist/cache/memory-segment-store.d.ts +110 -0
  286. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  287. package/dist/cache/memory-segment-store.js +117 -0
  288. package/dist/cache/memory-segment-store.js.map +1 -0
  289. package/dist/cache/memory-store.d.ts +41 -0
  290. package/dist/cache/memory-store.d.ts.map +1 -0
  291. package/dist/cache/memory-store.js +191 -0
  292. package/dist/cache/memory-store.js.map +1 -0
  293. package/dist/cache/types.d.ts +317 -0
  294. package/dist/cache/types.d.ts.map +1 -0
  295. package/dist/cache/types.js +12 -0
  296. package/dist/cache/types.js.map +1 -0
  297. package/dist/client.d.ts +248 -0
  298. package/dist/client.d.ts.map +1 -0
  299. package/dist/client.js +367 -0
  300. package/dist/client.js.map +1 -0
  301. package/dist/client.rsc.d.ts +26 -0
  302. package/dist/client.rsc.d.ts.map +1 -0
  303. package/dist/client.rsc.js +46 -0
  304. package/dist/client.rsc.js.map +1 -0
  305. package/dist/component-utils.d.ts +36 -0
  306. package/dist/component-utils.d.ts.map +1 -0
  307. package/dist/component-utils.js +61 -0
  308. package/dist/component-utils.js.map +1 -0
  309. package/dist/components/DefaultDocument.d.ts +13 -0
  310. package/dist/components/DefaultDocument.d.ts.map +1 -0
  311. package/dist/components/DefaultDocument.js +15 -0
  312. package/dist/components/DefaultDocument.js.map +1 -0
  313. package/dist/debug.d.ts +58 -0
  314. package/dist/debug.d.ts.map +1 -0
  315. package/dist/debug.js +157 -0
  316. package/dist/debug.js.map +1 -0
  317. package/dist/default-error-boundary.d.ts +11 -0
  318. package/dist/default-error-boundary.d.ts.map +1 -0
  319. package/dist/default-error-boundary.js +45 -0
  320. package/dist/default-error-boundary.js.map +1 -0
  321. package/dist/deps/browser.d.ts +2 -0
  322. package/dist/deps/browser.d.ts.map +1 -0
  323. package/dist/deps/browser.js +3 -0
  324. package/dist/deps/browser.js.map +1 -0
  325. package/dist/deps/html-stream-client.d.ts +2 -0
  326. package/dist/deps/html-stream-client.d.ts.map +1 -0
  327. package/dist/deps/html-stream-client.js +3 -0
  328. package/dist/deps/html-stream-client.js.map +1 -0
  329. package/dist/deps/html-stream-server.d.ts +2 -0
  330. package/dist/deps/html-stream-server.d.ts.map +1 -0
  331. package/dist/deps/html-stream-server.js +3 -0
  332. package/dist/deps/html-stream-server.js.map +1 -0
  333. package/dist/deps/rsc.d.ts +2 -0
  334. package/dist/deps/rsc.d.ts.map +1 -0
  335. package/dist/deps/rsc.js +4 -0
  336. package/dist/deps/rsc.js.map +1 -0
  337. package/dist/deps/ssr.d.ts +2 -0
  338. package/dist/deps/ssr.d.ts.map +1 -0
  339. package/dist/deps/ssr.js +3 -0
  340. package/dist/deps/ssr.js.map +1 -0
  341. package/dist/errors.d.ts +174 -0
  342. package/dist/errors.d.ts.map +1 -0
  343. package/dist/errors.js +241 -0
  344. package/dist/errors.js.map +1 -0
  345. package/dist/handle.d.ts +78 -0
  346. package/dist/handle.d.ts.map +1 -0
  347. package/dist/handle.js +82 -0
  348. package/dist/handle.js.map +1 -0
  349. package/dist/handles/MetaTags.d.ts +14 -0
  350. package/dist/handles/MetaTags.d.ts.map +1 -0
  351. package/dist/handles/MetaTags.js +136 -0
  352. package/dist/handles/MetaTags.js.map +1 -0
  353. package/dist/handles/index.d.ts +6 -0
  354. package/dist/handles/index.d.ts.map +1 -0
  355. package/dist/handles/index.js +6 -0
  356. package/dist/handles/index.js.map +1 -0
  357. package/dist/handles/meta.d.ts +39 -0
  358. package/dist/handles/meta.d.ts.map +1 -0
  359. package/dist/handles/meta.js +202 -0
  360. package/dist/handles/meta.js.map +1 -0
  361. package/dist/host/__tests__/errors.test.d.ts +2 -0
  362. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  363. package/dist/host/__tests__/errors.test.js +76 -0
  364. package/dist/host/__tests__/errors.test.js.map +1 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  373. package/dist/host/__tests__/router.test.d.ts +2 -0
  374. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  375. package/dist/host/__tests__/router.test.js +241 -0
  376. package/dist/host/__tests__/router.test.js.map +1 -0
  377. package/dist/host/__tests__/testing.test.d.ts +2 -0
  378. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  379. package/dist/host/__tests__/testing.test.js +64 -0
  380. package/dist/host/__tests__/testing.test.js.map +1 -0
  381. package/dist/host/__tests__/utils.test.d.ts +2 -0
  382. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  383. package/dist/host/__tests__/utils.test.js +29 -0
  384. package/dist/host/__tests__/utils.test.js.map +1 -0
  385. package/dist/host/cookie-handler.d.ts +34 -0
  386. package/dist/host/cookie-handler.d.ts.map +1 -0
  387. package/dist/host/cookie-handler.js +124 -0
  388. package/dist/host/cookie-handler.js.map +1 -0
  389. package/dist/host/errors.d.ts +56 -0
  390. package/dist/host/errors.d.ts.map +1 -0
  391. package/dist/host/errors.js +79 -0
  392. package/dist/host/errors.js.map +1 -0
  393. package/dist/host/index.d.ts +29 -0
  394. package/dist/host/index.d.ts.map +1 -0
  395. package/dist/host/index.js +32 -0
  396. package/dist/host/index.js.map +1 -0
  397. package/dist/host/pattern-matcher.d.ts +36 -0
  398. package/dist/host/pattern-matcher.d.ts.map +1 -0
  399. package/dist/host/pattern-matcher.js +172 -0
  400. package/dist/host/pattern-matcher.js.map +1 -0
  401. package/dist/host/router.d.ts +26 -0
  402. package/dist/host/router.d.ts.map +1 -0
  403. package/dist/host/router.js +218 -0
  404. package/dist/host/router.js.map +1 -0
  405. package/dist/host/testing.d.ts +36 -0
  406. package/dist/host/testing.d.ts.map +1 -0
  407. package/dist/host/testing.js +55 -0
  408. package/dist/host/testing.js.map +1 -0
  409. package/dist/host/types.d.ts +115 -0
  410. package/dist/host/types.d.ts.map +1 -0
  411. package/dist/host/types.js +7 -0
  412. package/dist/host/types.js.map +1 -0
  413. package/dist/host/utils.d.ts +21 -0
  414. package/dist/host/utils.d.ts.map +1 -0
  415. package/dist/host/utils.js +23 -0
  416. package/dist/host/utils.js.map +1 -0
  417. package/dist/href-client.d.ts +131 -0
  418. package/dist/href-client.d.ts.map +1 -0
  419. package/dist/href-client.js +64 -0
  420. package/dist/href-client.js.map +1 -0
  421. package/dist/href-context.d.ts +29 -0
  422. package/dist/href-context.d.ts.map +1 -0
  423. package/dist/href-context.js +21 -0
  424. package/dist/href-context.js.map +1 -0
  425. package/dist/index.d.ts +73 -0
  426. package/dist/index.d.ts.map +1 -0
  427. package/dist/index.js +91 -0
  428. package/dist/index.js.map +1 -0
  429. package/dist/index.rsc.d.ts +32 -0
  430. package/dist/index.rsc.d.ts.map +1 -0
  431. package/dist/index.rsc.js +40 -0
  432. package/dist/index.rsc.js.map +1 -0
  433. package/dist/internal-debug.d.ts +2 -0
  434. package/dist/internal-debug.d.ts.map +1 -0
  435. package/dist/internal-debug.js +5 -0
  436. package/dist/internal-debug.js.map +1 -0
  437. package/dist/loader.d.ts +14 -0
  438. package/dist/loader.d.ts.map +1 -0
  439. package/dist/loader.js +20 -0
  440. package/dist/loader.js.map +1 -0
  441. package/dist/loader.rsc.d.ts +19 -0
  442. package/dist/loader.rsc.d.ts.map +1 -0
  443. package/dist/loader.rsc.js +99 -0
  444. package/dist/loader.rsc.js.map +1 -0
  445. package/dist/network-error-thrower.d.ts +17 -0
  446. package/dist/network-error-thrower.d.ts.map +1 -0
  447. package/dist/network-error-thrower.js +14 -0
  448. package/dist/network-error-thrower.js.map +1 -0
  449. package/dist/outlet-context.d.ts +13 -0
  450. package/dist/outlet-context.d.ts.map +1 -0
  451. package/dist/outlet-context.js +3 -0
  452. package/dist/outlet-context.js.map +1 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  456. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  457. package/dist/prerender/param-hash.d.ts +16 -0
  458. package/dist/prerender/param-hash.d.ts.map +1 -0
  459. package/dist/prerender/param-hash.js +36 -0
  460. package/dist/prerender/param-hash.js.map +1 -0
  461. package/dist/prerender/store.d.ts +38 -0
  462. package/dist/prerender/store.d.ts.map +1 -0
  463. package/dist/prerender/store.js +61 -0
  464. package/dist/prerender/store.js.map +1 -0
  465. package/dist/prerender.d.ts +66 -0
  466. package/dist/prerender.d.ts.map +1 -0
  467. package/dist/prerender.js +57 -0
  468. package/dist/prerender.js.map +1 -0
  469. package/dist/reverse.d.ts +196 -0
  470. package/dist/reverse.d.ts.map +1 -0
  471. package/dist/reverse.js +78 -0
  472. package/dist/reverse.js.map +1 -0
  473. package/dist/root-error-boundary.d.ts +33 -0
  474. package/dist/root-error-boundary.d.ts.map +1 -0
  475. package/dist/root-error-boundary.js +165 -0
  476. package/dist/root-error-boundary.js.map +1 -0
  477. package/dist/route-content-wrapper.d.ts +46 -0
  478. package/dist/route-content-wrapper.d.ts.map +1 -0
  479. package/dist/route-content-wrapper.js +77 -0
  480. package/dist/route-content-wrapper.js.map +1 -0
  481. package/dist/route-definition.d.ts +421 -0
  482. package/dist/route-definition.d.ts.map +1 -0
  483. package/dist/route-definition.js +868 -0
  484. package/dist/route-definition.js.map +1 -0
  485. package/dist/route-map-builder.d.ts +155 -0
  486. package/dist/route-map-builder.d.ts.map +1 -0
  487. package/dist/route-map-builder.js +237 -0
  488. package/dist/route-map-builder.js.map +1 -0
  489. package/dist/route-types.d.ts +165 -0
  490. package/dist/route-types.d.ts.map +1 -0
  491. package/dist/route-types.js +7 -0
  492. package/dist/route-types.js.map +1 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.js +65 -0
  496. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  501. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  502. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  503. package/dist/router/__tests__/match-context.test.js +92 -0
  504. package/dist/router/__tests__/match-context.test.js.map +1 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  508. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  509. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  510. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  511. package/dist/router/__tests__/match-result.test.js +457 -0
  512. package/dist/router/__tests__/match-result.test.js.map +1 -0
  513. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  514. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  515. package/dist/router/__tests__/on-error.test.js +678 -0
  516. package/dist/router/__tests__/on-error.test.js.map +1 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  520. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  525. package/dist/router/error-handling.d.ts +77 -0
  526. package/dist/router/error-handling.d.ts.map +1 -0
  527. package/dist/router/error-handling.js +202 -0
  528. package/dist/router/error-handling.js.map +1 -0
  529. package/dist/router/handler-context.d.ts +20 -0
  530. package/dist/router/handler-context.d.ts.map +1 -0
  531. package/dist/router/handler-context.js +198 -0
  532. package/dist/router/handler-context.js.map +1 -0
  533. package/dist/router/intercept-resolution.d.ts +66 -0
  534. package/dist/router/intercept-resolution.d.ts.map +1 -0
  535. package/dist/router/intercept-resolution.js +246 -0
  536. package/dist/router/intercept-resolution.js.map +1 -0
  537. package/dist/router/loader-resolution.d.ts +64 -0
  538. package/dist/router/loader-resolution.d.ts.map +1 -0
  539. package/dist/router/loader-resolution.js +284 -0
  540. package/dist/router/loader-resolution.js.map +1 -0
  541. package/dist/router/logging.d.ts +15 -0
  542. package/dist/router/logging.d.ts.map +1 -0
  543. package/dist/router/logging.js +99 -0
  544. package/dist/router/logging.js.map +1 -0
  545. package/dist/router/manifest.d.ts +22 -0
  546. package/dist/router/manifest.d.ts.map +1 -0
  547. package/dist/router/manifest.js +181 -0
  548. package/dist/router/manifest.js.map +1 -0
  549. package/dist/router/match-api.d.ts +35 -0
  550. package/dist/router/match-api.d.ts.map +1 -0
  551. package/dist/router/match-api.js +406 -0
  552. package/dist/router/match-api.js.map +1 -0
  553. package/dist/router/match-context.d.ts +206 -0
  554. package/dist/router/match-context.d.ts.map +1 -0
  555. package/dist/router/match-context.js +17 -0
  556. package/dist/router/match-context.js.map +1 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.js +75 -0
  560. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.js +257 -0
  564. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  565. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  566. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  567. package/dist/router/match-middleware/cache-store.js +108 -0
  568. package/dist/router/match-middleware/cache-store.js.map +1 -0
  569. package/dist/router/match-middleware/index.d.ts +81 -0
  570. package/dist/router/match-middleware/index.d.ts.map +1 -0
  571. package/dist/router/match-middleware/index.js +80 -0
  572. package/dist/router/match-middleware/index.js.map +1 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  576. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.js +53 -0
  580. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  581. package/dist/router/match-pipelines.d.ts +147 -0
  582. package/dist/router/match-pipelines.d.ts.map +1 -0
  583. package/dist/router/match-pipelines.js +82 -0
  584. package/dist/router/match-pipelines.js.map +1 -0
  585. package/dist/router/match-result.d.ts +126 -0
  586. package/dist/router/match-result.d.ts.map +1 -0
  587. package/dist/router/match-result.js +93 -0
  588. package/dist/router/match-result.js.map +1 -0
  589. package/dist/router/metrics.d.ts +20 -0
  590. package/dist/router/metrics.d.ts.map +1 -0
  591. package/dist/router/metrics.js +47 -0
  592. package/dist/router/metrics.js.map +1 -0
  593. package/dist/router/middleware.d.ts +249 -0
  594. package/dist/router/middleware.d.ts.map +1 -0
  595. package/dist/router/middleware.js +434 -0
  596. package/dist/router/middleware.js.map +1 -0
  597. package/dist/router/middleware.test.d.ts +2 -0
  598. package/dist/router/middleware.test.d.ts.map +1 -0
  599. package/dist/router/middleware.test.js +816 -0
  600. package/dist/router/middleware.test.js.map +1 -0
  601. package/dist/router/pattern-matching.d.ts +149 -0
  602. package/dist/router/pattern-matching.d.ts.map +1 -0
  603. package/dist/router/pattern-matching.js +349 -0
  604. package/dist/router/pattern-matching.js.map +1 -0
  605. package/dist/router/revalidation.d.ts +44 -0
  606. package/dist/router/revalidation.d.ts.map +1 -0
  607. package/dist/router/revalidation.js +147 -0
  608. package/dist/router/revalidation.js.map +1 -0
  609. package/dist/router/router-context.d.ts +135 -0
  610. package/dist/router/router-context.d.ts.map +1 -0
  611. package/dist/router/router-context.js +36 -0
  612. package/dist/router/router-context.js.map +1 -0
  613. package/dist/router/segment-resolution.d.ts +127 -0
  614. package/dist/router/segment-resolution.d.ts.map +1 -0
  615. package/dist/router/segment-resolution.js +919 -0
  616. package/dist/router/segment-resolution.js.map +1 -0
  617. package/dist/router/trie-matching.d.ts +40 -0
  618. package/dist/router/trie-matching.d.ts.map +1 -0
  619. package/dist/router/trie-matching.js +127 -0
  620. package/dist/router/trie-matching.js.map +1 -0
  621. package/dist/router/types.d.ts +136 -0
  622. package/dist/router/types.d.ts.map +1 -0
  623. package/dist/router/types.js +7 -0
  624. package/dist/router/types.js.map +1 -0
  625. package/dist/router.d.ts +753 -0
  626. package/dist/router.d.ts.map +1 -0
  627. package/dist/router.gen.d.ts +6 -0
  628. package/dist/router.gen.d.ts.map +1 -0
  629. package/dist/router.gen.js +6 -0
  630. package/dist/router.gen.js.map +1 -0
  631. package/dist/router.js +1304 -0
  632. package/dist/router.js.map +1 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.js +140 -0
  636. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  637. package/dist/rsc/handler.d.ts +45 -0
  638. package/dist/rsc/handler.d.ts.map +1 -0
  639. package/dist/rsc/handler.js +1172 -0
  640. package/dist/rsc/handler.js.map +1 -0
  641. package/dist/rsc/helpers.d.ts +16 -0
  642. package/dist/rsc/helpers.d.ts.map +1 -0
  643. package/dist/rsc/helpers.js +55 -0
  644. package/dist/rsc/helpers.js.map +1 -0
  645. package/dist/rsc/index.d.ts +22 -0
  646. package/dist/rsc/index.d.ts.map +1 -0
  647. package/dist/rsc/index.js +23 -0
  648. package/dist/rsc/index.js.map +1 -0
  649. package/dist/rsc/nonce.d.ts +9 -0
  650. package/dist/rsc/nonce.d.ts.map +1 -0
  651. package/dist/rsc/nonce.js +18 -0
  652. package/dist/rsc/nonce.js.map +1 -0
  653. package/dist/rsc/types.d.ts +206 -0
  654. package/dist/rsc/types.d.ts.map +1 -0
  655. package/dist/rsc/types.js +8 -0
  656. package/dist/rsc/types.js.map +1 -0
  657. package/dist/search-params.d.ts +103 -0
  658. package/dist/search-params.d.ts.map +1 -0
  659. package/dist/search-params.js +74 -0
  660. package/dist/search-params.js.map +1 -0
  661. package/dist/segment-system.d.ts +75 -0
  662. package/dist/segment-system.d.ts.map +1 -0
  663. package/dist/segment-system.js +336 -0
  664. package/dist/segment-system.js.map +1 -0
  665. package/dist/server/context.d.ts +245 -0
  666. package/dist/server/context.d.ts.map +1 -0
  667. package/dist/server/context.js +197 -0
  668. package/dist/server/context.js.map +1 -0
  669. package/dist/server/fetchable-loader-store.d.ts +18 -0
  670. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  671. package/dist/server/fetchable-loader-store.js +18 -0
  672. package/dist/server/fetchable-loader-store.js.map +1 -0
  673. package/dist/server/handle-store.d.ts +85 -0
  674. package/dist/server/handle-store.d.ts.map +1 -0
  675. package/dist/server/handle-store.js +142 -0
  676. package/dist/server/handle-store.js.map +1 -0
  677. package/dist/server/loader-registry.d.ts +55 -0
  678. package/dist/server/loader-registry.d.ts.map +1 -0
  679. package/dist/server/loader-registry.js +132 -0
  680. package/dist/server/loader-registry.js.map +1 -0
  681. package/dist/server/request-context.d.ts +226 -0
  682. package/dist/server/request-context.d.ts.map +1 -0
  683. package/dist/server/request-context.js +290 -0
  684. package/dist/server/request-context.js.map +1 -0
  685. package/dist/server/root-layout.d.ts +4 -0
  686. package/dist/server/root-layout.d.ts.map +1 -0
  687. package/dist/server/root-layout.js +5 -0
  688. package/dist/server/root-layout.js.map +1 -0
  689. package/dist/server.d.ts +15 -0
  690. package/dist/server.d.ts.map +1 -0
  691. package/dist/server.js +20 -0
  692. package/dist/server.js.map +1 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  697. package/dist/ssr/index.d.ts +98 -0
  698. package/dist/ssr/index.d.ts.map +1 -0
  699. package/dist/ssr/index.js +158 -0
  700. package/dist/ssr/index.js.map +1 -0
  701. package/dist/static-handler.d.ts +50 -0
  702. package/dist/static-handler.d.ts.map +1 -0
  703. package/dist/static-handler.gen.d.ts +5 -0
  704. package/dist/static-handler.gen.d.ts.map +1 -0
  705. package/dist/static-handler.gen.js +5 -0
  706. package/dist/static-handler.gen.js.map +1 -0
  707. package/dist/static-handler.js +29 -0
  708. package/dist/static-handler.js.map +1 -0
  709. package/dist/testing/vitest.js +82 -0
  710. package/dist/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +47 -6
  797. package/dist/vite/index.js.bak +5448 -0
  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/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +61 -21
  809. package/skills/caching/SKILL.md +2 -1
  810. package/skills/hooks/SKILL.md +38 -27
  811. package/skills/host-router/SKILL.md +16 -2
  812. package/skills/intercept/SKILL.md +4 -2
  813. package/skills/layout/SKILL.md +11 -6
  814. package/skills/loader/SKILL.md +6 -2
  815. package/skills/middleware/SKILL.md +4 -2
  816. package/skills/migrate-nextjs/SKILL.md +3 -1
  817. package/skills/parallel/SKILL.md +9 -4
  818. package/skills/rango/SKILL.md +12 -0
  819. package/skills/route/SKILL.md +4 -2
  820. package/skills/testing/SKILL.md +129 -0
  821. package/skills/testing/bindings.md +89 -0
  822. package/skills/testing/cache-prerender.md +98 -0
  823. package/skills/testing/client-components.md +122 -0
  824. package/skills/testing/e2e-parity.md +125 -0
  825. package/skills/testing/flight.md +89 -0
  826. package/skills/testing/handles.md +129 -0
  827. package/skills/testing/loader.md +128 -0
  828. package/skills/testing/middleware.md +99 -0
  829. package/skills/testing/render-handler.md +118 -0
  830. package/skills/testing/response-routes.md +95 -0
  831. package/skills/testing/reverse-and-types.md +84 -0
  832. package/skills/testing/server-actions.md +107 -0
  833. package/skills/testing/server-tree.md +128 -0
  834. package/skills/testing/setup.md +120 -0
  835. package/src/browser/action-fence.ts +37 -0
  836. package/src/browser/cookie-name.ts +140 -0
  837. package/src/browser/invalidate-client-cache.ts +52 -0
  838. package/src/browser/navigation-bridge.ts +14 -1
  839. package/src/browser/navigation-client.ts +14 -1
  840. package/src/browser/navigation-store-handle.ts +39 -0
  841. package/src/browser/navigation-store.ts +26 -12
  842. package/src/browser/prefetch/fetch.ts +7 -0
  843. package/src/browser/rango-state.ts +176 -97
  844. package/src/browser/react/index.ts +0 -6
  845. package/src/browser/rsc-router.tsx +12 -4
  846. package/src/browser/server-action-bridge.ts +77 -15
  847. package/src/browser/types.ts +7 -1
  848. package/src/cache/cf/cf-cache-store.ts +22 -1
  849. package/src/cache/document-cache.ts +11 -0
  850. package/src/cache/memory-segment-store.ts +6 -0
  851. package/src/client.rsc.tsx +1 -1
  852. package/src/client.tsx +0 -6
  853. package/src/component-utils.ts +19 -0
  854. package/src/handle.ts +29 -9
  855. package/src/host/testing.ts +43 -14
  856. package/src/index.rsc.ts +22 -1
  857. package/src/index.ts +31 -1
  858. package/src/loader.rsc.ts +24 -3
  859. package/src/loader.ts +16 -2
  860. package/src/prerender.ts +24 -3
  861. package/src/router/basename.ts +14 -0
  862. package/src/router/match-handlers.ts +62 -20
  863. package/src/router/prerender-match.ts +4 -0
  864. package/src/router/router-interfaces.ts +7 -0
  865. package/src/router/router-options.ts +30 -0
  866. package/src/router/state-cookie-name.ts +33 -0
  867. package/src/router/telemetry.ts +99 -0
  868. package/src/router.ts +36 -7
  869. package/src/rsc/handler.ts +3 -0
  870. package/src/rsc/helpers.ts +19 -0
  871. package/src/rsc/progressive-enhancement.ts +2 -0
  872. package/src/rsc/rsc-rendering.ts +2 -0
  873. package/src/rsc/types.ts +2 -0
  874. package/src/runtime-env.ts +18 -0
  875. package/src/server/cookie-store.ts +52 -1
  876. package/src/server/request-context.ts +69 -0
  877. package/src/static-handler.ts +25 -3
  878. package/src/testing/cache-status.ts +166 -0
  879. package/src/testing/collect-handle.ts +63 -0
  880. package/src/testing/dispatch.ts +581 -0
  881. package/src/testing/dom.entry.ts +22 -0
  882. package/src/testing/e2e/fixture.ts +188 -0
  883. package/src/testing/e2e/index.ts +149 -0
  884. package/src/testing/e2e/matchers.ts +51 -0
  885. package/src/testing/e2e/page-helpers.ts +272 -0
  886. package/src/testing/e2e/parity.ts +387 -0
  887. package/src/testing/e2e/server.ts +195 -0
  888. package/src/testing/flight-matchers.ts +110 -0
  889. package/src/testing/flight-normalize.ts +38 -0
  890. package/src/testing/flight-runtime.d.ts +57 -0
  891. package/src/testing/flight-tree.ts +682 -0
  892. package/src/testing/flight.entry.ts +52 -0
  893. package/src/testing/flight.ts +234 -0
  894. package/src/testing/generated-routes.ts +223 -0
  895. package/src/testing/index.ts +119 -0
  896. package/src/testing/internal/context.ts +390 -0
  897. package/src/testing/internal/flight-client-globals.ts +30 -0
  898. package/src/testing/internal/seed-vars.ts +80 -0
  899. package/src/testing/render-handler.ts +360 -0
  900. package/src/testing/render-route.tsx +594 -0
  901. package/src/testing/run-loader.ts +474 -0
  902. package/src/testing/run-middleware.ts +231 -0
  903. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  904. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  905. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  906. package/src/testing/vitest-stubs/version.ts +5 -0
  907. package/src/testing/vitest.ts +305 -0
  908. package/src/types/global-namespace.ts +11 -1
  909. package/src/types/handler-context.ts +16 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rangojs/router",
3
- "version": "0.0.0-experimental.122",
3
+ "version": "0.0.0-experimental.124",
4
4
  "description": "Django-inspired RSC router with composable URL patterns",
5
5
  "keywords": [
6
6
  "react",
@@ -126,57 +126,97 @@
126
126
  "./host/testing": {
127
127
  "types": "./src/host/testing.ts",
128
128
  "default": "./src/host/testing.ts"
129
+ },
130
+ "./testing": {
131
+ "types": "./src/testing/index.ts",
132
+ "default": "./src/testing/index.ts"
133
+ },
134
+ "./testing/vitest": {
135
+ "types": "./src/testing/vitest.ts",
136
+ "default": "./dist/testing/vitest.js"
137
+ },
138
+ "./testing/dom": {
139
+ "types": "./src/testing/dom.entry.ts",
140
+ "default": "./src/testing/dom.entry.ts"
141
+ },
142
+ "./testing/e2e": {
143
+ "types": "./src/testing/e2e/index.ts",
144
+ "default": "./src/testing/e2e/index.ts"
145
+ },
146
+ "./testing/flight": {
147
+ "types": "./src/testing/flight.entry.ts",
148
+ "react-server": "./src/testing/flight.entry.ts",
149
+ "default": "./src/testing/flight.entry.ts"
150
+ },
151
+ "./testing/flight-matchers": {
152
+ "types": "./src/testing/flight-matchers.ts",
153
+ "default": "./src/testing/flight-matchers.ts"
129
154
  }
130
155
  },
131
156
  "publishConfig": {
132
157
  "access": "public",
133
158
  "tag": "experimental"
134
159
  },
135
- "scripts": {
136
- "build": "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && mkdir -p dist/vite/plugins && cp src/vite/plugins/cloudflare-protocol-loader-hook.mjs dist/vite/plugins/cloudflare-protocol-loader-hook.mjs && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
137
- "prepublishOnly": "pnpm build",
138
- "typecheck": "tsc --noEmit && tsc -p tsconfig.strict-check.json --noEmit && tsc -p tsconfig.augment-check.json --noEmit",
139
- "test": "playwright test",
140
- "test:ui": "playwright test --ui",
141
- "test:hmr-local": "playwright test --project=dev-warmup --project=hmr-routes --project=hmr-basename --project=hmr-prerender --no-deps --workers=1",
142
- "test:unit": "vitest run",
143
- "test:unit:watch": "vitest"
144
- },
145
160
  "dependencies": {
146
161
  "@types/debug": "^4.1.12",
147
162
  "@vitejs/plugin-rsc": "^0.5.26",
148
163
  "debug": "^4.4.1",
149
164
  "magic-string": "^0.30.17",
150
165
  "picomatch": "^4.0.3",
151
- "rsc-html-stream": "^0.0.7"
166
+ "rsc-html-stream": "^0.0.7",
167
+ "tinyexec": "^0.3.2"
152
168
  },
153
169
  "devDependencies": {
154
170
  "@playwright/test": "^1.49.1",
155
- "@shared/e2e": "workspace:*",
171
+ "@testing-library/dom": "^10.4.1",
172
+ "@testing-library/react": "^16.3.2",
156
173
  "@types/node": "^24.10.1",
157
- "@types/react": "catalog:",
158
- "@types/react-dom": "catalog:",
174
+ "@types/react": "^19.2.7",
175
+ "@types/react-dom": "^19.2.3",
159
176
  "esbuild": "^0.27.0",
177
+ "happy-dom": "^20.10.1",
160
178
  "jiti": "^2.6.1",
161
- "react": "catalog:",
162
- "react-dom": "catalog:",
163
- "tinyexec": "^0.3.2",
179
+ "react": "^19.2.6",
180
+ "react-dom": "^19.2.6",
164
181
  "typescript": "^5.3.0",
165
- "vitest": "^4.0.0"
182
+ "vitest": "^4.0.0",
183
+ "@shared/e2e": "0.0.1"
166
184
  },
167
185
  "peerDependencies": {
168
186
  "@cloudflare/vite-plugin": "^1.38.0",
187
+ "@playwright/test": "^1.49.1",
188
+ "@testing-library/react": ">=16",
169
189
  "@vitejs/plugin-rsc": "^0.5.26",
170
190
  "react": ">=19.2.6 <20",
171
191
  "react-dom": ">=19.2.6 <20",
172
- "vite": "^8.0.0"
192
+ "vite": "^8.0.0",
193
+ "vitest": ">=3"
173
194
  },
174
195
  "peerDependenciesMeta": {
175
196
  "@cloudflare/vite-plugin": {
176
197
  "optional": true
177
198
  },
199
+ "@playwright/test": {
200
+ "optional": true
201
+ },
202
+ "@testing-library/react": {
203
+ "optional": true
204
+ },
178
205
  "vite": {
179
206
  "optional": true
207
+ },
208
+ "vitest": {
209
+ "optional": true
180
210
  }
211
+ },
212
+ "scripts": {
213
+ "build": "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && mkdir -p dist/vite/plugins && cp src/vite/plugins/cloudflare-protocol-loader-hook.mjs dist/vite/plugins/cloudflare-protocol-loader-hook.mjs && pnpm dlx esbuild src/testing/vitest.ts --bundle --format=esm --outfile=dist/testing/vitest.js --platform=node --packages=external && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
214
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.strict-check.json --noEmit && tsc -p tsconfig.augment-check.json --noEmit",
215
+ "test": "playwright test",
216
+ "test:ui": "playwright test --ui",
217
+ "test:hmr-local": "playwright test --project=dev-warmup --project=hmr-routes --project=hmr-basename --project=hmr-prerender --no-deps --workers=1",
218
+ "test:unit": "vitest run",
219
+ "test:unit:watch": "vitest",
220
+ "test:unit:rsc": "vitest run --config vitest.rsc.config.ts"
181
221
  }
182
- }
222
+ }
@@ -471,6 +471,7 @@ cache({ store: checkoutCache }, () => [
471
471
  ```typescript
472
472
  import { urls } from "@rangojs/router";
473
473
  import { MemorySegmentCacheStore } from "@rangojs/router/cache";
474
+ import * as CartActions from "./actions/cart";
474
475
 
475
476
  // Custom store for checkout (short TTL)
476
477
  const checkoutCache = new MemorySegmentCacheStore({
@@ -499,7 +500,7 @@ export const urlpatterns = urls(({ path, layout, cache, loader, revalidate }) =>
499
500
  path("/shop/product/:slug", ProductPage, { name: "product" }, () => [
500
501
  loader(ProductLoader, () => [cache({ ttl: 120 })]),
501
502
  loader(CartLoader, () => [
502
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
503
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
503
504
  ]),
504
505
  ]),
505
506
  ]),
@@ -683,33 +683,44 @@ ProductState.delete();
683
683
  | `.write()` | yes (replace this slot) | no | throws |
684
684
  | `.delete()` | yes (remove this slot) | no | throws |
685
685
 
686
- ## Cache Hooks
686
+ ## Cache Control
687
687
 
688
- ### useClientCache()
688
+ ### invalidateClientCache()
689
689
 
690
- Manually control client-side navigation cache:
690
+ Force the client's caches to miss after a mutation the router can't see (a REST
691
+ call, a WebSocket push, a login). It is a plain function, not a hook, so it works
692
+ from module-level callbacks too. Imported from the root entry `@rangojs/router`,
693
+ it is selected by export conditions: in a client component it marks the caches
694
+ stale immediately; from a handler/server component it writes a rotated
695
+ `Set-Cookie` for the responding client.
691
696
 
692
697
  ```tsx
693
698
  "use client";
694
- import { useClientCache } from "@rangojs/router/client";
699
+ import { invalidateClientCache } from "@rangojs/router";
695
700
 
696
701
  function SaveButton() {
697
- const { clear } = useClientCache();
698
-
699
702
  const handleSave = async () => {
700
703
  await fetch("/api/data", {
701
704
  method: "POST",
702
705
  body: JSON.stringify(data),
703
706
  });
704
707
 
705
- // Invalidate cache after mutation
706
- clear();
708
+ // Invalidate the client's caches after the mutation
709
+ invalidateClientCache();
707
710
  };
708
711
 
709
712
  return <button onClick={handleSave}>Save</button>;
710
713
  }
711
714
  ```
712
715
 
716
+ A module-level subscription works the same way (no component needed):
717
+
718
+ ```ts
719
+ import { invalidateClientCache } from "@rangojs/router";
720
+
721
+ socket.on("catalog-updated", () => invalidateClientCache());
722
+ ```
723
+
713
724
  **Use cases**: REST API mutations, WebSocket updates, non-RSC data changes.
714
725
 
715
726
  ## Outlet Components
@@ -892,22 +903,22 @@ See `/links` for the full URL generation guide. `ctx.reverse()` is server-only;
892
903
 
893
904
  ## Hook Summary
894
905
 
895
- | Hook | Purpose | Returns |
896
- | --------------------- | --------------------------------- | ------------------------------------------------------------------ |
897
- | `useParams()` | Route params | `Readonly<T>` (default `Record<string, string>`) or selected value |
898
- | `usePathname()` | Current pathname | `string` |
899
- | `useSearchParams()` | URL search params | `ReadonlyURLSearchParams` |
900
- | `useHref()` | Mount-aware href | `(path) => string` |
901
- | `useMount()` | Current include() mount path | `string` |
902
- | `useReverse()` | Local reverse for imported routes | `(name, params?, search?) => string` |
903
- | `useNavigation()` | Reactive navigation state | state, location, isStreaming |
904
- | `useRouter()` | Stable router actions | push, replace, refresh, prefetch, back, forward |
905
- | `useSegments()` | URL path & segment IDs | path, segmentIds, location |
906
- | `useLinkStatus()` | Link pending state | { pending } |
907
- | `useLoader()` | Loader data (strict) | data, isLoading, error |
908
- | `useFetchLoader()` | Loader with on-demand fetch | data, load, isLoading |
909
- | `useRefreshLoaders()` | Refresh cross-loader group(s) | `() => (groups: string \| string[]) => Promise<void>` |
910
- | `useHandle()` | Accumulated handle data | T (handle type) |
911
- | `useAction()` | Server action state | state, error, result |
912
- | `useLocationState()` | History state (persists or flash) | T \| undefined |
913
- | `useClientCache()` | Cache control | { clear } |
906
+ | Hook | Purpose | Returns |
907
+ | ------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------ |
908
+ | `useParams()` | Route params | `Readonly<T>` (default `Record<string, string>`) or selected value |
909
+ | `usePathname()` | Current pathname | `string` |
910
+ | `useSearchParams()` | URL search params | `ReadonlyURLSearchParams` |
911
+ | `useHref()` | Mount-aware href | `(path) => string` |
912
+ | `useMount()` | Current include() mount path | `string` |
913
+ | `useReverse()` | Local reverse for imported routes | `(name, params?, search?) => string` |
914
+ | `useNavigation()` | Reactive navigation state | state, location, isStreaming |
915
+ | `useRouter()` | Stable router actions | push, replace, refresh, prefetch, back, forward |
916
+ | `useSegments()` | URL path & segment IDs | path, segmentIds, location |
917
+ | `useLinkStatus()` | Link pending state | { pending } |
918
+ | `useLoader()` | Loader data (strict) | data, isLoading, error |
919
+ | `useFetchLoader()` | Loader with on-demand fetch | data, load, isLoading |
920
+ | `useRefreshLoaders()` | Refresh cross-loader group(s) | `() => (groups: string \| string[]) => Promise<void>` |
921
+ | `useHandle()` | Accumulated handle data | T (handle type) |
922
+ | `useAction()` | Server action state | state, error, result |
923
+ | `useLocationState()` | History state (persists or flash) | T \| undefined |
924
+ | `invalidateClientCache()` | Force client caches to miss (function, not a hook; root entry) | `void` |
@@ -189,12 +189,26 @@ Logs pattern matching, route registration, and cookie override decisions to cons
189
189
  ## Testing
190
190
 
191
191
  ```typescript
192
- import { createTestRequest, testPattern } from "@rangojs/router/host/testing";
192
+ import {
193
+ createTestRequest,
194
+ testPattern,
195
+ matchesHost,
196
+ } from "@rangojs/router/host/testing";
193
197
 
194
- // Test pattern matching
198
+ // Test pattern matching (host-only)
195
199
  testPattern("admin.*", "admin.example.com"); // true
196
200
  testPattern([".", "www.*"], "example.com"); // true
197
201
 
202
+ // Path-based patterns need the third pathname arg (defaults to "/", so a
203
+ // host-only pattern still works with two args):
204
+ testPattern("**.workers.dev/admin", "foo.workers.dev", "/admin"); // true
205
+
206
+ // Or match a pattern against a real Request (hostname + pathname from the URL):
207
+ matchesHost(
208
+ "**.workers.dev/admin",
209
+ new Request("https://foo.workers.dev/admin"),
210
+ ); // true
211
+
198
212
  // Create requests for integration tests
199
213
  const request = createTestRequest({
200
214
  host: "admin.example.com",
@@ -107,8 +107,10 @@ Use named revalidation contracts on both the outer producer and the intercept
107
107
  consumer when they share `ctx.set()` data:
108
108
 
109
109
  ```typescript
110
- export const revalidateProductShell = ({ actionId }) =>
111
- actionId?.includes("src/actions/product.ts#") || undefined;
110
+ import * as ProductActions from "./actions/product";
111
+
112
+ export const revalidateProductShell = (ctx) =>
113
+ ctx.isAction(ProductActions) || undefined;
112
114
 
113
115
  layout(ProductLayout, () => [
114
116
  revalidate(revalidateProductShell), // producer reruns
@@ -202,8 +202,10 @@ layout(<ShopLayout />, () => [
202
202
  ])
203
203
 
204
204
  // Or revalidate based on conditions
205
+ import * as CartActions from "./actions/cart";
206
+
205
207
  layout(<CartLayout />, () => [
206
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
208
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
207
209
 
208
210
  path("/cart", CartPage, { name: "cart" }),
209
211
  ])
@@ -221,8 +223,9 @@ them on both producer and consumer segments:
221
223
 
222
224
  ```typescript
223
225
  // revalidation-contracts.ts
224
- export const revalidateCartData = ({ actionId }) =>
225
- actionId?.includes("src/actions/cart.ts#addToCart") || undefined;
226
+ import { addToCart } from "./actions/cart";
227
+
228
+ export const revalidateCartData = (ctx) => ctx.isAction(addToCart) || undefined;
226
229
  ```
227
230
 
228
231
  ```typescript
@@ -242,9 +245,10 @@ You can also package them as importable handoff helpers:
242
245
  ```typescript
243
246
  // revalidation-contracts.ts
244
247
  import { revalidate } from "@rangojs/router";
248
+ import * as AuthActions from "./actions/auth";
245
249
 
246
- export const revalidateAuthData = ({ actionId }) =>
247
- actionId?.includes("src/actions/auth.ts#") || undefined;
250
+ export const revalidateAuthData = (ctx) =>
251
+ ctx.isAction(AuthActions) || undefined;
248
252
  export const revalidateAuth = () => [revalidate(revalidateAuthData)];
249
253
  ```
250
254
 
@@ -262,6 +266,7 @@ layout(<ShellLayout />, () => [
262
266
  ```typescript
263
267
  import { urls } from "@rangojs/router";
264
268
  import { Outlet, ParallelOutlet } from "@rangojs/router/client";
269
+ import * as CartActions from "./actions/cart";
265
270
 
266
271
  function ShopLayout() {
267
272
  return (
@@ -291,7 +296,7 @@ export const shopPatterns = urls(({ path, layout, parallel, loader, revalidate }
291
296
  }, () => [
292
297
  // Layout loaders
293
298
  loader(CartLoader, () => [
294
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
299
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
295
300
  ]),
296
301
 
297
302
  // Parallel routes
@@ -249,6 +249,8 @@ export const OrderLoader = createLoader(async (ctx) => {
249
249
  Add caching or revalidation to specific loaders:
250
250
 
251
251
  ```typescript
252
+ import * as CartActions from "./actions/cart";
253
+
252
254
  path("/product/:slug", ProductPage, { name: "product" }, () => [
253
255
  // Cached loader
254
256
  loader(ProductLoader, () => [cache({ ttl: 300 })]),
@@ -261,7 +263,7 @@ path("/product/:slug", ProductPage, { name: "product" }, () => [
261
263
  // Loader that revalidates after cart actions (defer otherwise — keeps the
262
264
  // permissive loader defaults for navigation and other actions intact)
263
265
  loader(CartLoader, () => [
264
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
266
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
265
267
  ]),
266
268
  ]);
267
269
  ```
@@ -781,10 +783,12 @@ export const CartLoader = createLoader(async (ctx) => {
781
783
  });
782
784
 
783
785
  // urls.tsx — register loaders in the DSL
786
+ import * as CartActions from "./actions/cart";
787
+
784
788
  export const urlpatterns = urls(({ path, layout, loader, loading, cache, revalidate }) => [
785
789
  layout(<ShopLayout />, () => [
786
790
  loader(CartLoader, () => [
787
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
791
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
788
792
  ]),
789
793
 
790
794
  path("/shop/product/:slug", ProductPage, { name: "product" }, () => [
@@ -67,8 +67,10 @@ For shared segment data, use named revalidation contracts on both the producer
67
67
  and consumer segments, even when middleware is present in the chain.
68
68
 
69
69
  ```typescript
70
- export const revalidateCartData = ({ actionId }) =>
71
- actionId?.includes("src/actions/cart.ts#") || undefined;
70
+ import * as CartActions from "./actions/cart";
71
+
72
+ export const revalidateCartData = (ctx) =>
73
+ ctx.isAction(CartActions) || undefined;
72
74
 
73
75
  layout(CartLayout, () => [
74
76
  middleware(cartRenderMiddleware),
@@ -317,9 +317,11 @@ NOT cache invalidation — it is `revalidate()`, controlling which segments
317
317
  re-rendering:
318
318
 
319
319
  ```typescript
320
+ import { updateBlog } from "./actions/blog";
321
+
320
322
  // Re-run this layout when a blog action fires
321
323
  layout(BlogLayout, () => [
322
- revalidate(({ actionId }) => actionId?.includes("updateBlog") || undefined),
324
+ revalidate((ctx) => ctx.isAction(updateBlog) || undefined),
323
325
  path("/blog/:slug", BlogPost, { name: "blogPost" }),
324
326
  ]);
325
327
 
@@ -330,6 +330,8 @@ parallel({
330
330
  Control when parallel routes revalidate:
331
331
 
332
332
  ```typescript
333
+ import * as CartActions from "./actions/cart";
334
+
333
335
  parallel(
334
336
  {
335
337
  "@cart": () => <CartSummary />,
@@ -337,7 +339,7 @@ parallel(
337
339
  () => [
338
340
  loader(CartLoader),
339
341
  // Revalidate when cart actions occur
340
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
342
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
341
343
  ]
342
344
  )
343
345
  ```
@@ -360,8 +362,10 @@ the parallel consumer:
360
362
 
361
363
  ```typescript
362
364
  // revalidation-contracts.ts
363
- export const revalidateCartData = ({ actionId }) =>
364
- actionId?.includes("src/actions/cart.ts#") || undefined;
365
+ import * as CartActions from "./actions/cart";
366
+
367
+ export const revalidateCartData = (ctx) =>
368
+ ctx.isAction(CartActions) || undefined;
365
369
 
366
370
  layout(CartLayout, () => [
367
371
  revalidate(revalidateCartData), // producer reruns
@@ -429,6 +433,7 @@ function MyLayout() {
429
433
  ```typescript
430
434
  import { urls } from "@rangojs/router";
431
435
  import { Outlet, ParallelOutlet } from "@rangojs/router/client";
436
+ import * as CartActions from "./actions/cart";
432
437
 
433
438
  function ShopLayout() {
434
439
  return (
@@ -479,7 +484,7 @@ export const shopPatterns = urls(({
479
484
  () => [
480
485
  loader(CartLoader),
481
486
  loading(<CartSkeleton />),
482
- revalidate(({ actionId }) => actionId?.includes("Cart") || undefined),
487
+ revalidate((ctx) => ctx.isAction(CartActions) || undefined),
483
488
  ]
484
489
  ),
485
490
 
@@ -154,6 +154,12 @@ returned, for outcome-conditional revalidation. The arg also exposes `actionId`
154
154
  (raw `path#export`), `actionUrl`, `formData`, `method`, and `stale` (cross-tab
155
155
  `_rsc_stale` signal). All are `undefined` on plain navigation (no action).
156
156
 
157
+ Two idioms, picked by what an _unrelated_ action should do. `ctx.isAction()`
158
+ returns a raw boolean, so combine it with `|| undefined` to **defer** ("mine,
159
+ else let the default decide": `ctx.isAction(CartActions) || undefined`) or leave
160
+ it bare to **suppress** ("mine only": `ctx.isAction(CartActions)`). Prefer the
161
+ defer form unless a sibling segment must own the unrelated-action decision.
162
+
157
163
  ```ts
158
164
  // re-render only when checkout actually succeeded; defer otherwise
159
165
  revalidate((ctx) => (ctx.isAction(checkout) && ctx.actionResult?.ok) || undefined),
@@ -232,6 +238,12 @@ Grouped by concern — read when you need to…
232
238
  | `/bundle-analysis` | Audit your app's production bundle for server leaks and oversized chunks |
233
239
  | `/debug-manifest` | Inspect route manifest structure |
234
240
 
241
+ **Testing**:
242
+
243
+ | Skill | Description |
244
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------- |
245
+ | `/testing` | Unit (loaders/middleware/reverse/components), integration (dispatch/Flight), and e2e (dev+prod parity, progressive enhancement) |
246
+
235
247
  **Setup, types & migration**:
236
248
 
237
249
  | Skill | Description |
@@ -246,10 +246,12 @@ the producer route and the consumer child segments.
246
246
 
247
247
  ```typescript
248
248
  // revalidation-contracts.ts
249
+ import * as CheckoutActions from "./actions/checkout";
250
+
249
251
  // Defer (|| undefined), not ?? false: a hard `false` short-circuits the chain,
250
252
  // so when the same segment composes multiple contracts the later ones never run.
251
- export const revalidateCheckoutData = ({ actionId }) =>
252
- actionId?.includes("src/actions/checkout.ts#") || undefined;
253
+ export const revalidateCheckoutData = (ctx) =>
254
+ ctx.isAction(CheckoutActions) || undefined;
253
255
 
254
256
  path("/checkout", CheckoutPage, { name: "checkout" }, () => [
255
257
  revalidate(revalidateCheckoutData), // producer (route handler) reruns
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: testing
3
+ description: Test @rangojs/router apps — unit (loaders/middleware/reverse/components), integration (dispatch/Flight), and e2e (dev+prod parity, progressive enhancement)
4
+ argument-hint: [layer]
5
+ ---
6
+
7
+ # Testing @rangojs/router apps
8
+
9
+ Rango ships six consumer-facing testing entries, one per test runtime/dependency:
10
+ `@rangojs/router/testing` (unit + integration, under a Vite-driven Vitest
11
+ project), `@rangojs/router/testing/vitest` (the `rangoTestConfig`/`rangoTestAliases`
12
+ setup preset), `@rangojs/router/testing/dom` (`renderRoute`, needs RTL + a DOM
13
+ env), `@rangojs/router/testing/e2e` (the Playwright harness),
14
+ `@rangojs/router/testing/flight` (real Flight, react-server condition only), and
15
+ `@rangojs/router/testing/flight-matchers` (the Flight matchers).
16
+
17
+ The hard problem in an RSC app is that the layer you reach for is dictated by
18
+ **what the behavior touches** — a pure predicate is a one-line vitest test; a real
19
+ async Server Component cannot be a plain node test at all. Pick the layer
20
+ **first**, then the primitive. Reaching one layer too high (e2e for a reverse
21
+ function) is slow; one too low (a node test for Flight) fails to compile or
22
+ silently asserts nothing.
23
+
24
+ This page is the router. Each primitive's full API (options, the seeded context
25
+ your code receives, the return shape), a minimal recipe, and its caveats live in a
26
+ dedicated sub-file linked from the decision tree below. Read the one for your case.
27
+
28
+ > **Setup is the first wall.** The vitest projects, the `rangoTestConfig` vs
29
+ > `rangoTestAliases` choice (Node >= 23), and the react-server `@rangojs/router ->
30
+ index.rsc.ts` alias are all in [`./setup.md`](./setup.md). Read it before writing
31
+ > `vitest.config.ts`. Platform bindings (`env.DB`/DO/R2) are your own double —
32
+ > [`./bindings.md`](./bindings.md).
33
+
34
+ For the long-form prose guide (setup walkthrough + migration), see
35
+ [`docs/testing.md`](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/testing.md)
36
+ (the `docs/` directory is not shipped in the published package, so this is an
37
+ absolute link).
38
+
39
+ ## When to use
40
+
41
+ Use this skill when adding or changing tests for a Rango app: a loader,
42
+ middleware, a server action, a route map, a client component, a response route,
43
+ cache/SWR behavior, prerender, or a navigation/PE flow.
44
+
45
+ Two non-negotiable mandates (from the repo's `CLAUDE.md`, and they apply to
46
+ consumer apps too):
47
+
48
+ - **Every e2e covers BOTH dev and production.** A dev-only e2e is not acceptable.
49
+ Use `parityDescribe` — it generates the dev and production describes from one
50
+ body, so you cannot forget the prod half. See [`./e2e-parity.md`](./e2e-parity.md).
51
+ - **Progressive-enhancement parity** is a first-class assertion. A form-driven
52
+ flow must produce the same observable result with JS on and JS off. Use
53
+ `expectParity`.
54
+
55
+ ## The read-first shape
56
+
57
+ Four import roots, each matched to the dependency/runtime that can load it — this
58
+ split is forced by hard walls, not preference:
59
+
60
+ - `@rangojs/router/testing` — unit + integration primitives. Run these under a
61
+ **Vite-driven Vitest** project with the rango Vite plugin active (the router
62
+ internals import the `@rangojs/router:version` virtual; without the plugin, the
63
+ preset stubs it). References neither React, RTL, Playwright, nor the RSC runtime.
64
+ - `@rangojs/router/testing/dom` — `renderRoute` (the RTL component stub). Kept
65
+ separate so the unit barrel stays free of React/RTL; it lazy-loads
66
+ `@testing-library/react` and needs a DOM env (happy-dom/jsdom).
67
+ - `@rangojs/router/testing/e2e` — the Playwright harness. Kept separate so it
68
+ loads in a plain (non-Vite) Playwright runner; the helpers take your
69
+ `test`/`expect`, so this entry never imports `@playwright/test` at runtime.
70
+ - `@rangojs/router/testing/flight` — real Flight rendering. Its serializer loads
71
+ only under the `react-server` node condition; pulling it elsewhere throws.
72
+
73
+ The single rule that drives everything:
74
+
75
+ > **If the behavior needs a real Flight render, it cannot be a plain vitest node
76
+ > test.** It is either `renderToFlightString`/`renderServerTree`/`renderHandler`
77
+ > (under the react-server vitest project) or an e2e test. There is no middle
78
+ > ground in node.
79
+
80
+ ## Decision tree: behavior -> layer -> primitive
81
+
82
+ Each primitive links to its sub-file (API + recipe + caveats).
83
+
84
+ | The behavior is… | Layer | Primitive | Import root |
85
+ | --------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------ | -------------------------------- |
86
+ | a pure function / `reverse` / `href` / a predicate (`revalidate`, `isAction`) | unit + types | [`reverse`/`@ts-expect-error`](./reverse-and-types.md) | `@rangojs/router/testing` |
87
+ | one loader's data logic | unit (node) | [`runLoader`](./loader.md) | `@rangojs/router/testing` |
88
+ | a loader's cookie / header / redirect output (auth-loader pattern) | unit (node) | [`runLoaderResult`](./loader.md) | `@rangojs/router/testing` |
89
+ | one middleware's ordering / short-circuit / cookie+header merge | unit (node) | [`runMiddleware`](./middleware.md) | `@rangojs/router/testing` |
90
+ | a `"use server"` action's cookie / header / flash output (even on `throw redirect()`) | unit (node) | [`runInRequestContext`](./server-actions.md) | `@rangojs/router/testing` |
91
+ | a handle's `collect`/accumulator, or a seeded handle read | unit | [`collectHandle` / seeded `handles`](./handles.md) | `@rangojs/router/testing[/dom]` |
92
+ | a CLIENT component reading router context (`useParams`/`useReverse`/`Outlet`/`useNavigation`/`useLoader`) | unit (DOM) | [`renderRoute`](./client-components.md) | `@rangojs/router/testing/dom` |
93
+ | a redirect / status / headers / cookies / **response route** (json/text/html/xml/md), no Flight | integration | [`dispatch`](./response-routes.md) | `@rangojs/router/testing` |
94
+ | a real async **Server Component** / Flight serialization shape | RSC unit | [`renderToFlightString` + `toMatchFlight`](./flight.md) | `@rangojs/router/testing/flight` |
95
+ | a client island's **typed props** / the **server-rendered** host content | RSC unit | [`renderServerTree` + `findClientBoundaries`/`findElements`](./server-tree.md) | `@rangojs/router/testing/flight` |
96
+ | a real route **handler** `(ctx) => rsc` (params/loaders/vars -> rendered RSC + effects) | RSC unit | [`renderHandler`](./render-handler.md) | `@rangojs/router/testing/flight` |
97
+ | navigation, hydration, PE parity, view transitions, real SSR | e2e | [`createRangoE2E` -> `parityDescribe`/`expectParity`](./e2e-parity.md) | `@rangojs/router/testing/e2e` |
98
+ | cache hit/miss/stale, prerender (= a cache hit by design) | e2e + signal | [`assertCacheStatus` / telemetry sink](./cache-prerender.md) | `@rangojs/router/testing[/e2e]` |
99
+ | generated route map drift vs runtime | unit (node) | [`assertGeneratedRoutesMatch`](./reverse-and-types.md) | `@rangojs/router/testing` |
100
+ | a platform binding (`env.DB` / Durable Object / `env.R2`) | unit/integr. | [your own double via `env`](./bindings.md) | (any primitive's `env` option) |
101
+
102
+ Cross-references to the DSL skills: `/loader`, `/middleware`, `/server-actions`,
103
+ `/handler-use`, `/hooks`, `/response-routes`, `/route`, `/caching`, `/prerender`,
104
+ `/typesafety`.
105
+
106
+ ## Sub-files
107
+
108
+ - Cross-cutting: [`setup.md`](./setup.md), [`bindings.md`](./bindings.md)
109
+ - Unit (node): [`loader.md`](./loader.md), [`middleware.md`](./middleware.md),
110
+ [`server-actions.md`](./server-actions.md), [`handles.md`](./handles.md),
111
+ [`reverse-and-types.md`](./reverse-and-types.md)
112
+ - Unit (DOM): [`client-components.md`](./client-components.md)
113
+ - RSC unit: [`flight.md`](./flight.md), [`server-tree.md`](./server-tree.md),
114
+ [`render-handler.md`](./render-handler.md)
115
+ - Integration: [`response-routes.md`](./response-routes.md)
116
+ - E2E: [`e2e-parity.md`](./e2e-parity.md), [`cache-prerender.md`](./cache-prerender.md)
117
+
118
+ ## Pre-push checklist (mirror CLAUDE.md)
119
+
120
+ Before pushing, run all of these and fix any failure:
121
+
122
+ 1. `pnpm run typecheck` (or `pnpm exec tsc --noEmit`)
123
+ 2. `pnpm run test:unit` (node + DOM vitest)
124
+ 3. `pnpm run test:unit:rsc` (the react-server Flight project)
125
+ 4. `pnpm run lint`
126
+ 5. `pnpm run format`
127
+
128
+ And: **every e2e has a production counterpart.** `parityDescribe` makes this
129
+ automatic — if you wrote a plain `test.describe` for a behavior, convert it.