void 0.20.2 → 0.21.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 (310) hide show
  1. package/README.md +2 -2
  2. package/dist/agents-gni4eqBu.mjs +111 -0
  3. package/dist/auth-3sGB0zJ1.mjs +22 -0
  4. package/dist/{auth-DPl6kck4.mjs → auth-B9_D6ygs.mjs} +6 -241
  5. package/dist/auth-CAw7zHqj.mjs +2 -0
  6. package/dist/auth-client-BWBT8HLp.mjs +6 -0
  7. package/dist/auth-client-Bawdj38n.d.mts +7 -0
  8. package/dist/auth-client-react-7GFffu8R.d.mts +7 -0
  9. package/dist/auth-client-react-CMLwT2xI.mjs +6 -0
  10. package/dist/auth-client-solid-DyTFL4cq.d.mts +7 -0
  11. package/dist/auth-client-solid-UoreJWZG.mjs +6 -0
  12. package/dist/auth-client-svelte-Cv_WvrRk.mjs +6 -0
  13. package/dist/auth-client-svelte-zetW0KIH.d.mts +7 -0
  14. package/dist/auth-client-vue-CFk7Xbv3.mjs +6 -0
  15. package/dist/auth-client-vue-bChShbQP.d.mts +7 -0
  16. package/dist/{auth-cmd-gniL2fNt.mjs → auth-cmd-MkBG2u1f.mjs} +5 -5
  17. package/dist/{auth-link-NZdjCmSc.mjs → auth-link-Devmv96E.mjs} +5 -5
  18. package/dist/{better-auth-shared-DSCeohOK.d.mts → better-auth-shared-BoVwA5Vm.d.mts} +1 -6
  19. package/dist/{better-auth-shared-CYw1T3k4.mjs → better-auth-shared-syGYYmnY.mjs} +1 -1
  20. package/dist/{build-cmd-sI18tX_O.mjs → build-cmd-DsBGwtfs.mjs} +6 -4
  21. package/dist/{cache-IHn5MwBC.mjs → cache-BMw8eMyF.mjs} +6 -4
  22. package/dist/{cancel-deploy-C5qTOdLi.mjs → cancel-deploy-B3_s9NIN.mjs} +5 -3
  23. package/dist/cf-access-rAZxzMkL.mjs +181 -0
  24. package/dist/cf-build-output-CTdlo6Rt.mjs +520 -0
  25. package/dist/cli/cf-compat.d.mts +1 -0
  26. package/dist/cli/cf-compat.mjs +934 -0
  27. package/dist/cli/cli.mjs +61 -38
  28. package/dist/cli/env-schema-probe.mjs +3 -3
  29. package/dist/client-DAAivdid.mjs +2 -0
  30. package/dist/{client-dHfSJvAN.mjs → client-PdAJ-F0t.mjs} +148 -89
  31. package/dist/{cloudflare-auth-6M5llVPC.mjs → cloudflare-auth-BCmTc1X_.mjs} +13 -44
  32. package/dist/{cloudflare-cmd-4RPGN3KB.mjs → cloudflare-cmd-D6PrKn7o.mjs} +4 -7
  33. package/dist/{cloudflare-connect-t1UU5svD.mjs → cloudflare-connect-DloREDlc.mjs} +6 -6
  34. package/dist/cloudflare-operations-BHNJVDbN.mjs +2 -0
  35. package/dist/{cloudflare-operations-BzWnlC1_.mjs → cloudflare-operations-CPEdHYhM.mjs} +37 -39
  36. package/dist/cloudflare-user-output-Q-k0QoNQ.mjs +20 -0
  37. package/dist/collect-DAUItMDS.mjs +2 -0
  38. package/dist/collect-DXHNWHcT.mjs +48 -0
  39. package/dist/config--T87TD8T.mjs +2 -0
  40. package/dist/{config-NOG_U1aK.mjs → config-BSe70f4T.mjs} +4 -6
  41. package/dist/config-DDIFxQYx.mjs +2 -0
  42. package/dist/{config-uNGuFsI2.mjs → config-Dxr6cTXn.mjs} +22 -37
  43. package/dist/config-DywxBLQC.d.mts +185 -0
  44. package/dist/config-entry.d.mts +6 -0
  45. package/dist/config-entry.mjs +7 -0
  46. package/dist/config-uP7ZDtVZ.mjs +21 -0
  47. package/dist/config-write-y3CBI_ux.mjs +60 -0
  48. package/dist/{connect-Bfk31O_8.mjs → connect-BvC9kolB.mjs} +8 -6
  49. package/dist/{create-project-Bk9Z0-Jg.mjs → create-project-C9lQhRzj.mjs} +9 -25
  50. package/dist/create-project-CI-17RVJ.mjs +2 -0
  51. package/dist/database-provider-Cx525bwX.mjs +6 -0
  52. package/dist/database-provider.mjs +1 -5
  53. package/dist/{db-BkRoptAt.mjs → db-R7IQgOv5.mjs} +48 -44
  54. package/dist/{delete-DouASY9P.mjs → delete-CghI_NXn.mjs} +6 -4
  55. package/dist/deploy-CYPymbtG.mjs +2 -0
  56. package/dist/{deploy-DTaWUS1S.mjs → deploy-H968Lo4T.mjs} +765 -197
  57. package/dist/discover-BBzDZe_o.mjs +2 -0
  58. package/dist/{discover-xvfrgJeo.mjs → discover-C4O6YxVS.mjs} +3 -8
  59. package/dist/{dist-BrsS7cai.mjs → dist-4WkAWhWx.mjs} +1 -15
  60. package/dist/{dist-m40_XgNh.mjs → dist-Bn8Kodjp.mjs} +1 -1
  61. package/dist/dist-C5fND3R0.mjs +2 -0
  62. package/dist/dist-D7-nEOXi.mjs +2 -0
  63. package/dist/{output-B0cfNSx5.mjs → dist-Dn6nn2IU.mjs} +3 -926
  64. package/dist/{domain-1RhhOVrC.mjs → domain-CITt8lC-.mjs} +7 -5
  65. package/dist/{route-types-Da-DpyUp.mjs → drizzle-Beb2Am5S.mjs} +1 -280
  66. package/dist/{email-Ce6SQq-i.mjs → email-C5kaZXzJ.mjs} +2 -2
  67. package/dist/{email-C-lGh51B.mjs → email-_8VmyX7V.mjs} +14 -12
  68. package/dist/{entry-DU3oDoQ3.mjs → entry-DdRFGK0y.mjs} +2 -2
  69. package/dist/{env-DJHsPE7Z.mjs → env-DV4r3nHz.mjs} +9 -7
  70. package/dist/{env-DBKmK4vc.mjs → env-DX_v-Q-v.mjs} +1 -1
  71. package/dist/env-Yz4HcvHs.mjs +78 -0
  72. package/dist/env-helpers--wFmQ_5Q.mjs +136 -0
  73. package/dist/{env-types-BNPhro-M.mjs → env-types-CWDtqHgw.mjs} +6 -2
  74. package/dist/{env-validation-CF6KvTRf.mjs → env-validation-BsFEXps5.mjs} +19 -28
  75. package/dist/env-validation-DIDGM7h4.mjs +2 -0
  76. package/dist/fetch-CXDChK7B.mjs +18 -0
  77. package/dist/fetch-_SeGZao9.d.mts +57 -0
  78. package/dist/fetch-stream-AOByI7Ki.mjs +81 -0
  79. package/dist/fetch-stream-Bjf0hoZb.d.mts +49 -0
  80. package/dist/gen-BBiIZw6g.mjs +2 -0
  81. package/dist/{gen-B_wPnVTK.mjs → gen-CFOEEc-t.mjs} +13 -11
  82. package/dist/{generate-RTK8_kK1.mjs → generate-C0VY6RVf.mjs} +2 -2
  83. package/dist/{github-cmd-PW7ZnWTp.mjs → github-cmd-jYjha2LO.mjs} +18 -22
  84. package/dist/{handler-D1hLsObx.d.mts → handler-BXJTXd02.d.mts} +6 -1
  85. package/dist/handler-DghKr6dU.mjs +150 -0
  86. package/dist/head-D_QRR5Yd.mjs +112 -0
  87. package/dist/head-client-DzmJGN4C.mjs +90 -0
  88. package/dist/{headers-BAHwgHdW.mjs → headers-B_HBMgi0.mjs} +2 -2
  89. package/dist/{help-CwOX-zmI.mjs → help-C46mnlUS.mjs} +17 -12
  90. package/dist/help-CS_nAsWu.mjs +2 -0
  91. package/dist/index.d.mts +2 -20
  92. package/dist/index.mjs +116 -60
  93. package/dist/{init-BWZ7q5Z4.mjs → init-CSXmvxKu.mjs} +49 -50
  94. package/dist/{link-Rmvu2Wl_.mjs → link-DxMOALXk.mjs} +7 -5
  95. package/dist/{list-DEE2S6mY.mjs → list-0wQs0oYg.mjs} +7 -5
  96. package/dist/live-CB1y5IuC.mjs +411 -0
  97. package/dist/live-CKiJilLr.d.mts +105 -0
  98. package/dist/local-d1-DzykTWY8.mjs +104 -0
  99. package/dist/{login-Uvferzmm.mjs → login-CKk5NX4d.mjs} +6 -11
  100. package/dist/login-Ch9cgWRF.mjs +2 -0
  101. package/dist/{logs-27FenuiC.mjs → logs-hxWBSoej.mjs} +6 -4
  102. package/dist/migrate-CLty4mZR.mjs +2 -0
  103. package/dist/migrate-DcW8F2W8.mjs +285 -0
  104. package/dist/migration-handler-DM4clYj5.d.mts +51 -0
  105. package/dist/{neon-DHwd2zvC.mjs → neon-n74ta1Pr.mjs} +1 -1
  106. package/dist/{node-Ez5KW5rn.mjs → node-Cupyf7-s.mjs} +6 -6
  107. package/dist/{operator-auth-B3e08unv.mjs → operator-auth-BkVgJqv-.mjs} +2 -2
  108. package/dist/{operator-client-LUZnlnYk.mjs → operator-client-A0iex2yi.mjs} +2 -1
  109. package/dist/{operator-cmd-CjOTmAYE.mjs → operator-cmd-BEUYhaHB.mjs} +6 -6
  110. package/dist/output-urU86XeT.mjs +146 -0
  111. package/dist/{package-json-CPoWX79C.mjs → package-json-iCbMg5XF.mjs} +1 -1
  112. package/dist/pages/client.d.mts +5 -2
  113. package/dist/pages/client.mjs +5 -3
  114. package/dist/pages/head-client.mjs +1 -89
  115. package/dist/pages/head.mjs +1 -111
  116. package/dist/pages/index.d.mts +2 -3
  117. package/dist/pages/index.mjs +7 -7
  118. package/dist/pages/islands-plugin.mjs +2 -2
  119. package/dist/pages/prefetch.d.mts +2 -30
  120. package/dist/pages/prefetch.mjs +1 -89
  121. package/dist/pages/protocol.d.mts +2 -2
  122. package/dist/pages/protocol.mjs +3 -3
  123. package/dist/pages/serialize.d.mts +2 -9
  124. package/dist/pages/serialize.mjs +1 -13
  125. package/dist/plan-BEZ8VJW0.mjs +256 -0
  126. package/dist/plan-DpuOr14e.mjs +2 -0
  127. package/dist/{platform-auth-config-DrbQXXiW.mjs → platform-auth-config-Df6yVw-e.mjs} +6 -6
  128. package/dist/{platform-auth-protection-Bhtvp0B_.mjs → platform-auth-protection-Jb0yftay.mjs} +7 -5
  129. package/dist/{platform-auth-recovery-CeOKGVeJ.mjs → platform-auth-recovery-DmRyIfW0.mjs} +6 -5
  130. package/dist/platform-cmd-C9Vt7m-d.mjs +2 -0
  131. package/dist/{platform-cmd-BFhieCdV.mjs → platform-cmd-DRxCOTwy.mjs} +8 -5
  132. package/dist/{platform-domain-C74PULqV.mjs → platform-domain-IjiXgrXJ.mjs} +4 -3
  133. package/dist/{platform-lifecycle-BwAIgz-t.mjs → platform-lifecycle-BquAaU-5.mjs} +263 -56
  134. package/dist/platform-lifecycle-CuJIZNvA.mjs +2 -0
  135. package/dist/{platform-management-COogu_Se.mjs → platform-management-CCQKGsq4.mjs} +12 -7
  136. package/dist/platform-management-Cgyed0WY.mjs +2 -0
  137. package/dist/{platform-recovery-ewqLefp1.mjs → platform-recovery-DS8ih1SW.mjs} +3 -3
  138. package/dist/platform-registry-BJbgZLS1.mjs +431 -0
  139. package/dist/{plugin-inference-BDRfZngg.mjs → plugin-inference-DsvtJLll.mjs} +4 -4
  140. package/dist/prefetch-Bsc_Pb6c.mjs +90 -0
  141. package/dist/prefetch-Ce6la4EI.d.mts +31 -0
  142. package/dist/{prepare-blNRQvQl.mjs → prepare-CaUxODOU.mjs} +3 -2
  143. package/dist/prepare-D4CkM3_v.mjs +2 -0
  144. package/dist/{prepare-CtDJjoOj.mjs → prepare-pcWcxSCh.mjs} +13 -11
  145. package/dist/prerender-render-Cf_WDE9W.mjs +111 -0
  146. package/dist/prerender-render.mjs +1 -110
  147. package/dist/{preset-lAy0B0BQ.mjs → preset-Dowh9tTt.mjs} +16 -118
  148. package/dist/project-BEBFDFLz.mjs +2 -0
  149. package/dist/project-CWNIPoXc.mjs +209 -0
  150. package/dist/{project-cmd-DmZK9Hxf.mjs → project-cmd-2lN--YAX.mjs} +18 -16
  151. package/dist/{project-paths-SK8nMHPp.mjs → project-paths-CKQ-Q5JS.mjs} +47 -14
  152. package/dist/project-slug-23TpquG4.mjs +8 -0
  153. package/dist/project-slug-DofjTFd-.mjs +2 -0
  154. package/dist/{project-team-D8jOJMUJ.mjs → project-team-Dapn9HZn.mjs} +9 -5
  155. package/dist/{project-token-DA34bf-C.mjs → project-token-C90v9SJK.mjs} +6 -4
  156. package/dist/{project-tsconfig-Ql2XsSQp.mjs → project-tsconfig-CwfqUnVp.mjs} +2 -2
  157. package/dist/{protocol-C-pqYJjE.d.mts → protocol-ZH3jP4a7.d.mts} +1 -1
  158. package/dist/providers-BNKRacMr.d.mts +7 -0
  159. package/dist/provision-CNgEBkVA.mjs +3 -0
  160. package/dist/{provision-CSJOjjQk.mjs → provision-Cck2m3jJ.mjs} +11 -25
  161. package/dist/queues-BWKt1Xo4.d.mts +7 -0
  162. package/dist/{requests-CUExwGQQ.mjs → requests-CzX46I0i.mjs} +5 -3
  163. package/dist/resolve-project-BTotl8Nn.mjs +2 -0
  164. package/dist/{resolve-project--Vxawf7z.mjs → resolve-project-Xvis70DG.mjs} +2 -8
  165. package/dist/response-Tn7rU0MV.mjs +30 -0
  166. package/dist/{rollback-CDNGU1gr.mjs → rollback-BEeyc73H.mjs} +6 -4
  167. package/dist/{rolldown-runtime-rQ84J-ij.mjs → rolldown-runtime-DXIUcv95.mjs} +1 -10
  168. package/dist/route-types-Id82-veQ.mjs +280 -0
  169. package/dist/{local-d1-D2I6Ox5F.mjs → runner-BGVsGgkb.mjs} +6 -114
  170. package/dist/runner-CQs_cDSG.mjs +2 -0
  171. package/dist/runner-mysql-1o47achK.mjs +2 -0
  172. package/dist/{runner-mysql-7BPUNGmL.mjs → runner-mysql-BhwMk2Bm.mjs} +2 -9
  173. package/dist/{runner-pg-BkEza-dX.mjs → runner-pg-CJ_JeGF6.mjs} +2 -9
  174. package/dist/runner-pg-D7z01mQS.mjs +2 -0
  175. package/dist/runtime/ai.mjs +1 -1
  176. package/dist/runtime/auth-client-react.d.mts +2 -6
  177. package/dist/runtime/auth-client-react.mjs +1 -5
  178. package/dist/runtime/auth-client-solid.d.mts +2 -6
  179. package/dist/runtime/auth-client-solid.mjs +1 -5
  180. package/dist/runtime/auth-client-svelte.d.mts +2 -6
  181. package/dist/runtime/auth-client-svelte.mjs +1 -5
  182. package/dist/runtime/auth-client-vue.d.mts +2 -6
  183. package/dist/runtime/auth-client-vue.mjs +1 -5
  184. package/dist/runtime/auth-client.d.mts +2 -6
  185. package/dist/runtime/auth-client.mjs +1 -5
  186. package/dist/runtime/auth.mjs +1 -21
  187. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  188. package/dist/runtime/better-auth-mysql.mjs +1 -1
  189. package/dist/runtime/better-auth-pg.d.mts +1 -1
  190. package/dist/runtime/better-auth-pg.mjs +1 -1
  191. package/dist/runtime/better-auth.d.mts +1 -1
  192. package/dist/runtime/better-auth.mjs +1 -1
  193. package/dist/runtime/client-react.d.mts +3 -3
  194. package/dist/runtime/client-react.mjs +3 -3
  195. package/dist/runtime/client-solid.d.mts +3 -3
  196. package/dist/runtime/client-solid.mjs +3 -3
  197. package/dist/runtime/client-svelte.d.mts +3 -3
  198. package/dist/runtime/client-svelte.mjs +3 -3
  199. package/dist/runtime/client-vue.d.mts +3 -3
  200. package/dist/runtime/client-vue.mjs +3 -3
  201. package/dist/runtime/client.d.mts +3 -3
  202. package/dist/runtime/client.mjs +3 -3
  203. package/dist/runtime/db.mjs +1 -1
  204. package/dist/runtime/durable.mjs +1 -1
  205. package/dist/runtime/email/testing.mjs +1 -1
  206. package/dist/runtime/env-helpers.mjs +1 -135
  207. package/dist/runtime/env-public-client.mjs +1 -1
  208. package/dist/runtime/env-public.mjs +2 -2
  209. package/dist/runtime/env.mjs +1 -77
  210. package/dist/runtime/fetch-stream.d.mts +2 -49
  211. package/dist/runtime/fetch-stream.mjs +2 -80
  212. package/dist/runtime/fetch.d.mts +2 -57
  213. package/dist/runtime/fetch.mjs +2 -17
  214. package/dist/runtime/handler.d.mts +1 -1
  215. package/dist/runtime/handler.mjs +1 -149
  216. package/dist/runtime/kv.mjs +1 -1
  217. package/dist/runtime/live-client.d.mts +1 -1
  218. package/dist/runtime/live-server.mjs +2 -2
  219. package/dist/runtime/live.d.mts +2 -104
  220. package/dist/runtime/live.mjs +1 -410
  221. package/dist/runtime/migration-handler-mysql.d.mts +1 -1
  222. package/dist/runtime/migration-handler-pg.d.mts +1 -1
  223. package/dist/runtime/migration-handler.d.mts +2 -50
  224. package/dist/runtime/queues.d.mts +2 -6
  225. package/dist/runtime/queues.mjs +1 -1
  226. package/dist/runtime/remote/index.mjs +49 -8
  227. package/dist/runtime/response.mjs +1 -29
  228. package/dist/runtime/sandbox.d.mts +4 -56
  229. package/dist/runtime/sandbox.mjs +82 -221
  230. package/dist/runtime/sse.mjs +1 -171
  231. package/dist/runtime/storage.mjs +1 -1
  232. package/dist/runtime/validator.d.mts +1 -1
  233. package/dist/runtime/validator.mjs +1 -71
  234. package/dist/runtime/ws-server.d.mts +2 -2
  235. package/dist/runtime/ws-server.mjs +2 -2
  236. package/dist/runtime/ws.d.mts +2 -121
  237. package/dist/{scan-CpK-57ug.mjs → scan-DJbooZm2.mjs} +3 -3
  238. package/dist/{scan-BMH4rzlv.mjs → scan-DdDvRCU1.mjs} +8 -26
  239. package/dist/{secret-Bzzi2e9E.mjs → secret-wnTel5Yw.mjs} +8 -6
  240. package/dist/serialize-BPvnNQuA.mjs +14 -0
  241. package/dist/serialize-CfSwWfF2.d.mts +10 -0
  242. package/dist/{skills-C0RvGjeE.mjs → skills-B-690E7h.mjs} +3 -2
  243. package/dist/sse-BaC1jXko.mjs +172 -0
  244. package/dist/{subcommand-prompt-Bmyn5Rlc.mjs → subcommand-prompt-Gj3VzLIh.mjs} +2 -1
  245. package/dist/sveltekit.d.mts +2 -1
  246. package/dist/sveltekit.mjs +3 -2
  247. package/dist/validate-DqJ33oHj.mjs +2 -0
  248. package/dist/validate-qNhV00PD.mjs +180 -0
  249. package/dist/validator-BTOu0fB0.mjs +72 -0
  250. package/dist/{wrangler--imS8n0d.mjs → wrangler-D01qs6VB.mjs} +259 -71
  251. package/dist/ws-BwcqizuH.d.mts +122 -0
  252. package/dist/{yarn-pnp-DxSInkzL.mjs → yarn-pnp-CVEc3gE7.mjs} +1 -1
  253. package/package.json +19 -8
  254. package/skills/void/SKILL.md +7 -5
  255. package/skills/void/docs/guide/ai.md +3 -3
  256. package/skills/void/docs/guide/app-types.md +12 -11
  257. package/skills/void/docs/guide/auth.md +2 -2
  258. package/skills/void/docs/guide/database/d1.md +1 -1
  259. package/skills/void/docs/guide/database/mysql.md +1 -1
  260. package/skills/void/docs/guide/database/postgresql.md +3 -3
  261. package/skills/void/docs/guide/deployment.md +16 -16
  262. package/skills/void/docs/guide/durable-state.md +2 -2
  263. package/skills/void/docs/guide/edge/headers.md +3 -3
  264. package/skills/void/docs/guide/edge/prerendering.md +1 -1
  265. package/skills/void/docs/guide/edge/redirects.md +4 -4
  266. package/skills/void/docs/guide/edge/revalidation.md +6 -6
  267. package/skills/void/docs/guide/edge/rewrites.md +28 -27
  268. package/skills/void/docs/guide/edge/static-assets.md +1 -1
  269. package/skills/void/docs/guide/email.md +27 -25
  270. package/skills/void/docs/guide/env-migration.md +1 -1
  271. package/skills/void/docs/guide/index.md +1 -1
  272. package/skills/void/docs/guide/pages-routing/head.md +1 -1
  273. package/skills/void/docs/guide/platform/administration/access.md +171 -0
  274. package/skills/void/docs/guide/platform/administration/email.md +121 -0
  275. package/skills/void/docs/guide/platform/administration/operations.md +97 -0
  276. package/skills/void/docs/guide/platform/administration/projects.md +56 -0
  277. package/skills/void/docs/guide/platform/development/local.md +119 -0
  278. package/skills/void/docs/guide/platform/development/runtime.md +124 -0
  279. package/skills/void/docs/guide/platform/development/schema-ci.md +95 -0
  280. package/skills/void/docs/guide/platform/installation/ci.md +58 -0
  281. package/skills/void/docs/guide/platform/installation/credentials.md +90 -0
  282. package/skills/void/docs/guide/platform/installation/domains.md +68 -0
  283. package/skills/void/docs/guide/platform/installation/first-deployment.md +82 -0
  284. package/skills/void/docs/guide/platform/installation/maintenance.md +137 -0
  285. package/skills/void/docs/guide/platform/installation/prerequisites.md +88 -0
  286. package/skills/void/docs/guide/platform/installation/setup.md +169 -0
  287. package/skills/void/docs/guide/platform/installation/uninstall.md +54 -0
  288. package/skills/void/docs/guide/platform-administration.md +6 -414
  289. package/skills/void/docs/guide/platform-development.md +5 -316
  290. package/skills/void/docs/guide/project-collaboration.md +1 -1
  291. package/skills/void/docs/guide/remote-dev.md +2 -2
  292. package/skills/void/docs/guide/sandboxes.md +10 -25
  293. package/skills/void/docs/guide/self-hosted-platform.md +11 -694
  294. package/skills/void/docs/guide/ssg.md +1 -1
  295. package/skills/void/docs/guide/websockets.md +1 -1
  296. package/skills/void/docs/integrations/cloudflare.md +86 -84
  297. package/skills/void/docs/integrations/frameworks/analog.md +14 -9
  298. package/skills/void/docs/integrations/frameworks/astro.md +14 -10
  299. package/skills/void/docs/integrations/frameworks/nuxt.md +14 -9
  300. package/skills/void/docs/integrations/frameworks/overview.md +35 -29
  301. package/skills/void/docs/integrations/frameworks/react-router.md +1 -1
  302. package/skills/void/docs/integrations/frameworks/sveltekit.md +33 -30
  303. package/skills/void/docs/integrations/frameworks/tanstack-start.md +1 -1
  304. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -5
  305. package/skills/void/docs/reference/api.md +55 -38
  306. package/skills/void/docs/reference/cli.md +60 -34
  307. package/skills/void/docs/reference/config.md +57 -34
  308. package/skills/void/docs/reference/resource-inference.md +10 -10
  309. package/skills/void/docs/reference/structure.md +2 -2
  310. package/dist/validate-tBBN_dXH.mjs +0 -505
