@rangojs/router 0.0.0-experimental.141 → 0.0.0-experimental.143

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 (918) hide show
  1. package/AGENTS.md +6 -10
  2. package/README.md +17 -0
  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.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -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 +84 -15
  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 +21 -18
  809. package/skills/api-client/SKILL.md +1 -1
  810. package/skills/breadcrumbs/SKILL.md +1 -1
  811. package/skills/cache-guide/SKILL.md +1 -1
  812. package/skills/caching/SKILL.md +35 -1
  813. package/skills/catalog.json +265 -0
  814. package/skills/comparison/references/framework-comparison.md +1 -1
  815. package/skills/composability/SKILL.md +33 -1
  816. package/skills/debug-manifest/SKILL.md +1 -1
  817. package/skills/document-cache/SKILL.md +9 -1
  818. package/skills/fonts/SKILL.md +1 -1
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +54 -892
  821. package/skills/hooks/data.md +273 -0
  822. package/skills/hooks/handle-and-actions.md +103 -0
  823. package/skills/hooks/navigation.md +110 -0
  824. package/skills/hooks/outlets.md +41 -0
  825. package/skills/hooks/state.md +228 -0
  826. package/skills/hooks/urls.md +135 -0
  827. package/skills/host-router/SKILL.md +1 -1
  828. package/skills/i18n/SKILL.md +1 -1
  829. package/skills/intercept/SKILL.md +8 -1
  830. package/skills/layout/SKILL.md +1 -1
  831. package/skills/links/SKILL.md +1 -1
  832. package/skills/loader/SKILL.md +8 -1
  833. package/skills/middleware/SKILL.md +1 -1
  834. package/skills/migrate-nextjs/SKILL.md +133 -1
  835. package/skills/migrate-react-router/SKILL.md +42 -816
  836. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  837. package/skills/migrate-react-router/component-migration.md +196 -0
  838. package/skills/migrate-react-router/data-and-actions.md +225 -0
  839. package/skills/migrate-react-router/route-mapping.md +271 -0
  840. package/skills/mime-routes/SKILL.md +1 -1
  841. package/skills/observability/SKILL.md +9 -1
  842. package/skills/parallel/SKILL.md +10 -1
  843. package/skills/ppr/SKILL.md +331 -32
  844. package/skills/prerender/SKILL.md +8 -1
  845. package/skills/rango/SKILL.md +12 -12
  846. package/skills/response-routes/SKILL.md +1 -1
  847. package/skills/route/SKILL.md +9 -1
  848. package/skills/router-setup/SKILL.md +1 -1
  849. package/skills/scripts/SKILL.md +1 -1
  850. package/skills/server-actions/SKILL.md +3 -2
  851. package/skills/shell-manifest/SKILL.md +1 -1
  852. package/skills/streams-and-websockets/SKILL.md +1 -1
  853. package/skills/tailwind/SKILL.md +1 -1
  854. package/skills/testing/SKILL.md +1 -1
  855. package/skills/theme/SKILL.md +1 -1
  856. package/skills/typesafety/SKILL.md +45 -919
  857. package/skills/typesafety/env-and-bindings.md +254 -0
  858. package/skills/typesafety/generated-files-and-cli.md +335 -0
  859. package/skills/typesafety/params-and-search.md +153 -0
  860. package/skills/typesafety/route-types.md +209 -0
  861. package/skills/use-cache/SKILL.md +7 -1
  862. package/skills/vercel/SKILL.md +1 -1
  863. package/skills/view-transitions/SKILL.md +1 -1
  864. package/src/browser/event-controller.ts +41 -10
  865. package/src/browser/logging.ts +10 -0
  866. package/src/browser/merge-segment-loaders.ts +6 -4
  867. package/src/browser/navigation-client.ts +5 -1
  868. package/src/browser/navigation-store.ts +46 -6
  869. package/src/browser/partial-update.ts +27 -15
  870. package/src/browser/prefetch/cache.ts +26 -4
  871. package/src/browser/prefetch/fetch.ts +27 -17
  872. package/src/browser/react/Link.tsx +13 -3
  873. package/src/browser/react/NavigationProvider.tsx +21 -19
  874. package/src/browser/scroll-restoration.ts +7 -5
  875. package/src/browser/segment-reconciler.ts +31 -21
  876. package/src/browser/types.ts +12 -0
  877. package/src/cache/cache-runtime.ts +203 -23
  878. package/src/cache/document-cache.ts +20 -9
  879. package/src/cache/memory-segment-store.ts +53 -2
  880. package/src/cache/segment-codec.ts +4 -4
  881. package/src/cache/shell-snapshot.ts +50 -1
  882. package/src/cache/types.ts +25 -5
  883. package/src/cache/vercel/vercel-cache-store.ts +131 -107
  884. package/src/cloudflare/tracing.ts +7 -8
  885. package/src/index.rsc.ts +1 -0
  886. package/src/index.ts +12 -8
  887. package/src/route-definition/helpers-types.ts +5 -4
  888. package/src/route-map-builder.ts +24 -1
  889. package/src/router/find-match.ts +15 -1
  890. package/src/router/instrument.ts +9 -4
  891. package/src/router/manifest.ts +13 -5
  892. package/src/router/match-api.ts +70 -30
  893. package/src/router/match-handlers.ts +176 -135
  894. package/src/router/match-result.ts +35 -15
  895. package/src/router/middleware.ts +46 -32
  896. package/src/router/request-classification.ts +20 -7
  897. package/src/router/route-snapshot.ts +10 -0
  898. package/src/router/router-interfaces.ts +9 -0
  899. package/src/router/segment-resolution/fresh.ts +25 -4
  900. package/src/router/segment-resolution/loader-cache.ts +57 -8
  901. package/src/router/segment-resolution/loader-mask.ts +26 -3
  902. package/src/router/segment-resolution/loader-snapshot.ts +251 -0
  903. package/src/router/telemetry-otel.ts +6 -8
  904. package/src/router/tracing.ts +14 -5
  905. package/src/router.ts +15 -6
  906. package/src/rsc/handler.ts +46 -30
  907. package/src/rsc/nonce.ts +10 -1
  908. package/src/rsc/rsc-rendering.ts +39 -8
  909. package/src/rsc/shell-capture.ts +201 -13
  910. package/src/rsc/shell-serve.ts +26 -0
  911. package/src/server/cookie-store.ts +6 -0
  912. package/src/server/request-context.ts +33 -0
  913. package/src/ssr/index.tsx +7 -0
  914. package/src/testing/dispatch.ts +142 -37
  915. package/src/urls/path-helper-types.ts +9 -4
  916. package/src/vercel/tracing.ts +7 -7
  917. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  918. package/src/vite/router-discovery.ts +78 -15
