@rangojs/router 0.0.0-experimental.83 → 0.0.0-experimental.84

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 (812) hide show
  1. package/dist/vite/index.js +1 -1
  2. package/package.json +1 -1
  3. package/skills/response-routes/SKILL.md +8 -0
  4. package/skills/streams-and-websockets/SKILL.md +283 -0
  5. package/src/response-utils.ts +28 -0
  6. package/src/router/middleware.ts +14 -1
  7. package/src/rsc/handler.ts +6 -3
  8. package/src/rsc/response-route-handler.ts +8 -10
  9. package/dist/__internal.d.ts +0 -83
  10. package/dist/__internal.d.ts.map +0 -1
  11. package/dist/__internal.js +0 -19
  12. package/dist/__internal.js.map +0 -1
  13. package/dist/__mocks__/version.d.ts +0 -7
  14. package/dist/__mocks__/version.d.ts.map +0 -1
  15. package/dist/__mocks__/version.js +0 -7
  16. package/dist/__mocks__/version.js.map +0 -1
  17. package/dist/__tests__/client-href.test.d.ts +0 -2
  18. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  19. package/dist/__tests__/client-href.test.js +0 -74
  20. package/dist/__tests__/client-href.test.js.map +0 -1
  21. package/dist/__tests__/component-utils.test.d.ts +0 -2
  22. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  23. package/dist/__tests__/component-utils.test.js +0 -51
  24. package/dist/__tests__/component-utils.test.js.map +0 -1
  25. package/dist/__tests__/event-controller.test.d.ts +0 -2
  26. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  27. package/dist/__tests__/event-controller.test.js +0 -538
  28. package/dist/__tests__/event-controller.test.js.map +0 -1
  29. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  30. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  31. package/dist/__tests__/helpers/route-tree.js +0 -374
  32. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  33. package/dist/__tests__/match-result.test.d.ts +0 -2
  34. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  35. package/dist/__tests__/match-result.test.js +0 -154
  36. package/dist/__tests__/match-result.test.js.map +0 -1
  37. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  38. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  39. package/dist/__tests__/navigation-store.test.js +0 -440
  40. package/dist/__tests__/navigation-store.test.js.map +0 -1
  41. package/dist/__tests__/partial-update.test.d.ts +0 -2
  42. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  43. package/dist/__tests__/partial-update.test.js +0 -1009
  44. package/dist/__tests__/partial-update.test.js.map +0 -1
  45. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  46. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  47. package/dist/__tests__/reverse-types.test.js +0 -656
  48. package/dist/__tests__/reverse-types.test.js.map +0 -1
  49. package/dist/__tests__/route-definition.test.d.ts +0 -2
  50. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  51. package/dist/__tests__/route-definition.test.js +0 -55
  52. package/dist/__tests__/route-definition.test.js.map +0 -1
  53. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  54. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  55. package/dist/__tests__/router-helpers.test.js +0 -377
  56. package/dist/__tests__/router-helpers.test.js.map +0 -1
  57. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  58. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  59. package/dist/__tests__/router-integration-2.test.js +0 -426
  60. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  61. package/dist/__tests__/router-integration.test.d.ts +0 -2
  62. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  63. package/dist/__tests__/router-integration.test.js +0 -1051
  64. package/dist/__tests__/router-integration.test.js.map +0 -1
  65. package/dist/__tests__/search-params.test.d.ts +0 -5
  66. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  67. package/dist/__tests__/search-params.test.js +0 -306
  68. package/dist/__tests__/search-params.test.js.map +0 -1
  69. package/dist/__tests__/segment-system.test.d.ts +0 -2
  70. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  71. package/dist/__tests__/segment-system.test.js +0 -627
  72. package/dist/__tests__/segment-system.test.js.map +0 -1
  73. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  74. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  75. package/dist/__tests__/static-handler-types.test.js +0 -63
  76. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  77. package/dist/__tests__/urls.test.d.ts +0 -2
  78. package/dist/__tests__/urls.test.d.ts.map +0 -1
  79. package/dist/__tests__/urls.test.js +0 -421
  80. package/dist/__tests__/urls.test.js.map +0 -1
  81. package/dist/__tests__/use-mount.test.d.ts +0 -2
  82. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  83. package/dist/__tests__/use-mount.test.js +0 -35
  84. package/dist/__tests__/use-mount.test.js.map +0 -1
  85. package/dist/bin/rango.d.ts +0 -2
  86. package/dist/bin/rango.d.ts.map +0 -1
  87. package/dist/bin/rango.js.map +0 -1
  88. package/dist/browser/event-controller.d.ts +0 -191
  89. package/dist/browser/event-controller.d.ts.map +0 -1
  90. package/dist/browser/event-controller.js +0 -559
  91. package/dist/browser/event-controller.js.map +0 -1
  92. package/dist/browser/index.d.ts +0 -2
  93. package/dist/browser/index.d.ts.map +0 -1
  94. package/dist/browser/index.js +0 -14
  95. package/dist/browser/index.js.map +0 -1
  96. package/dist/browser/link-interceptor.d.ts +0 -38
  97. package/dist/browser/link-interceptor.d.ts.map +0 -1
  98. package/dist/browser/link-interceptor.js +0 -99
  99. package/dist/browser/link-interceptor.js.map +0 -1
  100. package/dist/browser/logging.d.ts +0 -10
  101. package/dist/browser/logging.d.ts.map +0 -1
  102. package/dist/browser/logging.js +0 -29
  103. package/dist/browser/logging.js.map +0 -1
  104. package/dist/browser/lru-cache.d.ts +0 -17
  105. package/dist/browser/lru-cache.d.ts.map +0 -1
  106. package/dist/browser/lru-cache.js +0 -50
  107. package/dist/browser/lru-cache.js.map +0 -1
  108. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  109. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  110. package/dist/browser/merge-segment-loaders.js +0 -102
  111. package/dist/browser/merge-segment-loaders.js.map +0 -1
  112. package/dist/browser/navigation-bridge.d.ts +0 -102
  113. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  114. package/dist/browser/navigation-bridge.js +0 -708
  115. package/dist/browser/navigation-bridge.js.map +0 -1
  116. package/dist/browser/navigation-client.d.ts +0 -25
  117. package/dist/browser/navigation-client.d.ts.map +0 -1
  118. package/dist/browser/navigation-client.js +0 -157
  119. package/dist/browser/navigation-client.js.map +0 -1
  120. package/dist/browser/navigation-store.d.ts +0 -101
  121. package/dist/browser/navigation-store.d.ts.map +0 -1
  122. package/dist/browser/navigation-store.js +0 -625
  123. package/dist/browser/navigation-store.js.map +0 -1
  124. package/dist/browser/partial-update.d.ts +0 -75
  125. package/dist/browser/partial-update.d.ts.map +0 -1
  126. package/dist/browser/partial-update.js +0 -426
  127. package/dist/browser/partial-update.js.map +0 -1
  128. package/dist/browser/react/Link.d.ts +0 -86
  129. package/dist/browser/react/Link.d.ts.map +0 -1
  130. package/dist/browser/react/Link.js +0 -128
  131. package/dist/browser/react/Link.js.map +0 -1
  132. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  133. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  134. package/dist/browser/react/NavigationProvider.js +0 -216
  135. package/dist/browser/react/NavigationProvider.js.map +0 -1
  136. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  137. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  138. package/dist/browser/react/ScrollRestoration.js +0 -57
  139. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  140. package/dist/browser/react/context.d.ts +0 -46
  141. package/dist/browser/react/context.d.ts.map +0 -1
  142. package/dist/browser/react/context.js +0 -10
  143. package/dist/browser/react/context.js.map +0 -1
  144. package/dist/browser/react/index.d.ts +0 -11
  145. package/dist/browser/react/index.d.ts.map +0 -1
  146. package/dist/browser/react/index.js +0 -22
  147. package/dist/browser/react/index.js.map +0 -1
  148. package/dist/browser/react/location-state-shared.d.ts +0 -63
  149. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  150. package/dist/browser/react/location-state-shared.js +0 -81
  151. package/dist/browser/react/location-state-shared.js.map +0 -1
  152. package/dist/browser/react/location-state.d.ts +0 -23
  153. package/dist/browser/react/location-state.d.ts.map +0 -1
  154. package/dist/browser/react/location-state.js +0 -29
  155. package/dist/browser/react/location-state.js.map +0 -1
  156. package/dist/browser/react/mount-context.d.ts +0 -24
  157. package/dist/browser/react/mount-context.d.ts.map +0 -1
  158. package/dist/browser/react/mount-context.js +0 -24
  159. package/dist/browser/react/mount-context.js.map +0 -1
  160. package/dist/browser/react/use-action.d.ts +0 -64
  161. package/dist/browser/react/use-action.d.ts.map +0 -1
  162. package/dist/browser/react/use-action.js +0 -134
  163. package/dist/browser/react/use-action.js.map +0 -1
  164. package/dist/browser/react/use-client-cache.d.ts +0 -41
  165. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  166. package/dist/browser/react/use-client-cache.js +0 -39
  167. package/dist/browser/react/use-client-cache.js.map +0 -1
  168. package/dist/browser/react/use-handle.d.ts +0 -31
  169. package/dist/browser/react/use-handle.d.ts.map +0 -1
  170. package/dist/browser/react/use-handle.js +0 -144
  171. package/dist/browser/react/use-handle.js.map +0 -1
  172. package/dist/browser/react/use-href.d.ts +0 -33
  173. package/dist/browser/react/use-href.d.ts.map +0 -1
  174. package/dist/browser/react/use-href.js +0 -39
  175. package/dist/browser/react/use-href.js.map +0 -1
  176. package/dist/browser/react/use-link-status.d.ts +0 -37
  177. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  178. package/dist/browser/react/use-link-status.js +0 -99
  179. package/dist/browser/react/use-link-status.js.map +0 -1
  180. package/dist/browser/react/use-mount.d.ts +0 -25
  181. package/dist/browser/react/use-mount.d.ts.map +0 -1
  182. package/dist/browser/react/use-mount.js +0 -30
  183. package/dist/browser/react/use-mount.js.map +0 -1
  184. package/dist/browser/react/use-navigation.d.ts +0 -27
  185. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  186. package/dist/browser/react/use-navigation.js +0 -87
  187. package/dist/browser/react/use-navigation.js.map +0 -1
  188. package/dist/browser/react/use-segments.d.ts +0 -38
  189. package/dist/browser/react/use-segments.d.ts.map +0 -1
  190. package/dist/browser/react/use-segments.js +0 -130
  191. package/dist/browser/react/use-segments.js.map +0 -1
  192. package/dist/browser/request-controller.d.ts +0 -26
  193. package/dist/browser/request-controller.d.ts.map +0 -1
  194. package/dist/browser/request-controller.js +0 -147
  195. package/dist/browser/request-controller.js.map +0 -1
  196. package/dist/browser/rsc-router.d.ts +0 -129
  197. package/dist/browser/rsc-router.d.ts.map +0 -1
  198. package/dist/browser/rsc-router.js +0 -195
  199. package/dist/browser/rsc-router.js.map +0 -1
  200. package/dist/browser/scroll-restoration.d.ts +0 -93
  201. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  202. package/dist/browser/scroll-restoration.js +0 -321
  203. package/dist/browser/scroll-restoration.js.map +0 -1
  204. package/dist/browser/segment-structure-assert.d.ts +0 -17
  205. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  206. package/dist/browser/segment-structure-assert.js +0 -59
  207. package/dist/browser/segment-structure-assert.js.map +0 -1
  208. package/dist/browser/server-action-bridge.d.ts +0 -26
  209. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  210. package/dist/browser/server-action-bridge.js +0 -668
  211. package/dist/browser/server-action-bridge.js.map +0 -1
  212. package/dist/browser/shallow.d.ts +0 -12
  213. package/dist/browser/shallow.d.ts.map +0 -1
  214. package/dist/browser/shallow.js +0 -34
  215. package/dist/browser/shallow.js.map +0 -1
  216. package/dist/browser/types.d.ts +0 -369
  217. package/dist/browser/types.d.ts.map +0 -1
  218. package/dist/browser/types.js +0 -2
  219. package/dist/browser/types.js.map +0 -1
  220. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  221. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  222. package/dist/build/__tests__/generate-cli.test.js +0 -237
  223. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  224. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  225. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  226. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  227. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  228. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  229. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  230. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  231. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  232. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  233. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  234. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  235. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  236. package/dist/build/generate-manifest.d.ts +0 -81
  237. package/dist/build/generate-manifest.d.ts.map +0 -1
  238. package/dist/build/generate-manifest.js +0 -276
  239. package/dist/build/generate-manifest.js.map +0 -1
  240. package/dist/build/generate-route-types.d.ts +0 -115
  241. package/dist/build/generate-route-types.d.ts.map +0 -1
  242. package/dist/build/generate-route-types.js +0 -740
  243. package/dist/build/generate-route-types.js.map +0 -1
  244. package/dist/build/index.d.ts +0 -21
  245. package/dist/build/index.d.ts.map +0 -1
  246. package/dist/build/index.js +0 -21
  247. package/dist/build/index.js.map +0 -1
  248. package/dist/build/route-trie.d.ts +0 -71
  249. package/dist/build/route-trie.d.ts.map +0 -1
  250. package/dist/build/route-trie.js +0 -175
  251. package/dist/build/route-trie.js.map +0 -1
  252. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  253. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  254. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  255. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  256. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  257. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  258. package/dist/cache/__tests__/document-cache.test.js +0 -345
  259. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  260. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  261. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  262. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  263. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  264. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  265. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  266. package/dist/cache/__tests__/memory-store.test.js +0 -367
  267. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  268. package/dist/cache/cache-scope.d.ts +0 -102
  269. package/dist/cache/cache-scope.d.ts.map +0 -1
  270. package/dist/cache/cache-scope.js +0 -440
  271. package/dist/cache/cache-scope.js.map +0 -1
  272. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  273. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  274. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  275. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  276. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  277. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  278. package/dist/cache/cf/cf-cache-store.js +0 -242
  279. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  280. package/dist/cache/cf/index.d.ts +0 -14
  281. package/dist/cache/cf/index.d.ts.map +0 -1
  282. package/dist/cache/cf/index.js +0 -17
  283. package/dist/cache/cf/index.js.map +0 -1
  284. package/dist/cache/document-cache.d.ts +0 -64
  285. package/dist/cache/document-cache.d.ts.map +0 -1
  286. package/dist/cache/document-cache.js +0 -228
  287. package/dist/cache/document-cache.js.map +0 -1
  288. package/dist/cache/index.d.ts +0 -19
  289. package/dist/cache/index.d.ts.map +0 -1
  290. package/dist/cache/index.js +0 -21
  291. package/dist/cache/index.js.map +0 -1
  292. package/dist/cache/memory-segment-store.d.ts +0 -110
  293. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  294. package/dist/cache/memory-segment-store.js +0 -117
  295. package/dist/cache/memory-segment-store.js.map +0 -1
  296. package/dist/cache/memory-store.d.ts +0 -41
  297. package/dist/cache/memory-store.d.ts.map +0 -1
  298. package/dist/cache/memory-store.js +0 -191
  299. package/dist/cache/memory-store.js.map +0 -1
  300. package/dist/cache/types.d.ts +0 -317
  301. package/dist/cache/types.d.ts.map +0 -1
  302. package/dist/cache/types.js +0 -12
  303. package/dist/cache/types.js.map +0 -1
  304. package/dist/client.d.ts +0 -248
  305. package/dist/client.d.ts.map +0 -1
  306. package/dist/client.js +0 -367
  307. package/dist/client.js.map +0 -1
  308. package/dist/client.rsc.d.ts +0 -26
  309. package/dist/client.rsc.d.ts.map +0 -1
  310. package/dist/client.rsc.js +0 -46
  311. package/dist/client.rsc.js.map +0 -1
  312. package/dist/component-utils.d.ts +0 -36
  313. package/dist/component-utils.d.ts.map +0 -1
  314. package/dist/component-utils.js +0 -61
  315. package/dist/component-utils.js.map +0 -1
  316. package/dist/components/DefaultDocument.d.ts +0 -13
  317. package/dist/components/DefaultDocument.d.ts.map +0 -1
  318. package/dist/components/DefaultDocument.js +0 -15
  319. package/dist/components/DefaultDocument.js.map +0 -1
  320. package/dist/debug.d.ts +0 -58
  321. package/dist/debug.d.ts.map +0 -1
  322. package/dist/debug.js +0 -157
  323. package/dist/debug.js.map +0 -1
  324. package/dist/default-error-boundary.d.ts +0 -11
  325. package/dist/default-error-boundary.d.ts.map +0 -1
  326. package/dist/default-error-boundary.js +0 -45
  327. package/dist/default-error-boundary.js.map +0 -1
  328. package/dist/deps/browser.d.ts +0 -2
  329. package/dist/deps/browser.d.ts.map +0 -1
  330. package/dist/deps/browser.js +0 -3
  331. package/dist/deps/browser.js.map +0 -1
  332. package/dist/deps/html-stream-client.d.ts +0 -2
  333. package/dist/deps/html-stream-client.d.ts.map +0 -1
  334. package/dist/deps/html-stream-client.js +0 -3
  335. package/dist/deps/html-stream-client.js.map +0 -1
  336. package/dist/deps/html-stream-server.d.ts +0 -2
  337. package/dist/deps/html-stream-server.d.ts.map +0 -1
  338. package/dist/deps/html-stream-server.js +0 -3
  339. package/dist/deps/html-stream-server.js.map +0 -1
  340. package/dist/deps/rsc.d.ts +0 -2
  341. package/dist/deps/rsc.d.ts.map +0 -1
  342. package/dist/deps/rsc.js +0 -4
  343. package/dist/deps/rsc.js.map +0 -1
  344. package/dist/deps/ssr.d.ts +0 -2
  345. package/dist/deps/ssr.d.ts.map +0 -1
  346. package/dist/deps/ssr.js +0 -3
  347. package/dist/deps/ssr.js.map +0 -1
  348. package/dist/errors.d.ts +0 -174
  349. package/dist/errors.d.ts.map +0 -1
  350. package/dist/errors.js +0 -241
  351. package/dist/errors.js.map +0 -1
  352. package/dist/handle.d.ts +0 -78
  353. package/dist/handle.d.ts.map +0 -1
  354. package/dist/handle.js +0 -82
  355. package/dist/handle.js.map +0 -1
  356. package/dist/handles/MetaTags.d.ts +0 -14
  357. package/dist/handles/MetaTags.d.ts.map +0 -1
  358. package/dist/handles/MetaTags.js +0 -136
  359. package/dist/handles/MetaTags.js.map +0 -1
  360. package/dist/handles/index.d.ts +0 -6
  361. package/dist/handles/index.d.ts.map +0 -1
  362. package/dist/handles/index.js +0 -6
  363. package/dist/handles/index.js.map +0 -1
  364. package/dist/handles/meta.d.ts +0 -39
  365. package/dist/handles/meta.d.ts.map +0 -1
  366. package/dist/handles/meta.js +0 -202
  367. package/dist/handles/meta.js.map +0 -1
  368. package/dist/host/__tests__/errors.test.d.ts +0 -2
  369. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  370. package/dist/host/__tests__/errors.test.js +0 -76
  371. package/dist/host/__tests__/errors.test.js.map +0 -1
  372. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  373. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  374. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  375. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  376. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  377. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  378. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  379. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  380. package/dist/host/__tests__/router.test.d.ts +0 -2
  381. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  382. package/dist/host/__tests__/router.test.js +0 -241
  383. package/dist/host/__tests__/router.test.js.map +0 -1
  384. package/dist/host/__tests__/testing.test.d.ts +0 -2
  385. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  386. package/dist/host/__tests__/testing.test.js +0 -64
  387. package/dist/host/__tests__/testing.test.js.map +0 -1
  388. package/dist/host/__tests__/utils.test.d.ts +0 -2
  389. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  390. package/dist/host/__tests__/utils.test.js +0 -29
  391. package/dist/host/__tests__/utils.test.js.map +0 -1
  392. package/dist/host/cookie-handler.d.ts +0 -34
  393. package/dist/host/cookie-handler.d.ts.map +0 -1
  394. package/dist/host/cookie-handler.js +0 -124
  395. package/dist/host/cookie-handler.js.map +0 -1
  396. package/dist/host/errors.d.ts +0 -56
  397. package/dist/host/errors.d.ts.map +0 -1
  398. package/dist/host/errors.js +0 -79
  399. package/dist/host/errors.js.map +0 -1
  400. package/dist/host/index.d.ts +0 -29
  401. package/dist/host/index.d.ts.map +0 -1
  402. package/dist/host/index.js +0 -32
  403. package/dist/host/index.js.map +0 -1
  404. package/dist/host/pattern-matcher.d.ts +0 -36
  405. package/dist/host/pattern-matcher.d.ts.map +0 -1
  406. package/dist/host/pattern-matcher.js +0 -172
  407. package/dist/host/pattern-matcher.js.map +0 -1
  408. package/dist/host/router.d.ts +0 -26
  409. package/dist/host/router.d.ts.map +0 -1
  410. package/dist/host/router.js +0 -218
  411. package/dist/host/router.js.map +0 -1
  412. package/dist/host/testing.d.ts +0 -36
  413. package/dist/host/testing.d.ts.map +0 -1
  414. package/dist/host/testing.js +0 -55
  415. package/dist/host/testing.js.map +0 -1
  416. package/dist/host/types.d.ts +0 -115
  417. package/dist/host/types.d.ts.map +0 -1
  418. package/dist/host/types.js +0 -7
  419. package/dist/host/types.js.map +0 -1
  420. package/dist/host/utils.d.ts +0 -21
  421. package/dist/host/utils.d.ts.map +0 -1
  422. package/dist/host/utils.js +0 -23
  423. package/dist/host/utils.js.map +0 -1
  424. package/dist/href-client.d.ts +0 -131
  425. package/dist/href-client.d.ts.map +0 -1
  426. package/dist/href-client.js +0 -64
  427. package/dist/href-client.js.map +0 -1
  428. package/dist/href-context.d.ts +0 -29
  429. package/dist/href-context.d.ts.map +0 -1
  430. package/dist/href-context.js +0 -21
  431. package/dist/href-context.js.map +0 -1
  432. package/dist/index.d.ts +0 -73
  433. package/dist/index.d.ts.map +0 -1
  434. package/dist/index.js +0 -91
  435. package/dist/index.js.map +0 -1
  436. package/dist/index.rsc.d.ts +0 -32
  437. package/dist/index.rsc.d.ts.map +0 -1
  438. package/dist/index.rsc.js +0 -40
  439. package/dist/index.rsc.js.map +0 -1
  440. package/dist/internal-debug.d.ts +0 -2
  441. package/dist/internal-debug.d.ts.map +0 -1
  442. package/dist/internal-debug.js +0 -5
  443. package/dist/internal-debug.js.map +0 -1
  444. package/dist/loader.d.ts +0 -14
  445. package/dist/loader.d.ts.map +0 -1
  446. package/dist/loader.js +0 -20
  447. package/dist/loader.js.map +0 -1
  448. package/dist/loader.rsc.d.ts +0 -19
  449. package/dist/loader.rsc.d.ts.map +0 -1
  450. package/dist/loader.rsc.js +0 -99
  451. package/dist/loader.rsc.js.map +0 -1
  452. package/dist/network-error-thrower.d.ts +0 -17
  453. package/dist/network-error-thrower.d.ts.map +0 -1
  454. package/dist/network-error-thrower.js +0 -14
  455. package/dist/network-error-thrower.js.map +0 -1
  456. package/dist/outlet-context.d.ts +0 -13
  457. package/dist/outlet-context.d.ts.map +0 -1
  458. package/dist/outlet-context.js +0 -3
  459. package/dist/outlet-context.js.map +0 -1
  460. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  461. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  462. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  463. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  464. package/dist/prerender/param-hash.d.ts +0 -16
  465. package/dist/prerender/param-hash.d.ts.map +0 -1
  466. package/dist/prerender/param-hash.js +0 -36
  467. package/dist/prerender/param-hash.js.map +0 -1
  468. package/dist/prerender/store.d.ts +0 -38
  469. package/dist/prerender/store.d.ts.map +0 -1
  470. package/dist/prerender/store.js +0 -61
  471. package/dist/prerender/store.js.map +0 -1
  472. package/dist/prerender.d.ts +0 -66
  473. package/dist/prerender.d.ts.map +0 -1
  474. package/dist/prerender.js +0 -57
  475. package/dist/prerender.js.map +0 -1
  476. package/dist/reverse.d.ts +0 -196
  477. package/dist/reverse.d.ts.map +0 -1
  478. package/dist/reverse.js +0 -78
  479. package/dist/reverse.js.map +0 -1
  480. package/dist/root-error-boundary.d.ts +0 -33
  481. package/dist/root-error-boundary.d.ts.map +0 -1
  482. package/dist/root-error-boundary.js +0 -165
  483. package/dist/root-error-boundary.js.map +0 -1
  484. package/dist/route-content-wrapper.d.ts +0 -46
  485. package/dist/route-content-wrapper.d.ts.map +0 -1
  486. package/dist/route-content-wrapper.js +0 -77
  487. package/dist/route-content-wrapper.js.map +0 -1
  488. package/dist/route-definition.d.ts +0 -421
  489. package/dist/route-definition.d.ts.map +0 -1
  490. package/dist/route-definition.js +0 -868
  491. package/dist/route-definition.js.map +0 -1
  492. package/dist/route-map-builder.d.ts +0 -155
  493. package/dist/route-map-builder.d.ts.map +0 -1
  494. package/dist/route-map-builder.js +0 -237
  495. package/dist/route-map-builder.js.map +0 -1
  496. package/dist/route-types.d.ts +0 -165
  497. package/dist/route-types.d.ts.map +0 -1
  498. package/dist/route-types.js +0 -7
  499. package/dist/route-types.js.map +0 -1
  500. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  501. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  502. package/dist/router/__tests__/handler-context.test.js +0 -65
  503. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  504. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  505. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  506. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  507. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  508. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  509. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  510. package/dist/router/__tests__/match-context.test.js +0 -92
  511. package/dist/router/__tests__/match-context.test.js.map +0 -1
  512. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  513. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  514. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  515. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  516. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  517. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  518. package/dist/router/__tests__/match-result.test.js +0 -457
  519. package/dist/router/__tests__/match-result.test.js.map +0 -1
  520. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  521. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  522. package/dist/router/__tests__/on-error.test.js +0 -678
  523. package/dist/router/__tests__/on-error.test.js.map +0 -1
  524. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  525. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  526. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  527. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  528. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  529. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  530. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  531. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  532. package/dist/router/error-handling.d.ts +0 -77
  533. package/dist/router/error-handling.d.ts.map +0 -1
  534. package/dist/router/error-handling.js +0 -202
  535. package/dist/router/error-handling.js.map +0 -1
  536. package/dist/router/handler-context.d.ts +0 -20
  537. package/dist/router/handler-context.d.ts.map +0 -1
  538. package/dist/router/handler-context.js +0 -198
  539. package/dist/router/handler-context.js.map +0 -1
  540. package/dist/router/intercept-resolution.d.ts +0 -66
  541. package/dist/router/intercept-resolution.d.ts.map +0 -1
  542. package/dist/router/intercept-resolution.js +0 -246
  543. package/dist/router/intercept-resolution.js.map +0 -1
  544. package/dist/router/loader-resolution.d.ts +0 -64
  545. package/dist/router/loader-resolution.d.ts.map +0 -1
  546. package/dist/router/loader-resolution.js +0 -284
  547. package/dist/router/loader-resolution.js.map +0 -1
  548. package/dist/router/logging.d.ts +0 -15
  549. package/dist/router/logging.d.ts.map +0 -1
  550. package/dist/router/logging.js +0 -99
  551. package/dist/router/logging.js.map +0 -1
  552. package/dist/router/manifest.d.ts +0 -22
  553. package/dist/router/manifest.d.ts.map +0 -1
  554. package/dist/router/manifest.js +0 -181
  555. package/dist/router/manifest.js.map +0 -1
  556. package/dist/router/match-api.d.ts +0 -35
  557. package/dist/router/match-api.d.ts.map +0 -1
  558. package/dist/router/match-api.js +0 -406
  559. package/dist/router/match-api.js.map +0 -1
  560. package/dist/router/match-context.d.ts +0 -206
  561. package/dist/router/match-context.d.ts.map +0 -1
  562. package/dist/router/match-context.js +0 -17
  563. package/dist/router/match-context.js.map +0 -1
  564. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  565. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  566. package/dist/router/match-middleware/background-revalidation.js +0 -75
  567. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  568. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  569. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  570. package/dist/router/match-middleware/cache-lookup.js +0 -257
  571. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  572. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  573. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  574. package/dist/router/match-middleware/cache-store.js +0 -108
  575. package/dist/router/match-middleware/cache-store.js.map +0 -1
  576. package/dist/router/match-middleware/index.d.ts +0 -81
  577. package/dist/router/match-middleware/index.d.ts.map +0 -1
  578. package/dist/router/match-middleware/index.js +0 -80
  579. package/dist/router/match-middleware/index.js.map +0 -1
  580. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  581. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  582. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  583. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  584. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  585. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  586. package/dist/router/match-middleware/segment-resolution.js +0 -53
  587. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  588. package/dist/router/match-pipelines.d.ts +0 -147
  589. package/dist/router/match-pipelines.d.ts.map +0 -1
  590. package/dist/router/match-pipelines.js +0 -82
  591. package/dist/router/match-pipelines.js.map +0 -1
  592. package/dist/router/match-result.d.ts +0 -126
  593. package/dist/router/match-result.d.ts.map +0 -1
  594. package/dist/router/match-result.js +0 -93
  595. package/dist/router/match-result.js.map +0 -1
  596. package/dist/router/metrics.d.ts +0 -20
  597. package/dist/router/metrics.d.ts.map +0 -1
  598. package/dist/router/metrics.js +0 -47
  599. package/dist/router/metrics.js.map +0 -1
  600. package/dist/router/middleware.d.ts +0 -249
  601. package/dist/router/middleware.d.ts.map +0 -1
  602. package/dist/router/middleware.js +0 -434
  603. package/dist/router/middleware.js.map +0 -1
  604. package/dist/router/middleware.test.d.ts +0 -2
  605. package/dist/router/middleware.test.d.ts.map +0 -1
  606. package/dist/router/middleware.test.js +0 -816
  607. package/dist/router/middleware.test.js.map +0 -1
  608. package/dist/router/pattern-matching.d.ts +0 -149
  609. package/dist/router/pattern-matching.d.ts.map +0 -1
  610. package/dist/router/pattern-matching.js +0 -349
  611. package/dist/router/pattern-matching.js.map +0 -1
  612. package/dist/router/revalidation.d.ts +0 -44
  613. package/dist/router/revalidation.d.ts.map +0 -1
  614. package/dist/router/revalidation.js +0 -147
  615. package/dist/router/revalidation.js.map +0 -1
  616. package/dist/router/router-context.d.ts +0 -135
  617. package/dist/router/router-context.d.ts.map +0 -1
  618. package/dist/router/router-context.js +0 -36
  619. package/dist/router/router-context.js.map +0 -1
  620. package/dist/router/segment-resolution.d.ts +0 -127
  621. package/dist/router/segment-resolution.d.ts.map +0 -1
  622. package/dist/router/segment-resolution.js +0 -919
  623. package/dist/router/segment-resolution.js.map +0 -1
  624. package/dist/router/trie-matching.d.ts +0 -40
  625. package/dist/router/trie-matching.d.ts.map +0 -1
  626. package/dist/router/trie-matching.js +0 -127
  627. package/dist/router/trie-matching.js.map +0 -1
  628. package/dist/router/types.d.ts +0 -136
  629. package/dist/router/types.d.ts.map +0 -1
  630. package/dist/router/types.js +0 -7
  631. package/dist/router/types.js.map +0 -1
  632. package/dist/router.d.ts +0 -753
  633. package/dist/router.d.ts.map +0 -1
  634. package/dist/router.gen.d.ts +0 -6
  635. package/dist/router.gen.d.ts.map +0 -1
  636. package/dist/router.gen.js +0 -6
  637. package/dist/router.gen.js.map +0 -1
  638. package/dist/router.js +0 -1304
  639. package/dist/router.js.map +0 -1
  640. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  641. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  642. package/dist/rsc/__tests__/helpers.test.js +0 -140
  643. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  644. package/dist/rsc/handler.d.ts +0 -45
  645. package/dist/rsc/handler.d.ts.map +0 -1
  646. package/dist/rsc/handler.js +0 -1172
  647. package/dist/rsc/handler.js.map +0 -1
  648. package/dist/rsc/helpers.d.ts +0 -16
  649. package/dist/rsc/helpers.d.ts.map +0 -1
  650. package/dist/rsc/helpers.js +0 -55
  651. package/dist/rsc/helpers.js.map +0 -1
  652. package/dist/rsc/index.d.ts +0 -22
  653. package/dist/rsc/index.d.ts.map +0 -1
  654. package/dist/rsc/index.js +0 -23
  655. package/dist/rsc/index.js.map +0 -1
  656. package/dist/rsc/nonce.d.ts +0 -9
  657. package/dist/rsc/nonce.d.ts.map +0 -1
  658. package/dist/rsc/nonce.js +0 -18
  659. package/dist/rsc/nonce.js.map +0 -1
  660. package/dist/rsc/types.d.ts +0 -206
  661. package/dist/rsc/types.d.ts.map +0 -1
  662. package/dist/rsc/types.js +0 -8
  663. package/dist/rsc/types.js.map +0 -1
  664. package/dist/search-params.d.ts +0 -103
  665. package/dist/search-params.d.ts.map +0 -1
  666. package/dist/search-params.js +0 -74
  667. package/dist/search-params.js.map +0 -1
  668. package/dist/segment-system.d.ts +0 -75
  669. package/dist/segment-system.d.ts.map +0 -1
  670. package/dist/segment-system.js +0 -336
  671. package/dist/segment-system.js.map +0 -1
  672. package/dist/server/context.d.ts +0 -245
  673. package/dist/server/context.d.ts.map +0 -1
  674. package/dist/server/context.js +0 -197
  675. package/dist/server/context.js.map +0 -1
  676. package/dist/server/fetchable-loader-store.d.ts +0 -18
  677. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  678. package/dist/server/fetchable-loader-store.js +0 -18
  679. package/dist/server/fetchable-loader-store.js.map +0 -1
  680. package/dist/server/handle-store.d.ts +0 -85
  681. package/dist/server/handle-store.d.ts.map +0 -1
  682. package/dist/server/handle-store.js +0 -142
  683. package/dist/server/handle-store.js.map +0 -1
  684. package/dist/server/loader-registry.d.ts +0 -55
  685. package/dist/server/loader-registry.d.ts.map +0 -1
  686. package/dist/server/loader-registry.js +0 -132
  687. package/dist/server/loader-registry.js.map +0 -1
  688. package/dist/server/request-context.d.ts +0 -226
  689. package/dist/server/request-context.d.ts.map +0 -1
  690. package/dist/server/request-context.js +0 -290
  691. package/dist/server/request-context.js.map +0 -1
  692. package/dist/server/root-layout.d.ts +0 -4
  693. package/dist/server/root-layout.d.ts.map +0 -1
  694. package/dist/server/root-layout.js +0 -5
  695. package/dist/server/root-layout.js.map +0 -1
  696. package/dist/server.d.ts +0 -15
  697. package/dist/server.d.ts.map +0 -1
  698. package/dist/server.js +0 -20
  699. package/dist/server.js.map +0 -1
  700. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  701. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  702. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  703. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  704. package/dist/ssr/index.d.ts +0 -98
  705. package/dist/ssr/index.d.ts.map +0 -1
  706. package/dist/ssr/index.js +0 -158
  707. package/dist/ssr/index.js.map +0 -1
  708. package/dist/static-handler.d.ts +0 -50
  709. package/dist/static-handler.d.ts.map +0 -1
  710. package/dist/static-handler.gen.d.ts +0 -5
  711. package/dist/static-handler.gen.d.ts.map +0 -1
  712. package/dist/static-handler.gen.js +0 -5
  713. package/dist/static-handler.gen.js.map +0 -1
  714. package/dist/static-handler.js +0 -29
  715. package/dist/static-handler.js.map +0 -1
  716. package/dist/theme/ThemeProvider.d.ts +0 -20
  717. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  718. package/dist/theme/ThemeProvider.js +0 -240
  719. package/dist/theme/ThemeProvider.js.map +0 -1
  720. package/dist/theme/ThemeScript.d.ts +0 -48
  721. package/dist/theme/ThemeScript.d.ts.map +0 -1
  722. package/dist/theme/ThemeScript.js +0 -13
  723. package/dist/theme/ThemeScript.js.map +0 -1
  724. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  725. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  726. package/dist/theme/__tests__/theme.test.js +0 -103
  727. package/dist/theme/__tests__/theme.test.js.map +0 -1
  728. package/dist/theme/constants.d.ts +0 -29
  729. package/dist/theme/constants.d.ts.map +0 -1
  730. package/dist/theme/constants.js +0 -48
  731. package/dist/theme/constants.js.map +0 -1
  732. package/dist/theme/index.d.ts +0 -31
  733. package/dist/theme/index.d.ts.map +0 -1
  734. package/dist/theme/index.js +0 -36
  735. package/dist/theme/index.js.map +0 -1
  736. package/dist/theme/theme-context.d.ts +0 -40
  737. package/dist/theme/theme-context.d.ts.map +0 -1
  738. package/dist/theme/theme-context.js +0 -60
  739. package/dist/theme/theme-context.js.map +0 -1
  740. package/dist/theme/theme-script.d.ts +0 -27
  741. package/dist/theme/theme-script.d.ts.map +0 -1
  742. package/dist/theme/theme-script.js +0 -147
  743. package/dist/theme/theme-script.js.map +0 -1
  744. package/dist/theme/types.d.ts +0 -163
  745. package/dist/theme/types.d.ts.map +0 -1
  746. package/dist/theme/types.js +0 -11
  747. package/dist/theme/types.js.map +0 -1
  748. package/dist/theme/use-theme.d.ts +0 -12
  749. package/dist/theme/use-theme.d.ts.map +0 -1
  750. package/dist/theme/use-theme.js +0 -40
  751. package/dist/theme/use-theme.js.map +0 -1
  752. package/dist/types.d.ts +0 -1479
  753. package/dist/types.d.ts.map +0 -1
  754. package/dist/types.js +0 -10
  755. package/dist/types.js.map +0 -1
  756. package/dist/urls.d.ts +0 -441
  757. package/dist/urls.d.ts.map +0 -1
  758. package/dist/urls.gen.d.ts +0 -8
  759. package/dist/urls.gen.d.ts.map +0 -1
  760. package/dist/urls.gen.js +0 -8
  761. package/dist/urls.gen.js.map +0 -1
  762. package/dist/urls.js +0 -443
  763. package/dist/urls.js.map +0 -1
  764. package/dist/use-loader.d.ts +0 -127
  765. package/dist/use-loader.d.ts.map +0 -1
  766. package/dist/use-loader.js +0 -237
  767. package/dist/use-loader.js.map +0 -1
  768. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  769. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  770. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  771. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  772. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  773. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  774. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  775. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  776. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  777. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  778. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  779. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  780. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  781. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  782. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  783. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  784. package/dist/vite/ast-handler-extract.d.ts +0 -49
  785. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  786. package/dist/vite/ast-handler-extract.js +0 -249
  787. package/dist/vite/ast-handler-extract.js.map +0 -1
  788. package/dist/vite/expose-action-id.d.ts +0 -19
  789. package/dist/vite/expose-action-id.d.ts.map +0 -1
  790. package/dist/vite/expose-action-id.js +0 -250
  791. package/dist/vite/expose-action-id.js.map +0 -1
  792. package/dist/vite/expose-id-utils.d.ts +0 -69
  793. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  794. package/dist/vite/expose-id-utils.js +0 -289
  795. package/dist/vite/expose-id-utils.js.map +0 -1
  796. package/dist/vite/expose-internal-ids.d.ts +0 -22
  797. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  798. package/dist/vite/expose-internal-ids.js +0 -886
  799. package/dist/vite/expose-internal-ids.js.map +0 -1
  800. package/dist/vite/index.d.ts +0 -149
  801. package/dist/vite/index.d.ts.map +0 -1
  802. package/dist/vite/index.js.bak +0 -5448
  803. package/dist/vite/index.js.map +0 -1
  804. package/dist/vite/index.named-routes.gen.ts +0 -103
  805. package/dist/vite/package-resolution.d.ts +0 -43
  806. package/dist/vite/package-resolution.d.ts.map +0 -1
  807. package/dist/vite/package-resolution.js +0 -112
  808. package/dist/vite/package-resolution.js.map +0 -1
  809. package/dist/vite/virtual-entries.d.ts +0 -25
  810. package/dist/vite/virtual-entries.d.ts.map +0 -1
  811. package/dist/vite/virtual-entries.js +0 -110
  812. package/dist/vite/virtual-entries.js.map +0 -1