@@ -0,0 +1,112 @@
1
+ //#region src/pages/head.ts
2
+ /**
3
+ * Merge head descriptors with precedence: page > middleware > config.
4
+ *
5
+ * - `title`: page wins; `titleTemplate` from config wraps it (`%s` replaced)
6
+ * - `meta`: page overrides entries with same `name`/`property`; others appended
7
+ * - `link`/`script`: concatenated (config first, then middleware, then page)
8
+ * - `htmlAttrs`/`bodyAttrs`: shallow merge, page wins conflicts
9
+ */
10
+ function resolveHead(configHead, middlewareHead, pageHead) {
11
+ if (!configHead && !middlewareHead && !pageHead) return;
12
+ const result = {};
13
+ const title = pageHead?.title ?? middlewareHead?.title ?? configHead?.title;
14
+ if (title !== void 0) {
15
+ const template = configHead?.titleTemplate;
16
+ result.title = template ? template.replace("%s", title) : title;
17
+ }
18
+ const metaMap = /* @__PURE__ */ new Map();
19
+ const metaOrder = [];
20
+ for (const layer of [
21
+ configHead,
22
+ middlewareHead,
23
+ pageHead
24
+ ]) {
25
+ if (!layer?.meta) continue;
26
+ for (const entry of layer.meta) {
27
+ const key = entry.charset ? "charset" : entry.property ? `property:${entry.property}` : `name:${entry.name ?? ""}`;
28
+ if (!metaMap.has(key)) metaOrder.push(key);
29
+ metaMap.set(key, entry);
30
+ }
31
+ }
32
+ if (metaMap.size > 0) result.meta = metaOrder.map((key) => metaMap.get(key));
33
+ const links = [];
34
+ for (const layer of [
35
+ configHead,
36
+ middlewareHead,
37
+ pageHead
38
+ ]) if (layer?.link) links.push(...layer.link);
39
+ if (links.length > 0) result.link = links;
40
+ const scripts = [];
41
+ for (const layer of [
42
+ configHead,
43
+ middlewareHead,
44
+ pageHead
45
+ ]) if (layer?.script) scripts.push(...layer.script);
46
+ if (scripts.length > 0) result.script = scripts;
47
+ const htmlAttrs = {};
48
+ let hasHtmlAttrs = false;
49
+ for (const layer of [
50
+ configHead,
51
+ middlewareHead,
52
+ pageHead
53
+ ]) if (layer?.htmlAttrs) {
54
+ Object.assign(htmlAttrs, layer.htmlAttrs);
55
+ hasHtmlAttrs = true;
56
+ }
57
+ if (hasHtmlAttrs) result.htmlAttrs = htmlAttrs;
58
+ const bodyAttrs = {};
59
+ let hasBodyAttrs = false;
60
+ for (const layer of [
61
+ configHead,
62
+ middlewareHead,
63
+ pageHead
64
+ ]) if (layer?.bodyAttrs) {
65
+ Object.assign(bodyAttrs, layer.bodyAttrs);
66
+ hasBodyAttrs = true;
67
+ }
68
+ if (hasBodyAttrs) result.bodyAttrs = bodyAttrs;
69
+ if (result.title === void 0 && !result.meta && !result.link && !result.script && !result.htmlAttrs && !result.bodyAttrs) return;
70
+ return result;
71
+ }
72
+ function escapeHtml(s) {
73
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
74
+ }
75
+ /** Serialize a HeadDescriptor to HTML tags for injection into `<head>`. */
76
+ function renderHeadToString(head) {
77
+ const parts = [];
78
+ if (head.title !== void 0) parts.push(`<title>${escapeHtml(head.title)}</title>`);
79
+ if (head.meta) for (const entry of head.meta) {
80
+ const attrs = [];
81
+ if (entry.charset) attrs.push(`charset="${escapeHtml(entry.charset)}"`);
82
+ if (entry.name) attrs.push(`name="${escapeHtml(entry.name)}"`);
83
+ if (entry.property) attrs.push(`property="${escapeHtml(entry.property)}"`);
84
+ if (entry.content !== void 0) attrs.push(`content="${escapeHtml(entry.content)}"`);
85
+ parts.push(`<meta ${attrs.join(" ")}>`);
86
+ }
87
+ if (head.link) for (const entry of head.link) {
88
+ const attrs = Object.entries(entry).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
89
+ parts.push(`<link ${attrs}>`);
90
+ }
91
+ if (head.script) for (const entry of head.script) {
92
+ const { innerHTML, ...rest } = entry;
93
+ const attrs = Object.entries(rest).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
94
+ if (innerHTML) parts.push(`<script${attrs ? " " + attrs : ""}>${innerHTML}<\/script>`);
95
+ else if (attrs) parts.push(`<script ${attrs}><\/script>`);
96
+ }
97
+ return parts.join("\n");
98
+ }
99
+ /** Serialize htmlAttrs to an attribute string (includes leading space). */
100
+ function renderHtmlAttrs(head) {
101
+ if (!head.htmlAttrs) return "";
102
+ const attrs = Object.entries(head.htmlAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
103
+ return attrs ? " " + attrs : "";
104
+ }
105
+ /** Serialize bodyAttrs to an attribute string (includes leading space). */
106
+ function renderBodyAttrs(head) {
107
+ if (!head.bodyAttrs) return "";
108
+ const attrs = Object.entries(head.bodyAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
109
+ return attrs ? " " + attrs : "";
110
+ }
111
+ //#endregion
112
+ export { resolveHead as i, renderHeadToString as n, renderHtmlAttrs as r, renderBodyAttrs as t };
@@ -0,0 +1,90 @@
1
+ //#region src/pages/head-client.ts
2
+ const ATTR = "data-void-head";
3
+ function elementDescriptorSignature(descriptor) {
4
+ const attrs = Object.entries(descriptor.attrs).sort(([a], [b]) => a.localeCompare(b));
5
+ return `${encodeURIComponent(descriptor.tag)}:${attrs.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&")}`;
6
+ }
7
+ function elementSignature(el) {
8
+ const attrs = {};
9
+ for (const attr of Array.from(el.attributes)) if (attr.name !== ATTR) attrs[attr.name] = attr.value;
10
+ return elementDescriptorSignature({
11
+ tag: el.tagName.toLowerCase(),
12
+ attrs
13
+ });
14
+ }
15
+ function createHeadElement(descriptor) {
16
+ const el = document.createElement(descriptor.tag);
17
+ for (const [key, value] of Object.entries(descriptor.attrs)) el.setAttribute(key, value);
18
+ el.setAttribute(ATTR, "");
19
+ return el;
20
+ }
21
+ function collectDesiredHeadElements(head) {
22
+ const desired = [];
23
+ if (head.meta) for (const entry of head.meta) {
24
+ const attrs = {};
25
+ if (entry.charset) attrs.charset = entry.charset;
26
+ if (entry.name) attrs.name = entry.name;
27
+ if (entry.property) attrs.property = entry.property;
28
+ if (entry.content !== void 0) attrs.content = entry.content;
29
+ desired.push({
30
+ tag: "meta",
31
+ attrs
32
+ });
33
+ }
34
+ if (head.link) for (const entry of head.link) {
35
+ const attrs = {};
36
+ for (const [key, value] of Object.entries(entry)) if (value != null) attrs[key] = value;
37
+ desired.push({
38
+ tag: "link",
39
+ attrs
40
+ });
41
+ }
42
+ return desired;
43
+ }
44
+ /**
45
+ * Mark SSR-rendered head tags so they are cleaned up on the first SPA navigation.
46
+ * Call once after hydration with the initial page's head descriptor.
47
+ */
48
+ function initClientHead(head) {
49
+ if (!head) return;
50
+ if (head.meta) for (const entry of head.meta) {
51
+ const selector = entry.charset ? "meta[charset]" : entry.property ? `meta[property="${entry.property}"]` : entry.name ? `meta[name="${entry.name}"]` : null;
52
+ if (!selector) continue;
53
+ const el = document.head.querySelector(selector);
54
+ if (el) el.setAttribute(ATTR, "");
55
+ }
56
+ if (head.link) for (const entry of head.link) {
57
+ const el = document.head.querySelector(`link[rel="${entry.rel}"][href="${entry.href}"]`);
58
+ if (el) el.setAttribute(ATTR, "");
59
+ }
60
+ }
61
+ /**
62
+ * Apply head changes on SPA navigation.
63
+ * Preserves existing managed tags when their final attributes are unchanged.
64
+ */
65
+ function applyClientHead(head) {
66
+ const existing = /* @__PURE__ */ new Map();
67
+ for (const el of document.head.querySelectorAll(`[${ATTR}]`)) {
68
+ const signature = elementSignature(el);
69
+ const elements = existing.get(signature);
70
+ if (elements) elements.push(el);
71
+ else existing.set(signature, [el]);
72
+ }
73
+ const desiredElements = [];
74
+ for (const descriptor of head ? collectDesiredHeadElements(head) : []) {
75
+ const signature = elementDescriptorSignature(descriptor);
76
+ const elements = existing.get(signature);
77
+ const preserved = elements?.shift();
78
+ if (elements && elements.length === 0) existing.delete(signature);
79
+ desiredElements.push(preserved ?? createHeadElement(descriptor));
80
+ }
81
+ for (const elements of existing.values()) for (const el of elements) el.remove();
82
+ let cursor = document.head.querySelector(`[${ATTR}]`);
83
+ for (const el of desiredElements) {
84
+ if (el !== cursor) document.head.insertBefore(el, cursor);
85
+ cursor = el.nextSibling;
86
+ }
87
+ if (head?.title !== void 0) document.title = head.title;
88
+ }
89
+ //#endregion
90
+ export { initClientHead as n, applyClientHead as t };
@@ -1,5 +1,5 @@
1
- import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { a as convertRedirectsConfig, d as parseHostPrefixedSource, i as convertHeadersConfig, o as convertRewritesConfig, r as convertFallbacksConfig, s as countSplats, t as VALID_REDIRECT_STATUSES, u as isProtocolRelative } from "./config-uNGuFsI2.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
+ import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-Dxr6cTXn.mjs";
3
3
  import { i as voidWarn } from "./log-ChfPKsVd.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  //#region src/cli/headers.ts
@@ -1,7 +1,8 @@
1
- import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
- import { o as join } from "./dist-BrsS7cai.mjs";
3
- import { A as outro, c as import_picocolors, k as note, l as sectionTitle, p as getPackageDir, s as helpLine, t as categoryTitle } from "./output-B0cfNSx5.mjs";
4
- import { t as OPERATOR_MAX_TIMEOUT_MS } from "./operator-client-LUZnlnYk.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
+ import { c as import_picocolors, l as sectionTitle, s as helpLine, t as categoryTitle } from "./output-urU86XeT.mjs";
3
+ import { N as note, P as outro } from "./dist-Dn6nn2IU.mjs";
4
+ import { n as getPackageDir } from "./agents-gni4eqBu.mjs";
5
+ import { t as OPERATOR_MAX_TIMEOUT_MS } from "./operator-client-A0iex2yi.mjs";
5
6
  import { readFileSync } from "node:fs";
6
7
  //#region src/cli/ascii.ts
7
8
  const asciiArts = [
@@ -583,12 +584,6 @@ function parseOperatorArgs(args) {
583
584
  }
584
585
  //#endregion
585
586
  //#region src/cli/help.ts
586
- var help_exports = /* @__PURE__ */ __exportAll({
587
- getHelpPath: () => getHelpPath,
588
- printGlobalHelp: () => printGlobalHelp,
589
- printHelpPage: () => printHelpPage,
590
- printVoidHeader: () => printVoidHeader
591
- });
592
587
  function operatorHelpTree() {
593
588
  return Object.fromEntries(operatorGroups.map((group) => {
594
589
  const commands = operatorCommands.filter((entry) => entry.group === group);
@@ -716,6 +711,14 @@ const HELP_TREE = {
716
711
  }
717
712
  ]
718
713
  },
714
+ migrate: {
715
+ summary: "Move legacy Void project settings into void.config.ts.",
716
+ usage: ["void migrate"],
717
+ examples: [{
718
+ command: "void migrate",
719
+ description: "Convert void.json to void.config.ts"
720
+ }]
721
+ },
719
722
  deploy: {
720
723
  summary: "Build and deploy. Offers to link an existing Cloudflare Worker when no destination is configured.",
721
724
  usage: ["void deploy [options]"],
@@ -1546,7 +1549,7 @@ const HELP_TREE = {
1546
1549
  }]
1547
1550
  },
1548
1551
  setup: {
1549
- summary: "Set email up on your own Cloudflare account: enable Email Routing, onboard Email Sending, write send_email + addresses into wrangler.jsonc. Asks once before changing the account.",
1552
+ summary: "Set email up on your own Cloudflare account: enable Email Routing, onboard Email Sending, and record send_email + addresses in the Cloudflare config managed by Void. Asks once before changing the account.",
1550
1553
  usage: ["void email setup --platform cloudflare"],
1551
1554
  options: [{
1552
1555
  command: "--platform cloudflare",
@@ -2073,6 +2076,8 @@ function printGlobalHelp() {
2073
2076
  globalCommandLine(["init"], "void init"),
2074
2077
  ...globalOptionLines(["init"]),
2075
2078
  "",
2079
+ globalCommandLine(["migrate"], "void migrate"),
2080
+ "",
2076
2081
  globalCommandLine(["connect"], "void connect [url]"),
2077
2082
  ...globalOptionLines(["connect"]),
2078
2083
  "",
@@ -2213,4 +2218,4 @@ function formatHelpPath(path) {
2213
2218
  return path.length === 0 ? "help" : path.join(" ");
2214
2219
  }
2215
2220
  //#endregion
2216
- export { printVoidHeader as a, printHelpPage as i, help_exports as n, operatorGroups as o, printGlobalHelp as r, parseOperatorArgs as s, getHelpPath as t };
2221
+ export { operatorGroups as a, printVoidHeader as i, printGlobalHelp as n, parseOperatorArgs as o, printHelpPage as r, getHelpPath as t };
@@ -0,0 +1,2 @@
1
+ import { r as printHelpPage } from "./help-C46mnlUS.mjs";
2
+ export { printHelpPage };
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { n as HeadDescriptor } from "./head-Do8P4puT.mjs";
2
2
  import { r as AuthUser } from "./auth-DkcFflXV.mjs";
3
- import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-D1hLsObx.mjs";
4
- import { QueueMap } from "./runtime/queues.mjs";
3
+ import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-BXJTXd02.mjs";
4
+ import { t as QueueMap } from "./queues-BWKt1Xo4.mjs";
5
5
  import { PluginConfig } from "@cloudflare/vite-plugin";
6
6
  import { Plugin } from "vite";
7
7
  //#region src/router/parse-filename.d.ts
@@ -45,24 +45,6 @@ export declare function shouldBindWorkersAi(command: string, needsAI: boolean, r
45
45
  export declare function shouldInjectEmailDevInboxVar(routeEnvironment: RouteEnvironment, needsEmail: boolean | undefined, assetsBinding: string | undefined): boolean;
46
46
  /** Resolve the runtime Workers AI binding, preserving a root Wrangler declaration. */
47
47
  export declare function resolveWorkersAiBindingName(resolvedAi: unknown, configuredName?: string): string;
48
- /**
49
- * Void plugin — the main entry point.
50
- *
51
- * Composes:
52
- * 1. Routing plugin (file-based routing from routes/ and middleware/)
53
- * 2. Migration plugin (auto-apply .sql migrations on dev startup)
54
- * 3. @cloudflare/vite-plugin (workerd runtime, HMR, builds)
55
- *
56
- * Binding inference runs synchronously here so results are available
57
- * before the Cloudflare plugin initializes.
58
- *
59
- * If the user has a `wrangler.jsonc` / `wrangler.json` in their project root,
60
- * the Cloudflare plugin reads it and provides the resolved config to our
61
- * config function. Bindings already defined there (with real IDs for
62
- * production deployment) are preserved — we only add inferred bindings
63
- * that are missing. This allows `vite build && wrangler deploy` to work
64
- * for deploying directly to Cloudflare without the Void platform.
65
- */
66
48
  export declare function voidPlugin(options?: {
67
49
  persistTo?: string;
68
50
  auxiliaryWorkers?: PluginConfig["auxiliaryWorkers"];