void 0.26.0 → 0.27.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/AGENTS_TEMPLATE.md +1 -3
- package/README.md +19 -9
- package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-l-FM7Ioq.mjs} +8 -7
- package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-D52yG7hl.mjs → auth-Dn2vw-SG.mjs} +9 -9
- package/dist/{auth-B60QDbjg.mjs → auth-LMJcNESe.mjs} +1 -1
- package/dist/{auth-link-DjeOptYi.mjs → auth-link-vz9Z2kmG.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BRxIuqDi.mjs → auth-router-DvsCUVw4.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-Ce3C8huo.mjs → build-cmd-D6we0VjO.mjs} +8 -7
- package/dist/{cache-CS8Yxr5a.mjs → cache-CZRdzKx1.mjs} +8 -8
- package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-CQ3NnMvf.mjs} +6 -5
- package/dist/{cf-access-YTlqvAsk.mjs → cf-access-BcIBSKqG.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/cf-user-agent-lKblH3zU.mjs +17 -0
- package/dist/cli/cli.mjs +48 -83
- package/dist/cli/cloudflare-operation-process.mjs +78 -78
- package/dist/cli/env-schema-probe.mjs +5 -6
- package/dist/{client-mC-dFGDD.mjs → client-DlDJuY0s.mjs} +30 -8
- package/dist/client-tso2OfcG.mjs +2 -0
- 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-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-DYa3coIk.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-H6EvP62X.mjs → connect-BfPBHHm-.mjs} +12 -11
- package/dist/{create-project-B2kk9Q0o.mjs → create-project-BdXEFKal.mjs} +7 -7
- package/dist/{create-project-Dbb4uiN-.mjs → create-project-qFDC45zg.mjs} +1 -1
- package/dist/{db-DpCKZto0.mjs → db-Xs80hcaA.mjs} +101 -133
- package/dist/{delete-CxlSvsvW.mjs → delete-d2vuou3j.mjs} +7 -7
- package/dist/{deploy-CeEbnv4b.mjs → deploy-Bqe1PYBw.mjs} +2351 -2497
- package/dist/deploy-VsWsVQkw.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-B_9VgOm6.mjs → domain-BsDUBAvt.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-BokHgjKj.mjs → email-_lGAHOhp.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-BdTc-K2L.mjs → env-C74QepDE.mjs} +10 -10
- package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +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/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
- package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
- package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-DaDdBbSS.mjs} +65 -164
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
- 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-Bv44e2tm.mjs → help-0bTe_lID.mjs} +13 -32
- package/dist/help-DfQYVfGY.mjs +2 -0
- package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
- package/dist/index.d.mts +19 -2
- package/dist/index.mjs +619 -532
- package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-BMf4T03q.mjs → init-DaBGmaXC.mjs} +161 -198
- package/dist/{link-BqYsSS_I.mjs → link-C6fjafep.mjs} +10 -10
- package/dist/{list-_kBToO-l.mjs → list-BTFBlqKl.mjs} +9 -8
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-DFuo-RWO.mjs → login-GKcNUmtI.mjs} +7 -7
- package/dist/login-mx_ydhmp.mjs +2 -0
- package/dist/{logs-DYgnh6dH.mjs → logs-BiMSULmc.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-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-DdY54Bgb.mjs → operator-args-DOBhIaIg.mjs} +10 -1
- package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-BEZ_u0Cz.mjs} +2 -2
- package/dist/{operator-client-BFqpp6z0.mjs → operator-client-DbDv4vtE.mjs} +2 -2
- package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-BT4hgavL.mjs} +24 -11
- package/dist/operator-cmd-CwBB-1yb.mjs +2 -0
- package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -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-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/platform-args-D4E1PjVw.mjs +2 -0
- package/dist/{platform-args-DSV2p4nY.mjs → platform-args-DUeXY9Om.mjs} +1 -1
- package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-CkSx3usH.mjs} +40 -36
- package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-BJimB_p9.mjs} +9 -8
- package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-BU6izFAU.mjs} +8 -7
- package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-BbY1dWiM.mjs} +14 -13
- package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-BbmJiq5O.mjs} +1 -1
- package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-DIYz8V63.mjs} +1 -1
- package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-CHVS6cV0.mjs} +6 -6
- package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-ByAlpkhV.mjs} +1 -1
- package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-DzCwqhFq.mjs} +76 -387
- package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-CBOT4BSM.mjs} +1 -1
- package/dist/{platform-management-BrF9STZp.mjs → platform-management-CuuVDhyt.mjs} +7 -7
- package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CN-heS4q.mjs} +5 -4
- package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-CskSJgLh.mjs} +3 -3
- package/dist/{platform-registry-P387v42A.mjs → platform-registry-Cjv2Qf0r.mjs} +5 -1
- package/dist/platform-setup-BBxRxmFC.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-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-DQstYTxO.mjs → project-BAm2aB6Q.mjs} +1 -1
- package/dist/{project-BiaPQ7ur.mjs → project-DedqCp59.mjs} +1 -1
- package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-DaoRrn-8.mjs} +19 -19
- package/dist/{project-team-Yiww3-go.mjs → project-team-Q_lCA7Io.mjs} +15 -18
- package/dist/{project-token-BrtT2NkY.mjs → project-token-BArgK9o1.mjs} +14 -17
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-KO9Hu2Pq.mjs} +12 -9
- package/dist/{protocol-BX8t2jiw.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-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
- package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-TIz_jtSu.mjs → requests-C7Oeoh5u.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-dBqICPzj.mjs → rollback-DVAtrLAl.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--2KF6Kua.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 +1 -1
- package/dist/runtime/ai.mjs +34 -95
- 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.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/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 +4 -81
- 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.mjs +2 -2
- 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/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
- package/dist/{secret-AKnNXNP5.mjs → secret-BvtB7IjY.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-B6WS9Aoz.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-ymhap6M_.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-C79j4aED.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 +5 -3
- 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/deployment.md +2 -2
- 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 +10 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
- 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 +3 -11
- 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/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +4 -2
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
- package/{skills/void/docs → docs}/guide/project-collaboration.md +7 -3
- 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 +2 -2
- 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/cli/auth.md +1 -6
- package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
- package/{skills/void/docs → docs}/reference/cli/deploy.md +1 -1
- 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 +1 -1
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
- 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/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 +1 -1
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +1 -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 +9 -5
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-BxVixJBI.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-qmiLE1G1.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-qCBwH3fZ.mjs +0 -2
- package/dist/help-Dw5f9Xrg.mjs +0 -2
- package/dist/login-D7meQg_3.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
- package/dist/plan-COtUvdMA.mjs +0 -2
- package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
- package/dist/prepare-BBknoZI1.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-voIltZrY.mjs +0 -2
- package/dist/validate-pna7R3Pv.mjs +0 -2
- 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/app-types.md +0 -0
- 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/database.md +8 -8
- 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/credentials.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/uninstall.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/resources.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/api.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/cli/platform.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -52,10 +52,8 @@ function rejectCRLF(field, value) {
|
|
|
52
52
|
* `rejectCRLF` is enough for a value `encodeWord` renders (the subject, a
|
|
53
53
|
* custom header value, a display name): anything outside printable ASCII
|
|
54
54
|
* sends the whole value into base64, so a control never reaches the wire.
|
|
55
|
-
* These three go through `quoteParam` or straight into the line, so
|
|
56
|
-
*
|
|
57
|
-
* captured as a success under `void dev` and by the test harness, and left
|
|
58
|
-
* for the receiving MTA to refuse.
|
|
55
|
+
* These three go through `quoteParam` or straight into the line, so a
|
|
56
|
+
* control would reach the wire for the receiving MTA to refuse.
|
|
59
57
|
*
|
|
60
58
|
* RFC 5322 §3.2.4 `qtext` is printable US-ASCII less `"` and `\`; a
|
|
61
59
|
* control inside a quoted-string is `obs-qtext`, which §4 says MUST NOT be
|
|
@@ -88,12 +86,9 @@ function isTokenChar(c) {
|
|
|
88
86
|
* `type "/" subtype *(";" parameter)`.
|
|
89
87
|
*
|
|
90
88
|
* `rejectControls` answers only for CTLs, and `buildAttachmentPart` writes
|
|
91
|
-
* the value verbatim ahead of its own `; name="…"`, so
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* reports `end of header inside quoted string` on that line and reads the
|
|
95
|
-
* builder's `name` parameter as the VALUE of `x`. `text` (no subtype),
|
|
96
|
-
* `text/plain; charset` (no value) and `text/plain;;` went the same way.
|
|
89
|
+
* the value verbatim ahead of its own `; name="…"`, so an unterminated
|
|
90
|
+
* quote such as `text/plain; x="` would swallow the builder's `name`
|
|
91
|
+
* parameter as the value of `x`.
|
|
97
92
|
*
|
|
98
93
|
* The grammar is the RFC's, read as a generator: a `token` is printable
|
|
99
94
|
* US-ASCII less SPACE and `tspecials`; a `value` is a `token` or a
|
|
@@ -170,10 +165,8 @@ function isAtext(c) {
|
|
|
170
165
|
*
|
|
171
166
|
* `rejectControls` answers only for CTLs, and `buildAttachmentPart` writes
|
|
172
167
|
* the value verbatim — adding `<` and `>` unless the value already starts
|
|
173
|
-
* with `<` — so
|
|
174
|
-
*
|
|
175
|
-
* captured as a success under `void dev` and by the harness, and left for
|
|
176
|
-
* the receiver to refuse or to fail the `cid:` reference against.
|
|
168
|
+
* with `<` — so a malformed id would reach the receiver and break the
|
|
169
|
+
* `cid:` reference.
|
|
177
170
|
*
|
|
178
171
|
* The grammar is the RFC's, read as a generator, with two deliberate
|
|
179
172
|
* differences. An `msg-id` is `"<" id-left "@" id-right ">"`, each side a
|
|
@@ -191,9 +184,7 @@ function isAtext(c) {
|
|
|
191
184
|
*
|
|
192
185
|
* Refused, then: whitespace of any kind, a second `@`, `<` or `>` anywhere
|
|
193
186
|
* but as that one pair, `"`, `(`, `)`, `,`, `;`, `:`, `\`, `[`, `]`,
|
|
194
|
-
* anything non-ASCII, and the empty string
|
|
195
|
-
* and then silently NOT rendered). Everything accepted renders exactly as
|
|
196
|
-
* it did.
|
|
187
|
+
* anything non-ASCII, and the empty string.
|
|
197
188
|
*
|
|
198
189
|
* One pass, no allocation, which is why this runs AFTER the value's length
|
|
199
190
|
* bound. The message names the rule and never echoes the value.
|
|
@@ -274,12 +265,7 @@ function fieldErrorCode(field) {
|
|
|
274
265
|
* `email-router.ts`), so there is exactly ONE address syntax in the tree:
|
|
275
266
|
* an action the framework records is never dropped by the router for its
|
|
276
267
|
* shape, and a test harness never captures as a success what the managed
|
|
277
|
-
* deployment would lose.
|
|
278
|
-
* per review round — the exactly-one-`@` rule, then every C0 control and
|
|
279
|
-
* DEL, then `:`, then a parity test against the router's own regex, which
|
|
280
|
-
* had drifted on the dot in the domain — and still admitted `a..b@x.com`,
|
|
281
|
-
* `.a@x.com` and `a@x..com`, which no dot-atom allows and every MTA
|
|
282
|
-
* refuses. One maintained rule on both sides ends that series.
|
|
268
|
+
* deployment would lose.
|
|
283
269
|
*
|
|
284
270
|
* What it enforces: at most 254 characters in total; an ASCII dot-atom
|
|
285
271
|
* local part of at most 64 characters (RFC 5322 §3.2.3 `atext`, dots only
|
|
@@ -315,9 +301,7 @@ function validateAddressParts(field, email, name) {
|
|
|
315
301
|
* `x` for any `x` (RFC 5322 §3.2.4 — `qtext` excludes `"` and `\`, so a
|
|
316
302
|
* quoted-string carries either only as a quoted-pair). The parsed name is
|
|
317
303
|
* the RAW text `formatAddress` will quote and escape again, so leaving the
|
|
318
|
-
* pairs in place
|
|
319
|
-
* `"Smith \\\"Bob\\\""` and the recipient saw `Smith \"Bob\"`, while the
|
|
320
|
-
* object form of the same name rendered correctly. Only the quoted branch
|
|
304
|
+
* pairs in place would escape them twice. Only the quoted branch
|
|
321
305
|
* of `parseAddress` calls this; a backslash in an unquoted name is a
|
|
322
306
|
* character like any other, as it is in the object form.
|
|
323
307
|
*
|
|
@@ -328,7 +312,7 @@ function validateAddressParts(field, email, name) {
|
|
|
328
312
|
* never bounded at all. Measured, 10 MiB of `\"` pairs peaked at 307 MB of
|
|
329
313
|
* heap that way and terminated a 128 MB isolate; this shape peaks at 49 MB.
|
|
330
314
|
* Same discipline as `to7bitBody`: one counting pass, a buffer of exactly
|
|
331
|
-
* the output size, one fill, and
|
|
315
|
+
* the output size, one fill, and one chunked `codeUnitsToString`.
|
|
332
316
|
* The common case — no backslash at all — is one scan and no allocation.
|
|
333
317
|
* The regex that admits the text guarantees every backslash is followed by
|
|
334
318
|
* a character, so the fill never reads past the end.
|
|
@@ -348,16 +332,13 @@ function unquotePairs(text) {
|
|
|
348
332
|
if (c === 92) c = text.charCodeAt(++i);
|
|
349
333
|
out[n++] = c;
|
|
350
334
|
}
|
|
351
|
-
|
|
352
|
-
const chunk = 32768;
|
|
353
|
-
for (let i = 0; i < n; i += chunk) s += String.fromCharCode(...out.subarray(i, i + chunk));
|
|
354
|
-
return s;
|
|
335
|
+
return codeUnitsToString(out);
|
|
355
336
|
}
|
|
356
337
|
/**
|
|
357
338
|
* Parse one address — a bare `email@domain` or `Display Name <email@domain>`
|
|
358
339
|
* — into its parts, throwing a `MimeError` for `field` on anything else.
|
|
359
|
-
* Exported so `void.
|
|
360
|
-
* runtime applies to `from` at send time.
|
|
340
|
+
* Exported so `void.config.ts` `email.from` is validated by the same rules
|
|
341
|
+
* the runtime applies to `from` at send time.
|
|
361
342
|
*/
|
|
362
343
|
function parseAddress(value, field) {
|
|
363
344
|
if (typeof value === "string") {
|
|
@@ -525,10 +506,9 @@ const ENCODED_WORD_PAYLOAD_BYTES = 45;
|
|
|
525
506
|
* Text longer than one word's payload becomes several encoded-words
|
|
526
507
|
* separated by a space, which `foldHeader` turns into CRLF + SPACE
|
|
527
508
|
* wherever a line would otherwise overrun (RFC 2047 §6.2: whitespace
|
|
528
|
-
* between adjacent encoded-words is dropped on decode either way).
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
* line limit, which nothing downstream repairs.
|
|
509
|
+
* between adjacent encoded-words is dropped on decode either way). This
|
|
510
|
+
* keeps each word under §2's 75-character ceiling and a long subject or
|
|
511
|
+
* display name under RFC 5322 §2.1.1's 998-octet line limit.
|
|
532
512
|
*/
|
|
533
513
|
function encodeWord(text) {
|
|
534
514
|
if (ASCII_PRINTABLE.test(text)) return text;
|
|
@@ -561,20 +541,14 @@ function encodeWord(text) {
|
|
|
561
541
|
* quoted-string`, and `atext` is everything printable EXCEPT these, so an
|
|
562
542
|
* ASCII name containing any of them must be rendered as one quoted-string.
|
|
563
543
|
* The class below lists the thirteen in the RFC's order so it can be checked
|
|
564
|
-
* against the production by eye.
|
|
565
|
-
*
|
|
566
|
-
* unreachable and a comma in a name split the address list; then the list
|
|
567
|
-
* itself lacked `.`, so `Dr. Smith <a@x.dev>` went out unquoted. That is
|
|
568
|
-
* `obs-phrase` (§4.1, `word *(word / "." / CFWS)`), which §4 says MUST NOT
|
|
569
|
-
* be generated, and a strict receiver flags it as obsolete syntax (Python's
|
|
570
|
-
* `email` parser: "period in 'phrase'"). Every conforming generator —
|
|
571
|
-
* Python's `email.headerregistry.Address`, for one — emits `"Dr. Smith"`.
|
|
544
|
+
* against the production by eye. `.` matters: an unquoted `Dr. Smith` is
|
|
545
|
+
* `obs-phrase` (§4.1), which §4 says MUST NOT be generated.
|
|
572
546
|
*/
|
|
573
547
|
const RFC5322_SPECIALS = /[()<>[\]:;@\\,."]/;
|
|
574
548
|
function formatAddress(addr) {
|
|
575
549
|
if (!addr.name) return addr.email;
|
|
576
550
|
if (!ASCII_PRINTABLE.test(addr.name)) return `${encodeWord(addr.name)} <${addr.email}>`;
|
|
577
|
-
if (RFC5322_SPECIALS.test(addr.name)) return `"${addr.name
|
|
551
|
+
if (RFC5322_SPECIALS.test(addr.name)) return `"${quoteParam(addr.name)}" <${addr.email}>`;
|
|
578
552
|
return `${addr.name} <${addr.email}>`;
|
|
579
553
|
}
|
|
580
554
|
function formatAddressList(addrs) {
|
|
@@ -596,13 +570,10 @@ function formatAddressList(addrs) {
|
|
|
596
570
|
* best a WSP-only fold rule allows (§3.2.2 permits folding only at WSP).
|
|
597
571
|
*
|
|
598
572
|
* One pass, and the only thing kept per input character is the folded
|
|
599
|
-
* output itself: each finished line is one flat string in `lines`.
|
|
600
|
-
*
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
* fold (a slice, an object and a cons-string node each), so a legal 3 MB
|
|
604
|
-
* subject of one-letter words terminated a 128 MB isolate. That was a
|
|
605
|
-
* per-TOKEN cost, invisible to any size projection: the message fit.
|
|
573
|
+
* output itself: each finished line is one flat string in `lines`. Any
|
|
574
|
+
* per-token allocation (a slice array, token objects, `out +=`) costs about
|
|
575
|
+
* 130 bytes of heap per token, so a legal 3 MB subject of one-letter words
|
|
576
|
+
* would terminate a 128 MB isolate even though the message fits.
|
|
606
577
|
*/
|
|
607
578
|
function foldHeader(name, value) {
|
|
608
579
|
const line = `${name}: ${value}`;
|
|
@@ -713,10 +684,9 @@ const HEADER_NAME_LINE_OVERHEAD = 1;
|
|
|
713
684
|
* fixed width — so a hit is always a header.
|
|
714
685
|
*
|
|
715
686
|
* One pass over the string, counting UTF-8 octets per CRLF-delimited line,
|
|
716
|
-
* with NO allocation
|
|
717
|
-
*
|
|
718
|
-
*
|
|
719
|
-
* ends a line, exactly as the split did; a bare CR or LF is content.
|
|
687
|
+
* with NO allocation: a `split(CRLF)` would hold one substring per line, and
|
|
688
|
+
* a legal body of pasted logs is millions of lines. Only a CRLF pair ends a
|
|
689
|
+
* line; a bare CR or LF is content.
|
|
720
690
|
*/
|
|
721
691
|
function findOverlongLine(text) {
|
|
722
692
|
let index = 0;
|
|
@@ -751,28 +721,16 @@ function findOverlongLine(text) {
|
|
|
751
721
|
* quoted-string comes from RFC 5322 §3.2.4).
|
|
752
722
|
*
|
|
753
723
|
* `qtext` excludes both `\\` and `"`, so each may appear only as a
|
|
754
|
-
* quoted-pair
|
|
755
|
-
*
|
|
756
|
-
* closing quote and leaves the parameter unterminated, and every embedded
|
|
757
|
-
* backslash is silently eaten by a conformant parser, so a Windows path
|
|
758
|
-
* `C:\\Users\\bob\\report.pdf` arrived as `C:Usersbobreport.pdf`. Measured,
|
|
759
|
-
* Python's `email.policy.default` and postal-mime both report
|
|
760
|
-
* `InvalidHeaderDefect: end of header inside quoted string` on the first
|
|
761
|
-
* case and disagree with a naive parser on the second.
|
|
724
|
+
* quoted-pair: a raw trailing backslash would escape the closing quote, and
|
|
725
|
+
* a conformant parser drops every other raw backslash.
|
|
762
726
|
*
|
|
763
727
|
* Backslash first, then quote — the other order would double-escape.
|
|
764
|
-
*
|
|
765
|
-
* Note this file's own `foldHeader` already tracks quoted-pairs when
|
|
766
|
-
* folding, so the emitter was contradicting the folder.
|
|
767
728
|
*/
|
|
768
729
|
function quoteParam(value) {
|
|
769
730
|
return value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
|
|
770
731
|
}
|
|
771
732
|
function base64(bytes) {
|
|
772
|
-
|
|
773
|
-
const chunk = 32768;
|
|
774
|
-
for (let i = 0; i < bytes.length; i += chunk) binary += String.fromCharCode(...bytes.subarray(i, i + chunk));
|
|
775
|
-
return btoa(binary);
|
|
733
|
+
return btoa(codeUnitsToString(bytes));
|
|
776
734
|
}
|
|
777
735
|
function base64Wrapped(bytes) {
|
|
778
736
|
const encoded = base64(bytes);
|
|
@@ -829,13 +787,13 @@ function quotedPrintable(text) {
|
|
|
829
787
|
}
|
|
830
788
|
flush(b);
|
|
831
789
|
}
|
|
832
|
-
return
|
|
790
|
+
return codeUnitsToString(out.subarray(0, n));
|
|
833
791
|
}
|
|
834
|
-
/**
|
|
835
|
-
function
|
|
792
|
+
/** One character per code unit, in 32K chunks to stay under the call-argument limit. */
|
|
793
|
+
function codeUnitsToString(units) {
|
|
836
794
|
let s = "";
|
|
837
795
|
const chunk = 32768;
|
|
838
|
-
for (let i = 0; i <
|
|
796
|
+
for (let i = 0; i < units.length; i += chunk) s += String.fromCharCode(...units.subarray(i, i + chunk));
|
|
839
797
|
return s;
|
|
840
798
|
}
|
|
841
799
|
/**
|
|
@@ -844,13 +802,9 @@ function bytesToAsciiString(bytes) {
|
|
|
844
802
|
* makes 998 octets the hard limit). Only LF and CRLF end a line; a bare CR
|
|
845
803
|
* is a control character like any other and forces the encoding.
|
|
846
804
|
*
|
|
847
|
-
* One pass over the string with NO allocation
|
|
848
|
-
*
|
|
849
|
-
*
|
|
850
|
-
* of the body plus one array slot and one substring per line, and a legal
|
|
851
|
-
* 6 MB body of millions of two-character lines needed 64 MB for the strip
|
|
852
|
-
* and another 24-40 MB for the split. Those are per-LINE costs, invisible
|
|
853
|
-
* to any size projection: the message fit.
|
|
805
|
+
* One pass over the string with NO allocation: a `replace`/`split` shape
|
|
806
|
+
* holds a copy of the body plus one substring per line, and a legal 6 MB
|
|
807
|
+
* body of millions of two-character lines needed about 100 MB that way.
|
|
854
808
|
*/
|
|
855
809
|
function needsQuotedPrintable(text) {
|
|
856
810
|
let lineLen = 0;
|
|
@@ -895,7 +849,7 @@ function to7bitBody(text) {
|
|
|
895
849
|
if (c === 10 && (i === 0 || text.charCodeAt(i - 1) !== 13)) out[n++] = 13;
|
|
896
850
|
out[n++] = c;
|
|
897
851
|
}
|
|
898
|
-
return
|
|
852
|
+
return codeUnitsToString(out);
|
|
899
853
|
}
|
|
900
854
|
/**
|
|
901
855
|
* Lower bound on the octets `text` will occupy in the rendered message, in
|
|
@@ -961,16 +915,14 @@ function makeBoundary(prefix) {
|
|
|
961
915
|
crypto.getRandomValues(bytes);
|
|
962
916
|
return `=_void_${prefix}_${base64(bytes).replace(/[+/=]/g, "")}`;
|
|
963
917
|
}
|
|
964
|
-
function wrapMultipart(type, parts
|
|
918
|
+
function wrapMultipart(type, parts) {
|
|
965
919
|
const boundary = makeBoundary(type);
|
|
966
|
-
const headerEntries = [["Content-Type", `multipart/${type}; boundary="${boundary}"`]];
|
|
967
|
-
for (const [k, v] of Object.entries(extra)) headerEntries.push([k, v]);
|
|
968
920
|
return {
|
|
969
|
-
headers:
|
|
921
|
+
headers: [["Content-Type", `multipart/${type}; boundary="${boundary}"`]],
|
|
970
922
|
body: parts.map((p) => `--${boundary}${CRLF}${renderPart(p)}`).join(CRLF) + `${CRLF}--${boundary}--${CRLF}`
|
|
971
923
|
};
|
|
972
924
|
}
|
|
973
|
-
const RESERVED_HEADERS = new Set([
|
|
925
|
+
const RESERVED_HEADERS = /* @__PURE__ */ new Set([
|
|
974
926
|
"from",
|
|
975
927
|
"to",
|
|
976
928
|
"cc",
|
|
@@ -985,7 +937,7 @@ const RESERVED_HEADERS = new Set([
|
|
|
985
937
|
"content-type",
|
|
986
938
|
"content-transfer-encoding",
|
|
987
939
|
"content-disposition"
|
|
988
|
-
]
|
|
940
|
+
]);
|
|
989
941
|
/**
|
|
990
942
|
* Lower bound on the octets one header VALUE occupies once `encodeWord` (or
|
|
991
943
|
* `formatAddress`, for a display name) and `foldHeader` have rendered it, in
|
|
@@ -1132,10 +1084,8 @@ const CUSTOM_HEADER_FRAMING_OCTETS = 4;
|
|
|
1132
1084
|
* empty values the names and the `: ` CRLF around each are the entire
|
|
1133
1085
|
* size, and the framing is exact once the name is counted (see
|
|
1134
1086
|
* `CUSTOM_HEADER_FRAMING_OCTETS`), so charging both cannot reject a
|
|
1135
|
-
* message that fits.
|
|
1136
|
-
*
|
|
1137
|
-
* zero, rendered in full and peaked at 121 MB of a 128 MB isolate; 100k
|
|
1138
|
-
* of them (50 MB) went to 169 MB.
|
|
1087
|
+
* message that fits. Uncharged, 60k empty headers with 500-character
|
|
1088
|
+
* names (a 30 MB message) would project to zero.
|
|
1139
1089
|
* - An attachment part: `normalizeAttachment` bounds ONE filename at under
|
|
1140
1090
|
* a kilobyte, not the sum, and a message is free to carry any number of
|
|
1141
1091
|
* parts, so the filename and the framing every part is wrapped in are
|
|
@@ -1145,7 +1095,7 @@ const CUSTOM_HEADER_FRAMING_OCTETS = 4;
|
|
|
1145
1095
|
* `rawText` and `raw` — and terminated a 128 MB isolate before the final
|
|
1146
1096
|
* size check could return `MIME_ERROR`.
|
|
1147
1097
|
*
|
|
1148
|
-
* The header COUNT is deliberately not bounded here. Each header
|
|
1098
|
+
* The header COUNT is deliberately not bounded here. Each header costs
|
|
1149
1099
|
* at least five octets (a one-character name, `: `, CRLF), so the count
|
|
1150
1100
|
* the projection can admit is finite, and past a few hundred thousand keys
|
|
1151
1101
|
* the caller's own object — measured at about 74 bytes per key, before
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-DPByhVck.mjs";
|
|
3
|
-
import { m as readConfig } from "./config-
|
|
4
|
-
import { r as getMiniflareDatabasePath } from "./runner
|
|
5
|
-
import {
|
|
6
|
-
import { r as resolveVoidAuthMigrationSchema } from "./drizzle-
|
|
7
|
-
import { n as applyPgAuthMigrations, r as applySqliteAuthMigrations, t as applyMySqlAuthMigrations } from "./auth-migrations-
|
|
3
|
+
import { m as readConfig } from "./config-DiowPT80.mjs";
|
|
4
|
+
import { r as getMiniflareDatabasePath } from "./runner-DMBKSrRk.mjs";
|
|
5
|
+
import { o as loadLocalEnv } from "./env-BxocywBB.mjs";
|
|
6
|
+
import { r as resolveVoidAuthMigrationSchema } from "./drizzle-CF84FOVM.mjs";
|
|
7
|
+
import { n as applyPgAuthMigrations, r as applySqliteAuthMigrations, t as applyMySqlAuthMigrations } from "./auth-migrations-BwHgeEsD.mjs";
|
|
8
8
|
//#region src/auth/node.ts
|
|
9
9
|
async function runLocalVoidAuthMigrations(root, dialect, persistRoot = join(root, ".void"), databaseId = "local", configPath = findVoidAuthConfig(root)) {
|
|
10
10
|
const authConfig = await loadVoidAuthConfig(configPath);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as OPERATOR_MAX_TIMEOUT_MS } from "./operator-client-
|
|
1
|
+
import { t as OPERATOR_MAX_TIMEOUT_MS } from "./operator-client-DbDv4vtE.mjs";
|
|
2
2
|
//#region src/cli/operator-args.ts
|
|
3
3
|
const operatorCommands = [
|
|
4
4
|
{
|
|
@@ -366,6 +366,15 @@ const operatorCommands = [
|
|
|
366
366
|
values: { cursor: "Opaque cursor returned by --plan" },
|
|
367
367
|
method: "POST"
|
|
368
368
|
},
|
|
369
|
+
{
|
|
370
|
+
group: "system",
|
|
371
|
+
action: "rotate-proxy-tokens",
|
|
372
|
+
description: "Rotate project proxy tokens on tenant Workers",
|
|
373
|
+
path: "/system/rotate-proxy-tokens",
|
|
374
|
+
values: { project: "Project ID" },
|
|
375
|
+
booleans: ["all"],
|
|
376
|
+
method: "POST"
|
|
377
|
+
},
|
|
369
378
|
{
|
|
370
379
|
group: "email",
|
|
371
380
|
action: "policy",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as deleteKeyringPassword, T as writeKeyringPassword, c as normalizePlatformApiUrl, i as getActivePlatformConnection, r as findPlatformConnections, u as platformCredentialAccount, w as readKeyringPassword } from "./platform-registry-
|
|
2
|
-
import { n as OperatorClient, r as OperatorClientError } from "./operator-client-
|
|
1
|
+
import { C as deleteKeyringPassword, T as writeKeyringPassword, c as normalizePlatformApiUrl, i as getActivePlatformConnection, r as findPlatformConnections, u as platformCredentialAccount, w as readKeyringPassword } from "./platform-registry-Cjv2Qf0r.mjs";
|
|
2
|
+
import { n as OperatorClient, r as OperatorClientError } from "./operator-client-DbDv4vtE.mjs";
|
|
3
3
|
/** Operator authority never comes from repository-controlled metadata. */
|
|
4
4
|
function resolveOperatorOrigin(connection = "") {
|
|
5
5
|
if (connection) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as normalizePlatformApiUrl } from "./platform-registry-
|
|
1
|
+
import { c as normalizePlatformApiUrl } from "./platform-registry-Cjv2Qf0r.mjs";
|
|
2
2
|
import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
|
|
3
|
-
import { t as ensureCloudflaredToken } from "./cf-access-
|
|
3
|
+
import { t as ensureCloudflaredToken } from "./cf-access-BcIBSKqG.mjs";
|
|
4
4
|
const OPERATOR_MAX_TIMEOUT_MS = 36e5;
|
|
5
5
|
var OperatorClientError = class extends Error {
|
|
6
6
|
code;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { d as printSuccess, f as sanitizeTerminalText } from "./output-C50ag2r3.mjs";
|
|
2
|
+
import { n as OperatorClient, r as OperatorClientError } from "./operator-client-DbDv4vtE.mjs";
|
|
3
|
+
import { a as resolveOperatorOrigin, i as removeOperatorToken, n as readOperatorApiTokenStdin, o as saveOperatorToken, r as readOperatorToken, t as exchangeOperatorSession } from "./operator-auth-BEZ_u0Cz.mjs";
|
|
3
4
|
import { createHash } from "node:crypto";
|
|
4
5
|
import { setTimeout } from "node:timers/promises";
|
|
5
6
|
import { createInterface } from "node:readline/promises";
|
|
@@ -8,8 +9,8 @@ const MAX_RUNTIME_FOLLOW_ROWS = 1e4;
|
|
|
8
9
|
const BUILD_LOG_DRAIN_TIMEOUT_MS = 12e4;
|
|
9
10
|
function printable(value) {
|
|
10
11
|
if (value === null || value === void 0) return "—";
|
|
11
|
-
if (typeof value === "string") return value
|
|
12
|
-
if (typeof value === "object") return JSON.stringify(value);
|
|
12
|
+
if (typeof value === "string") return sanitizeTerminalText(value);
|
|
13
|
+
if (typeof value === "object") return sanitizeTerminalText(JSON.stringify(value));
|
|
13
14
|
return String(value);
|
|
14
15
|
}
|
|
15
16
|
function table(rows, indent) {
|
|
@@ -73,6 +74,13 @@ function humanLines(value, indent = "") {
|
|
|
73
74
|
function output(value, json) {
|
|
74
75
|
console.log(json ? JSON.stringify(value) : humanLines(value).join("\n"));
|
|
75
76
|
}
|
|
77
|
+
function outputMutation(result, args) {
|
|
78
|
+
output(result, args.json);
|
|
79
|
+
const configuration = result.configuration;
|
|
80
|
+
const project = result.project;
|
|
81
|
+
if (args.json || result.ok === false || result.partial === true || result.complete === false || result.error || result.operationStatus && result.operationStatus !== "completed" || configuration?.status && configuration.status !== "ready" && configuration.status !== "disabled" || project?.state === "reconciling" || project?.state === "error" || project?.last_error) return;
|
|
82
|
+
printSuccess(`Platform ${args.group} ${args.action} completed.`);
|
|
83
|
+
}
|
|
76
84
|
function outputLogs(result, json) {
|
|
77
85
|
if (json) {
|
|
78
86
|
output(result, true);
|
|
@@ -155,9 +163,9 @@ async function runAuth(origin, args) {
|
|
|
155
163
|
if (args.action === "login" || args.action === "token" && args.tokenStdin) {
|
|
156
164
|
if (!args.tokenStdin && !process.stdin.isTTY) throw new OperatorClientError("Browser login requires an interactive terminal. Use --token-stdin to exchange an API session.", "interactive_login_required");
|
|
157
165
|
const apiToken = args.tokenStdin ? await readOperatorApiTokenStdin() : await (async () => {
|
|
158
|
-
const { discoverPlatform } = await import("./platform-cmd-
|
|
159
|
-
const { selectPlatformLoginMethod } = await import("./login-
|
|
160
|
-
const { runPlatformLogin } = await import("./auth-
|
|
166
|
+
const { discoverPlatform } = await import("./platform-cmd-BbmJiq5O.mjs");
|
|
167
|
+
const { selectPlatformLoginMethod } = await import("./login-mx_ydhmp.mjs");
|
|
168
|
+
const { runPlatformLogin } = await import("./auth-LMJcNESe.mjs");
|
|
161
169
|
return runPlatformLogin(origin, (await selectPlatformLoginMethod(await discoverPlatform(origin), args.providerExplicit ? args.provider : void 0)).id, (url) => process.stderr.write(`Sign in at ${url}\n`));
|
|
162
170
|
})();
|
|
163
171
|
const session = await exchangeOperatorSession(origin, apiToken);
|
|
@@ -174,6 +182,7 @@ async function runAuth(origin, args) {
|
|
|
174
182
|
origin,
|
|
175
183
|
...identity
|
|
176
184
|
}, args.json);
|
|
185
|
+
if (!args.json) printSuccess("Signed in to platform administration.");
|
|
177
186
|
}
|
|
178
187
|
return;
|
|
179
188
|
}
|
|
@@ -194,6 +203,7 @@ async function runAuth(origin, args) {
|
|
|
194
203
|
ok: true,
|
|
195
204
|
...process.env.VOID_OPERATOR_TOKEN ? { message: "Operator session revoked. Unset VOID_OPERATOR_TOKEN in your shell." } : {}
|
|
196
205
|
}, args.json);
|
|
206
|
+
if (!args.json) printSuccess("Signed out of platform administration.");
|
|
197
207
|
} else {
|
|
198
208
|
const session = await client.request("/session");
|
|
199
209
|
if (args.action === "token") {
|
|
@@ -320,7 +330,10 @@ async function migrateDeploymentAssets(client, origin, args) {
|
|
|
320
330
|
result
|
|
321
331
|
});
|
|
322
332
|
output(result, args.json);
|
|
323
|
-
if (result.complete)
|
|
333
|
+
if (result.complete) {
|
|
334
|
+
if (!args.json) printSuccess("Deployment assets migrated.");
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
324
337
|
const cursor = nextCursor;
|
|
325
338
|
seenCursors.add(cursor);
|
|
326
339
|
body = {
|
|
@@ -331,7 +344,7 @@ async function migrateDeploymentAssets(client, origin, args) {
|
|
|
331
344
|
}
|
|
332
345
|
async function runOperatorCommand(args) {
|
|
333
346
|
if (!args.action) {
|
|
334
|
-
const { printHelpPage } = await import("./help-
|
|
347
|
+
const { printHelpPage } = await import("./help-DfQYVfGY.mjs");
|
|
335
348
|
printHelpPage(["platform", args.group]);
|
|
336
349
|
return;
|
|
337
350
|
}
|
|
@@ -370,11 +383,11 @@ async function runOperatorCommand(args) {
|
|
|
370
383
|
...args.group === "project" && args.action === "normalize" ? { expected: preview.changes } : {},
|
|
371
384
|
...recoveryFence
|
|
372
385
|
};
|
|
373
|
-
|
|
386
|
+
outputMutation(await client.request(args.path, {
|
|
374
387
|
method: "POST",
|
|
375
388
|
body,
|
|
376
389
|
timeoutMs: args.timeoutMs
|
|
377
|
-
}), args
|
|
390
|
+
}), args);
|
|
378
391
|
} else if (args.follow) await followOperatorLogs(client, args);
|
|
379
392
|
else {
|
|
380
393
|
const result = await client.request(args.path, { query: args.query });
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { n as __toESM } from "./rolldown-runtime-DXIUcv95.mjs";
|
|
2
2
|
import { t as require_picocolors } from "./picocolors-BTps1_gs.mjs";
|
|
3
|
-
import { B as note$1, L as log, P as isCI, nt as settings, q as spinner } from "./
|
|
3
|
+
import { B as note$1, H as outro, L as log, P as isCI, nt as settings, q as spinner } from "./dist-D3m88sjf.mjs";
|
|
4
|
+
import { stripVTControlCharacters } from "node:util";
|
|
4
5
|
//#region src/cli/output.ts
|
|
5
6
|
var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
|
|
7
|
+
/** Complete an action with the same spacing, checkmark, and color on every target. */
|
|
8
|
+
function printSuccess(message) {
|
|
9
|
+
outro(`\n${import_picocolors.default.green(`✓ ${stripVTControlCharacters(message)}`)}`, { withGuide: false });
|
|
10
|
+
}
|
|
6
11
|
function formatCount(count, singular, plural = `${singular}s`) {
|
|
7
12
|
return `${count} ${count === 1 ? singular : plural}`;
|
|
8
13
|
}
|
|
@@ -109,5 +114,18 @@ function ensureUtc(s) {
|
|
|
109
114
|
if (s.lastIndexOf("-") > 9) return s;
|
|
110
115
|
return s + "Z";
|
|
111
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Stack frames of an error a Worker reported, one line per frame. The log or
|
|
119
|
+
* exception line already shows `Name: message`, so a leading copy of that
|
|
120
|
+
* header is dropped; Workers send stacks both with and without it.
|
|
121
|
+
*/
|
|
122
|
+
function errorStackFrames(error) {
|
|
123
|
+
if (!error || typeof error !== "object") return [];
|
|
124
|
+
const { name, message, stack } = error;
|
|
125
|
+
if (typeof stack !== "string") return [];
|
|
126
|
+
const header = message ? `${String(name)}: ${String(message)}` : String(name);
|
|
127
|
+
const frames = stack === header ? "" : stack.startsWith(`${header}\n`) ? stack.slice(header.length + 1) : stack;
|
|
128
|
+
return frames.trimEnd() ? frames.trimEnd().split("\n") : [];
|
|
129
|
+
}
|
|
112
130
|
//#endregion
|
|
113
|
-
export { ensureUtc as a,
|
|
131
|
+
export { ensureUtc as a, helpLine as c, printSuccess as d, sanitizeTerminalText as f, dim as i, import_picocolors as l, tablePrefix as m, cliCommandName as n, errorStackFrames as o, sectionTitle as p, createSpinner as r, formatCount as s, categoryTitle as t, note as u };
|
package/dist/pages/client.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { t as
|
|
1
|
+
import { t as interpolateRouteParams } from "../route-url-BgPja1GS.mjs";
|
|
2
|
+
import { t as PageObject } from "../protocol-BPZaNqBo.mjs";
|
|
2
3
|
import { n as CacheForInput, r as CacheForResult } from "../prefetch-Ce6la4EI.mjs";
|
|
3
4
|
import { UsageLimitData } from "@void/edge";
|
|
4
5
|
import { ActionUrl, ResolveActionBody, ResolveActionParams } from "void/routes";
|
|
@@ -33,7 +34,7 @@ type PageComponentModule = {
|
|
|
33
34
|
default: unknown;
|
|
34
35
|
};
|
|
35
36
|
type PageData = PageObject;
|
|
36
|
-
type VisitOptions
|
|
37
|
+
type VisitOptions = {
|
|
37
38
|
method?: string;
|
|
38
39
|
data?: unknown;
|
|
39
40
|
preserveScroll?: boolean;
|
|
@@ -50,7 +51,7 @@ type VisitOptions$1 = {
|
|
|
50
51
|
/** @internal Used by popstate handler to avoid writing history while traversing */
|
|
51
52
|
_popstate?: boolean;
|
|
52
53
|
};
|
|
53
|
-
type PrefetchOptions
|
|
54
|
+
type PrefetchOptions = {
|
|
54
55
|
method?: string;
|
|
55
56
|
cacheFor?: CacheForInput;
|
|
56
57
|
};
|
|
@@ -88,7 +89,7 @@ type PageNavigationResource = {
|
|
|
88
89
|
fetchUrl: string;
|
|
89
90
|
hash: string;
|
|
90
91
|
method: string;
|
|
91
|
-
options: VisitOptions
|
|
92
|
+
options: VisitOptions;
|
|
92
93
|
immediate: boolean;
|
|
93
94
|
shell: Promise<PageNavigationResult | undefined>;
|
|
94
95
|
abort(): void;
|
|
@@ -100,17 +101,25 @@ type PageNavigationEngine = {
|
|
|
100
101
|
initialPageData: PageData;
|
|
101
102
|
initialComponent: unknown;
|
|
102
103
|
initialLayouts: Array<unknown>;
|
|
103
|
-
prepareVisit(url: string, options?: VisitOptions
|
|
104
|
-
prefetch(url: string, options?: PrefetchOptions
|
|
104
|
+
prepareVisit(url: string, options?: VisitOptions): PageNavigationResource;
|
|
105
|
+
prefetch(url: string, options?: PrefetchOptions): Promise<unknown>;
|
|
105
106
|
flush(url: string, method?: string): void;
|
|
106
107
|
flushAll(): void;
|
|
107
|
-
setPopStateHandler(handler: (url: string, options: VisitOptions
|
|
108
|
+
setPopStateHandler(handler: (url: string, options: VisitOptions) => void): void;
|
|
108
109
|
start(): void;
|
|
109
110
|
/** Called after the adapter commits the initial page DOM. */
|
|
110
111
|
commitInitialRender(): void;
|
|
111
112
|
};
|
|
113
|
+
export declare function isFile(value: unknown): boolean;
|
|
114
|
+
export declare function hasFiles(data: unknown): boolean;
|
|
115
|
+
export declare function objectToFormData(source: Record<string, unknown>, form?: FormData, parentKey?: string): FormData;
|
|
112
116
|
export declare function createPageNavigationEngine(config: PageNavigationEngineConfig): Promise<PageNavigationEngine>;
|
|
113
117
|
//#endregion
|
|
118
|
+
//#region src/pages/adapter-helpers.d.ts
|
|
119
|
+
export declare function getValidationErrors(body: unknown): Record<string, string> | null;
|
|
120
|
+
export declare function mergeDataIntoHref(href: string, data?: Record<string, unknown>): string;
|
|
121
|
+
export declare function isModifiedEvent(e: Pick<MouseEvent, "currentTarget" | "ctrlKey" | "metaKey" | "shiftKey" | "altKey" | "button">): boolean;
|
|
122
|
+
//#endregion
|
|
114
123
|
//#region src/pages/form-value-equality.d.ts
|
|
115
124
|
export declare function isEqualFormValue(a: unknown, b: unknown): boolean;
|
|
116
125
|
//#endregion
|
|
@@ -128,27 +137,6 @@ export declare function formSubmissionBlocked(form: Pick<FormModel, "pending" |
|
|
|
128
137
|
export declare function scheduleFormRetry(error: VoidActionError | null, ready: () => void): () => void;
|
|
129
138
|
//#endregion
|
|
130
139
|
//#region src/pages/client.d.ts
|
|
131
|
-
export type VisitOptions = {
|
|
132
|
-
method?: string;
|
|
133
|
-
data?: unknown;
|
|
134
|
-
preserveScroll?: boolean;
|
|
135
|
-
preserveState?: boolean;
|
|
136
|
-
replace?: boolean;
|
|
137
|
-
viewTransition?: boolean;
|
|
138
|
-
/** @internal Used by React Actions to avoid waiting for a commit blocked by the action itself. */
|
|
139
|
-
_resolveOnShell?: boolean;
|
|
140
|
-
/** @internal Used by popstate handler to pass saved scroll position */
|
|
141
|
-
_scrollPosition?: {
|
|
142
|
-
x: number;
|
|
143
|
-
y: number;
|
|
144
|
-
} | null;
|
|
145
|
-
/** @internal Used by popstate handler to avoid writing history while traversing */
|
|
146
|
-
_popstate?: boolean;
|
|
147
|
-
};
|
|
148
|
-
export type PrefetchOptions = {
|
|
149
|
-
method?: string;
|
|
150
|
-
cacheFor?: CacheForInput;
|
|
151
|
-
};
|
|
152
140
|
export type NavigationStateType = "idle" | "loading" | "submitting";
|
|
153
141
|
export type NavigationMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
154
142
|
export type NavigationState = {
|
|
@@ -168,39 +156,19 @@ export type VoidRouter = {
|
|
|
168
156
|
flush(url: string | URL, method?: string): void;
|
|
169
157
|
flushAll(): void;
|
|
170
158
|
};
|
|
171
|
-
export type VoidRouterAdapter = {
|
|
172
|
-
createDeferred(): unknown;
|
|
173
|
-
resolveDeferred(ref: unknown, value: unknown): unknown;
|
|
174
|
-
rejectDeferred(ref: unknown, error: string): unknown;
|
|
175
|
-
isLoading(ref: unknown): boolean;
|
|
159
|
+
export type VoidRouterAdapter = VoidRouterAdapter$1 & {
|
|
176
160
|
applyUpdate(pageData: PageData, component: unknown, layouts: Array<unknown>, options: {
|
|
177
161
|
preserveState: boolean;
|
|
178
162
|
}): void | Promise<void>;
|
|
179
|
-
onDeferredUpdate?(props: Record<string, unknown>): void;
|
|
180
163
|
};
|
|
181
|
-
export type VoidRouterConfig = {
|
|
164
|
+
export type VoidRouterConfig = Omit<PageNavigationEngineConfig, "adapter"> & {
|
|
182
165
|
adapter: VoidRouterAdapter;
|
|
183
|
-
components: Record<string, () => Promise<PageComponentModule>>;
|
|
184
|
-
layoutTree: Record<string, Array<string>>;
|
|
185
|
-
routeMeta: Record<string, {
|
|
186
|
-
island?: boolean;
|
|
187
|
-
}>;
|
|
188
|
-
matchRoute(url: string): string | null;
|
|
189
|
-
staticPageData?: boolean;
|
|
190
|
-
staticPageDataFastPath?: boolean;
|
|
191
|
-
viewTransitions: boolean;
|
|
192
|
-
prefetchHoverDelay: number;
|
|
193
|
-
prefetchDefaultCacheFor: CacheForResult;
|
|
194
|
-
cacheVisitedPageData?: boolean;
|
|
195
166
|
onRouteChange?(url: string): void;
|
|
196
167
|
onNavigationChange?(navigation: NavigationState): void;
|
|
197
168
|
};
|
|
198
169
|
export declare function idleNavigationState(): NavigationState;
|
|
199
170
|
export declare function createRouterFacade(router: VoidRouter, getCurrentUrl: () => string, getCurrentParams?: () => Record<string, string>): VoidRouter;
|
|
200
171
|
export declare function createSsrRouter(url?: string, params?: Record<string, string>): VoidRouter;
|
|
201
|
-
export declare function isFile(value: unknown): boolean;
|
|
202
|
-
export declare function hasFiles(data: unknown): boolean;
|
|
203
|
-
export declare function objectToFormData(source: Record<string, unknown>, form?: FormData, parentKey?: string): FormData;
|
|
204
172
|
export declare const ssrProxy: VoidRouter;
|
|
205
173
|
export declare function submitAction(router: VoidRouter, url: string, options: VisitOptions): Promise<ActionResult>;
|
|
206
174
|
type ActionMethod = "POST" | "PUT" | "PATCH" | "DELETE";
|
|
@@ -230,4 +198,4 @@ export declare function createVoidRouter(config: VoidRouterConfig): Promise<{
|
|
|
230
198
|
export declare function scheduleHydration(el: Element, loader: () => Promise<unknown>, props: Record<string, unknown>, strategy: string, hydrateFn: (el: Element, mod: unknown, props: Record<string, unknown>) => void | Promise<void>): void;
|
|
231
199
|
export declare function initIslands(islands: Record<string, () => Promise<unknown>>, hydrateFn: (el: Element, mod: unknown, props: Record<string, unknown>) => void | Promise<void>): void;
|
|
232
200
|
//#endregion
|
|
233
|
-
export type
|
|
201
|
+
export { type ActionErrorHandlingScope, type ActionResult, type FormMethod, type FormModel, type PageNavigationEngine, type PageNavigationResource, type PageNavigationResult, type PrefetchOptions, type VisitOptions, interpolateRouteParams };
|