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
@@ -0,0 +1,99 @@
1
+ import { U as listInstallationManifests, et as savePlatformConnection, nt as writeInstallationManifest, z as acquirePlatformLifecycleLock } from "./output-tFQLLj26.mjs";
2
+ import { t as cfAccessHeaders } from "./cf-access-AJ1ehiFR.mjs";
3
+ import { d as createPlatformInstallPlan, t as REMOTE_INSTALLATION_MANIFEST_KEY } from "./platform-lifecycle-CjSr6xf0.mjs";
4
+ import { isPlatformManifestMonotonicExtension, recoverDurablyMarkedProvisionIntents, verifyPlatformInstallationOwnership } from "./platform-management-W30iCaTL.mjs";
5
+ import { parsePlatformInstallationManifest, setInstallationEndpoints } from "@void/platform";
6
+ //#region src/cli/platform-recovery.ts
7
+ async function recoverPlatformInstallations(client, accountId, verifyEndpoint = verifyInstallationEndpoint, selector = "") {
8
+ if (!(await client.listAccounts()).some((account) => account.id === accountId)) throw new Error(`platform: Cloudflare account ${JSON.stringify(accountId)} is unavailable.`);
9
+ const namespaces = await client.listKvNamespaces(accountId);
10
+ const recovered = [];
11
+ for (const namespace of namespaces) {
12
+ const value = await client.getKvValue(accountId, namespace.id, REMOTE_INSTALLATION_MANIFEST_KEY);
13
+ if (value === null) continue;
14
+ let manifest;
15
+ try {
16
+ manifest = parsePlatformInstallationManifest(JSON.parse(value));
17
+ } catch (error) {
18
+ throw new Error(`platform: Routing namespace ${namespace.name} contains invalid Void ownership metadata: ${error instanceof Error ? error.message : String(error)}`);
19
+ }
20
+ if (selector && manifest.id !== selector && manifest.deployment.installationSlug !== selector && manifest.deployment.displayName.toLowerCase() !== selector.toLowerCase()) continue;
21
+ const routing = manifest.resources.find((resource) => resource.key === "routing-kv");
22
+ if (manifest.account.id !== accountId || routing?.kind !== "kv-namespace" || routing.id !== namespace.id || routing.name !== namespace.name || routing.ownership !== "created" || routing.state !== "ready") throw new Error(`platform: Routing namespace ${namespace.name} does not match its ownership manifest.`);
23
+ if (manifest.status === "uninstalled") continue;
24
+ manifest = await recoverDurablyMarkedProvisionIntents(client, manifest);
25
+ const deployment = manifest.deployment;
26
+ const plan = await createPlatformInstallPlan(client, {
27
+ accountId,
28
+ applicationDomain: deployment.application.baseDomain,
29
+ controlPlaneDomain: deployment.controlPlane.apiHostname ?? "",
30
+ dedicatedZone: deployment.application.dedicatedZone,
31
+ displayName: deployment.displayName,
32
+ installationSlug: deployment.installationSlug,
33
+ zoneName: deployment.application.zoneName
34
+ }, manifest, { repairMissing: true });
35
+ manifest = reconcileRecoveredEndpoints(manifest, plan);
36
+ await verifyPlatformInstallationOwnership(client, manifest);
37
+ if (!plan.actions.some((action) => action.action === "create") && manifest.desiredState === "enabled" && manifest.status === "installed") await verifyEndpoint(manifest);
38
+ recovered.push({
39
+ manifest,
40
+ plan
41
+ });
42
+ }
43
+ const resolved = [];
44
+ for (const { manifest: recoveredManifest, plan } of recovered) {
45
+ let manifest = recoveredManifest;
46
+ const release = acquirePlatformLifecycleLock(manifest.account.id, manifest.deployment.installationSlug);
47
+ try {
48
+ const collision = listInstallationManifests().find((entry) => entry.id === manifest.id);
49
+ if (collision && (collision.account.id !== manifest.account.id || collision.ownershipNonce !== manifest.ownershipNonce)) throw new Error(`platform: Local installation ${manifest.id} has conflicting ownership.`);
50
+ if (collision && JSON.stringify(collision) !== JSON.stringify(manifest)) {
51
+ if (isPlatformManifestMonotonicExtension(manifest, collision)) {
52
+ await verifyPlatformInstallationOwnership(client, collision);
53
+ manifest = collision;
54
+ } else if (isPlatformManifestMonotonicExtension(collision, manifest)) writeInstallationManifest(manifest);
55
+ else throw new Error(`platform: Local installation ${manifest.id} differs from its remote checkpoint. Resolve or remove the local record before discovery; it was not overwritten.`);
56
+ }
57
+ manifest = reconcileRecoveredEndpoints(manifest, plan);
58
+ if (!collision) writeInstallationManifest(manifest);
59
+ else if (JSON.stringify(collision) !== JSON.stringify(manifest)) writeInstallationManifest(manifest);
60
+ if (manifest.endpoints.apiUrl !== null && manifest.endpoints.proxyUrl !== null) savePlatformConnection({
61
+ accountId: manifest.account.id,
62
+ apiUrl: manifest.endpoints.apiUrl,
63
+ applicationDomain: manifest.deployment.application.baseDomain,
64
+ displayName: manifest.deployment.displayName,
65
+ installationId: manifest.id,
66
+ kind: "installed",
67
+ proxyUrl: manifest.endpoints.proxyUrl
68
+ });
69
+ resolved.push(manifest);
70
+ } finally {
71
+ release();
72
+ }
73
+ }
74
+ return resolved;
75
+ }
76
+ function reconcileRecoveredEndpoints(manifest, plan) {
77
+ if (manifest.endpoints.apiUrl !== null && manifest.endpoints.apiUrl !== plan.apiUrl) throw new Error(`platform: Installation ${manifest.id} has inconsistent API metadata.`);
78
+ if (manifest.endpoints.proxyUrl !== null && manifest.endpoints.proxyUrl !== plan.proxyUrl) throw new Error(`platform: Installation ${manifest.id} has inconsistent proxy metadata.`);
79
+ if (manifest.endpoints.apiUrl !== null && manifest.endpoints.proxyUrl === null) return setInstallationEndpoints(manifest, {
80
+ ...manifest.endpoints,
81
+ proxyUrl: plan.proxyUrl
82
+ }, manifest.updatedAt);
83
+ return manifest;
84
+ }
85
+ async function verifyInstallationEndpoint(manifest, fetcher = fetch) {
86
+ const apiUrl = manifest.endpoints.apiUrl;
87
+ if (!apiUrl) throw new Error(`platform: Installation ${manifest.id} has no API endpoint.`);
88
+ const response = await fetcher(`${apiUrl}/.well-known/void-platform`, {
89
+ headers: {
90
+ Accept: "application/json",
91
+ ...cfAccessHeaders(process.env, apiUrl)
92
+ },
93
+ signal: AbortSignal.timeout(15e3)
94
+ });
95
+ if (!response.ok) throw new Error(`platform: Installation ${manifest.id} is not reachable (HTTP ${response.status}).`);
96
+ if ((await response.json()).installationId !== manifest.id) throw new Error(`platform: Installation ${manifest.id} endpoint identity does not match.`);
97
+ }
98
+ //#endregion
99
+ export { recoverPlatformInstallations };
@@ -1,10 +1,10 @@
1
- import { a as join } from "./dist-DaKKDf8D.mjs";
2
- import { n as readProjectPaths } from "./project-paths-BQd7OmIo.mjs";
3
- import { n as globSync } from "./dist-BuiRJkTd.mjs";
4
- import { c as isIdentifier, r as getSsrServerEntryPath, u as isMemberExpression } from "./entry-D7yy4xVH.mjs";
1
+ import { o as join } from "./dist-BrsS7cai.mjs";
2
+ import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
3
+ import { n as globSync } from "./dist-m40_XgNh.mjs";
4
+ import { c as isIdentifier, r as getSsrServerEntryPath, u as isMemberExpression } from "./entry-DU3oDoQ3.mjs";
5
5
  import { existsSync, readFileSync } from "node:fs";
