void 1.3.0 → 1.5.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.
- package/README.md +1 -1
- package/dist/{account-cmd-B4i71m7k.mjs → account-cmd-ChVKPZ-w.mjs} +7 -8
- package/dist/{action-key-XZ9HkWAO.mjs → action-key-XtKKbbsi.mjs} +1 -2
- package/dist/{agents-CuNtT0D_.mjs → agents-DRo8gzni.mjs} +2 -3
- package/dist/{application-analysis-DYdVoMAY.mjs → application-analysis-2vGZrKzg.mjs} +27 -29
- package/dist/{application-routing-C8EqRDfv.mjs → application-routing-DnUQoOJD.mjs} +2 -3
- package/dist/{ast-CsZ_q_gc.mjs → ast-Cv0JwXqb.mjs} +1 -2
- package/dist/{ast-bindings-C3yaPs1y.mjs → ast-bindings-BkivMJIo.mjs} +6 -11
- package/dist/{atomic-write-Dq6R0BPN.mjs → atomic-write-DA6eD1Kp.mjs} +1 -2
- package/dist/auth-CH4PLAX1.d.mts +68 -0
- package/dist/{auth-Cbqi1iVX.mjs → auth-CL-p_rqV.mjs} +1 -1
- package/dist/{auth-B6iOCjKI.mjs → auth-Dy8svcqQ.mjs} +6 -7
- package/dist/{auth-3sGB0zJ1.mjs → auth-YVjBX5NY.mjs} +1 -2
- package/dist/{auth-client-Bawdj38n.d.mts → auth-client-6-Ft9i9T.d.mts} +0 -2
- package/dist/{auth-client-BWBT8HLp.mjs → auth-client-DwCdwKbw.mjs} +1 -2
- package/dist/{auth-client-react-CMLwT2xI.mjs → auth-client-react-CJdeErvM.mjs} +1 -2
- package/dist/{auth-client-react-7GFffu8R.d.mts → auth-client-react-DvQLe5Zb.d.mts} +0 -2
- package/dist/{auth-client-solid-UoreJWZG.mjs → auth-client-solid-BRvgvp6h.mjs} +1 -2
- package/dist/{auth-client-solid-DyTFL4cq.d.mts → auth-client-solid-P9pEtKGp.d.mts} +0 -2
- package/dist/{auth-client-svelte-zetW0KIH.d.mts → auth-client-svelte-B5j8irT6.d.mts} +0 -2
- package/dist/{auth-client-svelte-Cv_WvrRk.mjs → auth-client-svelte-BSqUCEed.mjs} +1 -2
- package/dist/{auth-client-vue-bChShbQP.d.mts → auth-client-vue-BEiAfavk.d.mts} +0 -2
- package/dist/{auth-client-vue-CFk7Xbv3.mjs → auth-client-vue-CPkbRtOO.mjs} +1 -2
- package/dist/{auth-link-BKwHPbdv.mjs → auth-link-D4uMdOsw.mjs} +7 -8
- package/dist/{auth-migrations-BO27GDNr.mjs → auth-migrations-DDeifS3v.mjs} +1 -2
- package/dist/{auth-router-DqLx8E0F.mjs → auth-router-62dna450.mjs} +14 -10
- package/dist/{base64-DVrOndmI.mjs → base64-ikl9yBy3.mjs} +1 -2
- package/dist/{better-auth-shared-DVk2DkTW.d.mts → better-auth-shared-BJyG2mH0.d.mts} +2 -6
- package/dist/{better-auth-shared-7FM3Uk2N.mjs → better-auth-shared-CiclgPde.mjs} +4 -5
- package/dist/{build-cmd-Dy4psnt1.mjs → build-cmd-D93K_4Sa.mjs} +7 -8
- package/dist/{cache-DV37S6dl.mjs → cache-CiIzEED4.mjs} +7 -8
- package/dist/{cancel-deploy-DMPyu1Vt.mjs → cancel-deploy-BNoGfn2e.mjs} +6 -7
- package/dist/{cf-access-CWP4avfP.mjs → cf-access-BmBT2h8_.mjs} +3 -4
- package/dist/{cf-access-BM9G0lhO.mjs → cf-access-pejlJmuy.mjs} +1 -2
- package/dist/{cf-build-output-Bapzc_8Z.mjs → cf-build-output-B1C8U83u.mjs} +60 -317
- package/dist/cf-build-output-CmDOcA7K.mjs +1 -0
- package/dist/{cf-command-values-ByHk0xg4.mjs → cf-command-values-Ccl-zRhl.mjs} +10 -7
- package/dist/cf-config-migrate-Dy8MrKgF.mjs +326 -0
- package/dist/{cf-worker-settings-BECvvTVd.mjs → cf-worker-settings-CARs4Wy9.mjs} +14 -10
- package/dist/cli/cli.mjs +66 -76
- package/dist/cli/cloudflare-operation-process.mjs +21 -19
- package/dist/cli/env-schema-probe.d.mts +1 -5
- package/dist/cli/env-schema-probe.mjs +4 -5
- package/dist/client-DVtAKeUm.mjs +1 -0
- package/dist/{client-BEMtySaV.mjs → client-Qayy9xEh.mjs} +10 -12
- package/dist/{cloudflare-auth-Byo_0_N9.mjs → cloudflare-auth-CEu-1Ps_.mjs} +3 -4
- package/dist/{cloudflare-cmd-BaqIigwI.mjs → cloudflare-cmd-DiFGaLow.mjs} +7 -8
- package/dist/{cloudflare-config-DchHxPTo.mjs → cloudflare-config-Chet188_.mjs} +25 -9
- package/dist/{cloudflare-connect-pNLQmr_e.mjs → cloudflare-connect-BdgAQBc7.mjs} +5 -6
- package/dist/{cloudflare-operations-vP3b5CQf.mjs → cloudflare-operations-CWA24vCh.mjs} +8 -9
- package/dist/{cloudflare-operations-PCM4wucv.mjs → cloudflare-operations-D8MoezuN.mjs} +1 -1
- package/dist/{cloudflare-process-8jEYIeim.mjs → cloudflare-process-DjJ638A-.mjs} +7 -9
- package/dist/{cloudflare-user-output-Q-k0QoNQ.mjs → cloudflare-user-output-zEwuGrEJ.mjs} +1 -2
- package/dist/collect-8i0wU63d.mjs +1 -0
- package/dist/{collect-Dew86qce.mjs → collect-C6Blu9yw.mjs} +2 -3
- package/dist/{config-BU6hMu1W.mjs → config-BszFVhpk.mjs} +1 -1
- package/dist/{config-BIaXIkkv.mjs → config-Bt4rw93x.mjs} +5 -6
- package/dist/{config-Du88-7Y8.d.mts → config-CzsNzGVH.d.mts} +4 -6
- package/dist/{config-DHgSEWT7.mjs → config-DkA9jYF2.mjs} +9 -8
- package/dist/config-WlvEcL82.mjs +86 -0
- package/dist/config-entry.d.mts +1 -3
- package/dist/config-entry.mjs +1 -2
- package/dist/{connect-DwVsBvVh.mjs → connect-b9mJbb6X.mjs} +10 -11
- package/dist/{create-project-CjzbBlTv.mjs → create-project-eomwm0wa.mjs} +9 -11
- package/dist/{create-project-CgrnvzyA.mjs → create-project-rnjum4_V.mjs} +1 -1
- package/dist/{database-provider-Cx525bwX.mjs → database-provider-DkZo4VwN.mjs} +1 -2
- package/dist/database-provider.d.mts +1 -3
- package/dist/database-provider.mjs +1 -1
- package/dist/{db-rvo64snS.mjs → db-UPWmiSk1.mjs} +52 -54
- package/dist/{db-types-NGxPwnlt.mjs → db-types-C_8amnB0.mjs} +3 -4
- package/dist/{delete-DWX6dP4M.mjs → delete-BeeYi1WO.mjs} +7 -8
- package/dist/deploy-CfU7CR-b.mjs +2 -0
- package/dist/{deploy-hRPvw8ci.mjs → deploy-CwmCcTlq.mjs} +321 -185
- package/dist/{deploy-managed-static-CDYA2p3L.mjs → deploy-managed-static-gPDxyp3v.mjs} +46 -46
- package/dist/{deploy-transport-JCxw7QDi.mjs → deploy-transport-L6zzPE9T.mjs} +17 -17
- package/dist/deploy.d.mts +3 -3
- package/dist/deploy.mjs +13 -12
- package/dist/{dev-inbox-D0jxye_D.mjs → dev-inbox-CwH5VuZj.mjs} +3 -4
- package/dist/discover-D4mQthao.mjs +1 -0
- package/dist/{discover-LaV0tbIu.mjs → discover-Dhkzxgdt.mjs} +3 -4
- package/dist/{dispatch-OVLeWW8K.mjs → dispatch-CiJ1Xrba.mjs} +13 -16
- package/dist/{dist-Cegxq8gs.mjs → dist-B6eN80gc.mjs} +199 -118
- package/dist/{dist-D15hFhP0.mjs → dist-BWNkVq50.mjs} +8 -15
- package/dist/{dist-Cor9XGoz.mjs → dist-D23AAMxT.mjs} +9 -16
- package/dist/{dist-ipQi0Q8y.mjs → dist-DMYe8CZJ.mjs} +1 -2
- package/dist/{dist-B1PLt4_8.mjs → dist-eV_Ep60B.mjs} +1 -1
- package/dist/{domain-CH5iBD9Y.mjs → domain-3xdH9p2L.mjs} +8 -9
- package/dist/{dotenv-CNazY3-w.mjs → dotenv-CEI8hapP.mjs} +1 -2
- package/dist/{drizzle-9TubSZvI.mjs → drizzle-C8MPqt5m.mjs} +1 -1
- package/dist/{drizzle-BQfyvQKX.mjs → drizzle-lFdzSEa9.mjs} +2 -3
- package/dist/{email-B9ayYQEG.mjs → email-BHY72ixO.mjs} +3 -4
- package/dist/{email-CbTO1l78.mjs → email-Du3YRnM5.mjs} +14 -15
- package/dist/{email-cloudflare-B8-pq_-W.mjs → email-cloudflare-CtD8qE13.mjs} +34 -24
- package/dist/{email-protocol-D9nTvhCp.mjs → email-protocol-DTs_TjCS.mjs} +1 -2
- package/dist/{entry-BEM8ZuGP.mjs → entry-CBZsCy3O.mjs} +5 -6
- package/dist/{env-BBdw236G.mjs → env-Cnvp0pGy.mjs} +10 -11
- package/dist/{env-BaMz0j7H.mjs → env-CuzZZyjB.mjs} +3 -4
- package/dist/{env-0jrMQJI_.mjs → env-DtKg5G26.mjs} +2 -3
- package/dist/{env-helpers--wFmQ_5Q.mjs → env-helpers-Dj_SIwPu.mjs} +1 -2
- package/dist/{env-helpers-CyKtOBpj.d.mts → env-helpers-U56xuFgL.d.mts} +1 -3
- package/dist/{env-public-6lqiSD2b.d.mts → env-public-CeNeO_AT.d.mts} +2 -4
- package/dist/{env-raw-D74P4ebM.mjs → env-raw-e8qgqAzQ.mjs} +1 -2
- package/dist/{env-types-BicfKBhV.mjs → env-types-DqzVBKnS.mjs} +4 -5
- package/dist/{env-validation-BfBVvBNe.mjs → env-validation-C8Cmvas0.mjs} +1 -1
- package/dist/{env-validation-XcukUlFM.mjs → env-validation-GV1oD4EV.mjs} +10 -10
- package/dist/error-pages-COVBnzK7.mjs +31 -0
- package/dist/{fetch-CUX0tB78.d.mts → fetch-B-gLGYVl.d.mts} +0 -4
- package/dist/{fetch-CtESUYWd.mjs → fetch-C8yhLoF3.mjs} +3 -4
- package/dist/{fetch-error-Bw0n-IY-.mjs → fetch-error-DmlRM6e4.mjs} +2 -4
- package/dist/{fetch-stream-BspOeTAI.mjs → fetch-stream-DafNtVJC.mjs} +4 -5
- package/dist/{fetch-stream-DfkAzZf-.d.mts → fetch-stream-DuwxWmBM.d.mts} +1 -3
- package/dist/{gen-CCx3t2Ju.mjs → gen-BvVmpZ5f.mjs} +12 -13
- package/dist/gen-i61rdQgg.mjs +1 -0
- package/dist/{generate-DkEb9rL-.mjs → generate-BOp1g1H_.mjs} +1 -1
- package/dist/{generate-B1m4Cm4n.mjs → generate-CWb8aOsm.mjs} +4 -5
- package/dist/{generated-wrangler-config-DeWj5F9Y.mjs → generated-wrangler-config-CoDaaFsA.mjs} +1 -2
- package/dist/{git-metadata-D-gurjzG.mjs → git-metadata-Cukp5kV5.mjs} +1 -2
- package/dist/{github-cmd-BzkRLkbg.mjs → github-cmd-X2GKiLi-.mjs} +8 -9
- package/dist/{handler-CQv5YDS0.d.mts → handler-Drm_lyrV.d.mts} +15 -26
- package/dist/{handler-BZ1t7-Rv.mjs → handler-xmzz0U38.mjs} +4 -5
- package/dist/{head-D2VF4ApL.mjs → head-5XPcnG-j.mjs} +1 -2
- package/dist/{head-C8K_iGe6.d.mts → head-MeF_5M_3.d.mts} +0 -2
- package/dist/{headers-D522zd0A.mjs → headers-DEUBAM6W.mjs} +4 -5
- package/dist/help-BcZDUcTw.mjs +1 -0
- package/dist/{help-CKbrhZha.mjs → help-EWDNxST-.mjs} +19 -11
- package/dist/{inbound-VrOLqwZY.mjs → inbound-DQfekMtz.mjs} +5 -6
- package/dist/{inbound-Da7XsjH3.d.mts → inbound-DSKSHDUj.d.mts} +0 -4
- package/dist/index.d.mts +23 -13
- package/dist/index.mjs +504 -225
- package/dist/{info-oBm8yK8J.mjs → info-jW8_d3VI.mjs} +6 -7
- package/dist/{init-CBp_uMve.mjs → init-jDQ5G9QC.mjs} +62 -64
- package/dist/{isr-config-fZaJJ8t7.mjs → isr-config-DhBkzCdY.mjs} +5 -9
- package/dist/{limits-D0vD1M9A.mjs → limits-CrHLm5Tk.mjs} +1 -2
- package/dist/{limits-CFsDKQvU.d.mts → limits-_xIf5z_P.d.mts} +0 -2
- package/dist/{link-Dt_QXmM4.mjs → link-DOyxX5Xs.mjs} +8 -9
- package/dist/{list-DF6asTdt.mjs → list-C9pTYDtl.mjs} +8 -9
- package/dist/{live-CXJ9yC98.d.mts → live-CDBHyYiR.d.mts} +2 -4
- package/dist/{live-BcHoTDFe.mjs → live-DF4HUl2m.mjs} +5 -7
- package/dist/{load-user-env-DD5qveNU.mjs → load-user-env-CSwdofj0.mjs} +1 -2
- package/dist/{local-d1-CUhH3qtj.mjs → local-d1-CKfek6Z4.mjs} +4 -5
- package/dist/{log-BMwmN5Ae.mjs → log-D9hwSySP.mjs} +3 -4
- package/dist/login-C0MiQrYs.mjs +1 -0
- package/dist/{login-BjSyhXlT.mjs → login-koQbjzPd.mjs} +6 -7
- package/dist/{logs-DmvBl6xA.mjs → logs-cTU5TsRW.mjs} +8 -9
- package/dist/migrate-BG09-KOv.mjs +1 -0
- package/dist/{migrate-BXRHpYwR.mjs → migrate-C62pGTfr.mjs} +22 -79
- package/dist/{migration-handler-CwlEQUoo.d.mts → migration-handler-D8mDx3Ew.d.mts} +0 -4
- package/dist/{migration-handler-Cg0Y4EPu.mjs → migration-handler-DCehTlWs.mjs} +1 -2
- package/dist/{mime-BAyHPskU.mjs → mime-DKkO7ZtA.mjs} +2 -3
- package/dist/{mysql-migration-sql-BIS5vbNk.mjs → mysql-migration-sql-CI9VTwjt.mjs} +3 -5
- package/dist/{neon-DTZr7Bu7.mjs → neon-CJzQSycr.mjs} +2 -3
- package/dist/nitro.d.mts +0 -2
- package/dist/nitro.mjs +6 -7
- package/dist/{node-DtD7ZiPf.mjs → node-BfAt2rz8.mjs} +9 -10
- package/dist/{operator-args-BsJIYXaT.mjs → operator-args-D79WQP70.mjs} +2 -3
- package/dist/{operator-auth-Cr2zCc-J.mjs → operator-auth-CfDcmzpo.mjs} +2 -3
- package/dist/{operator-client-C-ROjk1I.mjs → operator-client-BIY4-N_6.mjs} +3 -4
- package/dist/operator-cmd-BhHXIL2G.mjs +1 -0
- package/dist/{operator-cmd-DjZKGGgN.mjs → operator-cmd-CnAvSqJ5.mjs} +8 -9
- package/dist/{output-BpgYODYx.mjs → output-BCdLioKP.mjs} +4 -5
- package/dist/output-E6gecbbV.mjs +1 -0
- package/dist/{package-json-BjYqR-So.mjs → package-json-DvS6IFRv.mjs} +2 -3
- package/dist/pages/client.d.mts +22 -23
- package/dist/pages/client.mjs +51 -31
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +18 -14
- package/dist/pages/index.mjs +99 -10
- package/dist/pages/islands-plugin.d.mts +29 -11
- package/dist/pages/islands-plugin.mjs +3 -4
- package/dist/pages/prefetch.d.mts +1 -1
- package/dist/pages/prefetch.mjs +1 -1
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/pages/serialize.d.mts +1 -1
- package/dist/pages/serialize.mjs +1 -1
- package/dist/{pg-J2HbZIkX.mjs → pg-DoyPxa_X.mjs} +1 -2
- package/dist/{picocolors-BsDfhxIw.mjs → picocolors-D1NxSLw-.mjs} +2 -3
- package/dist/{plan-BhLO2p4w.mjs → plan-BOD70XGS.mjs} +1 -2
- package/dist/plan-CQ-N4gws.mjs +1 -0
- package/dist/{platform-args-BMD2gjc_.mjs → platform-args-Bv9hoLEL.mjs} +4 -7
- package/dist/platform-args-C1kqYUen.mjs +1 -0
- package/dist/{platform-auth-config-BgnuMbml.mjs → platform-auth-config-CLj0EvnB.mjs} +10 -11
- package/dist/{platform-auth-protection-NjRejttU.mjs → platform-auth-protection-DQDSxVhr.mjs} +10 -11
- package/dist/{platform-auth-recovery-Ug12d9W5.mjs → platform-auth-recovery-DD3oLerq.mjs} +9 -11
- package/dist/{platform-cmd-HByuZAO7.mjs → platform-cmd-PLNLg-2N.mjs} +12 -13
- package/dist/{platform-cmd-BYKLMPCn.mjs → platform-cmd-WnOmdLzR.mjs} +1 -1
- package/dist/{platform-discovery-CHhNs8Nn.mjs → platform-discovery-B0eZjZ3B.mjs} +2 -3
- package/dist/{platform-domain-DLSQ8GF8.mjs → platform-domain-Bnq0vg0q.mjs} +7 -8
- package/dist/{platform-lifecycle-3dwFJmnq.mjs → platform-lifecycle-BCsFg1Tl.mjs} +53 -88
- package/dist/{platform-lifecycle-BRqcxerG.mjs → platform-lifecycle-BQiN9HN5.mjs} +1 -1
- package/dist/{platform-management-ZK6XcbCo.mjs → platform-management-CMJR8Zi-.mjs} +1 -1
- package/dist/{platform-management-ZZ6bQM5j.mjs → platform-management-nzCDwtiN.mjs} +7 -9
- package/dist/{platform-plans-config-CeydDSj0.mjs → platform-plans-config-Dx1agneU.mjs} +5 -6
- package/dist/{platform-recovery-8vNE5dNN.mjs → platform-recovery-DBNoME3I.mjs} +5 -6
- package/dist/{platform-registry-B9mWX9LO.mjs → platform-registry-DZ_2Xuqd.mjs} +4 -6
- package/dist/{platform-setup-Ca53gtt0.mjs → platform-setup-VEcHu0Vq.mjs} +4 -5
- package/dist/{plugin-inference-CeiB6BG5.mjs → plugin-inference-DmwjC3y2.mjs} +16 -24
- package/dist/{prefetch-Ce6la4EI.d.mts → prefetch-CG0K6JPd.d.mts} +0 -2
- package/dist/{prefetch-Bsc_Pb6c.mjs → prefetch-L93_1Jk7.mjs} +1 -2
- package/dist/prepare-BJMmfq3W.mjs +1 -0
- package/dist/{prepare-5BR7Splm.mjs → prepare-BPsfLWaW.mjs} +4 -5
- package/dist/{prepare-Dseww74N.mjs → prepare-pfl2LIMy.mjs} +17 -14
- package/dist/{prerender-render-CaShbHJ3.mjs → prerender-render-RlAj6hh8.mjs} +2 -3
- package/dist/prerender-render.d.mts +1 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-rqDnVsJN.mjs → project-CLwxcEdq.mjs} +3 -4
- package/dist/{project-zdB3fs9G.mjs → project-DVsTAWFh.mjs} +1 -1
- package/dist/{project-cmd-CjLNNxwe.mjs → project-cmd-5Izu4Pg3.mjs} +21 -23
- package/dist/{project-paths-DGu_QZ_Q.mjs → project-paths-CdGv9Tmi.mjs} +3 -5
- package/dist/project-slug-BUy0lmyR.mjs +1 -0
- package/dist/{project-slug-23TpquG4.mjs → project-slug-CO6ci9XG.mjs} +0 -1
- package/dist/{project-team-DE5drjcl.mjs → project-team-DSUyjZFh.mjs} +7 -8
- package/dist/{project-token-XEYEXfiJ.mjs → project-token-wj09YQSB.mjs} +7 -8
- package/dist/{project-tsconfig-Itv1f4WC.mjs → project-tsconfig-Cf2NFjlM.mjs} +28 -8
- package/dist/{project-zero-trust-6VPU8zmV.mjs → project-zero-trust-BMHf2YF0.mjs} +7 -8
- package/dist/{protocol-DimNxVRr.mjs → protocol-0-lp9ZYx.mjs} +6 -7
- package/dist/{protocol-BekmFxCI.d.mts → protocol-xdrl-In0.d.mts} +3 -5
- package/dist/{providers-BNKRacMr.d.mts → providers-D5P8j_8D.d.mts} +0 -2
- package/dist/{providers-BUHwJlmM.mjs → providers-ZARwX2cL.mjs} +1 -2
- package/dist/{provision-B7UFrBH7.mjs → provision-CRiNnlfE.mjs} +29 -14
- package/dist/{provision-Chq0NRAV.mjs → provision-CxHIGBIZ.mjs} +1 -1
- package/dist/{queues-BWKt1Xo4.d.mts → queues-DdM42xXW.d.mts} +0 -2
- package/dist/{r2-conditions-B8xUgJRc.mjs → r2-conditions-BqkQNt2n.mjs} +1 -2
- package/dist/{requests-CG-Pj8ze.mjs → requests-DicgB5jU.mjs} +6 -7
- package/dist/resolve-project-CgfjtOwz.mjs +1 -0
- package/dist/{resolve-project-Xoi6eTWY.mjs → resolve-project-D0YNnJfm.mjs} +4 -5
- package/dist/{resource-name-C7LVpcRm.mjs → resource-name-DlJ9QXzg.mjs} +1 -2
- package/dist/{response-Tn7rU0MV.mjs → response-HmNjB30w.mjs} +1 -2
- package/dist/{rollback-CIrm2txZ.mjs → rollback-DrDZOKNE.mjs} +7 -8
- package/dist/{rolldown-runtime-3h0WiCiA.mjs → rolldown-runtime-uD8oG6U2.mjs} +1 -2
- package/dist/{route-types--PAOzHlH.mjs → route-types-irZc1txT.mjs} +100 -7
- package/dist/route-url-BGOiyKNz.d.mts +24 -0
- package/dist/route-url-CRDF-I0I.mjs +57 -0
- package/dist/routes-stub.d.mts +4 -3
- package/dist/routes-stub.mjs +1 -1
- package/dist/{routing-assets-DdSFxoLp.mjs → routing-assets-DJIVOrCh.mjs} +1 -2
- package/dist/{runner-3uGC-oLF.mjs → runner-5MCSimKx.mjs} +5 -6
- package/dist/{runner-WCdfeI0q.mjs → runner-QMeOpScZ.mjs} +1 -1
- package/dist/{runner-mysql-BcHnLUuM.mjs → runner-mysql-0zVmB1JW.mjs} +1 -1
- package/dist/{runner-mysql-BWmbk5IE.mjs → runner-mysql-Bdmsp_x4.mjs} +3 -4
- package/dist/{runner-pg-Cgp-cr_p.mjs → runner-pg-2pjltt0t.mjs} +1 -1
- package/dist/{runner-pg-Cr3qrqi4.mjs → runner-pg-mYc75KfH.mjs} +2 -3
- package/dist/runtime/ai.d.mts +0 -4
- package/dist/runtime/ai.mjs +6 -8
- package/dist/runtime/auth-client-react.d.mts +1 -1
- package/dist/runtime/auth-client-react.mjs +1 -1
- package/dist/runtime/auth-client-solid.d.mts +1 -1
- package/dist/runtime/auth-client-solid.mjs +1 -1
- package/dist/runtime/auth-client-svelte.d.mts +1 -1
- package/dist/runtime/auth-client-svelte.mjs +1 -1
- package/dist/runtime/auth-client-vue.d.mts +1 -1
- package/dist/runtime/auth-client-vue.mjs +1 -1
- package/dist/runtime/auth-client.d.mts +1 -1
- package/dist/runtime/auth-client.mjs +1 -1
- package/dist/runtime/auth.d.mts +2 -2
- package/dist/runtime/auth.mjs +1 -1
- package/dist/runtime/better-auth-mysql.d.mts +2 -4
- package/dist/runtime/better-auth-mysql.mjs +3 -4
- package/dist/runtime/better-auth-pg.d.mts +2 -4
- package/dist/runtime/better-auth-pg.mjs +4 -5
- package/dist/runtime/better-auth.d.mts +2 -4
- package/dist/runtime/better-auth.mjs +3 -4
- package/dist/runtime/client-react.d.mts +4 -4
- package/dist/runtime/client-react.mjs +4 -4
- package/dist/runtime/client-solid.d.mts +4 -4
- package/dist/runtime/client-solid.mjs +4 -4
- package/dist/runtime/client-svelte.d.mts +4 -4
- package/dist/runtime/client-svelte.mjs +4 -4
- package/dist/runtime/client-vue.d.mts +4 -4
- package/dist/runtime/client-vue.mjs +4 -4
- package/dist/runtime/client.d.mts +4 -4
- package/dist/runtime/client.mjs +4 -4
- package/dist/runtime/db.d.mts +0 -2
- package/dist/runtime/db.mjs +2 -3
- package/dist/runtime/durable.d.mts +0 -2
- package/dist/runtime/durable.mjs +3 -4
- package/dist/runtime/email/testing.d.mts +1 -5
- package/dist/runtime/email/testing.mjs +5 -6
- package/dist/runtime/email-protocol.d.mts +0 -2
- package/dist/runtime/email-protocol.mjs +1 -1
- package/dist/runtime/email.d.mts +1 -5
- package/dist/runtime/email.mjs +6 -7
- package/dist/runtime/env-public-client.d.mts +1 -3
- package/dist/runtime/env-public-client.mjs +2 -3
- package/dist/runtime/env-public.d.mts +2 -2
- package/dist/runtime/env-public.mjs +5 -7
- package/dist/runtime/env.d.mts +0 -4
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-server.d.mts +1 -3
- package/dist/runtime/fetch-server.mjs +3 -4
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch-stream.mjs +2 -2
- package/dist/runtime/fetch.d.mts +1 -1
- package/dist/runtime/fetch.mjs +2 -2
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/isr.d.mts +1 -3
- package/dist/runtime/isr.mjs +2 -3
- package/dist/runtime/kv.d.mts +1 -3
- package/dist/runtime/kv.mjs +2 -3
- package/dist/runtime/limits.d.mts +1 -1
- package/dist/runtime/limits.mjs +1 -1
- package/dist/runtime/live-client.d.mts +1 -3
- package/dist/runtime/live-client.mjs +1 -2
- package/dist/runtime/live-server.d.mts +0 -2
- package/dist/runtime/live-server.mjs +3 -4
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/log.d.mts +3 -3
- package/dist/runtime/log.mjs +26 -18
- package/dist/runtime/migration-handler-mysql.d.mts +2 -4
- package/dist/runtime/migration-handler-mysql.mjs +2 -3
- package/dist/runtime/migration-handler-pg.d.mts +2 -4
- package/dist/runtime/migration-handler-pg.mjs +2 -3
- package/dist/runtime/migration-handler.d.mts +1 -1
- package/dist/runtime/migration-handler.mjs +1 -1
- package/dist/runtime/queues.d.mts +1 -1
- package/dist/runtime/queues.mjs +2 -3
- package/dist/runtime/remote/binding-handler.d.mts +1 -3
- package/dist/runtime/remote/binding-handler.mjs +3 -4
- package/dist/runtime/remote/index.d.mts +1 -3
- package/dist/runtime/remote/index.mjs +8 -13
- package/dist/runtime/response.d.mts +1 -3
- package/dist/runtime/response.mjs +1 -1
- package/dist/runtime/route-url.d.mts +2 -2
- package/dist/runtime/route-url.mjs +1 -1
- package/dist/runtime/routing.d.mts +10 -12
- package/dist/runtime/routing.mjs +27 -88
- package/dist/runtime/sandbox-container.d.mts +1 -1
- package/dist/runtime/sandbox-container.mjs +1 -1
- package/dist/runtime/sandbox.d.mts +2 -2
- package/dist/runtime/sandbox.mjs +5 -6
- package/dist/runtime/seed.d.mts +0 -2
- package/dist/runtime/seed.mjs +1 -2
- package/dist/runtime/sse-client.d.mts +1 -3
- package/dist/runtime/sse-client.mjs +1 -2
- package/dist/runtime/sse.d.mts +1 -3
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/storage.d.mts +1 -3
- package/dist/runtime/storage.mjs +2 -3
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/validator.mjs +1 -1
- package/dist/runtime/ws-server.d.mts +3 -5
- package/dist/runtime/ws-server.mjs +3 -4
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/runtime/ws.mjs +7 -6
- package/dist/{sandbox-q3waMc2T.d.mts → sandbox-DE1WsxuB.d.mts} +2 -4
- package/dist/{sandbox-container-a9LRUtii.mjs → sandbox-container-BuxhwCgt.mjs} +1 -2
- package/dist/{sandbox-container-ChQRum-j.d.mts → sandbox-container-CZFZdMso.d.mts} +0 -2
- package/dist/{scan-N9WzdcAl.mjs → scan-DSQtH3oS.mjs} +31 -25
- package/dist/{secret-BL6g7mF5.mjs → secret-C_QtTzJG.mjs} +23 -24
- package/dist/{serialize-YHvlcG3Q.mjs → serialize-DUuYuaY3.mjs} +2 -4
- package/dist/{serialize-DtR8Vwa_.d.mts → serialize-I4EmS-Wf.d.mts} +0 -2
- package/dist/{skills-CrUO3PJ0.mjs → skills-D393E4lB.mjs} +4 -5
- package/dist/{sqlite-validation-BzKMWnO4.mjs → sqlite-validation-CLJXXN93.mjs} +1 -2
- package/dist/{sse-CMvCgjNk.mjs → sse-CxR30yMF.mjs} +1 -2
- package/dist/{standard-schema-Fo_vCAZh.d.mts → standard-schema-CuDawHOC.d.mts} +0 -2
- package/dist/{static-asset-marker-Btf-6oCD.mjs → static-asset-marker-NR1XS2z5.mjs} +1 -2
- package/dist/{subcommand-prompt-D9OhhbGG.mjs → subcommand-prompt-CxJXporl.mjs} +3 -4
- package/dist/sveltekit.d.mts +0 -2
- package/dist/sveltekit.mjs +2 -3
- package/dist/{terminal-log-text-D9ACPOuG.mjs → terminal-log-text-DNsWJREL.mjs} +1 -2
- package/dist/{types-w72dljaA.d.mts → types-agfx0alu.d.mts} +0 -4
- package/dist/validate-DY1U9rET.mjs +1 -0
- package/dist/{validate-CnZPMq4q.mjs → validate-Ddzl-IwT.mjs} +4 -5
- package/dist/{validation-error-Dg9Recn1.mjs → validation-error-rDVbUJet.mjs} +2 -4
- package/dist/{validator-BTOu0fB0.mjs → validator-CTfmzZYb.mjs} +2 -5
- package/dist/{version-metadata-DmaZNTYW.mjs → version-metadata-Blf5H9BQ.mjs} +5 -6
- package/dist/{worker-conditions-AWFRcFxR.mjs → worker-conditions-CBZ0RYsZ.mjs} +1 -2
- package/dist/wrangler-CPRX2d9A.mjs +1 -0
- package/dist/{wrangler-CDiEBCdS.mjs → wrangler-p-kLCJqF.mjs} +81 -15
- package/dist/{wrapper-CEiDeCqD.mjs → wrapper-iejSJDwL.mjs} +18 -15
- package/dist/{ws-D1zWiB_P.d.mts → ws-DzBD-NUj.d.mts} +4 -5
- package/dist/{yarn-pnp-DLbEFMT0.mjs → yarn-pnp-DgWbE7z5.mjs} +2 -3
- package/docs/guide/auth.md +1 -1
- package/docs/guide/database.md +4 -4
- package/docs/guide/deployment.md +1 -1
- package/docs/guide/edge/headers.md +2 -6
- package/docs/guide/edge/redirects.md +22 -0
- package/docs/guide/edge/static-assets.md +0 -10
- package/docs/guide/email/domains.md +3 -1
- package/docs/guide/email/receiving.md +3 -3
- package/docs/guide/email/sending.md +1 -1
- package/docs/guide/pages-routing/actions-and-forms.md +26 -5
- package/docs/guide/pages-routing/islands.md +2 -2
- package/docs/guide/pages-routing/loaders.md +3 -3
- package/docs/guide/pages-routing/markdown.md +6 -6
- package/docs/guide/pages-routing/overview.md +34 -27
- package/docs/guide/platform/administration/email.md +6 -8
- package/docs/guide/platform/installation/credentials.md +6 -6
- package/docs/guide/platform/installation/maintenance.md +10 -24
- package/docs/guide/platform/installation/prerequisites.md +1 -1
- package/docs/guide/platform/installation/setup.md +1 -1
- package/docs/guide/platform/installation/uninstall.md +1 -1
- package/docs/guide/queues.md +4 -8
- package/docs/guide/self-hosted-platform.md +3 -3
- package/docs/guide/server-routing.md +8 -6
- package/docs/guide/ssg.md +8 -0
- package/docs/guide/type-safety.md +42 -0
- package/docs/guide/typed-fetch.md +1 -1
- package/docs/guide/websockets.md +1 -1
- package/docs/integrations/cloudflare.md +17 -8
- package/docs/integrations/frameworks/analog.md +1 -1
- package/docs/integrations/frameworks/nuxt.md +1 -1
- package/docs/integrations/frameworks/sveltekit.md +1 -1
- package/docs/integrations/frameworks/tanstack-start.md +1 -1
- package/docs/integrations/hono.md +5 -5
- package/docs/reference/api/auth.md +6 -2
- package/docs/reference/api/deploy.md +15 -11
- package/docs/reference/api/pages.md +10 -0
- package/docs/reference/api/plugin.md +4 -4
- package/docs/reference/api/resources.md +4 -1
- package/docs/reference/api/rewrites.md +20 -2
- package/docs/reference/api/types.md +41 -0
- package/docs/reference/api.md +2 -2
- package/docs/reference/cli/database.md +15 -9
- package/docs/reference/cli/deploy.md +10 -9
- package/docs/reference/cli/email.md +4 -2
- package/docs/reference/cli/platform-installation.md +2 -2
- package/docs/reference/cli/project.md +2 -2
- package/docs/reference/cli/secrets.md +3 -1
- package/docs/reference/cli/setup.md +3 -3
- package/docs/reference/cli.md +1 -1
- package/docs/reference/config.md +12 -2
- package/package.json +35 -31
- package/sandbox.Dockerfile +1 -1
- package/schema.json +4 -0
- package/skills/void/SKILL.md +1 -1
- package/dist/auth-DkcFflXV.d.mts +0 -42
- package/dist/cf-build-output-DlBkWdNU.mjs +0 -1
- package/dist/client-DyxPQnF_.mjs +0 -1
- package/dist/collect-BWhkgtAn.mjs +0 -1
- package/dist/config-BTu1o3Dc.mjs +0 -49
- package/dist/deploy-CtHE2A3R.mjs +0 -2
- package/dist/discover-D4TPKo57.mjs +0 -1
- package/dist/gen-TgXy93Rr.mjs +0 -1
- package/dist/help-qOZr3wng.mjs +0 -1
- package/dist/login-Cdo8Aco1.mjs +0 -1
- package/dist/migrate-COPncCGx.mjs +0 -1
- package/dist/operator-cmd-DDiX7Y3f.mjs +0 -1
- package/dist/output-BW9uK099.mjs +0 -1
- package/dist/plan-CKX_jWnD.mjs +0 -1
- package/dist/platform-args-BC8_hsDj.mjs +0 -1
- package/dist/prepare-B3VrSF1Z.mjs +0 -1
- package/dist/project-slug-6cyz8E7k.mjs +0 -1
- package/dist/resolve-project-DD1vu8s9.mjs +0 -1
- package/dist/route-url-BgPja1GS.d.mts +0 -5
- package/dist/route-url-BjGv_KKY.mjs +0 -28
- package/dist/validate-D7Wn8PUX.mjs +0 -1
- package/dist/wrangler-DOPr4jyI.mjs +0 -1
|
@@ -1,53 +1,54 @@
|
|
|
1
|
-
import { n as __toESM, t as __commonJSMin } from "./rolldown-runtime-
|
|
2
|
-
import { a as join, c as resolve, n as dirname, o as normalize, r as extname, s as relative, t as basename } from "./dist-
|
|
3
|
-
import { t as require_picocolors } from "./picocolors-
|
|
4
|
-
import { r as detectFramework } from "./plugin-inference-
|
|
5
|
-
import { n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-
|
|
6
|
-
import { m as resolveBindingNames, p as readConfig, u as isNodeTarget } from "./config-
|
|
7
|
-
import { a as hasSandboxSqliteMigration, c as sandboxContainerConfig, i as assertSandboxNamespaceConfig, o as requiresSandboxPlatformImage, r as SANDBOX_MIGRATION_TAG, s as resolveSandboxConfig, t as analyzeApplicationSync } from "./application-analysis-
|
|
8
|
-
import { t as collectMigrations } from "./collect-
|
|
9
|
-
import { o as validateSsrEntry } from "./entry-
|
|
10
|
-
import { r as hasEmailHandlers } from "./email-
|
|
11
|
-
import { a as resolveDistDir, c as hasDocumentRoutes, l as resolveAssetConfig, n as collectRevalidate, o as resolveWorkerDirName, r as hasRevalidate, s as hasApiRoutes } from "./isr-config-
|
|
12
|
-
import { t as writeFileAtomic } from "./atomic-write-
|
|
13
|
-
import { s as listPlatformConnections } from "./platform-registry-
|
|
14
|
-
import { c as writeDeploymentPlatform, n as readDeploymentPlatform, r as readProjectConfig } from "./project-
|
|
15
|
-
import { n as readGeneratedWranglerConfigFile } from "./generated-wrangler-config-
|
|
16
|
-
import {
|
|
17
|
-
import { A as syncWranglerWebSockets, C as readWranglerManagedQueueCleanupCandidates, D as sameMigrationsDir, E as resolveLiveBindingConfig, M as writeProvisionedWranglerConfig, N as writeWranglerPublishedTrafficSnapshot, a as LIVE_MIGRATION_TAG, c as bindingEntriesForField, h as nextDurableObjectMigrationTag, k as syncWranglerDurableObjects, m as hasDurableObjectSqliteMigration, o as acknowledgeWranglerManagedQueueRemovals, r as FRIENDLY_BINDING_NAMES, v as readExistingLiveBindingConfig, w as readWranglerPublishedTrafficSnapshot } from "./wrangler-
|
|
18
|
-
import { r as trustedCloudflareWorkerAccessHeaders, t as cfAccessHeaders } from "./cf-access-
|
|
19
|
-
import { t as ensurePlatformAccessToken } from "./cf-access-
|
|
20
|
-
import { a as getApiUrl, c as getToken, l as getTokenSource } from "./auth-
|
|
21
|
-
import {
|
|
22
|
-
import { l as resolveRemoteMode, n as CLOUDFLARE_QUEUE_NAMES_BUILD_ENV, t as CLOUDFLARE_DEPLOY_BUILD_ENV } from "./env-
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { a as
|
|
26
|
-
import { n as
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import { a as
|
|
40
|
-
import {
|
|
41
|
-
import { n as
|
|
42
|
-
import { t as
|
|
43
|
-
import { t as
|
|
44
|
-
import {
|
|
45
|
-
import { a as
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
1
|
+
import { n as __toESM, t as __commonJSMin } from "./rolldown-runtime-uD8oG6U2.mjs";
|
|
2
|
+
import { a as join, c as resolve, n as dirname, o as normalize, r as extname, s as relative, t as basename } from "./dist-DMYe8CZJ.mjs";
|
|
3
|
+
import { t as require_picocolors } from "./picocolors-D1NxSLw-.mjs";
|
|
4
|
+
import { r as detectFramework } from "./plugin-inference-DmwjC3y2.mjs";
|
|
5
|
+
import { n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-CdGv9Tmi.mjs";
|
|
6
|
+
import { m as resolveBindingNames, p as readConfig, u as isNodeTarget } from "./config-DkA9jYF2.mjs";
|
|
7
|
+
import { a as hasSandboxSqliteMigration, c as sandboxContainerConfig, i as assertSandboxNamespaceConfig, o as requiresSandboxPlatformImage, r as SANDBOX_MIGRATION_TAG, s as resolveSandboxConfig, t as analyzeApplicationSync } from "./application-analysis-2vGZrKzg.mjs";
|
|
8
|
+
import { t as collectMigrations } from "./collect-C6Blu9yw.mjs";
|
|
9
|
+
import { o as validateSsrEntry } from "./entry-CBZsCy3O.mjs";
|
|
10
|
+
import { r as hasEmailHandlers } from "./email-BHY72ixO.mjs";
|
|
11
|
+
import { a as resolveDistDir, c as hasDocumentRoutes, l as resolveAssetConfig, n as collectRevalidate, o as resolveWorkerDirName, r as hasRevalidate, s as hasApiRoutes } from "./isr-config-DhBkzCdY.mjs";
|
|
12
|
+
import { t as writeFileAtomic } from "./atomic-write-DA6eD1Kp.mjs";
|
|
13
|
+
import { s as listPlatformConnections } from "./platform-registry-DZ_2Xuqd.mjs";
|
|
14
|
+
import { c as writeDeploymentPlatform, n as readDeploymentPlatform, r as readProjectConfig } from "./project-CLwxcEdq.mjs";
|
|
15
|
+
import { n as readGeneratedWranglerConfigFile } from "./generated-wrangler-config-CoDaaFsA.mjs";
|
|
16
|
+
import { a as persistCloudflareConfig, c as stashCloudflareDeployPointer, i as materializeCloudflareConfig } from "./cloudflare-config-Chet188_.mjs";
|
|
17
|
+
import { A as syncWranglerWebSockets, C as readWranglerManagedQueueCleanupCandidates, D as sameMigrationsDir, E as resolveLiveBindingConfig, L as writeVoidProjectConfig, M as writeProvisionedWranglerConfig, N as writeWranglerPublishedTrafficSnapshot, a as LIVE_MIGRATION_TAG, c as bindingEntriesForField, h as nextDurableObjectMigrationTag, k as syncWranglerDurableObjects, m as hasDurableObjectSqliteMigration, o as acknowledgeWranglerManagedQueueRemovals, r as FRIENDLY_BINDING_NAMES, v as readExistingLiveBindingConfig, w as readWranglerPublishedTrafficSnapshot } from "./wrangler-p-kLCJqF.mjs";
|
|
18
|
+
import { r as trustedCloudflareWorkerAccessHeaders, t as cfAccessHeaders } from "./cf-access-pejlJmuy.mjs";
|
|
19
|
+
import { t as ensurePlatformAccessToken } from "./cf-access-BmBT2h8_.mjs";
|
|
20
|
+
import { a as getApiUrl, c as getToken, l as getTokenSource } from "./auth-Dy8svcqQ.mjs";
|
|
21
|
+
import { n as record, t as migrateBuiltWranglerConfig } from "./cf-config-migrate-Dy8MrKgF.mjs";
|
|
22
|
+
import { l as resolveRemoteMode, n as CLOUDFLARE_QUEUE_NAMES_BUILD_ENV, t as CLOUDFLARE_DEPLOY_BUILD_ENV } from "./env-CuzZZyjB.mjs";
|
|
23
|
+
import { i as otherQueueConsumers, n as chooseCloudflareQueueName, o as scopedCloudflareQueueName, r as cloudflareQueueName } from "./dispatch-CiJ1Xrba.mjs";
|
|
24
|
+
import { t as assertNoPrerenderFailures } from "./prerender-render-RlAj6hh8.mjs";
|
|
25
|
+
import { a as buildEnv, n as readVersionMetadataBinding, r as selectNativeVersionMetadataBinding, t as CLOUDFLARE_PRESERVE_BINDINGS_BUILD_ENV } from "./version-metadata-Blf5H9BQ.mjs";
|
|
26
|
+
import { a as emailConfigInputs, c as renderAddressMap, d as isGeneratedAssetHeaders, g as prerenderPagesNode, h as prerenderPages, i as createNodeEmailDns, l as renderEmailChecklist, m as collectPrerenderPathsNode, n as SEND_EMAIL_BINDING, o as preflightEmail, p as collectPrerenderPaths, r as applyEmailSetup, t as EMAIL_FROM_VAR } from "./email-cloudflare-CtD8qE13.mjs";
|
|
27
|
+
import { n as completeApplicationAnalysis, t as analyzeApplication } from "./application-routing-DnUQoOJD.mjs";
|
|
28
|
+
import { n as prepareCfFrameworkBuildOutput, r as prepareCfStaticBuildOutput, t as prepareCfBuildOutput } from "./cf-build-output-B1C8U83u.mjs";
|
|
29
|
+
import { i as validateMigrations, t as assertJournalCoherence } from "./validate-Ddzl-IwT.mjs";
|
|
30
|
+
import { A as confirm, K as select, L as log, tt as isCancel } from "./dist-D23AAMxT.mjs";
|
|
31
|
+
import { r as getPackageDir } from "./agents-DRo8gzni.mjs";
|
|
32
|
+
import { a as isExpiredTokenError, r as PlatformClient } from "./client-Qayy9xEh.mjs";
|
|
33
|
+
import { o as formatCount, p as note, r as createSpinner, u as getErrorMessage } from "./output-BCdLioKP.mjs";
|
|
34
|
+
import { t as getRequestedProjectSlug } from "./resolve-project-D0YNnJfm.mjs";
|
|
35
|
+
import { i as safePositional, r as readCfUploadOutput, t as CF_VERSION_SOURCE_MAX_OUTPUT_BYTES } from "./cf-command-values-Ccl-zRhl.mjs";
|
|
36
|
+
import { a as FRAMEWORK_PRESETS, c as hasBackendFiles, i as isCleanCloudflareExit, l as resolveCloudflareOperationArgv, o as detectPreset, s as formatProjectCommand, t as createCloudflareProcessRunner, u as resolveProjectCommand } from "./cloudflare-process-DjJ638A-.mjs";
|
|
37
|
+
import { f as listSelfHostSecretNames, h as selfHostSchemaFailureMessage, i as SelfHostSecretListError, l as dischargeSelfHostEnvContext, n as SelfHostFirstDeployError, p as readEmittedWorkerVars, r as SelfHostSchemaError, s as deriveSelfHostEnvContextFromVars, t as SelfHostEnvValidationError } from "./env-validation-GV1oD4EV.mjs";
|
|
38
|
+
import { a as needsWrapper, r as cleanupWrapper, t as bundleEntry } from "./wrapper-iejSJDwL.mjs";
|
|
39
|
+
import { A as promptDeployProjectConfig, C as ensureManagedHyperdrive, D as hasNonPageBackend, E as getGitCommit, F as resolveStaticBuildCommand, I as resolveStaticDeployPreset, L as toManifestSchedulesAndQueues, M as resolveDeployWorkerMain, N as resolveDeployWranglerCompat, O as hasPrerenderSources, P as resolveFullDeployBuildCommand, R as validateDeployMigrations, S as createProjectFromSlug, T as getExitCode, _ as getDeploySchemaDriftMessage, a as collectAndHashAssets, b as assertProjectDeployAccess, c as readWranglerHtmlHandling, d as printDeploySuccess, f as mergeAndLintRoutingRules, g as assertDeploySchemaDriftFree, h as warnUnpublishedRouting, i as buildStaticManifest, j as resolveDeployLiveBindingConfig, k as log$1, l as formatDeploySummary, m as warnIgnoredNotFoundForFramework, n as runStaticDeploy, o as collectWorkerFiles, p as streamDirectR2Deploy, r as buildFrameworkManifest, s as detectNonSpaFallbackWarning, t as assembleVoidManifest, u as printDeployContext, v as hasDeploySchemaDrift, w as generateDeployWrapperIfNeeded, x as assertWorkerMainUploaded, y as assertEnvSchemaValid } from "./deploy-managed-static-gPDxyp3v.mjs";
|
|
40
|
+
import { a as checkCloudflareProvisionDrift, b as resolveWorkersDevComplianceRegion, d as isQueueConfirmedAbsent, f as isRealD1Id, g as provisionCloudflareResources, i as assertValidResourceName, m as isRealKvId, s as deleteEnvVarCaseAware } from "./provision-CRiNnlfE.mjs";
|
|
41
|
+
import { c as scrubWranglerAuthCredentials, n as buildSchemaProbeEnv, o as resolveDeployTransport, r as deployChildEnv, s as scrubManagedDeployBuildMarkers, t as MANAGED_DEPLOY_BUILD_ENV } from "./deploy-transport-L6zzPE9T.mjs";
|
|
42
|
+
import { n as getCfCliVersion, r as getVoidUserAgent, t as publishCloudflareWorkerSettings } from "./cf-worker-settings-CARs4Wy9.mjs";
|
|
43
|
+
import { t as sanitizeTerminalLogText } from "./terminal-log-text-DNsWJREL.mjs";
|
|
44
|
+
import { t as promptForLoginToken } from "./login-koQbjzPd.mjs";
|
|
45
|
+
import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, t as CloudflareAuthenticationError } from "./cloudflare-auth-CEu-1Ps_.mjs";
|
|
46
|
+
import { a as createCloudflareEmptyDomainPublisher, i as createCloudflareEmptyCronPublisher } from "./cloudflare-operations-CWA24vCh.mjs";
|
|
47
|
+
import { n as openMigrationValidationDatabase, t as SqliteMigrationError } from "./sqlite-validation-CLJXXN93.mjs";
|
|
48
|
+
import { r as discoverFrameworkWranglerFiles, t as migrateLegacyVoidConfig } from "./migrate-C62pGTfr.mjs";
|
|
49
|
+
import { a as runMySqlMigrations } from "./runner-mysql-Bdmsp_x4.mjs";
|
|
50
|
+
import { i as runPgMigrations } from "./runner-pg-mYc75KfH.mjs";
|
|
51
|
+
import { t as collectGitDeployMetadata } from "./git-metadata-Cukp5kV5.mjs";
|
|
51
52
|
import { createRequire } from "node:module";
|
|
52
53
|
import { cpSync, createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
53
54
|
import { fileURLToPath } from "node:url";
|
|
@@ -60,12 +61,12 @@ import { execFile, execSync, spawn } from "node:child_process";
|
|
|
60
61
|
import { getWorkerAssetsDir, getWorkerBundleDir, getWorkerConfigPath, readBuildOutput } from "@cloudflare/build-output-utils";
|
|
61
62
|
import { convertToWranglerConfig } from "@cloudflare/config";
|
|
62
63
|
import ignore from "ignore";
|
|
63
|
-
import { CloudflareWorkerInspectionError, activateCloudflareVersion, assertCloudflareBindingsPreserved, assertCloudflareDurableObjectLifecycleSupported, assertExistingCloudflareConfig, cloudflareCommandDiagnostic, encodeCloudflareVersionMessage, extractWorkersDevSubdomain, normalizeWorkersDevSubdomain, parseRootWranglerConfig, parseRootWranglerConfig as parseRootWranglerConfig$1, readBindingFieldPresence, readCloudflareTriggerConfig, readConfigEntryString, readExistingCloudflareWorker, readStoredResourceName, readWranglerTopLevelString, renderCloudflareStaticEntry, resolveD1MigrateTarget, stageCloudflareStaticAssets, writeCloudflareFrameworkDeployConfig, writeCloudflareStaticDeployConfig } from "@void/deploy-cloudflare";
|
|
64
|
+
import { CloudflareWorkerInspectionError, activateCloudflareVersion, assertCloudflareBindingsPreserved, assertCloudflareDurableObjectLifecycleSupported, assertExistingCloudflareConfig, cloudflareCommandDiagnostic, encodeCloudflareVersionMessage, extractWorkersDevSubdomain, normalizeReadinessAccessOrigin, normalizeWorkersDevSubdomain, parseRootWranglerConfig, parseRootWranglerConfig as parseRootWranglerConfig$1, readBindingFieldPresence, readCloudflareTriggerConfig, readConfigEntryString, readExistingCloudflareWorker, readStoredResourceName, readWranglerTopLevelString, renderCloudflareStaticEntry, resolveD1MigrateTarget, stageCloudflareStaticAssets, writeCloudflareFrameworkDeployConfig, writeCloudflareStaticDeployConfig } from "@void/deploy-cloudflare";
|
|
64
65
|
import { setTimeout as setTimeout$1 } from "node:timers/promises";
|
|
65
66
|
import mime from "mime";
|
|
66
67
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
67
68
|
import { Minimatch } from "minimatch";
|
|
68
|
-
|
|
69
|
+
// src/cli/cloudflare-candidate.ts
|
|
69
70
|
const CANDIDATE_FILE = ".void/cloudflare-candidate.json";
|
|
70
71
|
const INVALID_CANDIDATE_MESSAGE = "The saved Cloudflare candidate receipt is invalid. Restore or remove .void/cloudflare-candidate.json before retrying.";
|
|
71
72
|
/** A saved upload chain: a non-empty list of distinct, non-empty version IDs. */
|
|
@@ -104,8 +105,7 @@ function clearCloudflareCandidate(root) {
|
|
|
104
105
|
const path = join(root, CANDIDATE_FILE);
|
|
105
106
|
if (existsSync(path)) unlinkSync(path);
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
-
//#region src/cli/cloudflare-link.ts
|
|
108
|
+
// src/cli/cloudflare-link.ts
|
|
109
109
|
const LINK_FILE = ".void/cloudflare-link.json";
|
|
110
110
|
/** A pending handoff survives a failed build, so retrying cannot provision replacements. */
|
|
111
111
|
function readCloudflareLink(root) {
|
|
@@ -218,8 +218,112 @@ async function maybeLinkCloudflareDeploy(root, options = {}, deps = {}) {
|
|
|
218
218
|
});
|
|
219
219
|
return isCancel(accepted) || accepted !== true ? "cancelled" : "existing";
|
|
220
220
|
}
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
// src/cli/cloudflare-readiness.ts
|
|
222
|
+
const STATE_FILE = join(".void", "cloudflare.json");
|
|
223
|
+
/** Resolve the account subdomain without exposing Cloudflare credentials to project code. */
|
|
224
|
+
function resolveCloudflareWorkersDevSubdomain(root, accountId, env = process.env) {
|
|
225
|
+
const configured = env.CLOUDFLARE_WORKERS_SUBDOMAIN;
|
|
226
|
+
if (configured !== void 0 && configured.trim().length > 0) {
|
|
227
|
+
const normalized = normalizeWorkersDevSubdomain(configured);
|
|
228
|
+
if (!normalized) throw new Error("deploy: CLOUDFLARE_WORKERS_SUBDOMAIN must be the account subdomain, for example \"my-team\" or \"my-team.workers.dev\".");
|
|
229
|
+
return normalized;
|
|
230
|
+
}
|
|
231
|
+
const cached = subdomainsByAccount(readCloudflareLocalState(root))[accountId];
|
|
232
|
+
return typeof cached === "string" ? normalizeWorkersDevSubdomain(cached) : void 0;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Record `CF_ACCESS_READINESS_ORIGIN` before project code runs. `void.config.ts` is evaluated in
|
|
236
|
+
* this process, so a later read of `process.env` could see a value that the project assigned,
|
|
237
|
+
* for example through a dotenv import. `null` means unset. An already recorded value is kept.
|
|
238
|
+
*/
|
|
239
|
+
function withRecordedReadinessAccessOrigin(options, env = process.env) {
|
|
240
|
+
return options.readinessAccessOrigin !== void 0 ? options : {
|
|
241
|
+
...options,
|
|
242
|
+
readinessAccessOrigin: env.CF_ACCESS_READINESS_ORIGIN ?? null
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Validate the operator-selected origin that may receive readiness Access credentials when the
|
|
247
|
+
* probe uses a route or Custom Domain. Pass the value that `withRecordedReadinessAccessOrigin`
|
|
248
|
+
* recorded, not the current `process.env`.
|
|
249
|
+
*/
|
|
250
|
+
function resolveCloudflareReadinessAccessOrigin(env) {
|
|
251
|
+
const configured = env.CF_ACCESS_READINESS_ORIGIN?.trim();
|
|
252
|
+
if (!configured) return;
|
|
253
|
+
const origin = normalizeReadinessAccessOrigin(configured);
|
|
254
|
+
if (!origin) throw new Error("deploy: CF_ACCESS_READINESS_ORIGIN must be one exact https origin, without a wildcard, path, query, fragment, or credentials, for example \"https://app.example.com\".");
|
|
255
|
+
return origin;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Read the account subdomain from the Cloudflare API when a first publish reports no URL and
|
|
259
|
+
* no subdomain is configured or cached. The API returns only the account label, so this adds
|
|
260
|
+
* `.fed` for FedRAMP High, as Wrangler does. A failed lookup resolves `unavailable`.
|
|
261
|
+
*/
|
|
262
|
+
async function readCloudflareWorkersDevSubdomain(options) {
|
|
263
|
+
if (!options.verifyUploader()) return {
|
|
264
|
+
ok: false,
|
|
265
|
+
reason: "uploader-changed"
|
|
266
|
+
};
|
|
267
|
+
let label;
|
|
268
|
+
try {
|
|
269
|
+
const result = await options.runWrangler({
|
|
270
|
+
type: "workers.subdomain.get",
|
|
271
|
+
configPath: options.configPath
|
|
272
|
+
}, { capture: true });
|
|
273
|
+
if (!isCleanCloudflareExit(result) || !result.data || typeof result.data !== "object" || !("subdomain" in result.data) || typeof result.data.subdomain !== "string") return {
|
|
274
|
+
ok: false,
|
|
275
|
+
reason: "unavailable"
|
|
276
|
+
};
|
|
277
|
+
label = result.data.subdomain;
|
|
278
|
+
} catch {
|
|
279
|
+
return {
|
|
280
|
+
ok: false,
|
|
281
|
+
reason: "unavailable"
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
const subdomain = normalizeWorkersDevSubdomain(options.complianceRegion === "fedramp_high" ? `${label}.fed` : label);
|
|
285
|
+
return subdomain ? {
|
|
286
|
+
ok: true,
|
|
287
|
+
subdomain
|
|
288
|
+
} : {
|
|
289
|
+
ok: false,
|
|
290
|
+
reason: "unavailable"
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/** Cache a Wrangler-reported account subdomain for later no-preview version probes. */
|
|
294
|
+
function rememberCloudflareWorkersDevSubdomain(root, accountId, url) {
|
|
295
|
+
const workersDevSubdomain = extractWorkersDevSubdomain(url);
|
|
296
|
+
if (!workersDevSubdomain) return false;
|
|
297
|
+
const current = readCloudflareLocalState(root);
|
|
298
|
+
const currentByAccount = subdomainsByAccount(current);
|
|
299
|
+
if (currentByAccount[accountId] === workersDevSubdomain) return false;
|
|
300
|
+
const { workersDevSubdomain: _legacy, ...state } = current;
|
|
301
|
+
const filePath = join(root, STATE_FILE);
|
|
302
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
303
|
+
writeFileSync(filePath, JSON.stringify({
|
|
304
|
+
...state,
|
|
305
|
+
workersDevSubdomains: {
|
|
306
|
+
...currentByAccount,
|
|
307
|
+
[accountId]: workersDevSubdomain
|
|
308
|
+
}
|
|
309
|
+
}, null, 2) + "\n");
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
function subdomainsByAccount(state) {
|
|
313
|
+
const value = state.workersDevSubdomains;
|
|
314
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
315
|
+
}
|
|
316
|
+
function readCloudflareLocalState(root) {
|
|
317
|
+
const filePath = join(root, STATE_FILE);
|
|
318
|
+
if (!existsSync(filePath)) return {};
|
|
319
|
+
try {
|
|
320
|
+
const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
321
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
|
|
322
|
+
} catch {
|
|
323
|
+
return {};
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// src/cli/deploy-binding-snapshot.ts
|
|
223
327
|
/** The id-bearing binding fields whose identity must survive the build unchanged. */
|
|
224
328
|
const DEPLOY_BINDING_IDENTITY_FIELDS = {
|
|
225
329
|
d1: {
|
|
@@ -642,8 +746,7 @@ function collectEmittedQueueGroupNames(value, group) {
|
|
|
642
746
|
function deployPointerPath(root) {
|
|
643
747
|
return join(root, ".wrangler", "deploy", "config.json");
|
|
644
748
|
}
|
|
645
|
-
|
|
646
|
-
//#region src/cli/deploy-resources.ts
|
|
749
|
+
// src/cli/deploy-resources.ts
|
|
647
750
|
/** Human labels for a drifted resource kind, used in guidance messages. */
|
|
648
751
|
const CLOUDFLARE_RESOURCE_LABELS = {
|
|
649
752
|
d1: "D1 database",
|
|
@@ -830,8 +933,7 @@ async function computeDesiredCloudflareResources(root, voidConfig, configPath, a
|
|
|
830
933
|
needsLive: bindings.needsLive === true
|
|
831
934
|
};
|
|
832
935
|
}
|
|
833
|
-
|
|
834
|
-
//#region src/cli/deploy-artifact-validation.ts
|
|
936
|
+
// src/cli/deploy-artifact-validation.ts
|
|
835
937
|
/**
|
|
836
938
|
* Derive the env schema's server and required key names in an isolated subprocess, so project
|
|
837
939
|
* code never runs in the credentialed parent. Loaded lazily to keep it out of managed deploys.
|
|
@@ -1251,8 +1353,7 @@ async function validateCloudflarePostBuildEnv(options) {
|
|
|
1251
1353
|
}
|
|
1252
1354
|
return true;
|
|
1253
1355
|
}
|
|
1254
|
-
|
|
1255
|
-
//#region ../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/vendors.json
|
|
1356
|
+
// ../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/vendors.json
|
|
1256
1357
|
var require_vendors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1257
1358
|
module.exports = [
|
|
1258
1359
|
{
|
|
@@ -1579,8 +1680,7 @@ var require_vendors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
1579
1680
|
}
|
|
1580
1681
|
];
|
|
1581
1682
|
}));
|
|
1582
|
-
|
|
1583
|
-
//#region src/cli/deploy-cloudflare-auth.ts
|
|
1683
|
+
// src/cli/deploy-cloudflare-auth.ts
|
|
1584
1684
|
var import_ci_info = (/* @__PURE__ */ __commonJSMin(((exports) => {
|
|
1585
1685
|
const vendors = require_vendors();
|
|
1586
1686
|
const env = process.env;
|
|
@@ -1776,11 +1876,9 @@ async function ensureCloudflareAuthSecret(options) {
|
|
|
1776
1876
|
if (!(await list(false)).includes("BETTER_AUTH_SECRET")) throw new CloudflareAuthSecretError(`deploy: Cloudflare reported success but ${BETTER_AUTH_SECRET_NAME} was not present afterward. No worker was uploaded; retry once Cloudflare secret storage is available.`, "verification-failed");
|
|
1777
1877
|
return { created: true };
|
|
1778
1878
|
}
|
|
1779
|
-
|
|
1780
|
-
//#region src/cli/node-buffer.ts
|
|
1879
|
+
// src/cli/node-buffer.ts
|
|
1781
1880
|
const Buffer$2 = Buffer$1;
|
|
1782
|
-
|
|
1783
|
-
//#region src/cli/cf-version-api.ts
|
|
1881
|
+
// src/cli/cf-version-api.ts
|
|
1784
1882
|
var CloudflareApiError = class extends Error {
|
|
1785
1883
|
status;
|
|
1786
1884
|
code;
|
|
@@ -1805,6 +1903,31 @@ function textValue(value, label) {
|
|
|
1805
1903
|
if (typeof value !== "string") throw new Error(`The Cloudflare ${label} is missing from the verified Worker output.`);
|
|
1806
1904
|
return value;
|
|
1807
1905
|
}
|
|
1906
|
+
/** Match cf's package collection for uploads that preserve secrets through the JSON API. */
|
|
1907
|
+
async function readPackageDependencies(directory) {
|
|
1908
|
+
try {
|
|
1909
|
+
const pkg = record(JSON.parse(readFileSync(join(directory, "package.json"), "utf8")));
|
|
1910
|
+
const declared = {
|
|
1911
|
+
...record(pkg?.dependencies),
|
|
1912
|
+
...record(pkg?.devDependencies)
|
|
1913
|
+
};
|
|
1914
|
+
const { getInstalledPackageVersion } = await import("@cloudflare/workers-utils");
|
|
1915
|
+
const dependencies = [];
|
|
1916
|
+
for (const [name, packageJsonVersion] of Object.entries(declared)) {
|
|
1917
|
+
if (dependencies.length >= 200) break;
|
|
1918
|
+
if (typeof packageJsonVersion !== "string" || /^(workspace|catalog|file|link):/.test(packageJsonVersion)) continue;
|
|
1919
|
+
const installedVersion = getInstalledPackageVersion(name, directory);
|
|
1920
|
+
if (installedVersion) dependencies.push({
|
|
1921
|
+
name,
|
|
1922
|
+
packageJsonVersion,
|
|
1923
|
+
installedVersion
|
|
1924
|
+
});
|
|
1925
|
+
}
|
|
1926
|
+
return dependencies.length ? dependencies : void 0;
|
|
1927
|
+
} catch {
|
|
1928
|
+
return;
|
|
1929
|
+
}
|
|
1930
|
+
}
|
|
1808
1931
|
const moduleContentTypes = {
|
|
1809
1932
|
esm: "application/javascript+module",
|
|
1810
1933
|
cjs: "application/javascript",
|
|
@@ -2298,7 +2421,7 @@ async function prepareContainerMetadata(options) {
|
|
|
2298
2421
|
maxOutputBytes: 16777216
|
|
2299
2422
|
});
|
|
2300
2423
|
if (pushed.status !== 0 || pushed.signal || pushed.error) throw new Error("Cloudflare Container image push failed.");
|
|
2301
|
-
const matches = [
|
|
2424
|
+
const matches = [...`${pushed.stdout}\n${pushed.stderr}`.matchAll(/Pushed image:\s*(\S+)/g)];
|
|
2302
2425
|
const remote = matches.length === 1 ? matches[0][1] : "";
|
|
2303
2426
|
if (!remote.startsWith(`registry.cloudflare.com/${options.accountId}/`) || [...remote].some((character) => character.charCodeAt(0) <= 32 || character.charCodeAt(0) === 127)) throw new Error("Cloudflare Container image push did not return the verified account registry.");
|
|
2304
2427
|
image = await dockerImageDigest(remote, Math.min(12e4, remaining()), options.verifyUploader);
|
|
@@ -2544,6 +2667,7 @@ async function uploadPinnedCloudflareVersion(options) {
|
|
|
2544
2667
|
modules,
|
|
2545
2668
|
compatibility_date: config.compatibilityDate,
|
|
2546
2669
|
compatibility_flags: config.compatibilityFlags,
|
|
2670
|
+
package_dependencies: await readPackageDependencies(options.output.directory),
|
|
2547
2671
|
bindings,
|
|
2548
2672
|
...config.limits ? { limits: {
|
|
2549
2673
|
cpu_ms: config.limits.cpuMs,
|
|
@@ -2584,8 +2708,7 @@ async function uploadPinnedCloudflareVersion(options) {
|
|
|
2584
2708
|
urls: Array.isArray(uploaded.urls) ? uploaded.urls.filter((url) => typeof url === "string") : []
|
|
2585
2709
|
};
|
|
2586
2710
|
}
|
|
2587
|
-
|
|
2588
|
-
//#region src/cli/cf-version-runner.ts
|
|
2711
|
+
// src/cli/cf-version-runner.ts
|
|
2589
2712
|
function failed(message) {
|
|
2590
2713
|
return {
|
|
2591
2714
|
status: 1,
|
|
@@ -2836,7 +2959,7 @@ function createCfVersionRunner(options) {
|
|
|
2836
2959
|
const uploadedResult = (result) => {
|
|
2837
2960
|
if (!isCleanCloudflareExit(result)) return result;
|
|
2838
2961
|
if (isRecord(result.data) && typeof result.data.versionId === "string") return result;
|
|
2839
|
-
const { versionId, previewUrl, workersDevUrl } = readCfUploadOutput(result
|
|
2962
|
+
const { versionId, previewUrl, workersDevUrl } = readCfUploadOutput(result);
|
|
2840
2963
|
return {
|
|
2841
2964
|
...result,
|
|
2842
2965
|
data: versionId ? {
|
|
@@ -3096,17 +3219,18 @@ function createCfVersionRunner(options) {
|
|
|
3096
3219
|
"deploy",
|
|
3097
3220
|
"--prebuilt"
|
|
3098
3221
|
], command.capture, directory);
|
|
3099
|
-
if (isCleanCloudflareExit(deployed) && raw.observability !== void 0) {
|
|
3222
|
+
if (isCleanCloudflareExit(deployed) && (raw.observability !== void 0 || raw.logpush !== void 0)) {
|
|
3100
3223
|
const credentials = options.pinnedUpload;
|
|
3101
3224
|
if (!credentials || !credentials.verifyUploader()) return failed("The Cloudflare settings publisher is unavailable.");
|
|
3102
3225
|
try {
|
|
3103
3226
|
const token = await credentials.getToken();
|
|
3104
3227
|
if (!token || !credentials.verifyUploader()) return failed("Cloudflare session is unavailable for publishing Worker settings.");
|
|
3105
|
-
await
|
|
3228
|
+
await publishCloudflareWorkerSettings({
|
|
3106
3229
|
apiBaseUrl: credentials.apiBaseUrl,
|
|
3107
3230
|
accountId: credentials.accountId,
|
|
3108
3231
|
workerName,
|
|
3109
3232
|
observability: raw.observability,
|
|
3233
|
+
logpush: raw.logpush,
|
|
3110
3234
|
headers: { Authorization: `Bearer ${token}` }
|
|
3111
3235
|
});
|
|
3112
3236
|
} catch (cause) {
|
|
@@ -3166,55 +3290,7 @@ function createCfVersionRunner(options) {
|
|
|
3166
3290
|
return failed(`Unsupported Cloudflare activation operation: ${operation.type}`);
|
|
3167
3291
|
};
|
|
3168
3292
|
}
|
|
3169
|
-
|
|
3170
|
-
//#region src/cli/cloudflare-readiness.ts
|
|
3171
|
-
const STATE_FILE = join(".void", "cloudflare.json");
|
|
3172
|
-
/** Resolve the account subdomain without exposing Cloudflare credentials to project code. */
|
|
3173
|
-
function resolveCloudflareWorkersDevSubdomain(root, accountId, env = process.env) {
|
|
3174
|
-
const configured = env.CLOUDFLARE_WORKERS_SUBDOMAIN;
|
|
3175
|
-
if (configured !== void 0 && configured.trim().length > 0) {
|
|
3176
|
-
const normalized = normalizeWorkersDevSubdomain(configured);
|
|
3177
|
-
if (!normalized) throw new Error("deploy: CLOUDFLARE_WORKERS_SUBDOMAIN must be the account subdomain, for example \"my-team\" or \"my-team.workers.dev\".");
|
|
3178
|
-
return normalized;
|
|
3179
|
-
}
|
|
3180
|
-
const cached = subdomainsByAccount(readCloudflareLocalState(root))[accountId];
|
|
3181
|
-
return typeof cached === "string" ? normalizeWorkersDevSubdomain(cached) : void 0;
|
|
3182
|
-
}
|
|
3183
|
-
/** Cache a Wrangler-reported account subdomain for later no-preview version probes. */
|
|
3184
|
-
function rememberCloudflareWorkersDevSubdomain(root, accountId, url) {
|
|
3185
|
-
const workersDevSubdomain = extractWorkersDevSubdomain(url);
|
|
3186
|
-
if (!workersDevSubdomain) return false;
|
|
3187
|
-
const current = readCloudflareLocalState(root);
|
|
3188
|
-
const currentByAccount = subdomainsByAccount(current);
|
|
3189
|
-
if (currentByAccount[accountId] === workersDevSubdomain) return false;
|
|
3190
|
-
const { workersDevSubdomain: _legacy, ...state } = current;
|
|
3191
|
-
const filePath = join(root, STATE_FILE);
|
|
3192
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
3193
|
-
writeFileSync(filePath, JSON.stringify({
|
|
3194
|
-
...state,
|
|
3195
|
-
workersDevSubdomains: {
|
|
3196
|
-
...currentByAccount,
|
|
3197
|
-
[accountId]: workersDevSubdomain
|
|
3198
|
-
}
|
|
3199
|
-
}, null, 2) + "\n");
|
|
3200
|
-
return true;
|
|
3201
|
-
}
|
|
3202
|
-
function subdomainsByAccount(state) {
|
|
3203
|
-
const value = state.workersDevSubdomains;
|
|
3204
|
-
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
3205
|
-
}
|
|
3206
|
-
function readCloudflareLocalState(root) {
|
|
3207
|
-
const filePath = join(root, STATE_FILE);
|
|
3208
|
-
if (!existsSync(filePath)) return {};
|
|
3209
|
-
try {
|
|
3210
|
-
const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
3211
|
-
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
|
|
3212
|
-
} catch {
|
|
3213
|
-
return {};
|
|
3214
|
-
}
|
|
3215
|
-
}
|
|
3216
|
-
//#endregion
|
|
3217
|
-
//#region src/cli/deploy-cloudflare-helpers.ts
|
|
3293
|
+
// src/cli/deploy-cloudflare-helpers.ts
|
|
3218
3294
|
/**
|
|
3219
3295
|
* Discover the root wrangler config path the same way the build / bindings
|
|
3220
3296
|
* writer do (wrangler.jsonc first, then wrangler.json). Falls back to the
|
|
@@ -3266,6 +3342,7 @@ async function connectCloudflareDeployAccount(options) {
|
|
|
3266
3342
|
log$1.error(`deploy: ${getErrorMessage(error)}`);
|
|
3267
3343
|
return null;
|
|
3268
3344
|
}
|
|
3345
|
+
const complianceRegion = resolveWorkersDevComplianceRegion(process.env, readWranglerTopLevelString(rootConfig, "compliance_region"));
|
|
3269
3346
|
const pins = createCloudflareUploaderPins(root, deps);
|
|
3270
3347
|
let accountId = readWranglerTopLevelString(rootConfig, "account_id") ?? (process.env.CLOUDFLARE_ACCOUNT_ID?.trim() || void 0);
|
|
3271
3348
|
if (!accountId) {
|
|
@@ -3285,8 +3362,10 @@ async function connectCloudflareDeployAccount(options) {
|
|
|
3285
3362
|
}
|
|
3286
3363
|
}
|
|
3287
3364
|
let workersDevSubdomain;
|
|
3365
|
+
let readinessAccessOrigin;
|
|
3288
3366
|
try {
|
|
3289
3367
|
workersDevSubdomain = resolveCloudflareWorkersDevSubdomain(root, accountId);
|
|
3368
|
+
readinessAccessOrigin = resolveCloudflareReadinessAccessOrigin({ CF_ACCESS_READINESS_ORIGIN: options.readinessAccessOrigin ?? void 0 });
|
|
3290
3369
|
} catch (error) {
|
|
3291
3370
|
log$1.error(getErrorMessage(error));
|
|
3292
3371
|
return null;
|
|
@@ -3294,8 +3373,10 @@ async function connectCloudflareDeployAccount(options) {
|
|
|
3294
3373
|
return {
|
|
3295
3374
|
...pins,
|
|
3296
3375
|
apiBaseUrl,
|
|
3376
|
+
complianceRegion,
|
|
3297
3377
|
accountId,
|
|
3298
3378
|
workersDevSubdomain,
|
|
3379
|
+
readinessAccessOrigin,
|
|
3299
3380
|
runWrangler: deps.runWrangler ?? createDeployWranglerRunner(root, accountId, apiBaseUrl),
|
|
3300
3381
|
rootConfig
|
|
3301
3382
|
};
|
|
@@ -3381,7 +3462,21 @@ function cloudflareCandidateActivationOptions(options) {
|
|
|
3381
3462
|
},
|
|
3382
3463
|
readinessHeaders: cloudflareWorkerReadinessHeaders(),
|
|
3383
3464
|
workersDevSubdomain,
|
|
3465
|
+
resolveWorkersDevSubdomain: async () => {
|
|
3466
|
+
const { complianceRegion } = options;
|
|
3467
|
+
if (complianceRegion === void 0) return {
|
|
3468
|
+
ok: false,
|
|
3469
|
+
reason: "unavailable"
|
|
3470
|
+
};
|
|
3471
|
+
return readCloudflareWorkersDevSubdomain({
|
|
3472
|
+
configPath,
|
|
3473
|
+
complianceRegion,
|
|
3474
|
+
runWrangler,
|
|
3475
|
+
verifyUploader: options.assertUploaderStillPinned
|
|
3476
|
+
});
|
|
3477
|
+
},
|
|
3384
3478
|
readinessHeadersWorkersDevSubdomain: process.env.CLOUDFLARE_WORKERS_SUBDOMAIN?.trim() ? workersDevSubdomain : void 0,
|
|
3479
|
+
readinessHeadersOrigin: options.readinessAccessOrigin,
|
|
3385
3480
|
...createCloudflareEmptyTriggerPublishers({
|
|
3386
3481
|
accountId,
|
|
3387
3482
|
apiBaseUrl: options.apiBaseUrl,
|
|
@@ -3482,36 +3577,64 @@ function formatCloudflareActivationFailure(result) {
|
|
|
3482
3577
|
].join("\n");
|
|
3483
3578
|
case "readiness-staging-failed": return `deploy: Cloudflare could not stage the uploaded Worker Version at zero-percent traffic${status}; production traffic is unchanged.${cloudflareCode}${diagnostic}${result.cloudflareErrorCode === 10210 && (result.diagnostic ?? "").toLowerCase().includes("durable object migration") ? "\n\nReview the Durable Object migration, then run `void deploy --platform cloudflare --atomic`. For future deploys, set deploy.cloudflare.mode to \"atomic\" in void.config.ts." : result.cloudflareErrorCode === 100405 ? "\n\nThe new version declares different exports from the live version (for example a Durable Object or Workflow class), so Cloudflare cannot split traffic between them. Run `void deploy --platform cloudflare --atomic` once to publish it at 100% directly; it receives traffic before readiness is checked." : ""}`;
|
|
3484
3579
|
case "atomic-failed": return `deploy: Cloudflare could not publish the Worker atomically${status}; inspect production status before retrying.${cloudflareCode}${diagnostic}`;
|
|
3485
|
-
case "atomic-output-invalid":
|
|
3580
|
+
case "atomic-output-invalid":
|
|
3581
|
+
if (result.versionId) return formatCloudflarePublishWithoutUrl(`Cloudflare published Worker version ${result.versionId} atomically`, `If the app uses workers.dev, set CLOUDFLARE_WORKERS_SUBDOMAIN to your account subdomain ${WORKERS_SUBDOMAIN_EXAMPLE}.`);
|
|
3582
|
+
return "deploy: Cloudflare published atomically but did not report its version id. Inspect `void project status` immediately.";
|
|
3486
3583
|
case "atomic-readiness-failed":
|
|
3487
|
-
case "atomic-readiness-access-denied": return `deploy: the atomic Worker deployment is live, but /__void/ready could not be verified. Inspect \`void project status\` and Worker logs immediately.${diagnostic}`;
|
|
3584
|
+
case "atomic-readiness-access-denied": return `deploy: the atomic Worker deployment is live, but /__void/ready could not be verified. Inspect \`void project status\` and Worker logs immediately.${diagnostic}${result.customRouteReadinessOrigin ? `\n\n${customRouteAccessHint(result.customRouteReadinessOrigin).join("\n")}` : ""}`;
|
|
3488
3585
|
case "readiness-failed": return ["deploy: the uploaded Worker Version did not pass /__void/ready.", formatCloudflareReadinessRestoration(result)].join("\n");
|
|
3489
|
-
case "readiness-access-denied":
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3586
|
+
case "readiness-access-denied":
|
|
3587
|
+
if (result.customRouteReadinessOrigin) return [
|
|
3588
|
+
"deploy: Cloudflare Access blocked the uploaded Worker Version readiness probe.",
|
|
3589
|
+
...customRouteAccessHint(result.customRouteReadinessOrigin),
|
|
3590
|
+
ATOMIC_ACCESS_ALTERNATIVE,
|
|
3591
|
+
formatCloudflareReadinessRestoration(result)
|
|
3592
|
+
].join("\n");
|
|
3593
|
+
return [
|
|
3594
|
+
"deploy: Cloudflare Access blocked the uploaded Worker Version readiness probe.",
|
|
3595
|
+
"For CI, set CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET to an admitted service token.",
|
|
3596
|
+
"For a local deploy, set CF_ACCESS_TOKEN to a short-lived user JWT from cloudflared.",
|
|
3597
|
+
"If the response is error 1050, create an Access application for this hostname; a token alone cannot bypass account default-deny.",
|
|
3598
|
+
`Then retry. ${formatCloudflareReadinessRestoration(result)}`
|
|
3599
|
+
].join("\n");
|
|
3496
3600
|
case "bootstrap-failed": return `deploy: Cloudflare could not bootstrap the first Worker deployment${status}.${cloudflareCode}${diagnostic}`;
|
|
3497
|
-
case "bootstrap-output-invalid":
|
|
3601
|
+
case "bootstrap-output-invalid":
|
|
3602
|
+
if (result.versionId) return formatCloudflarePublishWithoutUrl(`Cloudflare published the first Worker deployment as version ${result.versionId}`, `If the app uses workers.dev, enable workers.dev for this Worker in the Cloudflare dashboard. Then set CLOUDFLARE_WORKERS_SUBDOMAIN to your account subdomain ${WORKERS_SUBDOMAIN_EXAMPLE}.`);
|
|
3603
|
+
return ["deploy: Cloudflare bootstrapped the first Worker deployment, but Wrangler", "did not report its version id. Inspect `void project status` before retrying."].join("\n");
|
|
3498
3604
|
case "bootstrap-readiness-failed": return [
|
|
3499
3605
|
"deploy: the first Worker deployment did not pass /__void/ready.",
|
|
3500
3606
|
"Cloudflare requires this bootstrap to be non-versioned, so the new Worker is already active;",
|
|
3501
3607
|
"inspect its logs and `void project status` before retrying."
|
|
3502
3608
|
].join("\n") + diagnostic;
|
|
3503
|
-
case "bootstrap-readiness-access-denied":
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
|
|
3609
|
+
case "bootstrap-readiness-access-denied":
|
|
3610
|
+
if (result.customRouteReadinessOrigin) return [
|
|
3611
|
+
"deploy: Cloudflare Access blocked the first Worker deployment readiness probe.",
|
|
3612
|
+
"Cloudflare requires the first deployment to be non-versioned, so the new Worker is already active behind Access.",
|
|
3613
|
+
...customRouteAccessHint(result.customRouteReadinessOrigin),
|
|
3614
|
+
"Later deploys check readiness before traffic moves, so they need the same setting.",
|
|
3615
|
+
ATOMIC_ACCESS_ALTERNATIVE
|
|
3616
|
+
].join("\n");
|
|
3617
|
+
return [
|
|
3618
|
+
"deploy: Cloudflare Access blocked the first Worker deployment readiness probe.",
|
|
3619
|
+
"For CI, set CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET to an admitted service token;",
|
|
3620
|
+
"for a local deploy, set CF_ACCESS_TOKEN to a short-lived user JWT from cloudflared.",
|
|
3621
|
+
"If the response is error 1050, create an Access application for this hostname; a token alone cannot bypass account default-deny.",
|
|
3622
|
+
"Then retry. Cloudflare requires the first deployment to be non-versioned, so the new",
|
|
3623
|
+
"Worker is already active behind Access."
|
|
3624
|
+
].join("\n");
|
|
3511
3625
|
case "activation-failed": return `deploy: the ready Worker Version could not be activated${status}; production traffic is unchanged.`;
|
|
3512
3626
|
case "triggers-failed": return `deploy: the Worker activated, but Cloudflare trigger synchronization failed${status}. ${result.rollback === "succeeded" ? "Traffic was restored to the previous version." : result.rollback === "unavailable" ? result.previousVersionId === null ? "This was the first deployment, so no previous version was available to restore." : "Traffic or trigger restoration could not be completed. Inspect its routes, schedules, queues, and workflows in Cloudflare before retrying." : "Automatic traffic restoration failed; inspect `void project status` immediately."}`;
|
|
3513
3627
|
}
|
|
3514
3628
|
}
|
|
3629
|
+
/** Explain why a custom-route readiness probe carried no Access credentials. */
|
|
3630
|
+
function customRouteAccessHint(origin) {
|
|
3631
|
+
return [
|
|
3632
|
+
`Void did not send Access credentials to ${origin}. A route or Custom Domain receives them only when CF_ACCESS_READINESS_ORIGIN names its origin.`,
|
|
3633
|
+
`If Access protects ${origin} and admits your credentials, set CF_ACCESS_READINESS_ORIGIN=${origin} with CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET, or CF_ACCESS_TOKEN. Then retry.`,
|
|
3634
|
+
"Set it only if you control this hostname and it serves this Worker, because Void sends your Access credentials to it."
|
|
3635
|
+
];
|
|
3636
|
+
}
|
|
3637
|
+
const ATOMIC_ACCESS_ALTERNATIVE = "For a Worker with Durable Object migration history, `void deploy --platform cloudflare --atomic` publishes without the zero-traffic check. The new version receives traffic first, and the command still exits with an error because Void cannot verify readiness through Access.";
|
|
3515
3638
|
function formatCloudflareReadinessRestoration(result) {
|
|
3516
3639
|
switch (result.rollback) {
|
|
3517
3640
|
case "succeeded": return "The failed version remains inactive, and traffic was restored to the previous version.";
|
|
@@ -3521,6 +3644,16 @@ function formatCloudflareReadinessRestoration(result) {
|
|
|
3521
3644
|
default: return "The failed version remains inactive for inspection; production traffic is unchanged.";
|
|
3522
3645
|
}
|
|
3523
3646
|
}
|
|
3647
|
+
const WORKERS_SUBDOMAIN_EXAMPLE = "(for example \"my-team\", or \"my-team.fed\" for FedRAMP High)";
|
|
3648
|
+
/** Explain a live version whose readiness URL Void could not determine. */
|
|
3649
|
+
function formatCloudflarePublishWithoutUrl(published, recovery) {
|
|
3650
|
+
return [
|
|
3651
|
+
`deploy: ${published}, but Void could not determine its URL.`,
|
|
3652
|
+
"Void did not update its routes, workers.dev setting, or other triggers, and did not check /__void/ready.",
|
|
3653
|
+
recovery,
|
|
3654
|
+
"Then inspect `void project status` before you deploy again."
|
|
3655
|
+
].join("\n");
|
|
3656
|
+
}
|
|
3524
3657
|
/** Capture the Access credential used only by the guarded Worker readiness probe. */
|
|
3525
3658
|
function cloudflareWorkerReadinessHeaders() {
|
|
3526
3659
|
return trustedCloudflareWorkerAccessHeaders({
|
|
@@ -3529,8 +3662,7 @@ function cloudflareWorkerReadinessHeaders() {
|
|
|
3529
3662
|
CF_ACCESS_TOKEN: process.env.CF_ACCESS_TOKEN
|
|
3530
3663
|
});
|
|
3531
3664
|
}
|
|
3532
|
-
|
|
3533
|
-
//#region src/cli/deploy-cloudflare-static.ts
|
|
3665
|
+
// src/cli/deploy-cloudflare-static.ts
|
|
3534
3666
|
/** Default runtime date for static and framework Workers that set none. */
|
|
3535
3667
|
const DEFAULT_COMPATIBILITY_DATE = "2026-09-11";
|
|
3536
3668
|
/** Build the trusted Wrangler pointer for a framework that emits Worker files directly. */
|
|
@@ -3648,10 +3780,11 @@ async function runCloudflareStaticDeploy(root, options, voidConfig, preset, cliL
|
|
|
3648
3780
|
configPath,
|
|
3649
3781
|
rootConfig: parseRootWranglerConfig(configPath),
|
|
3650
3782
|
deps,
|
|
3651
|
-
persistAccount: !(options.reuseExistingWorker || initialCloudflareLink)
|
|
3783
|
+
persistAccount: !(options.reuseExistingWorker || initialCloudflareLink),
|
|
3784
|
+
readinessAccessOrigin: options.readinessAccessOrigin
|
|
3652
3785
|
});
|
|
3653
3786
|
if (!connection || !await confirmCloudflareDeployAuthentication(connection, configPath)) return exit(1);
|
|
3654
|
-
const { apiBaseUrl, usesCf, cfUploaderIsPinned, assertUploaderStillPinned, accountId, workersDevSubdomain, runWrangler } = connection;
|
|
3787
|
+
const { apiBaseUrl, complianceRegion, usesCf, cfUploaderIsPinned, assertUploaderStillPinned, accountId, workersDevSubdomain, readinessAccessOrigin, runWrangler } = connection;
|
|
3655
3788
|
const existingWorker = await prepareExistingCloudflareDeployWithAuth({
|
|
3656
3789
|
root,
|
|
3657
3790
|
configPath,
|
|
@@ -3699,6 +3832,7 @@ async function runCloudflareStaticDeploy(root, options, voidConfig, preset, cliL
|
|
|
3699
3832
|
const merged = mergeAndLintRoutingRules(preset.outputDir, voidConfig.routing);
|
|
3700
3833
|
const manifest = buildStaticManifest({
|
|
3701
3834
|
appType: preset.appType,
|
|
3835
|
+
alwaysUseHttps: voidConfig.routing?.alwaysUseHttps,
|
|
3702
3836
|
hashedAssetsPrefix: "assets",
|
|
3703
3837
|
headerRules: merged.headerRules,
|
|
3704
3838
|
redirectRules: merged.redirectRules,
|
|
@@ -3731,6 +3865,7 @@ async function runCloudflareStaticDeploy(root, options, voidConfig, preset, cliL
|
|
|
3731
3865
|
}, null, 2)}\n`, { mode: 384 });
|
|
3732
3866
|
writeFileSync(entryPath, renderCloudflareStaticEntry({
|
|
3733
3867
|
runtimeImport: "void/edge",
|
|
3868
|
+
alwaysUseHttps: manifest.alwaysUseHttps,
|
|
3734
3869
|
headerRules: manifest.headerRules,
|
|
3735
3870
|
redirectRules: manifest.redirectRules,
|
|
3736
3871
|
fallbackRules: manifest.fallbackRules,
|
|
@@ -3779,8 +3914,10 @@ async function runCloudflareStaticDeploy(root, options, voidConfig, preset, cliL
|
|
|
3779
3914
|
uploadConfigPath: staticConfigPath,
|
|
3780
3915
|
accountId,
|
|
3781
3916
|
apiBaseUrl,
|
|
3917
|
+
complianceRegion,
|
|
3782
3918
|
workerName,
|
|
3783
3919
|
workersDevSubdomain,
|
|
3920
|
+
readinessAccessOrigin,
|
|
3784
3921
|
runWrangler,
|
|
3785
3922
|
readExistingWorker: deps.readExistingWorker,
|
|
3786
3923
|
existingWorker,
|
|
@@ -3821,8 +3958,7 @@ async function runCloudflareStaticDeploy(root, options, voidConfig, preset, cliL
|
|
|
3821
3958
|
}), execution.previewUrl);
|
|
3822
3959
|
printDeploySuccess();
|
|
3823
3960
|
}
|
|
3824
|
-
|
|
3825
|
-
//#region src/cli/deploy-migrations.ts
|
|
3961
|
+
// src/cli/deploy-migrations.ts
|
|
3826
3962
|
/**
|
|
3827
3963
|
* Apply the checked-in migrations to an in-memory SQLite database and assert the resulting
|
|
3828
3964
|
* schema has every required auth table and column, with its primary key, NOT NULL, UNIQUE and
|
|
@@ -4209,8 +4345,7 @@ To undo these migrations, restore this point (discards every later write):
|
|
|
4209
4345
|
}
|
|
4210
4346
|
return { restoreCommand };
|
|
4211
4347
|
}
|
|
4212
|
-
|
|
4213
|
-
//#region src/cli/deploy-cloudflare-build.ts
|
|
4348
|
+
// src/cli/deploy-cloudflare-build.ts
|
|
4214
4349
|
/** Build the Worker without Cloudflare credentials, then run the post-build gates. */
|
|
4215
4350
|
async function buildCloudflareWorker(input) {
|
|
4216
4351
|
const { root, voidConfig, deps, exit, atomic, frameworkPreset, detectedFramework } = input;
|
|
@@ -4368,7 +4503,7 @@ async function buildCloudflareWorker(input) {
|
|
|
4368
4503
|
projectRoot: root,
|
|
4369
4504
|
configPath: generatedConfigPath,
|
|
4370
4505
|
accountId
|
|
4371
|
-
}) : prepareCfBuildOutput(dirname(generatedConfigPath), accountId);
|
|
4506
|
+
}) : prepareCfBuildOutput(dirname(generatedConfigPath), accountId, void 0, root);
|
|
4372
4507
|
if (usesCf) {
|
|
4373
4508
|
const preflight = await prepareBuildOutput();
|
|
4374
4509
|
if (!preflight) {
|
|
@@ -4384,8 +4519,7 @@ async function buildCloudflareWorker(input) {
|
|
|
4384
4519
|
prepareBuildOutput
|
|
4385
4520
|
};
|
|
4386
4521
|
}
|
|
4387
|
-
|
|
4388
|
-
//#region src/cli/deploy-cloudflare-migrate.ts
|
|
4522
|
+
// src/cli/deploy-cloudflare-migrate.ts
|
|
4389
4523
|
/** Provision the auth secret and apply database migrations, then verify the artifact. */
|
|
4390
4524
|
async function migrateCloudflareWorker(input) {
|
|
4391
4525
|
const { root, deps, exit, cliLog } = input;
|
|
@@ -4471,8 +4605,7 @@ async function migrateCloudflareWorker(input) {
|
|
|
4471
4605
|
d1RestoreCommand
|
|
4472
4606
|
};
|
|
4473
4607
|
}
|
|
4474
|
-
|
|
4475
|
-
//#region src/cli/cloudflare-deploy/classify.ts
|
|
4608
|
+
// src/cli/cloudflare-deploy/classify.ts
|
|
4476
4609
|
/**
|
|
4477
4610
|
* Narrow native Cloudflare deploys to app shapes whose emitted Worker artifact
|
|
4478
4611
|
* the current verifier understands. This runs before any account operation;
|
|
@@ -4512,8 +4645,7 @@ function unsupported(reason) {
|
|
|
4512
4645
|
reason
|
|
4513
4646
|
};
|
|
4514
4647
|
}
|
|
4515
|
-
|
|
4516
|
-
//#region src/cli/cloudflare-isr.ts
|
|
4648
|
+
// src/cli/cloudflare-isr.ts
|
|
4517
4649
|
/** A configured opt-in authorizes only the cache identity declared before the build. */
|
|
4518
4650
|
function approvedCloudflareIsrBinding(config, rootConfig) {
|
|
4519
4651
|
if (config.routing?.isr !== true || resolveBindingNames(config.inference?.bindings)?.kv === "ISR_CACHE") return [];
|
|
@@ -4549,8 +4681,7 @@ async function chooseCloudflareIsr(root, config, options) {
|
|
|
4549
4681
|
log.info(`Saved routing.isr: ${String(enabled)} in void.config.ts. ISR caching ${enabled ? "will be enabled in this deployment" : "stays disabled until you change this setting"}.`);
|
|
4550
4682
|
return enabled;
|
|
4551
4683
|
}
|
|
4552
|
-
|
|
4553
|
-
//#region src/cli/deploy-cloudflare-email.ts
|
|
4684
|
+
// src/cli/deploy-cloudflare-email.ts
|
|
4554
4685
|
/** Whether the root config carries the `send_email` binding Void writes. */
|
|
4555
4686
|
function hasVoidSendEmailBinding(rootConfig) {
|
|
4556
4687
|
return Array.isArray(rootConfig.send_email) && rootConfig.send_email.some((binding) => binding?.name === "SEND_EMAIL");
|
|
@@ -4705,8 +4836,7 @@ async function runCloudflareEmailStep(input) {
|
|
|
4705
4836
|
function existingAddresses(rootConfig, pre) {
|
|
4706
4837
|
return Array.isArray(rootConfig.addresses) ? rootConfig.addresses.map((a) => typeof a === "string" ? a.toLowerCase() : "").filter((a) => pre.addresses.includes(a)) : [];
|
|
4707
4838
|
}
|
|
4708
|
-
|
|
4709
|
-
//#region src/cli/deploy-cloudflare-queues.ts
|
|
4839
|
+
// src/cli/deploy-cloudflare-queues.ts
|
|
4710
4840
|
function isValidQueueName(name) {
|
|
4711
4841
|
try {
|
|
4712
4842
|
assertValidResourceName("queue", name);
|
|
@@ -4813,8 +4943,7 @@ async function chooseCloudflareQueueNames(input) {
|
|
|
4813
4943
|
absent
|
|
4814
4944
|
};
|
|
4815
4945
|
}
|
|
4816
|
-
|
|
4817
|
-
//#region src/cli/deploy-cloudflare-preflight.ts
|
|
4946
|
+
// src/cli/deploy-cloudflare-preflight.ts
|
|
4818
4947
|
/** Validate source-level native deploy inputs before account operations or project code. */
|
|
4819
4948
|
async function prepareCloudflareDeploySource(root, options, voidConfig) {
|
|
4820
4949
|
if (options.skipBuild) {
|
|
@@ -4891,10 +5020,11 @@ async function preflightCloudflareWorker(input) {
|
|
|
4891
5020
|
configPath,
|
|
4892
5021
|
rootConfig,
|
|
4893
5022
|
deps,
|
|
4894
|
-
persistAccount: !(options.reuseExistingWorker || initialCloudflareLink)
|
|
5023
|
+
persistAccount: !(options.reuseExistingWorker || initialCloudflareLink),
|
|
5024
|
+
readinessAccessOrigin: options.readinessAccessOrigin
|
|
4895
5025
|
});
|
|
4896
5026
|
if (!connection) return exit(1);
|
|
4897
|
-
const { apiBaseUrl, usesCf, cfUploaderIsPinned, assertUploaderStillPinned, accountId, workersDevSubdomain, runWrangler } = connection;
|
|
5027
|
+
const { apiBaseUrl, complianceRegion, usesCf, cfUploaderIsPinned, assertUploaderStillPinned, accountId, workersDevSubdomain, readinessAccessOrigin, runWrangler } = connection;
|
|
4898
5028
|
rootConfig = connection.rootConfig;
|
|
4899
5029
|
const workerName = readWranglerTopLevelString(rootConfig, "name") ?? deriveWorkerName(root);
|
|
4900
5030
|
printDeployContext(workerName, "Cloudflare");
|
|
@@ -5122,11 +5252,13 @@ async function preflightCloudflareWorker(input) {
|
|
|
5122
5252
|
});
|
|
5123
5253
|
return {
|
|
5124
5254
|
apiBaseUrl,
|
|
5255
|
+
complianceRegion,
|
|
5125
5256
|
usesCf,
|
|
5126
5257
|
cfUploaderIsPinned,
|
|
5127
5258
|
assertUploaderStillPinned,
|
|
5128
5259
|
accountId,
|
|
5129
5260
|
workersDevSubdomain,
|
|
5261
|
+
readinessAccessOrigin,
|
|
5130
5262
|
runWrangler,
|
|
5131
5263
|
workerName,
|
|
5132
5264
|
emailMap,
|
|
@@ -5141,13 +5273,12 @@ async function preflightCloudflareWorker(input) {
|
|
|
5141
5273
|
expectedDurableObjectState
|
|
5142
5274
|
};
|
|
5143
5275
|
}
|
|
5144
|
-
|
|
5145
|
-
//#region src/cli/deploy-cloudflare-publish.ts
|
|
5276
|
+
// src/cli/deploy-cloudflare-publish.ts
|
|
5146
5277
|
/** Upload the verified Worker as a candidate version, probe it, and activate it. */
|
|
5147
5278
|
async function publishCloudflareWorker(input) {
|
|
5148
5279
|
const { root, deps, exit, cliLog, atomic, detectedFramework, initialCloudflareCandidate } = input;
|
|
5149
5280
|
const { configPath, needsSandbox, desired, analysis } = input.source;
|
|
5150
|
-
const { usesCf, existingWorker, pinnedHandoffLink, accountId, workerName, cfUploaderIsPinned, apiBaseUrl, runWrangler, assertUploaderStillPinned, schemaFacts, approvedHandoffKv, workersDevSubdomain } = input.preflight;
|
|
5281
|
+
const { usesCf, existingWorker, pinnedHandoffLink, accountId, workerName, cfUploaderIsPinned, apiBaseUrl, complianceRegion, runWrangler, assertUploaderStillPinned, schemaFacts, approvedHandoffKv, workersDevSubdomain, readinessAccessOrigin } = input.preflight;
|
|
5151
5282
|
const { migrations, d1MigrateToken, generatedConfigPath, prepareBuildOutput } = input.build;
|
|
5152
5283
|
const { workerWasMissingBeforeSecretProvisioning, initialAuthSecret, appliedMigrations } = input.migration;
|
|
5153
5284
|
const queueConsumerCleanup = readWranglerManagedQueueCleanupCandidates(configPath);
|
|
@@ -5189,8 +5320,10 @@ async function publishCloudflareWorker(input) {
|
|
|
5189
5320
|
uploadConfigPath: generatedConfigPath,
|
|
5190
5321
|
accountId,
|
|
5191
5322
|
apiBaseUrl,
|
|
5323
|
+
complianceRegion,
|
|
5192
5324
|
workerName,
|
|
5193
5325
|
workersDevSubdomain,
|
|
5326
|
+
readinessAccessOrigin,
|
|
5194
5327
|
runWrangler,
|
|
5195
5328
|
readExistingWorker: deps.readExistingWorker,
|
|
5196
5329
|
existingWorker,
|
|
@@ -5237,10 +5370,10 @@ async function publishCloudflareWorker(input) {
|
|
|
5237
5370
|
framework: detectedFramework?.name
|
|
5238
5371
|
}), execution.previewUrl);
|
|
5239
5372
|
}
|
|
5240
|
-
|
|
5241
|
-
//#region src/cli/deploy-cloudflare.ts
|
|
5373
|
+
// src/cli/deploy-cloudflare.ts
|
|
5242
5374
|
/** Deploy to the user's own Cloudflare account through the guarded native Worker flow. */
|
|
5243
5375
|
async function runCloudflareDeploy(root, options, cliLog, deps = {}) {
|
|
5376
|
+
options = withRecordedReadinessAccessOrigin(options);
|
|
5244
5377
|
const initialCloudflareLink = readCloudflareLink(root);
|
|
5245
5378
|
const initialCloudflareCandidate = readCloudflareCandidate(root);
|
|
5246
5379
|
const exit = deps.exit ?? ((code) => process.exit(code));
|
|
@@ -5277,6 +5410,14 @@ async function runCloudflareDeploy(root, options, cliLog, deps = {}) {
|
|
|
5277
5410
|
}
|
|
5278
5411
|
return runCloudflareStaticDeploy(root, options, voidConfig, staticPreset, cliLog, deps, initialCloudflareLink, initialCloudflareCandidate);
|
|
5279
5412
|
}
|
|
5413
|
+
if (detectedFramework && voidConfig.routing?.alwaysUseHttps === true) {
|
|
5414
|
+
log$1.error([
|
|
5415
|
+
`deploy: native Cloudflare deployment cannot apply Void routing.alwaysUseHttps to ${detectedFramework.name}.`,
|
|
5416
|
+
"This framework owns its Worker request handler, so the HTTPS redirect would otherwise be ignored.",
|
|
5417
|
+
"Redirect HTTP to HTTPS in the framework, or turn on Cloudflare's Always Use HTTPS setting for your zone, then remove routing.alwaysUseHttps and retry."
|
|
5418
|
+
].join("\n"));
|
|
5419
|
+
return exit(1);
|
|
5420
|
+
}
|
|
5280
5421
|
const source = await prepareCloudflareDeploySource(root, options, voidConfig);
|
|
5281
5422
|
if (!source) return exit(1);
|
|
5282
5423
|
const preflight = await preflightCloudflareWorker({
|
|
@@ -5343,8 +5484,7 @@ async function runCloudflareDeploy(root, options, cliLog, deps = {}) {
|
|
|
5343
5484
|
if (preflight.emailMap) log$1.message(renderAddressMap(preflight.emailMap));
|
|
5344
5485
|
printDeploySuccess();
|
|
5345
5486
|
}
|
|
5346
|
-
|
|
5347
|
-
//#region src/cli/deploy-managed-framework.ts
|
|
5487
|
+
// src/cli/deploy-managed-framework.ts
|
|
5348
5488
|
/**
|
|
5349
5489
|
* Class B/C framework deploy: build with framework CLI, package with preset output paths.
|
|
5350
5490
|
*/
|
|
@@ -5446,6 +5586,7 @@ async function runFrameworkDeploy(root, config, client, detected, fwPreset, void
|
|
|
5446
5586
|
};
|
|
5447
5587
|
const manifest = buildFrameworkManifest({
|
|
5448
5588
|
frameworkName: detected.name,
|
|
5589
|
+
alwaysUseHttps: voidConfig.routing?.alwaysUseHttps,
|
|
5449
5590
|
workerMain: actualWorkerMain,
|
|
5450
5591
|
bindings,
|
|
5451
5592
|
migrations: validatedMigrations,
|
|
@@ -5496,8 +5637,7 @@ async function runFrameworkDeploy(root, config, client, detected, fwPreset, void
|
|
|
5496
5637
|
warnUnpublishedRouting(result);
|
|
5497
5638
|
printDeploySuccess(result.published !== false);
|
|
5498
5639
|
}
|
|
5499
|
-
|
|
5500
|
-
//#region src/cli/deploy-managed-full.ts
|
|
5640
|
+
// src/cli/deploy-managed-full.ts
|
|
5501
5641
|
async function runFullDeploy(root, config, client, voidConfig, fwPreset, skipBuild, gitMetadata, detected, cliLog) {
|
|
5502
5642
|
cliLog?.info("deploy_mode", {
|
|
5503
5643
|
mode: "full",
|
|
@@ -5619,7 +5759,7 @@ async function runFullDeploy(root, config, client, voidConfig, fwPreset, skipBui
|
|
|
5619
5759
|
buildCommand: null,
|
|
5620
5760
|
outputDir: clientDir,
|
|
5621
5761
|
appType: "static"
|
|
5622
|
-
}, true, gitMetadata, assetsPrefix, headerRules, redirectRules, fallbackRules, void 0, cliLog, voidConfig.routing?.notFound);
|
|
5762
|
+
}, true, gitMetadata, assetsPrefix, headerRules, redirectRules, fallbackRules, void 0, cliLog, voidConfig.routing?.notFound, voidConfig.routing?.alwaysUseHttps);
|
|
5623
5763
|
}
|
|
5624
5764
|
}
|
|
5625
5765
|
const prerenderSourcesPresent = hasPrerenderSources({
|
|
@@ -5702,6 +5842,7 @@ async function runFullDeploy(root, config, client, voidConfig, fwPreset, skipBui
|
|
|
5702
5842
|
...bindings,
|
|
5703
5843
|
needsLive: true
|
|
5704
5844
|
} : bindings,
|
|
5845
|
+
alwaysUseHttps: voidConfig.routing?.alwaysUseHttps,
|
|
5705
5846
|
hasEmailHandlers: !isFrameworkMode && routeScan.email !== void 0 && hasEmailHandlers(routeScan.email),
|
|
5706
5847
|
migrations: validatedMigrations,
|
|
5707
5848
|
schedules,
|
|
@@ -5769,8 +5910,7 @@ async function runFullDeploy(root, config, client, voidConfig, fwPreset, skipBui
|
|
|
5769
5910
|
warnUnpublishedRouting(result);
|
|
5770
5911
|
printDeploySuccess(result.published !== false);
|
|
5771
5912
|
}
|
|
5772
|
-
|
|
5773
|
-
//#region src/cli/github-oidc.ts
|
|
5913
|
+
// src/cli/github-oidc.ts
|
|
5774
5914
|
/**
|
|
5775
5915
|
* GitHub Actions OIDC → Void deploy-token exchange for `void deploy` without `VOID_TOKEN`.
|
|
5776
5916
|
*
|
|
@@ -5865,8 +6005,7 @@ async function safeText(res) {
|
|
|
5865
6005
|
return "";
|
|
5866
6006
|
}
|
|
5867
6007
|
}
|
|
5868
|
-
|
|
5869
|
-
//#region src/cli/installed-void.ts
|
|
6008
|
+
// src/cli/installed-void.ts
|
|
5870
6009
|
/** A global CLI still builds with the project's installed Vite plugin. */
|
|
5871
6010
|
function assertInstalledVoidMatchesCli(root) {
|
|
5872
6011
|
const projectManifest = join(root, "package.json");
|
|
@@ -5903,8 +6042,7 @@ function assertInstalledVoidMatchesCli(root) {
|
|
|
5903
6042
|
if (installedVersion !== cli.version) throw new Error(`deploy: this CLI is void@${cli.version}, but the project's installed Vite plugin is ${installedVersion ? `void@${installedVersion}` : "missing"}. Install the same Void version in the project (or link this development checkout) before deploying. The build imports the project package; mixing versions can rewrite legacy config and produce an unsafe Cloudflare deploy target.`);
|
|
5904
6043
|
if (installedPackageDir && existsSync(join(cliPackageDir, "src", "index.ts")) && realpathSync(installedPackageDir) !== realpathSync(cliPackageDir)) throw new Error("deploy: this development CLI and the project Vite plugin come from different Void builds, even though their package versions match. Link the same development checkout into the project before deploying.");
|
|
5905
6044
|
}
|
|
5906
|
-
|
|
5907
|
-
//#region src/cli/log-file.ts
|
|
6045
|
+
// src/cli/log-file.ts
|
|
5908
6046
|
/**
|
|
5909
6047
|
* Flatten a serialized `ErrChainNode` (from `describeErrorChain`, or read back
|
|
5910
6048
|
* out of a JSONL record) to a single inline string, joining cause levels with
|
|
@@ -6054,8 +6192,7 @@ function openDeployLog(opts) {
|
|
|
6054
6192
|
}
|
|
6055
6193
|
};
|
|
6056
6194
|
}
|
|
6057
|
-
|
|
6058
|
-
//#region src/cli/log-summary.ts
|
|
6195
|
+
// src/cli/log-summary.ts
|
|
6059
6196
|
var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
|
|
6060
6197
|
const FIELD_VALUE_MAX = 80;
|
|
6061
6198
|
const LINE_MAX = 160;
|
|
@@ -6197,13 +6334,13 @@ function buildDeployLogSummary(path) {
|
|
|
6197
6334
|
}
|
|
6198
6335
|
return formatDeployLogSummary(text.split("\n"));
|
|
6199
6336
|
}
|
|
6200
|
-
|
|
6201
|
-
//#region src/cli/deploy.ts
|
|
6337
|
+
// src/cli/deploy.ts
|
|
6202
6338
|
function resolveDeploymentPlatform(root, options) {
|
|
6203
6339
|
return options?.platform ?? readDeploymentPlatform(root) ?? "void";
|
|
6204
6340
|
}
|
|
6205
6341
|
/** Run `void deploy`; a failure carries a summary of the deploy log in its message. */
|
|
6206
6342
|
async function runDeploy(root, options) {
|
|
6343
|
+
options = withRecordedReadinessAccessOrigin(options ?? {});
|
|
6207
6344
|
console.log();
|
|
6208
6345
|
const cliLog = openDeployLog({ mirrorToStderr: options?.debug === true || process.env.VOID_DEPLOY_DEBUG === "1" });
|
|
6209
6346
|
cliLog.info("deploy_start", {
|
|
@@ -6447,5 +6584,4 @@ async function runManagedDeploy(root, options, cliLog) {
|
|
|
6447
6584
|
throw error;
|
|
6448
6585
|
}
|
|
6449
6586
|
}
|
|
6450
|
-
//#endregion
|
|
6451
6587
|
export { discoverRootWranglerConfig as a, runWranglerAuthToken as c, checkWranglerMigrationApplySet as i, deriveWorkerName as l, resolveDeploymentPlatform as n, createDeployWranglerRunner as o, runDeploy as r, isWranglerNonInteractiveOrCI as s, parseRootWranglerConfig$1 as t };
|