void 1.4.0 → 1.6.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-HP8bixYo.mjs → account-cmd-DRhmCWcm.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-DDOQwiXk.mjs → application-analysis-HRFsZOv3.mjs} +18 -24
- package/dist/{application-routing-4719u_kf.mjs → application-routing-P4TggvWp.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-g2TQbDLD.d.mts → auth-CH4PLAX1.d.mts} +0 -2
- 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-CedYpDCy.mjs → auth-link-CVXP1G6G.mjs} +7 -8
- package/dist/{auth-migrations-BO27GDNr.mjs → auth-migrations-DDeifS3v.mjs} +1 -2
- package/dist/{auth-router-vafo7x8w.mjs → auth-router-D1pGdbvB.mjs} +6 -7
- package/dist/{base64-DVrOndmI.mjs → base64-ikl9yBy3.mjs} +1 -2
- package/dist/{better-auth-shared-BHB8kiTE.d.mts → better-auth-shared-BJyG2mH0.d.mts} +2 -6
- package/dist/{better-auth-shared-7FM3Uk2N.mjs → better-auth-shared-C958aM7W.mjs} +31 -7
- package/dist/{build-cmd-9vUAQ1_V.mjs → build-cmd-DmjbuT6d.mjs} +7 -8
- package/dist/{cache-jvwLNb0h.mjs → cache-2khBO1MR.mjs} +7 -8
- package/dist/{cancel-deploy-Dw0UmWKO.mjs → cancel-deploy-_itbbvY3.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-XpNR9zoh.mjs → cf-build-output-B1C8U83u.mjs} +41 -314
- 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-Dg27RzyT.mjs → cf-worker-settings-CARs4Wy9.mjs} +3 -5
- package/dist/cli/cli.mjs +66 -76
- package/dist/cli/cloudflare-operation-process.mjs +14 -18
- package/dist/cli/env-schema-probe.d.mts +1 -5
- package/dist/cli/env-schema-probe.mjs +4 -5
- package/dist/client-CEtr5UOR.mjs +1 -0
- package/dist/{client-B3LnB_bE.mjs → client-CoxPEhJq.mjs} +15 -13
- package/dist/{cloudflare-auth-DyD_kVFr.mjs → cloudflare-auth-CEu-1Ps_.mjs} +2 -3
- package/dist/{cloudflare-cmd-D-b_u3T4.mjs → cloudflare-cmd-fZ6AMSWk.mjs} +7 -8
- package/dist/{cloudflare-config-CH1AylZT.mjs → cloudflare-config-eQunqX6A.mjs} +22 -17
- package/dist/{cloudflare-connect-zTJh8UnN.mjs → cloudflare-connect-9OZe4XVQ.mjs} +5 -6
- package/dist/{cloudflare-operations-Bc-7fN44.mjs → cloudflare-operations-CrskD4_O.mjs} +8 -9
- package/dist/{cloudflare-operations-BtulCNOg.mjs → cloudflare-operations-oLvAd9Nd.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-tqMM6DwY.mjs → config-BBlVXZCU.mjs} +5 -6
- package/dist/{config-OFOAimzt.mjs → config-BITKQ3O6.mjs} +5 -5
- package/dist/{config-BV2ASlpn.mjs → config-BgysUhnm.mjs} +1 -1
- package/dist/{config-CAdZVTLN.d.mts → config-CPxJmt4M.d.mts} +4 -6
- package/dist/{config-D-6q7EBH.mjs → config-WlvEcL82.mjs} +3 -4
- package/dist/config-entry.d.mts +1 -3
- package/dist/config-entry.mjs +1 -2
- package/dist/{connect-BOM6zvFX.mjs → connect-CKvmkl2R.mjs} +10 -11
- package/dist/{create-project-C2K0DN2O.mjs → create-project-BiMmR5wA.mjs} +1 -1
- package/dist/{create-project-Bxd02EHN.mjs → create-project-Bq0M8MtO.mjs} +9 -11
- 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-Cdvr3zwG.mjs → db-cq5RW4Vy.mjs} +52 -54
- package/dist/{db-types-0eCiqYb1.mjs → db-types-C_8amnB0.mjs} +3 -4
- package/dist/{delete-lETE6Tpt.mjs → delete-CY4L8fi2.mjs} +7 -8
- package/dist/deploy-B029oHlE.mjs +2 -0
- package/dist/{deploy-CdM-LAxX.mjs → deploy-D_gEojD2.mjs} +144 -136
- package/dist/{deploy-managed-static-DjeBFG2c.mjs → deploy-managed-static-BHVbB_-A.mjs} +33 -40
- package/dist/{deploy-transport-DIq_gFTP.mjs → deploy-transport-DEyOUfac.mjs} +6 -7
- package/dist/deploy.d.mts +1 -3
- package/dist/deploy.mjs +11 -11
- package/dist/{dev-inbox-D0jxye_D.mjs → dev-inbox-CUUS6iUg.mjs} +3 -4
- package/dist/discover-D4mQthao.mjs +1 -0
- package/dist/{discover-LaV0tbIu.mjs → discover-Dhkzxgdt.mjs} +3 -4
- package/dist/{dispatch-CLa2LThw.mjs → dispatch-BNLB5_Gm.mjs} +12 -15
- 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-DyhNtdYf.mjs → domain-BlH90Ods.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-DM2wDcBN.mjs → email-Bkq8ZL1p.mjs} +14 -15
- package/dist/{email-cloudflare-PMbAev9Q.mjs → email-cloudflare-MvJIxrwx.mjs} +18 -123
- 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-78hbN-oI.mjs → env-AvuCSeCH.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-BUfFZ6bt.mjs → env-validation-C8Cmvas0.mjs} +1 -1
- package/dist/{env-validation-B3VobvXm.mjs → env-validation-GV1oD4EV.mjs} +9 -10
- package/dist/{error-pages-CLIJ7aYq.mjs → error-pages-COVBnzK7.mjs} +6 -12
- 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-CFmsUsW1.mjs → gen-BD-dfjxY.mjs} +12 -13
- package/dist/gen-CIHXh9I8.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-De-_IWbM.mjs → github-cmd-CA-lBdkn.mjs} +8 -9
- package/dist/{handler-BHktmuTL.d.mts → handler-BR6Tvjkp.d.mts} +18 -26
- package/dist/{handler-BZ1t7-Rv.mjs → handler-CKeTtYID.mjs} +6 -17
- 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-CuTEdP9C.mjs +445 -0
- package/dist/{help-CKbrhZha.mjs → help-1OCFDsRr.mjs} +28 -12
- package/dist/help-Ba8Dq5-r.mjs +1 -0
- package/dist/{inbound-Da7XsjH3.d.mts → inbound-BHt4dIlL.d.mts} +16 -9
- package/dist/{inbound-VrOLqwZY.mjs → inbound-CdO-qY0w.mjs} +6 -81
- package/dist/index.d.mts +23 -13
- package/dist/index.mjs +495 -223
- package/dist/{info-Yg0-V5Rs.mjs → info-CJxua_db.mjs} +6 -7
- package/dist/{init-CDiJQycf.mjs → init-B-4CluYx.mjs} +43 -59
- package/dist/{isr-config-fZaJJ8t7.mjs → isr-config-Czzb4mIq.mjs} +5 -55
- 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-Dllip08S.mjs → link-DAXOT-G_.mjs} +8 -9
- package/dist/{list-BYRP6am0.mjs → list-BYSOo9fm.mjs} +8 -9
- package/dist/{live-BllfDuzA.d.mts → live-0xrcVpyq.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-CAwAs9GH.mjs → local-d1-BLgsNUj9.mjs} +4 -5
- package/dist/{log-BMwmN5Ae.mjs → log-D9hwSySP.mjs} +3 -4
- package/dist/login-BpbYeu-n.mjs +1 -0
- package/dist/{login-PcFy5mlC.mjs → login-CJopTWX4.mjs} +6 -7
- package/dist/{logs-DmJTBhed.mjs → logs-DE0weBsR.mjs} +19 -18
- package/dist/{migrate-B8S2xTcb.mjs → migrate-ChHHZBTi.mjs} +20 -16
- package/dist/migrate-HdA6Kh2p.mjs +1 -0
- 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-CtP6-qAF.mjs} +145 -18
- 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 +5 -6
- package/dist/{node-CDOPrGSl.mjs → node-CZ6lGNLn.mjs} +8 -9
- 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-DmkmS2wL.mjs → operator-cmd-BUqsdk2K.mjs} +32 -15
- package/dist/operator-cmd-wBYyp8iQ.mjs +1 -0
- 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 +147 -31
- package/dist/pages/client.mjs +199 -43
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +25 -18
- package/dist/pages/index.mjs +24 -12
- package/dist/pages/islands-plugin.d.mts +75 -13
- package/dist/pages/islands-plugin.mjs +92 -7
- package/dist/pages/prefetch.d.mts +2 -2
- 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-C7XUw9mw.mjs +1 -0
- package/dist/{platform-args-BMD2gjc_.mjs → platform-args-Cx1M-7bq.mjs} +22 -11
- package/dist/{platform-auth-config-CImnfohz.mjs → platform-auth-config-K4m_LE8b.mjs} +10 -11
- package/dist/{platform-auth-protection-BogLhtHi.mjs → platform-auth-protection-KF5Vo-1I.mjs} +10 -11
- package/dist/{platform-auth-recovery-B-mEaWEi.mjs → platform-auth-recovery-BOdFrl7R.mjs} +9 -11
- package/dist/{platform-cmd-CV8NxIIn.mjs → platform-cmd-DpCHawGF.mjs} +1 -1
- package/dist/{platform-cmd-DZK2ixMl.mjs → platform-cmd-Ds3EAV5t.mjs} +13 -13
- package/dist/{platform-discovery-CHhNs8Nn.mjs → platform-discovery-B0eZjZ3B.mjs} +2 -3
- package/dist/{platform-domain-CRvelPGE.mjs → platform-domain-rWJshybd.mjs} +7 -8
- package/dist/{platform-lifecycle-DwXq7kZt.mjs → platform-lifecycle-BH34I0rh.mjs} +1 -1
- package/dist/{platform-lifecycle-CPYY7E9B.mjs → platform-lifecycle-D9RdGub1.mjs} +110 -110
- package/dist/{platform-management-BOnGbMSM.mjs → platform-management-BRefdHGD.mjs} +27 -11
- package/dist/{platform-management-lXdgGgAM.mjs → platform-management-BfLW0Zlo.mjs} +1 -1
- package/dist/{platform-plans-config-CeydDSj0.mjs → platform-plans-config-Dx1agneU.mjs} +5 -6
- package/dist/{platform-recovery-noaALXnE.mjs → platform-recovery-DZuZGJtt.mjs} +5 -6
- package/dist/{platform-registry-B9mWX9LO.mjs → platform-registry-DZ_2Xuqd.mjs} +4 -6
- package/dist/platform-runtime-logs-CdJGnk3f.mjs +68 -0
- package/dist/{platform-setup-Ca53gtt0.mjs → platform-setup-Vw1AaUN8.mjs} +19 -7
- package/dist/{plugin-inference-CeiB6BG5.mjs → plugin-inference-CdLbxZL_.mjs} +16 -24
- package/dist/{prefetch-Bsc_Pb6c.mjs → prefetch-Dx2jIbtg.mjs} +20 -3
- package/dist/{prefetch-Ce6la4EI.d.mts → prefetch-NdNeubbH.d.mts} +7 -3
- package/dist/{prepare-D604Yiyr.mjs → prepare-BJW-f1f1.mjs} +13 -14
- package/dist/{prepare-BuOS18AM.mjs → prepare-BMGeKL16.mjs} +4 -5
- package/dist/prepare-BdxJJCMv.mjs +1 -0
- 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-DBYqAIbe.mjs → project-cmd-B_bUyZ3J.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-BjCLgTRC.mjs → project-team-MjT5K4rQ.mjs} +7 -8
- package/dist/{project-token-BB6PwaA9.mjs → project-token-BKHGwY3k.mjs} +7 -8
- package/dist/{project-tsconfig-CVvk6Z_e.mjs → project-tsconfig-Cf2NFjlM.mjs} +4 -6
- package/dist/{project-zero-trust-CWDh1P_t.mjs → project-zero-trust-Bzdd05-h.mjs} +7 -8
- package/dist/{protocol-DimNxVRr.mjs → protocol-COyySMki.mjs} +135 -113
- package/dist/{protocol-D5XDySYu.d.mts → protocol-CkwjASep.d.mts} +4 -6
- 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-DztLJ97X.mjs → provision-BbCzpbXs.mjs} +6 -7
- package/dist/{provision-DfxLCg-d.mjs → provision-DQF6Kw-6.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-D_pbzDyz.mjs → requests-daJmVpjk.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-CjfIYsJx.mjs → rollback-BgL0wY1J.mjs} +7 -8
- package/dist/{rolldown-runtime-3h0WiCiA.mjs → rolldown-runtime-uD8oG6U2.mjs} +1 -2
- package/dist/{route-types-DvEGmPif.mjs → route-types-CZc1YXjF.mjs} +80 -9
- package/dist/route-url-CRDF-I0I.mjs +57 -0
- package/dist/route-url-C_YIH_zO.d.mts +37 -0
- package/dist/routes-stub.d.mts +8 -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 +1 -1
- 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 +8 -11
- package/dist/runtime/routing.mjs +52 -32
- 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 +3 -4
- 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-X2rDDRNa.mjs} +49 -35
- package/dist/{secret-3X0PxmuX.mjs → secret-CPq-B_vp.mjs} +17 -15
- 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-DsQKz6lt.mjs} +9 -3
- 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-uAAjlsiW.mjs +82 -0
- package/dist/{validator-BTOu0fB0.mjs → validator-CTfmzZYb.mjs} +2 -5
- package/dist/{version-metadata-D2vfMQzv.mjs → version-metadata-C8hLzQkv.mjs} +4 -6
- package/dist/{worker-conditions-AWFRcFxR.mjs → worker-conditions-CBZ0RYsZ.mjs} +1 -2
- package/dist/{wrangler-I-scB_1t.mjs → wrangler-DESSbN8L.mjs} +6 -8
- package/dist/wrangler-DUB3MGHV.mjs +1 -0
- package/dist/{wrapper-BBl1rC32.mjs → wrapper-C9SUxoj7.mjs} +17 -14
- package/dist/{ws-B3ClMVDh.d.mts → ws-Dmjg5NH2.d.mts} +3 -5
- package/dist/{yarn-pnp-DLbEFMT0.mjs → yarn-pnp-DgWbE7z5.mjs} +2 -3
- package/docs/guide/database.md +4 -4
- package/docs/guide/deployment.md +1 -1
- package/docs/guide/edge/headers.md +4 -6
- package/docs/guide/edge/redirects.md +4 -4
- package/docs/guide/edge/rewrites.md +1 -1
- package/docs/guide/edge/static-assets.md +0 -10
- package/docs/guide/email/domains.md +3 -1
- package/docs/guide/email/receiving.md +4 -4
- package/docs/guide/email/sending.md +43 -13
- package/docs/guide/pages-routing/actions-and-forms.md +26 -9
- package/docs/guide/pages-routing/islands.md +5 -5
- package/docs/guide/pages-routing/layouts.md +16 -2
- package/docs/guide/pages-routing/loaders.md +5 -5
- package/docs/guide/pages-routing/markdown.md +7 -7
- package/docs/guide/pages-routing/overview.md +137 -27
- package/docs/guide/platform/administration/connected-apps.md +4 -2
- package/docs/guide/platform/administration/email.md +6 -8
- package/docs/guide/platform/installation/credentials.md +12 -10
- package/docs/guide/platform/installation/maintenance.md +18 -21
- package/docs/guide/platform/installation/prerequisites.md +1 -1
- package/docs/guide/platform/installation/setup.md +23 -2
- 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 +7 -7
- package/docs/guide/ssg.md +3 -3
- package/docs/guide/type-safety.md +84 -1
- package/docs/guide/typed-fetch.md +1 -1
- package/docs/guide/websockets.md +1 -1
- package/docs/integrations/cloudflare.md +2 -2
- package/docs/integrations/frameworks/analog.md +1 -1
- package/docs/integrations/frameworks/astro.md +17 -12
- package/docs/integrations/frameworks/nuxt.md +1 -1
- package/docs/integrations/frameworks/overview.md +2 -2
- 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 +1 -1
- package/docs/reference/api/deploy.md +6 -6
- package/docs/reference/api/pages.md +109 -50
- package/docs/reference/api/plugin.md +4 -4
- package/docs/reference/api/resources.md +4 -1
- package/docs/reference/api/rewrites.md +24 -3
- package/docs/reference/api/types.md +45 -0
- package/docs/reference/api.md +2 -2
- package/docs/reference/cli/database.md +15 -9
- package/docs/reference/cli/email.md +4 -2
- package/docs/reference/cli/platform-installation.md +6 -3
- package/docs/reference/cli/project.md +2 -2
- package/docs/reference/cli/secrets.md +3 -1
- package/docs/reference/cli/setup.md +4 -4
- package/docs/reference/cli.md +1 -1
- package/docs/reference/config.md +12 -2
- package/package.json +36 -32
- package/sandbox.Dockerfile +1 -1
- package/schema.json +4 -0
- package/skills/void/SKILL.md +5 -0
- package/dist/cf-build-output-bd8Uwv1P.mjs +0 -1
- package/dist/client-BZb9j66F.mjs +0 -1
- package/dist/collect-BWhkgtAn.mjs +0 -1
- package/dist/deploy-CX94CmKa.mjs +0 -2
- package/dist/discover-D4TPKo57.mjs +0 -1
- package/dist/gen-BhWBT4iu.mjs +0 -1
- package/dist/headers--vaK_chu.mjs +0 -226
- package/dist/help-qOZr3wng.mjs +0 -1
- package/dist/login-BAPmYnb7.mjs +0 -1
- package/dist/migrate-BIYTPQE6.mjs +0 -1
- package/dist/operator-cmd-CjazwOyb.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-DU-tOpS5.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/validation-error-Dg9Recn1.mjs +0 -49
- package/dist/wrangler-UnwdISay.mjs +0 -1
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { a as join } from "./dist-DMYe8CZJ.mjs";
|
|
2
|
+
import { a as convertRewritesConfig, d as isProtocolRelative, f as parseHostPrefixedSource, i as convertRedirectsConfig, n as convertFallbacksConfig, o as countSplats, r as convertHeadersConfig, t as VALID_REDIRECT_STATUSES } from "./config-BITKQ3O6.mjs";
|
|
3
|
+
import { i as voidWarn } from "./log-D9hwSySP.mjs";
|
|
4
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
|
+
// src/asset-routing.ts
|
|
6
|
+
function isApiRoutePattern(pattern) {
|
|
7
|
+
return pattern === "/api" || pattern.startsWith("/api/");
|
|
8
|
+
}
|
|
9
|
+
function hasDocumentRoutes(routes) {
|
|
10
|
+
return routes.some((route) => !isApiRoutePattern(route.pattern));
|
|
11
|
+
}
|
|
12
|
+
function hasApiRoutes(routes) {
|
|
13
|
+
return routes.some((route) => isApiRoutePattern(route.pattern));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns true when browser document navigations must reach the worker before
|
|
17
|
+
* a static asset fallback can serve HTML.
|
|
18
|
+
*/
|
|
19
|
+
function workerOwnsHtmlRouting(inputs) {
|
|
20
|
+
return inputs.isSsr || inputs.hasPages || inputs.hasDocumentRoutes || inputs.hasMiddleware || inputs.hasWebSockets === true || inputs.liveEnabled === true;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns true when native edge rules must run in the worker before Cloudflare
|
|
24
|
+
* Static Assets can answer: native builds compile HTTPS redirects and header,
|
|
25
|
+
* redirect, rewrite and fallback rules into the worker.
|
|
26
|
+
*/
|
|
27
|
+
function edgeRulesNeedWorker(rules) {
|
|
28
|
+
return rules.alwaysUseHttps === true || (rules.headerRules?.length ?? 0) > 0 || (rules.redirectRules?.length ?? 0) > 0 || (rules.fallbackRules?.length ?? 0) > 0;
|
|
29
|
+
}
|
|
30
|
+
function resolveAssetConfig(inputs) {
|
|
31
|
+
return resolveAssetRoutingPolicy(inputs).assetConfig;
|
|
32
|
+
}
|
|
33
|
+
const VOID_INTERNAL_WORKER_FIRST = ["/__void", "/__void/*"];
|
|
34
|
+
function resolveAssetRoutingPolicy(inputs) {
|
|
35
|
+
const workerFirst = workerOwnsHtmlRouting(inputs);
|
|
36
|
+
const apiWorkerFirst = !workerFirst && (inputs.hasApiRoutes === true || inputs.authEnabled === true);
|
|
37
|
+
const assetConfig = workerFirst ? {
|
|
38
|
+
not_found_handling: "none",
|
|
39
|
+
run_worker_first: ["/**"]
|
|
40
|
+
} : apiWorkerFirst ? {
|
|
41
|
+
not_found_handling: "single-page-application",
|
|
42
|
+
run_worker_first: [
|
|
43
|
+
"/api",
|
|
44
|
+
"/api/*",
|
|
45
|
+
...VOID_INTERNAL_WORKER_FIRST
|
|
46
|
+
]
|
|
47
|
+
} : {
|
|
48
|
+
not_found_handling: "single-page-application",
|
|
49
|
+
run_worker_first: [...VOID_INTERNAL_WORKER_FIRST]
|
|
50
|
+
};
|
|
51
|
+
if (inputs.notFound !== void 0) assetConfig.not_found_handling = inputs.notFound;
|
|
52
|
+
return {
|
|
53
|
+
assetConfig,
|
|
54
|
+
apiWorkerFirst,
|
|
55
|
+
workerFirst,
|
|
56
|
+
workerSpaFallback: workerFirst && !inputs.isSsr && !inputs.hasPages && (inputs.notFound === void 0 || inputs.notFound === "single-page-application")
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// src/asset-worker-bypass.ts
|
|
60
|
+
/**
|
|
61
|
+
* Build-time decision for letting Cloudflare serve fingerprinted build files
|
|
62
|
+
* without starting the Worker. Native Cloudflare builds of apps with no global
|
|
63
|
+
* middleware and no edge rules gain nothing from running the Worker for those
|
|
64
|
+
* files: the Worker would only copy the asset response. Skipping it makes
|
|
65
|
+
* those requests free static requests and keeps auth and its session read off
|
|
66
|
+
* them. Each file gets its own negative `run_worker_first` rule, because a
|
|
67
|
+
* request matching a negative rule never reaches the Worker, even when the
|
|
68
|
+
* file is missing. Misses and other paths in the folder keep the Worker's
|
|
69
|
+
* not-found, SPA and page handling.
|
|
70
|
+
* `routing.alwaysUseHttps` alone does not block this: hashed files are only
|
|
71
|
+
* linked from pages the Worker has already moved to HTTPS.
|
|
72
|
+
*
|
|
73
|
+
* The asset layer does not know which files are fingerprinted, so a generated
|
|
74
|
+
* `_headers` file gives every bypassed chunk the immutable policy the Worker
|
|
75
|
+
* would have set.
|
|
76
|
+
*
|
|
77
|
+
* An `output: "static"` Pages build goes further when nothing site-wide must
|
|
78
|
+
* run first (auth, live, `routing.alwaysUseHttps`): every file answers first,
|
|
79
|
+
* and only paths with server code reach the Worker first. A page without a
|
|
80
|
+
* server module prerenders the HTML the Worker would render, so its file can
|
|
81
|
+
* answer. Hashed files keep their
|
|
82
|
+
* immutable policy from the generated `_headers`, or stay on the Worker when
|
|
83
|
+
* it cannot list them.
|
|
84
|
+
*/
|
|
85
|
+
const GENERATED_ASSET_HEADERS_MARKER = "# Generated by Void: immutable caching for fingerprinted build files. Do not edit.";
|
|
86
|
+
/** Cloudflare accepts at most 100 `run_worker_first` rules. */
|
|
87
|
+
const MAX_RUN_WORKER_FIRST_RULES = 100;
|
|
88
|
+
/** Cloudflare limits each `run_worker_first` rule to 100 characters. */
|
|
89
|
+
const MAX_RUN_WORKER_FIRST_RULE_LENGTH = 100;
|
|
90
|
+
/** Cloudflare accepts at most 100 `_headers` rules. */
|
|
91
|
+
const MAX_HEADERS_RULES = 100;
|
|
92
|
+
const AUTH_PATTERNS = ["/api/auth/*"];
|
|
93
|
+
/** Trim surrounding slashes; null when nothing is left. */
|
|
94
|
+
function normalizeAssetsDir(dir) {
|
|
95
|
+
let start = 0;
|
|
96
|
+
let end = dir.length;
|
|
97
|
+
while (start < end && dir[start] === "/") start++;
|
|
98
|
+
while (end > start && dir[end - 1] === "/") end--;
|
|
99
|
+
const trimmed = dir.slice(start, end);
|
|
100
|
+
return trimmed === "" || trimmed === "." ? null : trimmed;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Whether a route pattern can match a path below `/<dir>/`. Parameters,
|
|
104
|
+
* wildcards and patterns with more segments than the directory count as a
|
|
105
|
+
* match, so the answer errs towards keeping the Worker in front.
|
|
106
|
+
*/
|
|
107
|
+
function patternCanReachUnder(pattern, dir) {
|
|
108
|
+
const patternSegments = (pattern.startsWith("/") ? pattern.slice(1) : pattern).split("/");
|
|
109
|
+
const dirSegments = (dir.startsWith("/") ? dir.slice(1) : dir).split("/");
|
|
110
|
+
for (let i = 0; i < dirSegments.length; i++) {
|
|
111
|
+
const segment = patternSegments[i];
|
|
112
|
+
if (segment === void 0) return false;
|
|
113
|
+
if (segment.includes("*") || segment.includes("{")) return true;
|
|
114
|
+
if (segment.startsWith(":")) continue;
|
|
115
|
+
if (segment.toLowerCase() !== dirSegments[i].toLowerCase()) return false;
|
|
116
|
+
}
|
|
117
|
+
return patternSegments.length > dirSegments.length;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Characters that are plain text in both a `_headers` path and a
|
|
121
|
+
* `run_worker_first` rule. `*`, `:` and `!` have meaning there, and anything
|
|
122
|
+
* that needs URL encoding would not match the request path as written.
|
|
123
|
+
*/
|
|
124
|
+
function isPlainPath(path) {
|
|
125
|
+
for (const char of path) if (!(char >= "a" && char <= "z" || char >= "A" && char <= "Z" || char >= "0" && char <= "9" || char === "-" || char === "_" || char === "." || char === "~" || char === "/")) return false;
|
|
126
|
+
return path.split("/").every((segment) => segment !== "" && segment !== "." && segment !== "..");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Whether `run_worker_first` is the rule an earlier bypass wrote. A watch
|
|
130
|
+
* rebuild of only the client still finds it, because the Worker build that
|
|
131
|
+
* would write `['/**']` again did not run.
|
|
132
|
+
*/
|
|
133
|
+
function isAssetBypassRule(runWorkerFirst, assetsDir) {
|
|
134
|
+
const dir = normalizeAssetsDir(assetsDir);
|
|
135
|
+
return dir !== null && Array.isArray(runWorkerFirst) && runWorkerFirst.length > 1 && runWorkerFirst[0] === "/**" && runWorkerFirst.slice(1).every((rule) => typeof rule === "string" && rule.startsWith("!/" + dir + "/"));
|
|
136
|
+
}
|
|
137
|
+
/** The bypass this build can use, or null when any rule keeps the Worker in front. */
|
|
138
|
+
function resolveAssetWorkerBypass(facts) {
|
|
139
|
+
const { runWorkerFirst } = facts;
|
|
140
|
+
if (!(Array.isArray(runWorkerFirst) && runWorkerFirst.length === 1 && runWorkerFirst[0] === "/**") || facts.notFoundHandling !== "none" || facts.base !== "/" || facts.hasMiddleware || facts.headerRuleCount > 0 || facts.redirectRuleCount > 0 || facts.fallbackRuleCount > 0 || facts.publicEdgeFiles) return null;
|
|
141
|
+
const assetsDir = normalizeAssetsDir(facts.assetsDir);
|
|
142
|
+
const files = assetsDir === null ? [] : [...new Set(facts.immutableFiles)].filter((file) => file.startsWith(assetsDir + "/")).sort();
|
|
143
|
+
return resolveStaticPageBypass(facts, assetsDir, files) ?? resolveHashedFileBypass(facts, assetsDir, files);
|
|
144
|
+
}
|
|
145
|
+
/** One negative rule per hashed file, so only those files skip the Worker. */
|
|
146
|
+
function resolveHashedFileBypass(facts, assetsDir, files) {
|
|
147
|
+
if (!assetsDir || !isPlainPath(assetsDir)) return null;
|
|
148
|
+
if ([
|
|
149
|
+
...facts.patterns,
|
|
150
|
+
...VOID_INTERNAL_WORKER_FIRST,
|
|
151
|
+
...facts.authEnabled ? AUTH_PATTERNS : []
|
|
152
|
+
].some((pattern) => patternCanReachUnder(pattern, assetsDir))) return null;
|
|
153
|
+
const rules = ["/**", ...files.map((file) => "!/" + file)];
|
|
154
|
+
if (files.length === 0 || files.some((file) => !isPlainPath(file)) || !fitsRunWorkerFirstLimits(rules)) return null;
|
|
155
|
+
return {
|
|
156
|
+
runWorkerFirst: rules,
|
|
157
|
+
headers: renderGeneratedAssetHeaders(files)
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Void's own paths, then every server pattern widened to the static prefix
|
|
162
|
+
* before its first parameter: matching too much only keeps the Worker in
|
|
163
|
+
* front. A request that matches no file still reaches the Worker, since these
|
|
164
|
+
* builds use `not_found_handling: 'none'`. Hashed files get the generated
|
|
165
|
+
* `_headers`, or stay on the Worker when it cannot list them all. Null when
|
|
166
|
+
* site-wide behavior must run first or a pattern covers every path.
|
|
167
|
+
*/
|
|
168
|
+
function resolveStaticPageBypass(facts, assetsDir, files) {
|
|
169
|
+
if (!facts.serverPatterns || facts.authEnabled || facts.liveEnabled || facts.alwaysUseHttps) return null;
|
|
170
|
+
const rules = /* @__PURE__ */ new Set();
|
|
171
|
+
for (const pattern of facts.serverPatterns) {
|
|
172
|
+
const patternRules = workerPathRules(pattern);
|
|
173
|
+
if (patternRules === null) return null;
|
|
174
|
+
for (const rule of patternRules) rules.add(rule);
|
|
175
|
+
}
|
|
176
|
+
let headers = null;
|
|
177
|
+
if (files.length > MAX_HEADERS_RULES || !files.every(isPlainPath)) {
|
|
178
|
+
if (!assetsDir || !isPlainPath(assetsDir)) return null;
|
|
179
|
+
rules.add("/" + assetsDir + "/*");
|
|
180
|
+
} else if (files.length > 0) headers = renderGeneratedAssetHeaders(files);
|
|
181
|
+
const runWorkerFirst = [...VOID_INTERNAL_WORKER_FIRST, ...[...rules].sort()];
|
|
182
|
+
return fitsRunWorkerFirstLimits(runWorkerFirst) ? {
|
|
183
|
+
runWorkerFirst,
|
|
184
|
+
headers
|
|
185
|
+
} : null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* The rules covering every path `pattern` matches; null when that is every
|
|
189
|
+
* path. A trailing `*` also matches the path before it: `/api/*` matches `/api`.
|
|
190
|
+
*/
|
|
191
|
+
function workerPathRules(pattern) {
|
|
192
|
+
if (pattern === "/") return ["/"];
|
|
193
|
+
const segments = (pattern.startsWith("/") ? pattern.slice(1) : pattern).split("/");
|
|
194
|
+
const dynamic = segments.findIndex((segment) => segment.startsWith(":") || segment.includes("*") || segment.includes("{"));
|
|
195
|
+
if (dynamic === 0) return null;
|
|
196
|
+
const prefix = (dynamic === -1 ? segments : segments.slice(0, dynamic)).join("/");
|
|
197
|
+
if (!isPlainPath(prefix)) return null;
|
|
198
|
+
if (dynamic === -1) return ["/" + prefix];
|
|
199
|
+
const rule = "/" + prefix + "/*";
|
|
200
|
+
return dynamic === segments.length - 1 && segments[dynamic] === "*" ? ["/" + prefix, rule] : [rule];
|
|
201
|
+
}
|
|
202
|
+
function fitsRunWorkerFirstLimits(rules) {
|
|
203
|
+
return rules.length <= MAX_RUN_WORKER_FIRST_RULES && rules.every((rule) => rule.length <= MAX_RUN_WORKER_FIRST_RULE_LENGTH);
|
|
204
|
+
}
|
|
205
|
+
/** One immutable rule per file after the marker line. */
|
|
206
|
+
function renderGeneratedAssetHeaders(files) {
|
|
207
|
+
const lines = [GENERATED_ASSET_HEADERS_MARKER];
|
|
208
|
+
for (const file of files) lines.push("/" + file, " Cache-Control: public, max-age=31536000, immutable");
|
|
209
|
+
return lines.join("\n") + "\n";
|
|
210
|
+
}
|
|
211
|
+
/** Whether a `_headers` file is the one Void generated. */
|
|
212
|
+
function isGeneratedAssetHeaders(text) {
|
|
213
|
+
const newline = text.indexOf("\n");
|
|
214
|
+
let firstLine = newline === -1 ? text : text.slice(0, newline);
|
|
215
|
+
if (firstLine.endsWith("\r")) firstLine = firstLine.slice(0, -1);
|
|
216
|
+
return firstLine === GENERATED_ASSET_HEADERS_MARKER;
|
|
217
|
+
}
|
|
218
|
+
// src/cli/headers.ts
|
|
219
|
+
/**
|
|
220
|
+
* Parse a Cloudflare/Netlify `_headers` file into HeaderRule[].
|
|
221
|
+
*
|
|
222
|
+
* Format:
|
|
223
|
+
* - Non-indented lines = path pattern (starts a new block)
|
|
224
|
+
* - Indented lines = `Header-Name: value` (split on first `:`)
|
|
225
|
+
* - Lines starting with `#` are comments
|
|
226
|
+
* - `! Header-Name` unset directives are skipped (last-match-wins handles this)
|
|
227
|
+
*
|
|
228
|
+
* Output is sorted by pattern length ascending (shortest first) so that
|
|
229
|
+
* more-specific patterns come last — matching dispatch's last-match-wins semantics.
|
|
230
|
+
*
|
|
231
|
+
* Returns `undefined` if the file doesn't exist or yields no valid rules.
|
|
232
|
+
*/
|
|
233
|
+
function parseHeadersFile(dir) {
|
|
234
|
+
const filePath = join(dir, "_headers");
|
|
235
|
+
if (!existsSync(filePath)) return;
|
|
236
|
+
const content = readFileSync(filePath, "utf-8");
|
|
237
|
+
const rules = [];
|
|
238
|
+
let current = null;
|
|
239
|
+
for (const line of content.split("\n")) {
|
|
240
|
+
const trimmed = line.trimEnd();
|
|
241
|
+
if (trimmed === "" || trimmed.startsWith("#")) continue;
|
|
242
|
+
if (line[0] === " " || line[0] === " ") {
|
|
243
|
+
if (!current) continue;
|
|
244
|
+
const stripped = trimmed.trimStart();
|
|
245
|
+
if (stripped.startsWith("!")) continue;
|
|
246
|
+
const colonIdx = stripped.indexOf(":");
|
|
247
|
+
if (colonIdx === -1) continue;
|
|
248
|
+
const name = stripped.slice(0, colonIdx).trim();
|
|
249
|
+
const value = stripped.slice(colonIdx + 1).trim();
|
|
250
|
+
if (name) current.headers.push([name, value]);
|
|
251
|
+
} else {
|
|
252
|
+
if (current && current.headers.length > 0) rules.push(current);
|
|
253
|
+
current = {
|
|
254
|
+
pattern: trimmed,
|
|
255
|
+
headers: []
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (current && current.headers.length > 0) rules.push(current);
|
|
260
|
+
if (rules.length === 0) return;
|
|
261
|
+
rules.sort((a, b) => a.pattern.length - b.pattern.length);
|
|
262
|
+
return rules;
|
|
263
|
+
}
|
|
264
|
+
/** The `_headers` text in `dir` when Void generated it, otherwise undefined. */
|
|
265
|
+
function readGeneratedAssetHeadersFile(dir) {
|
|
266
|
+
const filePath = join(dir, "_headers");
|
|
267
|
+
if (!existsSync(filePath)) return;
|
|
268
|
+
const content = readFileSync(filePath, "utf-8");
|
|
269
|
+
return isGeneratedAssetHeaders(content) ? content : void 0;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Parse a `_redirects` file: `source destination [status]` per line (status
|
|
273
|
+
* defaults to 302, `#` starts a comment). Keeps 3xx redirects and 200 rewrites.
|
|
274
|
+
*
|
|
275
|
+
* A `!` suffix on 200 sets `force`, so the rewrite applies even when a static
|
|
276
|
+
* asset matches. On a 3xx it is a no-op, stripped and counted in
|
|
277
|
+
* `redundantForceOn3xx`.
|
|
278
|
+
*
|
|
279
|
+
* Returns `undefined` when the file doesn't exist or yields no valid rules.
|
|
280
|
+
*/
|
|
281
|
+
function parseRedirectsFile(dir) {
|
|
282
|
+
const filePath = join(dir, "_redirects");
|
|
283
|
+
if (!existsSync(filePath)) return;
|
|
284
|
+
const content = readFileSync(filePath, "utf-8");
|
|
285
|
+
const rules = [];
|
|
286
|
+
let redundantForceOn3xx = 0;
|
|
287
|
+
const rawLines = content.split("\n");
|
|
288
|
+
for (let i = 0; i < rawLines.length; i++) {
|
|
289
|
+
const lineNumber = i + 1;
|
|
290
|
+
const trimmed = rawLines[i].trim();
|
|
291
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
292
|
+
const parts = trimmed.split(/\s+/);
|
|
293
|
+
if (parts.length < 2) continue;
|
|
294
|
+
const origin = `_redirects:${lineNumber}`;
|
|
295
|
+
const [rawSource, destination, statusStr] = parts;
|
|
296
|
+
const parsedSource = parseHostPrefixedSource(rawSource);
|
|
297
|
+
if ("error" in parsedSource) {
|
|
298
|
+
voidWarn(`Skipping _redirects entry "${rawSource} ${destination}${statusStr ? ` ${statusStr}` : ""}" (line ${lineNumber}): source ${parsedSource.error}.`);
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const { host, path: source } = parsedSource;
|
|
302
|
+
if (countSplats(source) > 1) {
|
|
303
|
+
voidWarn(`Skipping _redirects entry "${rawSource} ${destination}${statusStr ? ` ${statusStr}` : ""}" (line ${lineNumber}): source must contain at most one "*" wildcard (captured as :splat).`);
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
let status;
|
|
307
|
+
let force = false;
|
|
308
|
+
if (statusStr) {
|
|
309
|
+
if (statusStr.endsWith("!")) {
|
|
310
|
+
const numericPart = statusStr.slice(0, -1);
|
|
311
|
+
status = parseInt(numericPart, 10);
|
|
312
|
+
if (status === 200) force = true;
|
|
313
|
+
else if (status >= 300 && status < 400) redundantForceOn3xx++;
|
|
314
|
+
} else status = parseInt(statusStr, 10);
|
|
315
|
+
} else status = 302;
|
|
316
|
+
if (status === 200) {
|
|
317
|
+
if (!destination.startsWith("/")) {
|
|
318
|
+
voidWarn(`Skipping _redirects rewrite "${rawSource} ${destination} ${force ? "200!" : "200"}": destination must start with "/" (only internal paths are supported).`);
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (isProtocolRelative(destination)) {
|
|
322
|
+
voidWarn(`Skipping _redirects rewrite "${rawSource} ${destination} ${force ? "200!" : "200"}": destination must not start with "//" (protocol-relative URLs parse as cross-origin; only internal paths are supported).`);
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (destination.includes("?")) {
|
|
326
|
+
voidWarn(`Skipping _redirects rewrite "${rawSource} ${destination} ${force ? "200!" : "200"}": destination must not contain "?" (query strings are not supported in rewrite destinations; the incoming request's query is preserved automatically).`);
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
rules.push({
|
|
330
|
+
source,
|
|
331
|
+
destination,
|
|
332
|
+
status,
|
|
333
|
+
force,
|
|
334
|
+
origin,
|
|
335
|
+
...host && { host }
|
|
336
|
+
});
|
|
337
|
+
} else if (status >= 300 && status < 400) {
|
|
338
|
+
if (!VALID_REDIRECT_STATUSES.has(status)) {
|
|
339
|
+
voidWarn(`Skipping _redirects entry "${rawSource} ${destination} ${statusStr}" (line ${lineNumber}): redirect status must be 301, 302, 303, 307, or 308.`);
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
rules.push({
|
|
343
|
+
source,
|
|
344
|
+
destination,
|
|
345
|
+
status,
|
|
346
|
+
origin,
|
|
347
|
+
...host && { host }
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (rules.length === 0 && redundantForceOn3xx === 0) return;
|
|
352
|
+
return {
|
|
353
|
+
rules,
|
|
354
|
+
redundantForceOn3xx
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Split `_redirects` rules into rules that always apply and fallbacks: unforced
|
|
359
|
+
* 200 rewrites, which apply only when no static asset matches.
|
|
360
|
+
*/
|
|
361
|
+
function splitRedirectRulesByForce(rules) {
|
|
362
|
+
const always = [];
|
|
363
|
+
const fallbacks = [];
|
|
364
|
+
if (!rules) return {
|
|
365
|
+
always,
|
|
366
|
+
fallbacks
|
|
367
|
+
};
|
|
368
|
+
for (const rule of rules) if (rule.status === 200 && rule.force !== true) fallbacks.push(rule);
|
|
369
|
+
else always.push(rule);
|
|
370
|
+
return {
|
|
371
|
+
always,
|
|
372
|
+
fallbacks
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Merge `_redirects` and `_headers` in `dir` with `routing` from void.config.ts.
|
|
377
|
+
* Deploy and dev share it so both build the same rule tables; callers lint them.
|
|
378
|
+
*/
|
|
379
|
+
function mergeRoutingRules(opts) {
|
|
380
|
+
const { dir, routing } = opts;
|
|
381
|
+
const fileDir = dir !== null && existsSync(dir) ? dir : null;
|
|
382
|
+
const fileHeaders = fileDir !== null ? parseHeadersFile(fileDir) : void 0;
|
|
383
|
+
const fileParsed = fileDir !== null ? parseRedirectsFile(fileDir) : void 0;
|
|
384
|
+
const { always: fileAlways, fallbacks: fileFallbacks } = splitRedirectRulesByForce(fileParsed?.rules);
|
|
385
|
+
const cfgHeaders = convertHeadersConfig(routing?.headers);
|
|
386
|
+
const cfgRedirects = convertRedirectsConfig(routing?.redirects);
|
|
387
|
+
const cfgRewrites = convertRewritesConfig(routing?.rewrites);
|
|
388
|
+
const cfgFallbacks = convertFallbacksConfig(routing?.fallbacks);
|
|
389
|
+
const headerRules = [...fileHeaders ?? [], ...cfgHeaders ?? []];
|
|
390
|
+
const redirectRules = [
|
|
391
|
+
...cfgRedirects ?? [],
|
|
392
|
+
...cfgRewrites ?? [],
|
|
393
|
+
...fileAlways
|
|
394
|
+
];
|
|
395
|
+
const mergedFallbacks = [...cfgFallbacks ?? [], ...fileFallbacks];
|
|
396
|
+
return {
|
|
397
|
+
headerRules,
|
|
398
|
+
redirectRules,
|
|
399
|
+
fallbackRules: mergedFallbacks.length > 0 ? mergedFallbacks : void 0,
|
|
400
|
+
redundantForceOn3xx: fileParsed?.redundantForceOn3xx ?? 0
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Lint each phase on its own: only duplicates within a phase shadow each other,
|
|
405
|
+
* so a redirect and a fallback with the same source are fine.
|
|
406
|
+
*/
|
|
407
|
+
function lintRoutingPhases(rules) {
|
|
408
|
+
lintDuplicateSources(rules.redirectRules, "redirects/rewrites (pre-asset)");
|
|
409
|
+
lintDuplicateSources(rules.fallbackRules, "fallbacks (post-asset)");
|
|
410
|
+
lintDestinationSplats(rules.redirectRules, "redirects/rewrites (pre-asset)");
|
|
411
|
+
lintDestinationSplats(rules.fallbackRules, "fallbacks (post-asset)");
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Warn about a literal `*` in a destination. Destinations substitute only
|
|
415
|
+
* `:name` params such as `:splat`, so a `*` passes through unchanged.
|
|
416
|
+
*/
|
|
417
|
+
function lintDestinationSplats(rules, phaseName) {
|
|
418
|
+
if (!rules || rules.length === 0) return;
|
|
419
|
+
const affected = rules.filter((r) => r.destination.includes("*"));
|
|
420
|
+
if (affected.length === 0) return;
|
|
421
|
+
const lines = affected.map((r) => ` ${r.source} → ${r.destination} (${r.origin ?? "<unknown>"})`);
|
|
422
|
+
voidWarn(`destinations in ${phaseName} contain a literal "*" — splat tokens are not substituted in destinations; use ":splat" (or other named params) or rewrite the destination:\n${lines.join("\n")}`);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Warn when one phase repeats an exact `source`: first match wins, so the later
|
|
426
|
+
* rule never applies. Phases run separately, so callers lint each one.
|
|
427
|
+
*/
|
|
428
|
+
function lintDuplicateSources(rules, phaseName) {
|
|
429
|
+
if (!rules || rules.length < 2) return;
|
|
430
|
+
const bySource = /* @__PURE__ */ new Map();
|
|
431
|
+
for (const rule of rules) {
|
|
432
|
+
const existing = bySource.get(rule.source);
|
|
433
|
+
if (existing) existing.push(rule);
|
|
434
|
+
else bySource.set(rule.source, [rule]);
|
|
435
|
+
}
|
|
436
|
+
const lines = [];
|
|
437
|
+
for (const [source, occurrences] of bySource) {
|
|
438
|
+
if (occurrences.length < 2) continue;
|
|
439
|
+
const origins = occurrences.map((r) => r.origin ?? "<unknown>").join(", ");
|
|
440
|
+
lines.push(` ${source} — ${origins}`);
|
|
441
|
+
}
|
|
442
|
+
if (lines.length === 0) return;
|
|
443
|
+
voidWarn(`duplicate rule sources detected in ${phaseName} (first match wins — the earlier entry takes effect):\n${lines.join("\n")}`);
|
|
444
|
+
}
|
|
445
|
+
export { isAssetBypassRule as a, VOID_INTERNAL_WORKER_FIRST as c, hasDocumentRoutes as d, resolveAssetConfig as f, readGeneratedAssetHeadersFile as i, edgeRulesNeedWorker as l, mergeRoutingRules as n, isGeneratedAssetHeaders as o, resolveAssetRoutingPolicy as p, parseRedirectsFile as r, resolveAssetWorkerBypass as s, lintRoutingPhases as t, hasApiRoutes as u };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { H as outro } from "./dist-
|
|
2
|
-
import { n as getOwnVersion } from "./agents-
|
|
3
|
-
import { d as helpLine, f as import_picocolors, g as sectionTitle, l as formatUrl, p as note, t as categoryTitle } from "./output-
|
|
4
|
-
import { n as operatorGroups, t as operatorCommands } from "./operator-args-
|
|
5
|
-
|
|
1
|
+
import { H as outro } from "./dist-D23AAMxT.mjs";
|
|
2
|
+
import { n as getOwnVersion } from "./agents-DRo8gzni.mjs";
|
|
3
|
+
import { d as helpLine, f as import_picocolors, g as sectionTitle, l as formatUrl, p as note, t as categoryTitle } from "./output-BCdLioKP.mjs";
|
|
4
|
+
import { n as operatorGroups, t as operatorCommands } from "./operator-args-D79WQP70.mjs";
|
|
5
|
+
// src/cli/ascii.ts
|
|
6
6
|
const asciiArts = [
|
|
7
7
|
`
|
|
8
8
|
▄ ▄ ▄▄▄ ▄ ▐▌
|
|
@@ -23,8 +23,7 @@ dP .dP .d8888b. dP .d888b88
|
|
|
23
23
|
| |/ / /_/ / / /_/ /
|
|
24
24
|
|___/\\____/_/\\__,_/`
|
|
25
25
|
];
|
|
26
|
-
|
|
27
|
-
//#region src/cli/help.ts
|
|
26
|
+
// src/cli/help.ts
|
|
28
27
|
function operatorHelpTree() {
|
|
29
28
|
return Object.fromEntries(operatorGroups.map((group) => {
|
|
30
29
|
const commands = operatorCommands.filter((entry) => entry.group === group);
|
|
@@ -166,11 +165,11 @@ const HELP_TREE = {
|
|
|
166
165
|
]
|
|
167
166
|
},
|
|
168
167
|
migrate: {
|
|
169
|
-
summary: "
|
|
168
|
+
summary: "Update project configuration.",
|
|
170
169
|
usage: ["void migrate"],
|
|
171
170
|
examples: [{
|
|
172
171
|
command: "void migrate",
|
|
173
|
-
description: "
|
|
172
|
+
description: "Update project configuration"
|
|
174
173
|
}]
|
|
175
174
|
},
|
|
176
175
|
deploy: {
|
|
@@ -689,6 +688,10 @@ const HELP_TREE = {
|
|
|
689
688
|
command: "--runtime <path>",
|
|
690
689
|
description: "Deploy an integrity-checked runtime directory instead of the package"
|
|
691
690
|
},
|
|
691
|
+
{
|
|
692
|
+
command: "--runtime-logs <full|minimal>",
|
|
693
|
+
description: "minimal keeps request URLs, console and exception messages out of runtime logs"
|
|
694
|
+
},
|
|
692
695
|
{
|
|
693
696
|
command: "--yes",
|
|
694
697
|
description: "Acknowledge changes without an interactive prompt"
|
|
@@ -1045,7 +1048,17 @@ const HELP_TREE = {
|
|
|
1045
1048
|
list: withProjectOption("List project secrets.", "void secret list [options]"),
|
|
1046
1049
|
put: withProjectOption("Set a project secret.", "void secret put <name> [options]"),
|
|
1047
1050
|
delete: withProjectOption("Delete a project secret.", "void secret delete <name> [options]"),
|
|
1048
|
-
sync:
|
|
1051
|
+
sync: {
|
|
1052
|
+
summary: "Sync secrets from a dotenv file.",
|
|
1053
|
+
usage: ["void secret sync <file> [options]"],
|
|
1054
|
+
options: [{
|
|
1055
|
+
command: "--project <name>",
|
|
1056
|
+
description: "Project name override"
|
|
1057
|
+
}, {
|
|
1058
|
+
command: "--yes",
|
|
1059
|
+
description: "Skip confirmation (required in CI and non-interactive shells)"
|
|
1060
|
+
}]
|
|
1061
|
+
}
|
|
1049
1062
|
}
|
|
1050
1063
|
},
|
|
1051
1064
|
domain: {
|
|
@@ -1771,7 +1784,7 @@ function withProjectOption(summary, usage) {
|
|
|
1771
1784
|
function lifecycleHelp(command, summary) {
|
|
1772
1785
|
return {
|
|
1773
1786
|
summary,
|
|
1774
|
-
usage: [`void platform ${command} [id] [--plan]${command === "disable" ? "" : " [--runtime <path>]"}${command === "upgrade" || command === "repair" ? " [--dashboard-url <origin>] [--custom-domains]" : ""}${command === "repair" ? " [--auth-config <path>]" : ""} [--yes]`],
|
|
1787
|
+
usage: [`void platform ${command} [id] [--plan]${command === "disable" ? "" : " [--runtime <path>]"}${command === "upgrade" || command === "repair" ? " [--dashboard-url <origin>] [--custom-domains]" : ""}${command === "upgrade" ? " [--runtime-logs <full|minimal>]" : ""}${command === "repair" ? " [--auth-config <path>]" : ""} [--yes]`],
|
|
1775
1788
|
options: [
|
|
1776
1789
|
{
|
|
1777
1790
|
command: "--plan",
|
|
@@ -1788,6 +1801,10 @@ function lifecycleHelp(command, summary) {
|
|
|
1788
1801
|
command: "--custom-domains",
|
|
1789
1802
|
description: "Turn on project custom domains; omission keeps the saved setting"
|
|
1790
1803
|
}] : [],
|
|
1804
|
+
...command === "upgrade" ? [{
|
|
1805
|
+
command: "--runtime-logs <full|minimal>",
|
|
1806
|
+
description: "minimal keeps request URLs, console and exception messages out of runtime logs; omission keeps the saved setting"
|
|
1807
|
+
}] : [],
|
|
1791
1808
|
...command === "repair" ? [{
|
|
1792
1809
|
command: "--auth-config <path>",
|
|
1793
1810
|
description: "While first administrator setup is pending, replace its login settings (install file format)"
|
|
@@ -1945,5 +1962,4 @@ function getKnownHelpPrefix(args) {
|
|
|
1945
1962
|
function formatHelpPath(path) {
|
|
1946
1963
|
return path.length === 0 ? "help" : path.join(" ");
|
|
1947
1964
|
}
|
|
1948
|
-
//#endregion
|
|
1949
1965
|
export { printVoidHeader as i, printGlobalHelp as n, printHelpPage as r, getHelpPath as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { r as printHelpPage } from "./help-1OCFDsRr.mjs";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { EmailWireAction } from "@void/platform/email-protocol";
|
|
2
2
|
import { Email } from "postal-mime";
|
|
3
|
-
//#region src/runtime/email/types.d.ts
|
|
4
3
|
/**
|
|
5
4
|
* Public types for the void/email module.
|
|
6
5
|
*
|
|
@@ -34,8 +33,21 @@ interface SendEmailOptions {
|
|
|
34
33
|
replyTo?: Address;
|
|
35
34
|
cc?: Address | Array<Address>;
|
|
36
35
|
bcc?: Address | Array<Address>;
|
|
36
|
+
/** Custom headers. Reserved names such as `From`, `Date` and the threading headers are ignored. */
|
|
37
37
|
headers?: Record<string, string>;
|
|
38
38
|
attachments?: Array<Attachment>;
|
|
39
|
+
/**
|
|
40
|
+
* Threads this email under an earlier message, such as a reply sent from a
|
|
41
|
+
* queue job after the inbound handler returned. `inReplyTo` is the parent's
|
|
42
|
+
* `Message-ID`. `references` lists the thread's ids, oldest first, ending
|
|
43
|
+
* with the parent; it defaults to `inReplyTo`. An id that cannot be sent,
|
|
44
|
+
* such as one with a control character, is left out. If `references`
|
|
45
|
+
* cannot be sent, it falls back to `inReplyTo`. The email still sends.
|
|
46
|
+
*/
|
|
47
|
+
threading?: {
|
|
48
|
+
inReplyTo?: string;
|
|
49
|
+
references?: string;
|
|
50
|
+
};
|
|
39
51
|
/**
|
|
40
52
|
* Deduplicates a platform send for 30 days. Reuse the same key and message
|
|
41
53
|
* when checking an uncertain attempt; a changed message is a conflict.
|
|
@@ -146,11 +158,9 @@ interface NormalizedEmail {
|
|
|
146
158
|
headers: Record<string, string>;
|
|
147
159
|
attachments: Array<NormalizedAttachment>;
|
|
148
160
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* always dropped (they're in `RESERVED_HEADERS`); this field is the
|
|
153
|
-
* supported channel for the trusted reply path.
|
|
161
|
+
* `In-Reply-To` / `References` after the ids were checked, from the
|
|
162
|
+
* `threading` option or `replyEmail`. User-supplied `headers` with these
|
|
163
|
+
* names are always dropped (they're in `RESERVED_HEADERS`).
|
|
154
164
|
*/
|
|
155
165
|
threading?: {
|
|
156
166
|
inReplyTo?: string;
|
|
@@ -164,8 +174,6 @@ interface NormalizedAttachment {
|
|
|
164
174
|
contentId?: string;
|
|
165
175
|
disposition: "attachment" | "inline";
|
|
166
176
|
}
|
|
167
|
-
//#endregion
|
|
168
|
-
//#region src/runtime/email/inbound.d.ts
|
|
169
177
|
interface EmailHandlerInfo {
|
|
170
178
|
/**
|
|
171
179
|
* Captured params from dynamic / tagged route segments. For example, a
|
|
@@ -300,5 +308,4 @@ declare function isForwardableEmailMessage(value: unknown): value is Forwardable
|
|
|
300
308
|
* `EmailMessage`, so `cloudflare:email` loads only when one was recorded.
|
|
301
309
|
*/
|
|
302
310
|
declare function enactEmailActions(message: ForwardableEmailMessage, actions: ReadonlyArray<EmailAction>): Promise<void>;
|
|
303
|
-
//#endregion
|
|
304
311
|
export { SendEmailOptions as C, SendEmailErrorCode as S, SendEmailResult as T, Attachment as _, MessageProxy as a, SendEmailDelivery as b, ParsedEmail as c, defineEmail as d, enactEmailActions as f, Address as g, replyEmail as h, EmailHandlerInfo as i, ReplyEmailOptions as l, parseEmail as m, EmailEnvelope as n, ParseEmailError as o, isForwardableEmailMessage as p, EmailHandler as r, ParseEmailErrorCode as s, EmailAction as t, createMessageProxy as u, EmailDeliveryState as v, SendEmailRecipientResult as w, SendEmailError as x, NormalizedEmail as y };
|