void 0.27.0 → 0.28.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 +3 -1
- package/dist/{account-cmd-l-FM7Ioq.mjs → account-cmd-Ci00cncT.mjs} +5 -5
- package/dist/{agents-B_pX_HmQ.mjs → agents-CuNtT0D_.mjs} +5 -2
- package/dist/{application-analysis-DKy02UY0.mjs → application-analysis-D72ZQfMZ.mjs} +118 -135
- package/dist/{application-routing-DQyUh_5S.mjs → application-routing-Dy589Vgn.mjs} +1 -2
- package/dist/atomic-write-Dq6R0BPN.mjs +18 -0
- package/dist/{auth-Dn2vw-SG.mjs → auth-B6iOCjKI.mjs} +23 -56
- package/dist/{auth-link-vz9Z2kmG.mjs → auth-link-DWr6Afao.mjs} +10 -10
- package/dist/{auth-migrations-BwHgeEsD.mjs → auth-migrations-Cgs0k6lS.mjs} +28 -5
- package/dist/{auth-router-DvsCUVw4.mjs → auth-router-DP14wVkZ.mjs} +4 -4
- package/dist/auth-wn6F8dB8.mjs +2 -0
- package/dist/base64-DVrOndmI.mjs +16 -0
- package/dist/{better-auth-shared-CPvWD3nG.d.mts → better-auth-shared-B74NJIus.d.mts} +8 -13
- package/dist/{better-auth-shared-DPpj8zxc.mjs → better-auth-shared-CMXlZG7W.mjs} +56 -68
- package/dist/{build-cmd-D6we0VjO.mjs → build-cmd-Cr3FJxv0.mjs} +5 -5
- package/dist/{cache-CZRdzKx1.mjs → cache-D0Tt28cn.mjs} +5 -5
- package/dist/{cancel-deploy-CQ3NnMvf.mjs → cancel-deploy-CJKvk7AN.mjs} +4 -4
- package/dist/{cf-access-TWNzXltp.mjs → cf-access-BM9G0lhO.mjs} +4 -3
- package/dist/{cf-access-BcIBSKqG.mjs → cf-access-CWP4avfP.mjs} +3 -7
- package/dist/cf-build-output-2u583yJK.mjs +2 -0
- package/dist/{cf-build-output-DjvB_872.mjs → cf-build-output-Bc8i3dzE.mjs} +2 -2
- package/dist/cf-user-agent-ChjQp2MU.mjs +33 -0
- package/dist/cli/cli.mjs +198 -311
- package/dist/cli/cloudflare-operation-process.mjs +41 -15
- package/dist/cli/env-schema-probe.d.mts +5 -43
- package/dist/cli/env-schema-probe.mjs +14 -80
- package/dist/client-C1BjRn3g.mjs +2 -0
- package/dist/{client-DlDJuY0s.mjs → client-DM9Kcf4e.mjs} +161 -415
- package/dist/{cloudflare-auth-CuxfF6OA.mjs → cloudflare-auth-CqFBDo52.mjs} +12 -39
- package/dist/{cloudflare-cmd-lHqNlJGW.mjs → cloudflare-cmd-CTrn-lXJ.mjs} +6 -5
- package/dist/{cloudflare-config-BmhBv3HV.mjs → cloudflare-config-DV60XFFK.mjs} +16 -28
- package/dist/{cloudflare-connect-2G3rL2rP.mjs → cloudflare-connect-BosmCNlq.mjs} +3 -3
- package/dist/{cloudflare-operations-CwI1bChl.mjs → cloudflare-operations-BKdSfNBN.mjs} +26 -34
- package/dist/{cloudflare-operations-BlYLlowZ.mjs → cloudflare-operations-Ds-lX3Ts.mjs} +1 -1
- package/dist/{cloudflare-process-2-TfIEzB.mjs → cloudflare-process-CeDWJRhj.mjs} +12 -7
- package/dist/collect-NUlJMpLY.mjs +2 -0
- package/dist/{collect-DiTn9yr6.mjs → collect-xjffdCdk.mjs} +1 -1
- package/dist/{config-CSa15FvD.d.mts → config-7qoq2p9v.d.mts} +2 -2
- package/dist/{config-CLYAosnQ.mjs → config-BEm9vRvS.mjs} +11 -5
- package/dist/{config-DiowPT80.mjs → config-Bx_1SpnO.mjs} +87 -177
- package/dist/config-CNnrSMYm.mjs +2 -0
- package/dist/{config-DPByhVck.mjs → config-D0GY5ItR.mjs} +1 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{connect-BfPBHHm-.mjs → connect-nukQSoEO.mjs} +8 -8
- package/dist/{create-project-BdXEFKal.mjs → create-project-D4APeBwX.mjs} +7 -7
- package/dist/{create-project-qFDC45zg.mjs → create-project-DL7YXpjj.mjs} +1 -1
- package/dist/{db-Xs80hcaA.mjs → db-27RztQLy.mjs} +173 -263
- package/dist/{delete-d2vuou3j.mjs → delete-BbsZFZIw.mjs} +5 -5
- package/dist/deploy-B06EQq4t.mjs +6009 -0
- package/dist/deploy-Db2ALnQP.mjs +3 -0
- package/dist/deploy-managed-static-CGswbcay.mjs +2277 -0
- package/dist/deploy-transport-BiicfoQW.mjs +180 -0
- package/dist/deploy.d.mts +10 -0
- package/dist/deploy.mjs +82 -0
- package/dist/dev-inbox-Rd6j_8vM.mjs +217 -0
- package/dist/discover-CTUiSsfG.mjs +2 -0
- package/dist/{discover-CkCYv9T_.mjs → discover-D2PGT63u.mjs} +2 -2
- package/dist/{dist-BVqXeR_h.mjs → dist-ipQi0Q8y.mjs} +2 -3
- package/dist/{domain-BsDUBAvt.mjs → domain-Bfq9n03H.mjs} +7 -22
- package/dist/{dotenv-BfU6eqFt.mjs → dotenv-CNazY3-w.mjs} +4 -16
- package/dist/{email-d_Aux1vM.mjs → email-BcjSyAL0.mjs} +4 -20
- package/dist/{email-_lGAHOhp.mjs → email-DIwaQU4P.mjs} +99 -191
- package/dist/email-cloudflare-CH053RxK.mjs +1096 -0
- package/dist/email-protocol-D9nTvhCp.mjs +82 -0
- package/dist/{entry-CMAkqBmU.mjs → entry-ehmBvs5w.mjs} +2 -2
- package/dist/{env-BxocywBB.mjs → env-BJjULvL0.mjs} +2 -2
- package/dist/{env-DMA3cXZt.mjs → env-BhdWMrNy.mjs} +2 -13
- package/dist/{env-C74QepDE.mjs → env-C6ipBLp3.mjs} +8 -8
- package/dist/{env-public-DR7ZM6d-.d.mts → env-public-CCdykygU.d.mts} +6 -23
- package/dist/{env-raw-jZpP5n47.mjs → env-raw-Cklzcde3.mjs} +3 -20
- package/dist/{env-types-CwXgeMgL.mjs → env-types-DS2_y4X8.mjs} +2 -2
- package/dist/{env-validation-CrVNjsPm.mjs → env-validation-CTn-HhG1.mjs} +1 -1
- package/dist/env-validation-cE0zcmzO.mjs +486 -0
- package/dist/{gen-DtkQhvQg.mjs → gen-CnN1Xidx.mjs} +131 -253
- package/dist/gen-F8pSZnhc.mjs +2 -0
- package/dist/{generate-GDbL7sUr.mjs → generate-Dat0UTry.mjs} +38 -4
- package/dist/generate-Rii9klHB.mjs +2 -0
- package/dist/generated-wrangler-config-DeWj5F9Y.mjs +18 -0
- package/dist/{github-cmd-DaDdBbSS.mjs → github-cmd-BdkU4Nhe.mjs} +27 -71
- package/dist/{handler-BHAn2fZJ.mjs → handler-BZ1t7-Rv.mjs} +2 -2
- package/dist/{handler-CNAwjRcW.d.mts → handler-_PqY82xe.d.mts} +1 -1
- package/dist/{headers-DlfR78Nu.mjs → headers-Di1FsD3e.mjs} +26 -81
- package/dist/{help-0bTe_lID.mjs → help-Bug7pyK_.mjs} +18 -10
- package/dist/help-s9q7LTcu.mjs +2 -0
- package/dist/{inbound-PfQDLXc5.mjs → inbound-DmkTQeWp.mjs} +71 -222
- package/dist/{inbound-CH5Mksyy.d.mts → inbound-brj2-TM5.d.mts} +19 -58
- package/dist/index.d.mts +2 -18
- package/dist/index.mjs +200 -496
- package/dist/{info-PYWwkWyt.mjs → info-CujPwtMe.mjs} +5 -5
- package/dist/{init-DaBGmaXC.mjs → init-ZWOJvc-Z.mjs} +179 -388
- package/dist/isr-config-DPjXM8J2.mjs +194 -0
- package/dist/{link-C6fjafep.mjs → link-UEc7bnF4.mjs} +8 -8
- package/dist/{list-BTFBlqKl.mjs → list-CuWeOnzk.mjs} +6 -17
- package/dist/{live-CgQuTpqD.mjs → live-BxLX-JqJ.mjs} +19 -17
- package/dist/{live-Du8jXwOW.d.mts → live-DJONVlQK.d.mts} +1 -1
- package/dist/load-user-env-DD5qveNU.mjs +49 -0
- package/dist/{local-d1-ga5O_idV.mjs → local-d1-BM3p74mm.mjs} +6 -6
- package/dist/{login-GKcNUmtI.mjs → login-CZ2Cqa-D.mjs} +11 -11
- package/dist/login-DhK7o1oJ.mjs +2 -0
- package/dist/{logs-BiMSULmc.mjs → logs-TihRcLTk.mjs} +5 -5
- package/dist/migrate-BgT-hmu8.mjs +2 -0
- package/dist/{migrate-NLsjBbuM.mjs → migrate-uFwojusJ.mjs} +69 -21
- package/dist/migration-handler-Cg0Y4EPu.mjs +470 -0
- package/dist/{migration-handler-DM4clYj5.d.mts → migration-handler-CwlEQUoo.d.mts} +17 -26
- package/dist/{mime-DxCznlJq.mjs → mime-srOklVVv.mjs} +92 -395
- package/dist/{node-DJicPvPj.mjs → node-DoKbo1SZ.mjs} +8 -24
- package/dist/{operator-args-DOBhIaIg.mjs → operator-args-UnE8Y2eK.mjs} +27 -26
- package/dist/{operator-auth-BEZ_u0Cz.mjs → operator-auth-Cr2zCc-J.mjs} +2 -2
- package/dist/{operator-client-DbDv4vtE.mjs → operator-client-C-ROjk1I.mjs} +4 -4
- package/dist/{operator-cmd-BT4hgavL.mjs → operator-cmd-C5lCctnc.mjs} +8 -8
- package/dist/operator-cmd-Cjk5DiRx.mjs +2 -0
- package/dist/{output-C50ag2r3.mjs → output-FNHKw5Ac.mjs} +36 -5
- package/dist/{package-json-DXfiT1jV.mjs → package-json-BjYqR-So.mjs} +1 -1
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/client.mjs +91 -5
- package/dist/pages/index.d.mts +1 -2
- package/dist/pages/index.mjs +6 -6
- package/dist/pages/islands-plugin.mjs +5 -83
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +1 -1
- package/dist/pages/serialize.mjs +1 -1
- package/dist/{platform-args-DUeXY9Om.mjs → platform-args-C6Mb_I3a.mjs} +34 -58
- package/dist/platform-args-Cm7x-fot.mjs +2 -0
- package/dist/{platform-auth-config-CkSx3usH.mjs → platform-auth-config-CJmNkFT2.mjs} +10 -11
- package/dist/{platform-auth-protection-BJimB_p9.mjs → platform-auth-protection-D5wvsI-Y.mjs} +36 -26
- package/dist/{platform-auth-recovery-BU6izFAU.mjs → platform-auth-recovery-D_0I3n-1.mjs} +8 -9
- package/dist/{platform-cmd-BbmJiq5O.mjs → platform-cmd-Cuj4oUVo.mjs} +1 -1
- package/dist/{platform-cmd-BbY1dWiM.mjs → platform-cmd-DxxZO6e5.mjs} +15 -15
- package/dist/{platform-discovery-DIYz8V63.mjs → platform-discovery-CHhNs8Nn.mjs} +1 -1
- package/dist/{platform-domain-CHVS6cV0.mjs → platform-domain-zLXnW1G_.mjs} +5 -5
- package/dist/{platform-lifecycle-DzCwqhFq.mjs → platform-lifecycle-DOW-wLfx.mjs} +1398 -2043
- package/dist/{platform-lifecycle-ByAlpkhV.mjs → platform-lifecycle-_gfnjUBr.mjs} +1 -1
- package/dist/{platform-management-CBOT4BSM.mjs → platform-management-CYrLvTGH.mjs} +1 -1
- package/dist/{platform-management-CuuVDhyt.mjs → platform-management-t7HKy4-U.mjs} +632 -124
- package/dist/{platform-plans-config-CN-heS4q.mjs → platform-plans-config-CNH6zbPX.mjs} +15 -11
- package/dist/{platform-recovery-CskSJgLh.mjs → platform-recovery-DeucI7A9.mjs} +6 -9
- package/dist/{platform-registry-Cjv2Qf0r.mjs → platform-registry-B9mWX9LO.mjs} +13 -18
- package/dist/{platform-setup-BBxRxmFC.mjs → platform-setup-CTf6MMT9.mjs} +19 -26
- package/dist/{plugin-inference-BlQbOL0P.mjs → plugin-inference-DsARdQKE.mjs} +18 -33
- package/dist/{prepare-Dq9hTIbo.mjs → prepare-C4zfwks4.mjs} +3 -3
- package/dist/{prepare-Do96654b.mjs → prepare-CSH9dKTI.mjs} +11 -13
- package/dist/prepare-dr9uxQSV.mjs +2 -0
- package/dist/{prerender-render-Ct20jftc.mjs → prerender-render-Bfsumdkv.mjs} +8 -2
- package/dist/prerender-render.d.mts +2 -0
- package/dist/prerender-render.mjs +2 -2
- package/dist/project-DiiOBZPF.mjs +2 -0
- package/dist/{project-cmd-DaoRrn-8.mjs → project-cmd-Dq75AXzy.mjs} +19 -19
- package/dist/{project-paths-GgcMozYz.mjs → project-paths-DMvEeSau.mjs} +9 -14
- package/dist/{project-BAm2aB6Q.mjs → project-rqDnVsJN.mjs} +8 -4
- package/dist/{project-team-Q_lCA7Io.mjs → project-team-B3_QcStG.mjs} +6 -6
- package/dist/{project-token-BArgK9o1.mjs → project-token-CvsRvv2I.mjs} +5 -5
- package/dist/{project-tsconfig-CVJhNMxs.mjs → project-tsconfig-bveqhlYA.mjs} +3 -5
- package/dist/{project-zero-trust-KO9Hu2Pq.mjs → project-zero-trust-D1ICiwN_.mjs} +5 -5
- package/dist/{protocol-BPZaNqBo.d.mts → protocol-4H7V_3Os.d.mts} +1 -1
- package/dist/{protocol-CfaUwNs8.mjs → protocol-RNP0u7UY.mjs} +9 -3
- package/dist/{provision-BfaLiWbj.mjs → provision-DDh7ITVS.mjs} +118 -865
- package/dist/{requests-C7Oeoh5u.mjs → requests-3CL3BuZh.mjs} +4 -4
- package/dist/resolve-project-B9Hr0D3n.mjs +2 -0
- package/dist/resolve-project-C_Cu7E8a.mjs +48 -0
- package/dist/{rollback-DVAtrLAl.mjs → rollback-Ce1d_0J9.mjs} +7 -17
- package/dist/{route-types-CbtsIeFn.mjs → route-types-IrBuwJ7u.mjs} +35 -70
- package/dist/routing-assets-VkrKIbxE.mjs +139 -0
- package/dist/{runner-9wjsSZx-.mjs → runner-B5huK2eC.mjs} +1 -1
- package/dist/{runner-DMBKSrRk.mjs → runner-DcVDrzuR.mjs} +7 -28
- package/dist/{runner-mysql-CEzKtmFb.mjs → runner-mysql-CCtyI0p6.mjs} +4 -3
- package/dist/runner-mysql-CaJq-hd6.mjs +2 -0
- package/dist/runner-pg-BJhFZZG4.mjs +2 -0
- package/dist/{runner-pg-DV8p_zjA.mjs → runner-pg-CPd-CB_F.mjs} +1 -1
- package/dist/runtime/ai.mjs +9 -22
- package/dist/runtime/better-auth-mysql.d.mts +2 -5
- package/dist/runtime/better-auth-mysql.mjs +6 -31
- package/dist/runtime/better-auth-pg.d.mts +2 -5
- package/dist/runtime/better-auth-pg.mjs +6 -32
- package/dist/runtime/better-auth.d.mts +2 -4
- package/dist/runtime/better-auth.mjs +9 -19
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.d.mts +16 -0
- package/dist/runtime/durable.mjs +26 -2
- package/dist/runtime/email/testing.d.mts +1 -1
- package/dist/runtime/email/testing.mjs +9 -23
- package/dist/runtime/email-protocol.d.mts +12 -0
- package/dist/runtime/email-protocol.mjs +2 -70
- package/dist/runtime/email.d.mts +1 -1
- package/dist/runtime/email.mjs +79 -221
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/env-public.mjs +12 -38
- package/dist/runtime/env.d.mts +1 -12
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +1 -1
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +1 -1
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +1 -16
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/migration-handler-mysql.d.mts +2 -2
- package/dist/runtime/migration-handler-mysql.mjs +3 -2
- package/dist/runtime/migration-handler-pg.d.mts +2 -2
- package/dist/runtime/migration-handler-pg.mjs +1 -1
- package/dist/runtime/migration-handler.d.mts +2 -2
- package/dist/runtime/migration-handler.mjs +2 -470
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.mjs +62 -62
- package/dist/runtime/remote/index.mjs +16 -77
- package/dist/runtime/routing.d.mts +1 -4
- package/dist/runtime/routing.mjs +82 -218
- package/dist/runtime/sandbox-container.d.mts +2 -2
- package/dist/runtime/sandbox-container.mjs +2 -2
- package/dist/runtime/sandbox.d.mts +2 -2
- package/dist/runtime/sandbox.mjs +13 -6
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -3
- package/dist/runtime/ws-server.mjs +6 -28
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{sandbox-container-Bo0eiFKz.d.mts → sandbox-container-ChQRum-j.d.mts} +3 -1
- package/dist/{sandbox-container-C6ItmVuN.mjs → sandbox-container-DBKIqDEK.mjs} +12 -1
- package/dist/{sandbox-C5LFoJMf.d.mts → sandbox-q3waMc2T.d.mts} +1 -1
- package/dist/{scan-C3uDzz6J.mjs → scan-C0BMdmEd.mjs} +84 -7
- package/dist/{secret-BvtB7IjY.mjs → secret-B5J8bBsI.mjs} +62 -80
- package/dist/{serialize-BPvnNQuA.mjs → serialize-BtQyaYoC.mjs} +10 -4
- package/dist/{skills-BgVMvQdy.mjs → skills-BJsan98C.mjs} +2 -2
- package/dist/{subcommand-prompt-BSlnD1fI.mjs → subcommand-prompt-gQ-NDA-u.mjs} +38 -43
- package/dist/sveltekit.mjs +1 -1
- package/dist/validate-C9xtFOYR.mjs +2 -0
- package/dist/{validate-C9qJArv7.mjs → validate-CheZGRE7.mjs} +4 -8
- package/dist/version-metadata-DIrqEHQo.mjs +73 -0
- package/dist/{wrangler-D9KTuqnv.mjs → wrangler-BYs07Rxy.mjs} +119 -378
- package/dist/{ws-CChrrAU-.d.mts → ws-aKVYB-fA.d.mts} +1 -1
- package/dist/yarn-pnp-DLbEFMT0.mjs +92 -0
- package/docs/guide/auth.md +2 -0
- package/docs/guide/database/postgresql.md +2 -0
- package/docs/guide/database.md +2 -0
- package/docs/guide/durable-state.md +24 -0
- package/docs/guide/platform/administration/access.md +4 -0
- package/docs/guide/platform/administration/connected-apps.md +55 -0
- package/docs/guide/platform/installation/credentials.md +3 -1
- package/docs/guide/quickstart.md +2 -0
- package/docs/guide/sandboxes.md +2 -0
- package/docs/reference/api/deploy.md +23 -0
- package/docs/reference/api/pages.md +2 -0
- package/docs/reference/api.md +2 -1
- package/docs/reference/cli/database.md +9 -3
- package/docs/reference/cli/platform-installation.md +1 -1
- package/docs/reference/cli/setup.md +2 -0
- package/package.json +13 -16
- package/skills/void/SKILL.md +1 -0
- package/dist/auth-LMJcNESe.mjs +0 -2
- package/dist/cf-build-output-H9a97vME.mjs +0 -2
- package/dist/cf-user-agent-lKblH3zU.mjs +0 -17
- package/dist/client-tso2OfcG.mjs +0 -2
- package/dist/collect-DLyFDiKW.mjs +0 -2
- package/dist/config-5r-YpMC-.mjs +0 -2
- package/dist/config-B_ggY-IO.mjs +0 -89
- package/dist/config-BtSFvXZx.mjs +0 -2
- package/dist/config-write-AHGesphx.mjs +0 -61
- package/dist/deploy-Bqe1PYBw.mjs +0 -10458
- package/dist/deploy-VsWsVQkw.mjs +0 -2
- package/dist/dev-inbox-CK-UuPob.mjs +0 -297
- package/dist/discover-EDUf6JJw.mjs +0 -2
- package/dist/dist-_UUlL6bg.mjs +0 -2
- package/dist/env-validation-Dxdx_5wo.mjs +0 -951
- package/dist/gen-dA9hW7AV.mjs +0 -2
- package/dist/head-client-DzmJGN4C.mjs +0 -90
- package/dist/help-DfQYVfGY.mjs +0 -2
- package/dist/login-mx_ydhmp.mjs +0 -2
- package/dist/migrate-BHp07yJE.mjs +0 -2
- package/dist/operator-cmd-CwBB-1yb.mjs +0 -2
- package/dist/pages/head-client.d.mts +0 -13
- package/dist/pages/head-client.mjs +0 -2
- package/dist/platform-args-D4E1PjVw.mjs +0 -2
- package/dist/prepare-DRUV-g3X.mjs +0 -2
- package/dist/project-DedqCp59.mjs +0 -2
- package/dist/provision-Wu9ZBk9L.mjs +0 -2
- package/dist/resolve-project-BIeYs9Cw.mjs +0 -2
- package/dist/resolve-project-CP8rZs_p.mjs +0 -28
- package/dist/runner-mysql-CkFqZ6CE.mjs +0 -2
- package/dist/runner-pg-BGYRFdRp.mjs +0 -2
- package/dist/runtime/env-helpers.d.mts +0 -2
- package/dist/runtime/env-helpers.mjs +0 -2
- package/dist/validate-BJr9LfXy.mjs +0 -2
- package/dist/yarn-pnp-CUX_iTPA.mjs +0 -188
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { a as validateSourceDir, c as loadVoidConfig } from "./project-paths-
|
|
1
|
+
import { a as validateSourceDir, c as loadVoidConfig } from "./project-paths-DMvEeSau.mjs";
|
|
2
2
|
import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-BXuhmuub.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { n as MimeError, s as parseAddress } from "./mime-srOklVVv.mjs";
|
|
4
|
+
import { isRecord } from "@void/deploy-core";
|
|
4
5
|
//#region src/config.ts
|
|
5
6
|
const CONFIG_FILE = "void.json";
|
|
6
7
|
const VALID_TARGETS = /* @__PURE__ */ new Set([
|
|
@@ -48,17 +49,18 @@ const VALID_SANDBOX_INSTANCE_TYPES = /* @__PURE__ */ new Set([
|
|
|
48
49
|
"standard-3",
|
|
49
50
|
"standard-4"
|
|
50
51
|
]);
|
|
52
|
+
const SANDBOX_STRING_KEYS = [
|
|
53
|
+
"binding",
|
|
54
|
+
"className",
|
|
55
|
+
"containerName",
|
|
56
|
+
"image",
|
|
57
|
+
"imageBuildContext",
|
|
58
|
+
"platformImage"
|
|
59
|
+
];
|
|
60
|
+
const SANDBOX_KEYS = [...SANDBOX_STRING_KEYS, "instanceType"];
|
|
51
61
|
/**
|
|
52
|
-
* Count anonymous `*` wildcards
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* The shared `compilePattern` (`@void/edge`) emits a distinct `(?<name>.*)`
|
|
56
|
-
* group for `:name*` and a `(?<splat>.*)` group for the first bare `*` —
|
|
57
|
-
* those don't clash, so a pattern with both a named multi-segment capture and
|
|
58
|
-
* a bare splat is legitimate and must validate. Walking raw chars would
|
|
59
|
-
* over-count and cause `assertSingleSplat` to reject such patterns.
|
|
60
|
-
*
|
|
61
|
-
* The identifier character class matches `compilePattern`'s `[A-Za-z0-9_]+`.
|
|
62
|
+
* Count anonymous `*` wildcards, ignoring the `*` that ends a `:name*` capture:
|
|
63
|
+
* `compilePattern` (`@void/edge`) gives `:name*` its own group, so it never clashes with a splat.
|
|
62
64
|
*/
|
|
63
65
|
function countSplats(source) {
|
|
64
66
|
return source.replace(/:[A-Za-z0-9_]+\*/g, "").match(/\*/g)?.length ?? 0;
|
|
@@ -74,19 +76,8 @@ function assertSingleSplat(source, kind) {
|
|
|
74
76
|
if (count > 1) throw new Error(`${kind} source "${source}" in ${CONFIG_FILE} must contain at most one "*" wildcard (got ${count}); the matched portion is captured once as :splat`);
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
|
-
* Reject patterns
|
|
78
|
-
*
|
|
79
|
-
* group name` at request time. Two cases:
|
|
80
|
-
*
|
|
81
|
-
* 1. Two `:name` (or `:name` + trailing `*`) tokens with the same
|
|
82
|
-
* identifier — e.g. `/:id/:id`, or two named-multi-segment captures
|
|
83
|
-
* sharing a name.
|
|
84
|
-
* 2. A `:splat` (named) token alongside a bare `*` — both compile to a
|
|
85
|
-
* `(?<splat>...)` group.
|
|
86
|
-
*
|
|
87
|
-
* The runtime skips a rule whose pattern fails to compile
|
|
88
|
-
* (`runtime/routing.ts`), but failing at config-read with a precise message
|
|
89
|
-
* is friendlier than a log warning.
|
|
79
|
+
* Reject patterns that compile to duplicate named groups (`/:id/:id`, or `:splat`
|
|
80
|
+
* with a bare `*`). The runtime would only skip such a rule with a log warning.
|
|
90
81
|
*/
|
|
91
82
|
function assertUniqueCaptureNames(source, kind) {
|
|
92
83
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -104,15 +95,7 @@ function assertUniqueCaptureNames(source, kind) {
|
|
|
104
95
|
throw new Error(`${kind} source "${source}" in ${CONFIG_FILE} has duplicate capture group name(s) (${names}); each :name token must be unique within a pattern, and :splat collides with a bare "*"`);
|
|
105
96
|
}
|
|
106
97
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Predicate for the "protocol-relative" shape: a leading `//` parses as
|
|
109
|
-
* `//host/path` → `https://host/path`, which silently turns an intended
|
|
110
|
-
* in-worker rewrite/redirect into a cross-origin proxy.
|
|
111
|
-
*
|
|
112
|
-
* Shared by the config validators below and the `_redirects` parser
|
|
113
|
-
* (`cli/headers.ts`). `c.rewrite()` in `runtime/routing.ts` has an equivalent
|
|
114
|
-
* check for runtime input; it runs in the Worker and cannot import this module.
|
|
115
|
-
*/
|
|
98
|
+
/** A leading `//` parses as `https://host/path`, so an internal rule would proxy cross-origin. */
|
|
116
99
|
function isProtocolRelative(dest) {
|
|
117
100
|
return dest.startsWith("//");
|
|
118
101
|
}
|
|
@@ -120,35 +103,12 @@ function assertNotProtocolRelative(dest, source, kind) {
|
|
|
120
103
|
if (!isProtocolRelative(dest)) return;
|
|
121
104
|
throw new Error(`${kind} destination for "${source}" in ${CONFIG_FILE} must not start with "//" (protocol-relative URLs parse as cross-origin; ${kind === "Redirect" ? "use a single-slash path for internal redirects or an explicit \"https://...\" URL for external" : "only internal paths are supported"})`);
|
|
122
105
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Strict literal-hostname regex used by `parseHostPrefixedSource` to validate
|
|
125
|
-
* the host portion of an `https://host/path` rule source. Mirrors
|
|
126
|
-
* `LITERAL_HOSTNAME_REGEX` in `packages/deploy-core/src/validate.ts` and the
|
|
127
|
-
* regex in `platform/packages/api/src/routes/domains.ts`. Rejects scheme
|
|
128
|
-
* prefixes, ports, paths, whitespace, control chars, wildcards, single-label
|
|
129
|
-
* hosts, IPv4 literals, and userinfo. The host is lowercased before testing so the
|
|
130
|
-
* same byte-exact form reaches dispatch (which compares against the
|
|
131
|
-
* lowercase `url.hostname`).
|
|
132
|
-
*/
|
|
133
106
|
const LITERAL_HOSTNAME_REGEX = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/;
|
|
134
107
|
/**
|
|
135
|
-
* Split an optional `https://host
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* lowercase-normalized; the remaining path becomes `path` (including the
|
|
140
|
-
* leading `/`, which the caller may further validate).
|
|
141
|
-
*
|
|
142
|
-
* Rejected (returns `{ error }`):
|
|
143
|
-
* - `http://...` — TLS terminates upstream of the dispatch worker; only
|
|
144
|
-
* `https://` requests ever reach the runtime, so an `http://`-scoped rule
|
|
145
|
-
* physically cannot fire.
|
|
146
|
-
* - `//host/path` — protocol-relative; ambiguous and rejected by the same
|
|
147
|
-
* reasoning.
|
|
148
|
-
* - `https://` with a wildcarded, ported, or otherwise non-literal host
|
|
149
|
-
* (v1 only supports literal hosts).
|
|
150
|
-
* - `https://` with no path (`https://host`) — accepted and normalized to
|
|
151
|
-
* `https://host/` so the path is always non-empty.
|
|
108
|
+
* Split an optional `https://host` prefix from a rule source. The host is
|
|
109
|
+
* lowercased (dispatch compares `url.hostname`), and a bare `https://host` gets
|
|
110
|
+
* path `/`. Returns `{ error }` for `//` and `http://` sources (only HTTPS
|
|
111
|
+
* requests reach the runtime) and for non-literal hosts.
|
|
152
112
|
*/
|
|
153
113
|
function parseHostPrefixedSource(raw) {
|
|
154
114
|
if (raw.startsWith("//")) return { error: `must not start with "//" (protocol-relative URLs are ambiguous; use "/path" for path-only or "https://host/path")` };
|
|
@@ -177,6 +137,20 @@ function assertNoQueryString(dest, source, kind) {
|
|
|
177
137
|
if (!dest.includes("?")) return;
|
|
178
138
|
throw new Error(`${kind} destination for "${source}" in ${CONFIG_FILE} must not contain "?" (query strings are not supported in ${kind.toLowerCase()} destinations; the incoming request's query is preserved automatically)`);
|
|
179
139
|
}
|
|
140
|
+
function validateRewriteMap(value, kind) {
|
|
141
|
+
if (!isRecord(value)) throw new Error(`"routing.${kind.toLowerCase()}s" in ${CONFIG_FILE} must be an object`);
|
|
142
|
+
for (const [source, dest] of Object.entries(value)) {
|
|
143
|
+
const parsed = parseHostPrefixedSource(source);
|
|
144
|
+
if ("error" in parsed) throw new Error(`${kind} source "${source}" in ${CONFIG_FILE}: ${parsed.error}`);
|
|
145
|
+
if (!parsed.path.startsWith("/")) throw new Error(`${kind} source "${source}" in ${CONFIG_FILE} must start with "/" (or be "https://host/path" with a path-absolute path)`);
|
|
146
|
+
assertSingleSplat(parsed.path, kind);
|
|
147
|
+
assertUniqueCaptureNames(parsed.path, kind);
|
|
148
|
+
if (typeof dest !== "string") throw new Error(`${kind} destination for "${source}" in ${CONFIG_FILE} must be a string`);
|
|
149
|
+
if (!dest.startsWith("/")) throw new Error(`${kind} destination for "${source}" in ${CONFIG_FILE} must start with "/" (only internal paths are supported)`);
|
|
150
|
+
assertNotProtocolRelative(dest, source, kind);
|
|
151
|
+
assertNoQueryString(dest, source, kind);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
180
154
|
/** Old flat keys that have moved into namespaces. */
|
|
181
155
|
const MIGRATION_ERRORS = {
|
|
182
156
|
bindings: "\"bindings\" has moved to \"inference.bindings\"",
|
|
@@ -205,9 +179,8 @@ function validateConfig(config, source = CONFIG_FILE) {
|
|
|
205
179
|
throw error;
|
|
206
180
|
}
|
|
207
181
|
}
|
|
208
|
-
function validateConfigObject(
|
|
209
|
-
if (
|
|
210
|
-
const obj = config;
|
|
182
|
+
function validateConfigObject(obj) {
|
|
183
|
+
if (!isRecord(obj)) throw new Error(`config: ${CONFIG_FILE} must be a JSON object.`);
|
|
211
184
|
for (const [key, message] of Object.entries(MIGRATION_ERRORS)) if (obj[key] !== void 0) throw new Error(`config: ${message} in ${CONFIG_FILE}.`);
|
|
212
185
|
if (obj.sourceDir !== void 0) {
|
|
213
186
|
if (typeof obj.sourceDir !== "string") throw new Error(`config: "sourceDir" in ${CONFIG_FILE} must be a string.`);
|
|
@@ -220,7 +193,7 @@ function validateConfigObject(config) {
|
|
|
220
193
|
if (typeof obj.output !== "string" || !VALID_OUTPUTS.has(obj.output)) throw new Error(`config: "output" in ${CONFIG_FILE} must be one of: server, static.`);
|
|
221
194
|
}
|
|
222
195
|
if (obj.auth !== void 0) {
|
|
223
|
-
if (
|
|
196
|
+
if (!isRecord(obj.auth)) throw new Error(`config: "auth" in ${CONFIG_FILE} must be an object.`);
|
|
224
197
|
const auth = obj.auth;
|
|
225
198
|
for (const key of Object.keys(auth)) if (key !== "providers") throw new Error(`config: Unknown key 'auth.${key}' in ${CONFIG_FILE}. Valid: providers.`);
|
|
226
199
|
if (auth.providers !== void 0) {
|
|
@@ -236,13 +209,13 @@ function validateConfigObject(config) {
|
|
|
236
209
|
}
|
|
237
210
|
}
|
|
238
211
|
if (obj.head !== void 0) {
|
|
239
|
-
if (
|
|
212
|
+
if (!isRecord(obj.head)) throw new Error(`config: "head" in ${CONFIG_FILE} must be an object.`);
|
|
240
213
|
const h = obj.head;
|
|
241
214
|
if (h.title !== void 0 && typeof h.title !== "string") throw new Error(`config: "head.title" in ${CONFIG_FILE} must be a string.`);
|
|
242
215
|
if (h.titleTemplate !== void 0 && typeof h.titleTemplate !== "string") throw new Error(`config: "head.titleTemplate" in ${CONFIG_FILE} must be a string.`);
|
|
243
216
|
if (h.meta !== void 0) {
|
|
244
217
|
if (!Array.isArray(h.meta)) throw new Error(`config: "head.meta" in ${CONFIG_FILE} must be an array.`);
|
|
245
|
-
for (const entry of h.meta) if (
|
|
218
|
+
for (const entry of h.meta) if (!isRecord(entry)) throw new Error(`config: "head.meta" entries in ${CONFIG_FILE} must be objects.`);
|
|
246
219
|
}
|
|
247
220
|
if (h.link !== void 0) {
|
|
248
221
|
if (!Array.isArray(h.link)) throw new Error(`config: "head.link" in ${CONFIG_FILE} must be an array.`);
|
|
@@ -251,14 +224,14 @@ function validateConfigObject(config) {
|
|
|
251
224
|
if (!Array.isArray(h.script)) throw new Error(`config: "head.script" in ${CONFIG_FILE} must be an array.`);
|
|
252
225
|
}
|
|
253
226
|
if (h.htmlAttrs !== void 0) {
|
|
254
|
-
if (
|
|
227
|
+
if (!isRecord(h.htmlAttrs)) throw new Error(`config: "head.htmlAttrs" in ${CONFIG_FILE} must be an object.`);
|
|
255
228
|
}
|
|
256
229
|
if (h.bodyAttrs !== void 0) {
|
|
257
|
-
if (
|
|
230
|
+
if (!isRecord(h.bodyAttrs)) throw new Error(`config: "head.bodyAttrs" in ${CONFIG_FILE} must be an object.`);
|
|
258
231
|
}
|
|
259
232
|
}
|
|
260
233
|
if (obj.routing !== void 0) {
|
|
261
|
-
if (
|
|
234
|
+
if (!isRecord(obj.routing)) throw new Error(`config: "routing" in ${CONFIG_FILE} must be an object.`);
|
|
262
235
|
const routing = obj.routing;
|
|
263
236
|
if (routing.notFound !== void 0) {
|
|
264
237
|
if (typeof routing.notFound !== "string" || !VALID_NOT_FOUND_HANDLING.has(routing.notFound)) throw new Error(`config: "routing.notFound" in ${CONFIG_FILE} must be one of: ${[...VALID_NOT_FOUND_HANDLING].join(", ")}.`);
|
|
@@ -267,91 +240,57 @@ function validateConfigObject(config) {
|
|
|
267
240
|
if (routing.revalidate !== void 0) {
|
|
268
241
|
if (typeof routing.revalidate === "number") {
|
|
269
242
|
if (!Number.isFinite(routing.revalidate) || routing.revalidate < 0) throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a non-negative finite number.`);
|
|
270
|
-
} else if (
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
276
|
-
} else throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a number or an object of path patterns to numbers.`);
|
|
243
|
+
} else if (isRecord(routing.revalidate)) for (const [pattern, value] of Object.entries(routing.revalidate)) {
|
|
244
|
+
if (pattern !== "*" && !pattern.startsWith("/")) throw new Error(`config: "routing.revalidate" key '${pattern}' in ${CONFIG_FILE} must start with "/" or be "*".`);
|
|
245
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) throw new Error(`config: "routing.revalidate" value for '${pattern}' in ${CONFIG_FILE} must be a non-negative finite number.`);
|
|
246
|
+
}
|
|
247
|
+
else throw new Error(`config: "routing.revalidate" in ${CONFIG_FILE} must be a number or an object of path patterns to numbers.`);
|
|
277
248
|
}
|
|
278
249
|
if (routing.prerender !== void 0) {
|
|
279
250
|
if (!Array.isArray(routing.prerender) || !routing.prerender.every((p) => typeof p === "string")) throw new Error(`config: "routing.prerender" in ${CONFIG_FILE} must be an array of strings.`);
|
|
280
251
|
for (const p of routing.prerender) if (!p.startsWith("/")) throw new Error(`config: "routing.prerender" path '${p}' in ${CONFIG_FILE} must start with "/".`);
|
|
281
252
|
}
|
|
282
253
|
if (routing.headers !== void 0) {
|
|
283
|
-
if (
|
|
284
|
-
const
|
|
285
|
-
for (const [pattern, values] of Object.entries(h)) {
|
|
254
|
+
if (!isRecord(routing.headers)) throw new Error(`config: "routing.headers" in ${CONFIG_FILE} must be an object.`);
|
|
255
|
+
for (const [pattern, values] of Object.entries(routing.headers)) {
|
|
286
256
|
if (!pattern.startsWith("/")) throw new Error(`config: Header pattern '${pattern}' in ${CONFIG_FILE} must start with "/".`);
|
|
287
257
|
assertSingleSplat(pattern, "Header");
|
|
288
258
|
if (!Array.isArray(values) || !values.every((v) => typeof v === "string")) throw new Error(`config: Headers for '${pattern}' in ${CONFIG_FILE} must be an array of strings.`);
|
|
289
259
|
}
|
|
290
260
|
}
|
|
291
261
|
if (routing.redirects !== void 0) {
|
|
292
|
-
if (
|
|
293
|
-
const
|
|
294
|
-
for (const [source, dest] of Object.entries(r)) {
|
|
262
|
+
if (!isRecord(routing.redirects)) throw new Error(`config: "routing.redirects" in ${CONFIG_FILE} must be an object.`);
|
|
263
|
+
for (const [source, dest] of Object.entries(routing.redirects)) {
|
|
295
264
|
const parsed = parseHostPrefixedSource(source);
|
|
296
265
|
if ("error" in parsed) throw new Error(`config: Redirect source '${source}' in ${CONFIG_FILE}: ${parsed.error}.`);
|
|
297
266
|
if (!parsed.path.startsWith("/")) throw new Error(`config: Redirect source '${source}' in ${CONFIG_FILE} must start with "/" (or be "https://host/path" with a path-absolute path).`);
|
|
298
267
|
assertSingleSplat(parsed.path, "Redirect");
|
|
299
268
|
assertUniqueCaptureNames(parsed.path, "Redirect");
|
|
300
|
-
if (typeof dest === "string")
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
if (
|
|
305
|
-
if (d.to.startsWith("/")) assertNotProtocolRelative(d.to, source, "Redirect");
|
|
306
|
-
if (d.status !== void 0 && !VALID_REDIRECT_STATUSES.has(d.status)) throw new Error(`config: Redirect status for '${source}' in ${CONFIG_FILE} must be 301, 302, 303, 307, or 308.`);
|
|
269
|
+
if (typeof dest === "string") assertNotProtocolRelative(dest, source, "Redirect");
|
|
270
|
+
else if (isRecord(dest)) {
|
|
271
|
+
if (typeof dest.to !== "string") throw new Error(`config: Redirect for '${source}' in ${CONFIG_FILE} must have a "to" string.`);
|
|
272
|
+
assertNotProtocolRelative(dest.to, source, "Redirect");
|
|
273
|
+
if (dest.status !== void 0 && !VALID_REDIRECT_STATUSES.has(dest.status)) throw new Error(`config: Redirect status for '${source}' in ${CONFIG_FILE} must be 301, 302, 303, 307, or 308.`);
|
|
307
274
|
} else throw new Error(`config: Redirect for '${source}' in ${CONFIG_FILE} must be a string or an object with "to" and optional "status".`);
|
|
308
275
|
}
|
|
309
276
|
}
|
|
310
277
|
if (routing.revalidateQueryAllowlist !== void 0) {
|
|
311
|
-
if (
|
|
278
|
+
if (!isRecord(routing.revalidateQueryAllowlist)) throw new Error(`"routing.revalidateQueryAllowlist" in ${CONFIG_FILE} must be an object`);
|
|
312
279
|
for (const [pattern, params] of Object.entries(routing.revalidateQueryAllowlist)) {
|
|
313
280
|
if (pattern !== "*" && !pattern.startsWith("/")) throw new Error(`config: revalidateQueryAllowlist pattern '${pattern}' in ${CONFIG_FILE} must start with "/" or be "*".`);
|
|
314
281
|
if (pattern !== "*") assertSingleSplat(pattern, "revalidateQueryAllowlist");
|
|
315
282
|
if (!Array.isArray(params) || !params.every((v) => typeof v === "string")) throw new Error(`config: revalidateQueryAllowlist for '${pattern}' in ${CONFIG_FILE} must be an array of strings.`);
|
|
316
283
|
}
|
|
317
284
|
}
|
|
318
|
-
if (routing.rewrites !== void 0)
|
|
319
|
-
|
|
320
|
-
const rw = routing.rewrites;
|
|
321
|
-
for (const [source, dest] of Object.entries(rw)) {
|
|
322
|
-
const parsed = parseHostPrefixedSource(source);
|
|
323
|
-
if ("error" in parsed) throw new Error(`Rewrite source "${source}" in ${CONFIG_FILE}: ${parsed.error}`);
|
|
324
|
-
if (!parsed.path.startsWith("/")) throw new Error(`Rewrite source "${source}" in ${CONFIG_FILE} must start with "/" (or be "https://host/path" with a path-absolute path)`);
|
|
325
|
-
assertSingleSplat(parsed.path, "Rewrite");
|
|
326
|
-
assertUniqueCaptureNames(parsed.path, "Rewrite");
|
|
327
|
-
if (typeof dest !== "string") throw new Error(`Rewrite destination for "${source}" in ${CONFIG_FILE} must be a string`);
|
|
328
|
-
if (!dest.startsWith("/")) throw new Error(`Rewrite destination for "${source}" in ${CONFIG_FILE} must start with "/" (only internal paths are supported)`);
|
|
329
|
-
assertNotProtocolRelative(dest, source, "Rewrite");
|
|
330
|
-
assertNoQueryString(dest, source, "Rewrite");
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
if (routing.fallbacks !== void 0) {
|
|
334
|
-
if (typeof routing.fallbacks !== "object" || routing.fallbacks === null || Array.isArray(routing.fallbacks)) throw new Error(`"routing.fallbacks" in ${CONFIG_FILE} must be an object`);
|
|
335
|
-
const fb = routing.fallbacks;
|
|
336
|
-
for (const [source, dest] of Object.entries(fb)) {
|
|
337
|
-
const parsed = parseHostPrefixedSource(source);
|
|
338
|
-
if ("error" in parsed) throw new Error(`Fallback source "${source}" in ${CONFIG_FILE}: ${parsed.error}`);
|
|
339
|
-
if (!parsed.path.startsWith("/")) throw new Error(`Fallback source "${source}" in ${CONFIG_FILE} must start with "/" (or be "https://host/path" with a path-absolute path)`);
|
|
340
|
-
assertSingleSplat(parsed.path, "Fallback");
|
|
341
|
-
assertUniqueCaptureNames(parsed.path, "Fallback");
|
|
342
|
-
if (typeof dest !== "string") throw new Error(`Fallback destination for "${source}" in ${CONFIG_FILE} must be a string`);
|
|
343
|
-
if (!dest.startsWith("/")) throw new Error(`Fallback destination for "${source}" in ${CONFIG_FILE} must start with "/" (only internal paths are supported)`);
|
|
344
|
-
assertNotProtocolRelative(dest, source, "Fallback");
|
|
345
|
-
assertNoQueryString(dest, source, "Fallback");
|
|
346
|
-
}
|
|
347
|
-
}
|
|
285
|
+
if (routing.rewrites !== void 0) validateRewriteMap(routing.rewrites, "Rewrite");
|
|
286
|
+
if (routing.fallbacks !== void 0) validateRewriteMap(routing.fallbacks, "Fallback");
|
|
348
287
|
}
|
|
349
288
|
if (obj.inference !== void 0) {
|
|
350
|
-
if (
|
|
289
|
+
if (!isRecord(obj.inference)) throw new Error(`config: "inference" in ${CONFIG_FILE} must be an object.`);
|
|
351
290
|
const inf = obj.inference;
|
|
352
291
|
if (inf.auth !== void 0) throw new Error(`config: "inference.auth" in ${CONFIG_FILE} is no longer supported. Use auth.ts or import from "void/auth"/"void/client" instead.`);
|
|
353
292
|
if (inf.bindings !== void 0) {
|
|
354
|
-
if (
|
|
293
|
+
if (!isRecord(inf.bindings)) throw new Error(`config: "inference.bindings" in ${CONFIG_FILE} must be an object.`);
|
|
355
294
|
const b = inf.bindings;
|
|
356
295
|
for (const key of Object.keys(b)) {
|
|
357
296
|
if (![
|
|
@@ -377,31 +316,15 @@ function validateConfigObject(config) {
|
|
|
377
316
|
if (inf.outputDir !== void 0 && typeof inf.outputDir !== "string") throw new Error(`config: "inference.outputDir" in ${CONFIG_FILE} must be a string.`);
|
|
378
317
|
}
|
|
379
318
|
if (obj.remote !== void 0 && typeof obj.remote !== "boolean") throw new Error(`config: "remote" in ${CONFIG_FILE} must be a boolean.`);
|
|
380
|
-
if (obj.sandbox !== void 0) {
|
|
381
|
-
if (
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
"containerName",
|
|
387
|
-
"image",
|
|
388
|
-
"imageBuildContext",
|
|
389
|
-
"platformImage",
|
|
390
|
-
"instanceType"
|
|
391
|
-
].includes(key)) throw new Error(`config: Unknown key 'sandbox.${key}' in ${CONFIG_FILE}. Valid: binding, className, containerName, image, imageBuildContext, platformImage, instanceType.`);
|
|
392
|
-
for (const key of [
|
|
393
|
-
"binding",
|
|
394
|
-
"className",
|
|
395
|
-
"containerName",
|
|
396
|
-
"image",
|
|
397
|
-
"imageBuildContext",
|
|
398
|
-
"platformImage"
|
|
399
|
-
]) if (sandbox[key] !== void 0 && typeof sandbox[key] !== "string") throw new Error(`config: "sandbox.${key}" in ${CONFIG_FILE} must be a string.`);
|
|
400
|
-
if (sandbox.instanceType !== void 0 && (typeof sandbox.instanceType !== "string" || !VALID_SANDBOX_INSTANCE_TYPES.has(sandbox.instanceType))) throw new Error(`config: "sandbox.instanceType" in ${CONFIG_FILE} must be one of: ${[...VALID_SANDBOX_INSTANCE_TYPES].join(", ")}.`);
|
|
401
|
-
} else throw new Error(`config: "sandbox" in ${CONFIG_FILE} must be a boolean or an object.`);
|
|
319
|
+
if (obj.sandbox !== void 0 && typeof obj.sandbox !== "boolean") {
|
|
320
|
+
if (!isRecord(obj.sandbox)) throw new Error(`config: "sandbox" in ${CONFIG_FILE} must be a boolean or an object.`);
|
|
321
|
+
const sandbox = obj.sandbox;
|
|
322
|
+
for (const key of Object.keys(sandbox)) if (!SANDBOX_KEYS.includes(key)) throw new Error(`config: Unknown key 'sandbox.${key}' in ${CONFIG_FILE}. Valid: ${SANDBOX_KEYS.join(", ")}.`);
|
|
323
|
+
for (const key of SANDBOX_STRING_KEYS) if (sandbox[key] !== void 0 && typeof sandbox[key] !== "string") throw new Error(`config: "sandbox.${key}" in ${CONFIG_FILE} must be a string.`);
|
|
324
|
+
if (sandbox.instanceType !== void 0 && (typeof sandbox.instanceType !== "string" || !VALID_SANDBOX_INSTANCE_TYPES.has(sandbox.instanceType))) throw new Error(`config: "sandbox.instanceType" in ${CONFIG_FILE} must be one of: ${[...VALID_SANDBOX_INSTANCE_TYPES].join(", ")}.`);
|
|
402
325
|
}
|
|
403
326
|
if (obj.worker !== void 0) {
|
|
404
|
-
if (
|
|
327
|
+
if (!isRecord(obj.worker)) throw new Error(`config: "worker" in ${CONFIG_FILE} must be an object.`);
|
|
405
328
|
const w = obj.worker;
|
|
406
329
|
if (w.compatibility_date !== void 0) {
|
|
407
330
|
if (typeof w.compatibility_date !== "string") throw new Error(`config: "worker.compatibility_date" in ${CONFIG_FILE} must be a string.`);
|
|
@@ -411,11 +334,11 @@ function validateConfigObject(config) {
|
|
|
411
334
|
if (!Array.isArray(w.compatibility_flags) || !w.compatibility_flags.every((f) => typeof f === "string")) throw new Error(`config: "worker.compatibility_flags" in ${CONFIG_FILE} must be an array of strings.`);
|
|
412
335
|
}
|
|
413
336
|
if (w.vars !== void 0) {
|
|
414
|
-
if (
|
|
337
|
+
if (!isRecord(w.vars)) throw new Error(`config: "worker.vars" in ${CONFIG_FILE} must be an object.`);
|
|
415
338
|
for (const [key, value] of Object.entries(w.vars)) if (typeof value !== "string") throw new Error(`config: "worker.vars.${key}" in ${CONFIG_FILE} must be a string.`);
|
|
416
339
|
}
|
|
417
340
|
if (w.limits !== void 0) {
|
|
418
|
-
if (
|
|
341
|
+
if (!isRecord(w.limits)) throw new Error(`config: "worker.limits" in ${CONFIG_FILE} must be an object.`);
|
|
419
342
|
const limits = w.limits;
|
|
420
343
|
for (const key of Object.keys(limits)) if (key !== "cpu_ms") throw new Error(`config: Unknown key 'worker.limits.${key}' in ${CONFIG_FILE}. Valid: cpu_ms.`);
|
|
421
344
|
if (limits.cpu_ms !== void 0) {
|
|
@@ -424,14 +347,14 @@ function validateConfigObject(config) {
|
|
|
424
347
|
}
|
|
425
348
|
}
|
|
426
349
|
if (obj.cloudflare !== void 0) {
|
|
427
|
-
if (
|
|
350
|
+
if (!isRecord(obj.cloudflare)) throw new Error(`config: "cloudflare" in ${CONFIG_FILE} must be an object.`);
|
|
428
351
|
}
|
|
429
352
|
if (obj.deploy !== void 0) {
|
|
430
|
-
if (
|
|
353
|
+
if (!isRecord(obj.deploy)) throw new Error(`config: "deploy" in ${CONFIG_FILE} must be an object.`);
|
|
431
354
|
const deploy = obj.deploy;
|
|
432
355
|
for (const key of Object.keys(deploy)) if (key !== "cloudflare") throw new Error(`config: Unknown key 'deploy.${key}' in ${CONFIG_FILE}. Valid: cloudflare.`);
|
|
433
356
|
if (deploy.cloudflare !== void 0) {
|
|
434
|
-
if (
|
|
357
|
+
if (!isRecord(deploy.cloudflare)) throw new Error(`config: "deploy.cloudflare" in ${CONFIG_FILE} must be an object.`);
|
|
435
358
|
const cloudflareDeploy = deploy.cloudflare;
|
|
436
359
|
for (const key of Object.keys(cloudflareDeploy)) if (key !== "mode") throw new Error(`config: Unknown key 'deploy.cloudflare.${key}' in ${CONFIG_FILE}. Valid: mode.`);
|
|
437
360
|
if (cloudflareDeploy.mode !== void 0 && cloudflareDeploy.mode !== "staged" && cloudflareDeploy.mode !== "atomic") throw new Error(`config: "deploy.cloudflare.mode" in ${CONFIG_FILE} must be "staged" or "atomic".`);
|
|
@@ -441,13 +364,13 @@ function validateConfigObject(config) {
|
|
|
441
364
|
if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg" or "mysql".`);
|
|
442
365
|
}
|
|
443
366
|
if (obj.ai !== void 0) {
|
|
444
|
-
if (
|
|
367
|
+
if (!isRecord(obj.ai)) throw new Error(`config: "ai" in ${CONFIG_FILE} must be an object.`);
|
|
445
368
|
const aiCfg = obj.ai;
|
|
446
369
|
for (const key of Object.keys(aiCfg)) if (key !== "gateway") throw new Error(`config: Unknown key 'ai.${key}' in ${CONFIG_FILE}. Valid: gateway.`);
|
|
447
370
|
if (aiCfg.gateway !== void 0 && (typeof aiCfg.gateway !== "string" || aiCfg.gateway.length === 0)) throw new Error(`config: "ai.gateway" in ${CONFIG_FILE} must be a non-empty string.`);
|
|
448
371
|
}
|
|
449
372
|
if (obj.email !== void 0) {
|
|
450
|
-
if (
|
|
373
|
+
if (!isRecord(obj.email)) throw new Error(`config: "email" in ${CONFIG_FILE} must be an object.`);
|
|
451
374
|
const emailCfg = obj.email;
|
|
452
375
|
for (const key of Object.keys(emailCfg)) if (key !== "from") throw new Error(`config: Unknown key 'email.${key}' in ${CONFIG_FILE}. Valid: from.`);
|
|
453
376
|
if (emailCfg.from !== void 0) parseEmailFrom(emailCfg.from);
|
|
@@ -468,7 +391,7 @@ function validateConfigObject(config) {
|
|
|
468
391
|
function parseEmailFrom(value) {
|
|
469
392
|
if (typeof value !== "string" || value.length === 0) throw new Error(`config: "email.from" in ${CONFIG_FILE} must be a non-empty string.`);
|
|
470
393
|
try {
|
|
471
|
-
|
|
394
|
+
parseAddress(value, "email.from");
|
|
472
395
|
} catch (error) {
|
|
473
396
|
const detail = error instanceof MimeError ? ` ${error.message}` : "";
|
|
474
397
|
throw new Error(`config: "email.from" in ${CONFIG_FILE} must be a single email address, optionally with a display name (e.g. "Acme <noreply@mail.acme.com>").${detail}`);
|
|
@@ -580,23 +503,7 @@ function convertRedirectsConfig(redirects) {
|
|
|
580
503
|
* if the input is empty or undefined.
|
|
581
504
|
*/
|
|
582
505
|
function convertRewritesConfig(rewrites) {
|
|
583
|
-
|
|
584
|
-
const origin = "void.json#routing.rewrites";
|
|
585
|
-
const rules = [];
|
|
586
|
-
for (const [rawSource, destination] of Object.entries(rewrites)) {
|
|
587
|
-
const parsed = parseHostPrefixedSource(rawSource);
|
|
588
|
-
if ("error" in parsed) throw new Error(`convertRewritesConfig: source "${rawSource}": ${parsed.error}`);
|
|
589
|
-
const { host, path } = parsed;
|
|
590
|
-
rules.push({
|
|
591
|
-
source: path,
|
|
592
|
-
destination,
|
|
593
|
-
status: 200,
|
|
594
|
-
force: true,
|
|
595
|
-
origin,
|
|
596
|
-
...host && { host }
|
|
597
|
-
});
|
|
598
|
-
}
|
|
599
|
-
return rules.length > 0 ? rules : void 0;
|
|
506
|
+
return convertRewriteRules("convertRewritesConfig", rewrites, "rewrites", true);
|
|
600
507
|
}
|
|
601
508
|
/**
|
|
602
509
|
* Convert the `fallbacks` config field into `DevRedirectRule[]` with status 200.
|
|
@@ -608,18 +515,21 @@ function convertRewritesConfig(rewrites) {
|
|
|
608
515
|
* Returns undefined if the input is empty or undefined.
|
|
609
516
|
*/
|
|
610
517
|
function convertFallbacksConfig(fallbacks) {
|
|
611
|
-
|
|
612
|
-
|
|
518
|
+
return convertRewriteRules("convertFallbacksConfig", fallbacks, "fallbacks", false);
|
|
519
|
+
}
|
|
520
|
+
function convertRewriteRules(caller, entries, field, force) {
|
|
521
|
+
if (!entries) return;
|
|
522
|
+
const origin = `void.json#routing.${field}`;
|
|
613
523
|
const rules = [];
|
|
614
|
-
for (const [rawSource, destination] of Object.entries(
|
|
524
|
+
for (const [rawSource, destination] of Object.entries(entries)) {
|
|
615
525
|
const parsed = parseHostPrefixedSource(rawSource);
|
|
616
|
-
if ("error" in parsed) throw new Error(
|
|
526
|
+
if ("error" in parsed) throw new Error(`${caller}: source "${rawSource}": ${parsed.error}`);
|
|
617
527
|
const { host, path } = parsed;
|
|
618
528
|
rules.push({
|
|
619
529
|
source: path,
|
|
620
530
|
destination,
|
|
621
531
|
status: 200,
|
|
622
|
-
force
|
|
532
|
+
force,
|
|
623
533
|
origin,
|
|
624
534
|
...host && { host }
|
|
625
535
|
});
|
|
@@ -627,4 +537,4 @@ function convertFallbacksConfig(fallbacks) {
|
|
|
627
537
|
return rules.length > 0 ? rules : void 0;
|
|
628
538
|
}
|
|
629
539
|
//#endregion
|
|
630
|
-
export {
|
|
540
|
+
export { convertRewritesConfig as a, isNodeTarget as c, readConfig as d, resolveBindingNames as f, convertRedirectsConfig as i, isProtocolRelative as l, convertFallbacksConfig as n, countSplats as o, validateConfig as p, convertHeadersConfig as r, getDatabaseDialect as s, VALID_REDIRECT_STATUSES as t, parseHostPrefixedSource as u };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as readProjectPaths } from "./project-paths-
|
|
1
|
+
import { n as readProjectPaths } from "./project-paths-DMvEeSau.mjs";
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { parseSync } from "vite";
|
package/dist/config-entry.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as VoidConfig } from "./config-
|
|
1
|
+
import { t as VoidConfig } from "./config-7qoq2p9v.mjs";
|
|
2
2
|
//#region src/config-entry.d.ts
|
|
3
3
|
/** Define a typed Void project configuration without loading the Vite plugin. */
|
|
4
4
|
export declare function defineConfig<const T extends VoidConfig>(config: T): T;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { c as normalizePlatformApiUrl, s as listPlatformConnections } from "./platform-registry-
|
|
2
|
-
import { c as
|
|
3
|
-
import { d as readPlatformToken } from "./auth-
|
|
1
|
+
import { c as normalizePlatformApiUrl, s as listPlatformConnections } from "./platform-registry-B9mWX9LO.mjs";
|
|
2
|
+
import { c as writeDeploymentPlatform, l as writePlatformSelection, n as readDeploymentPlatform } from "./project-rqDnVsJN.mjs";
|
|
3
|
+
import { d as readPlatformToken } from "./auth-B6iOCjKI.mjs";
|
|
4
4
|
import { K as select, L as log, tt as isCancel } from "./dist-D3m88sjf.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import { a as isExpiredTokenError, r as PlatformClient } from "./client-
|
|
7
|
-
import { t as promptForLoginToken } from "./login-
|
|
8
|
-
import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-
|
|
9
|
-
import { t as connectCloudflare } from "./cloudflare-connect-
|
|
5
|
+
import { m as printSuccess } from "./output-FNHKw5Ac.mjs";
|
|
6
|
+
import { a as isExpiredTokenError, r as PlatformClient } from "./client-DM9Kcf4e.mjs";
|
|
7
|
+
import { t as promptForLoginToken } from "./login-CZ2Cqa-D.mjs";
|
|
8
|
+
import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-DxxZO6e5.mjs";
|
|
9
|
+
import { t as connectCloudflare } from "./cloudflare-connect-BosmCNlq.mjs";
|
|
10
10
|
//#region src/cli/connect.ts
|
|
11
11
|
async function selectVoidPlatform(interactive) {
|
|
12
12
|
if (!interactive) throw new Error("connect: Supply a Void platform URL in non-interactive mode.");
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { s as getSiteDomain } from "./auth-
|
|
1
|
+
import { t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
|
|
2
|
+
import { s as getSiteDomain } from "./auth-B6iOCjKI.mjs";
|
|
3
3
|
import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./dist-D3m88sjf.mjs";
|
|
4
|
-
import { f as
|
|
5
|
-
import { n as PlatformApiError } from "./client-
|
|
4
|
+
import { f as import_picocolors, h as sanitizeTerminalText } from "./output-FNHKw5Ac.mjs";
|
|
5
|
+
import { n as PlatformApiError } from "./client-DM9Kcf4e.mjs";
|
|
6
6
|
import { t as validateProjectSlug } from "./project-slug-23TpquG4.mjs";
|
|
7
|
-
import { n as inferDefaultSlug } from "./resolve-project-
|
|
7
|
+
import { n as inferDefaultSlug } from "./resolve-project-C_Cu7E8a.mjs";
|
|
8
8
|
//#region src/cli/prompt.ts
|
|
9
9
|
async function promptProjectSetupAction(message = "Set up a Void project:", options = {}) {
|
|
10
10
|
const result = await select({
|
|
@@ -76,7 +76,7 @@ async function promptProjectSlug(defaultSlug) {
|
|
|
76
76
|
* caller's prompt callback returns `undefined` (cancel).
|
|
77
77
|
*
|
|
78
78
|
* The shared retry loop keeps `promptAndCreateProject` (deploy/link paths)
|
|
79
|
-
* and the AI-setup path in `
|
|
79
|
+
* and the AI-setup path in `plugin-ai-setup.ts` in sync.
|
|
80
80
|
*/
|
|
81
81
|
async function createProjectWithSlugRetry(client, initialDefaultSlug, promptSlug) {
|
|
82
82
|
let defaultSlug = initialDefaultSlug;
|
|
@@ -109,7 +109,7 @@ async function promptAndCreateProject(root, client, options = {}) {
|
|
|
109
109
|
projectId: project.id,
|
|
110
110
|
slug: project.slug
|
|
111
111
|
};
|
|
112
|
-
if (options.link !== false) writeProjectConfig(root, attachSelectedPlatform(
|
|
112
|
+
if (options.link !== false) writeProjectConfig(root, attachSelectedPlatform(config, client.apiUrl));
|
|
113
113
|
if (project.owner_email_destination) {
|
|
114
114
|
const { address } = project.owner_email_destination;
|
|
115
115
|
log.info(`Registering ${address} as a recipient for this project. Cloudflare emails it a verification link unless it is already verified — \`void email destinations\` shows the state.`);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as createProjectWithSlugRetry } from "./create-project-
|
|
1
|
+
import { t as createProjectWithSlugRetry } from "./create-project-D4APeBwX.mjs";
|
|
2
2
|
export { createProjectWithSlugRetry };
|