6
- import { parseSync } from "vite";
7
6
  import { parse } from "es-module-lexer/js";
7
+ import { parseSync } from "vite";
8
8
  //#region ../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/walker.js
9
9
  /**
10
10
  * @typedef { import('estree').Node} Node
@@ -37,10 +37,12 @@ var WalkerBase = class {
37
37
  * @param {Node} node
38
38
  */
39
39
  replace(parent, prop, index, node) {
40
- if (parent && prop) if (index != null)
40
+ if (parent && prop) {
41
+ if (index != null)
41
42
  /** @type {Array<Node>} */ parent[prop][index] = node;
42
- else
43
+ else
43
44
  /** @type {Node} */ parent[prop] = node;
45
+ }
44
46
  }
45
47
  /**
46
48
  * @template {Node} Parent
@@ -49,9 +51,11 @@ var WalkerBase = class {
49
51
  * @param {number | null | undefined} index
50
52
  */
51
53
  remove(parent, prop, index) {
52
- if (parent && prop) if (index !== null && index !== void 0)
54
+ if (parent && prop) {
55
+ if (index !== null && index !== void 0)
53
56
  /** @type {Array<Node>} */ parent[prop].splice(index, 1);
54
- else delete parent[prop];
57
+ else delete parent[prop];
58
+ }
55
59
  }