@@ -1,1009 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- // Mock startTransition to run callbacks synchronously
3
- vi.mock("react", async () => {
4
- const actual = await vi.importActual("react");
5
- return {
6
- ...actual,
7
- startTransition: (fn) => fn(),
8
- };
9
- });
10
- // Let merge helpers run as real code (pure logic)
11
- // Mock assertSegmentStructure to suppress dev warnings
12
- vi.mock("../browser/segment-structure-assert.js", () => ({
13
- assertSegmentStructure: vi.fn(),
14
- }));
15
- import { createPartialUpdater } from "../browser/partial-update";
16
- // ---------------------------------------------------------------------------
17
- // Test helpers
18
- // ---------------------------------------------------------------------------
19
- function seg(id, overrides) {
20
- return {
21
- id,
22
- namespace: "",
23
- index: 0,
24
- type: "route",
25
- component: `component-${id}`,
26
- ...overrides,
27
- };
28
- }
29
- function createMockStore(opts) {
30
- const cache = new Map();
31
- const historyKey = opts?.historyKey ?? "/";
32
- if (opts?.cachedSegments) {
33
- cache.set(historyKey, { segments: opts.cachedSegments, stale: false });
34
- }
35
- let currentHistoryKey = historyKey;
36
- let interceptSourceUrl = null;
37
- return {
38
- getHistoryKey: vi.fn(() => currentHistoryKey),
39
- setHistoryKey: vi.fn((k) => {
40
- currentHistoryKey = k;
41
- }),
42
- getCachedSegments: vi.fn((key) => cache.get(key)),
43
- getSegmentState: vi.fn(() => ({
44
- path: "/",
45
- currentUrl: opts?.currentUrl ?? "http://localhost/",
46
- currentSegmentIds: opts?.segmentIds ?? [],
47
- })),
48
- setInterceptSourceUrl: vi.fn((url) => {
49
- interceptSourceUrl = url;
50
- }),
51
- getInterceptSourceUrl: vi.fn(() => interceptSourceUrl),
52
- // Stubs for methods not directly used in partial-update
53
- getState: vi.fn(() => ({ state: "idle" })),
54
- setState: vi.fn(),
55
- subscribe: vi.fn(),
56
- cacheSegmentsForHistory: vi.fn(),
57
- hasHistoryCache: vi.fn(() => false),
58
- setPath: vi.fn(),
59
- setCurrentUrl: vi.fn(),
60
- setSegmentIds: vi.fn(),
61
- markCacheAsStale: vi.fn(),
62
- clearHistoryCache: vi.fn(),
63
- markCacheAsStaleAndBroadcast: vi.fn(),
64
- broadcastCacheInvalidation: vi.fn(),
65
- setCrossTabRefreshCallback: vi.fn(),
66
- addInflightAction: vi.fn(),
67
- removeInflightAction: vi.fn(),
68
- isActionInProgress: vi.fn(() => false),
69
- setActionInProgress: vi.fn(),
70
- updateCacheHandleData: vi.fn(),
71
- onUpdate: vi.fn(),
72
- emitUpdate: vi.fn(),
73
- getActionState: vi.fn(),
74
- setActionState: vi.fn(),
75
- subscribeToAction: vi.fn(),
76
- };
77
- }
78
- function createMockClient(payload, opts) {
79
- let resolveStream;
80
- // By default, streamComplete resolves immediately.
81
- // The async function's return Promise adopts streamComplete (JS promise flattening),
82
- // so a hanging stream would hang the entire await.
83
- const streamComplete = opts?.hangStream
84
- ? new Promise((resolve) => {
85
- resolveStream = resolve;
86
- })
87
- : Promise.resolve();
88
- return {
89
- client: {
90
- fetchPartial: vi.fn(async () => ({
91
- payload,
92
- streamComplete,
93
- })),
94
- },
95
- resolveStream: () => resolveStream(),
96
- };
97
- }
98
- function createMockTx(currentUrl = "http://localhost/") {
99
- return {
100
- currentUrl,
101
- startStreaming: vi.fn(() => ({ end: vi.fn() })),
102
- commit: vi.fn(),
103
- };
104
- }
105
- // ---------------------------------------------------------------------------
106
- // Tests
107
- // ---------------------------------------------------------------------------
108
- describe("partial-update", () => {
109
- describe("partial update (isPartial=true)", () => {
110
- it("merges server diff segments with cached segments", async () => {
111
- const cachedLayout = seg("L0", { type: "layout", component: "cached-layout" });
112
- const cachedRoute = seg("L0R0", { component: "cached-route" });
113
- const newRoute = seg("L0R0", { component: "new-route" });
114
- const store = createMockStore({
115
- cachedSegments: [cachedLayout, cachedRoute],
116
- });
117
- const { client } = createMockClient({
118
- metadata: {
119
- isPartial: true,
120
- segments: [newRoute],
121
- matched: ["L0", "L0R0"],
122
- diff: ["L0R0"],
123
- },
124
- });
125
- const renderSegments = vi.fn(async (segs) => `tree-${segs.length}`);
126
- const onUpdate = vi.fn();
127
- const tx = createMockTx();
128
- const updater = createPartialUpdater({
129
- store: store,
130
- client: client,
131
- onUpdate,
132
- renderSegments,
133
- });
134
- await updater("http://localhost/page", ["L0", "L0R0"], false, undefined, tx);
135
- // renderSegments should be called with merged segments
136
- expect(renderSegments).toHaveBeenCalledTimes(1);
137
- const renderedSegments = renderSegments.mock.calls[0][0];
138
- expect(renderedSegments).toHaveLength(2);
139
- // L0 should come from cache (not in diff)
140
- expect(renderedSegments.find((s) => s.id === "L0").component).toBe("cached-layout");
141
- // L0R0 should come from server (in diff)
142
- expect(renderedSegments.find((s) => s.id === "L0R0").component).toBe("new-route");
143
- // tx.commit called with all segment IDs
144
- expect(tx.commit).toHaveBeenCalledWith(["L0", "L0R0"], expect.any(Array), undefined);
145
- // onUpdate called with rendered tree
146
- expect(onUpdate).toHaveBeenCalledWith({
147
- root: `tree-2`,
148
- metadata: expect.objectContaining({ isPartial: true }),
149
- });
150
- });
151
- it("preserves cached component when server returns null for layout", async () => {
152
- const cachedLayout = seg("L0", { type: "layout", component: "my-layout" });
153
- const newLayout = seg("L0", { type: "layout", component: null });
154
- const cachedRoute = seg("L0R0");
155
- const store = createMockStore({
156
- cachedSegments: [cachedLayout, cachedRoute],
157
- });
158
- const { client } = createMockClient({
159
- metadata: {
160
- isPartial: true,
161
- segments: [newLayout],
162
- matched: ["L0", "L0R0"],
163
- diff: ["L0"],
164
- },
165
- });
166
- const renderSegments = vi.fn(async () => "tree");
167
- const tx = createMockTx();
168
- const updater = createPartialUpdater({
169
- store: store,
170
- client: client,
171
- onUpdate: vi.fn(),
172
- renderSegments,
173
- });
174
- await updater("http://localhost/", ["L0", "L0R0"], false, undefined, tx);
175
- const rendered = renderSegments.mock.calls[0][0];
176
- const layout = rendered.find((s) => s.id === "L0");
177
- // Should preserve cached component, not null
178
- expect(layout.component).toBe("my-layout");
179
- });
180
- it("clears loading state for cached (unchanged) segments", async () => {
181
- const cached = seg("R0", { loading: "skeleton" });
182
- const store = createMockStore({ cachedSegments: [cached] });
183
- const { client } = createMockClient({
184
- metadata: {
185
- isPartial: true,
186
- segments: [],
187
- matched: ["R0"],
188
- diff: ["R0"],
189
- },
190
- });
191
- // No server segment for R0 in newSegmentMap, but it's in matched.
192
- // Since it's not found in newSegmentMap, it falls back to cache.
193
- // Actually, let me fix this: R0 is in diff but not in segments from server.
194
- // So newSegmentMap won't have R0. It'll use cache.
195
- // Actually - let me re-read. segments: [] means newSegmentMap has nothing.
196
- // matched: ["R0"] means we try to find R0 in newSegmentMap (miss) then cache (hit).
197
- // Cache has loading set → should be cleared to undefined.
198
- const renderSegments = vi.fn(async () => "tree");
199
- const tx = createMockTx();
200
- const updater = createPartialUpdater({
201
- store: store,
202
- client: client,
203
- onUpdate: vi.fn(),
204
- renderSegments,
205
- });
206
- await updater("http://localhost/", ["R0"], false, undefined, tx);
207
- const rendered = renderSegments.mock.calls[0][0];
208
- expect(rendered[0].loading).toBeUndefined();
209
- });
210
- // BUG P0-1: cached segment loading cleared from false to undefined
211
- //
212
- // When a cached segment has loading=false (suppressed), navigating to a route
213
- // where the server doesn't re-render that segment (matched but not in diff)
214
- // should preserve loading=false. Instead, the current code unconditionally
215
- // sets it to undefined, which changes the React tree structure:
216
- // loading: false -> LoaderBoundary + OutletProvider (structural boundary)
217
- // loading: undefined -> OutletProvider directly (no boundary)
218
- // This causes React to remount components, destroying client state.
219
- //
220
- // The correct behavior (see server-action-bridge.ts lines 439-445) preserves
221
- // the cached loading value instead of clearing it.
222
- it("preserves loading=false for cached segment (does not clear to undefined)", async () => {
223
- // Layout cached with loading=false (suppressed via { ssr: false } in loading())
224
- const cachedLayout = seg("L0", {
225
- type: "layout",
226
- component: "cached-layout",
227
- loading: false,
228
- });
229
- const cachedRoute = seg("L0R0", { component: "cached-route" });
230
- const store = createMockStore({
231
- cachedSegments: [cachedLayout, cachedRoute],
232
- });
233
- // Server returns a new route segment but NOT the layout.
234
- // The layout is in matched (server expects client to have it) but NOT in diff
235
- // (server decided it doesn't need re-rendering). This triggers the cache
236
- // fallback path where the bug exists.
237
- const newRoute = seg("L0R0", { component: "new-route" });
238
- const { client } = createMockClient({
239
- metadata: {
240
- isPartial: true,
241
- segments: [newRoute],
242
- matched: ["L0", "L0R0"],
243
- diff: ["L0R0"],
244
- },
245
- });
246
- const renderSegments = vi.fn(async (segs) => `tree-${segs.length}`);
247
- const tx = createMockTx();
248
- const updater = createPartialUpdater({
249
- store: store,
250
- client: client,
251
- onUpdate: vi.fn(),
252
- renderSegments,
253
- });
254
- await updater("http://localhost/page", ["L0", "L0R0"], false, undefined, tx);
255
- const rendered = renderSegments.mock.calls[0][0];
256
- const layout = rendered.find((s) => s.id === "L0");
257
- // The layout should preserve loading=false (suppressed boundary).
258
- // BUG: current code clears it to undefined, changing the tree structure.
259
- expect(layout.loading).toBe(false);
260
- });
261
- });
262
- describe("empty diff handling", () => {
263
- it("skips UI update when diff is empty (same-route revalidation)", async () => {
264
- const cached = seg("R0");
265
- const store = createMockStore({ cachedSegments: [cached] });
266
- const { client } = createMockClient({
267
- metadata: {
268
- isPartial: true,
269
- segments: [],
270
- matched: ["R0"],
271
- diff: [],
272
- },
273
- });
274
- const onUpdate = vi.fn();
275
- const tx = createMockTx();
276
- const updater = createPartialUpdater({
277
- store: store,
278
- client: client,
279
- onUpdate,
280
- renderSegments: vi.fn(),
281
- });
282
- await updater("http://localhost/", ["R0"], false, undefined, tx);
283
- // Should commit but NOT call onUpdate (no UI change)
284
- expect(tx.commit).toHaveBeenCalled();
285
- expect(onUpdate).not.toHaveBeenCalled();
286
- });
287
- it("renders cached segments when navigating with targetCacheSegments", async () => {
288
- const targetSegs = [seg("L0", { type: "layout" }), seg("L0R0")];
289
- const store = createMockStore();
290
- const { client } = createMockClient({
291
- metadata: {
292
- isPartial: true,
293
- segments: [],
294
- matched: ["L0", "L0R0"],
295
- diff: [],
296
- },
297
- });
298
- const renderSegments = vi.fn(async () => "cached-tree");
299
- const onUpdate = vi.fn();
300
- const tx = createMockTx();
301
- const updater = createPartialUpdater({
302
- store: store,
303
- client: client,
304
- onUpdate,
305
- renderSegments,
306
- });
307
- await updater("http://localhost/page", undefined, false, undefined, tx, {
308
- targetCacheSegments: targetSegs,
309
- });
310
- // Should render even with empty diff because targetCacheSegments provided
311
- expect(renderSegments).toHaveBeenCalledWith(expect.any(Array), expect.objectContaining({ forceAwait: true }));
312
- expect(onUpdate).toHaveBeenCalled();
313
- });
314
- it("forces re-render when leavingIntercept even with empty diff", async () => {
315
- const cached = seg("L0", { type: "layout" });
316
- const store = createMockStore({
317
- cachedSegments: [cached],
318
- segmentIds: ["L0", "L0.@modal"],
319
- });
320
- const { client } = createMockClient({
321
- metadata: {
322
- isPartial: true,
323
- segments: [],
324
- matched: ["L0"],
325
- diff: [],
326
- },
327
- });
328
- const renderSegments = vi.fn(async () => "tree-no-modal");
329
- const onUpdate = vi.fn();
330
- const tx = createMockTx();
331
- const updater = createPartialUpdater({
332
- store: store,
333
- client: client,
334
- onUpdate,
335
- renderSegments,
336
- });
337
- await updater("http://localhost/", undefined, false, undefined, tx, {
338
- leavingIntercept: true,
339
- });
340
- // Should render and update UI to remove modal
341
- expect(renderSegments).toHaveBeenCalled();
342
- expect(onUpdate).toHaveBeenCalled();
343
- });
344
- });
345
- describe("intercept with target cache segments", () => {
346
- // Regression test for REVIEW #29: The deleted dead-code block attempted to
347
- // rebuild currentSegmentMap from getCurrentSegmentMap() when an intercept
348
- // response arrived with targetCacheSegments. Because the reassignment came
349
- // AFTER all currentSegmentMap reads, it was dead and was removed.
350
- //
351
- // This test confirms: unmodified segments come from targetCacheSegments
352
- // (not the source page's cache) even when the server returns an intercept response.
353
- it("uses targetCacheSegments for unmodified layout when server returns intercept response", async () => {
354
- const sourceLayout = seg("L0", { type: "layout", component: "source-layout" });
355
- const sourceRoute = seg("L0R0", { component: "source-route" });
356
- const targetLayout = seg("L0", { type: "layout", component: "target-layout" });
357
- const targetRoute = seg("L0R0", { component: "target-route" });
358
- const modalSegment = seg("L0.@modal", { type: "parallel", namespace: "intercept:modal" });
359
- // Source page is cached at the current history key
360
- const store = createMockStore({
361
- cachedSegments: [sourceLayout, sourceRoute],
362
- segmentIds: ["L0", "L0R0"],
363
- });
364
- // Server returns an intercept response: only the modal is in diff.
365
- // The layout is in matched but not re-rendered (should come from cache).
366
- const { client } = createMockClient({
367
- metadata: {
368
- isPartial: true,
369
- segments: [modalSegment],
370
- matched: ["L0", "L0.@modal"],
371
- diff: ["L0.@modal"],
372
- slots: { "@modal": { active: true } },
373
- },
374
- });
375
- const renderSegments = vi.fn(async () => "tree");
376
- const tx = createMockTx();
377
- const updater = createPartialUpdater({
378
- store: store,
379
- client: client,
380
- onUpdate: vi.fn(),
381
- renderSegments,
382
- });
383
- await updater("http://localhost/target", ["L0", "L0R0"], false, undefined, tx, { targetCacheSegments: [targetLayout, targetRoute] });
384
- const mainSegs = renderSegments.mock.calls[0][0];
385
- const layout = mainSegs.find((s) => s.id === "L0");
386
- // Layout must come from targetCacheSegments ("target-layout"),
387
- // not the source page's store cache ("source-layout").
388
- expect(layout?.component).toBe("target-layout");
389
- });
390
- });
391
- describe("intercept segment filtering", () => {
392
- it("filters .@ segments from segmentIds when leavingIntercept", async () => {
393
- const store = createMockStore({
394
- segmentIds: ["L0", "L0R0", "L0.@modal"],
395
- });
396
- const { client } = createMockClient({
397
- metadata: {
398
- isPartial: true,
399
- segments: [],
400
- matched: ["L0"],
401
- diff: [],
402
- },
403
- });
404
- const tx = createMockTx();
405
- const updater = createPartialUpdater({
406
- store: store,
407
- client: client,
408
- onUpdate: vi.fn(),
409
- renderSegments: vi.fn(async () => "tree"),
410
- });
411
- await updater("http://localhost/", undefined, false, undefined, tx, {
412
- leavingIntercept: true,
413
- });
414
- // fetchPartial should be called with filtered segments (no .@)
415
- const fetchCall = client.fetchPartial.mock.calls[0][0];
416
- expect(fetchCall.segmentIds).toEqual(["L0", "L0R0"]);
417
- expect(fetchCall.segmentIds).not.toContain("L0.@modal");
418
- });
419
- it("separates intercept segments from main segments for rendering", async () => {
420
- const layout = seg("L0", { type: "layout" });
421
- const route = seg("L0R0");
422
- const modal = seg("L0.@modal", { type: "parallel", namespace: "intercept:modal" });
423
- const store = createMockStore({ cachedSegments: [layout, route] });
424
- const { client } = createMockClient({
425
- metadata: {
426
- isPartial: true,
427
- segments: [layout, route, modal],
428
- matched: ["L0", "L0R0", "L0.@modal"],
429
- diff: ["L0", "L0R0", "L0.@modal"],
430
- slots: { "@modal": { active: true } },
431
- },
432
- });
433
- const renderSegments = vi.fn(async () => "tree");
434
- const tx = createMockTx();
435
- const updater = createPartialUpdater({
436
- store: store,
437
- client: client,
438
- onUpdate: vi.fn(),
439
- renderSegments,
440
- });
441
- await updater("http://localhost/modal", ["L0", "L0R0"], false, undefined, tx);
442
- // renderSegments should receive main segments and intercept segments separately
443
- const call = renderSegments.mock.calls[0];
444
- const mainSegs = call[0];
445
- const opts = call[1];
446
- // Main segments should NOT include the parallel intercept
447
- expect(mainSegs.find((s) => s.id === "L0.@modal")).toBeUndefined();
448
- // Intercept segments should be passed via options
449
- expect(opts?.interceptSegments).toHaveLength(1);
450
- expect(opts?.interceptSegments[0].id).toBe("L0.@modal");
451
- });
452
- });
453
- describe("stale navigation detection", () => {
454
- it("returns early when signal is aborted before processing", async () => {
455
- const store = createMockStore();
456
- const controller = new AbortController();
457
- controller.abort();
458
- const { client } = createMockClient({
459
- metadata: {
460
- isPartial: true,
461
- segments: [],
462
- matched: [],
463
- diff: ["R0"],
464
- },
465
- });
466
- const renderSegments = vi.fn();
467
- const onUpdate = vi.fn();
468
- const tx = createMockTx();
469
- const updater = createPartialUpdater({
470
- store: store,
471
- client: client,
472
- onUpdate,
473
- renderSegments,
474
- });
475
- await updater("http://localhost/", [], false, controller.signal, tx);
476
- // Should not render or update
477
- expect(renderSegments).not.toHaveBeenCalled();
478
- expect(onUpdate).not.toHaveBeenCalled();
479
- });
480
- it("skips UI update for stale revalidation when history key changed", async () => {
481
- const store = createMockStore({ historyKey: "/page1" });
482
- // Simulate history key changing mid-request
483
- let callCount = 0;
484
- store.getHistoryKey.mockImplementation(() => {
485
- callCount++;
486
- return callCount <= 1 ? "/page1" : "/page2";
487
- });
488
- const { client } = createMockClient({
489
- metadata: {
490
- isPartial: true,
491
- segments: [seg("R0")],
492
- matched: ["R0"],
493
- diff: ["R0"],
494
- },
495
- });
496
- const onUpdate = vi.fn();
497
- const tx = createMockTx();
498
- const updater = createPartialUpdater({
499
- store: store,
500
- client: client,
501
- onUpdate,
502
- renderSegments: vi.fn(async () => "tree"),
503
- });
504
- await updater("http://localhost/page1", [], false, undefined, tx, {
505
- staleRevalidation: true,
506
- });
507
- // Should render but NOT call onUpdate because history key changed
508
- expect(onUpdate).not.toHaveBeenCalled();
509
- });
510
- });
511
- describe("full update fallback", () => {
512
- it("renders all segments client-side when isPartial=false", async () => {
513
- const serverSegments = [
514
- seg("L0", { type: "layout" }),
515
- seg("L0R0"),
516
- ];
517
- const store = createMockStore();
518
- const { client } = createMockClient({
519
- metadata: {
520
- isPartial: false,
521
- segments: serverSegments,
522
- },
523
- });
524
- const renderSegments = vi.fn(async () => "full-tree");
525
- const onUpdate = vi.fn();
526
- const tx = createMockTx();
527
- const updater = createPartialUpdater({
528
- store: store,
529
- client: client,
530
- onUpdate,
531
- renderSegments,
532
- });
533
- await updater("http://localhost/new", [], false, undefined, tx);
534
- // Should render ALL segments (not merge with cache)
535
- expect(renderSegments).toHaveBeenCalledWith(serverSegments);
536
- // Commit with segment IDs from server
537
- expect(tx.commit).toHaveBeenCalledWith(["L0", "L0R0"], serverSegments);
538
- expect(onUpdate).toHaveBeenCalledWith({
539
- root: "full-tree",
540
- metadata: expect.objectContaining({ isPartial: false }),
541
- });
542
- });
543
- it("returns early for full update when signal is aborted", async () => {
544
- const controller = new AbortController();
545
- controller.abort();
546
- const store = createMockStore();
547
- const { client } = createMockClient({
548
- metadata: {
549
- isPartial: false,
550
- segments: [seg("R0")],
551
- },
552
- });
553
- const renderSegments = vi.fn();
554
- const onUpdate = vi.fn();
555
- const tx = createMockTx();
556
- const updater = createPartialUpdater({
557
- store: store,
558
- client: client,
559
- onUpdate,
560
- renderSegments,
561
- });
562
- await updater("http://localhost/", [], false, controller.signal, tx);
563
- expect(renderSegments).not.toHaveBeenCalled();
564
- expect(onUpdate).not.toHaveBeenCalled();
565
- });
566
- });
567
- describe("HMR resilience", () => {
568
- it("retries with empty segments when matched IDs are missing from cache", async () => {
569
- // No cached segments → server's matched["L0", "L0R0"] won't be found
570
- const store = createMockStore({ cachedSegments: [] });
571
- // First call: partial with missing segments
572
- // Second call (retry): full update
573
- const { client } = createMockClient({
574
- metadata: {
575
- isPartial: true,
576
- segments: [],
577
- matched: ["L0", "L0R0"],
578
- diff: ["L0R0"],
579
- },
580
- });
581
- // Override to return full update on retry
582
- let callCount = 0;
583
- client.fetchPartial.mockImplementation(async () => {
584
- callCount++;
585
- if (callCount === 1) {
586
- return {
587
- payload: {
588
- metadata: {
589
- isPartial: true,
590
- segments: [],
591
- matched: ["L0", "L0R0"],
592
- diff: ["L0R0"],
593
- },
594
- },
595
- streamComplete: Promise.resolve(),
596
- };
597
- }
598
- return {
599
- payload: {
600
- metadata: {
601
- isPartial: false,
602
- segments: [
603
- seg("L0", { type: "layout" }),
604
- seg("L0R0"),
605
- ],
606
- },
607
- },
608
- streamComplete: Promise.resolve(),
609
- };
610
- });
611
- const renderSegments = vi.fn(async () => "tree");
612
- const tx = createMockTx();
613
- const updater = createPartialUpdater({
614
- store: store,
615
- client: client,
616
- onUpdate: vi.fn(),
617
- renderSegments,
618
- });
619
- await updater("http://localhost/page", [], false, undefined, tx);
620
- // Should have fetched twice: first partial (missing), then retry with empty segments
621
- expect(client.fetchPartial).toHaveBeenCalledTimes(2);
622
- const retryCall = client.fetchPartial.mock.calls[1][0];
623
- expect(retryCall.segmentIds).toEqual([]);
624
- });
625
- it("throws on retry failure", async () => {
626
- const store = createMockStore({ cachedSegments: [] });
627
- const { client } = createMockClient({
628
- metadata: {
629
- isPartial: true,
630
- segments: [],
631
- matched: ["L0"],
632
- diff: ["L0"],
633
- },
634
- });
635
- const tx = createMockTx();
636
- const updater = createPartialUpdater({
637
- store: store,
638
- client: client,
639
- onUpdate: vi.fn(),
640
- renderSegments: vi.fn(async () => "tree"),
641
- });
642
- // isRetry=true, missing segments → should throw
643
- await expect(updater("http://localhost/", [], true, undefined, tx)).rejects.toThrow("Failed to fetch segments after retry");
644
- });
645
- });
646
- describe("isAction and staleRevalidation options", () => {
647
- it("wraps onUpdate in startTransition when isAction=true", async () => {
648
- const store = createMockStore({
649
- cachedSegments: [seg("R0")],
650
- });
651
- const { client } = createMockClient({
652
- metadata: {
653
- isPartial: true,
654
- segments: [seg("R0", { component: "updated" })],
655
- matched: ["R0"],
656
- diff: ["R0"],
657
- },
658
- });
659
- const onUpdate = vi.fn();
660
- const tx = createMockTx();
661
- const updater = createPartialUpdater({
662
- store: store,
663
- client: client,
664
- onUpdate,
665
- renderSegments: vi.fn(async () => "tree"),
666
- });
667
- await updater("http://localhost/", ["R0"], false, undefined, tx, {
668
- isAction: true,
669
- });
670
- // Our mocked startTransition runs synchronously, so onUpdate should be called
671
- expect(onUpdate).toHaveBeenCalled();
672
- });
673
- it("passes forceAwait to renderSegments when staleRevalidation=true", async () => {
674
- const store = createMockStore({
675
- cachedSegments: [seg("R0")],
676
- });
677
- const { client } = createMockClient({
678
- metadata: {
679
- isPartial: true,
680
- segments: [seg("R0", { component: "updated" })],
681
- matched: ["R0"],
682
- diff: ["R0"],
683
- },
684
- });
685
- const renderSegments = vi.fn(async () => "tree");
686
- const tx = createMockTx();
687
- const updater = createPartialUpdater({
688
- store: store,
689
- client: client,
690
- onUpdate: vi.fn(),
691
- renderSegments,
692
- });
693
- await updater("http://localhost/", ["R0"], false, undefined, tx, {
694
- staleRevalidation: true,
695
- });
696
- expect(renderSegments).toHaveBeenCalledWith(expect.any(Array), expect.objectContaining({ forceAwait: true }));
697
- });
698
- });
699
- describe("structural preservation on server-returned segments", () => {
700
- // These tests verify the fromServer path in partial-update preserves
701
- // cached loading/mountPath values when the server returns different ones.
702
- // Without this preservation, the React tree depth changes between SSR
703
- // and action revalidation, causing component remounts that destroy
704
- // useActionState results.
705
- it("preserves cached loading value when server returns different loading", async () => {
706
- // SSR set loading=false (skipSSR route). Server action revalidation
707
- // returns loading=<skeleton> because isSSR=false. Without preservation,
708
- // tree changes from LoaderBoundary+Outlet to LoaderBoundary+Outlet+RouteContentWrapper.
709
- const cachedLayout = seg("L0", {
710
- type: "layout",
711
- component: "my-layout",
712
- loading: false,
713
- });
714
- const cachedRoute = seg("L0R0", { component: "my-route" });
715
- // Server returns the SAME layout but with loading=<skeleton> instead of false
716
- const serverLayout = seg("L0", {
717
- type: "layout",
718
- component: "my-layout",
719
- loading: "skeleton",
720
- });
721
- const serverRoute = seg("L0R0", { component: "updated-route" });
722
- const store = createMockStore({
723
- cachedSegments: [cachedLayout, cachedRoute],
724
- });
725
- const { client } = createMockClient({
726
- metadata: {
727
- isPartial: true,
728
- segments: [serverLayout, serverRoute],
729
- matched: ["L0", "L0R0"],
730
- diff: ["L0", "L0R0"],
731
- },
732
- });
733
- const renderSegments = vi.fn(async () => "tree");
734
- const tx = createMockTx();
735
- const updater = createPartialUpdater({
736
- store: store,
737
- client: client,
738
- onUpdate: vi.fn(),
739
- renderSegments,
740
- });
741
- await updater("http://localhost/page", ["L0", "L0R0"], false, undefined, tx, {
742
- isAction: true,
743
- });
744
- const rendered = renderSegments.mock.calls[0][0];
745
- const layout = rendered.find((s) => s.id === "L0");
746
- // loading must be preserved from cache (false), not server (skeleton)
747
- expect(layout.loading).toBe(false);
748
- // Component should come from server (updated)
749
- const route = rendered.find((s) => s.id === "L0R0");
750
- expect(route.component).toBe("updated-route");
751
- });
752
- it("preserves cached mountPath when server returns different mountPath", async () => {
753
- // SSR may not include mountPath, but action revalidation may include it
754
- // (from include() scope). The conditional MountContextProvider wrapper
755
- // in renderSegments changes tree depth.
756
- const cachedLayout = seg("L0", {
757
- type: "layout",
758
- component: "my-layout",
759
- mountPath: undefined,
760
- });
761
- const cachedRoute = seg("L0R0", { component: "my-route" });
762
- const serverLayout = seg("L0", {
763
- type: "layout",
764
- component: "my-layout",
765
- mountPath: "/shop",
766
- });
767
- const store = createMockStore({
768
- cachedSegments: [cachedLayout, cachedRoute],
769
- });
770
- const { client } = createMockClient({
771
- metadata: {
772
- isPartial: true,
773
- segments: [serverLayout],
774
- matched: ["L0", "L0R0"],
775
- diff: ["L0"],
776
- },
777
- });
778
- const renderSegments = vi.fn(async () => "tree");
779
- const tx = createMockTx();
780
- const updater = createPartialUpdater({
781
- store: store,
782
- client: client,
783
- onUpdate: vi.fn(),
784
- renderSegments,
785
- });
786
- await updater("http://localhost/page", ["L0", "L0R0"], false, undefined, tx);
787
- const rendered = renderSegments.mock.calls[0][0];
788
- const layout = rendered.find((s) => s.id === "L0");
789
- // mountPath must be preserved from cache (undefined), not server ("/shop")
790
- expect(layout.mountPath).toBeUndefined();
791
- });
792
- it("preserves loading + mountPath + null component together during action", async () => {
793
- // Combined scenario: layout has all three structural properties differing
794
- const cachedLayout = seg("L0", {
795
- type: "layout",
796
- component: "my-layout",
797
- loading: false,
798
- mountPath: undefined,
799
- });
800
- const cachedRoute = seg("L0R0", { component: "my-route" });
801
- const serverLayout = seg("L0", {
802
- type: "layout",
803
- component: null, // null = don't re-render
804
- loading: "skeleton", // different from cached
805
- mountPath: "/shop", // different from cached
806
- });
807
- const serverRoute = seg("L0R0", { component: "updated" });
808
- const store = createMockStore({
809
- cachedSegments: [cachedLayout, cachedRoute],
810
- });
811
- const { client } = createMockClient({
812
- metadata: {
813
- isPartial: true,
814
- segments: [serverLayout, serverRoute],
815
- matched: ["L0", "L0R0"],
816
- diff: ["L0", "L0R0"],
817
- },
818
- });
819
- const renderSegments = vi.fn(async () => "tree");
820
- const tx = createMockTx();
821
- const updater = createPartialUpdater({
822
- store: store,
823
- client: client,
824
- onUpdate: vi.fn(),
825
- renderSegments,
826
- });
827
- await updater("http://localhost/page", ["L0", "L0R0"], false, undefined, tx, {
828
- isAction: true,
829
- });
830
- const rendered = renderSegments.mock.calls[0][0];
831
- const layout = rendered.find((s) => s.id === "L0");
832
- // All structural properties preserved from cache
833
- expect(layout.component).toBe("my-layout"); // preserved (server sent null)
834
- expect(layout.loading).toBe(false); // preserved (server sent skeleton)
835
- expect(layout.mountPath).toBeUndefined(); // preserved (server sent /shop)
836
- });
837
- it("does not alter loading when cached and server values match", async () => {
838
- const cachedRoute = seg("R0", {
839
- component: "my-route",
840
- loading: "skeleton",
841
- });
842
- const serverRoute = seg("R0", {
843
- component: "updated",
844
- loading: "skeleton",
845
- });
846
- const store = createMockStore({
847
- cachedSegments: [cachedRoute],
848
- });
849
- const { client } = createMockClient({
850
- metadata: {
851
- isPartial: true,
852
- segments: [serverRoute],
853
- matched: ["R0"],
854
- diff: ["R0"],
855
- },
856
- });
857
- const renderSegments = vi.fn(async () => "tree");
858
- const tx = createMockTx();
859
- const updater = createPartialUpdater({
860
- store: store,
861
- client: client,
862
- onUpdate: vi.fn(),
863
- renderSegments,
864
- });
865
- await updater("http://localhost/", ["R0"], false, undefined, tx);
866
- const rendered = renderSegments.mock.calls[0][0];
867
- expect(rendered[0].loading).toBe("skeleton");
868
- expect(rendered[0].component).toBe("updated");
869
- });
870
- });
871
- describe("intercept context tracking", () => {
872
- it("sets intercept source URL when slots are active", async () => {
873
- const store = createMockStore({
874
- cachedSegments: [seg("L0", { type: "layout" }), seg("L0R0")],
875
- currentUrl: "http://localhost/shop",
876
- });
877
- const { client } = createMockClient({
878
- metadata: {
879
- isPartial: true,
880
- segments: [
881
- seg("L0", { type: "layout" }),
882
- seg("L0R0"),
883
- ],
884
- matched: ["L0", "L0R0"],
885
- diff: ["L0", "L0R0"],
886
- slots: { "@modal": { active: true } },
887
- },
888
- });
889
- const tx = createMockTx();
890
- const updater = createPartialUpdater({
891
- store: store,
892
- client: client,
893
- onUpdate: vi.fn(),
894
- renderSegments: vi.fn(async () => "tree"),
895
- });
896
- await updater("http://localhost/modal", ["L0", "L0R0"], false, undefined, tx);
897
- // Should set intercept source URL from current URL (segmentState.currentUrl)
898
- expect(store.setInterceptSourceUrl).toHaveBeenCalledWith("http://localhost/shop");
899
- });
900
- it("clears intercept source URL for non-intercept navigation", async () => {
901
- const store = createMockStore({
902
- cachedSegments: [seg("R0")],
903
- });
904
- const { client } = createMockClient({
905
- metadata: {
906
- isPartial: true,
907
- segments: [seg("R0", { component: "updated" })],
908
- matched: ["R0"],
909
- diff: ["R0"],
910
- },
911
- });
912
- const tx = createMockTx();
913
- const updater = createPartialUpdater({
914
- store: store,
915
- client: client,
916
- onUpdate: vi.fn(),
917
- renderSegments: vi.fn(async () => "tree"),
918
- });
919
- await updater("http://localhost/page", ["R0"], false, undefined, tx);
920
- expect(store.setInterceptSourceUrl).toHaveBeenCalledWith(null);
921
- });
922
- it("does not update intercept context for actions", async () => {
923
- const store = createMockStore({
924
- cachedSegments: [seg("R0")],
925
- });
926
- const { client } = createMockClient({
927
- metadata: {
928
- isPartial: true,
929
- segments: [seg("R0")],
930
- matched: ["R0"],
931
- diff: ["R0"],
932
- },
933
- });
934
- const tx = createMockTx();
935
- const updater = createPartialUpdater({
936
- store: store,
937
- client: client,
938
- onUpdate: vi.fn(),
939
- renderSegments: vi.fn(async () => "tree"),
940
- });
941
- await updater("http://localhost/", ["R0"], false, undefined, tx, {
942
- isAction: true,
943
- });
944
- expect(store.setInterceptSourceUrl).not.toHaveBeenCalled();
945
- });
946
- });
947
- describe("streaming lifecycle", () => {
948
- it("starts and ends streaming token", async () => {
949
- const store = createMockStore({ cachedSegments: [seg("R0")] });
950
- const endFn = vi.fn();
951
- const { client, resolveStream } = createMockClient({
952
- metadata: {
953
- isPartial: true,
954
- segments: [seg("R0")],
955
- matched: ["R0"],
956
- diff: ["R0"],
957
- },
958
- }, { hangStream: true });
959
- const tx = createMockTx();
960
- tx.startStreaming.mockReturnValue({ end: endFn });
961
- const updater = createPartialUpdater({
962
- store: store,
963
- client: client,
964
- onUpdate: vi.fn(),
965
- renderSegments: vi.fn(async () => "tree"),
966
- });
967
- // Don't await directly since stream hangs (promise flattening blocks it).
968
- // Instead, capture the promise and resolve the stream, then await.
969
- const resultPromise = updater("http://localhost/", ["R0"], false, undefined, tx);
970
- // Let microtasks run so the function progresses to the return statement
971
- await new Promise((r) => setTimeout(r, 10));
972
- // startStreaming called
973
- expect(tx.startStreaming).toHaveBeenCalled();
974
- // end not called yet (stream still open)
975
- expect(endFn).not.toHaveBeenCalled();
976
- // Resolve stream
977
- resolveStream();
978
- await resultPromise;
979
- // end called after stream completes
980
- expect(endFn).toHaveBeenCalled();
981
- });
982
- it("ends streaming token when fetchPartial throws", async () => {
983
- const store = createMockStore({ cachedSegments: [seg("R0")] });
984
- const endFn = vi.fn();
985
- const fetchError = new Error("network failure");
986
- const client = {
987
- fetchPartial: vi.fn(async () => {
988
- throw fetchError;
989
- }),
990
- };
991
- const tx = createMockTx();
992
- tx.startStreaming.mockReturnValue({ end: endFn });
993
- const updater = createPartialUpdater({
994
- store: store,
995
- client: client,
996
- onUpdate: vi.fn(),
997
- renderSegments: vi.fn(async () => "tree"),
998
- });
999
- // fetchPartial throws, so the updater should re-throw
1000
- await expect(updater("http://localhost/", ["R0"], false, undefined, tx)).rejects.toThrow("network failure");
1001
- // startStreaming was called before the fetch
1002
- expect(tx.startStreaming).toHaveBeenCalled();
1003
- // streamingToken.end() must be called even though fetchPartial threw,
1004
- // otherwise isStreaming is permanently stuck as true
1005
- expect(endFn).toHaveBeenCalled();
1006
- });
1007
- });
1008
- });
1009
- //# sourceMappingURL=partial-update.test.js.map