void 0.10.12 → 0.20.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 (431) hide show
  1. package/AGENTS_TEMPLATE.md +6 -0
  2. package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
  3. package/README.md +34 -8
  4. package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
  5. package/dist/auth-W9WII-mN.mjs +630 -0
  6. package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
  7. package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
  8. package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
  9. package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
  10. package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
  11. package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
  12. package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
  13. package/dist/cf-access-AJ1ehiFR.mjs +42 -0
  14. package/dist/cf-access-DsSsZUPr.mjs +67 -0
  15. package/dist/cli/cli.d.mts +1 -1
  16. package/dist/cli/cli.mjs +1592 -153
  17. package/dist/cli/env-schema-probe.d.mts +48 -61
  18. package/dist/cli/env-schema-probe.mjs +10 -58
  19. package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
  20. package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
  21. package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
  22. package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
  23. package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
  24. package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
  25. package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
  26. package/dist/connect-D9Yr-T5f.mjs +79 -0
  27. package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
  28. package/dist/database-provider.d.mts +21 -0
  29. package/dist/database-provider.mjs +6 -0
  30. package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
  31. package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
  32. package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
  33. package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
  34. package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
  35. package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
  36. package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
  37. package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
  38. package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
  39. package/dist/dotenv-VQxupEUv.mjs +181 -0
  40. package/dist/edge.d.mts +2 -0
  41. package/dist/edge.mjs +2 -0
  42. package/dist/email-Ce6SQq-i.mjs +182 -0
  43. package/dist/email-r6DHJyAB.mjs +262 -0
  44. package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
  45. package/dist/env-D4Emu-M_.mjs +95 -0
  46. package/dist/env-DmU2To0C.mjs +73 -0
  47. package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
  48. package/dist/env-public-D_6u46fX.d.mts +135 -0
  49. package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
  50. package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
  51. package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
  52. package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
  53. package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
  54. package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
  55. package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
  56. package/dist/inbound-BJ70in1n.d.mts +354 -0
  57. package/dist/inbound-CNKxb3FY.mjs +694 -0
  58. package/dist/index.d.mts +61 -34
  59. package/dist/index.mjs +1048 -321
  60. package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
  61. package/dist/link-D_rm5sRH.mjs +52 -0
  62. package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
  63. package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
  64. package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
  65. package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
  66. package/dist/mime-BJD7d_qL.mjs +1216 -0
  67. package/dist/neon-DHwd2zvC.mjs +54 -0
  68. package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
  69. package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
  70. package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
  71. package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
  72. package/dist/pages/client.d.mts +43 -41
  73. package/dist/pages/client.mjs +40 -33
  74. package/dist/pages/head-client.d.mts +10 -12
  75. package/dist/pages/head.d.mts +1 -1
  76. package/dist/pages/index.d.mts +37 -14
  77. package/dist/pages/index.mjs +5 -5
  78. package/dist/pages/islands-plugin.d.mts +25 -27
  79. package/dist/pages/islands-plugin.mjs +6 -4
  80. package/dist/pages/prefetch.d.mts +6 -7
  81. package/dist/pages/protocol.d.mts +2 -2
  82. package/dist/pages/protocol.mjs +2 -1
  83. package/dist/pages/serialize.d.mts +7 -8
  84. package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
  85. package/dist/platform-domain-BszUfiS8.mjs +228 -0
  86. package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
  87. package/dist/platform-management-W30iCaTL.mjs +698 -0
  88. package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
  89. package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
  90. package/dist/prepare-BfJvFUtJ.mjs +14 -0
  91. package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
  92. package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
  93. package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
  94. package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
  95. package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
  96. package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
  97. package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
  98. package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
  99. package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
  100. package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
  101. package/dist/rollback-CtlPXEBi.mjs +166 -0
  102. package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
  103. package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
  104. package/dist/routes-stub.d.mts +22 -23
  105. package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
  106. package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
  107. package/dist/runtime/ai.d.mts +21 -14
  108. package/dist/runtime/ai.mjs +5 -4
  109. package/dist/runtime/auth-client-react.d.mts +3 -5
  110. package/dist/runtime/auth-client-solid.d.mts +3 -5
  111. package/dist/runtime/auth-client-svelte.d.mts +3 -5
  112. package/dist/runtime/auth-client-vue.d.mts +3 -5
  113. package/dist/runtime/auth-client.d.mts +3 -5
  114. package/dist/runtime/auth.d.mts +1 -1
  115. package/dist/runtime/better-auth-mysql.d.mts +10 -0
  116. package/dist/runtime/better-auth-mysql.mjs +49 -0
  117. package/dist/runtime/better-auth-pg.d.mts +8 -9
  118. package/dist/runtime/better-auth-pg.mjs +2 -2
  119. package/dist/runtime/better-auth.d.mts +8 -9
  120. package/dist/runtime/better-auth.mjs +2 -2
  121. package/dist/runtime/client-react.d.mts +1 -1
  122. package/dist/runtime/client-solid.d.mts +1 -1
  123. package/dist/runtime/client-svelte.d.mts +1 -1
  124. package/dist/runtime/client-vue.d.mts +1 -1
  125. package/dist/runtime/client.d.mts +1 -1
  126. package/dist/runtime/db-mysql.d.mts +2 -0
  127. package/dist/runtime/db-mysql.mjs +1 -0
  128. package/dist/runtime/db.d.mts +10 -11
  129. package/dist/runtime/durable.d.mts +47 -0
  130. package/dist/runtime/durable.mjs +146 -0
  131. package/dist/runtime/email/testing.d.mts +112 -0
  132. package/dist/runtime/email/testing.mjs +283 -0
  133. package/dist/runtime/email.d.mts +30 -0
  134. package/dist/runtime/email.mjs +573 -0
  135. package/dist/runtime/env-helpers.d.mts +2 -2
  136. package/dist/runtime/env-helpers.mjs +5 -42
  137. package/dist/runtime/env-public-client.d.mts +10 -11
  138. package/dist/runtime/env-public-client.mjs +1 -1
  139. package/dist/runtime/env-public.d.mts +2 -2
  140. package/dist/runtime/env-public.mjs +104 -49
  141. package/dist/runtime/env.d.mts +19 -18
  142. package/dist/runtime/env.mjs +15 -2
  143. package/dist/runtime/fetch-stream.d.mts +20 -21
  144. package/dist/runtime/fetch.d.mts +15 -16
  145. package/dist/runtime/handler.d.mts +1 -1
  146. package/dist/runtime/isr.d.mts +21 -22
  147. package/dist/runtime/isr.mjs +26 -8
  148. package/dist/runtime/kv.d.mts +9 -10
  149. package/dist/runtime/live-client.d.mts +5 -7
  150. package/dist/runtime/live-client.mjs +9 -7
  151. package/dist/runtime/live-server.d.mts +4 -5
  152. package/dist/runtime/live.d.mts +22 -24
  153. package/dist/runtime/live.mjs +1 -1
  154. package/dist/runtime/log.d.mts +16 -17
  155. package/dist/runtime/migration-handler-mysql.d.mts +4 -0
  156. package/dist/runtime/migration-handler-mysql.mjs +81 -0
  157. package/dist/runtime/migration-handler-pg.d.mts +2 -4
  158. package/dist/runtime/migration-handler.d.mts +5 -6
  159. package/dist/runtime/migration-handler.mjs +4 -3
  160. package/dist/runtime/queues.d.mts +3 -4
  161. package/dist/runtime/queues.mjs +2 -1
  162. package/dist/runtime/remote/binding-handler.d.mts +10 -12
  163. package/dist/runtime/remote/binding-handler.mjs +24 -3
  164. package/dist/runtime/remote/index.d.mts +5 -6
  165. package/dist/runtime/remote/index.mjs +21 -18
  166. package/dist/runtime/response.d.mts +10 -11
  167. package/dist/runtime/sandbox.d.mts +56 -55
  168. package/dist/runtime/sandbox.mjs +57 -49
  169. package/dist/runtime/schema-mysql.d.mts +1 -0
  170. package/dist/runtime/schema-mysql.mjs +2 -0
  171. package/dist/runtime/seed.d.mts +14 -9
  172. package/dist/runtime/sse-client.d.mts +6 -7
  173. package/dist/runtime/sse.d.mts +11 -12
  174. package/dist/runtime/storage.d.mts +3 -4
  175. package/dist/runtime/validator.d.mts +1 -1
  176. package/dist/runtime/ws-server.d.mts +12 -12
  177. package/dist/runtime/ws-server.mjs +32 -4
  178. package/dist/runtime/ws.d.mts +19 -21
  179. package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
  180. package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
  181. package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
  182. package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
  183. package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
  184. package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
  185. package/dist/sveltekit.d.mts +12 -11
  186. package/dist/sveltekit.mjs +1 -1
  187. package/dist/types-BAp5AEBU.d.mts +79 -0
  188. package/dist/types-CKWnYgfy.d.mts +1 -0
  189. package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
  190. package/dist/wrangler--imS8n0d.mjs +1796 -0
  191. package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
  192. package/package.json +79 -65
  193. package/schema.json +35 -3
  194. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
  195. package/skills/void/SKILL.md +59 -2
  196. package/skills/void/docs/guide/ai.md +32 -14
  197. package/skills/void/docs/guide/app-types.md +6 -6
  198. package/skills/void/docs/guide/auth.md +14 -16
  199. package/skills/void/docs/guide/database/d1.md +6 -0
  200. package/skills/void/docs/guide/database/mysql.md +60 -0
  201. package/skills/void/docs/guide/database/postgresql.md +14 -9
  202. package/skills/void/docs/guide/database.md +39 -26
  203. package/skills/void/docs/guide/deployment.md +163 -22
  204. package/skills/void/docs/guide/durable-state.md +140 -0
  205. package/skills/void/docs/guide/edge/headers.md +5 -5
  206. package/skills/void/docs/guide/edge/prerendering.md +2 -0
  207. package/skills/void/docs/guide/edge/revalidation.md +21 -6
  208. package/skills/void/docs/guide/edge/rewrites.md +18 -14
  209. package/skills/void/docs/guide/edge/static-assets.md +23 -8
  210. package/skills/void/docs/guide/email.md +609 -0
  211. package/skills/void/docs/guide/env-migration.md +109 -0
  212. package/skills/void/docs/guide/env-vars.md +70 -248
  213. package/skills/void/docs/guide/index.md +15 -17
  214. package/skills/void/docs/guide/jobs.md +8 -5
  215. package/skills/void/docs/guide/live.md +7 -15
  216. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
  217. package/skills/void/docs/guide/pages-routing/islands.md +3 -3
  218. package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
  219. package/skills/void/docs/guide/pages-routing/overview.md +7 -7
  220. package/skills/void/docs/guide/platform-administration.md +212 -0
  221. package/skills/void/docs/guide/platform-development.md +235 -0
  222. package/skills/void/docs/guide/queues.md +10 -10
  223. package/skills/void/docs/guide/quickstart.md +46 -67
  224. package/skills/void/docs/guide/remote-dev.md +8 -6
  225. package/skills/void/docs/guide/sandboxes.md +33 -16
  226. package/skills/void/docs/guide/self-hosted-platform.md +553 -0
  227. package/skills/void/docs/guide/server-routing.md +25 -5
  228. package/skills/void/docs/guide/sse.md +4 -4
  229. package/skills/void/docs/guide/ssg.md +5 -3
  230. package/skills/void/docs/guide/storage.md +2 -2
  231. package/skills/void/docs/guide/websockets.md +18 -7
  232. package/skills/void/docs/index.md +3 -3
  233. package/skills/void/docs/integrations/agents.md +6 -64
  234. package/skills/void/docs/integrations/cloudflare.md +165 -146
  235. package/skills/void/docs/integrations/frameworks/analog.md +4 -4
  236. package/skills/void/docs/integrations/frameworks/astro.md +5 -5
  237. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
  238. package/skills/void/docs/integrations/frameworks/overview.md +3 -3
  239. package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
  240. package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
  241. package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
  242. package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
  243. package/skills/void/docs/reference/api.md +42 -6
  244. package/skills/void/docs/reference/cli.md +637 -159
  245. package/skills/void/docs/reference/config.md +80 -25
  246. package/skills/void/docs/reference/resource-inference.md +13 -9
  247. package/skills/void/docs/reference/structure.md +10 -11
  248. package/AGENT_PROMPT.md +0 -19
  249. package/dist/cf-access-Bqw81xAf.mjs +0 -22
  250. package/dist/env-CZy5MorI.mjs +0 -299
  251. package/dist/env-helpers-z4stu8uc.d.mts +0 -52
  252. package/dist/env-mask-Dd47NbR6.mjs +0 -90
  253. package/dist/env-public-BfiLcMBk.d.mts +0 -140
  254. package/dist/link-CdGHSIy-.mjs +0 -45
  255. package/dist/mcp-DoM3_nhd.mjs +0 -377
  256. package/dist/project-paths-GpziKeQQ.d.mts +0 -25
  257. package/dist/providers-BNKRacMr.d.mts +0 -7
  258. package/dist/proxy-D-3_D-Gl.mjs +0 -5
  259. package/dist/rollback-CkvTFXx5.mjs +0 -90
  260. package/dist/runtime/isr-cache.d.mts +0 -207
  261. package/dist/runtime/isr-cache.mjs +0 -523
  262. package/dist/types-lLjNE9Qp.d.mts +0 -51
  263. package/getting-started-prompt.txt +0 -28
  264. package/skills/void/command/void.md +0 -7
  265. package/skills/void/docs/integrations/auth-providers.md +0 -0
  266. package/skills/void/docs/integrations/payment-processors.md +0 -0
  267. package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
  268. package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
  269. package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
  270. package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
  271. package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
  272. package/skills/void/docs/node_modules/vitepress/README.md +0 -28
  273. package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
  274. package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
  275. package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
  276. package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
  277. package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
  278. package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
  279. package/skills/void/docs/node_modules/void/README.md +0 -90
  280. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
  281. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
  282. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
  283. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
  284. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
  285. package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
  286. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
  287. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
  288. package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
  289. package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
  290. package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
  291. package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
  292. package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
  293. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
  294. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
  295. package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
  296. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
  297. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
  298. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
  299. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
  300. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
  301. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
  302. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
  303. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
  304. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
  305. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
  306. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
  307. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
  308. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
  309. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
  310. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
  311. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
  312. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
  313. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
  314. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
  315. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
  316. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
  317. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
  318. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
  319. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
  320. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
  321. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
  322. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
  323. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
  324. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
  325. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
  326. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
  327. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
  328. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
  329. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
  330. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
  331. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
  332. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
  333. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
  334. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
  335. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
  336. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
  337. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
  338. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
  339. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
  340. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
  341. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
  342. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
  343. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
  344. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
  345. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
  346. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
  347. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
  348. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
  349. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
  350. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
  351. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
  352. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
  353. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
  354. package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
  355. package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
  356. package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
  357. package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
  358. package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
  359. package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
  360. package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
  361. package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
  362. package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
  363. package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
  364. package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
  365. package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
  366. package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
  367. package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
  368. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
  369. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
  370. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
  371. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
  372. package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
  373. package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
  374. package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
  375. package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
  376. package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
  377. package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
  378. package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
  379. package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
  380. package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
  381. package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
  382. package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
  383. package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
  384. package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
  385. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
  386. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
  387. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
  388. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
  389. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
  390. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
  391. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
  392. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
  393. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
  394. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
  395. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
  396. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
  397. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
  398. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
  399. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
  400. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
  401. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
  402. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
  403. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
  404. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
  405. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
  406. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
  407. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
  408. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
  409. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
  410. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
  411. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
  412. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
  413. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
  414. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
  415. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
  416. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
  417. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
  418. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
  419. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
  420. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
  421. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
  422. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
  423. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
  424. package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
  425. package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
  426. package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
  427. package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
  428. package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
  429. package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
  430. package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
  431. package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
