void 0.25.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS_TEMPLATE.md +1 -3
- package/README.md +19 -9
- package/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
- package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-B7QEjqSR.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-7wuZ5ob8.mjs → auth-B5_tZLxT.mjs} +9 -9
- package/dist/{auth-CdgZ9uag.mjs → auth-BgX2qYSY.mjs} +1 -1
- package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-D5RmKnzh.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BdM4avI8.mjs → auth-router-Bap-pvbn.mjs} +6 -19
- package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
- package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
- package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-B58c8iS8.mjs} +8 -7
- package/dist/{cache-TcZnBLtH.mjs → cache-Bo52trKF.mjs} +8 -8
- package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-BZNz3Q26.mjs} +6 -5
- package/dist/{cf-access-AHKBzmuu.mjs → cf-access-ngGqZpHZ.mjs} +11 -12
- package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
- package/dist/cf-build-output-H9a97vME.mjs +2 -0
- package/dist/cli/cli.mjs +48 -83
- package/dist/cli/cloudflare-operation-process.mjs +71 -77
- package/dist/cli/env-schema-probe.d.mts +1 -1
- package/dist/cli/env-schema-probe.mjs +5 -6
- package/dist/client-By4JjMw_.mjs +2 -0
- package/dist/{client-RsPo8wsP.mjs → client-C2Prx_Bi.mjs} +30 -8
- package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
- package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
- package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
- package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
- package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
- package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
- package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
- package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
- package/dist/config-BtSFvXZx.mjs +2 -0
- package/dist/config-CLYAosnQ.mjs +78 -0
- package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
- package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
- package/dist/{connect-DCvUmPXY.mjs → connect-X0MUA1gk.mjs} +12 -11
- package/dist/{create-project-eAPgYq35.mjs → create-project-DxiyW6iX.mjs} +7 -7
- package/dist/{create-project-C734I-Mu.mjs → create-project-iwkbqiBU.mjs} +1 -1
- package/dist/{db-C07GEdKF.mjs → db-XnVMHzoV.mjs} +101 -133
- package/dist/{delete-pKMVsrpJ.mjs → delete-esYlMiSJ.mjs} +8 -8
- package/dist/{deploy-DfsAe-T0.mjs → deploy-BsEvnlJl.mjs} +2377 -2512
- package/dist/deploy-C1d-YTfp.mjs +2 -0
- package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
- package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
- package/dist/discover-EDUf6JJw.mjs +2 -0
- package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
- package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
- package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
- package/dist/{domain-D3uA9ize.mjs → domain-CbbBWhWE.mjs} +29 -30
- package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
- package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
- package/dist/{email-z3o2cwjH.mjs → email-CpuT42g7.mjs} +24 -19
- package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
- package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
- package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
- package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
- package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
- package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
- package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
- package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
- package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
- package/dist/{env-3Q8-_2IH.mjs → env-w9jOyGZn.mjs} +10 -9
- package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
- package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
- package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-PGgz4uGz.mjs} +26 -24
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-NjwoG9FK.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-D_FsOFxq.mjs} +65 -164
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-CZ4nAylQ.d.mts → handler-CNAwjRcW.d.mts} +5 -12
- package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
- package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
- package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
- package/dist/{help-DRZXC4fj.mjs → help-CVFBTmBx.mjs} +23 -38
- package/dist/help-DzKUrQvk.mjs +2 -0
- package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
- package/dist/index.d.mts +19 -2
- package/dist/index.mjs +632 -532
- package/dist/{info-BmA3_IFZ.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-DT7yuuyl.mjs → init-Bw-fRKGp.mjs} +161 -197
- package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
- package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
- package/dist/{link-CXOlqh2F.mjs → link-DlPG8iX3.mjs} +10 -10
- package/dist/{list-eEWVJEPn.mjs → list-2GN7_ueV.mjs} +11 -9
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-Chw1eIMv.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-Df4XpwhW.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-pWQHYVu2.mjs → login-D-Q4xw3Q.mjs} +7 -7
- package/dist/login-Dc-wuTDq.mjs +2 -0
- package/dist/{logs-DnxVX7TR.mjs → logs-rd8J-OFh.mjs} +28 -11
- package/dist/migrate-BHp07yJE.mjs +2 -0
- package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
- package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
- package/dist/{node-BkyRWRx8.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-CAVcmwUt.mjs → operator-args-BNsW5gfp.mjs} +10 -1
- package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-AzVLbrr3.mjs} +4 -8
- package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BQtzyG-g.mjs} +3 -3
- package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-B6f6Cg9Z.mjs} +45 -14
- package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
- package/dist/{output-BBsUwdyT.mjs → output-C50ag2r3.mjs} +44 -2
- package/dist/pages/client.d.mts +19 -51
- package/dist/pages/client.mjs +204 -225
- package/dist/pages/head-client.d.mts +1 -1
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +2 -2
- package/dist/pages/index.mjs +6 -12
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +21 -25
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/{plan-NPpwZ_kc.mjs → plan-BhLO2p4w.mjs} +4 -3
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-BoZkWQnJ.mjs} +4 -2
- package/dist/platform-args-DYgITk0D.mjs +2 -0
- package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-n603OANg.mjs} +45 -40
- package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-zxDr0hWW.mjs} +9 -8
- package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-tw9lgtgE.mjs} +8 -7
- package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-B8-bCb7t.mjs} +48 -23
- package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-C00YM14r.mjs} +1 -1
- package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
- package/dist/{platform-domain-CUdY064e.mjs → platform-domain-p0kobLV8.mjs} +6 -5
- package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-D_QEY32D.mjs} +906 -389
- package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
- package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BdYblvvE.mjs} +175 -32
- package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-oi-SvI3f.mjs} +1 -1
- package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
- package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-PvNS9Nl2.mjs} +3 -3
- package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
- package/dist/platform-setup-DVe42Ws7.mjs +299 -0
- package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
- package/dist/prepare-DRUV-g3X.mjs +2 -0
- package/dist/{prepare-DnaKBi--.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-39EvOhI6.mjs → prepare-Dq9hTIbo.mjs} +4 -3
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
- package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
- package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-ti8_yTcA.mjs} +19 -19
- package/dist/{project-team-ohAWWaew.mjs → project-team-CDPE1Tsg.mjs} +15 -18
- package/dist/{project-token-CP01Jna6.mjs → project-token-CkZ1cN0Z.mjs} +14 -17
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-DdjLR61k.mjs} +12 -9
- package/dist/{protocol-CjF_iI9X.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
- package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
- package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
- package/dist/{provision-Btj1jppf.mjs → provision-BfaLiWbj.mjs} +51 -42
- package/dist/{provision-BEv0k-qz.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-B3PBuGlX.mjs → requests-DFAqyYy8.mjs} +5 -5
- package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
- package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
- package/dist/{rollback-DDub9GsO.mjs → rollback-BKYXBduI.mjs} +30 -37
- package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
- package/dist/route-url-BgPja1GS.d.mts +5 -0
- package/dist/route-url-BjGv_KKY.mjs +28 -0
- package/dist/runner-9wjsSZx-.mjs +2 -0
- package/dist/{runner-Ol0TNjk6.mjs → runner-DMBKSrRk.mjs} +2 -2
- package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
- package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
- package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
- package/dist/runtime/ai.d.mts +11 -12
- package/dist/runtime/ai.mjs +47 -113
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +4 -9
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +5 -10
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +3 -3
- package/dist/runtime/client-react.d.mts +2 -3
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.d.mts +2 -3
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.d.mts +2 -3
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.d.mts +2 -3
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.d.mts +2 -3
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.mjs +3 -10
- package/dist/runtime/email/testing.mjs +5 -5
- package/dist/runtime/email.d.mts +2 -1
- package/dist/runtime/email.mjs +11 -27
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/env-public.mjs +15 -20
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.d.mts +2 -3
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +10 -11
- package/dist/runtime/limits.d.mts +2 -2
- package/dist/runtime/limits.mjs +2 -2
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-client.mjs +12 -22
- package/dist/runtime/live-server.mjs +27 -35
- package/dist/runtime/live.d.mts +2 -2
- package/dist/runtime/live.mjs +2 -2
- package/dist/runtime/migration-handler.mjs +35 -86
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.d.mts +2 -2
- package/dist/runtime/remote/binding-handler.mjs +8 -9
- package/dist/runtime/remote/index.mjs +27 -77
- package/dist/runtime/route-url.d.mts +2 -4
- package/dist/runtime/route-url.mjs +1 -1
- package/dist/runtime/routing.d.mts +1 -1
- package/dist/runtime/routing.mjs +15 -26
- package/dist/runtime/sandbox.d.mts +1 -1
- package/dist/runtime/sandbox.mjs +14 -24
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +30 -61
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/runtime/ws.mjs +1 -1
- package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
- package/dist/{scan-C7okrLyM.mjs → scan-C3uDzz6J.mjs} +21 -18
- package/dist/{secret-3c72lY1U.mjs → secret-BAt2KMmO.mjs} +15 -15
- package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
- package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
- package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
- package/dist/sveltekit.d.mts +0 -2
- package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
- package/dist/validate-BJr9LfXy.mjs +2 -0
- package/dist/{validate-ctOrgiS3.mjs → validate-C9qJArv7.mjs} +9 -28
- package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
- package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
- package/dist/{ws-CL1w7GXU.d.mts → ws-CChrrAU-.d.mts} +1 -1
- package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
- package/{skills/void/docs → docs}/guide/ai.md +69 -64
- package/{skills/void/docs → docs}/guide/app-types.md +1 -1
- package/{skills/void/docs → docs}/guide/auth.md +37 -1
- package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
- package/{skills/void/docs → docs}/guide/database.md +23 -8
- package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
- package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
- package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
- package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
- package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
- package/{skills/void/docs → docs}/guide/jobs.md +2 -2
- package/{skills/void/docs → docs}/guide/live.md +12 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +21 -9
- package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
- package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
- package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
- package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
- package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
- package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
- package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +2 -2
- package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +8 -2
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +7 -1
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +1 -1
- package/docs/guide/platform/installation/uninstall.md +102 -0
- package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
- package/{skills/void/docs → docs}/guide/queues.md +0 -2
- package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
- package/{skills/void/docs → docs}/guide/sandboxes.md +41 -22
- package/{skills/void/docs → docs}/guide/sse.md +0 -2
- package/{skills/void/docs → docs}/guide/storage.md +7 -2
- package/{skills/void/docs → docs}/guide/websockets.md +4 -0
- package/docs/integrations/agents.md +37 -0
- package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
- package/{skills/void/docs → docs}/integrations/hono.md +15 -7
- package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
- package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
- package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
- package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
- package/{skills/void/docs → docs}/reference/api/resources.md +11 -14
- package/{skills/void/docs → docs}/reference/api.md +35 -34
- package/{skills/void/docs → docs}/reference/cli/auth.md +3 -6
- package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
- package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
- package/{skills/void/docs → docs}/reference/cli/platform-config.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +15 -13
- package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
- package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
- package/{skills/void/docs → docs}/reference/cli/platform.md +4 -2
- package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
- package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
- package/{skills/void/docs → docs}/reference/cli.md +2 -2
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +2 -16
- package/package.json +34 -30
- package/schema.json +1 -1
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
- package/skills/void/SKILL.md +11 -5
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-B4Me-9HE.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-BDu1vhSH.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-ById9r2j.mjs +0 -2
- package/dist/help-DPGBwomV.mjs +0 -2
- package/dist/login-C98-sw79.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/plan-D1Q5rf-r.mjs +0 -2
- package/dist/platform-args-Cq6EjQro.mjs +0 -2
- package/dist/prepare-CnjcTV2s.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-CXA9Fh8h.mjs +0 -2
- package/dist/validate-Dq_L3s0S.mjs +0 -2
- package/skills/void/docs/guide/platform/installation/uninstall.md +0 -69
- package/skills/void/docs/integrations/agents.md +0 -26
- package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
- package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
- package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
- package/{skills/void/docs → docs}/guide/deployment.md +0 -0
- package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
- package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
- package/{skills/void/docs → docs}/guide/email.md +0 -0
- package/{skills/void/docs → docs}/guide/index.md +0 -0
- package/{skills/void/docs → docs}/guide/kv.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
- package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
- package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
- package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
- package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
- package/{skills/void/docs → docs}/guide/ssg.md +0 -0
- package/{skills/void/docs → docs}/guide/ssr.md +0 -0
- package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
- package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
- package/{skills/void/docs → docs}/index.md +0 -0
- package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
- package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
- package/{skills/void/docs → docs}/reference/api/client.md +0 -0
- package/{skills/void/docs → docs}/reference/api/database.md +2 -2
- /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
*/
|
|
10
10
|
function resolveHead(configHead, middlewareHead, pageHead) {
|
|
11
11
|
if (!configHead && !middlewareHead && !pageHead) return;
|
|
12
|
+
const layers = [
|
|
13
|
+
configHead,
|
|
14
|
+
middlewareHead,
|
|
15
|
+
pageHead
|
|
16
|
+
];
|
|
12
17
|
const result = {};
|
|
13
18
|
const title = pageHead?.title ?? middlewareHead?.title ?? configHead?.title;
|
|
14
19
|
if (title !== void 0) {
|
|
@@ -16,62 +21,40 @@ function resolveHead(configHead, middlewareHead, pageHead) {
|
|
|
16
21
|
result.title = template ? template.replace("%s", title) : title;
|
|
17
22
|
}
|
|
18
23
|
const metaMap = /* @__PURE__ */ new Map();
|
|
19
|
-
const
|
|
20
|
-
for (const layer of [
|
|
21
|
-
configHead,
|
|
22
|
-
middlewareHead,
|
|
23
|
-
pageHead
|
|
24
|
-
]) {
|
|
24
|
+
for (const layer of layers) {
|
|
25
25
|
if (!layer?.meta) continue;
|
|
26
26
|
for (const entry of layer.meta) {
|
|
27
27
|
const key = entry.charset ? "charset" : entry.property ? `property:${entry.property}` : `name:${entry.name ?? ""}`;
|
|
28
|
-
if (!metaMap.has(key)) metaOrder.push(key);
|
|
29
28
|
metaMap.set(key, entry);
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
|
-
if (metaMap.size > 0) result.meta =
|
|
33
|
-
const links = [];
|
|
34
|
-
for (const layer of [
|
|
35
|
-
configHead,
|
|
36
|
-
middlewareHead,
|
|
37
|
-
pageHead
|
|
38
|
-
]) if (layer?.link) links.push(...layer.link);
|
|
31
|
+
if (metaMap.size > 0) result.meta = [...metaMap.values()];
|
|
32
|
+
const links = layers.flatMap((layer) => layer?.link ?? []);
|
|
39
33
|
if (links.length > 0) result.link = links;
|
|
40
|
-
const scripts = [];
|
|
41
|
-
for (const layer of [
|
|
42
|
-
configHead,
|
|
43
|
-
middlewareHead,
|
|
44
|
-
pageHead
|
|
45
|
-
]) if (layer?.script) scripts.push(...layer.script);
|
|
34
|
+
const scripts = layers.flatMap((layer) => layer?.script ?? []);
|
|
46
35
|
if (scripts.length > 0) result.script = scripts;
|
|
47
|
-
const htmlAttrs =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
middlewareHead,
|
|
52
|
-
pageHead
|
|
53
|
-
]) if (layer?.htmlAttrs) {
|
|
54
|
-
Object.assign(htmlAttrs, layer.htmlAttrs);
|
|
55
|
-
hasHtmlAttrs = true;
|
|
56
|
-
}
|
|
57
|
-
if (hasHtmlAttrs) result.htmlAttrs = htmlAttrs;
|
|
58
|
-
const bodyAttrs = {};
|
|
59
|
-
let hasBodyAttrs = false;
|
|
60
|
-
for (const layer of [
|
|
61
|
-
configHead,
|
|
62
|
-
middlewareHead,
|
|
63
|
-
pageHead
|
|
64
|
-
]) if (layer?.bodyAttrs) {
|
|
65
|
-
Object.assign(bodyAttrs, layer.bodyAttrs);
|
|
66
|
-
hasBodyAttrs = true;
|
|
67
|
-
}
|
|
68
|
-
if (hasBodyAttrs) result.bodyAttrs = bodyAttrs;
|
|
36
|
+
const htmlAttrs = mergeAttrs(layers, "htmlAttrs");
|
|
37
|
+
if (htmlAttrs) result.htmlAttrs = htmlAttrs;
|
|
38
|
+
const bodyAttrs = mergeAttrs(layers, "bodyAttrs");
|
|
39
|
+
if (bodyAttrs) result.bodyAttrs = bodyAttrs;
|
|
69
40
|
if (result.title === void 0 && !result.meta && !result.link && !result.script && !result.htmlAttrs && !result.bodyAttrs) return;
|
|
70
41
|
return result;
|
|
71
42
|
}
|
|
43
|
+
/** Shallow-merge an attribute map across layers; undefined when no layer sets it. */
|
|
44
|
+
function mergeAttrs(layers, key) {
|
|
45
|
+
let merged;
|
|
46
|
+
for (const layer of layers) {
|
|
47
|
+
const attrs = layer?.[key];
|
|
48
|
+
if (attrs) merged = Object.assign(merged ?? {}, attrs);
|
|
49
|
+
}
|
|
50
|
+
return merged;
|
|
51
|
+
}
|
|
72
52
|
function escapeHtml(s) {
|
|
73
53
|
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
74
54
|
}
|
|
55
|
+
function serializeAttrs(attrs) {
|
|
56
|
+
return Object.entries(attrs).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
|
|
57
|
+
}
|
|
75
58
|
/** Serialize a HeadDescriptor to HTML tags for injection into `<head>`. */
|
|
76
59
|
function renderHeadToString(head) {
|
|
77
60
|
const parts = [];
|
|
@@ -84,13 +67,10 @@ function renderHeadToString(head) {
|
|
|
84
67
|
if (entry.content !== void 0) attrs.push(`content="${escapeHtml(entry.content)}"`);
|
|
85
68
|
parts.push(`<meta ${attrs.join(" ")}>`);
|
|
86
69
|
}
|
|
87
|
-
if (head.link) for (const entry of head.link) {
|
|
88
|
-
const attrs = Object.entries(entry).filter(([, value]) => value != null).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
|
|
89
|
-
parts.push(`<link ${attrs}>`);
|
|
90
|
-
}
|
|
70
|
+
if (head.link) for (const entry of head.link) parts.push(`<link ${serializeAttrs(entry)}>`);
|
|
91
71
|
if (head.script) for (const entry of head.script) {
|
|
92
72
|
const { innerHTML, ...rest } = entry;
|
|
93
|
-
const attrs =
|
|
73
|
+
const attrs = serializeAttrs(rest);
|
|
94
74
|
if (innerHTML) parts.push(`<script${attrs ? " " + attrs : ""}>${innerHTML}<\/script>`);
|
|
95
75
|
else if (attrs) parts.push(`<script ${attrs}><\/script>`);
|
|
96
76
|
}
|
|
@@ -98,14 +78,12 @@ function renderHeadToString(head) {
|
|
|
98
78
|
}
|
|
99
79
|
/** Serialize htmlAttrs to an attribute string (includes leading space). */
|
|
100
80
|
function renderHtmlAttrs(head) {
|
|
101
|
-
|
|
102
|
-
const attrs = Object.entries(head.htmlAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
|
|
81
|
+
const attrs = head.htmlAttrs ? serializeAttrs(head.htmlAttrs) : "";
|
|
103
82
|
return attrs ? " " + attrs : "";
|
|
104
83
|
}
|
|
105
84
|
/** Serialize bodyAttrs to an attribute string (includes leading space). */
|
|
106
85
|
function renderBodyAttrs(head) {
|
|
107
|
-
|
|
108
|
-
const attrs = Object.entries(head.bodyAttrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
|
|
86
|
+
const attrs = head.bodyAttrs ? serializeAttrs(head.bodyAttrs) : "";
|
|
109
87
|
return attrs ? " " + attrs : "";
|
|
110
88
|
}
|
|
111
89
|
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-
|
|
2
|
+
import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-DiowPT80.mjs";
|
|
3
3
|
import { i as voidWarn } from "./log-vqY3pqwI.mjs";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
//#region src/cli/headers.ts
|
|
@@ -186,8 +186,8 @@ function splitRedirectRulesByForce(rules) {
|
|
|
186
186
|
* - `routing.redirects` + `routing.rewrites` → `redirectRules`
|
|
187
187
|
* - `routing.fallbacks` → `fallbackRules`
|
|
188
188
|
*
|
|
189
|
-
* Returns `fallbackRules === undefined` when empty
|
|
190
|
-
*
|
|
189
|
+
* Returns `fallbackRules === undefined` when empty, meaning "no post-asset
|
|
190
|
+
* phase".
|
|
191
191
|
*
|
|
192
192
|
* Duplicate linting is NOT called here (callers decide which warning surface
|
|
193
193
|
* to use — CLI vs. Vite logger). `redundantForceOn3xx` is returned raw for
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { H as outro } from "./dist-D3m88sjf.mjs";
|
|
3
|
+
import { c as helpLine, l as import_picocolors, p as sectionTitle, t as categoryTitle, u as note } from "./output-C50ag2r3.mjs";
|
|
3
4
|
import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import { n as operatorGroups, t as operatorCommands } from "./operator-args-CAVcmwUt.mjs";
|
|
5
|
+
import { n as operatorGroups, t as operatorCommands } from "./operator-args-BNsW5gfp.mjs";
|
|
6
6
|
import { readFileSync } from "node:fs";
|
|
7
7
|
//#region src/cli/ascii.ts
|
|
8
8
|
const asciiArts = [
|
|
@@ -42,7 +42,7 @@ function operatorHelpTree() {
|
|
|
42
42
|
usage: entry.usage ?? [`void platform ${group} ${entry.action}${entry.positional?.map((name) => entry.optionalPositional ? ` [${name}]` : ` <${name}>`).join("") ?? ""} [options]`],
|
|
43
43
|
options: [
|
|
44
44
|
{
|
|
45
|
-
command: "--connection <
|
|
45
|
+
command: "--connection <slug-or-url>",
|
|
46
46
|
description: "Choose a registered connection; otherwise use VOID_API_URL or the active connection"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
@@ -82,7 +82,7 @@ function operatorHelpTree() {
|
|
|
82
82
|
})),
|
|
83
83
|
...(entry.booleans ?? []).map((flag) => ({
|
|
84
84
|
command: `--${flag}`,
|
|
85
|
-
description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "public-apps" ? "Manage public app rules without identity policies" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : "Read a full API session from stdin for explicit operator session exchange"
|
|
85
|
+
description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "public-apps" ? "Manage public app rules without identity policies" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : flag === "all" ? "Rotate every project" : "Read a full API session from stdin for explicit operator session exchange"
|
|
86
86
|
}))
|
|
87
87
|
]
|
|
88
88
|
}]))
|
|
@@ -91,7 +91,7 @@ function operatorHelpTree() {
|
|
|
91
91
|
}
|
|
92
92
|
const HELP_TREE = {
|
|
93
93
|
connect: {
|
|
94
|
-
summary: "Connect this project to Cloudflare or an existing Void platform.",
|
|
94
|
+
summary: "Connect this project to Cloudflare or an existing Void platform. Platform hostnames default to HTTPS.",
|
|
95
95
|
usage: ["void connect [url] [--platform <cloudflare|void>] [--no-login]"],
|
|
96
96
|
options: [{
|
|
97
97
|
command: "--platform <cloudflare|void>",
|
|
@@ -106,7 +106,7 @@ const HELP_TREE = {
|
|
|
106
106
|
description: "Choose a destination and sign in"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
command: "void connect
|
|
109
|
+
command: "void connect platform.example.com",
|
|
110
110
|
description: "Join a Void platform"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
@@ -119,13 +119,9 @@ const HELP_TREE = {
|
|
|
119
119
|
summary: "Set up Void in a new or existing project.",
|
|
120
120
|
usage: ["void init [options]"],
|
|
121
121
|
options: [
|
|
122
|
-
{
|
|
123
|
-
command: "--agents",
|
|
124
|
-
description: "Set up agent instructions and skills"
|
|
125
|
-
},
|
|
126
122
|
{
|
|
127
123
|
command: "--tsconfig",
|
|
128
|
-
description: "
|
|
124
|
+
description: "Update tsconfig.json and set up coding agents"
|
|
129
125
|
},
|
|
130
126
|
{
|
|
131
127
|
command: "--git",
|
|
@@ -137,23 +133,16 @@ const HELP_TREE = {
|
|
|
137
133
|
},
|
|
138
134
|
{
|
|
139
135
|
command: "--github",
|
|
140
|
-
description: "
|
|
136
|
+
description: "Create the GitHub Actions deploy workflow and set up coding agents"
|
|
141
137
|
}
|
|
142
138
|
],
|
|
143
|
-
examples: [
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
description: "Install agent instructions and skills"
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
command: "void init --github",
|
|
154
|
-
description: "Scaffold the GitHub Actions deploy workflow"
|
|
155
|
-
}
|
|
156
|
-
]
|
|
139
|
+
examples: [{
|
|
140
|
+
command: "void init",
|
|
141
|
+
description: "Scaffold or configure the current project"
|
|
142
|
+
}, {
|
|
143
|
+
command: "void init --github",
|
|
144
|
+
description: "Scaffold the GitHub Actions deploy workflow"
|
|
145
|
+
}]
|
|
157
146
|
},
|
|
158
147
|
migrate: {
|
|
159
148
|
summary: "Move legacy Void project settings into void.config.ts.",
|
|
@@ -416,7 +405,7 @@ const HELP_TREE = {
|
|
|
416
405
|
],
|
|
417
406
|
options: [
|
|
418
407
|
{
|
|
419
|
-
command: "--connection <
|
|
408
|
+
command: "--connection <slug-or-url>",
|
|
420
409
|
description: "Select a registered platform"
|
|
421
410
|
},
|
|
422
411
|
{
|
|
@@ -504,7 +493,7 @@ const HELP_TREE = {
|
|
|
504
493
|
],
|
|
505
494
|
options: [
|
|
506
495
|
{
|
|
507
|
-
command: "--connection <
|
|
496
|
+
command: "--connection <slug-or-url>",
|
|
508
497
|
description: "Select a registered platform"
|
|
509
498
|
},
|
|
510
499
|
{
|
|
@@ -574,7 +563,7 @@ const HELP_TREE = {
|
|
|
574
563
|
} }
|
|
575
564
|
},
|
|
576
565
|
list: basicSubcommand("List installed and connected platforms.", "void platform list"),
|
|
577
|
-
use: basicSubcommand("Select the default Void platform.", "void platform use [id]"),
|
|
566
|
+
use: basicSubcommand("Select the default Void platform by installation slug, name, saved ID, or API URL.", "void platform use [id]"),
|
|
578
567
|
status: basicSubcommand("Inspect a platform and its health.", "void platform status [id]"),
|
|
579
568
|
discover: {
|
|
580
569
|
summary: "Recover owned platform installations from Cloudflare.",
|
|
@@ -719,6 +708,10 @@ const HELP_TREE = {
|
|
|
719
708
|
command: "--purge-data",
|
|
720
709
|
description: "Delete installer-owned data even when it contains apps"
|
|
721
710
|
},
|
|
711
|
+
{
|
|
712
|
+
command: "--purge-resources",
|
|
713
|
+
description: "Delete every resource the installation created (includes --purge-data); keeps zones, adopted resources, and PostgreSQL"
|
|
714
|
+
},
|
|
722
715
|
{
|
|
723
716
|
command: "--keep-zone",
|
|
724
717
|
description: "Explicitly retain an installer-created zone"
|
|
@@ -1758,9 +1751,6 @@ function printGlobalHelp() {
|
|
|
1758
1751
|
globalCommandLine(["prepare"], "void prepare"),
|
|
1759
1752
|
...globalCommandLines("gen", { route: "route <path> [--methods]" }),
|
|
1760
1753
|
"",
|
|
1761
|
-
categoryTitle("agent"),
|
|
1762
|
-
helpLine("void init --agents", requiredOption(["init"], "--agents").description),
|
|
1763
|
-
"",
|
|
1764
1754
|
categoryTitle("help"),
|
|
1765
1755
|
helpLine("void help <command>", "Show command-specific help"),
|
|
1766
1756
|
helpLine("void <command> --help", "Show command-specific help")
|
|
@@ -1815,11 +1805,6 @@ function globalCommandLine(path, command) {
|
|
|
1815
1805
|
function globalOptionLines(path) {
|
|
1816
1806
|
return (requiredPage(path).options ?? []).map((option) => helpLine(` ${option.command}`, option.description));
|
|
1817
1807
|
}
|
|
1818
|
-
function requiredOption(path, command) {
|
|
1819
|
-
const option = requiredPage(path).options?.find((entry) => entry.command === command);
|
|
1820
|
-
if (!option) throw new Error(`Missing help option: ${formatHelpPath(path)} ${command}`);
|
|
1821
|
-
return option;
|
|
1822
|
-
}
|
|
1823
1808
|
function requiredPage(path) {
|
|
1824
1809
|
const page = findHelpPage(path);
|
|
1825
1810
|
if (!page) throw new Error(`Missing help page: ${formatHelpPath(path)}`);
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { i as normalizeEmail, n as MimeError, o as validateAddressParts, r as buildMime } from "./mime-
|
|
2
|
-
import { a as getRawRuntimeEnv } from "./env-raw-
|
|
3
|
-
import { EMAIL_MAX_RESPONSE_BYTES } from "@void/platform/email-protocol";
|
|
1
|
+
import { i as normalizeEmail, n as MimeError, o as validateAddressParts, r as buildMime } from "./mime-DxCznlJq.mjs";
|
|
2
|
+
import { a as getRawRuntimeEnv } from "./env-raw-jZpP5n47.mjs";
|
|
3
|
+
import { EMAIL_MAX_ACTIONS, EMAIL_MAX_INBOUND_BYTES, EMAIL_MAX_INBOUND_HEADERS, EMAIL_MAX_METADATA_BYTES, EMAIL_MAX_REPLY_BYTES, EMAIL_MAX_RESPONSE_BYTES } from "@void/platform/email-protocol";
|
|
4
4
|
//#region src/runtime/email/inbound.ts
|
|
5
5
|
const VALID_SLUG = /^[a-z0-9](?:[a-z0-9-]{0,54}[a-z0-9])?$/;
|
|
6
|
-
const MAX_ACTIONS =
|
|
6
|
+
const MAX_ACTIONS = EMAIL_MAX_ACTIONS;
|
|
7
7
|
const MAX_ACTION_ADDRESS_LENGTH = 320;
|
|
8
|
-
const MAX_ACTION_METADATA_BYTES =
|
|
8
|
+
const MAX_ACTION_METADATA_BYTES = EMAIL_MAX_METADATA_BYTES;
|
|
9
|
+
/** Bounds on a forward's headers. */
|
|
10
|
+
const MAX_FORWARD_HEADERS = 32;
|
|
9
11
|
const MAX_FORWARD_HEADER_LENGTH = 1024;
|
|
10
12
|
/** Maximum normalized SMTP rejection reason length. */
|
|
11
13
|
const MAX_REJECT_REASON_LENGTH = 1e3;
|
|
12
14
|
/** Inbound admission limits also applied by the handler test harness. */
|
|
13
|
-
const MAX_INBOUND_BYTES =
|
|
14
|
-
const MAX_INBOUND_HEADERS =
|
|
15
|
-
const MAX_REPLY_BYTES =
|
|
15
|
+
const MAX_INBOUND_BYTES = EMAIL_MAX_INBOUND_BYTES;
|
|
16
|
+
const MAX_INBOUND_HEADERS = EMAIL_MAX_INBOUND_HEADERS;
|
|
17
|
+
const MAX_REPLY_BYTES = EMAIL_MAX_REPLY_BYTES;
|
|
16
18
|
const EMAIL_STREAM_DEADLINE_MS = 15e3;
|
|
17
19
|
const EMAIL_ACTION_TERMINAL_BYTES = 5;
|
|
18
20
|
const actionEncoder = new TextEncoder();
|
|
@@ -78,7 +80,7 @@ var ParseEmailError = class extends Error {
|
|
|
78
80
|
* one-shot.
|
|
79
81
|
*/
|
|
80
82
|
async function parseEmail(message) {
|
|
81
|
-
if (message.rawSize >
|
|
83
|
+
if (message.rawSize > MAX_INBOUND_BYTES) throw new ParseEmailError("INBOUND_TOO_LARGE", `parseEmail: message size ${message.rawSize} bytes exceeds maximum of ${MAX_INBOUND_BYTES} bytes.`);
|
|
82
84
|
const { default: PostalMime } = await import("postal-mime");
|
|
83
85
|
const cached = proxyRawCache.get(message);
|
|
84
86
|
try {
|
|
@@ -135,12 +137,12 @@ function invalidForwardHeaders(cause) {
|
|
|
135
137
|
*/
|
|
136
138
|
function assertForwardHeadersWithinBounds(headers) {
|
|
137
139
|
const names = Object.keys(headers);
|
|
138
|
-
if (names.length >
|
|
140
|
+
if (names.length > MAX_FORWARD_HEADERS) throw new MimeError("MIME_ERROR", `forward: ${names.length} headers, over the ${MAX_FORWARD_HEADERS}-header limit.`);
|
|
139
141
|
for (const name of names) {
|
|
140
|
-
if (name.length >
|
|
142
|
+
if (name.length > MAX_FORWARD_HEADER_LENGTH) throw new MimeError("MIME_ERROR", `forward: header name is ${name.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
|
|
141
143
|
const value = headers[name];
|
|
142
144
|
if (typeof value !== "string") throw new MimeError("MIME_ERROR", `forward: header "${name.slice(0, 64)}" value is not a string.`);
|
|
143
|
-
if (value.length >
|
|
145
|
+
if (value.length > MAX_FORWARD_HEADER_LENGTH) throw new MimeError("MIME_ERROR", `forward: header "${name.slice(0, 64)}" value is ${value.length} characters, over the ${MAX_FORWARD_HEADER_LENGTH}-character limit.`);
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
/**
|
|
@@ -152,10 +154,9 @@ function assertForwardHeadersWithinBounds(headers) {
|
|
|
152
154
|
* The reason goes into the SMTP reply to the connecting client, and a
|
|
153
155
|
* handler may build it from the inbound message: a remote sender's CRLF is
|
|
154
156
|
* then a line injected into that reply, and a multi-megabyte reason is a
|
|
155
|
-
* transient-heap amplifier. The router already refuses both
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* clean here. NORMALIZED rather than refused, unlike the forward bounds
|
|
157
|
+
* transient-heap amplifier. The router already refuses both; normalizing at
|
|
158
|
+
* record time covers the native `setReject()` replay on your own account
|
|
159
|
+
* too. NORMALIZED rather than refused, unlike the forward bounds
|
|
159
160
|
* above: a reject is the handler's terminal decision, and throwing out of
|
|
160
161
|
* it would drop that decision and bounce the message as a dispatch error
|
|
161
162
|
* (see the `MAX_ACTIONS` note in `setReject`). Slice FIRST, then replace: a
|
|
@@ -431,7 +432,7 @@ function fitsHeaderLine(name, value) {
|
|
|
431
432
|
* Whether `value` carries a C0 control other than HTAB, or DEL. The
|
|
432
433
|
* sibling of `fitsHeaderLine` for the other way a remote-controlled id can
|
|
433
434
|
* be unrepresentable: a threading value is emitted verbatim, so a control
|
|
434
|
-
* inside it
|
|
435
|
+
* inside it would reach the reply's `In-Reply-To` / `References` line raw —
|
|
435
436
|
* `\x01` and DEL pass a WHATWG `Headers`, which refuses only CR, LF and
|
|
436
437
|
* NUL — and an RFC 5322 §3.6.4 `msg-id` is `dot-atom-text`, which admits no
|
|
437
438
|
* control at all. HTAB is not one here: it is the whitespace that separates
|
|
@@ -488,7 +489,7 @@ function dropControlIds(chain) {
|
|
|
488
489
|
* replacements below cost 66 bytes of heap per match, so at this size they
|
|
489
490
|
* cost at most 135 KB, and the reply's own `Subject` line is at most ~20 KB
|
|
490
491
|
* — 4096 code units x 3 UTF-8 octets, base64'd in 45-octet encoded-words
|
|
491
|
-
* with their framing — against a `MAX_MESSAGE_BYTES` of
|
|
492
|
+
* with their framing — against a `MAX_MESSAGE_BYTES` of 5 MiB, so the
|
|
492
493
|
* subject alone can never push the reply over the limit.
|
|
493
494
|
*/
|
|
494
495
|
const MAX_REPLY_SUBJECT_CHARS = 4096;
|
|
@@ -512,13 +513,11 @@ function prefixReplySubject(original) {
|
|
|
512
513
|
* `header_size_limit` discards header bytes past 100 KiB. A message-id is
|
|
513
514
|
* tens of characters, so 8 KiB carries a chain over a hundred replies deep
|
|
514
515
|
* with every id intact — an order of magnitude past any conversation — and
|
|
515
|
-
* a value this size, folded and encoded, is at most ~25 KB of a
|
|
516
|
+
* a value this size, folded and encoded, is at most ~25 KB of a 5 MiB
|
|
516
517
|
* reply, so the chain alone can never push the reply over the limit.
|
|
517
518
|
* Unbounded, it could: the inbound header can be the whole 10 MiB message,
|
|
518
|
-
* and
|
|
519
|
-
*
|
|
520
|
-
* `MAX_MESSAGE_BYTES`, and `buildMime` threw (measured: 10,777,129 bytes
|
|
521
|
-
* from a 10,485,557-character chain) for a reply the guide promises is sent.
|
|
519
|
+
* and short ids pass the line guard — every id folds — yet `foldHeader`'s
|
|
520
|
+
* continuations would put the rendered reply over `MAX_MESSAGE_BYTES`.
|
|
522
521
|
*
|
|
523
522
|
* Past the bound the NEWEST ids are kept, whole, and the parent's id still
|
|
524
523
|
* ends the chain. That is what a mail client threads on: it links the reply
|
|
@@ -733,4 +732,4 @@ async function enactEmailActions(message, actions) {
|
|
|
733
732
|
}
|
|
734
733
|
}
|
|
735
734
|
//#endregion
|
|
736
|
-
export {
|
|
735
|
+
export { createMessageProxy as a, isForwardableEmailMessage as c, bytesToReadableStream as i, parseEmail as l, MAX_INBOUND_HEADERS as n, defineEmail as o, ParseEmailError as r, enactEmailActions as s, MAX_INBOUND_BYTES as t, replyEmail as u };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as HeadDescriptor } from "./head-
|
|
1
|
+
import { n as HeadDescriptor } from "./head-C8K_iGe6.mjs";
|
|
2
2
|
import { r as AuthUser } from "./auth-DkcFflXV.mjs";
|
|
3
|
-
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-
|
|
3
|
+
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-CNAwjRcW.mjs";
|
|
4
4
|
import { t as QueueMap } from "./queues-BWKt1Xo4.mjs";
|
|
5
5
|
import { PluginConfig } from "@cloudflare/vite-plugin";
|
|
6
6
|
import { Plugin } from "vite";
|
|
@@ -49,6 +49,23 @@ export declare function shouldBindWorkersAi(command: string, needsAI: boolean, r
|
|
|
49
49
|
export declare function resolveWorkersAiBindingName(resolvedAi: unknown, configuredName?: string): string;
|
|
50
50
|
//#endregion
|
|
51
51
|
//#region src/index.d.ts
|
|
52
|
+
/**
|
|
53
|
+
* Void plugin — the main entry point.
|
|
54
|
+
*
|
|
55
|
+
* Composes:
|
|
56
|
+
* 1. Routing plugin (file-based routing from routes/ and middleware/)
|
|
57
|
+
* 2. Migration plugin (auto-apply .sql migrations on dev startup)
|
|
58
|
+
* 3. @cloudflare/vite-plugin (workerd runtime, HMR, builds)
|
|
59
|
+
*
|
|
60
|
+
* Binding inference runs synchronously here so results are available
|
|
61
|
+
* before the Cloudflare plugin initializes.
|
|
62
|
+
*
|
|
63
|
+
* The Cloudflare plugin reads Void's generated config and provides it to our
|
|
64
|
+
* config function. Bindings already defined there (with real IDs for
|
|
65
|
+
* production deployment) are preserved — we only add inferred bindings
|
|
66
|
+
* that are missing. This allows `vite build && wrangler deploy` to work
|
|
67
|
+
* for deploying directly to Cloudflare without the Void platform.
|
|
68
|
+
*/
|
|
52
69
|
export declare function voidPlugin(options?: {
|
|
53
70
|
persistTo?: string;
|
|
54
71
|
auxiliaryWorkers?: PluginConfig["auxiliaryWorkers"];
|