void 0.26.0 → 0.27.0

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 (365) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-l-FM7Ioq.mjs} +8 -7
  4. package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-D52yG7hl.mjs → auth-Dn2vw-SG.mjs} +9 -9
  7. package/dist/{auth-B60QDbjg.mjs → auth-LMJcNESe.mjs} +1 -1
  8. package/dist/{auth-link-DjeOptYi.mjs → auth-link-vz9Z2kmG.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BRxIuqDi.mjs → auth-router-DvsCUVw4.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-Ce3C8huo.mjs → build-cmd-D6we0VjO.mjs} +8 -7
  14. package/dist/{cache-CS8Yxr5a.mjs → cache-CZRdzKx1.mjs} +8 -8
  15. package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-CQ3NnMvf.mjs} +6 -5
  16. package/dist/{cf-access-YTlqvAsk.mjs → cf-access-BcIBSKqG.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/cf-user-agent-lKblH3zU.mjs +17 -0
  20. package/dist/cli/cli.mjs +48 -83
  21. package/dist/cli/cloudflare-operation-process.mjs +78 -78
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/{client-mC-dFGDD.mjs → client-DlDJuY0s.mjs} +30 -8
  24. package/dist/client-tso2OfcG.mjs +2 -0
  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-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-DYa3coIk.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-H6EvP62X.mjs → connect-BfPBHHm-.mjs} +12 -11
  41. package/dist/{create-project-B2kk9Q0o.mjs → create-project-BdXEFKal.mjs} +7 -7
  42. package/dist/{create-project-Dbb4uiN-.mjs → create-project-qFDC45zg.mjs} +1 -1
  43. package/dist/{db-DpCKZto0.mjs → db-Xs80hcaA.mjs} +101 -133
  44. package/dist/{delete-CxlSvsvW.mjs → delete-d2vuou3j.mjs} +7 -7
  45. package/dist/{deploy-CeEbnv4b.mjs → deploy-Bqe1PYBw.mjs} +2351 -2497
  46. package/dist/deploy-VsWsVQkw.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-B_9VgOm6.mjs → domain-BsDUBAvt.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-BokHgjKj.mjs → email-_lGAHOhp.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-BdTc-K2L.mjs → env-C74QepDE.mjs} +10 -10
  61. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +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/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  67. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  68. package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
  69. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  70. package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
  71. package/dist/gen-dA9hW7AV.mjs +2 -0
  72. package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-DaDdBbSS.mjs} +65 -164
  73. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  74. package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
  75. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  76. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  77. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  78. package/dist/{help-Bv44e2tm.mjs → help-0bTe_lID.mjs} +13 -32
  79. package/dist/help-DfQYVfGY.mjs +2 -0
  80. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  81. package/dist/index.d.mts +19 -2
  82. package/dist/index.mjs +619 -532
  83. package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
  84. package/dist/{init-BMf4T03q.mjs → init-DaBGmaXC.mjs} +161 -198
  85. package/dist/{link-BqYsSS_I.mjs → link-C6fjafep.mjs} +10 -10
  86. package/dist/{list-_kBToO-l.mjs → list-BTFBlqKl.mjs} +9 -8
  87. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  88. package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
  89. package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
  90. package/dist/{login-DFuo-RWO.mjs → login-GKcNUmtI.mjs} +7 -7
  91. package/dist/login-mx_ydhmp.mjs +2 -0
  92. package/dist/{logs-DYgnh6dH.mjs → logs-BiMSULmc.mjs} +28 -11
  93. package/dist/migrate-BHp07yJE.mjs +2 -0
  94. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  95. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  96. package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
  97. package/dist/{operator-args-DdY54Bgb.mjs → operator-args-DOBhIaIg.mjs} +10 -1
  98. package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-BEZ_u0Cz.mjs} +2 -2
  99. package/dist/{operator-client-BFqpp6z0.mjs → operator-client-DbDv4vtE.mjs} +2 -2
  100. package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-BT4hgavL.mjs} +24 -11
  101. package/dist/operator-cmd-CwBB-1yb.mjs +2 -0
  102. package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
  103. package/dist/pages/client.d.mts +19 -51
  104. package/dist/pages/client.mjs +204 -225
  105. package/dist/pages/head-client.d.mts +1 -1
  106. package/dist/pages/head.d.mts +1 -1
  107. package/dist/pages/head.mjs +1 -1
  108. package/dist/pages/index.d.mts +2 -2
  109. package/dist/pages/index.mjs +6 -12
  110. package/dist/pages/islands-plugin.d.mts +1 -1
  111. package/dist/pages/islands-plugin.mjs +21 -25
  112. package/dist/pages/protocol.d.mts +2 -2
  113. package/dist/pages/protocol.mjs +2 -2
  114. package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
  115. package/dist/plan-CH2G51je.mjs +2 -0
  116. package/dist/platform-args-D4E1PjVw.mjs +2 -0
  117. package/dist/{platform-args-DSV2p4nY.mjs → platform-args-DUeXY9Om.mjs} +1 -1
  118. package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-CkSx3usH.mjs} +40 -36
  119. package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-BJimB_p9.mjs} +9 -8
  120. package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-BU6izFAU.mjs} +8 -7
  121. package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-BbY1dWiM.mjs} +14 -13
  122. package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-BbmJiq5O.mjs} +1 -1
  123. package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-DIYz8V63.mjs} +1 -1
  124. package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-CHVS6cV0.mjs} +6 -6
  125. package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-ByAlpkhV.mjs} +1 -1
  126. package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-DzCwqhFq.mjs} +76 -387
  127. package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-CBOT4BSM.mjs} +1 -1
  128. package/dist/{platform-management-BrF9STZp.mjs → platform-management-CuuVDhyt.mjs} +7 -7
  129. package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CN-heS4q.mjs} +5 -4
  130. package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-CskSJgLh.mjs} +3 -3
  131. package/dist/{platform-registry-P387v42A.mjs → platform-registry-Cjv2Qf0r.mjs} +5 -1
  132. package/dist/platform-setup-BBxRxmFC.mjs +299 -0
  133. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  134. package/dist/prepare-DRUV-g3X.mjs +2 -0
  135. package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
  136. package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
  137. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  138. package/dist/prerender-render.mjs +1 -1
  139. package/dist/{project-DQstYTxO.mjs → project-BAm2aB6Q.mjs} +1 -1
  140. package/dist/{project-BiaPQ7ur.mjs → project-DedqCp59.mjs} +1 -1
  141. package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-DaoRrn-8.mjs} +19 -19
  142. package/dist/{project-team-Yiww3-go.mjs → project-team-Q_lCA7Io.mjs} +15 -18
  143. package/dist/{project-token-BrtT2NkY.mjs → project-token-BArgK9o1.mjs} +14 -17
  144. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  145. package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-KO9Hu2Pq.mjs} +12 -9
  146. package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  147. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  148. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  149. package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
  150. package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  151. package/dist/{requests-TIz_jtSu.mjs → requests-C7Oeoh5u.mjs} +5 -5
  152. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  153. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  154. package/dist/{rollback-dBqICPzj.mjs → rollback-DVAtrLAl.mjs} +30 -37
  155. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  156. package/dist/route-url-BgPja1GS.d.mts +5 -0
  157. package/dist/route-url-BjGv_KKY.mjs +28 -0
  158. package/dist/runner-9wjsSZx-.mjs +2 -0
  159. package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
  160. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  161. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  162. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  163. package/dist/runtime/ai.d.mts +1 -1
  164. package/dist/runtime/ai.mjs +34 -95
  165. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  166. package/dist/runtime/better-auth-mysql.mjs +4 -9
  167. package/dist/runtime/better-auth-pg.d.mts +1 -1
  168. package/dist/runtime/better-auth-pg.mjs +5 -10
  169. package/dist/runtime/better-auth.d.mts +1 -1
  170. package/dist/runtime/better-auth.mjs +3 -3
  171. package/dist/runtime/client-react.d.mts +2 -3
  172. package/dist/runtime/client-react.mjs +2 -2
  173. package/dist/runtime/client-solid.d.mts +2 -3
  174. package/dist/runtime/client-solid.mjs +2 -2
  175. package/dist/runtime/client-svelte.d.mts +2 -3
  176. package/dist/runtime/client-svelte.mjs +2 -2
  177. package/dist/runtime/client-vue.d.mts +2 -3
  178. package/dist/runtime/client-vue.mjs +2 -2
  179. package/dist/runtime/client.d.mts +2 -3
  180. package/dist/runtime/client.mjs +2 -2
  181. package/dist/runtime/db.mjs +1 -1
  182. package/dist/runtime/durable.mjs +3 -10
  183. package/dist/runtime/email/testing.mjs +5 -5
  184. package/dist/runtime/email.d.mts +2 -1
  185. package/dist/runtime/email.mjs +11 -27
  186. package/dist/runtime/env-public.mjs +15 -20
  187. package/dist/runtime/env.mjs +1 -1
  188. package/dist/runtime/fetch-stream.d.mts +2 -2
  189. package/dist/runtime/fetch-stream.mjs +1 -1
  190. package/dist/runtime/fetch.d.mts +2 -3
  191. package/dist/runtime/fetch.mjs +1 -1
  192. package/dist/runtime/handler.d.mts +1 -1
  193. package/dist/runtime/handler.mjs +2 -2
  194. package/dist/runtime/isr.mjs +1 -1
  195. package/dist/runtime/kv.mjs +10 -11
  196. package/dist/runtime/live-client.d.mts +1 -1
  197. package/dist/runtime/live-client.mjs +12 -22
  198. package/dist/runtime/live-server.mjs +27 -35
  199. package/dist/runtime/live.d.mts +2 -2
  200. package/dist/runtime/live.mjs +2 -2
  201. package/dist/runtime/migration-handler.mjs +4 -81
  202. package/dist/runtime/queues.mjs +1 -1
  203. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  204. package/dist/runtime/remote/binding-handler.mjs +8 -9
  205. package/dist/runtime/remote/index.mjs +27 -77
  206. package/dist/runtime/route-url.d.mts +2 -4
  207. package/dist/runtime/route-url.mjs +1 -1
  208. package/dist/runtime/routing.d.mts +1 -1
  209. package/dist/runtime/routing.mjs +15 -26
  210. package/dist/runtime/sandbox.mjs +2 -2
  211. package/dist/runtime/sse.mjs +1 -1
  212. package/dist/runtime/storage.mjs +1 -1
  213. package/dist/runtime/validator.d.mts +1 -1
  214. package/dist/runtime/ws-server.d.mts +2 -2
  215. package/dist/runtime/ws-server.mjs +30 -61
  216. package/dist/runtime/ws.d.mts +1 -1
  217. package/dist/runtime/ws.mjs +1 -1
  218. package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
  219. package/dist/{secret-AKnNXNP5.mjs → secret-BvtB7IjY.mjs} +15 -15
  220. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  221. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  222. package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  223. package/dist/sveltekit.d.mts +0 -2
  224. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  225. package/dist/validate-BJr9LfXy.mjs +2 -0
  226. package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
  227. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  228. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  229. package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
  230. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  231. package/{skills/void/docs → docs}/guide/ai.md +5 -3
  232. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  233. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  234. package/{skills/void/docs → docs}/guide/deployment.md +2 -2
  235. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  236. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  237. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  238. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  239. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  240. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  241. package/{skills/void/docs → docs}/guide/live.md +10 -5
  242. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
  243. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  244. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  245. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  246. package/{skills/void/docs → docs}/guide/platform/administration/access.md +3 -11
  247. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  248. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  249. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  250. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  251. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  252. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  253. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +4 -2
  254. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
  255. package/{skills/void/docs → docs}/guide/project-collaboration.md +7 -3
  256. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  257. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  258. package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
  259. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  260. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  261. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  262. package/docs/integrations/agents.md +37 -0
  263. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  264. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  265. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  266. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  267. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  268. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  269. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  270. package/{skills/void/docs → docs}/reference/cli/auth.md +1 -6
  271. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  272. package/{skills/void/docs → docs}/reference/cli/deploy.md +1 -1
  273. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  274. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  275. package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
  276. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  277. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
  278. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  279. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  280. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  281. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  282. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  283. package/{skills/void/docs → docs}/reference/cli.md +1 -1
  284. package/{skills/void/docs → docs}/reference/config.md +13 -13
  285. package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
  286. package/package.json +34 -30
  287. package/schema.json +1 -1
  288. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  289. package/skills/void/SKILL.md +9 -5
  290. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  291. package/dist/client-BxVixJBI.mjs +0 -2
  292. package/dist/config-0acf1oys.mjs +0 -2
  293. package/dist/config-D8MOgiQV.mjs +0 -32
  294. package/dist/deploy-qmiLE1G1.mjs +0 -2
  295. package/dist/discover-AMCBXivQ.mjs +0 -2
  296. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  297. package/dist/gen-qCBwH3fZ.mjs +0 -2
  298. package/dist/help-Dw5f9Xrg.mjs +0 -2
  299. package/dist/login-D7meQg_3.mjs +0 -2
  300. package/dist/migrate-CEu2X5DB.mjs +0 -2
  301. package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
  302. package/dist/plan-COtUvdMA.mjs +0 -2
  303. package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
  304. package/dist/prepare-BBknoZI1.mjs +0 -2
  305. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  306. package/dist/route-url-CG7U-cRN.mjs +0 -15
  307. package/dist/runner-voIltZrY.mjs +0 -2
  308. package/dist/validate-pna7R3Pv.mjs +0 -2
  309. package/skills/void/docs/integrations/agents.md +0 -26
  310. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  311. package/{skills/void/docs → docs}/guide/app-types.md +0 -0
  312. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  313. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  314. package/{skills/void/docs → docs}/guide/database.md +8 -8
  315. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  316. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  317. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  318. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  319. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  320. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  321. package/{skills/void/docs → docs}/guide/email.md +0 -0
  322. package/{skills/void/docs → docs}/guide/index.md +0 -0
  323. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  324. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  325. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  326. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  327. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  328. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  329. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  330. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  331. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  332. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
  333. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  334. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
  335. package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
  336. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  337. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  338. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  339. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  340. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  341. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  342. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  343. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  344. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  345. package/{skills/void/docs → docs}/index.md +0 -0
  346. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  347. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  348. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  349. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  350. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  351. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  352. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  353. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  354. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  355. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  356. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  357. /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
  358. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  359. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  360. /package/{skills/void/docs → docs}/reference/api.md +0 -0
  361. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  362. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  363. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  364. /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -1,6 +1,6 @@