@@ -1,7 +1,8 @@
1
- import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
- import { a as join } from "./dist-DaKKDf8D.mjs";
3
- import { a as validateSourceDir } from "./project-paths-BQd7OmIo.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
+ import { o as join } from "./dist-BrsS7cai.mjs";
3
+ import { a as validateSourceDir } from "./project-paths-SK8nMHPp.mjs";
4
4
  import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-CJlNS3kT.mjs";
5
+ import { a as parseAddress, n as MimeError } from "./mime-BJD7d_qL.mjs";
5
6
  import { readFileSync } from "node:fs";
6
7
  //#region src/config.ts
7
8
  var config_exports = /* @__PURE__ */ __exportAll({
@@ -57,7 +58,9 @@ const VALID_REDIRECT_STATUSES = /* @__PURE__ */ new Set([
57
58
  307,
58
59
  308
59
60
  ]);
60
- const VALID_DATABASE_VALUES = /* @__PURE__ */ new Set(["pg"]);
61
+ const VALID_DATABASE_VALUES = /* @__PURE__ */ new Set(["pg", "mysql"]);
62
+ /** Cloudflare's hard maximum for Workers CPU time per request (5 minutes). */
63
+ const MAX_WORKER_CPU_MS = 3e5;
61
64
  const VALID_SANDBOX_INSTANCE_TYPES = /* @__PURE__ */ new Set([
62
65
  "dev",
63
66
  "lite",
@@ -292,15 +295,18 @@ function readConfig(root) {
292
295
  if (routing.notFound !== void 0) {
293
296
  if (typeof routing.notFound !== "string" || !VALID_NOT_FOUND_HANDLING.has(routing.notFound)) throw new Error(`config: "routing.notFound" in ${CONFIG_FILE} must be one of: ${[...VALID_NOT_FOUND_HANDLING].join(", ")}.`);
294
297
  }
295
- if (routing.revalidate !== void 0) if (typeof routing.revalidate === "number") {
296
- if (!Number.isFinite(routing.revalidate) || routing.revalidate < 0) throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a non-negative finite number.`);
297
- } else if (typeof routing.revalidate === "object" && routing.revalidate !== null && !Array.isArray(routing.revalidate)) {
298
- const r = routing.revalidate;
299
- for (const [pattern, value] of Object.entries(r)) {
300
- if (pattern !== "*" && !pattern.startsWith("/")) throw new Error(`config: "routing.revalidate" key '${pattern}' in ${CONFIG_FILE} must start with "/" or be "*".`);
301
- if (typeof value !== "number" || !Number.isFinite(value) || value < 0) throw new Error(`config: "routing.revalidate" value for '${pattern}' in ${CONFIG_FILE} must be a non-negative finite number.`);
302
- }
303
- } else throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a number or an object of path patterns to numbers.`);
298
+ if (routing.isr !== void 0 && typeof routing.isr !== "boolean") throw new Error(`config: "routing.isr" in ${CONFIG_FILE} must be a boolean.`);
299
+ if (routing.revalidate !== void 0) {
300
+ if (typeof routing.revalidate === "number") {
301
+ if (!Number.isFinite(routing.revalidate) || routing.revalidate < 0) throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a non-negative finite number.`);
302
+ } else if (typeof routing.revalidate === "object" && routing.revalidate !== null && !Array.isArray(routing.revalidate)) {
303
+ const r = routing.revalidate;
304
+ for (const [pattern, value] of Object.entries(r)) {
305
+ if (pattern !== "*" && !pattern.startsWith("/")) throw new Error(`config: "routing.revalidate" key '${pattern}' in ${CONFIG_FILE} must start with "/" or be "*".`);
306
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) throw new Error(`config: "routing.revalidate" value for '${pattern}' in ${CONFIG_FILE} must be a non-negative finite number.`);
307
+ }
308
+ } else throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a number or an object of path patterns to numbers.`);
309
+ }
304
310
  if (routing.prerender !== void 0) {
305
311
  if (!Array.isArray(routing.prerender) || !routing.prerender.every((p) => typeof p === "string")) throw new Error(`config: "routing.prerender" in ${CONFIG_FILE} must be an array of strings.`);
306
312
  for (const p of routing.prerender) if (!p.startsWith("/")) throw new Error(`config: "routing.prerender" path '${p}' in ${CONFIG_FILE} must start with "/".`);
@@ -384,9 +390,10 @@ function readConfig(root) {
384
390
  "db",
385
391
  "kv",
386
392
  "storage",
387
- "ai"
388
- ].includes(key)) throw new Error(`config: Unknown binding '${key}' in ${CONFIG_FILE}. Valid: db, kv, storage, ai.`);
389
- if (key === "ai") {
393
+ "ai",
394
+ "email"
395
+ ].includes(key)) throw new Error(`config: Unknown binding '${key}' in ${CONFIG_FILE}. Valid: db, kv, storage, ai, email.`);
396
+ if (key === "email") {
390
397
  if (typeof b[key] !== "boolean") throw new Error(`config: "inference.bindings.${key}" in ${CONFIG_FILE} must be a boolean.`);
391
398
  } else if (typeof b[key] !== "boolean" && typeof b[key] !== "string") throw new Error(`config: "inference.bindings.${key}" in ${CONFIG_FILE} must be a boolean or a string custom binding name.`);
392
399
  }
@@ -402,29 +409,31 @@ function readConfig(root) {
402
409
  if (inf.outputDir !== void 0 && typeof inf.outputDir !== "string") throw new Error(`config: "inference.outputDir" in ${CONFIG_FILE} must be a string.`);
403
410
  }
404
411
  if (obj.remote !== void 0 && typeof obj.remote !== "boolean") throw new Error(`config: "remote" in ${CONFIG_FILE} must be a boolean.`);
405
- if (obj.sandbox !== void 0) if (typeof obj.sandbox === "boolean") {} else if (typeof obj.sandbox === "object" && obj.sandbox !== null && !Array.isArray(obj.sandbox)) {
406
- const sandbox = obj.sandbox;
407
- for (const key of Object.keys(sandbox)) if (![
408
- "binding",
409
- "className",
410
- "containerName",
411
- "image",
412
- "imageBuildContext",
413
- "platformImage",
414
- "instanceType",
415
- "maxInstances"
416
- ].includes(key)) throw new Error(`config: Unknown key 'sandbox.${key}' in ${CONFIG_FILE}. Valid: binding, className, containerName, image, imageBuildContext, platformImage, instanceType, maxInstances.`);
417
- for (const key of [
418
- "binding",
419
- "className",
420
- "containerName",
421
- "image",
422
- "imageBuildContext",
423
- "platformImage"
424
- ]) if (sandbox[key] !== void 0 && typeof sandbox[key] !== "string") throw new Error(`config: "sandbox.${key}" in ${CONFIG_FILE} must be a string.`);
425
- if (sandbox.instanceType !== void 0 && (typeof sandbox.instanceType !== "string" || !VALID_SANDBOX_INSTANCE_TYPES.has(sandbox.instanceType))) throw new Error(`config: "sandbox.instanceType" in ${CONFIG_FILE} must be one of: ${[...VALID_SANDBOX_INSTANCE_TYPES].join(", ")}.`);
426
- if (sandbox.maxInstances !== void 0 && (typeof sandbox.maxInstances !== "number" || !Number.isInteger(sandbox.maxInstances) || sandbox.maxInstances < 1)) throw new Error(`config: "sandbox.maxInstances" in ${CONFIG_FILE} must be a positive integer.`);
427
- } else throw new Error(`config: "sandbox" in ${CONFIG_FILE} must be a boolean or an object.`);
412
+ if (obj.sandbox !== void 0) {
413
+ if (typeof obj.sandbox === "boolean") {} else if (typeof obj.sandbox === "object" && obj.sandbox !== null && !Array.isArray(obj.sandbox)) {
414
+ const sandbox = obj.sandbox;
415
+ for (const key of Object.keys(sandbox)) if (![
416
+ "binding",
417
+ "className",
418
+ "containerName",
419
+ "image",
420
+ "imageBuildContext",
421
+ "platformImage",
422
+ "instanceType",
423
+ "maxInstances"
424
+ ].includes(key)) throw new Error(`config: Unknown key 'sandbox.${key}' in ${CONFIG_FILE}. Valid: binding, className, containerName, image, imageBuildContext, platformImage, instanceType, maxInstances.`);
425
+ for (const key of [
426
+ "binding",
427
+ "className",
428
+ "containerName",
429
+ "image",
430
+ "imageBuildContext",
431
+ "platformImage"
432
+ ]) if (sandbox[key] !== void 0 && typeof sandbox[key] !== "string") throw new Error(`config: "sandbox.${key}" in ${CONFIG_FILE} must be a string.`);
433
+ if (sandbox.instanceType !== void 0 && (typeof sandbox.instanceType !== "string" || !VALID_SANDBOX_INSTANCE_TYPES.has(sandbox.instanceType))) throw new Error(`config: "sandbox.instanceType" in ${CONFIG_FILE} must be one of: ${[...VALID_SANDBOX_INSTANCE_TYPES].join(", ")}.`);
434
+ if (sandbox.maxInstances !== void 0 && (typeof sandbox.maxInstances !== "number" || !Number.isInteger(sandbox.maxInstances) || sandbox.maxInstances < 1)) throw new Error(`config: "sandbox.maxInstances" in ${CONFIG_FILE} must be a positive integer.`);
435
+ } else throw new Error(`config: "sandbox" in ${CONFIG_FILE} must be a boolean or an object.`);
436
+ }
428
437
  if (obj.worker !== void 0) {
429
438
  if (typeof obj.worker !== "object" || obj.worker === null || Array.isArray(obj.worker)) throw new Error(`config: "worker" in ${CONFIG_FILE} must be an object.`);
430
439
  const w = obj.worker;
@@ -439,9 +448,17 @@ function readConfig(root) {
439
448
  if (typeof w.vars !== "object" || w.vars === null || Array.isArray(w.vars)) throw new Error(`config: "worker.vars" in ${CONFIG_FILE} must be an object.`);
440
449
  for (const [key, value] of Object.entries(w.vars)) if (typeof value !== "string") throw new Error(`config: "worker.vars.${key}" in ${CONFIG_FILE} must be a string.`);
441
450
  }
451
+ if (w.limits !== void 0) {
452
+ if (typeof w.limits !== "object" || w.limits === null || Array.isArray(w.limits)) throw new Error(`config: "worker.limits" in ${CONFIG_FILE} must be an object.`);
453
+ const limits = w.limits;
454
+ for (const key of Object.keys(limits)) if (key !== "cpu_ms") throw new Error(`config: Unknown key 'worker.limits.${key}' in ${CONFIG_FILE}. Valid: cpu_ms.`);
455
+ if (limits.cpu_ms !== void 0) {
456
+ if (typeof limits.cpu_ms !== "number" || !Number.isInteger(limits.cpu_ms) || limits.cpu_ms < 1 || limits.cpu_ms > MAX_WORKER_CPU_MS) throw new Error(`config: "worker.limits.cpu_ms" in ${CONFIG_FILE} must be an integer between 1 and ${MAX_WORKER_CPU_MS}.`);
457
+ }
458
+ }
442
459
  }
443
460
  if (obj.database !== void 0) {
444
- if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg".`);
461
+ if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg" or "mysql".`);
445
462
  }
446
463
  if (obj.ai !== void 0) {
447
464
  if (typeof obj.ai !== "object" || obj.ai === null || Array.isArray(obj.ai)) throw new Error(`config: "ai" in ${CONFIG_FILE} must be an object.`);
@@ -449,8 +466,29 @@ function readConfig(root) {
449
466
  for (const key of Object.keys(aiCfg)) if (key !== "gateway") throw new Error(`config: Unknown key 'ai.${key}' in ${CONFIG_FILE}. Valid: gateway.`);
450
467
  if (aiCfg.gateway !== void 0 && (typeof aiCfg.gateway !== "string" || aiCfg.gateway.length === 0)) throw new Error(`config: "ai.gateway" in ${CONFIG_FILE} must be a non-empty string.`);
451
468
  }
469
+ if (obj.email !== void 0) {
470
+ if (typeof obj.email !== "object" || obj.email === null || Array.isArray(obj.email)) throw new Error(`config: "email" in ${CONFIG_FILE} must be an object.`);
471
+ const emailCfg = obj.email;
472
+ for (const key of Object.keys(emailCfg)) if (key !== "from") throw new Error(`config: Unknown key 'email.${key}' in ${CONFIG_FILE}. Valid: from.`);
473
+ if (emailCfg.from !== void 0) parseEmailFrom(emailCfg.from);
474
+ }
452
475
  return obj;
453
476
  }
477
+ /**
478
+ * Parse `email.from` with the runtime's own address parser, so the config
479
+ * accepts exactly what `sendEmail()` accepts: one address, optionally with a
480
+ * display name, and nothing that could split into two recipients or smuggle a
481
+ * header. A sender that passes here cannot later fail `INVALID_FROM` on shape.
482
+ */
483
+ function parseEmailFrom(value) {
484
+ if (typeof value !== "string" || value.length === 0) throw new Error(`config: "email.from" in ${CONFIG_FILE} must be a non-empty string.`);
485
+ try {
486
+ return parseAddress(value, "email.from");
487
+ } catch (error) {
488
+ const detail = error instanceof MimeError ? ` ${error.message}` : "";
489
+ throw new Error(`config: "email.from" in ${CONFIG_FILE} must be a single email address, optionally with a display name (e.g. "Acme <noreply@mail.acme.com>").${detail}`);
490
+ }
491
+ }
454
492
  /** Returns true if the target is a non-Cloudflare runtime (Node.js, Bun, Deno). */
455
493
  function isNodeTarget(target) {
456
494
  return target === "node" || target === "bun" || target === "deno";
@@ -475,13 +513,19 @@ function resolveBindingNames(bindings) {
475
513
  names.r2 = bindings.storage;
476
514
  hasCustom = true;
477
515
  }
516
+ if (typeof bindings.ai === "string") {
517
+ names.ai = bindings.ai;
518
+ hasCustom = true;
519
+ }
478
520
  return hasCustom ? names : void 0;
479
521
  }
480
522
  /**
481
523
  * Get the database dialect from config. Defaults to "sqlite".
482
524
  */
483
525
  function getDatabaseDialect(config) {
484
- return config.database === "pg" ? "postgresql" : "sqlite";
526
+ if (config.database === "pg") return "postgresql";
527
+ if (config.database === "mysql") return "mysql";
528
+ return "sqlite";
485
529
  }
486
530
  /**
487
531
  * Convert the `headers` config field into `HeaderRule[]` for the deploy manifest.
@@ -1,7 +1,7 @@
1
- import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
- import { a as join, s as relative } from "./dist-DaKKDf8D.mjs";
3
- import { n as readProjectPaths } from "./project-paths-BQd7OmIo.mjs";
4
- import { r as schemaSpecifier, t as discoverSchema } from "./discover-CJHyvYfR.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
+ import { c as relative, o as join } from "./dist-BrsS7cai.mjs";
3
+ import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
4
+ import { r as schemaSpecifier, t as discoverSchema } from "./discover-xvfrgJeo.mjs";
5
5
  import { mkdirSync, writeFileSync } from "node:fs";
6
6
  //#region src/drizzle/config.ts
7
7
  var config_exports = /* @__PURE__ */ __exportAll({ writeDrizzleConfig: () => writeDrizzleConfig });
@@ -12,21 +12,16 @@ var config_exports = /* @__PURE__ */ __exportAll({ writeDrizzleConfig: () => wri
12
12
  *
13
13
  * @returns Absolute path to the written config file.
14
14
  */
15
- function writeDrizzleConfig(root, dbPath, dialect = "sqlite") {
15
+ function writeDrizzleConfig(root, dbPath, dialect = "sqlite", options) {
16
16
  const paths = readProjectPaths(root);
17
17
  const schema = discoverSchema(root, paths);
18
- if (!schema) throw new Error(`db: No Drizzle schema found. Create ${paths.sourceRelative("db/schema.ts")} or run \`void gen model <name>\`.`);
18
+ const schemaPaths = [...schema ? [schemaSpecifier(schema, root)] : [], ...(options?.additionalSchemas ?? []).map((path) => `./${relative(root, path)}`)];
19
+ if (schemaPaths.length === 0) throw new Error(`db: No Drizzle schema found. Create ${paths.sourceRelative("db/schema.ts")} or run \`void gen model <name>\`.`);
19
20
  const outDir = join(root, ".void");
20
21
  mkdirSync(outDir, { recursive: true });
21
- const config = dialect === "postgresql" ? {
22
- dialect: "postgresql",
23
- schema: schemaSpecifier(schema, root),
24
- out: `./${relative(root, paths.migrationsDir)}`,
25
- migrations: { prefix: "timestamp" },
26
- dbCredentials: { url: dbPath }
27
- } : {
28
- dialect: "sqlite",
29
- schema: schemaSpecifier(schema, root),
22
+ const config = {
23
+ dialect,
24
+ schema: schemaPaths.length === 1 ? schemaPaths[0] : schemaPaths,
30
25
  out: `./${relative(root, paths.migrationsDir)}`,
31
26
  migrations: { prefix: "timestamp" },
32
27
  dbCredentials: { url: dbPath }
@@ -0,0 +1,79 @@
1
+ import { D as log, F as isCancel, G as normalizePlatformApiUrl, W as listPlatformConnections, j as select } from "./output-tFQLLj26.mjs";
2
+ import { C as writeDeploymentPlatform, b as readDeploymentPlatform, f as readPlatformToken, w as writePlatformSelection } from "./auth-W9WII-mN.mjs";
3
+ import { a as isExpiredTokenError, n as PlatformClient } from "./client-CyCHWSO_.mjs";
4
+ import { t as promptForLoginToken } from "./login-C8-UuLnp.mjs";
5
+ import { t as connectCloudflare } from "./cloudflare-connect-BivMefMA.mjs";
6
+ import { discoverPlatform, promptPlatformUrl, saveDiscoveredPlatform } from "./platform-cmd-BEOVv1PN.mjs";
7
+ //#region src/cli/connect.ts
8
+ async function selectVoidPlatform(interactive) {
9
+ if (!interactive) throw new Error("connect: Supply a Void platform URL in non-interactive mode.");
10
+ const connections = listPlatformConnections();
11
+ if (connections.length === 0) return promptPlatformUrl();
12
+ const value = await select({
13
+ message: "Select a Void platform:",
14
+ options: [...connections.map((entry) => ({
15
+ value: entry.apiUrl,
16
+ label: entry.displayName,
17
+ hint: entry.apiUrl
18
+ })), {
19
+ value: "new",
20
+ label: "Connect to another platform"
21
+ }]
22
+ });
23
+ if (isCancel(value) || typeof value === "symbol") throw new Error("connect: Cancelled.");
24
+ return value === "new" ? promptPlatformUrl() : value;
25
+ }
26
+ async function authenticateConnection(root, discovery, interactive) {
27
+ const envToken = process.env.VOID_TOKEN;
28
+ const envUrl = process.env.VOID_API_URL;
29
+ const matchingEnv = Boolean(envToken && envUrl && normalizePlatformApiUrl(envUrl) === discovery.apiUrl);
30
+ const token = matchingEnv ? envToken : readPlatformToken(discovery.apiUrl);
31
+ if (token) try {
32
+ await new PlatformClient(token, { apiUrl: discovery.apiUrl }).whoami();
33
+ log.success(`Authenticated with ${discovery.displayName}.`);
34
+ return;
35
+ } catch (error) {
36
+ if (!isExpiredTokenError(error)) throw error;
37
+ if (matchingEnv) throw new Error("connect: VOID_TOKEN is invalid or expired. Replace it before connecting.");
38
+ }
39
+ if (!interactive) throw new Error("connect: Set VOID_TOKEN and a matching VOID_API_URL, or use --no-login to save the connection without authenticating.");
40
+ await promptForLoginToken(root, discovery);
41
+ }
42
+ async function runConnectCommand(root, args, interactive = Boolean(process.stdin.isTTY)) {
43
+ let target = args.platform ?? (args.url || args.noLogin ? "void" : null);
44
+ if (!target) {
45
+ if (!interactive) throw new Error("connect: Supply a platform URL or --platform cloudflare|void.");
46
+ const value = await select({
47
+ message: "Where should this project deploy?",
48
+ initialValue: readDeploymentPlatform(root) === "void" ? "void" : "cloudflare",
49
+ options: [{
50
+ value: "cloudflare",
51
+ label: "Cloudflare",
52
+ hint: "Deploy to your own Cloudflare account."
53
+ }, {
54
+ value: "void",
55
+ label: "Void",
56
+ hint: "Deploy to your company's Void Platform."
57
+ }]
58
+ });
59
+ if (isCancel(value)) throw new Error("connect: Cancelled.");
60
+ target = value;
61
+ }
62
+ if (target === "cloudflare") {
63
+ await connectCloudflare(root, interactive);
64
+ writeDeploymentPlatform(root, "cloudflare");
65
+ log.success("Connected to Cloudflare. Run `void deploy` to deploy this project.");
66
+ return;
67
+ }
68
+ const discovery = await discoverPlatform(args.url || await selectVoidPlatform(interactive));
69
+ if (!args.noLogin) await authenticateConnection(root, discovery, interactive);
70
+ saveDiscoveredPlatform(discovery);
71
+ const envUrl = process.env.VOID_API_URL;
72
+ const selected = Boolean(envUrl && normalizePlatformApiUrl(envUrl) !== discovery.apiUrl || process.env.VOID_TOKEN && !envUrl) ? false : writePlatformSelection(root, discovery);
73
+ log.success(`Connected to ${discovery.displayName} at ${discovery.apiUrl}.`);
74
+ if (!selected) log.info("Saved the connection. The current project link or environment still selects its existing destination.");
75
+ if (args.noLogin) log.info("Connection saved without login. Run `void auth login` in a project using this platform when ready.");
76
+ else if (selected) log.info("Run `void project link` to select a project, then `void deploy`.");
77
+ }
78
+ //#endregion
79
+ export { runConnectCommand };
@@ -1,13 +1,18 @@
1
- import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
- import { A as text, S as confirm, T as log, j as isCancel, k as select, u as import_picocolors, x as cancel } from "./agents-CtgBYqld.mjs";
3
- import { S as writeProjectConfig, d as getSiteDomain, t as PlatformApiError } from "./client-Gb71-XkG.mjs";
4
- import { n as inferDefaultSlug } from "./resolve-project-BBMtLLV9.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
2
+ import { C as cancel, D as log, F as isCancel, N as text, c as import_picocolors, j as select, w as confirm } from "./output-tFQLLj26.mjs";
3
+ import { T as writeProjectConfig, s as getSiteDomain, v as attachSelectedPlatform } from "./auth-W9WII-mN.mjs";
4
+ import { t as PlatformApiError } from "./client-CyCHWSO_.mjs";
5
+ import { n as inferDefaultSlug } from "./resolve-project--Vxawf7z.mjs";
5
6
  //#region src/cli/project-slug.ts
6
- var project_slug_exports = /* @__PURE__ */ __exportAll({ validateProjectSlug: () => validateProjectSlug });
7
+ var project_slug_exports = /* @__PURE__ */ __exportAll({
8
+ MAX_SLUG_LENGTH: () => 56,
9
+ validateProjectSlug: () => validateProjectSlug
10
+ });
7
11
  function validateProjectSlug(value) {
8
12
  const slug = (value ?? "").trim();
9
13
  if (slug.length === 0) return "Project slug is required.";
10
14
  if (!(slug.length === 1 ? /^[a-z0-9]$/.test(slug) : /^[a-z0-9][a-z0-9-]*[a-z0-9]$/.test(slug))) return "Slug must be lowercase alphanumeric with dashes.";
15
+ if (slug.length > 56) return `Slug must be at most 56 characters (it forms the email sender <slug>+noreply@).`;
11
16
  }
12
17
  //#endregion
13
18
  //#region src/cli/prompt.ts
@@ -22,22 +27,23 @@ async function promptProjectSetupAction(message = "Set up a Void project:", opti
22
27
  label: "Link an existing project"
23
28
  }]]
24
29
  });
25
- if (isCancel(result)) {
30
+ if (isCancel(result) || typeof result === "symbol") {
26
31
  cancel("Deploy cancelled.");
27
32
  process.exit(0);
28
33
  }
29
34
  return result;
30
35
  }
31
36
  async function promptProjectSelection(projects, message = "Select a project:", root = process.cwd(), options = {}) {
37
+ const choices = [...options.includeCreate === false ? [] : [{
38
+ value: "__create__",
39
+ label: "Create new project"
40
+ }], ...projects.map((p) => ({
41
+ value: p.id,
42
+ label: `${p.slug} (${p.url ?? `${p.slug}.${getSiteDomain(root)}`})`
43
+ }))];
32
44
  const result = await select({
33
45
  message,
34
- options: [...options.includeCreate === false ? [] : [{
35
- value: "__create__",
36
- label: "Create new project"
37
- }], ...projects.map((p) => ({
38
- value: p.id,
39
- label: `${p.slug} (${p.slug}.${getSiteDomain(root)})`
40
- }))]
46
+ options: choices
41
47
  });
42
48
  if (isCancel(result)) {
43
49
  cancel("Deploy cancelled.");
@@ -46,7 +52,7 @@ async function promptProjectSelection(projects, message = "Select a project:", r
46
52
  if (result === "__create__") return { action: "create" };
47
53
  const project = projects.find((p) => p.id === result);
48
54
  if (options.confirmExisting) {
49
- const confirmed = await confirm({ message: `Linking to an existing project. Running \`void deploy\` will overwrite the current deployment of ${project.slug}.${getSiteDomain(root)}. Continue?` });
55
+ const confirmed = await confirm({ message: `Linking to an existing project. Running \`void deploy\` will overwrite the current deployment of ${project.url ?? `${project.slug}.${getSiteDomain(root)}`}. Continue?` });
50
56
  if (isCancel(confirmed) || !confirmed) {
51
57
  cancel("Project link cancelled.");
52
58
  process.exit(0);
@@ -64,7 +70,7 @@ async function promptProjectSlug(defaultSlug) {
64
70
  initialValue: defaultSlug,
65
71
  validate: validateProjectSlug
66
72
  });
67
- if (isCancel(result)) {
73
+ if (isCancel(result) || typeof result === "symbol") {
68
74
  cancel("Deploy cancelled.");
69
75
  process.exit(0);
70
76
  }
@@ -114,7 +120,11 @@ async function promptAndCreateProject(root, client) {
114
120
  projectId: project.id,
115
121
  slug: project.slug
116
122
  };
117
- writeProjectConfig(root, config);
123
+ writeProjectConfig(root, attachSelectedPlatform(root, config, client.apiUrl));
124
+ if (project.owner_email_destination) {
125
+ const { address } = project.owner_email_destination;
126
+ log.info(`Registering ${address} as a recipient for this project. Cloudflare emails it a verification link unless it is already verified — \`void email destinations\` shows the state.`);
127
+ }
118
128
  return config;
119
129
  }
120
130
  function isRetryableCreateError(error) {
@@ -0,0 +1,21 @@
1
+ //#region src/database-provider.d.ts
2
+ export type DatabaseProviderDialect = "postgresql" | "mysql";
3
+ export type DatabaseProvisionOptions = {
4
+ name: string;
5
+ dialect: DatabaseProviderDialect;
6
+ region?: string;
7
+ signal?: AbortSignal;
8
+ };
9
+ export type DatabaseProvisionResult = {
10
+ connectionString: string;
11
+ projectId?: string;
12
+ dashboardUrl?: string;
13
+ };
14
+ export type DatabaseProviderAdapter = {
15
+ id: string;
16
+ label: string;
17
+ dialects: ReadonlyArray<DatabaseProviderDialect>;
18
+ provision(options: DatabaseProvisionOptions): Promise<DatabaseProvisionResult>;
19
+ };
20
+ export declare function defineDatabaseProvider(adapter: DatabaseProviderAdapter): DatabaseProviderAdapter;
21
+ //#endregion
@@ -0,0 +1,6 @@
1
+ //#region src/database-provider.ts
2
+ function defineDatabaseProvider(adapter) {
3
+ return adapter;
4
+ }
5
+ //#endregion
6
+ export { defineDatabaseProvider };