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
@@ -1,6 +1,8 @@
1
- import { D as log, c as import_picocolors, k as note } from "./output-B0cfNSx5.mjs";
2
- import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
3
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
1
+ import { c as import_picocolors } from "./output-urU86XeT.mjs";
2
+ import { c as getToken } from "./auth-B9_D6ygs.mjs";
3
+ import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-CWNIPoXc.mjs";
4
+ import { N as note, j as log } from "./dist-Dn6nn2IU.mjs";
5
+ import { n as PlatformClient } from "./client-PdAJ-F0t.mjs";
4
6
  //#region src/cli/domain.ts
5
7
  async function runDomainCommand(root, args) {
6
8
  const platform = readDeploymentPlatform(root);
@@ -38,7 +40,7 @@ async function runDomainCommand(root, args) {
38
40
  }
39
41
  async function runCloudflareDomainCommand(root, args) {
40
42
  if (args.projectSlug) throw new Error("domain: --project selects a Void platform project and is not used for direct Cloudflare apps.");
41
- const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-BzWnlC1_.mjs").then((n) => n.t);
43
+ const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-BHNJVDbN.mjs");
42
44
  if (args.subcommand === "add") {
43
45
  const result = await changeCloudflareDomain(root, args.hostname, "add");
44
46
  log.success(result.modified ? `Domain ${args.hostname} added and activated on Cloudflare.` : `Domain ${args.hostname} is already configured.`);
@@ -64,7 +66,7 @@ async function runCloudflareDomainCommand(root, args) {
64
66
  log.error(`domain: Domain '${args.hostname}' is not configured for this Worker.`);
65
67
  process.exit(1);
66
68
  }
67
- const lines = [`Hostname: ${domain.pattern}`, "Status: configured locally — present in wrangler.jsonc; remote certificate state is managed by Cloudflare."];
69
+ const lines = [`Hostname: ${domain.pattern}`, "Status: configured locally — present in Void Cloudflare config; remote certificate state is managed by Cloudflare."];
68
70
  if (args.verbose) lines.push("", "Details:", " Type: Cloudflare Custom Domain", " TLS: managed");
69
71
  note(lines.join("\n"), "Domain Status");
70
72
  }
@@ -1,82 +1,5 @@
1
- import { c as relative, o as join } from "./dist-BrsS7cai.mjs";
2
1
  import { a as isVoidSocialAuthProvider } from "./providers-CJlNS3kT.mjs";
3
- import { r as writeFileIfChanged } from "./project-tsconfig-Ql2XsSQp.mjs";
4
- import { mkdirSync } from "node:fs";
5
2
  import { getAuthTables, getSchema } from "better-auth/db";
6
- //#region src/codegen/db-types.ts
7
- const DRIZZLE_OPERATORS = "sql, eq, ne, gt, gte, lt, lte, and, or, not, desc, asc, like, ilike, notLike, inArray, notInArray, isNull, isNotNull, between, notBetween, exists, notExists, count, sum, avg, min, max";
8
- /**
9
- * Generate `.void/db.d.ts` with Drizzle types referencing the user's schema.
10
- *
11
- * This is a proper module file (not `declare module`) whose types override
12
- * the base `void/db` package via a tsconfig `paths` redirect:
13
- * "void/db": ["./.void/db.d.ts"]
14
- *
15
- * Imports reference `void/_db` (internal subpath pointing at the same
16
- * base module) to avoid circular resolution through the paths redirect.
17
- */
18
- function generateDbDts(outDir, schema, dialect) {
19
- mkdirSync(outDir, { recursive: true });
20
- const lines = dialect === "mysql" ? schema ? [
21
- "// Auto-generated by void — do not edit",
22
- "import type { MySql2Database } from \"void/_db-mysql\";",
23
- "import type * as schema from \"@schema\";",
24
- "type Schema = typeof schema;",
25
- "export declare const db: MySql2Database<Schema>;",
26
- "export declare function createDb(connectionString: string): MySql2Database<Schema>;",
27
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
28
- "export type { MySql2Database } from \"void/_db-mysql\";",
29
- ""
30
- ] : [
31
- "// Auto-generated by void — do not edit",
32
- "import type { MySql2Database } from \"void/_db-mysql\";",
33
- "export declare const db: MySql2Database<Record<string, never>>;",
34
- "export declare function createDb(connectionString: string): MySql2Database<Record<string, never>>;",
35
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
36
- "export type { MySql2Database } from \"void/_db-mysql\";",
37
- ""
38
- ] : dialect === "postgresql" ? schema ? [
39
- "// Auto-generated by void — do not edit",
40
- "import type { NodePgDatabase } from \"void/_db-pg\";",
41
- "import type * as schema from \"@schema\";",
42
- "type Schema = typeof schema;",
43
- "export declare const db: NodePgDatabase<Schema>;",
44
- "export declare function createDb(connectionString: string): NodePgDatabase<Schema>;",
45
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
46
- "export type { NodePgDatabase } from \"void/_db-pg\";",
47
- ""
48
- ] : [
49
- "// Auto-generated by void — do not edit",
50
- "import type { NodePgDatabase } from \"void/_db-pg\";",
51
- "export declare const db: NodePgDatabase<Record<string, never>>;",
52
- "export declare function createDb(connectionString: string): NodePgDatabase<Record<string, never>>;",
53
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
54
- "export type { NodePgDatabase } from \"void/_db-pg\";",
55
- ""
56
- ] : schema ? [
57
- "// Auto-generated by void — do not edit",
58
- "/// <reference types=\"@cloudflare/workers-types\" />",
59
- "import type { DrizzleD1Database } from \"void/_db\";",
60
- "import type * as schema from \"@schema\";",
61
- "type Schema = typeof schema;",
62
- "export declare const db: DrizzleD1Database<Schema>;",
63
- "export declare function createDb(d1: D1Database): DrizzleD1Database<Schema>;",
64
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
65
- "export type { DrizzleD1Database } from \"void/_db\";",
66
- ""
67
- ] : [
68
- "// Auto-generated by void — do not edit",
69
- "/// <reference types=\"@cloudflare/workers-types\" />",
70
- "import type { DrizzleD1Database } from \"void/_db\";",
71
- "export declare const db: DrizzleD1Database<Record<string, never>>;",
72
- "export declare function createDb(d1: D1Database): DrizzleD1Database<Record<string, never>>;",
73
- `export { ${DRIZZLE_OPERATORS} } from "void/_db";`,
74
- "export type { DrizzleD1Database } from \"void/_db\";",
75
- ""
76
- ];
77
- return writeFileIfChanged(join(outDir, "db.d.ts"), lines.join("\n"));
78
- }
79
- //#endregion
80
3
  //#region src/auth/drizzle.ts
81
4
  const DEFAULT_TABLE_ORDER = Number.MAX_SAFE_INTEGER;
82
5
  function resolveEmailAndPassword(configuredProviders) {
@@ -341,206 +264,4 @@ function generateVoidAuthDatabaseModule(options) {
341
264
  ].join("\n");
342
265
  }
343
266
  //#endregion
344
- //#region src/codegen/queue-types.ts
345
- /**
346
- * Generate .void/queues.d.ts content.
347
- *
348
- * Augments `void/queues` with a typed `QueueMap` interface
349
- * so `queues.emails.send(body)` is fully typed from the consumer's
350
- * `defineQueue<T>` phantom type.
351
- */
352
- function generateQueueTypes(queues, queuesDir, outDir) {
353
- const lines = [];
354
- lines.push("// Auto-generated by void — do not edit");
355
- lines.push("export interface QueueMap {");
356
- for (const q of queues) {
357
- const absPath = `${queuesDir}/${q.filePath}`;
358
- const importPath = relative(outDir, absPath);
359
- lines.push(` ${JSON.stringify(q.name)}: Queue<(typeof import(${JSON.stringify(importPath)}))["default"]["__payload"]>;`);
360
- }
361
- lines.push("}");
362
- lines.push("");
363
- lines.push("export declare const queues: QueueMap;");
364
- lines.push("");
365
- return lines.join("\n");
366
- }
367
- //#endregion
368
- //#region src/codegen/route-types.ts
369
- /**
370
- * Generate .void/routes.d.ts content.
371
- *
372
- * Uses `typeof import(...)` so TypeScript resolves all types.
373
- * The codegen generates scaffolding only — never analyzes types itself.
374
- */
375
- function generateRouteTypes(scan, routesDir, outDir, pagesDir) {
376
- const lines = [];
377
- lines.push("// Auto-generated by void — do not edit");
378
- lines.push("export {}");
379
- lines.push("type StandardSchemaV1<Input = unknown, Output = Input> = {");
380
- lines.push(" readonly \"~standard\": {");
381
- lines.push(" readonly version: 1;");
382
- lines.push(" readonly vendor: string;");
383
- lines.push(" readonly validate: (value: unknown) => unknown;");
384
- lines.push(" readonly types?: { readonly input: Input; readonly output: Output } | undefined;");
385
- lines.push(" };");
386
- lines.push("};");
387
- lines.push("declare namespace StandardSchemaV1 {");
388
- lines.push(" type InferInput<Schema extends StandardSchemaV1> = NonNullable<");
389
- lines.push(" Schema[\"~standard\"][\"types\"]");
390
- lines.push(" >[\"input\"];");
391
- lines.push(" type InferOutput<Schema extends StandardSchemaV1> = NonNullable<");
392
- lines.push(" Schema[\"~standard\"][\"types\"]");
393
- lines.push(" >[\"output\"];");
394
- lines.push("}");
395
- lines.push("");
396
- lines.push("type Serialize<T> =");
397
- lines.push(" T extends Response ? never :");
398
- lines.push(" T extends Date ? string :");
399
- lines.push(" T extends bigint ? never :");
400
- lines.push(" T extends Function ? never :");
401
- lines.push(" T extends undefined ? never :");
402
- lines.push(" T extends Array<infer U> ? Array<Serialize<U>> :");
403
- lines.push(" T extends object ? { [K in keyof T as T[K] extends Function ? never : K]: Serialize<T[K]> } :");
404
- lines.push(" T;");
405
- lines.push("");
406
- lines.push("type ExtractInput<V> = {");
407
- lines.push(" [K in keyof V as V[K] extends StandardSchemaV1 ? K : never]:");
408
- lines.push(" V[K] extends StandardSchemaV1 ? StandardSchemaV1.InferInput<V[K]> : never;");
409
- lines.push("};");
410
- lines.push("");
411
- lines.push("type ExtractOutput<S> =");
412
- lines.push(" S extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<S> : never;");
413
- lines.push("");
414
- lines.push("type RouteParams<P extends readonly string[]> =");
415
- lines.push(" P extends readonly [] ? Record<string, never> : { [K in P[number]]: string };");
416
- lines.push("");
417
- lines.push("declare module \"void/routes\" {");
418
- lines.push(" export interface RouteMap {}");
419
- lines.push(" export interface WebSocketRouteMap {}");
420
- lines.push(" export interface PageActionMap {}");
421
- lines.push("");
422
- lines.push(" /** Union of known route patterns (keys of the generated RouteMap). */");
423
- lines.push(" export type RouteName = keyof RouteMap;");
424
- lines.push("");
425
- lines.push(" /**");
426
- lines.push(" * Destination type for rewrites / fallbacks / c.rewrite().");
427
- lines.push(" *");
428
- lines.push(" * The `string & {}` branch keeps IDE autocomplete of known routes while");
429
- lines.push(" * still accepting arbitrary strings (needed for dynamic paths like");
430
- lines.push(" * `/users/${id}`). When no routes are generated yet, `RouteName` is");
431
- lines.push(" * `never` and this degenerates to `string & {}`, which is assignable");
432
- lines.push(" * from any string.");
433
- lines.push(" */");
434
- lines.push(" export type RewriteDestination = RouteName | (string & {});");
435
- lines.push("");
436
- lines.push(" export type ParseActionUrl<U extends string> = U extends `${infer Base}?${infer Action}` ? {");
437
- lines.push(" base: Base;");
438
- lines.push(" action: Action;");
439
- lines.push(" } : {");
440
- lines.push(" base: U;");
441
- lines.push(" action: never;");
442
- lines.push(" };");
443
- lines.push("");
444
- lines.push(" export type ResolveActionBody<U extends string> =");
445
- lines.push(" ParseActionUrl<U>[\"base\"] extends keyof PageActionMap");
446
- lines.push(" ? ParseActionUrl<U>[\"action\"] extends never");
447
- lines.push(" ? PageActionMap[ParseActionUrl<U>[\"base\"]] extends { body: infer B }");
448
- lines.push(" ? B");
449
- lines.push(" : Record<string, unknown>");
450
- lines.push(" : PageActionMap[ParseActionUrl<U>[\"base\"]] extends { actions: infer A }");
451
- lines.push(" ? ParseActionUrl<U>[\"action\"] extends keyof A");
452
- lines.push(" ? A[ParseActionUrl<U>[\"action\"]] extends { body: infer B }");
453
- lines.push(" ? B");
454
- lines.push(" : Record<string, unknown>");
455
- lines.push(" : never");
456
- lines.push(" : never");
457
- lines.push(" : Record<string, unknown>;");
458
- lines.push("");
459
- lines.push(" export type ResolveActionParams<U extends string> =");
460
- lines.push(" ParseActionUrl<U>[\"base\"] extends keyof PageActionMap");
461
- lines.push(" ? PageActionMap[ParseActionUrl<U>[\"base\"]] extends { params: infer P }");
462
- lines.push(" ? P");
463
- lines.push(" : never");
464
- lines.push(" : never;");
465
- lines.push("");
466
- lines.push(" export type HasActionParams<U extends string> =");
467
- lines.push(" ResolveActionParams<U> extends Record<string, string> ? true : false;");
468
- lines.push("");
469
- lines.push(" export type ActionFormOptions<U extends string> =");
470
- lines.push(" HasActionParams<U> extends true ? { params: ResolveActionParams<U> } : { params?: never };");
471
- lines.push("");
472
- lines.push(" export type ActionUrl =");
473
- lines.push(" | {");
474
- lines.push(" [K in keyof PageActionMap]: PageActionMap[K] extends { body: any } ? K : never;");
475
- lines.push(" }[keyof PageActionMap]");
476
- lines.push(" | {");
477
- lines.push(" [K in keyof PageActionMap]: PageActionMap[K] extends { actions: infer A }");
478
- lines.push(" ? `${K & string}?${keyof A & string}`");
479
- lines.push(" : never;");
480
- lines.push(" }[keyof PageActionMap]");
481
- lines.push("");
482
- lines.push(" interface RouteMap {");
483
- for (const route of scan.routes) {
484
- if (route.methods.length === 0) continue;
485
- const absRoutePath = `${routesDir}/${route.filePath}`;
486
- const importPath = relative(outDir, absRoutePath);
487
- lines.push(` ${JSON.stringify(route.pattern)}: {`);
488
- for (const method of route.methods) {
489
- lines.push(` ${method}: {`);
490
- lines.push(` input: ExtractInput<(typeof import(${JSON.stringify(importPath)}))["${method}"]["__validators"]>;`);
491
- lines.push(` output: Serialize<Awaited<(typeof import(${JSON.stringify(importPath)}))["${method}"]["__output"]>>;`);
492
- lines.push(" };");
493
- }
494
- lines.push(" };");
495
- }
496
- lines.push(" }");
497
- lines.push("");
498
- lines.push(" interface WebSocketRouteMap {");
499
- for (const route of scan.websockets ?? []) {
500
- const absRoutePath = `${routesDir}/${route.filePath}`;
501
- const importPath = relative(outDir, absRoutePath);
502
- lines.push(` ${JSON.stringify(route.pattern)}: {`);
503
- lines.push(` params: RouteParams<${JSON.stringify(route.params)}>;`);
504
- lines.push(` client: ExtractInput<(typeof import(${JSON.stringify(importPath)}))["default"]["messages"]["client"]>;`);
505
- lines.push(` server: ExtractOutput<(typeof import(${JSON.stringify(importPath)}))["default"]["messages"]["server"]>;`);
506
- lines.push(" };");
507
- }
508
- lines.push(" }");
509
- const actionPages = scan.pages.pages.filter((p) => p.methods.includes("action") || p.methods.includes("actions"));
510
- if (actionPages.length > 0 && pagesDir) {
511
- lines.push(" interface PageActionMap {");
512
- for (const page of actionPages) {
513
- const hasAction = page.methods.includes("action");
514
- const hasActions = page.methods.includes("actions");
515
- if (hasAction && hasActions) throw new Error(`pages: Page '${page.pattern}' exports both "action" and "actions". Use one or the other.`);
516
- lines.push(` ${JSON.stringify(page.pattern)}: {`);
517
- let importPath = null;
518
- if (page.serverPath) {
519
- const absPath = `${pagesDir}/${page.serverPath}`;
520
- importPath = relative(outDir, absPath);
521
- }
522
- if (hasActions) {
523
- if (importPath) {
524
- const actionsImport = `(typeof import(${JSON.stringify(importPath)}))["actions"]`;
525
- lines.push(` actions: { [K in keyof ${actionsImport}]: {`);
526
- lines.push(` body: ExtractInput<${actionsImport}[K]["__validators"]> extends { body: infer B } ? B : Record<string, unknown>;`);
527
- lines.push(" } };");
528
- }
529
- } else if (importPath) {
530
- const importExpr = `(typeof import(${JSON.stringify(importPath)}))["action"]`;
531
- lines.push(` body: ExtractInput<${importExpr}["__validators"]> extends { body: infer B } ? B : Record<string, unknown>;`);
532
- } else lines.push(" body: Record<string, unknown>;");
533
- if (page.params.length > 0) {
534
- const paramsType = page.params.map((p) => `${p}: string`).join("; ");
535
- lines.push(` params: { ${paramsType} };`);
536
- }
537
- lines.push(" };");
538
- }
539
- lines.push(" }");
540
- }
541
- lines.push("}");
542
- lines.push("");
543
- return { dts: lines.join("\n") };
544
- }
545
- //#endregion
546
- export { resolveVoidAuthMigrationSchema as a, generateVoidAuthDrizzleSchema as i, generateQueueTypes as n, DRIZZLE_OPERATORS as o, generateVoidAuthDatabaseModule as r, generateDbDts as s, generateRouteTypes as t };
267
+ export { generateVoidAuthDrizzleSchema as n, resolveVoidAuthMigrationSchema as r, generateVoidAuthDatabaseModule as t };
@@ -1,5 +1,5 @@
1
- import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { n as globSync, t as glob } from "./dist-m40_XgNh.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
+ import { n as globSync, t as glob } from "./dist-Bn8Kodjp.mjs";
3
3
  //#region src/router/email.ts
4
4
  /**
5
5
  * Scan `email/` for inbound email handlers.
@@ -1,12 +1,14 @@
1
- import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { D as log, I as isCancel, c as import_picocolors, i as createSpinner, j as password, k as note, w as confirm } from "./output-B0cfNSx5.mjs";
3
- import { C as renderAddressMap, S as preflightEmail, a as isWranglerNonInteractiveOrCI, b as createNodeEmailDns, i as discoverRootWranglerConfig, o as loadProvisionModule, r as deriveWorkerName, s as resolveDeployTransport, t as createDeployWranglerRunner, u as runWranglerAuthToken, w as renderEmailChecklist, x as findEmailConfigConflicts, y as applyEmailSetup } from "./deploy-DTaWUS1S.mjs";
4
- import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
5
- import { S as readProjectConfig, f as openBrowser, l as getToken } from "./auth-DPl6kck4.mjs";
6
- import { k as writeProvisionedWranglerConfig } from "./wrangler--imS8n0d.mjs";
7
- import { f as readConfig } from "./config-uNGuFsI2.mjs";
8
- import { a as scanEmailHandlersSync } from "./email-Ce6SQq-i.mjs";
9
- import { n as PlatformClient, t as PlatformApiError } from "./client-dHfSJvAN.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
+ import { c as import_picocolors, i as createSpinner } from "./output-urU86XeT.mjs";
3
+ import { I as resolveDeployTransport, O as isWranglerNonInteractiveOrCI, Y as runWranglerAuthToken, _ as deriveWorkerName, _t as preflightEmail, gt as findEmailConfigConflicts, h as createDeployWranglerRunner, ht as createNodeEmailDns, k as loadProvisionModule, mt as applyEmailSetup, v as discoverRootWranglerConfig, vt as renderAddressMap, yt as renderEmailChecklist } from "./deploy-H968Lo4T.mjs";
4
+ import { n as readProjectPaths } from "./project-paths-CKQ-Q5JS.mjs";
5
+ import { c as getToken, d as openBrowser } from "./auth-B9_D6ygs.mjs";
6
+ import { o as readProjectConfig } from "./project-CWNIPoXc.mjs";
7
+ import { m as readConfig } from "./config-Dxr6cTXn.mjs";
8
+ import { k as writeProvisionedWranglerConfig } from "./wrangler-D01qs6VB.mjs";
9
+ import { E as confirm, F as password, N as note, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
10
+ import { a as scanEmailHandlersSync } from "./email-C5kaZXzJ.mjs";
11
+ import { n as PlatformClient, t as PlatformApiError } from "./client-PdAJ-F0t.mjs";
10
12
  import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
11
13
  import { tmpdir } from "node:os";
12
14
  import { execSync } from "node:child_process";
@@ -665,7 +667,7 @@ async function runEmailCloudflareCommand(root, args, deps = {}) {
665
667
  const rawExit = deps.exit ?? ((code) => process.exit(code));
666
668
  const from = readConfig(root).email?.from;
667
669
  if (!from) {
668
- log.error("email: no sender configured. Add \"email\": { \"from\": \"you@mail.acme.com\" } to void.json — its host is the domain email is set up on.");
670
+ log.error("email: no sender configured. Set email.from to \"you@mail.acme.com\" in void.config.ts — its host is the domain email is set up on.");
669
671
  return rawExit(1);
670
672
  }
671
673
  const paths = readProjectPaths(root);
@@ -706,7 +708,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
706
708
  const accountId = readWranglerTopLevelString(rootConfig, "account_id") ?? (process.env.CLOUDFLARE_ACCOUNT_ID?.trim() || void 0);
707
709
  if (!accountId) return fail([
708
710
  "email: no Cloudflare account is pinned.",
709
- "Set `account_id` in your root wrangler.jsonc, or export CLOUDFLARE_ACCOUNT_ID —",
711
+ "Set `cloudflare.account_id` in void.config.ts, or export CLOUDFLARE_ACCOUNT_ID —",
710
712
  "the same pin `void deploy --platform cloudflare` needs."
711
713
  ].join("\n"));
712
714
  const workerName = readWranglerTopLevelString(rootConfig, "name") ?? deriveWorkerName(root);
@@ -757,7 +759,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
757
759
  }
758
760
  if (pre.blockers.some((b) => b.scope === "all")) return fail("email: nothing was changed — fix the ✘ rows above and rerun.");
759
761
  if (!pre.ready || pre.sendingRetryable) {
760
- if (!(deps.isInteractive ?? !isWranglerNonInteractiveOrCI())) return fail("email: `void email setup` changes your Cloudflare account, so it needs an interactive terminal. Run it locally once, commit wrangler.jsonc, then redeploy.");
762
+ if (!(deps.isInteractive ?? !isWranglerNonInteractiveOrCI())) return fail("email: `void email setup` changes your Cloudflare account, so it needs an interactive terminal. Run it locally once, commit void.lock.json, then redeploy.");
761
763
  if (!await (deps.confirm ?? (async (message) => {
762
764
  const answer = await confirm({
763
765
  message,
@@ -1,5 +1,5 @@
1
- import { c as relative, o as join } from "./dist-BrsS7cai.mjs";
2
- import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
1
+ import { a as join, l as relative } from "./dist-4WkAWhWx.mjs";
2
+ import { n as readProjectPaths } from "./project-paths-CKQ-Q5JS.mjs";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { parseSync } from "vite";
5
5
  //#region src/shared/ast.ts
@@ -1,9 +1,11 @@
1
- import { o as join } from "./dist-BrsS7cai.mjs";
2
- import { A as outro, D as log, E as intro, k as note, r as cliTitle } from "./output-B0cfNSx5.mjs";
3
- import { S as readProjectConfig, l as getToken, x as readDeploymentPlatform } from "./auth-DPl6kck4.mjs";
4
- import { r as generateEnvTypes, t as findEnvFile } from "./env-types-BNPhro-M.mjs";
5
- import { c as fetchRemoteSecretNames, l as formatEnvReport, p as validateProdEnv } from "./env-validation-CF6KvTRf.mjs";
6
- import { n as PlatformClient } from "./client-dHfSJvAN.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
+ import { r as cliTitle } from "./output-urU86XeT.mjs";
3
+ import { c as getToken } from "./auth-B9_D6ygs.mjs";
4
+ import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-CWNIPoXc.mjs";
5
+ import { r as generateEnvTypes, t as findEnvFile } from "./env-types-CWDtqHgw.mjs";
6
+ import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-BsFEXps5.mjs";
7
+ import { N as note, O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
8
+ import { n as PlatformClient } from "./client-PdAJ-F0t.mjs";
7
9
  import { mkdirSync, writeFileSync } from "node:fs";
8
10
  //#region src/cli/env.ts
9
11
  async function runEnvCommand(root, args) {
@@ -24,7 +26,7 @@ async function runCheck(root, useRemoteSecrets) {
24
26
  const platform = readDeploymentPlatform(root);
25
27
  if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
26
28
  if (platform === "cloudflare") {
27
- const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BzWnlC1_.mjs").then((n) => n.t);
29
+ const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BHNJVDbN.mjs");
28
30
  remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
29
31
  } else {
30
32
  const token = getToken(root);
@@ -1,4 +1,4 @@
1
- import { o as join } from "./dist-BrsS7cai.mjs";
1
+ import { a as join } from "./dist-4WkAWhWx.mjs";
2
2
  import { n as parseDotenvFile } from "./dotenv-VQxupEUv.mjs";
3
3
  import { readdirSync } from "node:fs";
4
4
  //#region src/shared/env.ts
@@ -0,0 +1,78 @@
1
+ import { a as getRawRuntimeEnv, i as envContext, n as INTERNAL_BINDING_PREFIXES, o as isIsrActive, r as asEnv, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-Cx8ElDdj.mjs";
2
+ import { AsyncLocalStorage } from "node:async_hooks";
3
+ //#region src/runtime/env.ts
4
+ /**
5
+ * Public runtime env API — exposed via "void/_env".
6
+ *
7
+ * All exports from this module are accessible to user code.
8
+ * Internal platform bindings (__VOID_*, __PROJECT_*) are filtered
9
+ * from getRuntimeEnv() and blocked in getRuntimeBinding().
10
+ */
11
+ const runtimeRequestContext = new AsyncLocalStorage();
12
+ /** @internal Reuse a resource only within the current runtime request. */
13
+ function getRuntimeRequestResource(key, initialize) {
14
+ const scope = runtimeRequestContext.getStore();
15
+ if (!scope) throw new Error("env: Request-scoped resource is unavailable outside a runtime handler.");
16
+ if (scope.resources.has(key)) return scope.resources.get(key);
17
+ const resource = initialize();
18
+ scope.resources.set(key, resource);
19
+ return resource;
20
+ }
21
+ function withRuntimeEnv(env, fn) {
22
+ const resolved = asEnv(env);
23
+ if (!resolved) return fn();
24
+ if (runtimeRequestContext.getStore()) return envContext.run(resolved, fn);
25
+ const scope = { resources: /* @__PURE__ */ new Map() };
26
+ return envContext.run(resolved, () => runtimeRequestContext.run(scope, fn));
27
+ }
28
+ /**
29
+ * Shared internal-binding predicate. A binding is framework-internal — and must
30
+ * never be exposed to user code — when it carries an internal prefix
31
+ * (`__VOID_`, `__PROJECT_`; always hidden) or is an exact-name internal (e.g.
32
+ * `ISR_CACHE`; hidden ONLY while ISR is active for the isolate). `rawEnv` is the
33
+ * unfiltered runtime env, consulted via {@link isIsrActive} to gate the
34
+ * exact-name check so a non-ISR app's own `ISR_CACHE` binding stays visible —
35
+ * matching the build-time `isr` gate on the generated `c.env` filter.
36
+ *
37
+ * Single source of truth for the runtime `env` filter here and the public
38
+ * `void/env` proxy (`env-public.ts`).
39
+ */
40
+ function isInternalBinding(name, rawEnv) {
41
+ if (INTERNAL_BINDING_PREFIXES.some((p) => name.startsWith(p))) return true;
42
+ return isIsrActive(rawEnv) && INTERNAL_BINDING_EXACT_NAMES.includes(name);
43
+ }
44
+ function filterEnvProxy(env) {
45
+ return new Proxy(env, {
46
+ get(target, prop, receiver) {
47
+ if (typeof prop === "string" && isInternalBinding(prop, target)) return;
48
+ return Reflect.get(target, prop, receiver);
49
+ },
50
+ has(target, prop) {
51
+ if (typeof prop === "string" && isInternalBinding(prop, target)) return false;
52
+ return Reflect.has(target, prop);
53
+ },
54
+ ownKeys(target) {
55
+ return Reflect.ownKeys(target).filter((key) => typeof key !== "string" || !isInternalBinding(key, target));
56
+ },
57
+ getOwnPropertyDescriptor(target, prop) {
58
+ if (typeof prop === "string" && isInternalBinding(prop, target)) return;
59
+ return Reflect.getOwnPropertyDescriptor(target, prop);
60
+ }
61
+ });
62
+ }
63
+ /** Returns the runtime env with internal platform bindings hidden. */
64
+ function getRuntimeEnv() {
65
+ return filterEnvProxy(getRawRuntimeEnv());
66
+ }
67
+ function getRuntimeBinding(name) {
68
+ const raw = getRawRuntimeEnv();
69
+ if (isInternalBinding(name, raw)) return;
70
+ return raw[name];
71
+ }
72
+ function requireRuntimeBinding(name) {
73
+ const value = getRuntimeBinding(name);
74
+ if (value !== void 0 && value !== null) return value;
75
+ throw new Error(`env: Missing Cloudflare binding '${name}'.`);
76
+ }
77
+ //#endregion
78
+ export { requireRuntimeBinding as a, isInternalBinding as i, getRuntimeEnv as n, withRuntimeEnv as o, getRuntimeRequestResource as r, getRuntimeBinding as t };
@@ -0,0 +1,136 @@
1
+ //#region src/runtime/env-helpers.ts
2
+ function build(parse, state) {
3
+ return {
4
+ "~standard": {
5
+ version: 1,
6
+ vendor: "void",
7
+ validate(value) {
8
+ if (value === void 0 || value === null || value === "") {
9
+ if (state.defaultValue !== void 0) return { value: state.defaultValue };
10
+ if (state.optional) return { value: void 0 };
11
+ return { issues: [{ message: "Required" }] };
12
+ }
13
+ const result = parse(typeof value === "string" ? value : String(value));
14
+ if (result.ok) return { value: result.value };
15
+ return { issues: [{ message: result.message }] };
16
+ }
17
+ },
18
+ optional() {
19
+ return build(parse, {
20
+ optional: true,
21
+ defaultValue: state.defaultValue
22
+ });
23
+ },
24
+ default(value) {
25
+ return build(parse, {
26
+ optional: false,
27
+ defaultValue: value
28
+ });
29
+ }
30
+ };
31
+ }
32
+ const empty = () => ({
33
+ optional: false,
34
+ defaultValue: void 0
35
+ });
36
+ /** Required string env value. */
37
+ function string() {
38
+ return build((raw) => ({
39
+ ok: true,
40
+ value: raw
41
+ }), empty());
42
+ }
43
+ /** Numeric env value. Parses with `Number(raw)`; rejects NaN. */
44
+ function number() {
45
+ return build((raw) => {
46
+ const n = Number(raw);
47
+ if (Number.isNaN(n)) return {
48
+ ok: false,
49
+ message: `Expected a number, got "${raw}"`
50
+ };
51
+ return {
52
+ ok: true,
53
+ value: n
54
+ };
55
+ }, empty());
56
+ }
57
+ /** Boolean env value. Accepts "true"/"false"/"1"/"0" (case-insensitive). */
58
+ function boolean() {
59
+ return build((raw) => {
60
+ const lowercased = raw.toLowerCase();
61
+ if (lowercased === "true" || lowercased === "1") return {
62
+ ok: true,
63
+ value: true
64
+ };
65
+ if (lowercased === "false" || lowercased === "0") return {
66
+ ok: true,
67
+ value: false
68
+ };
69
+ return {
70
+ ok: false,
71
+ message: `Expected boolean (true/false/1/0), got "${raw}"`
72
+ };
73
+ }, empty());
74
+ }
75
+ /** URL string — validated via `new URL(raw)`. */
76
+ function url() {
77
+ return build((raw) => {
78
+ try {
79
+ new URL(raw);
80
+ return {
81
+ ok: true,
82
+ value: raw
83
+ };
84
+ } catch {
85
+ return {
86
+ ok: false,
87
+ message: `Expected a valid URL, got "${raw}"`
88
+ };
89
+ }
90
+ }, empty());
91
+ }
92
+ const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
93
+ /** Email string — basic shape validation. */
94
+ function email() {
95
+ return build((raw) => {
96
+ if (!EMAIL_RE.test(raw)) return {
97
+ ok: false,
98
+ message: `Expected a valid email, got "${raw}"`
99
+ };
100
+ return {
101
+ ok: true,
102
+ value: raw
103
+ };
104
+ }, empty());
105
+ }
106
+ /** One of a fixed set of literal string values. */
107
+ function oneOf(values) {
108
+ return build((raw) => {
109
+ if (values.includes(raw)) return {
110
+ ok: true,
111
+ value: raw
112
+ };
113
+ return {
114
+ ok: false,
115
+ message: `Expected one of ${values.join(", ")}, got "${raw}"`
116
+ };
117
+ }, empty());
118
+ }
119
+ /** JSON-parsed env value. Specify `T` to type the parsed result. */
120
+ function json() {
121
+ return build((raw) => {
122
+ try {
123
+ return {
124
+ ok: true,
125
+ value: JSON.parse(raw)
126
+ };
127
+ } catch (e) {
128
+ return {
129
+ ok: false,
130
+ message: `Invalid JSON: ${e.message}`
131
+ };
132
+ }
133
+ }, empty());
134
+ }
135
+ //#endregion
136
+ export { oneOf as a, number as i, email as n, string as o, json as r, url as s, boolean as t };
@@ -1,5 +1,5 @@
1
- import { c as relative } from "./dist-BrsS7cai.mjs";
2
- import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
1
+ import { l as relative } from "./dist-4WkAWhWx.mjs";
2
+ import { n as readProjectPaths } from "./project-paths-CKQ-Q5JS.mjs";
3
3
  import { i as voidWarn } from "./log-ChfPKsVd.mjs";
4
4
  import { existsSync } from "node:fs";
5
5
  //#region src/codegen/env-types.ts
@@ -43,6 +43,10 @@ function generateEnvTypes(envFileAbs, outDir) {
43
43
  lines.push(" interface ValidatedEnv extends _VoidEnvShape {}");
44
44
  lines.push("}");
45
45
  lines.push("");
46
+ lines.push("declare global {");
47
+ lines.push(" interface VoidGeneratedEnvBindings extends _VoidEnvShape {}");
48
+ lines.push("}");
49
+ lines.push("");
46
50
  lines.push("declare module \"void/handler\" {");
47
51
  lines.push(" interface CloudBindings extends _VoidEnvShape {}");
48
52
  lines.push("}");