1
1
  import { t as convertReturnValue } from "../response-Tn7rU0MV.mjs";
2
- import { t as VoidAssetRewriteError } from "../handler-DghKr6dU.mjs";
3
- import { n as handlePageGet, r as handlePageMutation } from "../protocol-U7bfjHmA.mjs";
2
+ import { n as handlePageGet, r as handlePageMutation } from "../protocol-CfaUwNs8.mjs";
3
+ import { t as VoidAssetRewriteError } from "../handler-BHAn2fZJ.mjs";
4
4
  import { AsyncLocalStorage } from "node:async_hooks";
5
5
  import { compilePattern, mergeQueryIntoLocation, substituteParams } from "@void/edge";
6
6
  //#region src/runtime/routing-errors.ts
@@ -200,7 +200,7 @@ function createErrorRenderer(options) {
200
200
  });
201
201
  return chain;
202
202
  }
203
- function __voidRenderDevErrorOverlay(request, status, title, error) {
203
+ function __voidRenderDevErrorOverlay(status, title, error) {
204
204
  const chain = __voidCollectErrorChain(error);
205
205
  const errorCountLabel = chain.length + (chain.length === 1 ? " Error" : " Errors");
206
206
  const sections = chain.map((entry, index) => {
@@ -451,10 +451,10 @@ function createErrorRenderer(options) {
451
451
  if (!css) return html;
452
452
  return /<\/head\s*>/i.test(html) ? html.replace(/<\/head\s*>/i, css + "</head>") : css + html;
453
453
  }
454
- function __voidRenderErrorPage(request, status, title, error) {
454
+ function __voidRenderErrorPage(status, title, error) {
455
455
  const heading = status + ": " + title;
456
456
  const prefix = status + ": ";
457
- const overlay = __VOID_DEV && status === 500 && error ? __voidRenderDevErrorOverlay(request, status, title, error) : "";
457
+ const overlay = __VOID_DEV && status === 500 && error ? __voidRenderDevErrorOverlay(status, title, error) : "";
458
458
  return `<!doctype html>
459
459
  <html lang="en">
460
460
  <head>
@@ -522,7 +522,7 @@ function createErrorRenderer(options) {
522
522
  }
523
523
  function __voidCreateErrorResponse(request, status, title, error) {
524
524
  if (!__voidShouldServeHtmlErrorPage(request)) return new Response(title, { status });
525
- return new Response(request.method === "HEAD" ? null : __voidRenderErrorPage(request, status, title, error), {
525
+ return new Response(request.method === "HEAD" ? null : __voidRenderErrorPage(status, title, error), {
526
526
  status,
527
527
  headers: { "content-type": "text/html; charset=utf-8" }
528
528
  });
@@ -535,22 +535,15 @@ function createErrorRenderer(options) {
535
535
  const response = await assets.fetch(request);
536
536
  if (response.ok) {
537
537
  const assetCss = __voidGetErrorAssetCss(error);
538
- if (assetCss) {
538
+ const showOverlay = __VOID_DEV && status === 500 && !!error && __voidShouldServeHtmlErrorPage(c.req.raw);
539
+ if (assetCss || showOverlay) {
539
540
  const html = __voidInjectErrorAssetCss(await response.text(), assetCss);
540
- const body = __VOID_DEV && status === 500 && error && __voidShouldServeHtmlErrorPage(c.req.raw) ? __voidInjectDevErrorOverlay(html, __voidRenderDevErrorOverlay(c.req.raw, status, fallbackText, error)) : html;
541
+ const body = showOverlay ? __voidInjectDevErrorOverlay(html, __voidRenderDevErrorOverlay(status, fallbackText, error)) : html;
541
542
  return new Response(c.req.method === "HEAD" ? null : body, {
542
543
  status,
543
544
  headers: { "content-type": "text/html; charset=utf-8" }
544
545
  });
545
546
  }
546
- if (__VOID_DEV && status === 500 && error && __voidShouldServeHtmlErrorPage(c.req.raw)) {
547
- const overlay = __voidRenderDevErrorOverlay(c.req.raw, status, fallbackText, error);
548
- const html = await response.text();
549
- return new Response(c.req.method === "HEAD" ? null : __voidInjectDevErrorOverlay(html, overlay), {
550
- status,
551
- headers: { "content-type": "text/html; charset=utf-8" }
552
- });
553
- }
554
547
  return new Response(response.body, {
555
548
  status,
556
549
  headers: { "content-type": "text/html; charset=utf-8" }
@@ -780,7 +773,7 @@ function filterInternalBindings(env, prefixes, exactNames = []) {
780
773
  function createWorkerFetch(options) {
781
774
  return async (request, originalEnv, ctx) => {
782
775
  const url = new URL(request.url);
783
- const discovery = request.method === "POST" && url.pathname === "/__void/prerender-paths";
776
+ const discovery = request.method === "POST" && url.pathname === "/__void/prerender-paths" && originalEnv.__VOID_PRERENDER === "1";
784
777
  if (options.validateEnv && !discovery) await options.validateEnv(originalEnv);
785
778
  const env = options.remoteEnv && originalEnv.__VOID_REMOTE === "1" ? options.remoteEnv(originalEnv) : originalEnv;
786
779
  if (options.isr) {
@@ -798,14 +791,7 @@ function createWorkerFetch(options) {
798
791
  }
799
792
  const internal = await options.internalRoute(request, env, ctx);
800
793
  if (internal) return internal;
801
- if (discovery) {
802
- const expected = env.__VOID_PROXY_TOKEN;
803
- if (expected) {
804
- const token = request.headers.get("x-void-internal");
805
- if (!token || token !== expected) return Response.json({ error: "unauthorized" }, { status: 401 });
806
- }
807
- return Response.json({ paths: await options.collectPrerenderPaths(request, env, ctx) });
808
- }
794
+ if (discovery) return Response.json({ paths: await options.collectPrerenderPaths(request, env, ctx) });
809
795
  const userEnv = options.filterBindings(env);
810
796
  const render = async (req) => options.assets(req, env, await options.app.fetch(req, userEnv, ctx));
811
797
  if (options.isr && env.ISR_CACHE && request.headers.get("upgrade")?.toLowerCase() !== "websocket") {
@@ -828,7 +814,10 @@ function createPageMutationHandler(options) {
828
814
  return async (context) => {
829
815
  const mod = options.load ? await options.load() : {};
830
816
  const actionName = options.namedActions ? new URL(context.req.url).searchParams.keys().next().value : void 0;
831
- const handler = options.namedActions ? mod.actions?.[actionName || "default"] : mod.action;
817
+ const name = actionName || "default";
818
+ const named = mod.actions;
819
+ const candidate = named && Object.hasOwn(named, name) ? named[name] : void 0;
820
+ const handler = options.namedActions ? typeof candidate === "function" ? candidate : void 0 : mod.action;
832
821
  if (options.namedActions && !handler) return new Response("Unknown action" + (actionName ? ": " + actionName : ""), { status: 404 });
833
822
  return handlePageMutation(handler, mod.loader, mod.head, context, options.componentId, options.render, options.assets, options.headConfig ?? void 0, options.renderOptions);
834
823
  };
@@ -1,6 +1,6 @@
1
- import { a as getRawRuntimeEnv } from "../env-raw-Cx8ElDdj.mjs";
1
+ import { a as getRawRuntimeEnv } from "../env-raw-jZpP5n47.mjs";
2
2
  import { t as UsageLimit } from "../limits-D0vD1M9A.mjs";
3
- import { a as requireRuntimeBinding } from "../env-D5liuQYR.mjs";
3
+ import { a as requireRuntimeBinding } from "../env-DMA3cXZt.mjs";
4
4
  import { n as SandboxContainer, r as validateSandboxOptions } from "../sandbox-container-C6ItmVuN.mjs";
5
5
  export * from "@cloudflare/sandbox";
6
6
  //#region src/runtime/sandbox.ts
@@ -1,2 +1,2 @@
1
- import { a as getLastEventId, i as formatSseText, n as eventStream, r as formatSse, t as SseStreamClosedError } from "../sse-CQNaDFFV.mjs";
1
+ import { a as getLastEventId, i as formatSseText, n as eventStream, r as formatSse, t as SseStreamClosedError } from "../sse-CMvCgjNk.mjs";
2
2
  export { SseStreamClosedError, eventStream, formatSse, formatSseText, getLastEventId };
@@ -1,4 +1,4 @@
1
- import { a as requireRuntimeBinding } from "../env-D5liuQYR.mjs";
1
+ import { a as requireRuntimeBinding } from "../env-DMA3cXZt.mjs";
2
2
  //#region src/runtime/storage.ts
3
3
  /** Create a storage client for a specific R2Bucket instance. */
4
4
  function createStorage(bucket) {
@@ -1,2 +1,2 @@
1
- import { D as runValidation, E as ValidatorSlots, T as HandlerInput } from "../handler-BeK3weD4.mjs";
1
+ import { D as runValidation, E as ValidatorSlots, T as HandlerInput } from "../handler-CNAwjRcW.mjs";
2
2
  export { HandlerInput, ValidatorSlots, runValidation };
@@ -1,6 +1,6 @@
1
1
  import { n as AuthState } from "../auth-DkcFflXV.mjs";
2
- import { i as VoidAuthRuntimeOptions, n as VoidAuthEnv } from "../better-auth-shared-BVkjZ3vM.mjs";
3
- import { f as WebSocketInstanceKey, t as AnyWebSocketDefinition } from "../ws-C79j4aED.mjs";
2
+ import { i as VoidAuthRuntimeOptions, n as VoidAuthEnv } from "../better-auth-shared-CPvWD3nG.mjs";
3
+ import { f as WebSocketInstanceKey, t as AnyWebSocketDefinition } from "../ws-CChrrAU-.mjs";
4
4
  //#region src/runtime/ws-server.d.ts
5
5
  export type WebSocketRouteMeta = {
6
6
  name?: string;
@@ -1,5 +1,5 @@
1
1
  import { t as authContext } from "../auth-3sGB0zJ1.mjs";
2
- import { o as withRuntimeEnv } from "../env-D5liuQYR.mjs";
2
+ import { o as withRuntimeEnv } from "../env-DMA3cXZt.mjs";
3
3
  //#region src/runtime/ws-server.ts
4
4
  function matchRoute(pattern, pathname) {
5
5
  const patternSegments = pattern.split("/").filter(Boolean);
@@ -153,27 +153,24 @@ function createRoomController(state, serverSchema) {
153
153
  }
154
154
  };
155
155
  }
156
- function createRoomContext(state, env, request, webSocket, stored, serverSchema) {
157
- return {
156
+ function createHookContext(definition, state, env, request, webSocket, stored) {
157
+ const serverSchema = definition.messages.server;
158
+ const base = {
158
159
  id: stored.roomId,
159
160
  params: stored.params,
160
161
  user: stored.user,
161
162
  request,
162
163
  env,
163
- storage: state.storage,
164
- room: createRoomController(state, serverSchema),
165
- connection: createConnection(webSocket, serverSchema)
164
+ storage: state.storage
166
165
  };
167
- }
168
- function createSocketContext(state, env, request, webSocket, stored, serverSchema) {
169
- return {
170
- id: stored.roomId,
171
- params: stored.params,
172
- user: stored.user,
173
- request,
174
- env,
175
- storage: state.storage,
176
- socket: createConnection(webSocket, serverSchema)
166
+ const connection = createConnection(webSocket, serverSchema);
167
+ return definition.__kind === "room" ? {
168
+ ...base,
169
+ room: createRoomController(state, serverSchema),
170
+ connection
171
+ } : {
172
+ ...base,
173
+ socket: connection
177
174
  };
178
175
  }
179
176
  function assertDefinition(definition) {
@@ -196,6 +193,9 @@ function createWebSocketDurableObject(definition, route, authRuntime, resolveAut
196
193
  fetch(request) {
197
194
  return withRuntimeEnv(this.env, () => this.handleFetch(request));
198
195
  }
196
+ context(request, webSocket, stored) {
197
+ return createHookContext(definition, this.state, this.env, request, webSocket, stored);
198
+ }
199
199
  async handleFetch(request) {
200
200
  const params = getRouteMatch(request, route) ?? {};
201
201
  const roomId = buildWebSocketInstanceId(instanceRoute, params);
@@ -213,23 +213,12 @@ function createWebSocketDurableObject(definition, route, authRuntime, resolveAut
213
213
  authState
214
214
  };
215
215
  setStoredConnection(server, stored);
216
- if (definition.__kind === "room") {
217
- const ctx = createRoomContext(this.state, this.env, request, server, stored, definition.messages.server);
218
- const decision = await withAuthState(authState, () => definition.onBeforeConnect?.(ctx));
219
- if (decision instanceof Response) return decision;
220
- } else {
221
- const ctx = createSocketContext(this.state, this.env, request, server, stored, definition.messages.server);
222
- const decision = await withAuthState(authState, () => definition.onBeforeConnect?.(ctx));
223
- if (decision instanceof Response) return decision;
224
- }
216
+ const beforeConnectCtx = this.context(request, server, stored);
217
+ const decision = await withAuthState(authState, () => definition.onBeforeConnect?.(beforeConnectCtx));
218
+ if (decision instanceof Response) return decision;
225
219
  this.state.acceptWebSocket(server);
226
- if (definition.__kind === "room") {
227
- const ctx = createRoomContext(this.state, this.env, request, server, stored, definition.messages.server);
228
- await withAuthState(authState, () => definition.onConnect?.(ctx));
229
- } else {
230
- const ctx = createSocketContext(this.state, this.env, request, server, stored, definition.messages.server);
231
- await withAuthState(authState, () => definition.onConnect?.(ctx));
232
- }
220
+ const connectCtx = this.context(request, server, stored);
221
+ await withAuthState(authState, () => definition.onConnect?.(connectCtx));
233
222
  return new Response(null, {
234
223
  status: 101,
235
224
  webSocket: client
@@ -243,13 +232,7 @@ function createWebSocketDurableObject(definition, route, authRuntime, resolveAut
243
232
  user,
244
233
  authState
245
234
  };
246
- if (definition.__kind === "room") {
247
- const fakeSocket = new WebSocketPair()[1];
248
- const ctx = createRoomContext(this.state, this.env, request, fakeSocket, stored, definition.messages.server);
249
- return withAuthState(authState, () => definition.onRequest(ctx));
250
- }
251
- const fakeSocket = new WebSocketPair()[1];
252
- const ctx = createSocketContext(this.state, this.env, request, fakeSocket, stored, definition.messages.server);
235
+ const ctx = this.context(request, new WebSocketPair()[1], stored);
253
236
  return withAuthState(authState, () => definition.onRequest(ctx));
254
237
  }
255
238
  webSocketMessage(webSocket, message) {
@@ -271,13 +254,8 @@ function createWebSocketDurableObject(definition, route, authRuntime, resolveAut
271
254
  return;
272
255
  }
273
256
  const request = new Request(`https://void.local${route.pattern}`);
274
- if (definition.__kind === "room") {
275
- const ctx = createRoomContext(this.state, this.env, request, webSocket, stored, definition.messages.server);
276
- await withAuthState(stored.authState ?? null, () => definition.onMessage?.(ctx, result.value));
277
- } else {
278
- const ctx = createSocketContext(this.state, this.env, request, webSocket, stored, definition.messages.server);
279
- await withAuthState(stored.authState ?? null, () => definition.onMessage?.(ctx, result.value));
280
- }
257
+ const ctx = this.context(request, webSocket, stored);
258
+ await withAuthState(stored.authState ?? null, () => definition.onMessage?.(ctx, result.value));
281
259
  }
282
260
  webSocketClose(webSocket, code, reason, wasClean) {
283
261
  return withRuntimeEnv(this.env, () => this.handleWebSocketClose(webSocket, code, reason, wasClean));
@@ -286,21 +264,12 @@ function createWebSocketDurableObject(definition, route, authRuntime, resolveAut
286
264
  completeWebSocketClose(webSocket, code, reason);
287
265
  const stored = getStoredConnection(webSocket);
288
266
  const request = new Request(`https://void.local${route.pattern}`);
289
- if (definition.__kind === "room") {
290
- const ctx = createRoomContext(this.state, this.env, request, webSocket, stored, definition.messages.server);
291
- await withAuthState(stored.authState ?? null, () => definition.onClose?.(ctx, {
292
- code,
293
- reason,
294
- wasClean
295
- }));
296
- } else {
297
- const ctx = createSocketContext(this.state, this.env, request, webSocket, stored, definition.messages.server);
298
- await withAuthState(stored.authState ?? null, () => definition.onClose?.(ctx, {
299
- code,
300
- reason,
301
- wasClean
302
- }));
303
- }
267
+ const ctx = this.context(request, webSocket, stored);
268
+ await withAuthState(stored.authState ?? null, () => definition.onClose?.(ctx, {
269
+ code,
270
+ reason,
271
+ wasClean
272
+ }));
304
273
  }
305
274
  }
306
275
  return VoidWebSocketDurableObject;
@@ -1,2 +1,2 @@
1
- import { a as RoomDefinition, c as VoidSocket, d as WebSocketConnection, f as WebSocketInstanceKey, h as defineWebSocket, i as RoomController, l as VoidSocketCloseEvent, m as defineRoom, n as ConnectCommonOptions, o as SocketContext, p as connect, r as RoomContext, s as SocketDefinition, t as AnyWebSocketDefinition, u as WebSocketBaseContext } from "../ws-C79j4aED.mjs";
1
+ import { a as RoomDefinition, c as VoidSocket, d as WebSocketConnection, f as WebSocketInstanceKey, h as defineWebSocket, i as RoomController, l as VoidSocketCloseEvent, m as defineRoom, n as ConnectCommonOptions, o as SocketContext, p as connect, r as RoomContext, s as SocketDefinition, t as AnyWebSocketDefinition, u as WebSocketBaseContext } from "../ws-CChrrAU-.mjs";
2
2
  export { AnyWebSocketDefinition, ConnectCommonOptions, RoomContext, RoomController, RoomDefinition, SocketContext, SocketDefinition, VoidSocket, VoidSocketCloseEvent, WebSocketBaseContext, WebSocketConnection, WebSocketInstanceKey, connect, defineRoom, defineWebSocket };
@@ -1,5 +1,5 @@
1
1
  import { t as isResourceName } from "../resource-name-C7LVpcRm.mjs";
2
- import { t as interpolateRouteParams } from "../route-url-CG7U-cRN.mjs";
2
+ import { t as interpolateRouteParams } from "../route-url-BjGv_KKY.mjs";
3
3
  //#region src/runtime/ws.ts
4
4
  function defineRoom(definition) {
5
5
  assertResourceName(definition.name);
@@ -59,8 +59,7 @@ function resolveEffectiveLayoutEntries(page, layouts, namedLayouts) {
59
59
  id: toLayoutId(resolved),
60
60
  definition: resolved
61
61
  };
62
- if (isExclusive) return [namedEntry];
63
- if (defaultChain.length === 0) return [namedEntry];
62
+ if (isExclusive || defaultChain.length === 0) return [namedEntry];
64
63
  const chain = [...defaultChain];
65
64
  chain[chain.length - 1] = namedEntry;
66
65
  return chain;
@@ -209,7 +208,7 @@ async function scanPages(root, options) {
209
208
  if (layoutsDirIdx !== -1) {
210
209
  if (layoutsDirIdx === segments.length - 2) namedLayouts.push({
211
210
  name: base,
212
- directory: segments.slice(0, layoutsDirIdx).join("/") || "",
211
+ directory: segments.slice(0, layoutsDirIdx).join("/"),
213
212
  filePath: file,
214
213
  island
215
214
  });
@@ -293,12 +292,8 @@ async function scanPages(root, options) {
293
292
  if (page.island) continue;
294
293
  const dir = dirname(page.componentPath);
295
294
  const segments = dir === "." ? [] : dir.split("/");
296
- let current = "";
297
- if (layouts.some((l) => l.directory === "" && l.island)) throw new Error(`pages: Regular page '${page.componentPath}' is under an island layout. Add a .island suffix.`);
298
- for (const seg of segments) {
299
- current = current ? `${current}/${seg}` : seg;
300
- if (layouts.some((l) => l.directory === current && l.island)) throw new Error(`pages: Regular page '${page.componentPath}' is under an island layout. Add a .island suffix.`);
301
- }
295
+ const ancestors = ["", ...segments.map((_, index) => segments.slice(0, index + 1).join("/"))];
296
+ if (layouts.some((l) => l.island && ancestors.includes(l.directory))) throw new Error(`pages: Regular page '${page.componentPath}' is under an island layout. Add a .island suffix.`);
302
297
  }
303
298
  for (const page of pages) {
304
299
  if (page.layout === void 0 || page.layout === false) continue;
@@ -317,12 +312,16 @@ const LEADING_SCRIPT_RE = /^<script\b[^>]*>[\s\S]*?<\/script>\s*\n?/;
317
312
  function markdownFrontmatter(source) {
318
313
  return source.replace(LEADING_SCRIPT_RE, "").match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1];
319
314
  }
315
+ /** Read a single-line `key: value` field, stripping surrounding quotes. */
316
+ function frontmatterField(yaml, key) {
317
+ return yaml.match(new RegExp(`^${key}:\\s*(.+)$`, "m"))?.[1]?.trim().replace(/^["']|["']$/g, "");
318
+ }
320
319
  /** Extract title and description from YAML frontmatter in markdown source. */
321
320
  function extractFrontmatterMeta(source) {
322
321
  const yaml = markdownFrontmatter(source);
323
322
  if (yaml === void 0) return;
324
- const title = yaml.match(/^title:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, "");
325
- const description = yaml.match(/^description:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, "");
323
+ const title = frontmatterField(yaml, "title");
324
+ const description = frontmatterField(yaml, "description");
326
325
  if (!title && !description) return;
327
326
  return {
328
327
  title,
@@ -333,10 +332,10 @@ function extractFrontmatterMeta(source) {
333
332
  function extractFrontmatterLayout(source) {
334
333
  const yaml = markdownFrontmatter(source);
335
334
  if (yaml === void 0) return;
336
- const value = yaml.match(/^layout:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, "");
335
+ const value = frontmatterField(yaml, "layout");
337
336
  if (!value) return;
338
337
  if (value === "false") return false;
339
338
  return value;
340
339
  }
341
340
  //#endregion
342
- export { resolveNamedLayout as a, resolveLayoutIds as i, resolveEffectiveLayoutChain as n, resolveLayoutChain as r, scanPages as t };
341
+ export { resolveNamedLayout as a, resolveLayoutIds as i, resolveEffectiveLayoutChain as n, toLayoutId as o, resolveLayoutChain as r, scanPages as t };
@@ -1,10 +1,10 @@
1
- import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
- import { c as getToken } from "./auth-D52yG7hl.mjs";
3
- import { _ as validateSecretValues } from "./env-validation-vBSQ8gw5.mjs";
4
- import { A as confirm, H as outro, L as log, O as cancel, U as password, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
5
- import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
6
- import { l as note, o as formatCount } from "./output-BvdaehtE.mjs";
7
- import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-BAm2aB6Q.mjs";
2
+ import { c as getToken } from "./auth-Dn2vw-SG.mjs";
3
+ import { A as confirm, H as outro, L as log, O as cancel, U as password, tt as isCancel } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, s as formatCount, u as note } from "./output-C50ag2r3.mjs";
5
+ import { _ as validateSecretValues } from "./env-validation-Dxdx_5wo.mjs";
6
+ import { r as PlatformClient } from "./client-DlDJuY0s.mjs";
7
+ import { i as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
8
8
  import { readFileSync } from "node:fs";
9
9
  //#region src/cli/secret.ts
10
10
  async function runSecretCommand(root, args) {
@@ -47,7 +47,7 @@ async function runSecretCommand(root, args) {
47
47
  value
48
48
  }]);
49
49
  await client.setSecret(projectId, args.name, value);
50
- outro(`Secret ${args.name} set.`);
50
+ printSuccess(`Secret ${args.name} set.`);
51
51
  return;
52
52
  }
53
53
  if (args.action === "sync") {
@@ -67,17 +67,17 @@ async function runSecretCommand(root, args) {
67
67
  }
68
68
  for (const s of secrets) {
69
69
  await client.setSecret(projectId, s.name, s.value);
70
- log.success(`Set ${s.name}`);
70
+ log.step(`Set ${s.name}`);
71
71
  }
72
- outro(`Synced ${formatCount(secrets.length, "secret")}.`);
72
+ printSuccess(`Synced ${formatCount(secrets.length, "secret")}.`);
73
73
  return;
74
74
  }
75
75
  await client.deleteSecret(projectId, args.name);
76
- outro(`Secret ${args.name} deleted.`);
76
+ printSuccess(`Secret ${args.name} deleted.`);
77
77
  }
78
78
  async function runCloudflareSecretCommand(root, args) {
79
79
  if (args.projectName) throw new Error("secret: --project selects a Void platform project and is not used for direct Cloudflare apps.");
80
- const { deleteCloudflareSecret, listCloudflareSecrets, putCloudflareSecret, resolveCloudflareOperationContext, syncCloudflareSecrets } = await import("./cloudflare-operations-DoQrVHAt.mjs");
80
+ const { deleteCloudflareSecret, listCloudflareSecrets, putCloudflareSecret, resolveCloudflareOperationContext, syncCloudflareSecrets } = await import("./cloudflare-operations-BlYLlowZ.mjs");
81
81
  const context = resolveCloudflareOperationContext(root);
82
82
  if (args.action === "list") {
83
83
  const secrets = await listCloudflareSecrets(context);
@@ -96,7 +96,7 @@ async function runCloudflareSecretCommand(root, args) {
96
96
  value
97
97
  }]);
98
98
  await putCloudflareSecret(context, args.name, value);
99
- outro(`Secret ${args.name} set.`);
99
+ printSuccess(`Secret ${args.name} set.`);
100
100
  return;
101
101
  }
102
102
  if (args.action === "sync") {
@@ -115,11 +115,11 @@ async function runCloudflareSecretCommand(root, args) {
115
115
  process.exit(0);
116
116
  }
117
117
  await syncCloudflareSecrets(context, secrets);
118
- outro(`Synced ${formatCount(secrets.length, "secret")}.`);
118
+ printSuccess(`Synced ${formatCount(secrets.length, "secret")}.`);
119
119
  return;
120
120
  }
121
121
  await deleteCloudflareSecret(context, args.name);
122
- outro(`Secret ${args.name} deleted.`);
122
+ printSuccess(`Secret ${args.name} deleted.`);
123
123
  }
124
124
  const SECRET_KEY_RE = /^[A-Z][A-Z0-9_]*$/;
125
125
  function parseDotenvFile(filePath) {
@@ -1,5 +1,5 @@
1
1
  import { a as join, l as relative } from "./dist-BVqXeR_h.mjs";
2
- import { L as log } from "./prompts-6OSVA7DJ.mjs";
2
+ import { L as log } from "./dist-D3m88sjf.mjs";
3
3
  import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, readdirSync, readlinkSync, symlinkSync } from "node:fs";
5
5
  //#region src/cli/skills.ts
@@ -42,7 +42,7 @@ function linkSkills(root, skillsDir, skills, agentSkillsDir) {
42
42
  continue;
43
43
  }
44
44
  symlinkSync(relativeTarget, linkPath, process.platform === "win32" ? "junction" : "dir");
45
- log.success(` ${skill.name} — linked`);
45
+ log.step(` ${skill.name} — linked`);
46
46
  linked++;
47
47
  }
48
48
  return linked;
@@ -150,7 +150,7 @@ function assertRetry(value) {
150
150
  if (!Number.isInteger(value) || value < 0) throw new Error("sse: retry must be a non-negative integer.");
151
151
  }
152
152
  function isBinaryData(data) {
153
- return data instanceof ArrayBuffer || ArrayBuffer.isView(data) || typeof Blob !== "undefined" && data instanceof Blob || typeof File !== "undefined" && data instanceof File;
153
+ return data instanceof ArrayBuffer || ArrayBuffer.isView(data) || typeof Blob !== "undefined" && data instanceof Blob;
154
154
  }
155
155
  function serializeData(data) {
156
156
  if (typeof data === "string") return data;
@@ -1,5 +1,5 @@
1
- import { $ as wrapTextWithPrefix, G as promptTitle, M as getGuide, V as optionText, b as S_RADIO_ACTIVE, d as S_CHECKBOX_SELECTED, i as S_BAR_END, it as wrapAnsi, j as formatInstructionFooter, n as SELECT_INSTRUCTIONS, r as S_BAR, t as MULTISELECT_INSTRUCTIONS, u as S_CHECKBOX_INACTIVE, w as S_STEP_SUBMIT } from "./prompts-6OSVA7DJ.mjs";
2
- import { c as import_picocolors } from "./output-BvdaehtE.mjs";
1
+ import { $ as wrapTextWithPrefix, G as promptTitle, M as getGuide, V as optionText, b as S_RADIO_ACTIVE, d as S_CHECKBOX_SELECTED, i as S_BAR_END, it as wrapAnsi, j as formatInstructionFooter, n as SELECT_INSTRUCTIONS, r as S_BAR, t as MULTISELECT_INSTRUCTIONS, u as S_CHECKBOX_INACTIVE, w as S_STEP_SUBMIT } from "./dist-D3m88sjf.mjs";
2
+ import { l as import_picocolors } from "./output-C50ag2r3.mjs";
3
3
  //#region src/cli/subcommand-prompt.ts
4
4
  function promptSubcommand(command, subcommands) {
5
5
  return new Promise((resolve) => {
@@ -4,8 +4,6 @@ type TsconfigHook = (config: Tsconfig) => Tsconfig | void;
4
4
  export type VoidSvelteKitTsconfigOptions = {
5
5
  /** Project root. Defaults to process.cwd(). */
6
6
  root?: string;
7
- /** @deprecated Generated paths no longer depend on SvelteKit's output directory. */
8
- outDir?: string;
9
7
  };
10
8
  /**
11
9
  * Merge Void's generated tsconfig fragment into SvelteKit's generated
@@ -0,0 +1,32 @@
1
+ //#region src/cli/terminal-log-text.ts
2
+ const TERMINAL_CONTROL = /\u001b\[[0-?]*[ -/]*[@-~]|\u001b\][^\u0000-\u001f\u007f-\u009f]*(?:\u0007|\u001b\\)|[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g;
3
+ const SGR = /^\u001b\[[0-9;:]*m$/;
4
+ /**
5
+ * Make app log text safe to print to a terminal. App logs often echo request
6
+ * data from anonymous visitors, so escape sequences in them must not reach the
7
+ * terminal as commands (clipboard writes, hyperlinks, screen clears, cursor
8
+ * moves or carriage-return overwrites).
9
+ *
10
+ * SGR color codes, newlines and tabs are kept so ordinary colored or
11
+ * multi-line logs read the same. A text that keeps any SGR code ends with a
12
+ * reset, so styles such as conceal cannot hide the lines printed after it.
13
+ * Every other complete CSI or OSC sequence is removed whole, so a hyperlink
14
+ * shows only its visible text and a line clear leaves no stray "[K". Every
15
+ * other C0/C1 control character is dropped on its own; an escape sequence that
16
+ * is incomplete, such as an OSC with no terminator, loses only its control
17
+ * characters and the rest prints as plain text instead of being swallowed.
18
+ *
19
+ * Keep this module free of imports: the Cloudflare operation process is a
20
+ * separate bundle entry that must stay small.
21
+ */
22
+ function sanitizeTerminalLogText(value) {
23
+ let keptStyle = false;
24
+ const text = value.replace(TERMINAL_CONTROL, (match) => {
25
+ if (!SGR.test(match)) return "";
26
+ keptStyle = true;
27
+ return match;
28
+ });
29
+ return keptStyle ? `${text}\u001b[0m` : text;
30
+ }
31
+ //#endregion
32
+ export { sanitizeTerminalLogText as t };
@@ -0,0 +1,2 @@
1
+ import { i as validateMigrations } from "./validate-C9qJArv7.mjs";
2
+ export { validateMigrations };
@@ -1,8 +1,7 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readJournal, r as stripSqlExt } from "./collect-DiTn9yr6.mjs";
3
- import { t as DESTRUCTIVE_PRAGMA } from "./plan-CJGEeTEI.mjs";
3
+ import { i as getExecutableSql, t as DESTRUCTIVE_PRAGMA } from "./plan-BhLO2p4w.mjs";
4
4
  import { existsSync, readdirSync } from "node:fs";
5
- import { tokenizeSql } from "@void/deploy-core";
6
5
  //#region src/migrations/validate.ts
7
6
  /**
8
7
  * Destructive SQL patterns that are rejected unless the migration
@@ -50,11 +49,7 @@ function hasUnboundedWrite(statement) {
50
49
  * Check if a SQL migration contains destructive operations.
51
50
  */
52
51
  function isDestructive(sql) {
53
- const normalized = sql.replace(/\r\n?/g, "\n");
54
- let executable = "";
55
- for (const segment of tokenizeSql(normalized)) if (segment.kind === "sql") executable += normalized.slice(segment.start, segment.end);
56
- else executable += " ".repeat(segment.end - segment.start);
57
- return splitExecutableStatements(executable).some((statement) => {
52
+ return splitExecutableStatements(getExecutableSql(sql.replace(/\r\n?/g, "\n"))).some((statement) => {
58
53
  return DESTRUCTIVE_PATTERNS.some((pattern) => pattern.test(statement)) || hasUnboundedWrite(statement);
59
54
  });
60
55
  }
@@ -102,27 +97,13 @@ function listDrizzleArtifacts(migrationsDir) {
102
97
  * Assert that every `.sql` file under `migrationsDir` has a matching entry
103
98
  * in `meta/_journal.json`, and vice versa.
104
99
  *
105
- * Drift is a silent footgun: the local/remote runners apply files directly
106
- * from disk, but `drizzle-kit generate` only sees what's in the journal.
107
- * An orphan file created by hand (or by a botched scaffold/merge) gets
108
- * applied to D1 without Drizzle ever acknowledging it, and a failed
109
- * deploy can leave the database in a state that is impossible to recover
110
- * from without manual SQL edits.
100
+ * The runners apply files from disk, but `drizzle-kit generate` only sees the
101
+ * journal, so an orphan file would reach D1 without Drizzle knowing about it.
111
102
  *
112
- * A missing journal is NOT a drift error. The drift check is a diff
113
- * between disk and `meta/_journal.json`; with no journal, there is nothing
114
- * to diff against. Bare-legacy projects — hand-written `.sql` files with no
115
- * `db/schema.ts`, no drizzle-kit, no `meta/` directory — worked long
116
- * before this check existed, and the local/remote runners still track
117
- * applied migrations by filename via `_void_migrations`. Gating those
118
- * projects here would break `void deploy`, `void db migrate`, `void db
119
- * reset`, and `void db status` for a valid path with no migration path
120
- * forward (they cannot run `void db generate` because it requires
121
- * `db/schema.ts`). We skip the check silently and let the filename-based
122
- * runners take over.
123
- *
124
- * Throws a user-facing error when any mismatch is detected between the
125
- * journal and disk. Returns silently otherwise.
103
+ * A missing journal (with no other drizzle-kit artifacts) is not drift:
104
+ * hand-written `.sql` projects without `db/schema.ts` are supported and are
105
+ * tracked by filename in `_void_migrations`. They cannot run
106
+ * `void db generate`, so the check is skipped for them.
126
107
  */
127
108
  function assertJournalCoherence(migrationsDir, collected) {
128
109
  const journal = readJournal(migrationsDir);
@@ -162,7 +143,7 @@ function assertJournalCoherence(migrationsDir, collected) {
162
143
  const journalTags = new Set(journal.entries.map((e) => e.tag));
163
144
  const collectedTags = new Set(collected.map((m) => stripSqlExt(m.name)));
164
145
  const orphans = collected.map((m) => m.name).filter((name) => !journalTags.has(stripSqlExt(name)));
165
- const missing = journal.entries.map((e) => `${e.tag}.sql`).filter((file) => !collectedTags.has(stripSqlExt(file)));
146
+ const missing = journal.entries.filter((e) => !collectedTags.has(e.tag)).map((e) => `${e.tag}.sql`);
166
147
  if (orphans.length === 0 && missing.length === 0) return;
167
148
  const lines = ["Migration drift detected between db/migrations/ and db/migrations/meta/_journal.json."];
168
149
  if (orphans.length > 0) {
@@ -1,13 +1,3 @@
1
- //#region src/pages/validation-error.ts
2
- var ValidationError = class extends Error {
3
- errors;
4
- constructor(errors) {
5
- super("Validation failed");
6
- this.name = "ValidationError";
7
- this.errors = errors;
8
- }
9
- };
10
- //#endregion
11
1
  //#region src/pages/defer.ts
12
2
  const DEFERRED = Symbol("deferred");
13
3
  function defer(groupOrResolver, maybeResolver) {
@@ -46,4 +36,14 @@ function separateDeferred(props) {
46
36
  };
47
37
  }
48
38
  //#endregion
49
- export { ValidationError as i, defer as n, separateDeferred as r, DEFERRED as t };
39
+ //#region src/pages/validation-error.ts
40
+ var ValidationError = class extends Error {
41
+ errors;
42
+ constructor(errors) {
43
+ super("Validation failed");
44
+ this.name = "ValidationError";
45
+ this.errors = errors;
46
+ }
47
+ };
48
+ //#endregion
49
+ export { separateDeferred as i, DEFERRED as n, defer as r, ValidationError as t };