56
60
  };
57
61
  //#endregion
@@ -207,12 +211,13 @@ function inferBindingsFromSource(code, filename) {
207
211
  needsQueues: false,
208
212
  needsAI: false,
209
213
  needsSandbox: false,
210
- needsLive: false
214
+ needsLive: false,
215
+ needsEmail: false
211
216
  };
212
217
  try {
213
218
  const [imports] = parse(code);
214
219
  for (const imp of imports) {
215
- const source = imp.n;
220
+ const source = imp.specifier;
216
221
  if (!source) continue;
217
222
  switch (source) {
218
223
  case "void/db":
@@ -236,15 +241,18 @@ function inferBindingsFromSource(code, filename) {
236
241
  case "void/sandbox":
237
242
  result.needsSandbox = true;
238
243
  break;
244
+ case "void/email":
245
+ if (!isTypeOnlyImportStatement(code.slice(imp.importStart, imp.importEnd + 1))) result.needsEmail = true;
246
+ break;
239
247
  case "void/live":
240
- if (!isTypeOnlyImportStatement(code.slice(imp.ss, imp.se + 1))) result.needsLive = true;
248
+ if (!isTypeOnlyImportStatement(code.slice(imp.importStart, imp.importEnd + 1))) result.needsLive = true;
241
249
  break;
242
250
  case "void/client":
243
251
  case "void/client/react":
244
252
  case "void/client/vue":
245
253
  case "void/client/svelte":
246
254
  case "void/client/solid": {
247
- const stmt = code.slice(imp.ss, imp.se + 1);
255
+ const stmt = code.slice(imp.importStart, imp.importEnd + 1);
248
256
  if (/\bauth\b/.test(stmt)) result.needsAuth = true;
249
257
  break;
250
258
  }
@@ -258,6 +266,7 @@ function inferBindingsFromSource(code, filename) {
258
266
  if (/\bfrom\s+["']void\/queue["']/.test(code)) result.needsQueues = true;
259
267
  if (/\bfrom\s+["']void\/ai["']/.test(code)) result.needsAI = true;
260
268
  if (/\bfrom\s+["']void\/sandbox["']/.test(code)) result.needsSandbox = true;
269
+ if (hasRuntimeImportFrom(code, "void/email")) result.needsEmail = true;
261
270
  if (hasRuntimeImportFrom(code, "void/live")) result.needsLive = true;
262
271
  if (/\bfrom\s+["']void\/client(?:\/(?:react|vue|svelte|solid))?["']/.test(code) && /\bauth\b/.test(code)) result.needsAuth = true;
263
272
  }
@@ -296,9 +305,7 @@ function inferBindingsFromSource(code, filename) {
296
305
  case "SANDBOX":
297
306
  result.needsSandbox = true;
298
307
  break;
299
- default:
300
- if (property.name.startsWith("QUEUE_")) result.needsQueues = true;
301
- break;
308
+ default: if (property.name.startsWith("QUEUE_")) result.needsQueues = true;
302
309
  }
303
310
  } });
304
311
  return result;
@@ -334,7 +341,8 @@ function mergeBindings(bindings) {
334
341
  needsQueues: bindings.some((b) => b.needsQueues),
335
342
  needsAI: bindings.some((b) => b.needsAI),
336
343
  needsSandbox: bindings.some((b) => b.needsSandbox),
337
- needsLive: bindings.some((b) => b.needsLive)
344
+ needsLive: bindings.some((b) => b.needsLive),
345
+ needsEmail: bindings.some((b) => b.needsEmail)
338
346
  };
339
347
  }
340
348
  //#endregion
@@ -350,13 +358,20 @@ const FRAMEWORK_SCAN_DIRS = [
350
358
  "crons",
351
359
  "queues"
352
360
  ];
353
- /** Directories to scan for binding inference in Void app mode. */
361
+ /**
362
+ * Directories to scan for binding inference in Void app mode.
363
+ *
364
+ * `email` is included so a `sendEmail()` call from inside an inbound handler
365
+ * (`email/<addr>.ts`) registers `needsEmail = true`. Otherwise the manifest
366
+ * flag and the dev-inbox plugin would miss those callsites.
367
+ */
354
368
  const DEFAULT_SCAN_DIRS = [
355
369
  "routes",
356
370
  "middleware",
357
371
  "queues",
358
372
  "pages",
359
373
  "crons",
374
+ "email",
360
375
  "src"
361
376
  ];
362
377
  /**
@@ -444,7 +459,8 @@ function inferProjectBindings(root, options, scanDirs) {
444
459
  needsQueues: false,
445
460
  needsAI: Boolean(options.bindings.ai),
446
461
  needsSandbox: false,
447
- needsLive: false
462
+ needsLive: false,
463
+ needsEmail: Boolean(options.bindings.email)
448
464
  };
449
465
  const paths = options?.paths ?? readProjectPaths(root);
450
466
  const dirs = scanDirs ?? (paths.sourceDir ? [paths.sourceDir] : DEFAULT_SCAN_DIRS);
@@ -0,0 +1,14 @@
1
+ import { D as log, E as intro, O as note, k as outro, r as cliTitle } from "./output-tFQLLj26.mjs";
2
+ import { prepareProject } from "./prepare-CBetXvsN.mjs";
3
+ //#region src/cli/prepare.ts
4
+ async function runPrepareCommand(root, _args) {
5
+ console.log();
6
+ intro(cliTitle("prepare"));
7
+ const result = await prepareProject(root);
8
+ if (result.written.length > 0) note(result.written.join("\n"), "Wrote");
9
+ if (result.removed.length > 0) note(result.removed.join("\n"), "Removed stale files");
10
+ if (result.written.length === 0 && result.removed.length === 0) log.info("No generated files changed.");
11
+ outro("Project codegen is ready.");
12
+ }
13
+ //#endregion
14
+ export { runPrepareCommand };
@@ -1,16 +1,15 @@
1
- import { a as join } from "./dist-DaKKDf8D.mjs";
2
- import { D as outro, E as note, T as log, a as cliTitle, w as intro } from "./agents-CtgBYqld.mjs";
3
- import { i as resolveProjectPaths } from "./project-paths-BQd7OmIo.mjs";
4
- import { c as loadVoidAuthConfig, r as scanRoutes, s as findVoidAuthConfig } from "./scan-DYXkrasO.mjs";
5
- import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-B-QtXjLQ.mjs";
6
- import { c as getDatabaseDialect, f as readConfig } from "./config-BkTvs43g.mjs";
7
- import { i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, r as detectFramework } from "./plugin-inference-DMeavIJ6.mjs";
8
- import { i as generateVoidAuthDrizzleSchema, n as generateQueueTypes, r as generateVoidAuthDatabaseModule, s as generateDbDts, t as generateRouteTypes } from "./route-types-COI2DsZv.mjs";
9
- import { t as discoverSchema } from "./discover-CJHyvYfR.mjs";
10
- import { r as generateEnvTypes, t as findEnvFile } from "./env-types-QBj-ndax.mjs";
1
+ import { o as join } from "./dist-BrsS7cai.mjs";
2
+ import { i as resolveProjectPaths } from "./project-paths-SK8nMHPp.mjs";
3
+ import { c as loadVoidAuthConfig, r as scanRoutes, s as findVoidAuthConfig } from "./scan-BMH4rzlv.mjs";
4
+ import { c as getDatabaseDialect, f as readConfig } from "./config-BQFq7QvD.mjs";
5
+ import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-Ql2XsSQp.mjs";
6
+ import { i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, r as detectFramework } from "./plugin-inference-BDRfZngg.mjs";
7
+ import { i as generateVoidAuthDrizzleSchema, n as generateQueueTypes, r as generateVoidAuthDatabaseModule, s as generateDbDts, t as generateRouteTypes } from "./route-types-Da-DpyUp.mjs";
8
+ import { t as discoverSchema } from "./discover-xvfrgJeo.mjs";
9
+ import { r as generateEnvTypes, t as findEnvFile } from "./env-types-BNPhro-M.mjs";
10
+ import { a as loadLocalEnv } from "./env-D4Emu-M_.mjs";
11
11
  import { existsSync, mkdirSync, rmSync } from "node:fs";
12
12
  import { fileURLToPath } from "node:url";
13
- import { loadEnv } from "vite";
14
13
  //#region src/codegen/prepare.ts
15
14
  function writeGeneratedFile(outDir, fileName, content, written) {
16
15
  mkdirSync(outDir, { recursive: true });
@@ -66,7 +65,10 @@ async function prepareProject(root) {
66
65
  providers: config.auth?.providers ?? null,
67
66
  userConfig: await loadVoidAuthConfig(authConfigPath)
68
67
  };
69
- const env = loadEnv("development", root, "");
68
+ const env = {
69
+ ...loadLocalEnv(root),
70
+ ...process.env
71
+ };
70
72
  const schemaPath = join(outDir, "better-auth-schema.ts");
71
73
  const databasePath = join(outDir, "better-auth-db.ts");
72
74
  const drizzleAdapterPath = fileURLToPath(import.meta.resolve("better-auth/adapters/drizzle"));
@@ -87,15 +89,4 @@ async function prepareProject(root) {
87
89
  };
88
90
  }
89
91
  //#endregion
90
- //#region src/cli/prepare.ts
91
- async function runPrepareCommand(root, _args) {
92
- console.log();
93
- intro(cliTitle("prepare"));
94
- const result = await prepareProject(root);
95
- if (result.written.length > 0) note(result.written.join("\n"), "Wrote");
96
- if (result.removed.length > 0) note(result.removed.join("\n"), "Removed stale files");
97
- if (result.written.length === 0 && result.removed.length === 0) log.info("No generated files changed.");
98
- outro("Project codegen is ready.");
99
- }
100
- //#endregion
101
- export { runPrepareCommand };
92
+ export { prepareProject };
@@ -1,207 +1,10 @@
1
- import { a as join, c as resolve, n as dirname, s as relative } from "./dist-DaKKDf8D.mjs";
2
- import { n as readProjectPaths } from "./project-paths-BQd7OmIo.mjs";
3
- import { i as hasSsrEntry, r as getSsrServerEntryPath } from "./entry-D7yy4xVH.mjs";
4
- import { i as readPackageJson, n as hasPackageDependency, t as getPackageDependencies } from "./package-json-Cx1osYo6.mjs";
1
+ import { c as relative, l as resolve, n as dirname, o as join } from "./dist-BrsS7cai.mjs";
2
+ import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
3
+ import { i as hasSsrEntry, r as getSsrServerEntryPath } from "./entry-DU3oDoQ3.mjs";
4
+ import { i as readPackageJson, n as hasPackageDependency, t as getPackageDependencies } from "./package-json-CPoWX79C.mjs";
5
5
  import { createRequire } from "node:module";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { fileURLToPath } from "node:url";
8
- //#region src/shared/dotenv.ts
9
- /**
10
- * Shared dotenv parser + variable expander used by every CLI path that reads
11
- * `.env*` files (`void env check`, `void deploy`, `void init` scaffold
12
- * inference). A single source of truth avoids the drift we hit when two
13
- * hand-rolled parsers diverged on quoting / expansion semantics.
14
- *
15
- * Expansion supports `${VAR}` and `$VAR`, a `\$VAR` literal-escape, and
16
- * transitive references across earlier entries in the same record. Cycles
17
- * are detected and fall through to the raw literal rather than looping.
18
- *
19
- * Security note: expansion is deliberately scoped to the in-file record.
20
- * We do NOT consult `process.env` the way `dotenv-expand` does — a shell
21
- * env leaking into an `.env.example` via expansion would silently reveal
22
- * developer machine state in committed output, and `void env check` /
23
- * `void deploy` would then pass with values that aren't present in CI.
24
- *
25
- * The runtime path (Vite's own `loadEnv`) DOES consult `process.env` for
26
- * expansion. That's a deliberate Vite choice; `filterLoadedEnv` strips
27
- * shell pollution from the final worker vars so the two sides agree on
28
- * the observable surface even when expansion sources differ.
29
- *
30
- * This module is a leaf — it must not import from `../log` or any non-leaf
31
- * module so that the prerender subprocess's worker bundle doesn't pick up
32
- * unwanted transitive dependencies. Warnings are surfaced through the
33
- * `onWarn` callback and left for the caller to route.
34
- */
35
- /** Valid dotenv key — ASCII letter/underscore followed by letters/digits/underscore. */
36
- const VALID_KEY = /^[A-Za-z_][A-Za-z0-9_]*$/;
37
- /**
38
- * Parse a single `KEY=VALUE` line into `{ key, value }`, stripping matching
39
- * single/double quotes around the value. Returns `null` for blanks, comments,
40
- * and non-assignment lines.
41
- */
42
- function parseDotenvLine(line) {
43
- const trimmed = line.trim();
44
- if (!trimmed || trimmed.startsWith("#")) return null;
45
- const equalsIndex = trimmed.indexOf("=");
46
- if (equalsIndex === -1) return null;
47
- const key = trimmed.slice(0, equalsIndex).trim();
48
- let value = trimmed.slice(equalsIndex + 1).trim();
49
- if (value.startsWith("\"") && value.endsWith("\"") || value.startsWith("'") && value.endsWith("'")) value = value.slice(1, -1);
50
- return {
51
- key,
52
- value
53
- };
54
- }
55
- /**
56
- * Parse the raw contents of a dotenv file into a record, optionally
57
- * expanding `${VAR}` / `$VAR` references against earlier entries.
58
- */
59
- function parseDotenv(content, options = {}) {
60
- const { expand: shouldExpand = true, skipInvalidKeys = true, onWarn } = options;
61
- const env = {};
62
- for (const line of content.split("\n")) {
63
- const parsed = parseDotenvLine(line);
64
- if (!parsed) continue;
65
- if (!VALID_KEY.test(parsed.key)) {
66
- if (skipInvalidKeys) continue;
67
- throw new Error(`dotenv: Invalid key '${parsed.key}'.`);
68
- }
69
- env[parsed.key] = parsed.value;
70
- }
71
- return shouldExpand ? expandDotenv(env, { onWarn }) : env;
72
- }
73
- /**
74
- * Read and parse a dotenv file. Returns `{}` when the file is missing so
75
- * callers can treat "no file" and "empty file" identically.
76
- */
77
- function parseDotenvFile(filePath, options = {}) {
78
- if (!existsSync(filePath)) return {};
79
- return parseDotenv(readFileSync(filePath, "utf-8"), options);
80
- }
81
- /**
82
- * Expand `${VAR}` / `$VAR` references in every value of a record against
83
- * the other entries in that same record. Matches the surface of
84
- * `dotenv-expand` minus the `process.env` fallback.
85
- *
86
- * Semantics:
87
- * - `${VAR}` and `$VAR` both resolve (bare form stops at the first
88
- * non-identifier character).
89
- * - `\$VAR` stays literal; the backslash is consumed.
90
- * - Nested refs resolve transitively — `A=${B}`, `B=${C}`, `C=v` → `A=v`.
91
- * - Cycles are detected; the offending value keeps its raw literal and
92
- * `onWarn` fires once per cycle seen.
93
- * - Missing refs expand to the empty string, matching dotenv-expand.
94
- *
95
- * The input record is not mutated; a fresh object is returned.
96
- */
97
- function expandDotenv(input, options = {}) {
98
- const out = {};
99
- const resolving = /* @__PURE__ */ new Set();
100
- const warned = /* @__PURE__ */ new Set();
101
- function resolveKey(key) {
102
- if (!(key in input)) return "";
103
- if (key in out) return out[key];
104
- if (resolving.has(key)) {
105
- if (!warned.has(key) && options.onWarn) {
106
- warned.add(key);
107
- options.onWarn(`dotenv expansion cycle detected at "${key}" — leaving raw value in place`);
108
- }
109
- return input[key];
110
- }
111
- resolving.add(key);
112
- const expanded = expandValue(input[key], resolveKey);
113
- resolving.delete(key);
114
- out[key] = expanded;
115
- return expanded;
116
- }
117
- for (const key of Object.keys(input)) resolveKey(key);
118
- return out;
119
- }
120
- /**
121
- * Expand a single value string. `resolve` returns the fully-expanded value
122
- * for a referenced key (or `''` when missing). Backslash-escapes (`\$VAR`,
123
- * `\${VAR}`) keep the `$...` literal and consume the backslash.
124
- */
125
- function expandValue(value, resolve) {
126
- let result = "";
127
- let cursor = 0;
128
- while (cursor < value.length) {
129
- const character = value[cursor];
130
- if (character === "\\" && cursor + 1 < value.length && value[cursor + 1] === "$") {
131
- result += "$";
132
- cursor += 2;
133
- continue;
134
- }
135
- if (character !== "$") {
136
- result += character;
137
- cursor++;
138
- continue;
139
- }
140
- const next = value[cursor + 1];
141
- if (next === "{") {
142
- const endIndex = value.indexOf("}", cursor + 2);
143
- if (endIndex === -1) {
144
- result += character;
145
- cursor++;
146
- continue;
147
- }
148
- const key = value.slice(cursor + 2, endIndex);
149
- if (VALID_KEY.test(key)) result += resolve(key);
150
- else result += value.slice(cursor, endIndex + 1);
151
- cursor = endIndex + 1;
152
- continue;
153
- }
154
- if (next && /[A-Za-z_]/.test(next)) {
155
- let keyEndIndex = cursor + 1;
156
- while (keyEndIndex < value.length && /[A-Za-z0-9_]/.test(value[keyEndIndex])) keyEndIndex++;
157
- const key = value.slice(cursor + 1, keyEndIndex);
158
- result += resolve(key);
159
- cursor = keyEndIndex;
160
- continue;
161
- }
162
- result += character;
163
- cursor++;
164
- }
165
- return result;
166
- }
167
- /**
168
- * Merge multiple parsed dotenv records with later-entries-win semantics,
169
- * then expand across the combined set. This is the recommended path for
170
- * callers reading multiple `.env*` files (Vite-style precedence), since
171
- * expansion sees every earlier file's keys at once.
172
- */
173
- function mergeAndExpand(records, options = {}) {
174
- const merged = {};
175
- for (const record of records) Object.assign(merged, record);
176
- return expandDotenv(merged, options);
177
- }
178
- /**
179
- * Wrangler 4.107's bundled `dotenv` LINE regex (verbatim), used ONLY to detect the
180
- * declared KEYS wrangler would load — including the OPTIONAL `export ` prefix, the `KEY: val`
181
- * form, and single/double/backtick quoting — so a transport-redirect / config-override fence
182
- * sees exactly what wrangler's per-command dotenv reload would. We read keys, never values.
183
- */
184
- const WRANGLER_DOTENV_LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/gm;
185
- /**
186
- * The set of declared dotenv KEYS in `filePath`, parsed the way wrangler does.
187
- * Lives in this leaf module (no `proper-lockfile` / lifecycle side effects) so both
188
- * the provisioner's transport fence and the deploy orchestrator's config-override
189
- * fence can read keys exactly as wrangler's per-command reload would, without either
190
- * caller pulling in the provision lifecycle just to parse dotenv keys.
191
- */
192
- function scanWranglerDotenvKeys(filePath) {
193
- const keys = /* @__PURE__ */ new Set();
194
- if (!existsSync(filePath)) return keys;
195
- const content = readFileSync(filePath, "utf-8");
196
- WRANGLER_DOTENV_LINE.lastIndex = 0;
197
- let match;
198
- while ((match = WRANGLER_DOTENV_LINE.exec(content)) !== null) {
199
- if (match[1]) keys.add(match[1]);
200
- if (match.index === WRANGLER_DOTENV_LINE.lastIndex) WRANGLER_DOTENV_LINE.lastIndex++;
201
- }
202
- return keys;
203
- }
204
- //#endregion
205
8
  //#region src/cli/preset.ts
206
9
  /**
207
10
  * Known output conventions for SSGs.
@@ -240,30 +43,36 @@ const SSG_PRESETS = {
240
43
  */
241
44
  const FRAMEWORK_PRESETS = {
242
45
  "tanstack-start": {
46
+ cloudflareArtifact: "vite-plugin",
243
47
  buildCommand: "vite build",
244
48
  workerDir: "dist/server",
245
49
  workerMain: "index.js",
246
50
  assetsDir: "dist/client"
247
51
  },
248
52
  "react-router": {
53
+ cloudflareArtifact: "vite-plugin",
249
54
  buildCommand: "vite build",
250
55
  workerDir: "build/server",
251
56
  workerMain: "index.js",
252
57
  assetsDir: "build/client"
253
58
  },
254
59
  "vinext-app": {
60
+ cloudflareArtifact: "vite-plugin",
255
61
  buildCommand: "vite build",
256
- workerDir: "dist/rsc",
62
+ workerDir: "dist/server",
257
63
  workerMain: "index.js",
258
64
  assetsDir: "dist/client"
259
65
  },
260
66
  "vinext-pages": {
67
+ cloudflareArtifact: "vite-plugin",
261
68
  buildCommand: "vite build",
262
69
  workerDir: "dist/ssr",
263
70
  workerMain: "index.js",
264
71
  assetsDir: "dist/client"
265
72
  },
266
73
  sveltekit: {
74
+ cloudflareArtifact: "worker-output",
75
+ cloudflareCompatibilityFlags: ["nodejs_als"],
267
76
  buildCommand: "vite build",
268
77
  workerDir: ".svelte-kit/cloudflare",
269
78
  workerMain: "_worker.js",
@@ -272,6 +81,8 @@ const FRAMEWORK_PRESETS = {
272
81
  bundle: true
273
82
  },
274
83
  nuxt: {
84
+ cloudflareArtifact: "worker-output",
85
+ cloudflareCompatibilityFlags: ["nodejs_als"],
275
86
  buildCommand: "nuxt build",
276
87
  workerDir: ".output/server",
277
88
  workerMain: "index.mjs",
@@ -279,6 +90,8 @@ const FRAMEWORK_PRESETS = {
279
90
  hashedAssetsPrefix: "_nuxt"
280
91
  },
281
92
  analog: {
93
+ cloudflareArtifact: "worker-output",
94
+ cloudflareCompatibilityFlags: ["nodejs_compat", "nodejs_als"],
282
95
  buildCommand: "vite build",
283
96
  workerDir: "dist/analog/server",
284
97
  workerMain: "index.mjs",
@@ -286,6 +99,8 @@ const FRAMEWORK_PRESETS = {
286
99
  hashedAssetsPrefix: "assets"
287
100
  },
288
101
  astro: {
102
+ cloudflareArtifact: "worker-output",
103
+ cloudflareCompatibilityFlags: ["nodejs_als"],
289
104
  buildCommand: "astro build",
290
105
  workerDir: "dist/server",
291
106
  workerMain: "entry.mjs",
@@ -323,18 +138,14 @@ function shellQuoteExecutable(value) {
323
138
  * `[executable, ...prefixArgs]` meant to be spawned with `shell: false` and the
324
139
  * real wrangler subcommand appended as further DISCRETE argv elements.
325
140
  *
326
- * Unlike {@link resolveWranglerCommand} (which returns a shell-quoted STRING for
327
- * `shell: true` callers), this never builds a shell command line, so untrusted
328
- * values — resource names, a Postgres connection string riddled with `&`/`$`/`;`,
329
- * a config path containing spaces — can be passed as their own argv elements and
330
- * are IMMUNE to shell metacharacter injection/splitting.
141
+ * Values are passed as discrete argv elements without shell expansion.
331
142
  *
332
143
  * Resolution order — ALWAYS launches the resolved JS entry as
333
144
  * `[process.execPath, <wrangler-dist/cli.js>]`, which is shell-free AND
334
145
  * cross-platform (it sidesteps the Windows `.cmd`/`.ps1` shim that Node cannot
335
146
  * spawn with `shell: false`):
336
147
  * 1. MODULE RESOLUTION of `wrangler/package.json` relative to THIS module (the
337
- * `void` package). The provisioner targets wrangler 4.107's EXACT flags,
148
+ * `void` package). The provisioner targets wrangler 4.131's EXACT flags,
338
149
  * `--json` shapes, and error strings, so void's own pinned wrangler must be
339
150
  * PREFERRED — an app that hoists an older, incompatible wrangler at its root
340
151
  * must not shadow it. Under strict pnpm (void + consumers use pnpm) void's
@@ -365,7 +176,7 @@ function shellQuoteExecutable(value) {
365
176
  function resolveWranglerArgv(root, resolveWranglerPackageJson = defaultResolveWranglerPackageJson) {
366
177
  const jsBin = resolveLocalWranglerJsBin(root, resolveWranglerPackageJson);
367
178
  if (jsBin) return [process.execPath, jsBin];
368
- throw new Error("provision: could not resolve the \"wrangler\" package. wrangler ships as a dependency of \"void\"; reinstall dependencies (e.g. `pnpm install`) so it is present, then retry.");
179
+ throw new Error("provision: Void's bundled Cloudflare tooling is unavailable. Reinstall the project's dependencies from its trusted lockfile, then retry.");
369
180
  }
370
181
  /**
371
182
  * Resolve `wrangler/package.json` via Node module resolution, relative to THIS
@@ -418,7 +229,7 @@ function wranglerCliEntryFromPackageJson(pkgPath) {
418
229
  }
419
230
  }
420
231
  /**
421
- * The relative CLI entry from a wrangler manifest: `main` first (wrangler 4.107 sets it
232
+ * The relative CLI entry from a wrangler manifest: `main` first (wrangler 4.131 sets it
422
233
  * to `wrangler-dist/cli.js`, which equals `exports["."].default`), then the `.` export
423
234
  * (`{ default: string }` or a bare string). Returns `undefined` when neither is a string.
424
235
  */
@@ -569,7 +380,8 @@ function findBackendSources(root) {
569
380
  paths.pagesDir,
570
381
  paths.middlewareDir,
571
382
  paths.cronsDir,
572
- paths.queuesDir
383
+ paths.queuesDir,
384
+ paths.emailDir
573
385
  ]) if (existsSync(dir)) found.push(`${relative(root, dir)}/`);
574
386
  const ssrEntry = getSsrServerEntryPath(root, paths);
575
387
  if (ssrEntry) found.push(relative(root, ssrEntry));
@@ -585,8 +397,9 @@ function hasBackendFiles(root) {
585
397
  if (existsSync(paths.middlewareDir)) return true;
586
398
  if (existsSync(paths.cronsDir)) return true;
587
399
  if (existsSync(paths.queuesDir)) return true;
400
+ if (existsSync(paths.emailDir)) return true;
588
401
  if (hasSsrEntry(root, paths)) return true;
589
402
  return false;
590
403
  }
591
404
  //#endregion
592
- export { resolveProjectCommand as a, mergeAndExpand as c, hasBackendFiles as i, parseDotenvFile as l, detectPreset as n, resolveWranglerArgv as o, formatProjectCommand as r, expandDotenv as s, FRAMEWORK_PRESETS as t, scanWranglerDotenvKeys as u };
405
+ export { resolveProjectCommand as a, hasBackendFiles as i, detectPreset as n, resolveWranglerArgv as o, formatProjectCommand as r, FRAMEWORK_PRESETS as t };