void 0.25.0 → 0.26.1

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 (373) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
  4. package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-B7QEjqSR.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-7wuZ5ob8.mjs → auth-B5_tZLxT.mjs} +9 -9
  7. package/dist/{auth-CdgZ9uag.mjs → auth-BgX2qYSY.mjs} +1 -1
  8. package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-D5RmKnzh.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BdM4avI8.mjs → auth-router-Bap-pvbn.mjs} +6 -19
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-B58c8iS8.mjs} +8 -7
  14. package/dist/{cache-TcZnBLtH.mjs → cache-Bo52trKF.mjs} +8 -8
  15. package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-BZNz3Q26.mjs} +6 -5
  16. package/dist/{cf-access-AHKBzmuu.mjs → cf-access-ngGqZpHZ.mjs} +11 -12
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cli/cli.mjs +48 -83
  20. package/dist/cli/cloudflare-operation-process.mjs +71 -77
  21. package/dist/cli/env-schema-probe.d.mts +1 -1
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/client-By4JjMw_.mjs +2 -0
  24. package/dist/{client-RsPo8wsP.mjs → client-C2Prx_Bi.mjs} +30 -8
  25. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  26. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  27. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  28. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  29. package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  31. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  32. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  33. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  34. package/dist/config-BtSFvXZx.mjs +2 -0
  35. package/dist/config-CLYAosnQ.mjs +78 -0
  36. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  37. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  38. package/dist/config-entry.d.mts +1 -1
  39. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  40. package/dist/{connect-DCvUmPXY.mjs → connect-X0MUA1gk.mjs} +12 -11
  41. package/dist/{create-project-eAPgYq35.mjs → create-project-DxiyW6iX.mjs} +7 -7
  42. package/dist/{create-project-C734I-Mu.mjs → create-project-iwkbqiBU.mjs} +1 -1
  43. package/dist/{db-C07GEdKF.mjs → db-XnVMHzoV.mjs} +101 -133
  44. package/dist/{delete-pKMVsrpJ.mjs → delete-esYlMiSJ.mjs} +8 -8
  45. package/dist/{deploy-DfsAe-T0.mjs → deploy-BsEvnlJl.mjs} +2377 -2512
  46. package/dist/deploy-C1d-YTfp.mjs +2 -0
  47. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  48. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  49. package/dist/discover-EDUf6JJw.mjs +2 -0
  50. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  51. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  52. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  53. package/dist/{domain-D3uA9ize.mjs → domain-CbbBWhWE.mjs} +29 -30
  54. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  55. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  56. package/dist/{email-z3o2cwjH.mjs → email-CpuT42g7.mjs} +24 -19
  57. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  58. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  59. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  60. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  61. package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
  62. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  63. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  64. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  65. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  66. package/dist/{env-3Q8-_2IH.mjs → env-w9jOyGZn.mjs} +10 -9
  67. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  68. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  69. package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-PGgz4uGz.mjs} +26 -24
  70. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  71. package/dist/{gen-NjwoG9FK.mjs → gen-DtkQhvQg.mjs} +40 -57
  72. package/dist/gen-dA9hW7AV.mjs +2 -0
  73. package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-D_FsOFxq.mjs} +65 -164
  74. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  75. package/dist/{handler-CZ4nAylQ.d.mts → handler-CNAwjRcW.d.mts} +5 -12
  76. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  77. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  78. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  79. package/dist/{help-DRZXC4fj.mjs → help-CVFBTmBx.mjs} +23 -38
  80. package/dist/help-DzKUrQvk.mjs +2 -0
  81. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  82. package/dist/index.d.mts +19 -2
  83. package/dist/index.mjs +632 -532
  84. package/dist/{info-BmA3_IFZ.mjs → info-PYWwkWyt.mjs} +4 -4
  85. package/dist/{init-DT7yuuyl.mjs → init-Bw-fRKGp.mjs} +161 -197
  86. package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
  87. package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
  88. package/dist/{link-CXOlqh2F.mjs → link-DlPG8iX3.mjs} +10 -10
  89. package/dist/{list-eEWVJEPn.mjs → list-2GN7_ueV.mjs} +11 -9
  90. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  91. package/dist/{live-Chw1eIMv.d.mts → live-Du8jXwOW.d.mts} +4 -2
  92. package/dist/{local-d1-Df4XpwhW.mjs → local-d1-ga5O_idV.mjs} +2 -2
  93. package/dist/{login-pWQHYVu2.mjs → login-D-Q4xw3Q.mjs} +7 -7
  94. package/dist/login-Dc-wuTDq.mjs +2 -0
  95. package/dist/{logs-DnxVX7TR.mjs → logs-rd8J-OFh.mjs} +28 -11
  96. package/dist/migrate-BHp07yJE.mjs +2 -0
  97. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  98. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  99. package/dist/{node-BkyRWRx8.mjs → node-DJicPvPj.mjs} +5 -5
  100. package/dist/{operator-args-CAVcmwUt.mjs → operator-args-BNsW5gfp.mjs} +10 -1
  101. package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-AzVLbrr3.mjs} +4 -8
  102. package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BQtzyG-g.mjs} +3 -3
  103. package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-B6f6Cg9Z.mjs} +45 -14
  104. package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
  105. package/dist/{output-BBsUwdyT.mjs → output-C50ag2r3.mjs} +44 -2
  106. package/dist/pages/client.d.mts +19 -51
  107. package/dist/pages/client.mjs +204 -225
  108. package/dist/pages/head-client.d.mts +1 -1
  109. package/dist/pages/head.d.mts +1 -1
  110. package/dist/pages/head.mjs +1 -1
  111. package/dist/pages/index.d.mts +2 -2
  112. package/dist/pages/index.mjs +6 -12
  113. package/dist/pages/islands-plugin.d.mts +1 -1
  114. package/dist/pages/islands-plugin.mjs +21 -25
  115. package/dist/pages/protocol.d.mts +2 -2
  116. package/dist/pages/protocol.mjs +2 -2
  117. package/dist/{plan-NPpwZ_kc.mjs → plan-BhLO2p4w.mjs} +4 -3
  118. package/dist/plan-CH2G51je.mjs +2 -0
  119. package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-BoZkWQnJ.mjs} +4 -2
  120. package/dist/platform-args-DYgITk0D.mjs +2 -0
  121. package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-n603OANg.mjs} +45 -40
  122. package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-zxDr0hWW.mjs} +9 -8
  123. package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-tw9lgtgE.mjs} +8 -7
  124. package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-B8-bCb7t.mjs} +48 -23
  125. package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-C00YM14r.mjs} +1 -1
  126. package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
  127. package/dist/{platform-domain-CUdY064e.mjs → platform-domain-p0kobLV8.mjs} +6 -5
  128. package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-D_QEY32D.mjs} +906 -389
  129. package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
  130. package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BdYblvvE.mjs} +175 -32
  131. package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-oi-SvI3f.mjs} +1 -1
  132. package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
  133. package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-PvNS9Nl2.mjs} +3 -3
  134. package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
  135. package/dist/platform-setup-DVe42Ws7.mjs +299 -0
  136. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  137. package/dist/prepare-DRUV-g3X.mjs +2 -0
  138. package/dist/{prepare-DnaKBi--.mjs → prepare-Do96654b.mjs} +8 -8
  139. package/dist/{prepare-39EvOhI6.mjs → prepare-Dq9hTIbo.mjs} +4 -3
  140. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  141. package/dist/prerender-render.mjs +1 -1
  142. package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
  143. package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
  144. package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-ti8_yTcA.mjs} +19 -19
  145. package/dist/{project-team-ohAWWaew.mjs → project-team-CDPE1Tsg.mjs} +15 -18
  146. package/dist/{project-token-CP01Jna6.mjs → project-token-CkZ1cN0Z.mjs} +14 -17
  147. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  148. package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-DdjLR61k.mjs} +12 -9
  149. package/dist/{protocol-CjF_iI9X.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  150. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  151. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  152. package/dist/{provision-Btj1jppf.mjs → provision-BfaLiWbj.mjs} +51 -42
  153. package/dist/{provision-BEv0k-qz.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  154. package/dist/{requests-B3PBuGlX.mjs → requests-DFAqyYy8.mjs} +5 -5
  155. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  156. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  157. package/dist/{rollback-DDub9GsO.mjs → rollback-BKYXBduI.mjs} +30 -37
  158. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  159. package/dist/route-url-BgPja1GS.d.mts +5 -0
  160. package/dist/route-url-BjGv_KKY.mjs +28 -0
  161. package/dist/runner-9wjsSZx-.mjs +2 -0
  162. package/dist/{runner-Ol0TNjk6.mjs → runner-DMBKSrRk.mjs} +2 -2
  163. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  164. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  165. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  166. package/dist/runtime/ai.d.mts +11 -12
  167. package/dist/runtime/ai.mjs +47 -113
  168. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  169. package/dist/runtime/better-auth-mysql.mjs +4 -9
  170. package/dist/runtime/better-auth-pg.d.mts +1 -1
  171. package/dist/runtime/better-auth-pg.mjs +5 -10
  172. package/dist/runtime/better-auth.d.mts +1 -1
  173. package/dist/runtime/better-auth.mjs +3 -3
  174. package/dist/runtime/client-react.d.mts +2 -3
  175. package/dist/runtime/client-react.mjs +2 -2
  176. package/dist/runtime/client-solid.d.mts +2 -3
  177. package/dist/runtime/client-solid.mjs +2 -2
  178. package/dist/runtime/client-svelte.d.mts +2 -3
  179. package/dist/runtime/client-svelte.mjs +2 -2
  180. package/dist/runtime/client-vue.d.mts +2 -3
  181. package/dist/runtime/client-vue.mjs +2 -2
  182. package/dist/runtime/client.d.mts +2 -3
  183. package/dist/runtime/client.mjs +2 -2
  184. package/dist/runtime/db.mjs +1 -1
  185. package/dist/runtime/durable.mjs +3 -10
  186. package/dist/runtime/email/testing.mjs +5 -5
  187. package/dist/runtime/email.d.mts +2 -1
  188. package/dist/runtime/email.mjs +11 -27
  189. package/dist/runtime/env-public.d.mts +1 -1
  190. package/dist/runtime/env-public.mjs +15 -20
  191. package/dist/runtime/env.mjs +1 -1
  192. package/dist/runtime/fetch-stream.d.mts +2 -2
  193. package/dist/runtime/fetch-stream.mjs +1 -1
  194. package/dist/runtime/fetch.d.mts +2 -3
  195. package/dist/runtime/fetch.mjs +1 -1
  196. package/dist/runtime/handler.d.mts +1 -1
  197. package/dist/runtime/handler.mjs +2 -2
  198. package/dist/runtime/isr.mjs +1 -1
  199. package/dist/runtime/kv.mjs +10 -11
  200. package/dist/runtime/limits.d.mts +2 -2
  201. package/dist/runtime/limits.mjs +2 -2
  202. package/dist/runtime/live-client.d.mts +1 -1
  203. package/dist/runtime/live-client.mjs +12 -22
  204. package/dist/runtime/live-server.mjs +27 -35
  205. package/dist/runtime/live.d.mts +2 -2
  206. package/dist/runtime/live.mjs +2 -2
  207. package/dist/runtime/migration-handler.mjs +35 -86
  208. package/dist/runtime/queues.mjs +1 -1
  209. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  210. package/dist/runtime/remote/binding-handler.mjs +8 -9
  211. package/dist/runtime/remote/index.mjs +27 -77
  212. package/dist/runtime/route-url.d.mts +2 -4
  213. package/dist/runtime/route-url.mjs +1 -1
  214. package/dist/runtime/routing.d.mts +1 -1
  215. package/dist/runtime/routing.mjs +15 -26
  216. package/dist/runtime/sandbox.d.mts +1 -1
  217. package/dist/runtime/sandbox.mjs +14 -24
  218. package/dist/runtime/sse.mjs +1 -1
  219. package/dist/runtime/storage.mjs +1 -1
  220. package/dist/runtime/validator.d.mts +1 -1
  221. package/dist/runtime/ws-server.d.mts +2 -2
  222. package/dist/runtime/ws-server.mjs +30 -61
  223. package/dist/runtime/ws.d.mts +1 -1
  224. package/dist/runtime/ws.mjs +1 -1
  225. package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
  226. package/dist/{scan-C7okrLyM.mjs → scan-C3uDzz6J.mjs} +21 -18
  227. package/dist/{secret-3c72lY1U.mjs → secret-BAt2KMmO.mjs} +15 -15
  228. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  229. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  230. package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  231. package/dist/sveltekit.d.mts +0 -2
  232. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  233. package/dist/validate-BJr9LfXy.mjs +2 -0
  234. package/dist/{validate-ctOrgiS3.mjs → validate-C9qJArv7.mjs} +9 -28
  235. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  236. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  237. package/dist/{ws-CL1w7GXU.d.mts → ws-CChrrAU-.d.mts} +1 -1
  238. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  239. package/{skills/void/docs → docs}/guide/ai.md +69 -64
  240. package/{skills/void/docs → docs}/guide/app-types.md +1 -1
  241. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  242. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  243. package/{skills/void/docs → docs}/guide/database.md +23 -8
  244. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  245. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  246. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  247. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  248. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  249. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  250. package/{skills/void/docs → docs}/guide/live.md +12 -5
  251. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +21 -9
  252. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  253. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  254. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  255. package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
  256. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  257. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  258. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  259. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  260. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  261. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +2 -2
  262. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  263. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +8 -2
  264. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +7 -1
  265. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +1 -1
  266. package/docs/guide/platform/installation/uninstall.md +102 -0
  267. package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
  268. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  269. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  270. package/{skills/void/docs → docs}/guide/sandboxes.md +41 -22
  271. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  272. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  273. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  274. package/docs/integrations/agents.md +37 -0
  275. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  276. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  277. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  278. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  279. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  280. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  281. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  282. package/{skills/void/docs → docs}/reference/api/resources.md +11 -14
  283. package/{skills/void/docs → docs}/reference/api.md +35 -34
  284. package/{skills/void/docs → docs}/reference/cli/auth.md +3 -6
  285. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  286. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  287. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  288. package/{skills/void/docs → docs}/reference/cli/platform-config.md +3 -3
  289. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  290. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +15 -13
  291. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  292. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  293. package/{skills/void/docs → docs}/reference/cli/platform.md +4 -2
  294. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  295. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  296. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  297. package/{skills/void/docs → docs}/reference/cli.md +2 -2
  298. package/{skills/void/docs → docs}/reference/config.md +13 -13
  299. package/{skills/void/docs → docs}/reference/resource-inference.md +2 -16
  300. package/package.json +34 -30
  301. package/schema.json +1 -1
  302. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  303. package/skills/void/SKILL.md +11 -5
  304. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  305. package/dist/client-B4Me-9HE.mjs +0 -2
  306. package/dist/config-0acf1oys.mjs +0 -2
  307. package/dist/config-D8MOgiQV.mjs +0 -32
  308. package/dist/deploy-BDu1vhSH.mjs +0 -2
  309. package/dist/discover-AMCBXivQ.mjs +0 -2
  310. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  311. package/dist/gen-ById9r2j.mjs +0 -2
  312. package/dist/help-DPGBwomV.mjs +0 -2
  313. package/dist/login-C98-sw79.mjs +0 -2
  314. package/dist/migrate-CEu2X5DB.mjs +0 -2
  315. package/dist/plan-D1Q5rf-r.mjs +0 -2
  316. package/dist/platform-args-Cq6EjQro.mjs +0 -2
  317. package/dist/prepare-CnjcTV2s.mjs +0 -2
  318. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  319. package/dist/route-url-CG7U-cRN.mjs +0 -15
  320. package/dist/runner-CXA9Fh8h.mjs +0 -2
  321. package/dist/validate-Dq_L3s0S.mjs +0 -2
  322. package/skills/void/docs/guide/platform/installation/uninstall.md +0 -69
  323. package/skills/void/docs/integrations/agents.md +0 -26
  324. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  325. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  326. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  327. package/{skills/void/docs → docs}/guide/deployment.md +0 -0
  328. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  329. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  330. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  331. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  332. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  333. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  334. package/{skills/void/docs → docs}/guide/email.md +0 -0
  335. package/{skills/void/docs → docs}/guide/index.md +0 -0
  336. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  337. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  338. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  339. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  340. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  341. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  342. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  343. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  344. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  345. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  346. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  347. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  348. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  349. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  350. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  351. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  352. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  353. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  354. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  355. package/{skills/void/docs → docs}/index.md +0 -0
  356. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  357. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  358. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  359. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  360. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  361. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  362. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  363. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  364. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  366. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  367. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  368. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  369. /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
  370. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  371. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  372. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  373. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -1,9 +1,9 @@
1
- import { r as readProjectConfig } from "./project-BkbfDs0V.mjs";
2
- import { c as getToken, i as getAccountCredential } from "./auth-7wuZ5ob8.mjs";
3
- import { B as note, H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { c as platformErrorMessage, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-RsPo8wsP.mjs";
5
- import { o as formatCount } from "./output-BBsUwdyT.mjs";
6
- import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
+ import { c as getToken, i as getAccountCredential } from "./auth-B5_tZLxT.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, f as sanitizeTerminalText, s as formatCount, u as note } from "./output-C50ag2r3.mjs";
5
+ import { c as parsePlatformErrorBody, l as platformErrorMessage, n as PlatformApiError, r as PlatformClient } from "./client-C2Prx_Bi.mjs";
6
+ import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-team.ts
8
8
  function clean(value) {
9
9
  return (value ?? "—").replace(/[\u0000-\u001f\u007f]/g, " ");
@@ -33,11 +33,7 @@ function invitationLines(invitations, pending) {
33
33
  }
34
34
  async function resolveProjectId(root, client, projectSlug) {
35
35
  const requestedSlug = getRequestedProjectSlug({ projectSlug });
36
- if (requestedSlug) {
37
- const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
38
- if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
39
- return project.projectId;
40
- }
36
+ if (requestedSlug) return (await requireProjectBySlug(client, requestedSlug)).projectId;
41
37
  const linked = readProjectConfig(root);
42
38
  if (!linked) throw new Error("No linked project. Run `void project link` or pass --project <slug>.");
43
39
  return linked.projectId;
@@ -83,12 +79,13 @@ async function runProjectTeamCommand(root, args) {
83
79
  throw invitationResponseError(error, client.apiUrl);
84
80
  }
85
81
  if (args.action === "accept") log.info("Open the invited application’s directory and run `void project link` if it is not linked yet. If it is linked to another project, use a separate checkout. Accepting an invitation keeps existing project links.");
86
- outro(`Project invitation ${args.action === "accept" ? "accepted" : "declined"}.`);
82
+ printSuccess(`Project invitation ${args.action === "accept" ? "accepted" : "declined"}.`);
87
83
  return;
88
84
  }
89
85
  const projectId = await resolveProjectId(root, client, "projectSlug" in args ? args.projectSlug : "");
90
86
  if (args.action === "list") {
91
- const members = await client.listProjectMembers(projectId);
87
+ const { members, warnings } = await client.listProjectMembers(projectId);
88
+ for (const warning of warnings ?? []) log.warn(sanitizeTerminalText(warning));
92
89
  note(memberLines(members), "Project Team");
93
90
  outro(formatCount(members.length, "member"));
94
91
  return;
@@ -108,26 +105,26 @@ async function runProjectTeamCommand(root, args) {
108
105
  const delivery = result.delivery.status === "sent" ? "" : ` (email delivery: ${result.delivery.status.replace("_", " ")})`;
109
106
  const action = result.refreshed ? "Updated invitation for" : "Invited";
110
107
  if (result.delivery.status !== "sent") note(`Invitation: ${clean(result.invitation.id)}\nShare these steps with the invited user:\n\nvoid connect '${client.apiUrl.replaceAll("'", "'\\''")}'\nvoid project team pending\nvoid project team accept ${clean(result.invitation.id)}`, "Invitation saved; email was not sent");
111
- outro(`${action} ${clean(invitationEmail(result.invitation))} as ${args.role}${delivery}.`);
108
+ printSuccess(`${action} ${clean(invitationEmail(result.invitation))} as ${args.role}${delivery}.`);
112
109
  return;
113
110
  }
114
111
  if (args.action === "role") {
115
112
  await client.updateProjectMemberRole(projectId, args.userId, args.role);
116
- outro(`Changed ${args.userId} to ${args.role}.`);
113
+ printSuccess(`Changed ${args.userId} to ${args.role}.`);
117
114
  return;
118
115
  }
119
116
  if (args.action === "remove") {
120
117
  await client.removeProjectMember(projectId, args.userId);
121
- outro(`Removed ${args.userId} from the project.`);
118
+ printSuccess(`Removed ${args.userId} from the project.`);
122
119
  return;
123
120
  }
124
121
  if (args.action === "revoke") {
125
122
  await client.revokeProjectInvitation(projectId, args.invitationId);
126
- outro(`Revoked invitation ${args.invitationId}.`);
123
+ printSuccess(`Revoked invitation ${args.invitationId}.`);
127
124
  return;
128
125
  }
129
126
  await client.leaveProject(projectId);
130
- outro("Left the project.");
127
+ printSuccess("Left the project.");
131
128
  }
132
129
  //#endregion
133
130
  export { runProjectTeamCommand };
@@ -1,23 +1,19 @@
1
- import { r as readProjectConfig } from "./project-BkbfDs0V.mjs";
2
- import { c as getToken } from "./auth-7wuZ5ob8.mjs";
3
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { r as PlatformClient } from "./client-RsPo8wsP.mjs";
5
- import { d as tablePrefix, i as dim } from "./output-BBsUwdyT.mjs";
6
- import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
+ import { c as getToken } from "./auth-B5_tZLxT.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, i as dim, m as tablePrefix } from "./output-C50ag2r3.mjs";
5
+ import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
6
+ import { r as requireProjectBySlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-token.ts
8
8
  async function resolveTarget(root, args) {
9
9
  const humanToken = getToken(root);
10
10
  if (!humanToken) throw new Error("project: Sign in with a human account before managing CI credentials.");
11
11
  const client = new PlatformClient(humanToken, { root });
12
- if (args.projectSlug) {
13
- const resolved = resolveProjectBySlug(await client.listProjects(), args.projectSlug);
14
- if (!resolved) throw new Error(`project: No project found with slug '${args.projectSlug}'.`);
15
- return {
16
- client,
17
- projectId: resolved.projectId,
18
- slug: args.projectSlug
19
- };
20
- }
12
+ if (args.projectSlug) return {
13
+ client,
14
+ projectId: (await requireProjectBySlug(client, args.projectSlug)).projectId,
15
+ slug: args.projectSlug
16
+ };
21
17
  const linked = readProjectConfig(root);
22
18
  if (!linked) throw new Error("project: No linked project. Pass --project <name>.");
23
19
  return {
@@ -34,9 +30,10 @@ function printIssued(args, result, apiUrl) {
34
30
  }));
35
31
  return;
36
32
  }
37
- log.success(`Credential ${result.id} is valid until ${result.expiresAt}.`);
33
+ log.info(`Credential ${result.id} is valid until ${result.expiresAt}.`);
38
34
  log.warn("Copy this token now. Void will not display it again.");
39
35
  console.log(`\nVOID_TOKEN=${result.token}\nVOID_API_URL=${apiUrl}\n`);
36
+ printSuccess("Project deploy credential created.");
40
37
  }
41
38
  async function runProjectTokenCommand(root, args) {
42
39
  if (!args.json) console.log();
@@ -52,7 +49,7 @@ async function runProjectTokenCommand(root, args) {
52
49
  ok: true,
53
50
  id: args.credentialId
54
51
  }));
55
- else log.success(`Revoked ${args.credentialId}.`);
52
+ else printSuccess(`Revoked ${args.credentialId}.`);
56
53
  } else {
57
54
  const rows = await client.listProjectTokens(projectId);
58
55
  if (args.json) {
@@ -23,7 +23,8 @@ function writeFileIfChanged(path, content) {
23
23
  *
24
24
  * @param hasRouteTypes - When true, include routes.d.ts. When omitted,
25
25
  * auto-detect by checking for a routes/ directory.
26
- * @param hasDrizzle - When true, configure `@schema` paths for the user's
26
+ * @param hasDb - When true, include db.d.ts and redirect `void/db` to it.
27
+ * @param hasSchema - When true, configure `@schema` paths for the user's
27
28
  * Drizzle schema.
28
29
  */
29
30
  function createProjectTsconfig(root, hasRouteTypes, hasDb, hasSchema, options = {}) {
@@ -1,9 +1,9 @@
1
- import { r as readProjectConfig } from "./project-BkbfDs0V.mjs";
2
- import { c as getToken } from "./auth-7wuZ5ob8.mjs";
3
- import { B as note, H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { r as PlatformClient } from "./client-RsPo8wsP.mjs";
5
- import { l as sanitizeTerminalText } from "./output-BBsUwdyT.mjs";
6
- import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
+ import { c as getToken } from "./auth-B5_tZLxT.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, f as sanitizeTerminalText, u as note } from "./output-C50ag2r3.mjs";
5
+ import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
6
+ import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-zero-trust.ts
8
8
  async function resolveTarget(root, args) {
9
9
  const token = getToken(root);
@@ -11,8 +11,7 @@ async function resolveTarget(root, args) {
11
11
  const client = new PlatformClient(token, { root });
12
12
  const requestedSlug = getRequestedProjectSlug({ projectSlug: args.projectSlug });
13
13
  if (requestedSlug) {
14
- const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
15
- if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
14
+ const project = await requireProjectBySlug(client, requestedSlug);
16
15
  return {
17
16
  client,
18
17
  projectId: project.projectId,
@@ -56,7 +55,11 @@ async function runProjectZeroTrustCommand(root, args) {
56
55
  outro(`${slug} Zero Trust update is still in progress. Run \`void project zero-trust reconcile\` to continue, or wait for scheduled maintenance.`);
57
56
  return;
58
57
  }
59
- outro(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
58
+ if (result.project.last_error || result.project.state === "error") {
59
+ outro(`${slug} Zero Trust needs attention (${result.project.state}).`);
60
+ return;
61
+ }
62
+ printSuccess(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
60
63
  }
61
64
  //#endregion
62
65
  export { runProjectZeroTrustCommand };
@@ -1,5 +1,5 @@
1
- import { n as HeadDescriptor, t as HeadConfig } from "./head-Do8P4puT.mjs";
2
- import { n as CloudBindings, r as CloudContext } from "./handler-CZ4nAylQ.mjs";
1
+ import { n as HeadDescriptor, t as HeadConfig } from "./head-C8K_iGe6.mjs";
2
+ import { n as CloudBindings, r as CloudContext } from "./handler-CNAwjRcW.mjs";
3
3
  import { a as PageRenderMode, t as DevCssAsset } from "./types-BAp5AEBU.mjs";
4
4
  //#region src/pages/protocol.d.ts
5
5
  /** Escape characters that are unsafe inside inline <script> tags to prevent XSS. */
@@ -20,6 +20,8 @@ type PageHandler = ((c: CloudContext) => unknown | Promise<unknown>) | undefined
20
20
  type PageHeadHandler = ((c: CloudContext, props: Record<string, unknown>) => HeadDescriptor | undefined) | undefined;
21
21
  type PageRenderOptions = {
22
22
  renderMode?: PageRenderMode;
23
+ /** Dev server build: rejected deferred props keep their raw error message. */
24
+ dev?: boolean;
23
25
  };
24
26
  type AssetTags = {
25
27
  css: string;
@@ -1,6 +1,6 @@
1
1
  import { n as isConvertedResponse } from "./response-Tn7rU0MV.mjs";
2
- import { i as ValidationError, r as separateDeferred, t as DEFERRED } from "./defer-YsYDUoii.mjs";
3
- import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-D_QRR5Yd.mjs";
2
+ import { i as separateDeferred, n as DEFERRED, t as ValidationError } from "./validation-error-Dg9Recn1.mjs";
3
+ import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-D2VF4ApL.mjs";
4
4
  import { t as serializePageData } from "./serialize-BPvnNQuA.mjs";
5
5
  //#region src/pages/protocol.ts
6
6
  const POWERED_BY = { "X-Powered-By": "Void" };
@@ -44,30 +44,17 @@ function adjustCspValue(value, nonce) {
44
44
  sources
45
45
  };
46
46
  });
47
- const styleElem = parsed.find((directive) => directive.name === "style-src-elem");
48
- if (styleElem) {
49
- if (!styleElem.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) styleElem.sources.push(nonceSource);
50
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
51
- }
52
- const style = parsed.find((directive) => directive.name === "style-src");
47
+ const style = parsed.find((directive) => directive.name === "style-src-elem") ?? parsed.find((directive) => directive.name === "style-src");
53
48
  if (style) {
54
49
  if (!style.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) style.sources.push(nonceSource);
55
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
56
- }
57
- const defaultSrc = parsed.find((directive) => directive.name === "default-src");
58
- if (defaultSrc) {
50
+ } else {
51
+ const defaultSrc = parsed.find((directive) => directive.name === "default-src");
59
52
  parsed.push({
60
53
  name: "style-src",
61
54
  originalName: "style-src",
62
- sources: [...defaultSrc.sources, nonceSource]
55
+ sources: [...defaultSrc?.sources ?? [], nonceSource]
63
56
  });
64
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
65
57
  }
66
- parsed.push({
67
- name: "style-src",
68
- originalName: "style-src",
69
- sources: [nonceSource]
70
- });
71
58
  return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
72
59
  }
73
60
  function adjustDevCssCsp(headers, nonce) {
@@ -116,6 +103,13 @@ function renderClientOnlyPage(pageObj, assetTags, renderFn) {
116
103
  </body>
117
104
  </html>`;
118
105
  }
106
+ async function renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags) {
107
+ const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
108
+ return {
109
+ html: renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags),
110
+ assetTags
111
+ };
112
+ }
119
113
  function pageJsonResponse(c, pageObj) {
120
114
  return Response.json(pageObj, { headers: pageResponseHeaders(c, {
121
115
  "X-VoidPages": "true",
@@ -172,12 +166,24 @@ function renderedResponse(c, result, contentType, assetTags) {
172
166
  ...POWERED_BY
173
167
  }), assetTags?.devCssNonce) });
174
168
  }
169
+ /**
170
+ * Message sent to the browser for a rejected deferred prop. HTTPException
171
+ * messages are deliberate and pass through, as in the page error handler.
172
+ * Anything else is logged and, outside dev, replaced with a generic message so
173
+ * internal details (SQL, hostnames, URLs) do not reach the page.
174
+ */
175
+ function deferredErrorMessage(err, dev) {
176
+ const message = err instanceof Error ? err.message : String(err);
177
+ if (err && typeof err === "object" && "getResponse" in err && typeof err.getResponse === "function") return message;
178
+ console.error(err);
179
+ return dev ? message : "Internal Server Error";
180
+ }
175
181
  /** Build a streaming response that sends an initial chunk then streams deferred results. */
176
- function streamDeferredResponse(initialChunk, deferredMap, c, contentType, formatResolved, formatRejected, assetTags) {
182
+ function streamDeferredResponse(initialChunk, deferredMap, c, contentType, dev, formatResolved, formatRejected, assetTags) {
177
183
  const encoder = new TextEncoder();
178
184
  const { readable, writable } = new TransformStream();
179
185
  const writer = writable.getWriter();
180
- const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, err instanceof Error ? err.message : String(err))));
186
+ const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, deferredErrorMessage(err, dev))));
181
187
  (async () => {
182
188
  await writeRenderResult(writer, encoder, initialChunk);
183
189
  await Promise.all(pendingChunks.map(async (chunk) => writer.write(encoder.encode(await chunk))));
@@ -185,10 +191,7 @@ function streamDeferredResponse(initialChunk, deferredMap, c, contentType, forma
185
191
  })().catch((error) => {
186
192
  writer.abort(error).catch(() => {});
187
193
  });
188
- return new Response(readable, { headers: adjustDevCssCsp(pageResponseHeaders(c, {
189
- "content-type": contentType,
190
- ...POWERED_BY
191
- }), assetTags?.devCssNonce) });
194
+ return renderedResponse(c, readable, contentType, assetTags);
192
195
  }
193
196
  /** Handle GET page request — run handler, return page object or SSR HTML */
194
197
  async function handlePageGet(handler, headFn, c, componentId, renderFn, getAssetTags, configHead, options) {
@@ -209,7 +212,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
209
212
  const { immediateProps, deferredMap } = separateDeferred(props);
210
213
  const hasDeferred = Object.keys(deferredMap).length > 0;
211
214
  const deferredKeys = {};
212
- if (hasDeferred) for (const [group, { keys }] of Object.entries(deferredMap)) for (const key of keys) deferredKeys[key] = group;
215
+ for (const [group, { keys }] of Object.entries(deferredMap)) for (const key of keys) deferredKeys[key] = group;
213
216
  const pageObj = {
214
217
  component: componentId,
215
218
  props: immediateProps,
@@ -249,7 +252,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
249
252
  const headers = new Headers(c.res.headers);
250
253
  appendVary(headers, "X-VoidPages");
251
254
  c.header("Vary", headers.get("Vary"));
252
- return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", (group, data) => JSON.stringify({
255
+ return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", options?.dev === true, (group, data) => JSON.stringify({
253
256
  __deferred: group,
254
257
  data
255
258
  }) + "\n", (group, error) => JSON.stringify({
@@ -257,10 +260,9 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
257
260
  error
258
261
  }) + "\n");
259
262
  }
260
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
261
- const html = renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags);
263
+ const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
262
264
  if (!hasDeferred) return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
263
- return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
265
+ return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", options?.dev === true, (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
264
266
  }
265
267
  function isSameOriginAction(request) {
266
268
  const origin = new URL(request.url).origin;
@@ -295,37 +297,32 @@ async function handlePageMutation(mutationHandler, getHandler, headFn, c, compon
295
297
  ...head && { head }
296
298
  };
297
299
  }
300
+ /** Re-run the GET loader and respond with the page, optionally carrying validation errors. */
301
+ async function respondWithPage(errors) {
302
+ const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
303
+ if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
304
+ const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
305
+ return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
306
+ }
307
+ function respondWithErrors(errors) {
308
+ if (renderMode === "island") return Promise.resolve(Response.json({ errors }, { status: 422 }));
309
+ return respondWithPage(errors);
310
+ }
298
311
  let result;
299
312
  try {
300
313
  result = mutationHandler ? await mutationHandler(c) : void 0;
301
314
  } catch (e) {
302
- if (e instanceof ValidationError) {
303
- if (renderMode === "island") return Response.json({ errors: e.errors }, { status: 422 });
304
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), e.errors);
305
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
306
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
307
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
308
- }
315
+ if (e instanceof ValidationError) return respondWithErrors(e.errors);
309
316
  throw e;
310
317
  }
311
318
  if (result instanceof Response) {
312
319
  const status = result.status;
313
320
  if (status >= 300 && status < 400) return result;
314
- if (status === 400) {
315
- const errors = flattenValidationErrors(await result.json());
316
- if (renderMode === "island") return Response.json({ errors }, { status: 422 });
317
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
318
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
319
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
320
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
321
- }
321
+ if (status === 400) return respondWithErrors(flattenValidationErrors(await result.json()));
322
322
  if (status !== 204) return result;
323
323
  }
324
324
  if (renderMode === "island") return Response.json({ success: true });
325
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), null);
326
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
327
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
328
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
325
+ return respondWithPage(null);
329
326
  }
330
327
  //#endregion
331
328
  export { safeJsonStringify as i, handlePageGet as n, handlePageMutation as r, flattenValidationErrors as t };
@@ -47,21 +47,10 @@ function isVoidAuthProvider(value) {
47
47
  }
48
48
  function getVoidAuthProviderEnvNames(provider) {
49
49
  const normalized = provider.toUpperCase().replaceAll("-", "_");
50
- const envNames = {
50
+ return {
51
51
  clientId: `AUTH_${normalized}_CLIENT_ID`,
52
52
  clientSecret: `AUTH_${normalized}_CLIENT_SECRET`
53
53
  };
54
- if (provider === "github") return {
55
- ...envNames,
56
- legacyClientId: "GITHUB_OAUTH_ID",
57
- legacyClientSecret: "GITHUB_OAUTH_SECRET"
58
- };
59
- if (provider === "google") return {
60
- ...envNames,
61
- legacyClientId: "GOOGLE_OAUTH_ID",
62
- legacyClientSecret: "GOOGLE_OAUTH_SECRET"
63
- };
64
- return envNames;
65
54
  }
66
55
  //#endregion
67
56
  export { isVoidSocialAuthProvider as a, isVoidAuthProvider as i, VOID_EMAIL_AUTH_PROVIDER as n, getVoidAuthProviderEnvNames as r, VOID_AUTH_PROVIDERS as t };
@@ -1,9 +1,8 @@
1
1
  import { a as join, n as dirname, o as normalize, t as basename, u as resolve$2 } from "./dist-BVqXeR_h.mjs";
2
2
  import { i as voidWarn, r as voidLog } from "./log-vqY3pqwI.mjs";
3
- import { i as persistCloudflareConfig } from "./cloudflare-config-Bktvwtpf.mjs";
4
- import { A as writeProvisionedWranglerConfig, s as assertNoDuplicateMembers, v as readProvisionedBindingEntry } from "./wrangler-DhUerFkW.mjs";
5
- import { r as scanWranglerDotenvKeys } from "./dotenv-VQxupEUv.mjs";
6
- import { c as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-B-wekeR6.mjs";
3
+ import { _ as persistMaterializedWranglerConfig, j as writeProvisionedWranglerConfig, s as assertNoDuplicateMembers, y as readProvisionedBindingEntry } from "./wrangler-D9KTuqnv.mjs";
4
+ import { n as scanWranglerDotenvKeys } from "./dotenv-BfU6eqFt.mjs";
5
+ import { l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-2-TfIEzB.mjs";
7
6
  import { createRequire } from "node:module";
8
7
  import { closeSync, existsSync, fsyncSync, lstatSync, openSync, readFileSync, readlinkSync, realpathSync, renameSync, unlinkSync, writeSync } from "node:fs";
9
8
  import { isRecord } from "@void/deploy-core";
@@ -282,21 +281,6 @@ function assertNoTransportRedirectInProjectDotenv(root, platform = process.platf
282
281
  }
283
282
  }
284
283
  /**
285
- * Child-process env with every CF Access credential scrubbed. Mirrors `buildEnv`
286
- * in `deploy.ts`: Access credentials are needed only by this CLI's own guarded
287
- * HTTP requests and must never leak into the spawned wrangler process (which may
288
- * in turn run user hooks). This includes the short-lived cloudflared
289
- * `CF_ACCESS_TOKEN` JWT used by local readiness probes.
290
- *
291
- * Pins ONE transport context: scrubs every {@link TRANSPORT_REDIRECT_ENV_VARS}
292
- * from the child env, then re-sets `CLOUDFLARE_API_BASE_URL` to the SINGLE resolved
293
- * `apiBaseUrl` so the spawned wrangler and the Hyperdrive REST lister hit the exact same
294
- * endpoint. Scrubbing the compliance/staging/env selectors makes the explicit base
295
- * authoritative (they can no longer re-derive a different base). Combined with
296
- * {@link assertNoTransportRedirectInProjectDotenv} (which blocks a project dotenv from
297
- * repopulating any of them via wrangler's per-command reload), the pin cannot be moved.
298
- */
299
- /**
300
284
  * Delete `name` from `env` IN PLACE, honoring the platform's env-key case rule.
301
285
  * Windows environment keys are CASE-INSENSITIVE: a spawned child's `process.env`
302
286
  * resolves `WRANGLER_OUTPUT_FILE_PATH` from an ambient `Wrangler_Output_File_Path`
@@ -314,6 +298,21 @@ function deleteEnvVarCaseAware(env, name, platform = process.platform) {
314
298
  const lower = name.toLowerCase();
315
299
  for (const key of Object.keys(env)) if (key.toLowerCase() === lower) delete env[key];
316
300
  }
301
+ /**
302
+ * Child-process env with every CF Access credential scrubbed. Mirrors `buildEnv`
303
+ * in `deploy.ts`: Access credentials are needed only by this CLI's own guarded
304
+ * HTTP requests and must never leak into the spawned wrangler process (which may
305
+ * in turn run user hooks). This includes the short-lived cloudflared
306
+ * `CF_ACCESS_TOKEN` JWT used by local readiness probes.
307
+ *
308
+ * Pins ONE transport context: scrubs every {@link TRANSPORT_REDIRECT_ENV_VARS}
309
+ * from the child env, then re-sets `CLOUDFLARE_API_BASE_URL` to the SINGLE resolved
310
+ * `apiBaseUrl` so the spawned wrangler and the Hyperdrive REST lister hit the exact same
311
+ * endpoint. Scrubbing the compliance/staging/env selectors makes the explicit base
312
+ * authoritative (they can no longer re-derive a different base). Combined with
313
+ * {@link assertNoTransportRedirectInProjectDotenv} (which blocks a project dotenv from
314
+ * repopulating any of them via wrangler's per-command reload), the pin cannot be moved.
315
+ */
317
316
  function provisionEnv(ctx) {
318
317
  const env = { ...process.env };
319
318
  const platform = ctx?.platform ?? process.platform;
@@ -332,6 +331,17 @@ function provisionEnv(ctx) {
332
331
  scrub("CLOUDFLARE_ACCOUNT_ID");
333
332
  env.CLOUDFLARE_ACCOUNT_ID = ctx.accountId;
334
333
  }
334
+ if (ctx?.apiToken) {
335
+ for (const name of [
336
+ "CLOUDFLARE_API_TOKEN",
337
+ "CF_API_TOKEN",
338
+ "CLOUDFLARE_API_KEY",
339
+ "CF_API_KEY",
340
+ "CLOUDFLARE_EMAIL",
341
+ "CF_EMAIL"
342
+ ]) scrub(name);
343
+ env.CLOUDFLARE_API_TOKEN = ctx.apiToken;
344
+ }
335
345
  return env;
336
346
  }
337
347
  /**
@@ -574,7 +584,7 @@ function armRetentionWatchdog(lock, info) {
574
584
  try {
575
585
  process.kill(process.platform === "win32" ? info.pid : -info.pid, 0);
576
586
  } catch (error) {
577
- dead = error.code === "ESRCH";
587
+ dead = isAlreadyGoneKillError(error);
578
588
  }
579
589
  if (dead) {
580
590
  lock.release().then(() => resolveWatchdog(), (error) => {
@@ -636,7 +646,8 @@ function createDefaultRunWrangler(root, options) {
636
646
  env: {
637
647
  ...provisionEnv({
638
648
  accountId: opts.accountId,
639
- apiBaseUrl: opts.apiBaseUrl
649
+ apiBaseUrl: opts.apiBaseUrl,
650
+ apiToken: opts.apiToken
640
651
  }),
641
652
  ...opts.suppressLogs ? { WRANGLER_WRITE_LOGS: "false" } : {}
642
653
  },
@@ -700,14 +711,14 @@ function createDefaultRunWrangler(root, options) {
700
711
  try {
701
712
  process.kill(child.pid, 0);
702
713
  } catch (error) {
703
- if (error.code === "ESRCH") groupGone = true;
714
+ groupGone = isAlreadyGoneKillError(error);
704
715
  }
705
716
  return groupGone;
706
717
  }
707
718
  try {
708
719
  process.kill(-child.pid, 0);
709
720
  } catch (error) {
710
- if (error.code === "ESRCH") groupGone = true;
721
+ groupGone = isAlreadyGoneKillError(error);
711
722
  }
712
723
  return groupGone;
713
724
  };
@@ -1134,7 +1145,7 @@ function assertQuarantineClearedOrClear(lockTarget, onBeforeClear) {
1134
1145
  if (probeTarget !== void 0) try {
1135
1146
  process.kill(probeTarget, 0);
1136
1147
  } catch (error) {
1137
- if (error.code === "ESRCH") confirmedDead = true;
1148
+ confirmedDead = isAlreadyGoneKillError(error);
1138
1149
  }
1139
1150
  if (!confirmedDead) {
1140
1151
  const who = pid !== void 0 || pgid !== void 0 ? `process group ${String(pgid ?? pid)}` : "an unrecorded process";
@@ -1436,7 +1447,7 @@ function parseJsonObject(value) {
1436
1447
  * config, delegating to the STRICT canonical reader in `wrangler.ts`
1437
1448
  * ({@link readProvisionedBindingEntry}). Unlike the old loose first-match `.find()`, this
1438
1449
  * validates the target field's outer shape, fails closed on a DUPLICATE binding, and runs
1439
- * the worker-wide CROSS-TYPE collision check (reusing the Task-3 collector) — so a
1450
+ * the worker-wide CROSS-TYPE collision check — so a
1440
1451
  * duplicate/collision config can never be reported `reused` or pass a create postcondition.
1441
1452
  */
1442
1453
  function readBindingEntry(configPath, field, binding) {
@@ -1444,8 +1455,8 @@ function readBindingEntry(configPath, field, binding) {
1444
1455
  }
1445
1456
  /**
1446
1457
  * Read + parse the root wrangler config (fresh each call — wrangler mutates it).
1447
- * BOM-aware (wrangler + the Task 3 writer strip a leading BOM before parsing, so
1448
- * we must too, else a BOM-prefixed config would look unparseable). FAILS CLOSED
1458
+ * BOM-aware (wrangler + `writeProvisionedWranglerConfig` strip a leading BOM before
1459
+ * parsing, so we must too, else a BOM-prefixed config would look unparseable). FAILS CLOSED
1449
1460
  * on a genuine parse error or a non-object root: never silently treat a real
1450
1461
  * config as `{}`, which would miss existing ids (re-provision/orphan) and mask a
1451
1462
  * corrupt file. A missing file is fine (nothing to read-first → `{}`).
@@ -1474,7 +1485,7 @@ function assertDiscoverySucceeded(result, label) {
1474
1485
  /**
1475
1486
  * STRICT list validator shared by KV + D1. Rejects the ENTIRE list (throws) if ANY
1476
1487
  * member is not a well-formed object carrying a non-empty name AND a
1477
- * FORMAT-VALID id (per {@link ResourceListSpec.idValidator}). A member is NEVER
1488
+ * FORMAT-VALID id (per {@link ResourceListSpec.hasValidId}). A member is NEVER
1478
1489
  * silently filtered, and a member with a malformed id is NEVER accepted, because
1479
1490
  * either could BE the requested target (or signal a corrupt list) and treating it as
1480
1491
  * "absent" would mint a duplicate. Validates EVERY member up front — BEFORE any
@@ -1565,20 +1576,20 @@ function isAlreadyExistsError(result) {
1565
1576
  return result.errorCode === 7502;
1566
1577
  }
1567
1578
  /**
1568
- * EXACT, name-aware not-found classifier shared by R2 + queues. Given a
1569
- * already-NON-zero `<res> info`-by-name probe, returns `true` (confirmed absent →
1570
- * safe to create) ONLY on wrangler's exact, resource-specific not-found signal
1571
- * for THIS name (regex-escaped). Everything else returns `false` so the caller
1579
+ * Not-found classifier shared by R2 + queues. Given an `<res> info`-by-name probe,
1580
+ * returns `true` (confirmed absent → safe to create) ONLY on a clean non-zero exit
1581
+ * with the provider's typed not-found result (R2 error code 10006; the queue
1582
+ * operation's `not-found` failure). Everything else returns `false` so the caller
1572
1583
  * fails closed — a signal/spawn failure, an auth/network/metrics error, or a
1573
1584
  * GENERIC "not found" (e.g. `Account not found`) is NEVER treated as absence,
1574
1585
  * which would mint a duplicate resource.
1575
1586
  */
1576
- function isConfirmedAbsent(result, kind, _name) {
1587
+ function isConfirmedAbsent(result, kind) {
1577
1588
  return isCleanFailure(result) && (kind === "r2" ? result.errorCode === 10006 : result.failure === "not-found");
1578
1589
  }
1579
1590
  /** Only a completed, typed not-found response confirms queue absence. */
1580
- function isQueueConfirmedAbsent(result, name) {
1581
- return isConfirmedAbsent(result, "queue", name);
1591
+ function isQueueConfirmedAbsent(result, _name) {
1592
+ return isConfirmedAbsent(result, "queue");
1582
1593
  }
1583
1594
  /** Reuse and post-create verification require clean success and the exact returned name. */
1584
1595
  function queueInfoConfirmsExists(result, name) {
@@ -1999,8 +2010,8 @@ function redactRejection(error, redactText) {
1999
2010
  * `wrangler <res> create --update-config` write real ids into the root config.
2000
2011
  * For resources that already exist (adopt path) — where `create` cannot run —
2001
2012
  * the real id is captured from `wrangler <res> list/info` (or, for Hyperdrive,
2002
- * the account-list existence seam) and written through the Task 3 writer's adopt
2003
- * fields. Pure provisioning: NO build, deploy, or drift-check. Idempotent +
2013
+ * the account-list existence seam) and written through `writeProvisionedWranglerConfig`'s
2014
+ * adopt fields. Pure provisioning: NO build, deploy, or drift-check. Idempotent +
2004
2015
  * read-first: a binding already pointing at a real id is left untouched.
2005
2016
  */
2006
2017
  async function provisionCloudflareResources(root, rootWranglerPath, desired, opts) {
@@ -2305,7 +2316,7 @@ async function reconcileR2(desired, configPath, runWrangler, write, persistCreat
2305
2316
  name: bucketName,
2306
2317
  action: "adopted"
2307
2318
  });
2308
- } else if (isConfirmedAbsent(info, "r2", bucketName)) {
2319
+ } else if (isConfirmedAbsent(info, "r2")) {
2309
2320
  const created = await runWrangler({
2310
2321
  type: "r2.bucket.create",
2311
2322
  name: bucketName,
@@ -2436,7 +2447,7 @@ async function reconcileQueues(desired, configPath, runWrangler, resources) {
2436
2447
  });
2437
2448
  continue;
2438
2449
  }
2439
- if (!isConfirmedAbsent(info, "queue", name)) throw new Error(`provision: "wrangler queues info ${name}" failed or did not confirm the queue exists: ${info.stderr || info.stdout || "no output"}`);
2450
+ if (!isConfirmedAbsent(info, "queue")) throw new Error(`provision: "wrangler queues info ${name}" failed or did not confirm the queue exists: ${info.stderr || info.stdout || "no output"}`);
2440
2451
  const created = await runWrangler({
2441
2452
  type: "queues.create",
2442
2453
  name,
@@ -2484,9 +2495,7 @@ async function provisionCloudflareResourcesLocked(root, configPath, desired, opt
2484
2495
  const log = opts?.log ?? defaultLogger;
2485
2496
  const resources = [];
2486
2497
  const write = (patch) => writeProvisionedWranglerConfig(root, patch, { configPath });
2487
- const persistCreatedConfig = () => {
2488
- if (basename(configPath) === ".void-wrangler.jsonc") persistCloudflareConfig(dirname(configPath));
2489
- };
2498
+ const persistCreatedConfig = () => persistMaterializedWranglerConfig(configPath);
2490
2499
  const hasRemoteWork = !!desired.d1 || desired.kvNamespaces.length > 0 || !!desired.r2 || !!desired.hyperdrive || desired.queues.length > 0;
2491
2500
  if (hasRemoteWork && !effectiveAccountId) throw new Error("provision: no Cloudflare account is resolvable — set \"account_id\" in your root wrangler config or export CLOUDFLARE_ACCOUNT_ID before deploying. Refusing to provision resources without a pinned account (wrangler would otherwise fall back to an ambient/interactive account that is never persisted, so a later retry could rebind them elsewhere).");
2492
2501
  if (hasRemoteWork) assertNoTransportRedirectInProjectDotenv(root);
@@ -1,3 +1,2 @@
1
- import { r as scanWranglerDotenvKeys } from "./dotenv-VQxupEUv.mjs";
2
- import { _ as resolvePinnedApiBaseUrl, a as checkCloudflareProvisionDrift, c as enableD1ReadReplicationViaApi, d as isQueueConfirmedAbsent, f as isRealD1Id, g as provisionEnv, h as provisionCloudflareResources, i as assertValidResourceName, l as isAlreadyGoneKillError, m as normalizeRunWranglerResult, n as acquireProvisionLock, o as createDefaultRunWrangler, p as isRealKvId, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware, t as WranglerQuarantineError, u as isQuarantineError, v as resolveProperLockfileKey } from "./provision-Btj1jppf.mjs";
3
- export { WranglerQuarantineError, acquireProvisionLock, assertNoTransportRedirectInProjectDotenv, assertValidResourceName, checkCloudflareProvisionDrift, createDefaultRunWrangler, deleteEnvVarCaseAware, enableD1ReadReplicationViaApi, isAlreadyGoneKillError, isQuarantineError, isQueueConfirmedAbsent, isRealD1Id, isRealKvId, normalizeRunWranglerResult, provisionCloudflareResources, provisionEnv, resolvePinnedApiBaseUrl, resolveProperLockfileKey, scanWranglerDotenvKeys };
1
+ import { _ as resolvePinnedApiBaseUrl, a as checkCloudflareProvisionDrift, c as enableD1ReadReplicationViaApi, d as isQueueConfirmedAbsent, f as isRealD1Id, g as provisionEnv, h as provisionCloudflareResources, i as assertValidResourceName, l as isAlreadyGoneKillError, m as normalizeRunWranglerResult, n as acquireProvisionLock, o as createDefaultRunWrangler, p as isRealKvId, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware, t as WranglerQuarantineError, u as isQuarantineError, v as resolveProperLockfileKey } from "./provision-BfaLiWbj.mjs";
2
+ export { WranglerQuarantineError, acquireProvisionLock, assertNoTransportRedirectInProjectDotenv, assertValidResourceName, checkCloudflareProvisionDrift, createDefaultRunWrangler, deleteEnvVarCaseAware, enableD1ReadReplicationViaApi, isAlreadyGoneKillError, isQuarantineError, isQueueConfirmedAbsent, isRealD1Id, isRealKvId, normalizeRunWranglerResult, provisionCloudflareResources, provisionEnv, resolvePinnedApiBaseUrl, resolveProperLockfileKey };