void 0.22.0 → 0.24.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 (301) hide show
  1. package/AGENTS_TEMPLATE.md +1 -1
  2. package/README.md +5 -1
  3. package/dist/{account-cmd-CjyxcGkM.mjs → account-cmd-vJhh5lrb.mjs} +5 -5
  4. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  5. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CQkSDS50.mjs} +26 -96
  7. package/dist/auth-DX3JURcX.mjs +2 -0
  8. package/dist/{auth-link-BLO4ptzo.mjs → auth-link-D75t9wO2.mjs} +5 -5
  9. package/dist/{auth-router-ZUg9MF_U.mjs → auth-router-ClfhL1J7.mjs} +7 -7
  10. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  11. package/dist/{build-cmd-BxR5FROK.mjs → build-cmd-zMi1iFnS.mjs} +21 -9
  12. package/dist/{cache-D0sWhgKI.mjs → cache-ZtQmyxVV.mjs} +5 -5
  13. package/dist/{cancel-deploy-D4NUqFbi.mjs → cancel-deploy-Box0kkEV.mjs} +5 -5
  14. package/dist/{cf-access-P0iZnu0q.mjs → cf-access-BGe5sWXF.mjs} +4 -48
  15. package/dist/{cf-access-DRsQRe6k.mjs → cf-access-TWNzXltp.mjs} +3 -11
  16. package/dist/{cf-build-output-BJ6yGEIS.mjs → cf-build-output-BPqOT964.mjs} +2 -1
  17. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  18. package/dist/cli/cli.mjs +89 -461
  19. package/dist/cli/{cf-compat.mjs → cloudflare-operation-process.mjs} +454 -424
  20. package/dist/cli/env-schema-probe.d.mts +2 -1
  21. package/dist/cli/env-schema-probe.mjs +4 -4
  22. package/dist/client-B9UBI03V.mjs +2 -0
  23. package/dist/{client-BTZ3XkrB.mjs → client-DKAsFA4X.mjs} +161 -24
  24. package/dist/{cloudflare-auth-DQkqoMYa.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -38
  25. package/dist/{cloudflare-cmd-BKlfGHAy.mjs → cloudflare-cmd-CmY8dGkd.mjs} +6 -6
  26. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  27. package/dist/{cloudflare-connect-Ctmrw579.mjs → cloudflare-connect-IiR3ZieC.mjs} +4 -4
  28. package/dist/{cloudflare-operations-BT6OWFBk.mjs → cloudflare-operations-BCdXSsmo.mjs} +1 -1
  29. package/dist/{cloudflare-operations-B9tzgjmf.mjs → cloudflare-operations-DzH-A966.mjs} +116 -172
  30. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  31. package/dist/{config-VavjpDnp.d.mts → config-BMHb8RCj.d.mts} +1 -0
  32. package/dist/config-C_XRIPx2.mjs +89 -0
  33. package/dist/config-entry.d.mts +1 -1
  34. package/dist/{connect-Dg-WkW-C.mjs → connect-B-usTnlF.mjs} +9 -9
  35. package/dist/{create-project-l9J7pbtm.mjs → create-project-CYOOAYcn.mjs} +12 -12
  36. package/dist/{create-project-DdoqwFLF.mjs → create-project-FWbf5Olo.mjs} +1 -1
  37. package/dist/{db-gp2sCXyN.mjs → db-Ck2eZ2iB.mjs} +26 -26
  38. package/dist/{delete-TTedbH6B.mjs → delete-sK56qtzZ.mjs} +5 -5
  39. package/dist/{deploy-CH-o2CaZ.mjs → deploy-gCVaiJbS.mjs} +984 -616
  40. package/dist/{deploy-B19L2Bra.mjs → deploy-irP5q0-x.mjs} +1 -1
  41. package/dist/{domain-JRF59P_r.mjs → domain-DFfQE8jg.mjs} +6 -6
  42. package/dist/{email-Bo6G9LOZ.mjs → email-CdnhUHvJ.mjs} +15 -30
  43. package/dist/{env-BYOrWQnv.mjs → env-DmGdHi5i.mjs} +8 -8
  44. package/dist/{env-public-BxU_0yTL.d.mts → env-public-BX_r8HR6.d.mts} +1 -1
  45. package/dist/{env-types-C2_bIk_b.mjs → env-types-D5kds_OZ.mjs} +1 -1
  46. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-C_8tPdhs.mjs} +20 -73
  47. package/dist/{env-validation-BXge7uyK.mjs → env-validation-zZOCcQVZ.mjs} +1 -1
  48. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  49. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  50. package/dist/{gen-sCtlCOdA.mjs → gen-CshAkukR.mjs} +4 -4
  51. package/dist/gen-DvQTWzDU.mjs +2 -0
  52. package/dist/{github-cmd-0-7PexDq.mjs → github-cmd-DftuEvIt.mjs} +13 -13
  53. package/dist/{handler-HEcZsaij.d.mts → handler-CZ4nAylQ.d.mts} +1 -1
  54. package/dist/{headers-DWi2IXWx.mjs → headers-2rKda9Y6.mjs} +1 -1
  55. package/dist/{help-GKtwl07I.mjs → help-Dotbf6iz.mjs} +236 -750
  56. package/dist/help-mabuIV98.mjs +2 -0
  57. package/dist/{inbound-aVHEUhKo.mjs → inbound-fRkqcXaC.mjs} +1 -1
  58. package/dist/index.d.mts +1 -1
  59. package/dist/index.mjs +299 -1517
  60. package/dist/info-B97bTX9N.mjs +113 -0
  61. package/dist/{init-FZx3Elvz.mjs → init-BTQEZZGJ.mjs} +61 -27
  62. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  63. package/dist/limits-Cjuk2VPm.mjs +68 -0
  64. package/dist/{link-BrQfb_CU.mjs → link-B46sYH0K.mjs} +6 -6
  65. package/dist/{list-D44jmIAM.mjs → list-BnPrIsU_.mjs} +6 -6
  66. package/dist/{live-CKJlvlNp.d.mts → live-Chw1eIMv.d.mts} +1 -1
  67. package/dist/{local-d1-Bg9OzEEO.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  68. package/dist/log-vqY3pqwI.mjs +29 -0
  69. package/dist/{login-CAsAsQ-_.mjs → login-BuiMyUrx.mjs} +8 -8
  70. package/dist/login-DIy9Sb-U.mjs +2 -0
  71. package/dist/{logs-BjKvFnVM.mjs → logs-CZG9d-ic.mjs} +10 -11
  72. package/dist/migrate-BCiJ8w0f.mjs +2 -0
  73. package/dist/{migrate-BPITvDJN.mjs → migrate-q4_njtaW.mjs} +4 -3
  74. package/dist/{node-Dt7z256D.mjs → node-BkyRWRx8.mjs} +1 -1
  75. package/dist/operator-args-B3BTmSoi.mjs +697 -0
  76. package/dist/{operator-auth-8KnOVXVd.mjs → operator-auth-7erYc6Lt.mjs} +2 -2
  77. package/dist/{operator-client-DUwumHpQ.mjs → operator-client-CpHjTd0t.mjs} +3 -3
  78. package/dist/{operator-cmd-BK5CCiT9.mjs → operator-cmd-DGqPJUD3.mjs} +70 -24
  79. package/dist/{output-Dm_A4Tbv.mjs → output-CbM85T4k.mjs} +18 -10
  80. package/dist/pages/client.d.mts +34 -2
  81. package/dist/pages/client.mjs +59 -3
  82. package/dist/pages/index.d.mts +1 -1
  83. package/dist/pages/index.mjs +2 -2
  84. package/dist/pages/islands-plugin.mjs +1 -1
  85. package/dist/pages/protocol.d.mts +2 -2
  86. package/dist/pages/protocol.mjs +2 -308
  87. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  88. package/dist/plan-D1Q5rf-r.mjs +2 -0
  89. package/dist/plan-NPpwZ_kc.mjs +58 -0
  90. package/dist/platform-args-3k8X9-H_.mjs +514 -0
  91. package/dist/platform-args-DdnM6WIf.mjs +2 -0
  92. package/dist/{platform-auth-config-BlN8xTdD.mjs → platform-auth-config-DDrxUy4m.mjs} +6 -6
  93. package/dist/{platform-auth-protection-7d5aV2Jg.mjs → platform-auth-protection-BLadnnct.mjs} +8 -8
  94. package/dist/{platform-auth-recovery-Dxij8ZbR.mjs → platform-auth-recovery-CmCzX2Fl.mjs} +6 -6
  95. package/dist/{platform-cmd-B3hwKrFK.mjs → platform-cmd-DMDEc9uS.mjs} +29 -8
  96. package/dist/{platform-cmd-E0FuL212.mjs → platform-cmd-pMTRhvYs.mjs} +1 -1
  97. package/dist/{platform-domain-D6Xcy9ZX.mjs → platform-domain-Di6EYrQl.mjs} +5 -5
  98. package/dist/{platform-lifecycle-k0E0xoxx.mjs → platform-lifecycle-BBoNzojY.mjs} +1541 -572
  99. package/dist/{platform-lifecycle-DMh_qrry.mjs → platform-lifecycle-BFdSi9Qt.mjs} +1 -1
  100. package/dist/{platform-management-Brz_BDiT.mjs → platform-management-CWOQOWXm.mjs} +10 -7
  101. package/dist/{platform-management-DOtss0BN.mjs → platform-management-DG47jys8.mjs} +1 -1
  102. package/dist/platform-plans-config-Vl9BP3H4.mjs +359 -0
  103. package/dist/{platform-recovery-BvtcXON5.mjs → platform-recovery-BJnQJEtQ.mjs} +4 -4
  104. package/dist/{platform-registry-QBa4DK32.mjs → platform-registry-DkPPXfp_.mjs} +2 -2
  105. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  106. package/dist/{prepare-C-6YZyyg.mjs → prepare-CBLT3CHH.mjs} +3 -3
  107. package/dist/prepare-CnjcTV2s.mjs +2 -0
  108. package/dist/{prepare-CRhJbVrG.mjs → prepare-DnaKBi--.mjs} +5 -21
  109. package/dist/{project-C0Fqu05O.mjs → project-DKG5Ra8p.mjs} +15 -82
  110. package/dist/project-DsblYifa.mjs +2 -0
  111. package/dist/{project-cmd-BZLCqOqw.mjs → project-cmd-DxnXstAq.mjs} +19 -19
  112. package/dist/{project-team-BvgM0WoX.mjs → project-team-BmHcaALJ.mjs} +5 -5
  113. package/dist/{project-token-l5DqK6Az.mjs → project-token-GionZlBI.mjs} +5 -5
  114. package/dist/{project-zero-trust-v6Mvpp8y.mjs → project-zero-trust-JLCjVQA7.mjs} +5 -5
  115. package/dist/prompts-2TGE6oXx.mjs +2 -0
  116. package/dist/prompts-BNUoTiaf.mjs +2044 -0
  117. package/dist/{protocol-BBa6cstI.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  118. package/dist/protocol-U7bfjHmA.mjs +331 -0
  119. package/dist/{provision-Fr9pRqce.mjs → provision-CVku1JFU.mjs} +1 -1
  120. package/dist/{provision-C4IGqkBf.mjs → provision-CaoxO_U7.mjs} +90 -199
  121. package/dist/{requests-DN-BbNiM.mjs → requests-BOjIVAeF.mjs} +5 -5
  122. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  123. package/dist/{rollback-D7rzSaZM.mjs → rollback-CwR3pLj3.mjs} +6 -6
  124. package/dist/route-url-CG7U-cRN.mjs +15 -0
  125. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  126. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  127. package/dist/runtime/ai.d.mts +12 -8
  128. package/dist/runtime/ai.mjs +87 -22
  129. package/dist/runtime/better-auth-mysql.mjs +1 -1
  130. package/dist/runtime/better-auth-pg.mjs +1 -1
  131. package/dist/runtime/better-auth.mjs +1 -1
  132. package/dist/runtime/client-react.mjs +2 -2
  133. package/dist/runtime/client-solid.mjs +2 -2
  134. package/dist/runtime/client-svelte.mjs +2 -2
  135. package/dist/runtime/client-vue.mjs +2 -2
  136. package/dist/runtime/client.mjs +2 -2
  137. package/dist/runtime/durable.d.mts +3 -1
  138. package/dist/runtime/durable.mjs +4 -1
  139. package/dist/runtime/email/testing.mjs +2 -2
  140. package/dist/runtime/email.mjs +1 -1
  141. package/dist/runtime/env-public.d.mts +1 -1
  142. package/dist/runtime/fetch-stream.mjs +1 -1
  143. package/dist/runtime/fetch.mjs +1 -1
  144. package/dist/runtime/handler.d.mts +1 -1
  145. package/dist/runtime/kv.mjs +0 -1
  146. package/dist/runtime/limits.d.mts +2 -0
  147. package/dist/runtime/limits.mjs +2 -0
  148. package/dist/runtime/live-client.d.mts +1 -1
  149. package/dist/runtime/live-server.mjs +25 -16
  150. package/dist/runtime/live.d.mts +1 -1
  151. package/dist/runtime/migration-handler.mjs +62 -42
  152. package/dist/runtime/remote/index.mjs +2 -2
  153. package/dist/runtime/route-url.d.mts +4 -0
  154. package/dist/runtime/route-url.mjs +2 -0
  155. package/dist/runtime/routing.d.mts +180 -0
  156. package/dist/runtime/routing.mjs +1082 -0
  157. package/dist/runtime/sandbox-container.d.mts +1 -1
  158. package/dist/runtime/sandbox-container.mjs +1 -1
  159. package/dist/runtime/sandbox.d.mts +3 -3
  160. package/dist/runtime/sandbox.mjs +75 -45
  161. package/dist/runtime/sse.mjs +1 -1
  162. package/dist/runtime/validator.d.mts +1 -1
  163. package/dist/runtime/ws-server.d.mts +4 -2
  164. package/dist/runtime/ws-server.mjs +27 -2
  165. package/dist/runtime/ws.d.mts +2 -2
  166. package/dist/runtime/ws.mjs +8 -6
  167. package/dist/{sandbox-qpNBT8a3.d.mts → sandbox-XZAqzFlG.d.mts} +11 -8
  168. package/dist/{sandbox-container-DdNEBfCc.d.mts → sandbox-container-Bo0eiFKz.d.mts} +2 -1
  169. package/dist/{sandbox-container-4fdqLnyb.mjs → sandbox-container-C6ItmVuN.mjs} +4 -2
  170. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  171. package/dist/{secret-BOtOl_cb.mjs → secret-ByWJWBUG.mjs} +7 -7
  172. package/dist/{skills-D1II1Juz.mjs → skills-C1PlclPt.mjs} +1 -1
  173. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  174. package/dist/{subcommand-prompt-CY1C4fvl.mjs → subcommand-prompt-klFCfcor.mjs} +40 -32
  175. package/dist/validate-Dq_L3s0S.mjs +2 -0
  176. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  177. package/dist/{wrangler-DQF1vKyf.mjs → wrangler-7K-bW_DL.mjs} +8 -239
  178. package/dist/{ws-BoY7vQML.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  179. package/package.json +16 -10
  180. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  181. package/skills/void/SKILL.md +55 -135
  182. package/skills/void/docs/guide/ai.md +94 -84
  183. package/skills/void/docs/guide/app-types.md +3 -32
  184. package/skills/void/docs/guide/auth.md +12 -116
  185. package/skills/void/docs/guide/database/d1.md +9 -54
  186. package/skills/void/docs/guide/database/mysql.md +1 -1
  187. package/skills/void/docs/guide/database/postgresql.md +5 -26
  188. package/skills/void/docs/guide/database.md +23 -75
  189. package/skills/void/docs/guide/deployment.md +48 -112
  190. package/skills/void/docs/guide/durable-state.md +43 -18
  191. package/skills/void/docs/guide/edge/headers.md +4 -48
  192. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  193. package/skills/void/docs/guide/edge/redirects.md +11 -64
  194. package/skills/void/docs/guide/edge/revalidation.md +5 -18
  195. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  196. package/skills/void/docs/guide/edge/static-assets.md +22 -72
  197. package/skills/void/docs/guide/email/domains.md +116 -0
  198. package/skills/void/docs/guide/email/receiving.md +139 -0
  199. package/skills/void/docs/guide/email/sending.md +231 -0
  200. package/skills/void/docs/guide/email.md +13 -619
  201. package/skills/void/docs/guide/env-migration.md +11 -11
  202. package/skills/void/docs/guide/env-vars.md +9 -29
  203. package/skills/void/docs/guide/index.md +0 -15
  204. package/skills/void/docs/guide/jobs.md +3 -18
  205. package/skills/void/docs/guide/kv.md +5 -11
  206. package/skills/void/docs/guide/live.md +5 -56
  207. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  208. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  209. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  210. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  211. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  212. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  213. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  214. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  215. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  216. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  217. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  218. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  219. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  220. package/skills/void/docs/guide/platform/administration/zero-trust.md +49 -160
  221. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  222. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  223. package/skills/void/docs/guide/platform/installation/ci.md +1 -1
  224. package/skills/void/docs/guide/platform/installation/credentials.md +15 -6
  225. package/skills/void/docs/guide/platform/installation/domains.md +35 -2
  226. package/skills/void/docs/guide/platform/installation/first-deployment.md +4 -2
  227. package/skills/void/docs/guide/platform/installation/maintenance.md +15 -1
  228. package/skills/void/docs/guide/platform/installation/prerequisites.md +24 -18
  229. package/skills/void/docs/guide/platform/installation/setup.md +88 -14
  230. package/skills/void/docs/guide/platform-administration.md +1 -0
  231. package/skills/void/docs/guide/queues.md +7 -9
  232. package/skills/void/docs/guide/quickstart.md +38 -37
  233. package/skills/void/docs/guide/remote-dev.md +5 -10
  234. package/skills/void/docs/guide/sandboxes.md +29 -21
  235. package/skills/void/docs/guide/server-routing.md +9 -72
  236. package/skills/void/docs/guide/sse.md +4 -18
  237. package/skills/void/docs/guide/ssg.md +3 -15
  238. package/skills/void/docs/guide/ssr.md +14 -62
  239. package/skills/void/docs/guide/storage.md +9 -4
  240. package/skills/void/docs/guide/type-safety.md +3 -14
  241. package/skills/void/docs/guide/typed-fetch.md +3 -7
  242. package/skills/void/docs/guide/websockets.md +68 -40
  243. package/skills/void/docs/integrations/agents.md +3 -3
  244. package/skills/void/docs/integrations/cloudflare.md +85 -316
  245. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  246. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  247. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  248. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  249. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  250. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  251. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  252. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  253. package/skills/void/docs/reference/api/auth.md +156 -0
  254. package/skills/void/docs/reference/api/client.md +87 -0
  255. package/skills/void/docs/reference/api/database.md +95 -0
  256. package/skills/void/docs/reference/api/durable.md +46 -0
  257. package/skills/void/docs/reference/api/env.md +50 -0
  258. package/skills/void/docs/reference/api/handlers.md +254 -0
  259. package/skills/void/docs/reference/api/pages.md +241 -0
  260. package/skills/void/docs/reference/api/plugin.md +39 -0
  261. package/skills/void/docs/reference/api/resources.md +109 -0
  262. package/skills/void/docs/reference/api/rewrites.md +76 -0
  263. package/skills/void/docs/reference/api/types.md +92 -0
  264. package/skills/void/docs/reference/api.md +56 -1218
  265. package/skills/void/docs/reference/cli/auth.md +89 -0
  266. package/skills/void/docs/reference/cli/database.md +128 -0
  267. package/skills/void/docs/reference/cli/deploy.md +105 -0
  268. package/skills/void/docs/reference/cli/domains.md +41 -0
  269. package/skills/void/docs/reference/cli/email.md +129 -0
  270. package/skills/void/docs/reference/cli/generate.md +116 -0
  271. package/skills/void/docs/reference/cli/github.md +189 -0
  272. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  273. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  274. package/skills/void/docs/reference/cli/platform-installation.md +142 -0
  275. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  276. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  277. package/skills/void/docs/reference/cli/platform-zero-trust.md +59 -0
  278. package/skills/void/docs/reference/cli/platform.md +70 -0
  279. package/skills/void/docs/reference/cli/project.md +214 -0
  280. package/skills/void/docs/reference/cli/secrets.md +76 -0
  281. package/skills/void/docs/reference/cli/setup.md +70 -0
  282. package/skills/void/docs/reference/cli.md +32 -1682
  283. package/skills/void/docs/reference/config.md +12 -18
  284. package/skills/void/docs/reference/resource-inference.md +3 -58
  285. package/skills/void/docs/reference/structure.md +14 -41
  286. package/dist/auth-CZuiVsFh.mjs +0 -2
  287. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  288. package/dist/client-Czz8o5jP.mjs +0 -2
  289. package/dist/dist-BuDuKZJv.mjs +0 -2
  290. package/dist/dist-CTBk70IR.mjs +0 -1310
  291. package/dist/gen-CNJ62MM7.mjs +0 -2
  292. package/dist/help-CmZzxUba.mjs +0 -2
  293. package/dist/log-ChfPKsVd.mjs +0 -26
  294. package/dist/login-CGcRKEoi.mjs +0 -2
  295. package/dist/migrate-CYfbKkXh.mjs +0 -2
  296. package/dist/plan-BEZ8VJW0.mjs +0 -256
  297. package/dist/plan-DpuOr14e.mjs +0 -2
  298. package/dist/prepare-Bm3iq-u4.mjs +0 -2
  299. package/dist/project-BuUwfj6f.mjs +0 -2
  300. package/dist/validate-EKmJWxmy.mjs +0 -2
  301. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -0,0 +1,182 @@
1
+ import { a as join } from "./dist-BVqXeR_h.mjs";
2
+ import "./project-paths-GgcMozYz.mjs";
3
+ import { m as readConfig } from "./config-Br_JZD6u.mjs";
4
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
+ import { randomUUID } from "node:crypto";
6
+ import { parse } from "jsonc-parser";
7
+ import { isDeepStrictEqual } from "node:util";
8
+ //#region src/cloudflare-config.ts
9
+ const MATERIALIZED_CLOUDFLARE_FILE = ".void-wrangler.jsonc";
10
+ const VOID_LOCK_FILE = "void.lock.json";
11
+ const PREVIEW_POINTER_FILE = "preview-deploy-config.json";
12
+ function isObject(value) {
13
+ return typeof value === "object" && value !== null && !Array.isArray(value);
14
+ }
15
+ function arrayIdentity(value) {
16
+ if (isObject(value)) {
17
+ for (const key of [
18
+ "binding",
19
+ "name",
20
+ "tag",
21
+ "class_name",
22
+ "pattern",
23
+ "route"
24
+ ]) if (typeof value[key] === "string") return `${key}:${value[key]}`;
25
+ }
26
+ return JSON.stringify(value) ?? String(value);
27
+ }
28
+ /** Keep authored values authoritative while retaining fields produced by Void. */
29
+ function mergeConfig(previous, resolved, authored) {
30
+ if (isDeepStrictEqual(previous, authored)) return resolved;
31
+ if (Array.isArray(previous) && Array.isArray(resolved) && Array.isArray(authored)) {
32
+ const previousByIdentity = new Map(previous.map((item) => [arrayIdentity(item), item]));
33
+ const resolvedByIdentity = new Map(resolved.map((item) => [arrayIdentity(item), item]));
34
+ const authoredIdentities = new Set(authored.map(arrayIdentity));
35
+ return [...authored.map((item) => {
36
+ const identity = arrayIdentity(item);
37
+ return previousByIdentity.has(identity) && resolvedByIdentity.has(identity) ? mergeConfig(previousByIdentity.get(identity), resolvedByIdentity.get(identity), item) : item;
38
+ }), ...resolved.filter((item) => {
39
+ const identity = arrayIdentity(item);
40
+ return !previousByIdentity.has(identity) && !authoredIdentities.has(identity);
41
+ })];
42
+ }
43
+ if (isObject(previous) && isObject(resolved) && isObject(authored)) {
44
+ const result = {};
45
+ for (const key of /* @__PURE__ */ new Set([
46
+ ...Object.keys(previous),
47
+ ...Object.keys(resolved),
48
+ ...Object.keys(authored)
49
+ ])) {
50
+ if (!(key in authored)) {
51
+ if (!(key in previous) && key in resolved) Object.defineProperty(result, key, {
52
+ value: resolved[key],
53
+ enumerable: true,
54
+ writable: true,
55
+ configurable: true
56
+ });
57
+ continue;
58
+ }
59
+ const value = mergeConfig(previous[key], resolved[key], authored[key]);
60
+ Object.defineProperty(result, key, {
61
+ value,
62
+ enumerable: true,
63
+ writable: true,
64
+ configurable: true
65
+ });
66
+ }
67
+ return result;
68
+ }
69
+ return authored;
70
+ }
71
+ function parseCloudflareText(text, path) {
72
+ const errors = [];
73
+ const value = parse(text.replace(/^\uFEFF/, ""), errors, { allowTrailingComma: true });
74
+ if (errors.length > 0 || !isObject(value)) throw new Error(`config: ${path} must contain a valid JSON/JSONC object.`);
75
+ return value;
76
+ }
77
+ function readState(root) {
78
+ const path = join(root, VOID_LOCK_FILE);
79
+ if (!existsSync(path)) return;
80
+ let value;
81
+ try {
82
+ value = JSON.parse(readFileSync(path, "utf8"));
83
+ } catch {
84
+ throw new Error(`config: Invalid ${VOID_LOCK_FILE}. Fix or restore it before continuing.`);
85
+ }
86
+ if (!isObject(value) || value.version !== 1 || !isObject(value.source) || !isObject(value.resolved) || typeof value.text !== "string") throw new Error(`config: Invalid ${VOID_LOCK_FILE}. Fix or restore it before continuing.`);
87
+ const state = value;
88
+ if (!isDeepStrictEqual(parseCloudflareText(state.text, "void.lock.json"), state.resolved)) state.text = `${provenance(state.text)}${JSON.stringify(state.resolved, null, 2)}\n`;
89
+ return state;
90
+ }
91
+ function writeAtomic(path, content) {
92
+ const temporary = `${path}.${randomUUID()}.tmp`;
93
+ writeFileSync(temporary, content, { flag: "wx" });
94
+ try {
95
+ renameSync(temporary, path);
96
+ } finally {
97
+ rmSync(temporary, { force: true });
98
+ }
99
+ }
100
+ function writeState(root, state) {
101
+ const path = join(root, VOID_LOCK_FILE);
102
+ const content = `${JSON.stringify(state, null, 2)}\n`;
103
+ if (existsSync(path)) try {
104
+ if (isDeepStrictEqual(JSON.parse(readFileSync(path, "utf8")), state)) return;
105
+ } catch {}
106
+ writeAtomic(path, content);
107
+ }
108
+ /** Keep Vite preview usable without leaving Wrangler's implicit deploy pointer after a build. */
109
+ function stashCloudflareDeployPointer(root) {
110
+ const pointer = join(root, ".wrangler", "deploy", "config.json");
111
+ if (!existsSync(pointer)) return;
112
+ const directory = join(root, ".void");
113
+ mkdirSync(directory, { recursive: true });
114
+ writeAtomic(join(directory, PREVIEW_POINTER_FILE), readFileSync(pointer, "utf8"));
115
+ rmSync(pointer, { force: true });
116
+ }
117
+ function restoreCloudflarePreviewPointer(root) {
118
+ const saved = join(root, ".void", PREVIEW_POINTER_FILE);
119
+ if (!existsSync(saved)) return false;
120
+ const directory = join(root, ".wrangler", "deploy");
121
+ mkdirSync(directory, { recursive: true });
122
+ writeAtomic(join(directory, "config.json"), readFileSync(saved, "utf8"));
123
+ return true;
124
+ }
125
+ /** Preserve Void's JSONC provenance comments when authored settings change. */
126
+ function provenance(text) {
127
+ const lines = text.match(/^\s*\/\/ void:(?:managed-queues|published-traffic):v1:[A-Za-z0-9_-]+\s*$/gm);
128
+ return lines ? `${lines.join("\n")}\n` : "";
129
+ }
130
+ /** Resolve the config file passed to Cloudflare tooling. Typed projects use a generated file. */
131
+ function materializeCloudflareConfig(root) {
132
+ if (!existsSync(join(root, "void.config.ts"))) {
133
+ for (const name of ["wrangler.jsonc", "wrangler.json"]) if (existsSync(join(root, name))) return join(root, name);
134
+ return join(root, "wrangler.jsonc");
135
+ }
136
+ if (["wrangler.jsonc", "wrangler.json"].some((name) => existsSync(join(root, name)))) throw new Error("config: Run `void migrate` to move the root Wrangler config into void.config.ts.");
137
+ const authored = readConfig(root).cloudflare ?? {};
138
+ const state = readState(root);
139
+ const resolved = state ? mergeConfig(state.source, state.resolved, authored) : authored;
140
+ const text = state && isDeepStrictEqual(resolved, state.resolved) && isDeepStrictEqual(authored, state.source) ? state.text : `${provenance(state?.text ?? "")}${JSON.stringify(resolved, null, 2)}\n`;
141
+ const path = join(root, MATERIALIZED_CLOUDFLARE_FILE);
142
+ if (!existsSync(path) || readFileSync(path, "utf8") !== text) writeAtomic(path, text);
143
+ if (state) writeState(root, {
144
+ version: 1,
145
+ source: authored,
146
+ resolved,
147
+ text
148
+ });
149
+ return path;
150
+ }
151
+ /** Record Cloudflare settings written by Void so later builds reproduce them. */
152
+ function persistCloudflareConfig(root) {
153
+ if (!existsSync(join(root, "void.config.ts"))) return;
154
+ const path = join(root, MATERIALIZED_CLOUDFLARE_FILE);
155
+ if (!existsSync(path)) throw new Error(`config: Missing generated ${MATERIALIZED_CLOUDFLARE_FILE}.`);
156
+ const text = readFileSync(path, "utf8");
157
+ const resolved = parseCloudflareText(text, path);
158
+ const authored = readConfig(root).cloudflare ?? {};
159
+ if (readState(root) || !isDeepStrictEqual(resolved, authored) || text !== `${JSON.stringify(authored, null, 2)}\n`) writeState(root, {
160
+ version: 1,
161
+ source: authored,
162
+ resolved,
163
+ text
164
+ });
165
+ }
166
+ /** Seed the checked-in lock from a root Wrangler file during migration. */
167
+ function seedCloudflareConfig(root, source, text) {
168
+ const existing = readState(root);
169
+ if (existing) {
170
+ if (isDeepStrictEqual(existing.source, source) && isDeepStrictEqual(existing.resolved, source)) return;
171
+ throw new Error(`migrate: ${VOID_LOCK_FILE} already exists with different settings. Resolve it before migrating.`);
172
+ }
173
+ if (!isDeepStrictEqual(parseCloudflareText(text, ".void-wrangler.jsonc"), source)) throw new Error("migrate: The Cloudflare config changed during migration. Retry.");
174
+ writeState(root, {
175
+ version: 1,
176
+ source,
177
+ resolved: source,
178
+ text
179
+ });
180
+ }
181
+ //#endregion
182
+ export { restoreCloudflarePreviewPointer as a, persistCloudflareConfig as i, VOID_LOCK_FILE as n, seedCloudflareConfig as o, materializeCloudflareConfig as r, stashCloudflareDeployPointer as s, MATERIALIZED_CLOUDFLARE_FILE as t };
@@ -1,7 +1,7 @@
1
1
  import { a as join, t as basename } from "./dist-BVqXeR_h.mjs";
2
- import { i as LATEST_KNOWN_COMPAT_DATE, k as writeProvisionedWranglerConfig, v as readRootWranglerConfig } from "./wrangler-DQF1vKyf.mjs";
3
- import { I as select, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
4
- import { a as ensureCloudflareAuthentication, i as createBundledCloudflareAuthRunner } from "./cloudflare-auth-DQkqoMYa.mjs";
2
+ import { A as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, y as readRootWranglerConfig } from "./wrangler-7K-bW_DL.mjs";
3
+ import { K as select, L as log, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
+ import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Qdc7tw8F.mjs";
5
5
  import { existsSync } from "node:fs";
6
6
  //#region src/cli/cloudflare-connect.ts
7
7
  async function connectCloudflare(root, interactive = Boolean(process.stdin.isTTY)) {
@@ -24,7 +24,7 @@ async function connectCloudflare(root, interactive = Boolean(process.stdin.isTTY
24
24
  interactive,
25
25
  requireAccounts: true,
26
26
  runWrangler: createBundledCloudflareAuthRunner(root),
27
- whoamiArgs: existingConfigPath ? ["-c", existingConfigPath] : []
27
+ configPath: existingConfigPath
28
28
  });
29
29
  let account = accounts.find((entry) => entry.id === pinnedAccount);
30
30
  if (pinnedAccount && !account) throw new Error(`connect: The signed-in Cloudflare session cannot access account ${pinnedAccount}.`);
@@ -1,2 +1,2 @@
1
- import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-B9tzgjmf.mjs";
1
+ import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-DzH-A966.mjs";
2
2
  export { activateCloudflareExistingVersion, applyCloudflareD1Migrations, changeCloudflareDomain, deleteCloudflareSecret, executeCloudflareD1Sql, listCloudflareDomains, listCloudflareSecrets, putCloudflareSecret, readCloudflareD1Migrations, readCloudflareWorkerStatus, resolveCloudflareD1Context, resolveCloudflareOperationContext, syncCloudflareSecrets, tailCloudflareWorker };
@@ -1,11 +1,11 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { A as writeWranglerPublishedTrafficSnapshot, B as materializeCloudflareConfig, O as updateWranglerCustomDomain, S as readWranglerPublishedTrafficSnapshot, V as persistCloudflareConfig, b as readWranglerCustomDomains } from "./wrangler-DQF1vKyf.mjs";
2
+ import { i as persistCloudflareConfig, r as materializeCloudflareConfig } from "./cloudflare-config-Bktvwtpf.mjs";
3
+ import { C as readWranglerPublishedTrafficSnapshot, j as writeWranglerPublishedTrafficSnapshot, k as updateWranglerCustomDomain, x as readWranglerCustomDomains } from "./wrangler-7K-bW_DL.mjs";
3
4
  import { r as scanWranglerDotenvKeys } from "./dotenv-VQxupEUv.mjs";
4
- import { o as resolveWranglerArgv } from "./preset-UHj9ARyP.mjs";
5
- import { _ as resolvePinnedApiBaseUrl, g as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware } from "./provision-C4IGqkBf.mjs";
5
+ import { t as createCloudflareProcessRunner } from "./cloudflare-process-B-wekeR6.mjs";
6
+ import { _ as resolvePinnedApiBaseUrl, g as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware } from "./provision-CaoxO_U7.mjs";
6
7
  import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
7
8
  import { tmpdir } from "node:os";
8
- import { spawnSync } from "node:child_process";
9
9
  import { deployCloudflareVersionTraffic, encodeCloudflareVersionMessage, parseCloudflareVersionMessage, parseRootWranglerConfig, readBindingFieldPresence, readCloudflareTriggerConfig, readWranglerTopLevelString, resolveD1MigrateTarget, stabilizeCloudflareVersionTriggers } from "@void/deploy-cloudflare";
10
10
  //#region src/cli/cloudflare-operations.ts
11
11
  function resolveCloudflareOperationContext(root, runner) {
@@ -28,13 +28,11 @@ function resolveCloudflareOperationContext(root, runner) {
28
28
  };
29
29
  }
30
30
  async function listCloudflareSecrets(context) {
31
- const parsed = parseJson((await run(context, [
32
- "secret",
33
- "list",
34
- ...targetArgs(context),
35
- "--format",
36
- "json"
37
- ])).stdout, "Cloudflare secret list");
31
+ const parsed = parseJson((await run(context, {
32
+ type: "secret.list",
33
+ configPath: context.configPath,
34
+ workerName: context.workerName
35
+ })).data, "Cloudflare secret list");
38
36
  if (!Array.isArray(parsed)) throw new Error("Cloudflare secret list returned an unexpected response.");
39
37
  return parsed.map((entry) => {
40
38
  if (typeof entry !== "object" || entry === null) return null;
@@ -43,28 +41,28 @@ async function listCloudflareSecrets(context) {
43
41
  }).filter((name) => name !== null).sort();
44
42
  }
45
43
  async function putCloudflareSecret(context, name, value) {
46
- await run(context, [
47
- "secret",
48
- "put",
44
+ await run(context, {
45
+ type: "secret.put",
49
46
  name,
50
- ...targetArgs(context)
51
- ], { input: value });
47
+ configPath: context.configPath,
48
+ workerName: context.workerName
49
+ }, { input: value });
52
50
  }
53
51
  async function syncCloudflareSecrets(context, secrets) {
54
52
  const values = Object.fromEntries(secrets.map(({ name, value }) => [name, value]));
55
- await run(context, [
56
- "secret",
57
- "bulk",
58
- ...targetArgs(context)
59
- ], { input: `${JSON.stringify(values)}\n` });
53
+ await run(context, {
54
+ type: "secret.bulk",
55
+ configPath: context.configPath,
56
+ workerName: context.workerName
57
+ }, { input: `${JSON.stringify(values)}\n` });
60
58
  }
61
59
  async function deleteCloudflareSecret(context, name) {
62
- await run(context, [
63
- "secret",
64
- "delete",
60
+ await run(context, {
61
+ type: "secret.delete",
65
62
  name,
66
- ...targetArgs(context)
67
- ]);
63
+ configPath: context.configPath,
64
+ workerName: context.workerName
65
+ });
68
66
  }
69
67
  function resolveCloudflareD1Context(root, binding, runner) {
70
68
  const operation = resolveCloudflareOperationContext(root, runner);
@@ -84,18 +82,12 @@ function resolveCloudflareD1Context(root, binding, runner) {
84
82
  };
85
83
  }
86
84
  async function executeCloudflareD1Sql(context, sql) {
87
- const parsed = parseJson((await run(context.operation, [
88
- "d1",
89
- "execute",
90
- context.migrateToken,
91
- "--remote",
92
- "--command",
85
+ const parsed = parseJson((await run(context.operation, {
86
+ type: "d1.execute",
87
+ database: context.migrateToken,
93
88
  sql,
94
- "--json",
95
- "-c",
96
- context.operation.configPath,
97
- "--env="
98
- ])).stdout, "Cloudflare D1 execute");
89
+ configPath: context.operation.configPath
90
+ })).data, "Cloudflare D1 execute");
99
91
  if (!Array.isArray(parsed)) throw new Error("Cloudflare D1 execute returned an unexpected response.");
100
92
  const rows = [];
101
93
  for (const item of parsed) {
@@ -116,46 +108,38 @@ async function readCloudflareD1Migrations(context) {
116
108
  }
117
109
  }
118
110
  async function applyCloudflareD1Migrations(context) {
119
- await run(context.operation, [
120
- "d1",
121
- "migrations",
122
- "apply",
123
- context.migrateToken,
124
- "--remote",
125
- "-c",
126
- context.operation.configPath,
127
- "--env="
128
- ], { capture: false });
111
+ await run(context.operation, {
112
+ type: "d1.migrations.apply",
113
+ database: context.migrateToken,
114
+ configPath: context.operation.configPath
115
+ }, { capture: false });
129
116
  }
130
117
  async function readCloudflareWorkerStatus(context) {
131
118
  const [deployment, deployments, versions] = await Promise.all([
132
- run(context, [
133
- "deployments",
134
- "status",
135
- ...targetArgs(context),
136
- "--json"
137
- ]),
138
- run(context, [
139
- "deployments",
140
- "list",
141
- ...targetArgs(context),
142
- "--json"
143
- ]),
144
- run(context, [
145
- "versions",
146
- "list",
147
- ...targetArgs(context),
148
- "--json"
149
- ])
119
+ run(context, {
120
+ type: "deployments.status",
121
+ configPath: context.configPath,
122
+ workerName: context.workerName
123
+ }),
124
+ run(context, {
125
+ type: "deployments.list",
126
+ configPath: context.configPath,
127
+ workerName: context.workerName
128
+ }),
129
+ run(context, {
130
+ type: "versions.list",
131
+ configPath: context.configPath,
132
+ workerName: context.workerName
133
+ })
150
134
  ]);
151
- const activeVersionId = parseActiveVersionId(deployment.stdout);
152
- const deployedVersionIds = parseCloudflareDeployedVersionIds(deployments.stdout);
135
+ const activeVersionId = parseActiveVersionId(deployment.data);
136
+ const deployedVersionIds = parseCloudflareDeployedVersionIds(deployments.data);
153
137
  if (activeVersionId && !deployedVersionIds.includes(activeVersionId)) deployedVersionIds.push(activeVersionId);
154
138
  return {
155
139
  workerName: context.workerName,
156
140
  activeVersionId,
157
141
  deployedVersionIds,
158
- versions: parseCloudflareVersions(versions.stdout)
142
+ versions: parseCloudflareVersions(versions.data)
159
143
  };
160
144
  }
161
145
  /** Return only versions that Cloudflare records as members of a production deployment. */
@@ -221,15 +205,16 @@ async function activateCloudflareExistingVersion(context, target, current) {
221
205
  const expectedVersionId = current?.id ?? await readActiveCloudflareVersionId(context);
222
206
  const ownerBeforeActivation = await readActiveCloudflareVersionId(context);
223
207
  if (ownerBeforeActivation !== expectedVersionId) throw new Error(`Cloudflare production changed from ${expectedVersionId ?? "no active version"} to ${ownerBeforeActivation ?? "no active version"} before rollback activation. Retry from fresh deployment status.`);
224
- await run(context, [
225
- "versions",
226
- "deploy",
227
- `${target.id}@100`,
228
- ...targetArgs(context),
229
- "--message",
230
- message,
231
- "--yes"
232
- ], { capture: false });
208
+ await run(context, {
209
+ type: "versions.deploy",
210
+ versions: [{
211
+ versionId: target.id,
212
+ percentage: 100
213
+ }],
214
+ configPath: context.configPath,
215
+ workerName: context.workerName,
216
+ message
217
+ }, { capture: false });
233
218
  const knownTriggerConfigs = { [target.id]: targetTriggerConfig };
234
219
  if (currentTriggerConfig && current) knownTriggerConfigs[current.id] = currentTriggerConfig;
235
220
  const triggers = await stabilizeCloudflareVersionTriggers({
@@ -272,15 +257,16 @@ async function activateCloudflareExistingVersion(context, target, current) {
272
257
  }
273
258
  let recoveryFailure = null;
274
259
  try {
275
- await run(context, [
276
- "versions",
277
- "deploy",
278
- `${current.id}@100`,
279
- ...targetArgs(context),
280
- "--message",
281
- `Void automatic rollback after trigger synchronization failed.`,
282
- "--yes"
283
- ], { capture: false });
260
+ await run(context, {
261
+ type: "versions.deploy",
262
+ versions: [{
263
+ versionId: current.id,
264
+ percentage: 100
265
+ }],
266
+ configPath: context.configPath,
267
+ workerName: context.workerName,
268
+ message: `Void automatic rollback after trigger synchronization failed.`
269
+ }, { capture: false });
284
270
  const restoredTriggers = await stabilizeCloudflareVersionTriggers({
285
271
  runWrangler: context.runWrangler,
286
272
  workerName: context.workerName,
@@ -305,27 +291,21 @@ async function activateCloudflareExistingVersion(context, target, current) {
305
291
  throw new Error(recoveryFailure ? `Cloudflare trigger synchronization failed after activating ${target.id}, and automatic recovery also failed: ${recoveryFailure}` : `Cloudflare trigger synchronization failed after activating ${target.id}; traffic and triggers were restored to ${current.id}.`);
306
292
  }
307
293
  async function readActiveCloudflareVersionId(context) {
308
- return parseActiveVersionId((await run(context, [
309
- "deployments",
310
- "status",
311
- ...targetArgs(context),
312
- "--json"
313
- ])).stdout);
294
+ return parseActiveVersionId((await run(context, {
295
+ type: "deployments.status",
296
+ configPath: context.configPath,
297
+ workerName: context.workerName
298
+ })).data);
314
299
  }
315
300
  async function tailCloudflareWorker(context, options) {
316
- const args = [
317
- "tail",
318
- context.workerName,
319
- "-c",
320
- context.configPath,
321
- "--env=",
322
- "--format",
323
- "pretty"
324
- ];
325
- if (options.filter) args.push("--search", options.filter);
326
- if (options.versionId) args.push("--version-id", options.versionId);
327
- if (options.status) args.push("--status", options.status);
328
- await run(context, args, { capture: false });
301
+ await run(context, {
302
+ type: "tail",
303
+ workerName: context.workerName,
304
+ configPath: context.configPath,
305
+ search: options.filter,
306
+ versionId: options.versionId,
307
+ status: options.status
308
+ }, { capture: false });
329
309
  }
330
310
  function listCloudflareDomains(root) {
331
311
  return readWranglerCustomDomains(root).domains;
@@ -344,15 +324,11 @@ async function changeCloudflareDomain(root, hostname, action, runner, emptyDomai
344
324
  return;
345
325
  }
346
326
  writeDomainTriggerConfig(context, before.configPath, triggerConfigPath);
347
- await run(context, [
348
- "triggers",
349
- "deploy",
350
- "-c",
351
- triggerConfigPath,
352
- "--env=",
353
- "--name",
354
- context.workerName
355
- ], { capture: false });
327
+ await run(context, {
328
+ type: "triggers.deploy",
329
+ configPath: triggerConfigPath,
330
+ workerName: context.workerName
331
+ }, { capture: false });
356
332
  };
357
333
  try {
358
334
  await deployRoutes();
@@ -385,11 +361,11 @@ async function changeCloudflareDomain(root, hostname, action, runner, emptyDomai
385
361
  * explicitly using the same verified browser/API credentials as other commands.
386
362
  */
387
363
  async function publishEmptyCloudflareCustomDomainSet(context) {
388
- await run(context, [
389
- "triggers",
390
- "clear-domains",
391
- ...targetArgs(context)
392
- ]);
364
+ await run(context, {
365
+ type: "triggers.clear-domains",
366
+ configPath: context.configPath,
367
+ workerName: context.workerName
368
+ });
393
369
  }
394
370
  /** Adapt the direct empty-domain API call to the deployment package's result contract. */
395
371
  function createCloudflareEmptyDomainPublisher(context) {
@@ -415,11 +391,11 @@ function createCloudflareEmptyDomainPublisher(context) {
415
391
  function createCloudflareEmptyCronPublisher(context) {
416
392
  return async () => {
417
393
  try {
418
- return await run(context, [
419
- "triggers",
420
- "clear-crons",
421
- ...targetArgs(context)
422
- ]);
394
+ return await run(context, {
395
+ type: "triggers.clear-crons",
396
+ configPath: context.configPath,
397
+ workerName: context.workerName
398
+ });
423
399
  } catch (error) {
424
400
  return {
425
401
  status: 1,
@@ -450,15 +426,6 @@ function writeDomainTriggerConfig(context, sourceConfigPath, triggerConfigPath)
450
426
  if (compatibilityDate) config.compatibility_date = compatibilityDate;
451
427
  writeFileSync(triggerConfigPath, `${JSON.stringify(config, null, 2)}\n`);
452
428
  }
453
- function targetArgs(context) {
454
- return [
455
- "-c",
456
- context.configPath,
457
- "--env=",
458
- "--name",
459
- context.workerName
460
- ];
461
- }
462
429
  async function run(context, args, options) {
463
430
  const result = await Promise.resolve(context.runWrangler(args, {
464
431
  capture: options?.capture ?? true,
@@ -466,44 +433,24 @@ async function run(context, args, options) {
466
433
  }));
467
434
  if (result.status !== 0 || result.signal != null || result.error !== void 0 && result.error !== null && result.error !== "") {
468
435
  const detail = result.stderr.trim() || result.stdout.trim() || result.error || "unknown error";
469
- throw new Error(`Cloudflare command failed (${args.slice(0, 2).join(" ")}, exit ${result.status}): ${detail}`);
436
+ throw new Error(`Cloudflare command failed (${args.type}, exit ${result.status}): ${detail}`);
470
437
  }
471
438
  return result;
472
439
  }
473
440
  function createCloudflareOperationRunner(root, accountId, apiBaseUrl) {
474
- const [command, ...prefix] = resolveWranglerArgv(root);
475
- return (args, options) => {
476
- const env = provisionEnv({
477
- accountId,
478
- apiBaseUrl
479
- });
480
- deleteEnvVarCaseAware(env, "WRANGLER_CI_OVERRIDE_NAME");
481
- if (!options.capture) env.WRANGLER_LOG = "none";
482
- const result = spawnSync(command, [...prefix, ...args], {
483
- cwd: root,
484
- env,
485
- shell: false,
486
- windowsHide: true,
487
- encoding: "utf-8",
488
- input: options.input,
489
- stdio: options.input !== void 0 ? [
490
- "pipe",
491
- options.capture ? "pipe" : "inherit",
492
- options.capture ? "pipe" : "inherit"
493
- ] : options.capture ? [
494
- "ignore",
495
- "pipe",
496
- "pipe"
497
- ] : "inherit"
498
- });
499
- return {
500
- status: typeof result.status === "number" ? result.status : 1,
501
- stdout: result.stdout ?? "",
502
- stderr: result.stderr ?? "",
503
- signal: result.signal ?? null,
504
- error: result.error?.message ?? null
505
- };
506
- };
441
+ return createCloudflareProcessRunner({
442
+ root,
443
+ accountId,
444
+ apiBaseUrl,
445
+ env: () => {
446
+ const env = provisionEnv({
447
+ accountId,
448
+ apiBaseUrl
449
+ });
450
+ deleteEnvVarCaseAware(env, "WRANGLER_CI_OVERRIDE_NAME");
451
+ return env;
452
+ }
453
+ });
507
454
  }
508
455
  function discoverRootWranglerConfig(root) {
509
456
  return materializeCloudflareConfig(root);
@@ -522,11 +469,8 @@ function assertNoOperationConfigOverride(root) {
522
469
  }
523
470
  }
524
471
  function parseJson(value, label) {
525
- try {
526
- return JSON.parse(value);
527
- } catch {
528
- throw new Error(`${label} did not return valid JSON.`);
529
- }
472
+ if (value === void 0) throw new Error(label + " did not return structured data.");
473
+ return value;
530
474
  }
531
475
  function errorMessage(error) {
532
476
  return error instanceof Error ? error.message : String(error);