@@ -156,7 +156,7 @@ interface VercelResponseEnvelope {
156
156
  s: number;
157
157
  /** expiresAt (ms since epoch). */
158
158
  e: number;
159
- /** Tags, preserved so a stale re-stamp keeps them. */
159
+ /** Tags, preserved so a background revalidation re-write keeps them. */
160
160
  t?: string[];
161
161
  }
162
162
 
@@ -174,7 +174,7 @@ interface VercelShellEnvelope {
174
174
  s: number;
175
175
  /** expiresAt (ms since epoch). */
176
176
  e: number;
177
- /** Tags, preserved so a stale re-stamp keeps them. */
177
+ /** Tags, preserved so a background revalidation re-write keeps them. */
178
178
  t?: string[];
179
179
  /** initialTheme the capture render was built with (resume theme fidelity). */
180
180
  i?: string;
@@ -226,9 +226,9 @@ export interface VercelCacheStoreOptions<TEnv = unknown> {
226
226
  cache: VercelRuntimeCache;
227
227
 
228
228
  /**
229
- * `waitUntil` from `@vercel/functions`. Used only to run the stale-read
230
- * re-stamp (herd dampening) off the response path - the router already
231
- * backgrounds the actual writes. When omitted, the re-stamp runs detached
229
+ * `waitUntil` from `@vercel/functions`. Used only to run the stale-read lock
230
+ * write (herd dampening) off the response path - the router already
231
+ * backgrounds the actual writes. When omitted, the lock write runs detached
232
232
  * (fire-and-forget) instead.
233
233
  */
234
234
  waitUntil?: (promise: Promise<unknown>) => void;
@@ -393,7 +393,7 @@ export class VercelCacheStore<
393
393
  this.emitDebug({ op: "get", key, outcome: "miss", readMs });
394
394
  return null;
395
395
  }
396
- const env = this.asSegmentEnvelope(raw);
396
+ const env = this.asSegmentEnvelope(this.decodeRaw(raw));
397
397
  if (!env) {
398
398
  reportCacheError(
399
399
  new Error("malformed segment envelope"),
@@ -420,35 +420,19 @@ export class VercelCacheStore<
420
420
  }
421
421
 
422
422
  const isStale = env.s > 0 && now > env.s;
423
- if (isStale) {
424
- this.markRevalidating(
425
- storeKey,
426
- env,
427
- env.d.tags,
428
- "[VercelCacheStore] get",
429
- );
430
- this.emitDebug({
431
- op: "get",
432
- key,
433
- outcome: "stale-revalidate",
434
- shouldRevalidate: true,
435
- staleAt: env.s,
436
- expiresAt: env.e,
437
- readMs,
438
- });
439
- return { data: env.d, shouldRevalidate: true };
440
- }
441
-
423
+ const shouldRevalidate = isStale
424
+ ? await this.claimRevalidation(storeKey, env.e, "[VercelCacheStore] get")
425
+ : false;
442
426
  this.emitDebug({
443
427
  op: "get",
444
428
  key,
445
- outcome: "fresh",
446
- shouldRevalidate: false,
429
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
430
+ shouldRevalidate,
447
431
  staleAt: env.s,
448
432
  expiresAt: env.e,
449
433
  readMs,
450
434
  });
451
- return { data: env.d, shouldRevalidate: false };
435
+ return { data: env.d, shouldRevalidate };
452
436
  }
453
437
 
454
438
  async set(
@@ -462,8 +446,7 @@ export class VercelCacheStore<
462
446
  const { staleAt, expiresAt } = computeExpiration(ttl, swrWindow);
463
447
  // Embed the CLAMPED tags, like putResponse/setItem: the segment family
464
448
  // carries its tags inside `d`, and a raw list would resurface dropped
465
- // tags into recordRequestTags on every hit AND get re-clamped (with a
466
- // spurious cache-write report) by markRevalidating on every stale read.
449
+ // tags into recordRequestTags on every hit.
467
450
  const safeTags = this.clampTagsForWrite(
468
451
  data.tags,
469
452
  "[VercelCacheStore] set",
@@ -517,7 +500,7 @@ export class VercelCacheStore<
517
500
  this.emitDebug({ op: "getResponse", key, outcome: "miss", readMs });
518
501
  return null;
519
502
  }
520
- const env = this.asResponseEnvelope(raw);
503
+ const env = this.asResponseEnvelope(this.decodeRaw(raw));
521
504
  if (!env) {
522
505
  reportCacheError(
523
506
  new Error("malformed response envelope"),
@@ -543,11 +526,11 @@ export class VercelCacheStore<
543
526
  return null;
544
527
  }
545
528
 
546
- // Reconstruct the Response BEFORE marking revalidating. A corrupt body (e.g.
547
- // invalid base64 from base64ToBuffer, or bad header entries) would otherwise
548
- // throw out of getResponse — breaking the fail-open contract — and a stale
549
- // re-stamp would re-persist the bad value. Treat a reconstruction failure as
550
- // a corrupt entry: report, evict, and miss.
529
+ // Reconstruct the Response BEFORE claiming revalidation. A corrupt body
530
+ // (e.g. invalid base64 from base64ToBuffer, or bad header entries) would
531
+ // otherwise throw out of getResponse — breaking the fail-open contract — and
532
+ // a stale read would have written a lock for an entry it then evicts. Treat a
533
+ // reconstruction failure as a corrupt entry: report, evict, and miss.
551
534
  let response: Response;
552
535
  try {
553
536
  response = new Response(base64ToBuffer(env.b), {
@@ -566,24 +549,23 @@ export class VercelCacheStore<
566
549
  }
567
550
 
568
551
  const isStale = env.s > 0 && now > env.s;
569
- if (isStale) {
570
- this.markRevalidating(
571
- storeKey,
572
- env,
573
- env.t,
574
- "[VercelCacheStore] getResponse",
575
- );
576
- }
552
+ const shouldRevalidate = isStale
553
+ ? await this.claimRevalidation(
554
+ storeKey,
555
+ env.e,
556
+ "[VercelCacheStore] getResponse",
557
+ )
558
+ : false;
577
559
  this.emitDebug({
578
560
  op: "getResponse",
579
561
  key,
580
- outcome: isStale ? "stale-revalidate" : "fresh",
581
- shouldRevalidate: isStale,
562
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
563
+ shouldRevalidate,
582
564
  staleAt: env.s,
583
565
  expiresAt: env.e,
584
566
  readMs,
585
567
  });
586
- return { response, shouldRevalidate: isStale };
568
+ return { response, shouldRevalidate };
587
569
  }
588
570
 
589
571
  async putResponse(
@@ -650,7 +632,7 @@ export class VercelCacheStore<
650
632
  this.emitDebug({ op: "getItem", key, outcome: "miss", readMs });
651
633
  return null;
652
634
  }
653
- const env = this.asItemEnvelope(raw);
635
+ const env = this.asItemEnvelope(this.decodeRaw(raw));
654
636
  if (!env) {
655
637
  reportCacheError(
656
638
  new Error("malformed item envelope"),
@@ -677,14 +659,18 @@ export class VercelCacheStore<
677
659
  }
678
660
 
679
661
  const isStale = env.s > 0 && now > env.s;
680
- if (isStale) {
681
- this.markRevalidating(storeKey, env, env.t, "[VercelCacheStore] getItem");
682
- }
662
+ const shouldRevalidate = isStale
663
+ ? await this.claimRevalidation(
664
+ storeKey,
665
+ env.e,
666
+ "[VercelCacheStore] getItem",
667
+ )
668
+ : false;
683
669
  this.emitDebug({
684
670
  op: "getItem",
685
671
  key,
686
- outcome: isStale ? "stale-revalidate" : "fresh",
687
- shouldRevalidate: isStale,
672
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
673
+ shouldRevalidate,
688
674
  staleAt: env.s,
689
675
  expiresAt: env.e,
690
676
  readMs,
@@ -692,7 +678,7 @@ export class VercelCacheStore<
692
678
  return {
693
679
  value: env.v,
694
680
  handles: env.h,
695
- shouldRevalidate: isStale,
681
+ shouldRevalidate,
696
682
  tags: env.t,
697
683
  };
698
684
  }
@@ -752,7 +738,7 @@ export class VercelCacheStore<
752
738
  this.emitDebug({ op: "getShell", key, outcome: "miss", readMs });
753
739
  return null;
754
740
  }
755
- const env = this.asShellEnvelope(raw);
741
+ const env = this.asShellEnvelope(this.decodeRaw(raw));
756
742
  if (!env) {
757
743
  reportCacheError(
758
744
  new Error("malformed shell envelope"),
@@ -779,19 +765,18 @@ export class VercelCacheStore<
779
765
  }
780
766
 
781
767
  const isStale = env.s > 0 && now > env.s;
782
- if (isStale) {
783
- this.markRevalidating(
784
- storeKey,
785
- env,
786
- env.t,
787
- "[VercelCacheStore] getShell",
788
- );
789
- }
768
+ const shouldRevalidate = isStale
769
+ ? await this.claimRevalidation(
770
+ storeKey,
771
+ env.e,
772
+ "[VercelCacheStore] getShell",
773
+ )
774
+ : false;
790
775
  this.emitDebug({
791
776
  op: "getShell",
792
777
  key,
793
- outcome: isStale ? "stale-revalidate" : "fresh",
794
- shouldRevalidate: isStale,
778
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
779
+ shouldRevalidate,
795
780
  staleAt: env.s,
796
781
  expiresAt: env.e,
797
782
  readMs,
@@ -805,7 +790,7 @@ export class VercelCacheStore<
805
790
  snapshot: env.sn,
806
791
  createdAt: env.c,
807
792
  },
808
- shouldRevalidate: isStale,
793
+ shouldRevalidate,
809
794
  };
810
795
  }
811
796
 
@@ -901,68 +886,107 @@ export class VercelCacheStore<
901
886
  tags: string[] | undefined,
902
887
  label: string,
903
888
  ): Promise<void> {
904
- if (!this.withinSizeLimit(value, label)) return;
889
+ // Serialize the envelope exactly ONCE: the same string measures the entry
890
+ // against the size cap AND is what we hand the platform. The Vercel client
891
+ // JSON-serializes whatever value it is given, so passing the raw object here
892
+ // would walk and stringify the (potentially large) envelope a SECOND time.
893
+ // Entries written this way are JSON strings; the read path (decodeRaw)
894
+ // parses them back, and still accepts the legacy object shape written before
895
+ // this change.
896
+ let serialized: string | undefined;
897
+ try {
898
+ serialized = JSON.stringify(value);
899
+ } catch {
900
+ // Unserializable value: fall back to letting the platform serialize it
901
+ // (best-effort — matches the prior "cannot measure -> allow the write").
902
+ serialized = undefined;
903
+ }
904
+ if (serialized !== undefined && !this.withinSizeLimit(serialized, label)) {
905
+ return;
906
+ }
905
907
  const safeTags = this.clampTagsForWrite(tags, label);
906
908
  const options: { ttl: number; tags?: string[]; name?: string } = {
907
909
  ttl: Math.max(1, Math.ceil(totalTtlSeconds)),
908
910
  };
909
911
  if (safeTags.length > 0) options.tags = safeTags;
910
912
  if (this.name) options.name = this.name;
911
- await this.cache.set(storeKey, value, options);
913
+ await this.cache.set(storeKey, serialized ?? value, options);
912
914
  }
913
915
 
914
916
  /**
915
- * Stale-read herd dampening: push staleAt forward by REVALIDATION_LOCK_MS
916
- * (clamped to the hard expiry) and re-write the same envelope under the
917
- * remaining lifetime, so concurrent same-region readers see it as fresh while
918
- * one revalidates. Best-effort and non-blocking; never throws.
917
+ * Normalize a value read back from the cache. Entries written by this store
918
+ * are pre-serialized JSON strings (see write()); legacy entries (written
919
+ * before that change, or by a client that deserializes for us) come back as
920
+ * objects. Parse strings, pass objects through, and treat a non-JSON string
921
+ * as corrupt (returns undefined, so the caller reports + evicts).
922
+ */
923
+ private decodeRaw(raw: unknown): unknown {
924
+ if (typeof raw !== "string") return raw;
925
+ try {
926
+ return JSON.parse(raw);
927
+ } catch {
928
+ return undefined;
929
+ }
930
+ }
931
+
932
+ /**
933
+ * Stale-read herd dampening via a tiny companion lock key. On a stale read,
934
+ * check `{storeKey}:lock`; if absent, claim it (write a short-TTL marker) and
935
+ * return true so THIS reader triggers revalidation. If present, another
936
+ * same-region reader already claimed it, so return false and serve the stale
937
+ * entry as fresh without piling on. Best-effort and non-blocking; never throws.
938
+ *
939
+ * Only the STALE path pays the extra lock read; the fresh-hit path takes no
940
+ * lock round trip. Unlike the prior whole-envelope re-stamp, a stale read now
941
+ * writes only the tiny lock, never the (potentially large) payload.
919
942
  *
920
- * Two races are accepted here because `getCache` offers no compare-and-set: a
921
- * fast background revalidation that lands between this stale read and the
922
- * re-stamp write can be overwritten by the (staler) locked envelope, and an
923
- * `expireTag` that deletes the entry in the same window can be resurrected by
924
- * the re-stamp. Both self-heal within REVALIDATION_LOCK_MS (the re-stamped
925
- * copy is then re-read as stale and revalidated again, or re-deleted). The
926
- * window is narrow and the cost is at most one extra revalidation / one brief
927
- * stale serve; a read-compare would not close it atomically without CAS.
943
+ * Non-atomic (getCache has no compare-and-set): two readers can both find no
944
+ * lock and both revalidate. The window is REVALIDATION_LOCK_MS wide, after
945
+ * which the lock expires and the entry is re-claimed (or a fresh write has
946
+ * superseded it). A read-compare would not close the race without CAS.
928
947
  */
929
- private markRevalidating<E extends { s: number; e: number }>(
948
+ private async claimRevalidation(
930
949
  storeKey: string,
931
- env: E,
932
- tags: string[] | undefined,
950
+ expiresAt: number,
933
951
  label: string,
934
- ): void {
935
- const now = Date.now();
936
- const remainingSeconds = Math.ceil((env.e - now) / 1000);
937
- if (remainingSeconds <= 0) return;
938
- const locked: E = {
939
- ...env,
940
- s: Math.min(now + REVALIDATION_LOCK_MS, env.e),
941
- };
952
+ ): Promise<boolean> {
953
+ const lockKey = `${storeKey}:lock`;
954
+ let lock: unknown;
955
+ try {
956
+ lock = await this.cache.get(lockKey);
957
+ } catch {
958
+ // A lock-read failure must not break the read path: treat as unlocked.
959
+ lock = null;
960
+ }
961
+ if (lock != null) return false;
962
+
963
+ const remainingSeconds = Math.ceil((expiresAt - Date.now()) / 1000);
964
+ const lockTtl = Math.max(
965
+ 1,
966
+ Math.min(Math.ceil(REVALIDATION_LOCK_MS / 1000), remainingSeconds),
967
+ );
942
968
  const task = (): Promise<void> =>
943
- this.write(storeKey, locked, remainingSeconds, tags, label);
969
+ this.cache.set(lockKey, 1, { ttl: lockTtl });
944
970
  if (this.waitUntil) {
945
971
  this.waitUntil(reportingAsync(task, "cache-write", label));
946
972
  } else {
947
973
  void reportingAsync(task, "cache-write", label);
948
974
  }
975
+ return true;
949
976
  }
950
977
 
951
- private withinSizeLimit(value: unknown, label: string): boolean {
952
- try {
953
- const bytes = new TextEncoder().encode(JSON.stringify(value)).length;
954
- if (bytes >= this.maxItemBytes) {
955
- reportCacheError(
956
- new Error(
957
- `entry is ${bytes}B, at/above the ${this.maxItemBytes}B cap; not cached`,
958
- ),
959
- "cache-write",
960
- label,
961
- );
962
- return false;
963
- }
964
- } catch {
965
- // If the value cannot be measured, allow the write (best-effort).
978
+ /** Measure a pre-serialized entry against the per-item size cap (see write). */
979
+ private withinSizeLimit(serialized: string, label: string): boolean {
980
+ const bytes = new TextEncoder().encode(serialized).length;
981
+ if (bytes >= this.maxItemBytes) {
982
+ reportCacheError(
983
+ new Error(
984
+ `entry is ${bytes}B, at/above the ${this.maxItemBytes}B cap; not cached`,
985
+ ),
986
+ "cache-write",
987
+ label,
988
+ );
989
+ return false;
966
990
  }
967
991
  return true;
968
992
  }
@@ -39,7 +39,7 @@ import { _getRequestContext } from "../server/request-context.js";
39
39
  import {
40
40
  type RouterTracingConfig,
41
41
  type SpanRunner,
42
- type TracePhaseToggles,
42
+ type TracingToggleOptions,
43
43
  NOOP_TRACE_SPAN,
44
44
  } from "../router/tracing.js";
45
45
 
@@ -57,13 +57,12 @@ interface CloudflareTracing {
57
57
  enterSpan<T>(name: string, callback: (span: CloudflareSpan) => T): T;
58
58
  }
59
59
 
60
- /** Options for createCloudflareTracing. */
61
- export interface CloudflareTracingOptions {
62
- /** Master switch. Defaults to true. */
63
- enabled?: boolean;
64
- /** Per-phase span toggles. Omitted phases default to enabled. */
65
- spans?: TracePhaseToggles;
66
- }
60
+ /**
61
+ * Options for createCloudflareTracing. Alias of the shared
62
+ * {@link TracingToggleOptions} (`enabled` master switch + per-phase `spans`
63
+ * toggles); the name is public API.
64
+ */
65
+ export type CloudflareTracingOptions = TracingToggleOptions;
67
66
 
68
67
  /**
69
68
  * Resolve the per-request Cloudflare tracer from the active execution context.
package/src/index.rsc.ts CHANGED
@@ -308,6 +308,7 @@ export type {
308
308
  RouterTracingConfig,
309
309
  TracePhase,
310
310
  TracePhaseToggles,
311
+ TracingToggleOptions,
311
312
  } from "./router/tracing.js";
312
313
 
313
314
  // Timeout types and error class
package/src/index.ts CHANGED
@@ -343,14 +343,17 @@ export {
343
343
  // Path and response types are ambient on the `Rango` namespace (`Rango.Path`,
344
344
  // `Rango.PathResponse`, declared in href-client.ts) — no import needed.
345
345
 
346
- // Telemetry types only — the createConsoleSink/createOTelSink values are
347
- // server-only and live in index.rsc.ts (the `react-server` condition of the
348
- // bare `@rangojs/router` import). Re-exporting them as values from this
349
- // (default/client) entry would pull telemetry.ts and telemetry-otel.ts into
350
- // the client module graph; both tree-shake to zero bytes but still appear in
351
- // bundle analysis output and slow build-time module resolution. Consumers
352
- // who need the values in non-RSC contexts can import from
353
- // `@rangojs/router/server`.
346
+ // Telemetry types only — the createConsoleSink / createOTelSink /
347
+ // createOTelTracing VALUES are server-only and live in index.rsc.ts (the
348
+ // `react-server` condition of the bare `@rangojs/router` import). Re-exporting
349
+ // them as values from this (default/client) entry would pull telemetry.ts and
350
+ // telemetry-otel.ts into the client module graph; both tree-shake to zero bytes
351
+ // but still appear in bundle analysis output and slow build-time module
352
+ // resolution. The factory values are NOT re-exported from `@rangojs/router/server`
353
+ // either — that subpath is internal, not user-facing (see server.ts header).
354
+ // Non-RSC server code imports these TYPES from the root and obtains the factory
355
+ // VALUES from its own router definition module, which resolves to index.rsc.ts
356
+ // under the `react-server` condition.
354
357
  export type {
355
358
  OTelTracer,
356
359
  OTelActiveSpanTracer,
@@ -386,6 +389,7 @@ export type {
386
389
  RouterTracingConfig,
387
390
  TracePhase,
388
391
  TracePhaseToggles,
392
+ TracingToggleOptions,
389
393
  } from "./router/tracing.js";
390
394
 
391
395
  // Timeout types and error class
@@ -149,8 +149,11 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
149
149
  * so they take precedence on `loading()` and other last-write-wins
150
150
  * fields.
151
151
  */
152
- parallel: <
153
- TSlots extends Record<
152
+ // Not generic over the slots record: an inferred type parameter makes the
153
+ // object literal an inference site, which suppresses contextual typing of
154
+ // arrow slot handlers (`(ctx) => ...` was implicit any).
155
+ parallel: (
156
+ slots: Record<
154
157
  `@${string}`,
155
158
  | Handler<any, any, TEnv>
156
159
  | ReactNode
@@ -159,8 +162,6 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
159
162
  use?: () => UseItems<ParallelUseItem>;
160
163
  }
161
164
  >,
162
- >(
163
- slots: TSlots,
164
165
  use?: () => UseItems<ParallelUseItem>,
165
166
  ) => ParallelItem;
166
167
  /**
@@ -139,6 +139,7 @@ export function clearAllRouterData(): void {
139
139
  perRouterManifestMap.clear();
140
140
  perRouterTrieMap.clear();
141
141
  perRouterPrecomputedEntriesMap.clear();
142
+ authoritativeTrieRouters.clear();
142
143
  }
143
144
 
144
145
  export function setRouterManifest(
@@ -162,6 +163,23 @@ export function setRouterTrie(
162
163
  perRouterTrieMap.set(routerId, trie);
163
164
  }
164
165
 
166
+ // Routers whose trie came from the COMPLETE build manifest (deserialized via
167
+ // ensureRouterManifest). For these, a trie miss is a real 404 and findMatch
168
+ // skips the regex fallback scan — the only remaining route-count-proportional
169
+ // match path (#664). Dev rebuilds (manifest-init.ts, router-discovery HMR
170
+ // pushes) deliberately never mark authoritative: the dev-only trie-gap warning
171
+ // in find-match.ts depends on the fallback running on misses, and dev route
172
+ // churn (HMR, dev-time routes) makes a stale-trie 404 unacceptable there.
173
+ const authoritativeTrieRouters: Set<string> = new Set();
174
+
175
+ export function markRouterTrieAuthoritative(routerId: string): void {
176
+ authoritativeTrieRouters.add(routerId);
177
+ }
178
+
179
+ export function isRouterTrieAuthoritative(routerId: string): boolean {
180
+ return authoritativeTrieRouters.has(routerId);
181
+ }
182
+
165
183
  export function getRouterTrie(
166
184
  routerId: string,
167
185
  ): import("./build/route-trie.js").TrieNode | undefined {
@@ -204,7 +222,12 @@ export async function ensureRouterManifest(routerId: string): Promise<void> {
204
222
  if (loader) {
205
223
  const mod = await loader();
206
224
  if (mod.manifest) perRouterManifestMap.set(routerId, mod.manifest);
207
- if (mod.trie) perRouterTrieMap.set(routerId, mod.trie);
225
+ if (mod.trie) {
226
+ perRouterTrieMap.set(routerId, mod.trie);
227
+ // A trie serialized into the build manifest comes from complete
228
+ // discovery — misses are authoritative 404s (see find-match.ts).
229
+ markRouterTrieAuthoritative(routerId);
230
+ }
208
231
  if (mod.precomputedEntries)
209
232
  perRouterPrecomputedEntriesMap.set(routerId, mod.precomputedEntries);
210
233
  routerManifestLoaders.delete(routerId);
@@ -1,5 +1,8 @@
1
1
  import { tryTrieMatch } from "./trie-matching.js";
2
- import { getRouterTrie } from "../route-map-builder.js";
2
+ import {
3
+ getRouterTrie,
4
+ isRouterTrieAuthoritative,
5
+ } from "../route-map-builder.js";
3
6
  import {
4
7
  findMatch as findRouteMatch,
5
8
  isLazyEvaluationNeeded,
@@ -166,6 +169,17 @@ export function createFindMatch<TEnv = any>(
166
169
  };
167
170
  return cloneMatchResult(lastFindMatchResult);
168
171
  }
172
+ } else if (isRouterTrieAuthoritative(deps.routerId)) {
173
+ // Authoritative miss (#664): this trie was deserialized from the
174
+ // COMPLETE build manifest, so trailing-slash redirects are already
175
+ // trie-native hits and a miss means no route exists. Skip the regex
176
+ // fallback — the only route-count-proportional match path — and do
177
+ // not evaluate lazy includes for unmatched (bot-probe) traffic.
178
+ // Trie hits that need lazy splicing keep the fallback loop below
179
+ // (trieMatched === true never reaches this branch).
180
+ lastFindMatchPathname = pathname;
181
+ lastFindMatchResult = null;
182
+ return null;
169
183
  }
170
184
  }
171
185
 
@@ -318,10 +318,10 @@ export function observeHandler<C, R>(
318
318
  * sink is configured.
319
319
  *
320
320
  * This is the canonical emitter for SYNCHRONOUS facts that fire inside the
321
- * request's ALS scope (handler errors, timeouts, origin rejections, revalidation
322
- * decisions). A few emitters deliberately stay on the lower-level
323
- * resolveSink + safeEmit because observeEvent's lazy, per-call
324
- * getRouterContext() read does not fit them — keep this the complete list:
321
+ * request's ALS scope (revalidation decisions, cache-lookup decisions). A few
322
+ * emitters deliberately stay on the lower-level resolveSink + safeEmit because
323
+ * observeEvent's lazy, per-call getRouterContext() read does not fit them — keep
324
+ * this the complete list:
325
325
  * - router.ts wrapLoaderPromise (loader.start/end/error) and
326
326
  * segment-resolution/streamed-handler-telemetry.ts (streamed handler.error)
327
327
  * capture the sink + request id EAGERLY and emit from a fire-and-forget
@@ -330,6 +330,11 @@ export function observeHandler<C, R>(
330
330
  * loop (request.start/end/error, cache.decision, ...).
331
331
  * - segment-resolution/helpers.ts emits via a caller-provided report.telemetry
332
332
  * sink rather than the ALS router context.
333
+ * - rsc/handler.ts handleTimeoutResponse (request.timeout), the origin guard
334
+ * (request.origin-rejected), and handleStore.onError (late-handle
335
+ * handler.error) emit via router.telemetry directly — they run outside the
336
+ * RouterContext ALS (only match()/matchPartial() enter it), so a
337
+ * getRouterContext() read there throws and the event would vanish.
333
338
  */
334
339
  export function observeEvent(event: TelemetryEvent): void {
335
340
  // getRouterContext() either throws (real impl, outside a router context — e.g.
@@ -82,10 +82,14 @@ export async function loadManifest(
82
82
  Store.mountIndex = mountIndex;
83
83
  Store.isSSR = isSSR;
84
84
  if (metricsStore) Store.metrics = metricsStore;
85
- // Restore cached manifest into Store
86
- for (const [k, v] of cached) {
87
- Store.manifest.set(k, v);
88
- }
85
+ // Alias the request-scoped Store to the cached Map instead of copying it
86
+ // entry-by-entry. At request time this Store is throwaway (no ambient
87
+ // RangoContext store spans classify->match->render, so getOrCreateStore
88
+ // returns a fresh detached store here), so nothing mutates it in place after
89
+ // loadManifest returns. The fresh path below REASSIGNS Store.manifest rather
90
+ // than clearing it in place, so a later fresh load sharing this Store cannot
91
+ // poison the cached Map.
92
+ Store.manifest = cached;
89
93
  pushMetric?.("manifest:cache-hit", cacheStart);
90
94
  return cached.get(routeKey)!;
91
95
  }
@@ -103,7 +107,11 @@ export async function loadManifest(
103
107
  pushMetric?.("manifest:store-setup", storeSetupStart);
104
108
 
105
109
  const clearStart = performance.now();
106
- Store.manifest.clear();
110
+ // Reassign rather than clear() in place: a prior cache-hit may have aliased
111
+ // Store.manifest to a shared module-cache Map (see cache-hit branch above),
112
+ // and clearing it in place would poison that cache. A fresh Map isolates this
113
+ // build; the cache still receives an independent copy at the end.
114
+ Store.manifest = new Map();
107
115
  pushMetric?.("manifest:clear", clearStart);
108
116
 
109
117
  try {