void 0.25.0 → 0.26.1

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 (373) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
  4. package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-B7QEjqSR.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-7wuZ5ob8.mjs → auth-B5_tZLxT.mjs} +9 -9
  7. package/dist/{auth-CdgZ9uag.mjs → auth-BgX2qYSY.mjs} +1 -1
  8. package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-D5RmKnzh.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BdM4avI8.mjs → auth-router-Bap-pvbn.mjs} +6 -19
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-B58c8iS8.mjs} +8 -7
  14. package/dist/{cache-TcZnBLtH.mjs → cache-Bo52trKF.mjs} +8 -8
  15. package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-BZNz3Q26.mjs} +6 -5
  16. package/dist/{cf-access-AHKBzmuu.mjs → cf-access-ngGqZpHZ.mjs} +11 -12
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cli/cli.mjs +48 -83
  20. package/dist/cli/cloudflare-operation-process.mjs +71 -77
  21. package/dist/cli/env-schema-probe.d.mts +1 -1
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/client-By4JjMw_.mjs +2 -0
  24. package/dist/{client-RsPo8wsP.mjs → client-C2Prx_Bi.mjs} +30 -8
  25. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  26. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  27. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  28. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  29. package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  31. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  32. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  33. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  34. package/dist/config-BtSFvXZx.mjs +2 -0
  35. package/dist/config-CLYAosnQ.mjs +78 -0
  36. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  37. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  38. package/dist/config-entry.d.mts +1 -1
  39. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  40. package/dist/{connect-DCvUmPXY.mjs → connect-X0MUA1gk.mjs} +12 -11
  41. package/dist/{create-project-eAPgYq35.mjs → create-project-DxiyW6iX.mjs} +7 -7
  42. package/dist/{create-project-C734I-Mu.mjs → create-project-iwkbqiBU.mjs} +1 -1
  43. package/dist/{db-C07GEdKF.mjs → db-XnVMHzoV.mjs} +101 -133
  44. package/dist/{delete-pKMVsrpJ.mjs → delete-esYlMiSJ.mjs} +8 -8
  45. package/dist/{deploy-DfsAe-T0.mjs → deploy-BsEvnlJl.mjs} +2377 -2512
  46. package/dist/deploy-C1d-YTfp.mjs +2 -0
  47. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  48. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  49. package/dist/discover-EDUf6JJw.mjs +2 -0
  50. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  51. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  52. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  53. package/dist/{domain-D3uA9ize.mjs → domain-CbbBWhWE.mjs} +29 -30
  54. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  55. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  56. package/dist/{email-z3o2cwjH.mjs → email-CpuT42g7.mjs} +24 -19
  57. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  58. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  59. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  60. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  61. package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
  62. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  63. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  64. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  65. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  66. package/dist/{env-3Q8-_2IH.mjs → env-w9jOyGZn.mjs} +10 -9
  67. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  68. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  69. package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-PGgz4uGz.mjs} +26 -24
  70. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  71. package/dist/{gen-NjwoG9FK.mjs → gen-DtkQhvQg.mjs} +40 -57
  72. package/dist/gen-dA9hW7AV.mjs +2 -0
  73. package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-D_FsOFxq.mjs} +65 -164
  74. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  75. package/dist/{handler-CZ4nAylQ.d.mts → handler-CNAwjRcW.d.mts} +5 -12
  76. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  77. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  78. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  79. package/dist/{help-DRZXC4fj.mjs → help-CVFBTmBx.mjs} +23 -38
  80. package/dist/help-DzKUrQvk.mjs +2 -0
  81. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  82. package/dist/index.d.mts +19 -2
  83. package/dist/index.mjs +632 -532
  84. package/dist/{info-BmA3_IFZ.mjs → info-PYWwkWyt.mjs} +4 -4
  85. package/dist/{init-DT7yuuyl.mjs → init-Bw-fRKGp.mjs} +161 -197
  86. package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
  87. package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
  88. package/dist/{link-CXOlqh2F.mjs → link-DlPG8iX3.mjs} +10 -10
  89. package/dist/{list-eEWVJEPn.mjs → list-2GN7_ueV.mjs} +11 -9
  90. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  91. package/dist/{live-Chw1eIMv.d.mts → live-Du8jXwOW.d.mts} +4 -2
  92. package/dist/{local-d1-Df4XpwhW.mjs → local-d1-ga5O_idV.mjs} +2 -2
  93. package/dist/{login-pWQHYVu2.mjs → login-D-Q4xw3Q.mjs} +7 -7
  94. package/dist/login-Dc-wuTDq.mjs +2 -0
  95. package/dist/{logs-DnxVX7TR.mjs → logs-rd8J-OFh.mjs} +28 -11
  96. package/dist/migrate-BHp07yJE.mjs +2 -0
  97. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  98. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  99. package/dist/{node-BkyRWRx8.mjs → node-DJicPvPj.mjs} +5 -5
  100. package/dist/{operator-args-CAVcmwUt.mjs → operator-args-BNsW5gfp.mjs} +10 -1
  101. package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-AzVLbrr3.mjs} +4 -8
  102. package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BQtzyG-g.mjs} +3 -3
  103. package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-B6f6Cg9Z.mjs} +45 -14
  104. package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
  105. package/dist/{output-BBsUwdyT.mjs → output-C50ag2r3.mjs} +44 -2
  106. package/dist/pages/client.d.mts +19 -51
  107. package/dist/pages/client.mjs +204 -225
  108. package/dist/pages/head-client.d.mts +1 -1
  109. package/dist/pages/head.d.mts +1 -1
  110. package/dist/pages/head.mjs +1 -1
  111. package/dist/pages/index.d.mts +2 -2
  112. package/dist/pages/index.mjs +6 -12
  113. package/dist/pages/islands-plugin.d.mts +1 -1
  114. package/dist/pages/islands-plugin.mjs +21 -25
  115. package/dist/pages/protocol.d.mts +2 -2
  116. package/dist/pages/protocol.mjs +2 -2
  117. package/dist/{plan-NPpwZ_kc.mjs → plan-BhLO2p4w.mjs} +4 -3
  118. package/dist/plan-CH2G51je.mjs +2 -0
  119. package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-BoZkWQnJ.mjs} +4 -2
  120. package/dist/platform-args-DYgITk0D.mjs +2 -0
  121. package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-n603OANg.mjs} +45 -40
  122. package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-zxDr0hWW.mjs} +9 -8
  123. package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-tw9lgtgE.mjs} +8 -7
  124. package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-B8-bCb7t.mjs} +48 -23
  125. package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-C00YM14r.mjs} +1 -1
  126. package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
  127. package/dist/{platform-domain-CUdY064e.mjs → platform-domain-p0kobLV8.mjs} +6 -5
  128. package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-D_QEY32D.mjs} +906 -389
  129. package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
  130. package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BdYblvvE.mjs} +175 -32
  131. package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-oi-SvI3f.mjs} +1 -1
  132. package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
  133. package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-PvNS9Nl2.mjs} +3 -3
  134. package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
  135. package/dist/platform-setup-DVe42Ws7.mjs +299 -0
  136. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  137. package/dist/prepare-DRUV-g3X.mjs +2 -0
  138. package/dist/{prepare-DnaKBi--.mjs → prepare-Do96654b.mjs} +8 -8
  139. package/dist/{prepare-39EvOhI6.mjs → prepare-Dq9hTIbo.mjs} +4 -3
  140. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  141. package/dist/prerender-render.mjs +1 -1
  142. package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
  143. package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
  144. package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-ti8_yTcA.mjs} +19 -19
  145. package/dist/{project-team-ohAWWaew.mjs → project-team-CDPE1Tsg.mjs} +15 -18
  146. package/dist/{project-token-CP01Jna6.mjs → project-token-CkZ1cN0Z.mjs} +14 -17
  147. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  148. package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-DdjLR61k.mjs} +12 -9
  149. package/dist/{protocol-CjF_iI9X.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  150. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  151. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  152. package/dist/{provision-Btj1jppf.mjs → provision-BfaLiWbj.mjs} +51 -42
  153. package/dist/{provision-BEv0k-qz.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  154. package/dist/{requests-B3PBuGlX.mjs → requests-DFAqyYy8.mjs} +5 -5
  155. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  156. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  157. package/dist/{rollback-DDub9GsO.mjs → rollback-BKYXBduI.mjs} +30 -37
  158. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  159. package/dist/route-url-BgPja1GS.d.mts +5 -0
  160. package/dist/route-url-BjGv_KKY.mjs +28 -0
  161. package/dist/runner-9wjsSZx-.mjs +2 -0
  162. package/dist/{runner-Ol0TNjk6.mjs → runner-DMBKSrRk.mjs} +2 -2
  163. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  164. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  165. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  166. package/dist/runtime/ai.d.mts +11 -12
  167. package/dist/runtime/ai.mjs +47 -113
  168. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  169. package/dist/runtime/better-auth-mysql.mjs +4 -9
  170. package/dist/runtime/better-auth-pg.d.mts +1 -1
  171. package/dist/runtime/better-auth-pg.mjs +5 -10
  172. package/dist/runtime/better-auth.d.mts +1 -1
  173. package/dist/runtime/better-auth.mjs +3 -3
  174. package/dist/runtime/client-react.d.mts +2 -3
  175. package/dist/runtime/client-react.mjs +2 -2
  176. package/dist/runtime/client-solid.d.mts +2 -3
  177. package/dist/runtime/client-solid.mjs +2 -2
  178. package/dist/runtime/client-svelte.d.mts +2 -3
  179. package/dist/runtime/client-svelte.mjs +2 -2
  180. package/dist/runtime/client-vue.d.mts +2 -3
  181. package/dist/runtime/client-vue.mjs +2 -2
  182. package/dist/runtime/client.d.mts +2 -3
  183. package/dist/runtime/client.mjs +2 -2
  184. package/dist/runtime/db.mjs +1 -1
  185. package/dist/runtime/durable.mjs +3 -10
  186. package/dist/runtime/email/testing.mjs +5 -5
  187. package/dist/runtime/email.d.mts +2 -1
  188. package/dist/runtime/email.mjs +11 -27
  189. package/dist/runtime/env-public.d.mts +1 -1
  190. package/dist/runtime/env-public.mjs +15 -20
  191. package/dist/runtime/env.mjs +1 -1
  192. package/dist/runtime/fetch-stream.d.mts +2 -2
  193. package/dist/runtime/fetch-stream.mjs +1 -1
  194. package/dist/runtime/fetch.d.mts +2 -3
  195. package/dist/runtime/fetch.mjs +1 -1
  196. package/dist/runtime/handler.d.mts +1 -1
  197. package/dist/runtime/handler.mjs +2 -2
  198. package/dist/runtime/isr.mjs +1 -1
  199. package/dist/runtime/kv.mjs +10 -11
  200. package/dist/runtime/limits.d.mts +2 -2
  201. package/dist/runtime/limits.mjs +2 -2
  202. package/dist/runtime/live-client.d.mts +1 -1
  203. package/dist/runtime/live-client.mjs +12 -22
  204. package/dist/runtime/live-server.mjs +27 -35
  205. package/dist/runtime/live.d.mts +2 -2
  206. package/dist/runtime/live.mjs +2 -2
  207. package/dist/runtime/migration-handler.mjs +35 -86
  208. package/dist/runtime/queues.mjs +1 -1
  209. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  210. package/dist/runtime/remote/binding-handler.mjs +8 -9
  211. package/dist/runtime/remote/index.mjs +27 -77
  212. package/dist/runtime/route-url.d.mts +2 -4
  213. package/dist/runtime/route-url.mjs +1 -1
  214. package/dist/runtime/routing.d.mts +1 -1
  215. package/dist/runtime/routing.mjs +15 -26
  216. package/dist/runtime/sandbox.d.mts +1 -1
  217. package/dist/runtime/sandbox.mjs +14 -24
  218. package/dist/runtime/sse.mjs +1 -1
  219. package/dist/runtime/storage.mjs +1 -1
  220. package/dist/runtime/validator.d.mts +1 -1
  221. package/dist/runtime/ws-server.d.mts +2 -2
  222. package/dist/runtime/ws-server.mjs +30 -61
  223. package/dist/runtime/ws.d.mts +1 -1
  224. package/dist/runtime/ws.mjs +1 -1
  225. package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
  226. package/dist/{scan-C7okrLyM.mjs → scan-C3uDzz6J.mjs} +21 -18
  227. package/dist/{secret-3c72lY1U.mjs → secret-BAt2KMmO.mjs} +15 -15
  228. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  229. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  230. package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  231. package/dist/sveltekit.d.mts +0 -2
  232. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  233. package/dist/validate-BJr9LfXy.mjs +2 -0
  234. package/dist/{validate-ctOrgiS3.mjs → validate-C9qJArv7.mjs} +9 -28
  235. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  236. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  237. package/dist/{ws-CL1w7GXU.d.mts → ws-CChrrAU-.d.mts} +1 -1
  238. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  239. package/{skills/void/docs → docs}/guide/ai.md +69 -64
  240. package/{skills/void/docs → docs}/guide/app-types.md +1 -1
  241. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  242. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  243. package/{skills/void/docs → docs}/guide/database.md +23 -8
  244. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  245. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  246. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  247. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  248. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  249. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  250. package/{skills/void/docs → docs}/guide/live.md +12 -5
  251. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +21 -9
  252. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  253. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  254. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  255. package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
  256. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  257. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  258. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  259. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  260. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  261. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +2 -2
  262. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  263. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +8 -2
  264. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +7 -1
  265. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +1 -1
  266. package/docs/guide/platform/installation/uninstall.md +102 -0
  267. package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
  268. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  269. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  270. package/{skills/void/docs → docs}/guide/sandboxes.md +41 -22
  271. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  272. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  273. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  274. package/docs/integrations/agents.md +37 -0
  275. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  276. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  277. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  278. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  279. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  280. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  281. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  282. package/{skills/void/docs → docs}/reference/api/resources.md +11 -14
  283. package/{skills/void/docs → docs}/reference/api.md +35 -34
  284. package/{skills/void/docs → docs}/reference/cli/auth.md +3 -6
  285. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  286. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  287. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  288. package/{skills/void/docs → docs}/reference/cli/platform-config.md +3 -3
  289. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  290. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +15 -13
  291. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  292. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  293. package/{skills/void/docs → docs}/reference/cli/platform.md +4 -2
  294. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  295. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  296. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  297. package/{skills/void/docs → docs}/reference/cli.md +2 -2
  298. package/{skills/void/docs → docs}/reference/config.md +13 -13
  299. package/{skills/void/docs → docs}/reference/resource-inference.md +2 -16
  300. package/package.json +34 -30
  301. package/schema.json +1 -1
  302. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  303. package/skills/void/SKILL.md +11 -5
  304. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  305. package/dist/client-B4Me-9HE.mjs +0 -2
  306. package/dist/config-0acf1oys.mjs +0 -2
  307. package/dist/config-D8MOgiQV.mjs +0 -32
  308. package/dist/deploy-BDu1vhSH.mjs +0 -2
  309. package/dist/discover-AMCBXivQ.mjs +0 -2
  310. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  311. package/dist/gen-ById9r2j.mjs +0 -2
  312. package/dist/help-DPGBwomV.mjs +0 -2
  313. package/dist/login-C98-sw79.mjs +0 -2
  314. package/dist/migrate-CEu2X5DB.mjs +0 -2
  315. package/dist/plan-D1Q5rf-r.mjs +0 -2
  316. package/dist/platform-args-Cq6EjQro.mjs +0 -2
  317. package/dist/prepare-CnjcTV2s.mjs +0 -2
  318. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  319. package/dist/route-url-CG7U-cRN.mjs +0 -15
  320. package/dist/runner-CXA9Fh8h.mjs +0 -2
  321. package/dist/validate-Dq_L3s0S.mjs +0 -2
  322. package/skills/void/docs/guide/platform/installation/uninstall.md +0 -69
  323. package/skills/void/docs/integrations/agents.md +0 -26
  324. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  325. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  326. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  327. package/{skills/void/docs → docs}/guide/deployment.md +0 -0
  328. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  329. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  330. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  331. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  332. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  333. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  334. package/{skills/void/docs → docs}/guide/email.md +0 -0
  335. package/{skills/void/docs → docs}/guide/index.md +0 -0
  336. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  337. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  338. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  339. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  340. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  341. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  342. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  343. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  344. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  345. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  346. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  347. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  348. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  349. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  350. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  351. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  352. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  353. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  354. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  355. package/{skills/void/docs → docs}/index.md +0 -0
  356. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  357. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  358. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  359. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  360. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  361. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  362. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  363. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  364. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  366. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  367. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  368. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  369. /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
  370. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  371. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  372. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  373. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -1,4 +1,4 @@
1
- import { t as interpolateRouteParams } from "../route-url-CG7U-cRN.mjs";
1
+ import { t as interpolateRouteParams } from "../route-url-BjGv_KKY.mjs";
2
2
  import { n as initClientHead, t as applyClientHead } from "../head-client-DzmJGN4C.mjs";
3
3
  import { n as parseCacheFor, t as PrefetchCache } from "../prefetch-Bsc_Pb6c.mjs";
4
4
  import { readUsageLimit } from "@void/edge";
@@ -160,13 +160,13 @@ function createScrollRestoration() {
160
160
  //#region src/pages/navigation-engine.ts
161
161
  const PAGE_DATA_SCRIPT_ID = "__VOID_PAGE_DATA__";
162
162
  const STATIC_PAGE_DATA_PREFIX = "/_void/pages";
163
- function isFile$1(value) {
163
+ function isFile(value) {
164
164
  return typeof File !== "undefined" && value instanceof File || value instanceof Blob || typeof FileList !== "undefined" && value instanceof FileList && value.length > 0;
165
165
  }
166
- function hasFiles$1(data) {
167
- return isFile$1(data) || typeof data === "object" && data !== null && Object.values(data).some(hasFiles$1);
166
+ function hasFiles(data) {
167
+ return isFile(data) || typeof data === "object" && data !== null && Object.values(data).some(hasFiles);
168
168
  }
169
- function objectToFormData$1(source, form, parentKey) {
169
+ function objectToFormData(source, form, parentKey) {
170
170
  form = form || new FormData();
171
171
  for (const key in source) {
172
172
  if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
@@ -175,24 +175,22 @@ function objectToFormData$1(source, form, parentKey) {
175
175
  if (value instanceof File) form.append(composed, value, value.name);
176
176
  else if (value instanceof Blob) form.append(composed, value);
177
177
  else if (typeof FileList !== "undefined" && value instanceof FileList) for (let i = 0; i < value.length; i++) form.append(composed + "[]", value[i], value[i].name);
178
- else if (Array.isArray(value)) for (let i = 0; i < value.length; i++) objectToFormData$1({ [i]: value[i] }, form, composed);
178
+ else if (Array.isArray(value)) for (let i = 0; i < value.length; i++) objectToFormData({ [i]: value[i] }, form, composed);
179
179
  else if (value instanceof Date) form.append(composed, value.toISOString());
180
180
  else if (typeof value === "boolean") form.append(composed, value ? "1" : "0");
181
181
  else if (typeof value === "string") form.append(composed, value);
182
182
  else if (typeof value === "number") form.append(composed, String(value));
183
183
  else if (value === null || value === void 0) form.append(composed, "");
184
- else objectToFormData$1(value, form, composed);
184
+ else objectToFormData(value, form, composed);
185
185
  }
186
186
  return form;
187
187
  }
188
188
  function clonePageData(pageData) {
189
189
  return JSON.parse(JSON.stringify(pageData));
190
190
  }
191
- function readInitialPageData(appEl) {
191
+ function readInitialPageData() {
192
192
  const scriptEl = document.getElementById(PAGE_DATA_SCRIPT_ID);
193
193
  if (scriptEl?.textContent) return JSON.parse(scriptEl.textContent);
194
- const legacyData = appEl.getAttribute("data-page");
195
- if (legacyData) return JSON.parse(legacyData);
196
194
  throw new Error("pages: Missing initial page payload.");
197
195
  }
198
196
  function parsePageDataFromHtml(html) {
@@ -204,9 +202,6 @@ function parsePageDataFromHtml(html) {
204
202
  return null;
205
203
  }
206
204
  }
207
- function isAbortError$1(error) {
208
- return typeof error === "object" && error !== null && "name" in error && error.name === "AbortError";
209
- }
210
205
  function abortError() {
211
206
  return new DOMException("Navigation aborted", "AbortError");
212
207
  }
@@ -220,14 +215,13 @@ async function fetchPageResponse(fetchUrl, init) {
220
215
  try {
221
216
  return await fetch(fetchUrl, init);
222
217
  } catch (error) {
223
- if (init.signal?.aborted || isAbortError$1(error)) throw abortError();
218
+ if (init.signal?.aborted || isAbortError(error)) throw abortError();
224
219
  return null;
225
220
  }
226
221
  }
227
222
  async function createPageNavigationEngine(config) {
228
223
  const { adapter, components, layoutTree, routeMeta, matchRoute, staticPageData: STATIC_PAGE_DATA_ENABLED = false, staticPageDataFastPath: STATIC_PAGE_DATA_FAST_PATH = STATIC_PAGE_DATA_ENABLED, prefetchHoverDelay: PREFETCH_HOVER_DELAY, prefetchDefaultCacheFor: PREFETCH_DEFAULT_CACHE_FOR, cacheVisitedPageData: CACHE_VISITED_PAGE_DATA = false } = config;
229
224
  const _prefetchCache = new PrefetchCache();
230
- const _staticPageDataCacheKeys = /* @__PURE__ */ new Set();
231
225
  let _nextNavigationId = 0;
232
226
  let _pendingResource = null;
233
227
  let _committedResource = null;
@@ -238,9 +232,6 @@ async function createPageNavigationEngine(config) {
238
232
  let initialScrollPosition = null;
239
233
  const initialUrl = window.location.pathname + window.location.search + window.location.hash;
240
234
  const scrollRestoration = createScrollRestoration();
241
- function getPageDataCacheKey(url, method = "GET") {
242
- return `${method}:${url}`;
243
- }
244
235
  async function resolveComponent(id) {
245
236
  const loader = components[id];
246
237
  if (!loader) throw new Error(`pages: Unknown page component '${id}'.`);
@@ -256,7 +247,7 @@ async function createPageNavigationEngine(config) {
256
247
  return `${STATIC_PAGE_DATA_PREFIX}/${filePath}.json`;
257
248
  }
258
249
  function isUsablePageData(pageData, matchedId) {
259
- return typeof pageData === "object" && pageData !== null && "component" in pageData && typeof pageData.component === "string" && "props" in pageData && typeof pageData.props === "object" && pageData.props !== null && typeof pageData.component === "string" && pageData.component === matchedId && !routeMeta[pageData.component]?.island && Boolean(components[pageData.component]);
250
+ return typeof pageData === "object" && pageData !== null && "component" in pageData && typeof pageData.component === "string" && "props" in pageData && typeof pageData.props === "object" && pageData.props !== null && pageData.component === matchedId && !routeMeta[pageData.component]?.island && Boolean(components[pageData.component]);
260
251
  }
261
252
  class DeferredRegistry {
262
253
  active = true;
@@ -265,28 +256,17 @@ async function createPageNavigationEngine(config) {
265
256
  groups = {};
266
257
  preservedSource = null;
267
258
  preservedKeys = null;
268
- setupPending(pageData) {
259
+ /** Create a deferred ref per key; `resolved` payloads already carry the values inline. */
260
+ setup(pageData, resolved = false) {
269
261
  this.props = pageData.props;
270
262
  this.keyRefs = {};
271
263
  this.groups = {};
272
264
  if (!pageData.deferredKeys) return;
273
265
  for (const [key, group] of Object.entries(pageData.deferredKeys)) {
274
266
  const ref = adapter.createDeferred();
275
- this.keyRefs[key] = ref;
276
- this.props[key] = ref;
277
- (this.groups[group] ??= []).push(key);
278
- }
279
- }
280
- setupResolved(pageData) {
281
- this.props = pageData.props;
282
- this.keyRefs = {};
283
- this.groups = {};
284
- if (!pageData.deferredKeys) return;
285
- for (const [key, group] of Object.entries(pageData.deferredKeys)) {
286
- const ref = adapter.createDeferred();
287
- const updated = adapter.resolveDeferred(ref, pageData.props[key]);
288
- this.keyRefs[key] = updated;
289
- this.props[key] = updated;
267
+ const value = resolved ? adapter.resolveDeferred(ref, pageData.props[key]) : ref;
268
+ this.keyRefs[key] = value;
269
+ this.props[key] = value;
290
270
  (this.groups[group] ??= []).push(key);
291
271
  }
292
272
  }
@@ -380,9 +360,14 @@ async function createPageNavigationEngine(config) {
380
360
  }
381
361
  const _resourceDeferredRegistries = /* @__PURE__ */ new WeakMap();
382
362
  const _preservedDeferredResources = /* @__PURE__ */ new WeakMap();
383
- async function loadStaticPageDataFile(fetchUrl, signal) {
363
+ /** Route id for a non-island page that static page data can serve, or null. */
364
+ function matchStaticPageId(fetchUrl) {
384
365
  const matchedId = matchRoute(fetchUrl || window.location.pathname + window.location.search);
385
- if (!matchedId || routeMeta[matchedId]?.island || !components[matchedId]) return null;
366
+ return matchedId && !routeMeta[matchedId]?.island && components[matchedId] ? matchedId : null;
367
+ }
368
+ async function loadStaticPageDataFile(fetchUrl, signal) {
369
+ const matchedId = matchStaticPageId(fetchUrl);
370
+ if (!matchedId) return null;
386
371
  try {
387
372
  const pageDataResponse = await fetch(getStaticPageDataUrl(fetchUrl), {
388
373
  headers: { Accept: "application/json" },
@@ -396,14 +381,14 @@ async function createPageNavigationEngine(config) {
396
381
  };
397
382
  }
398
383
  } catch (error) {
399
- if (signal?.aborted || isAbortError$1(error)) throw abortError();
384
+ if (signal?.aborted || isAbortError(error)) throw abortError();
400
385
  }
401
386
  return null;
402
387
  }
403
388
  async function loadStaticPageData(fetchUrl, response, signal, verifyPageResponse = false) {
404
389
  if (!response.ok) return null;
405
- const matchedId = matchRoute(fetchUrl || window.location.pathname + window.location.search);
406
- if (!matchedId || routeMeta[matchedId]?.island || !components[matchedId]) return null;
390
+ const matchedId = matchStaticPageId(fetchUrl);
391
+ if (!matchedId) return null;
407
392
  const contentType = response.headers.get("content-type") || "";
408
393
  if (contentType && !contentType.includes("text/html")) return null;
409
394
  if (verifyPageResponse) {
@@ -424,15 +409,28 @@ async function createPageNavigationEngine(config) {
424
409
  resolvedDeferred: false
425
410
  };
426
411
  }
427
- const deferredWindow = window;
428
- deferredWindow.__resolveDeferred = (group, data) => _htmlDeferredRegistry?.resolve(group, data, void 0);
429
- deferredWindow.__rejectDeferred = (group, error) => _htmlDeferredRegistry?.resolve(group, void 0, error);
430
- function commitHashNavigation(effectiveFetchUrl, hash, options, writeHistory) {
431
- _currentFetchUrl = effectiveFetchUrl;
432
- if (writeHistory) scrollRestoration.writeHistory(effectiveFetchUrl + hash, !!options.replace);
433
- scrollRestoration.commit();
434
- if (options._scrollPosition) {
435
- window.scrollTo(options._scrollPosition.x, options._scrollPosition.y);
412
+ /** Fetch page data for the prefetch cache; null means "fall back to a full page load". */
413
+ function fetchPrefetchPageData(url) {
414
+ const headers = {
415
+ "X-VoidPages": "true",
416
+ Accept: "application/json",
417
+ Purpose: "prefetch"
418
+ };
419
+ return (STATIC_PAGE_DATA_ENABLED && STATIC_PAGE_DATA_FAST_PATH ? loadStaticPageDataFile(url).then((result) => result?.pageData) : Promise.resolve(void 0)).then((pageData) => {
420
+ if (pageData !== void 0) return pageData;
421
+ return fetchPageResponse(url, {
422
+ method: "GET",
423
+ headers
424
+ }).then(async (r) => {
425
+ if (!r || r.redirected) return null;
426
+ if (!r.headers.get("X-VoidPages")) return (await loadStaticPageData(url, r, void 0, !STATIC_PAGE_DATA_FAST_PATH))?.pageData ?? null;
427
+ return r.json();
428
+ });
429
+ });
430
+ }
431
+ function restoreScroll(scrollPosition, hash) {
432
+ if (scrollPosition) {
433
+ window.scrollTo(scrollPosition.x, scrollPosition.y);
436
434
  return;
437
435
  }
438
436
  if (hash) {
@@ -444,11 +442,24 @@ async function createPageNavigationEngine(config) {
444
442
  }
445
443
  window.scrollTo(0, 0);
446
444
  }
445
+ const deferredWindow = window;
446
+ deferredWindow.__resolveDeferred = (group, data) => _htmlDeferredRegistry?.resolve(group, data, void 0);
447
+ deferredWindow.__rejectDeferred = (group, error) => _htmlDeferredRegistry?.resolve(group, void 0, error);
448
+ function commitHashNavigation(effectiveFetchUrl, hash, options, writeHistory) {
449
+ _currentFetchUrl = effectiveFetchUrl;
450
+ if (writeHistory) scrollRestoration.writeHistory(effectiveFetchUrl + hash, !!options.replace);
451
+ scrollRestoration.commit();
452
+ restoreScroll(options._scrollPosition, hash);
453
+ }
447
454
  async function loadNavigationShell(id, url, fetchUrl, method, options, signal, commitTarget, deferredRegistry) {
448
- if (method !== "GET") {
449
- _prefetchCache.flushAll();
450
- _staticPageDataCacheKeys.clear();
455
+ const target = new URL(url, window.location.origin);
456
+ if (target.protocol !== "http:" && target.protocol !== "https:") throw new Error(`Void Router: refusing to navigate to a ${target.protocol} URL.`);
457
+ if (target.origin !== window.location.origin) {
458
+ if (method !== "GET") throw new Error("Void Router: non-GET visits must target the current origin.");
459
+ window.location.href = url;
460
+ return;
451
461
  }
462
+ if (method !== "GET") _prefetchCache.flushAll();
452
463
  const headers = {
453
464
  "X-VoidPages": "true",
454
465
  Accept: "application/json"
@@ -459,7 +470,7 @@ async function createPageNavigationEngine(config) {
459
470
  signal
460
471
  };
461
472
  if (options.data && method !== "GET") {
462
- if (hasFiles$1(options.data)) fetchOptions.body = objectToFormData$1(options.data);
473
+ if (hasFiles(options.data)) fetchOptions.body = objectToFormData(options.data);
463
474
  else {
464
475
  headers["Content-Type"] = "application/json";
465
476
  fetchOptions.body = JSON.stringify(options.data);
@@ -475,24 +486,9 @@ async function createPageNavigationEngine(config) {
475
486
  return;
476
487
  }
477
488
  pageData = clonePageData(cachedPageData);
478
- deferredRegistry.setupResolved(pageData);
489
+ deferredRegistry.setup(pageData, true);
479
490
  if (!_prefetchCache.isFresh(cacheEntry)) {
480
- const bgHeaders = {
481
- "X-VoidPages": "true",
482
- Accept: "application/json",
483
- Purpose: "prefetch"
484
- };
485
- const bgFetch = (STATIC_PAGE_DATA_ENABLED && STATIC_PAGE_DATA_FAST_PATH && method === "GET" ? loadStaticPageDataFile(fetchUrl).then((result) => result?.pageData) : Promise.resolve(void 0)).then((pageData) => {
486
- if (pageData !== void 0) return pageData;
487
- return fetchPageResponse(fetchUrl, {
488
- method,
489
- headers: bgHeaders
490
- }).then(async (r) => {
491
- if (!r || r.redirected) return null;
492
- if (!r.headers.get("X-VoidPages")) return (await loadStaticPageData(fetchUrl, r, void 0, !STATIC_PAGE_DATA_FAST_PATH))?.pageData ?? null;
493
- return r.json();
494
- });
495
- });
491
+ const bgFetch = fetchPrefetchPageData(fetchUrl);
496
492
  _prefetchCache.flush(fetchUrl, method);
497
493
  _prefetchCache.set(fetchUrl, method, bgFetch, PREFETCH_DEFAULT_CACHE_FOR);
498
494
  }
@@ -501,10 +497,8 @@ async function createPageNavigationEngine(config) {
501
497
  const staticPageData = await loadStaticPageDataFile(fetchUrl, signal);
502
498
  if (staticPageData) {
503
499
  pageData = staticPageData.pageData;
504
- _staticPageDataCacheKeys.add(getPageDataCacheKey(fetchUrl, method));
505
500
  _prefetchCache.set(fetchUrl, method, Promise.resolve(clonePageData(pageData)), PREFETCH_DEFAULT_CACHE_FOR);
506
- if (staticPageData.resolvedDeferred) deferredRegistry.setupResolved(pageData);
507
- else deferredRegistry.setupPending(pageData);
501
+ deferredRegistry.setup(pageData, staticPageData.resolvedDeferred);
508
502
  }
509
503
  }
510
504
  const response = pageData === void 0 ? method === "GET" ? await fetchPageResponse(fetchUrl, fetchOptions) : await fetch(fetchUrl, fetchOptions) : null;
@@ -533,8 +527,7 @@ async function createPageNavigationEngine(config) {
533
527
  const staticPageData = await loadStaticPageData(fetchUrl, response, signal, !STATIC_PAGE_DATA_FAST_PATH);
534
528
  if (staticPageData) {
535
529
  pageData = staticPageData.pageData;
536
- if (staticPageData.resolvedDeferred) deferredRegistry.setupResolved(pageData);
537
- else deferredRegistry.setupPending(pageData);
530
+ deferredRegistry.setup(pageData, staticPageData.resolvedDeferred);
538
531
  } else {
539
532
  window.location.href = url;
540
533
  return;
@@ -558,7 +551,7 @@ async function createPageNavigationEngine(config) {
558
551
  if (!line) continue;
559
552
  if (firstLine) {
560
553
  pageData = JSON.parse(line);
561
- deferredRegistry.setupPending(pageData);
554
+ deferredRegistry.setup(pageData);
562
555
  firstLine = false;
563
556
  } else {
564
557
  const msg = JSON.parse(line);
@@ -587,7 +580,7 @@ async function createPageNavigationEngine(config) {
587
580
  })();
588
581
  } else {
589
582
  pageData = await response.json();
590
- deferredRegistry.setupPending(pageData);
583
+ deferredRegistry.setup(pageData);
591
584
  }
592
585
  if (CACHE_VISITED_PAGE_DATA && method === "GET" && response?.ok && response.headers.get("X-VoidPages") && pageData?.component === matchRoute(fetchUrl) && !pageData.deferredKeys) _prefetchCache.set(fetchUrl, method, Promise.resolve(clonePageData(pageData)), PREFETCH_DEFAULT_CACHE_FOR);
593
586
  }
@@ -631,23 +624,16 @@ async function createPageNavigationEngine(config) {
631
624
  scrollRestoration.writeHistory(historyUrl, !!options.replace);
632
625
  }
633
626
  scrollRestoration.commit();
634
- const doScroll = () => {
635
- if (options.preserveScroll) return;
636
- if (options._scrollPosition) window.scrollTo(options._scrollPosition.x, options._scrollPosition.y);
637
- else if (commitTarget.hash) {
638
- const el = document.getElementById(commitTarget.hash.slice(1));
639
- if (el) el.scrollIntoView();
640
- else window.scrollTo(0, 0);
641
- } else window.scrollTo(0, 0);
642
- };
643
- requestAnimationFrame(doScroll);
627
+ requestAnimationFrame(() => {
628
+ if (!options.preserveScroll) restoreScroll(options._scrollPosition, commitTarget.hash);
629
+ });
644
630
  };
645
631
  }
646
- const initialPageData = readInitialPageData(document.getElementById("app"));
632
+ const initialPageData = readInitialPageData();
647
633
  const [initialComponent, initialLayouts] = await Promise.all([resolveComponent(initialPageData.component), resolveLayouts(initialPageData.component)]);
648
634
  if (CACHE_VISITED_PAGE_DATA && initialPageData.url === _currentFetchUrl && initialPageData.component === matchRoute(_currentFetchUrl) && initialPageData.errors === null && !initialPageData.deferredKeys) _prefetchCache.set(_currentFetchUrl, "GET", Promise.resolve(clonePageData(initialPageData)), PREFETCH_DEFAULT_CACHE_FOR);
649
635
  const initialDeferredRegistry = new DeferredRegistry();
650
- initialDeferredRegistry.setupPending(initialPageData);
636
+ initialDeferredRegistry.setup(initialPageData);
651
637
  _committedDeferredRegistry = initialDeferredRegistry;
652
638
  _htmlDeferredRegistry = initialDeferredRegistry;
653
639
  return {
@@ -691,6 +677,10 @@ async function createPageNavigationEngine(config) {
691
677
  };
692
678
  const shell = loadNavigationShell(id, url, effectiveFetchUrl, method, options, controller.signal, commitTarget, deferredRegistry);
693
679
  let commitResource = async () => {};
680
+ const stop = () => {
681
+ controller.abort(abortError());
682
+ deferredRegistry.dispose();
683
+ };
694
684
  const resource = {
695
685
  id,
696
686
  url,
@@ -700,17 +690,11 @@ async function createPageNavigationEngine(config) {
700
690
  options,
701
691
  immediate: false,
702
692
  shell,
703
- abort() {
704
- controller.abort(abortError());
705
- deferredRegistry.dispose();
706
- },
693
+ abort: stop,
707
694
  commit() {
708
695
  return commitResource();
709
696
  },
710
- dispose() {
711
- controller.abort(abortError());
712
- deferredRegistry.dispose();
713
- }
697
+ dispose: stop
714
698
  };
715
699
  _resourceDeferredRegistries.set(resource, deferredRegistry);
716
700
  commitResource = makeCommit(commitTarget, options, shell, deferredRegistry, id, () => resource);
@@ -740,35 +724,15 @@ async function createPageNavigationEngine(config) {
740
724
  const existing = _prefetchCache.get(prefetchUrl, method);
741
725
  if (existing) return existing.response;
742
726
  const ttl = options.cacheFor ? parseCacheFor(options.cacheFor) : PREFETCH_DEFAULT_CACHE_FOR;
743
- const headers = {
744
- "X-VoidPages": "true",
745
- Accept: "application/json",
746
- Purpose: "prefetch"
747
- };
748
- const fetchPromise = (STATIC_PAGE_DATA_ENABLED && STATIC_PAGE_DATA_FAST_PATH && method === "GET" ? loadStaticPageDataFile(prefetchUrl).then((result) => result?.pageData) : Promise.resolve(void 0)).then((pageData) => {
749
- if (pageData !== void 0) return pageData;
750
- return fetchPageResponse(prefetchUrl, {
751
- method,
752
- headers
753
- }).then((r) => {
754
- if (!r || r.redirected) return null;
755
- if (!r.headers.get("X-VoidPages")) {
756
- if (method !== "GET") return null;
757
- return loadStaticPageData(prefetchUrl, r, void 0, !STATIC_PAGE_DATA_FAST_PATH).then((result) => result?.pageData ?? null);
758
- }
759
- return r.json();
760
- });
761
- });
727
+ const fetchPromise = fetchPrefetchPageData(prefetchUrl);
762
728
  _prefetchCache.set(prefetchUrl, method, fetchPromise, ttl);
763
729
  return fetchPromise;
764
730
  },
765
731
  flush(url, method = "GET") {
766
732
  _prefetchCache.flush(url, method);
767
- _staticPageDataCacheKeys.delete(getPageDataCacheKey(url, method));
768
733
  },
769
734
  flushAll() {
770
735
  _prefetchCache.flushAll();
771
- _staticPageDataCacheKeys.clear();
772
736
  },
773
737
  setPopStateHandler(handler) {
774
738
  popStateHandler = handler;
@@ -805,6 +769,48 @@ async function createPageNavigationEngine(config) {
805
769
  };
806
770
  }
807
771
  //#endregion
772
+ //#region src/pages/adapter-helpers.ts
773
+ function getValidationErrors(body) {
774
+ if (body && typeof body === "object" && "errors" in body && body.errors && typeof body.errors === "object" && !Array.isArray(body.errors)) return body.errors;
775
+ return null;
776
+ }
777
+ function appendQueryValue(params, key, value) {
778
+ if (value === null || value === void 0) return false;
779
+ if (value instanceof Date) {
780
+ params.append(key, value.toISOString());
781
+ return true;
782
+ }
783
+ if (Array.isArray(value)) {
784
+ let appended = false;
785
+ for (const item of value) appended = appendQueryValue(params, key, item) || appended;
786
+ return appended;
787
+ }
788
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
789
+ params.append(key, String(value));
790
+ return true;
791
+ }
792
+ throw new Error(`Link: GET data only supports primitive values and arrays. Remove nested data for '${key}'.`);
793
+ }
794
+ function mergeDataIntoHref(href, data) {
795
+ if (!data) return href;
796
+ const hashIndex = href.indexOf("#");
797
+ const beforeHash = hashIndex === -1 ? href : href.slice(0, hashIndex);
798
+ const hash = hashIndex === -1 ? "" : href.slice(hashIndex);
799
+ const searchIndex = beforeHash.indexOf("?");
800
+ const path = searchIndex === -1 ? beforeHash : beforeHash.slice(0, searchIndex);
801
+ const search = searchIndex === -1 ? "" : beforeHash.slice(searchIndex + 1);
802
+ const params = new URLSearchParams(search);
803
+ let appended = false;
804
+ for (const [key, value] of Object.entries(data)) appended = appendQueryValue(params, key, value) || appended;
805
+ if (!appended) return href;
806
+ const query = params.toString();
807
+ return `${path}${query ? `?${query}` : ""}${hash}`;
808
+ }
809
+ function isModifiedEvent(e) {
810
+ const target = e.currentTarget.getAttribute("target");
811
+ return target !== null && target !== "_self" || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey || e.button !== 0;
812
+ }
813
+ //#endregion
808
814
  //#region src/pages/form-value-equality.ts
809
815
  function isPlainObject(value) {
810
816
  if (value === null || typeof value !== "object") return false;
@@ -955,31 +961,6 @@ function createSsrRouter(url = "/", params = {}) {
955
961
  }
956
962
  };
957
963
  }
958
- function isFile(value) {
959
- return typeof File !== "undefined" && value instanceof File || value instanceof Blob || typeof FileList !== "undefined" && value instanceof FileList && value.length > 0;
960
- }
961
- function hasFiles(data) {
962
- return isFile(data) || typeof data === "object" && data !== null && Object.values(data).some(hasFiles);
963
- }
964
- function objectToFormData(source, form, parentKey) {
965
- form = form || new FormData();
966
- for (const key in source) {
967
- if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
968
- const composed = parentKey ? parentKey + "[" + key + "]" : key;
969
- const value = source[key];
970
- if (value instanceof File) form.append(composed, value, value.name);
971
- else if (value instanceof Blob) form.append(composed, value);
972
- else if (typeof FileList !== "undefined" && value instanceof FileList) for (let i = 0; i < value.length; i++) form.append(composed + "[]", value[i], value[i].name);
973
- else if (Array.isArray(value)) for (let i = 0; i < value.length; i++) objectToFormData({ [i]: value[i] }, form, composed);
974
- else if (value instanceof Date) form.append(composed, value.toISOString());
975
- else if (typeof value === "boolean") form.append(composed, value ? "1" : "0");
976
- else if (typeof value === "string") form.append(composed, value);
977
- else if (typeof value === "number") form.append(composed, String(value));
978
- else if (value === null || value === void 0) form.append(composed, "");
979
- else objectToFormData(value, form, composed);
980
- }
981
- return form;
982
- }
983
964
  const ssrProxy = createSsrRouter();
984
965
  async function submitAction(router, url, options) {
985
966
  try {
@@ -1030,90 +1011,88 @@ function createActionClient() {
1030
1011
  };
1031
1012
  }
1032
1013
  async function createVoidRouter(config) {
1033
- {
1034
- const engine = await createPageNavigationEngine(config);
1035
- let routeUrl = currentUrl();
1036
- let routeParams = engine.initialPageData.params ?? {};
1037
- let activeNavigationId = null;
1038
- const setRouteState = (url, params = routeParams) => {
1039
- routeUrl = url;
1040
- routeParams = params;
1041
- config.onRouteChange?.(url);
1042
- };
1043
- const setNavigation = (navigation) => {
1044
- config.onNavigationChange?.(navigation);
1045
- };
1046
- async function applyNavigationResource(resource) {
1047
- activeNavigationId = resource.id;
1048
- setNavigation(navigationStateFor(resource.fetchUrl + resource.hash, resource.method));
1049
- try {
1050
- const result = await resource.shell;
1051
- if (!result) return;
1052
- setRouteState(result.pageData.url || resource.fetchUrl + resource.hash, result.pageData.params ?? {});
1053
- const applyUpdate = () => config.adapter.applyUpdate(result.pageData, result.component, result.layouts, { preserveState: resource.options.preserveState ?? resource.method !== "GET" });
1054
- if ((resource.options.viewTransition ?? config.viewTransitions) && document.startViewTransition) await document.startViewTransition(() => applyUpdate()).updateCallbackDone;
1055
- else await applyUpdate();
1056
- await resource.commit();
1057
- if (activeNavigationId === resource.id) setRouteState(currentUrl(), result.pageData.params ?? {});
1058
- return result.pageData;
1059
- } catch (error) {
1060
- if (resource.method.toUpperCase() === "GET" && !resource.options._resolveOnShell && isAbortError(error)) return;
1061
- throw error;
1062
- } finally {
1063
- if (activeNavigationId === resource.id) {
1064
- activeNavigationId = null;
1065
- setRouteState(currentUrl());
1066
- setNavigation(idleNavigationState());
1067
- }
1014
+ const engine = await createPageNavigationEngine(config);
1015
+ let routeUrl = currentUrl();
1016
+ let routeParams = engine.initialPageData.params ?? {};
1017
+ let activeNavigationId = null;
1018
+ const setRouteState = (url, params = routeParams) => {
1019
+ routeUrl = url;
1020
+ routeParams = params;
1021
+ config.onRouteChange?.(url);
1022
+ };
1023
+ const setNavigation = (navigation) => {
1024
+ config.onNavigationChange?.(navigation);
1025
+ };
1026
+ async function applyNavigationResource(resource) {
1027
+ activeNavigationId = resource.id;
1028
+ setNavigation(navigationStateFor(resource.fetchUrl + resource.hash, resource.method));
1029
+ try {
1030
+ const result = await resource.shell;
1031
+ if (!result) return;
1032
+ setRouteState(result.pageData.url || resource.fetchUrl + resource.hash, result.pageData.params ?? {});
1033
+ const applyUpdate = () => config.adapter.applyUpdate(result.pageData, result.component, result.layouts, { preserveState: resource.options.preserveState ?? resource.method !== "GET" });
1034
+ if ((resource.options.viewTransition ?? config.viewTransitions) && document.startViewTransition) await document.startViewTransition(() => applyUpdate()).updateCallbackDone;
1035
+ else await applyUpdate();
1036
+ await resource.commit();
1037
+ if (activeNavigationId === resource.id) setRouteState(currentUrl(), result.pageData.params ?? {});
1038
+ return result.pageData;
1039
+ } catch (error) {
1040
+ if (resource.method.toUpperCase() === "GET" && !resource.options._resolveOnShell && isAbortError(error)) return;
1041
+ throw error;
1042
+ } finally {
1043
+ if (activeNavigationId === resource.id) {
1044
+ activeNavigationId = null;
1045
+ setRouteState(currentUrl());
1046
+ setNavigation(idleNavigationState());
1068
1047
  }
1069
1048
  }
1070
- const rawRouter = {
1071
- _hoverDelay: engine._hoverDelay,
1072
- get url() {
1073
- return toUrl(routeUrl);
1074
- },
1075
- get path() {
1076
- return this.url.pathname;
1077
- },
1078
- get query() {
1079
- return this.url.searchParams;
1080
- },
1081
- get params() {
1082
- return routeParams;
1083
- },
1084
- visit(url, options = {}) {
1085
- return applyNavigationResource(engine.prepareVisit(normalizeUrl(url), options));
1086
- },
1087
- refresh(options = {}) {
1088
- return rawRouter.visit(window.location.pathname + window.location.search, {
1089
- preserveState: true,
1090
- preserveScroll: true,
1091
- ...options
1092
- });
1093
- },
1094
- prefetch(url, options = {}) {
1095
- return engine.prefetch(normalizeUrl(url), options);
1096
- },
1097
- flush(url, method = "GET") {
1098
- engine.flush(normalizeUrl(url), method);
1099
- },
1100
- flushAll() {
1101
- engine.flushAll();
1102
- }
1103
- };
1104
- const router = createRouterFacade(rawRouter, () => routeUrl, () => routeParams);
1105
- engine.setPopStateHandler((url, options) => {
1106
- router.visit(url, options);
1107
- });
1108
- return {
1109
- router,
1110
- initialPageData: engine.initialPageData,
1111
- initialComponent: engine.initialComponent,
1112
- initialLayouts: engine.initialLayouts,
1113
- start: engine.start,
1114
- commitInitialRender: engine.commitInitialRender
1115
- };
1116
1049
  }
1050
+ const rawRouter = {
1051
+ _hoverDelay: engine._hoverDelay,
1052
+ get url() {
1053
+ return toUrl(routeUrl);
1054
+ },
1055
+ get path() {
1056
+ return this.url.pathname;
1057
+ },
1058
+ get query() {
1059
+ return this.url.searchParams;
1060
+ },
1061
+ get params() {
1062
+ return routeParams;
1063
+ },
1064
+ visit(url, options = {}) {
1065
+ return applyNavigationResource(engine.prepareVisit(normalizeUrl(url), options));
1066
+ },
1067
+ refresh(options = {}) {
1068
+ return rawRouter.visit(window.location.pathname + window.location.search, {
1069
+ preserveState: true,
1070
+ preserveScroll: true,
1071
+ ...options
1072
+ });
1073
+ },
1074
+ prefetch(url, options = {}) {
1075
+ return engine.prefetch(normalizeUrl(url), options);
1076
+ },
1077
+ flush(url, method = "GET") {
1078
+ engine.flush(normalizeUrl(url), method);
1079
+ },
1080
+ flushAll() {
1081
+ engine.flushAll();
1082
+ }
1083
+ };
1084
+ const router = createRouterFacade(rawRouter, () => routeUrl, () => routeParams);
1085
+ engine.setPopStateHandler((url, options) => {
1086
+ router.visit(url, options);
1087
+ });
1088
+ return {
1089
+ router,
1090
+ initialPageData: engine.initialPageData,
1091
+ initialComponent: engine.initialComponent,
1092
+ initialLayouts: engine.initialLayouts,
1093
+ start: engine.start,
1094
+ commitInitialRender: engine.commitInitialRender
1095
+ };
1117
1096
  }
1118
1097
  function scheduleHydration(el, loader, props, strategy, hydrateFn) {
1119
1098
  const hydrate = () => loader().then((mod) => hydrateFn(el, mod, props));
@@ -1150,4 +1129,4 @@ function initIslands(islands, hydrateFn) {
1150
1129
  });
1151
1130
  }
1152
1131
  //#endregion
1153
- export { VoidActionError, categorizeActionError, createActionClient, createPageNavigationEngine, createRouterFacade, createSsrRouter, createVoidRouter, formErrorMessage, formRetryMessage, formSubmissionBlocked, hasFiles, idleNavigationState, initIslands, isAbortError, isCallSiteActionError, isEqualFormValue, isFile, objectToFormData, scheduleFormRetry, scheduleHydration, ssrProxy, submitAction };
1132
+ export { VoidActionError, categorizeActionError, createActionClient, createPageNavigationEngine, createRouterFacade, createSsrRouter, createVoidRouter, formErrorMessage, formRetryMessage, formSubmissionBlocked, getValidationErrors, hasFiles, idleNavigationState, initIslands, interpolateRouteParams, isAbortError, isCallSiteActionError, isEqualFormValue, isFile, isModifiedEvent, mergeDataIntoHref, objectToFormData, scheduleFormRetry, scheduleHydration, ssrProxy, submitAction };
@@ -1,4 +1,4 @@
1
- import { n as HeadDescriptor } from "../head-Do8P4puT.mjs";
1
+ import { n as HeadDescriptor } from "../head-C8K_iGe6.mjs";
2
2
  //#region src/pages/head-client.d.ts
3
3
  /**
4
4
  * Mark SSR-rendered head tags so they are cleaned up on the first SPA navigation.
@@ -1,2 +1,2 @@
1
- import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-Do8P4puT.mjs";
1
+ import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-C8K_iGe6.mjs";
2
2
  export { HeadConfig, HeadDescriptor, renderBodyAttrs, renderHeadToString, renderHtmlAttrs, resolveHead };