void 0.10.12 → 0.20.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 +6 -0
- package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
- package/README.md +34 -8
- package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
- package/dist/auth-W9WII-mN.mjs +630 -0
- package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
- package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
- package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
- package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
- package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
- package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
- package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
- package/dist/cf-access-AJ1ehiFR.mjs +42 -0
- package/dist/cf-access-DsSsZUPr.mjs +67 -0
- package/dist/cli/cli.d.mts +1 -1
- package/dist/cli/cli.mjs +1592 -153
- package/dist/cli/env-schema-probe.d.mts +48 -61
- package/dist/cli/env-schema-probe.mjs +10 -58
- package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
- package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
- package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
- package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
- package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
- package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
- package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
- package/dist/connect-D9Yr-T5f.mjs +79 -0
- package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
- package/dist/database-provider.d.mts +21 -0
- package/dist/database-provider.mjs +6 -0
- package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
- package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
- package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
- package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
- package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
- package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
- package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
- package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
- package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
- package/dist/dotenv-VQxupEUv.mjs +181 -0
- package/dist/edge.d.mts +2 -0
- package/dist/edge.mjs +2 -0
- package/dist/email-Ce6SQq-i.mjs +182 -0
- package/dist/email-r6DHJyAB.mjs +262 -0
- package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
- package/dist/env-D4Emu-M_.mjs +95 -0
- package/dist/env-DmU2To0C.mjs +73 -0
- package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
- package/dist/env-public-D_6u46fX.d.mts +135 -0
- package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
- package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
- package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
- package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
- package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
- package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
- package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
- package/dist/inbound-BJ70in1n.d.mts +354 -0
- package/dist/inbound-CNKxb3FY.mjs +694 -0
- package/dist/index.d.mts +61 -34
- package/dist/index.mjs +1048 -321
- package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
- package/dist/link-D_rm5sRH.mjs +52 -0
- package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
- package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
- package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
- package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
- package/dist/mime-BJD7d_qL.mjs +1216 -0
- package/dist/neon-DHwd2zvC.mjs +54 -0
- package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
- package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
- package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
- package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
- package/dist/pages/client.d.mts +43 -41
- package/dist/pages/client.mjs +40 -33
- package/dist/pages/head-client.d.mts +10 -12
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/index.d.mts +37 -14
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.d.mts +25 -27
- package/dist/pages/islands-plugin.mjs +6 -4
- package/dist/pages/prefetch.d.mts +6 -7
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -1
- package/dist/pages/serialize.d.mts +7 -8
- package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
- package/dist/platform-domain-BszUfiS8.mjs +228 -0
- package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
- package/dist/platform-management-W30iCaTL.mjs +698 -0
- package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
- package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
- package/dist/prepare-BfJvFUtJ.mjs +14 -0
- package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
- package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
- package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
- package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
- package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
- package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
- package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
- package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
- package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
- package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
- package/dist/rollback-CtlPXEBi.mjs +166 -0
- package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
- package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
- package/dist/routes-stub.d.mts +22 -23
- package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
- package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
- package/dist/runtime/ai.d.mts +21 -14
- package/dist/runtime/ai.mjs +5 -4
- package/dist/runtime/auth-client-react.d.mts +3 -5
- package/dist/runtime/auth-client-solid.d.mts +3 -5
- package/dist/runtime/auth-client-svelte.d.mts +3 -5
- package/dist/runtime/auth-client-vue.d.mts +3 -5
- package/dist/runtime/auth-client.d.mts +3 -5
- package/dist/runtime/auth.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.d.mts +10 -0
- package/dist/runtime/better-auth-mysql.mjs +49 -0
- package/dist/runtime/better-auth-pg.d.mts +8 -9
- package/dist/runtime/better-auth-pg.mjs +2 -2
- package/dist/runtime/better-auth.d.mts +8 -9
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +1 -1
- package/dist/runtime/client-solid.d.mts +1 -1
- package/dist/runtime/client-svelte.d.mts +1 -1
- package/dist/runtime/client-vue.d.mts +1 -1
- package/dist/runtime/client.d.mts +1 -1
- package/dist/runtime/db-mysql.d.mts +2 -0
- package/dist/runtime/db-mysql.mjs +1 -0
- package/dist/runtime/db.d.mts +10 -11
- package/dist/runtime/durable.d.mts +47 -0
- package/dist/runtime/durable.mjs +146 -0
- package/dist/runtime/email/testing.d.mts +112 -0
- package/dist/runtime/email/testing.mjs +283 -0
- package/dist/runtime/email.d.mts +30 -0
- package/dist/runtime/email.mjs +573 -0
- package/dist/runtime/env-helpers.d.mts +2 -2
- package/dist/runtime/env-helpers.mjs +5 -42
- package/dist/runtime/env-public-client.d.mts +10 -11
- package/dist/runtime/env-public-client.mjs +1 -1
- package/dist/runtime/env-public.d.mts +2 -2
- package/dist/runtime/env-public.mjs +104 -49
- package/dist/runtime/env.d.mts +19 -18
- package/dist/runtime/env.mjs +15 -2
- package/dist/runtime/fetch-stream.d.mts +20 -21
- package/dist/runtime/fetch.d.mts +15 -16
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/isr.d.mts +21 -22
- package/dist/runtime/isr.mjs +26 -8
- package/dist/runtime/kv.d.mts +9 -10
- package/dist/runtime/live-client.d.mts +5 -7
- package/dist/runtime/live-client.mjs +9 -7
- package/dist/runtime/live-server.d.mts +4 -5
- package/dist/runtime/live.d.mts +22 -24
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/log.d.mts +16 -17
- package/dist/runtime/migration-handler-mysql.d.mts +4 -0
- package/dist/runtime/migration-handler-mysql.mjs +81 -0
- package/dist/runtime/migration-handler-pg.d.mts +2 -4
- package/dist/runtime/migration-handler.d.mts +5 -6
- package/dist/runtime/migration-handler.mjs +4 -3
- package/dist/runtime/queues.d.mts +3 -4
- package/dist/runtime/queues.mjs +2 -1
- package/dist/runtime/remote/binding-handler.d.mts +10 -12
- package/dist/runtime/remote/binding-handler.mjs +24 -3
- package/dist/runtime/remote/index.d.mts +5 -6
- package/dist/runtime/remote/index.mjs +21 -18
- package/dist/runtime/response.d.mts +10 -11
- package/dist/runtime/sandbox.d.mts +56 -55
- package/dist/runtime/sandbox.mjs +57 -49
- package/dist/runtime/schema-mysql.d.mts +1 -0
- package/dist/runtime/schema-mysql.mjs +2 -0
- package/dist/runtime/seed.d.mts +14 -9
- package/dist/runtime/sse-client.d.mts +6 -7
- package/dist/runtime/sse.d.mts +11 -12
- package/dist/runtime/storage.d.mts +3 -4
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +12 -12
- package/dist/runtime/ws-server.mjs +32 -4
- package/dist/runtime/ws.d.mts +19 -21
- package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
- package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
- package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
- package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
- package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
- package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
- package/dist/sveltekit.d.mts +12 -11
- package/dist/sveltekit.mjs +1 -1
- package/dist/types-BAp5AEBU.d.mts +79 -0
- package/dist/types-CKWnYgfy.d.mts +1 -0
- package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
- package/dist/wrangler--imS8n0d.mjs +1796 -0
- package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
- package/package.json +79 -65
- package/schema.json +35 -3
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
- package/skills/void/SKILL.md +59 -2
- package/skills/void/docs/guide/ai.md +32 -14
- package/skills/void/docs/guide/app-types.md +6 -6
- package/skills/void/docs/guide/auth.md +14 -16
- package/skills/void/docs/guide/database/d1.md +6 -0
- package/skills/void/docs/guide/database/mysql.md +60 -0
- package/skills/void/docs/guide/database/postgresql.md +14 -9
- package/skills/void/docs/guide/database.md +39 -26
- package/skills/void/docs/guide/deployment.md +163 -22
- package/skills/void/docs/guide/durable-state.md +140 -0
- package/skills/void/docs/guide/edge/headers.md +5 -5
- package/skills/void/docs/guide/edge/prerendering.md +2 -0
- package/skills/void/docs/guide/edge/revalidation.md +21 -6
- package/skills/void/docs/guide/edge/rewrites.md +18 -14
- package/skills/void/docs/guide/edge/static-assets.md +23 -8
- package/skills/void/docs/guide/email.md +609 -0
- package/skills/void/docs/guide/env-migration.md +109 -0
- package/skills/void/docs/guide/env-vars.md +70 -248
- package/skills/void/docs/guide/index.md +15 -17
- package/skills/void/docs/guide/jobs.md +8 -5
- package/skills/void/docs/guide/live.md +7 -15
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
- package/skills/void/docs/guide/pages-routing/islands.md +3 -3
- package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
- package/skills/void/docs/guide/pages-routing/overview.md +7 -7
- package/skills/void/docs/guide/platform-administration.md +212 -0
- package/skills/void/docs/guide/platform-development.md +235 -0
- package/skills/void/docs/guide/queues.md +10 -10
- package/skills/void/docs/guide/quickstart.md +46 -67
- package/skills/void/docs/guide/remote-dev.md +8 -6
- package/skills/void/docs/guide/sandboxes.md +33 -16
- package/skills/void/docs/guide/self-hosted-platform.md +553 -0
- package/skills/void/docs/guide/server-routing.md +25 -5
- package/skills/void/docs/guide/sse.md +4 -4
- package/skills/void/docs/guide/ssg.md +5 -3
- package/skills/void/docs/guide/storage.md +2 -2
- package/skills/void/docs/guide/websockets.md +18 -7
- package/skills/void/docs/index.md +3 -3
- package/skills/void/docs/integrations/agents.md +6 -64
- package/skills/void/docs/integrations/cloudflare.md +165 -146
- package/skills/void/docs/integrations/frameworks/analog.md +4 -4
- package/skills/void/docs/integrations/frameworks/astro.md +5 -5
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
- package/skills/void/docs/integrations/frameworks/overview.md +3 -3
- package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
- package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
- package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
- package/skills/void/docs/reference/api.md +42 -6
- package/skills/void/docs/reference/cli.md +637 -159
- package/skills/void/docs/reference/config.md +80 -25
- package/skills/void/docs/reference/resource-inference.md +13 -9
- package/skills/void/docs/reference/structure.md +10 -11
- package/AGENT_PROMPT.md +0 -19
- package/dist/cf-access-Bqw81xAf.mjs +0 -22
- package/dist/env-CZy5MorI.mjs +0 -299
- package/dist/env-helpers-z4stu8uc.d.mts +0 -52
- package/dist/env-mask-Dd47NbR6.mjs +0 -90
- package/dist/env-public-BfiLcMBk.d.mts +0 -140
- package/dist/link-CdGHSIy-.mjs +0 -45
- package/dist/mcp-DoM3_nhd.mjs +0 -377
- package/dist/project-paths-GpziKeQQ.d.mts +0 -25
- package/dist/providers-BNKRacMr.d.mts +0 -7
- package/dist/proxy-D-3_D-Gl.mjs +0 -5
- package/dist/rollback-CkvTFXx5.mjs +0 -90
- package/dist/runtime/isr-cache.d.mts +0 -207
- package/dist/runtime/isr-cache.mjs +0 -523
- package/dist/types-lLjNE9Qp.d.mts +0 -51
- package/getting-started-prompt.txt +0 -28
- package/skills/void/command/void.md +0 -7
- package/skills/void/docs/integrations/auth-providers.md +0 -0
- package/skills/void/docs/integrations/payment-processors.md +0 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
- package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
- package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
- package/skills/void/docs/node_modules/vitepress/README.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
- package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
- package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
- package/skills/void/docs/node_modules/void/README.md +0 -90
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
- package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
- package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { t as MAX_MESSAGE_BYTES } from "./mime-BJD7d_qL.mjs";
|
|
2
|
+
//#region src/runtime/email/dev-inbox.ts
|
|
3
|
+
/**
|
|
4
|
+
* In-memory capture sink for emails during local dev / tests.
|
|
5
|
+
*
|
|
6
|
+
* Two consumers:
|
|
7
|
+
* 1. The Vite dev-server middleware (`/__void/inbox`) — owns the buffer that
|
|
8
|
+
* backs the browsable inbox during `void dev`.
|
|
9
|
+
* 2. The test harness (`void/email/testing`) — registers a sink so
|
|
10
|
+
* assertions like `expect(harness.messages).toHaveLength(1)` work without
|
|
11
|
+
* mocking the SEND_EMAIL binding.
|
|
12
|
+
*
|
|
13
|
+
* The sink registry lives on globalThis, but it is only ever an IN-ISOLATE
|
|
14
|
+
* channel. It is NOT a bridge between the dev server and user code: under
|
|
15
|
+
* `void dev` the Vite plugin runs in Node while user code runs in workerd — a
|
|
16
|
+
* separate OS process started by miniflare — so each has its own globalThis and
|
|
17
|
+
* its own (empty) registry. A `sendEmail` call inside the worker therefore
|
|
18
|
+
* never sees the plugin's sink.
|
|
19
|
+
*
|
|
20
|
+
* The cross-process hop is explicit instead: the worker POSTs the captured
|
|
21
|
+
* message to {@link DEV_INBOX_CAPTURE_URL} through its dev assets binding
|
|
22
|
+
* (which `@cloudflare/vite-plugin` wires straight into the Vite dev server's
|
|
23
|
+
* Node middleware stack), and the plugin's middleware pushes it into the
|
|
24
|
+
* buffer. See `runtime/email.ts` and `plugin-email-dev-inbox.ts`.
|
|
25
|
+
*/
|
|
26
|
+
/** Mount point of the dev inbox on the Vite dev server. */
|
|
27
|
+
const DEV_INBOX_PREFIX = "/__void/inbox";
|
|
28
|
+
/** Capture endpoint, relative to {@link DEV_INBOX_PREFIX} (connect strips the mount). */
|
|
29
|
+
const DEV_INBOX_CAPTURE_PATH = "/_capture";
|
|
30
|
+
/** Absolute path the worker POSTs a captured message to. */
|
|
31
|
+
const DEV_INBOX_CAPTURE_URL = `${DEV_INBOX_PREFIX}${DEV_INBOX_CAPTURE_PATH}`;
|
|
32
|
+
/**
|
|
33
|
+
* Serve-only var naming the fetcher binding that loops back to the Vite dev
|
|
34
|
+
* server. Its presence is also the dev gate: `sendEmail` only attempts the dev
|
|
35
|
+
* inbox when this var is set, and it is injected exclusively when
|
|
36
|
+
* `viteCommand === 'serve'` (see `shouldInjectEmailDevInboxVar` in index.ts),
|
|
37
|
+
* so a production build never carries it.
|
|
38
|
+
*/
|
|
39
|
+
const DEV_INBOX_ENV_VAR = "__VOID_EMAIL_DEV_INBOX";
|
|
40
|
+
/**
|
|
41
|
+
* Serve-only var carrying the project's dev-trigger token — the same
|
|
42
|
+
* per-project secret `/__void/scheduled` and `/__void/queue` require — so the
|
|
43
|
+
* worker can authenticate its capture POST. Injected together with
|
|
44
|
+
* {@link DEV_INBOX_ENV_VAR} under the same gate. The compiled router embeds
|
|
45
|
+
* the token as a module-local const the `void/email` runtime cannot import,
|
|
46
|
+
* so a var is the only transport into `sendEmail`.
|
|
47
|
+
*/
|
|
48
|
+
const DEV_INBOX_TOKEN_ENV_VAR = "__VOID_EMAIL_DEV_INBOX_TOKEN";
|
|
49
|
+
/**
|
|
50
|
+
* How a caller proves it holds the dev-trigger token. Every `/__void/inbox`
|
|
51
|
+
* route — browse, raw download, clear, and the worker's capture POST —
|
|
52
|
+
* requires one of these, mirroring the `x-void-dev-trigger` check on the
|
|
53
|
+
* cron/queue dev routes. The query form exists for the browser: a link
|
|
54
|
+
* printed in the terminal cannot carry a header, and the inbox pages render
|
|
55
|
+
* their own links with it. Responses send `Referrer-Policy: no-referrer`, so
|
|
56
|
+
* the token never leaves the inbox through a Referer.
|
|
57
|
+
*/
|
|
58
|
+
const DEV_INBOX_TOKEN_HEADER = "x-void-dev-trigger";
|
|
59
|
+
const DEV_INBOX_TOKEN_QUERY = "token";
|
|
60
|
+
/**
|
|
61
|
+
* Acknowledgement marker on the capture response. The transport rides the
|
|
62
|
+
* assets binding, so a 200 alone proves nothing — if that binding ever stops
|
|
63
|
+
* being a dev-server loopback, a plain static/SPA response would also be 200.
|
|
64
|
+
* The worker treats a capture as delivered only when this header comes back.
|
|
65
|
+
*/
|
|
66
|
+
const DEV_INBOX_ACK_HEADER = "x-void-email-inbox";
|
|
67
|
+
const DEV_INBOX_ACK_VALUE = "captured";
|
|
68
|
+
/**
|
|
69
|
+
* Upper bound on a capture body. Dev-only, but an unbounded read is still a
|
|
70
|
+
* footgun.
|
|
71
|
+
*
|
|
72
|
+
* Derived from `MAX_MESSAGE_BYTES`, not chosen: a message `buildMime` accepts
|
|
73
|
+
* must never be refused here, or `void dev` fails a send that production
|
|
74
|
+
* delivers. `serializeCapturedMessage` carries the raw MIME as base64 (4/3 of
|
|
75
|
+
* its octets) AND every caller string a second time as JSON, where the
|
|
76
|
+
* expansion over the MIME rendering of the same string is at most 3.75x. That
|
|
77
|
+
* worst case is a control character in a value `encodeWord` renders — the
|
|
78
|
+
* subject, a display name, a custom header value: JSON writes it as `\u0001`
|
|
79
|
+
* (6 bytes) while the encoded-word spends at least 1.6 octets per UTF-8 byte
|
|
80
|
+
* (4/3 of base64 plus 12 octets of `=?UTF-8?B?…?=` per 45-byte word). A body
|
|
81
|
+
* expands at most 2x: the same control is `=01` (3) in quoted-printable, a
|
|
82
|
+
* CRLF (2) is `\r\n` (4), and a `"`, `\` or HTAB (1) is 2. An attachment's
|
|
83
|
+
* filename, media type and Content-ID refuse controls (`rejectControls`), so
|
|
84
|
+
* their worst is `"` or `\` at 2x (verbatim in the media type and Content-ID;
|
|
85
|
+
* escaped, and twice, in the quoted filename), as is a custom header NAME,
|
|
86
|
+
* which is printable ASCII. The MIME holds at most
|
|
87
|
+
* `MAX_MESSAGE_BYTES` of those strings, so the JSON is under
|
|
88
|
+
* `(4/3 + 3.75) * MAX_MESSAGE_BYTES` (5.09x) plus what has no MIME footprint of
|
|
89
|
+
* its own — the JSON framing, ids, timestamps, and the `bcc` addresses
|
|
90
|
+
* (`MAX_RECIPIENTS * MAX_ADDRESS_LENGTH`, 32 KB). 6x is the smallest integer
|
|
91
|
+
* multiple that covers it. At 32 MiB this refused a legal 10.3 MB message of
|
|
92
|
+
* control-character text (33.6 MB serialized) with a 413 that `sendEmail`
|
|
93
|
+
* reported as `UPSTREAM_ERROR`. Measured: that message serializes to 3.26x
|
|
94
|
+
* `MAX_MESSAGE_BYTES`, a legal 10 MiB one of CRLF text to 3.33x, and one of a
|
|
95
|
+
* control-character subject (or display name, or custom header value) to
|
|
96
|
+
* 4.93x — the body-only figure would not have covered it.
|
|
97
|
+
*
|
|
98
|
+
* Three caller strings have NO MIME footprint, so no multiple of
|
|
99
|
+
* `MAX_MESSAGE_BYTES` bounds them: a `bcc` display name (never rendered), a
|
|
100
|
+
* custom header whose name is reserved (dropped), and a whitespace run inside
|
|
101
|
+
* a long foldable header value (collapsed by folding). They are captured as
|
|
102
|
+
* given, and a message that pads one of them past this cap is still refused.
|
|
103
|
+
*/
|
|
104
|
+
const DEV_INBOX_MAX_CAPTURE_BYTES = 6 * MAX_MESSAGE_BYTES;
|
|
105
|
+
function bytesToBase64(bytes) {
|
|
106
|
+
const CHUNK = 8192;
|
|
107
|
+
let binary = "";
|
|
108
|
+
for (let i = 0; i < bytes.byteLength; i += CHUNK) binary += String.fromCharCode(...bytes.subarray(i, Math.min(i + CHUNK, bytes.byteLength)));
|
|
109
|
+
return btoa(binary);
|
|
110
|
+
}
|
|
111
|
+
function base64ToBytes(value) {
|
|
112
|
+
try {
|
|
113
|
+
const binary = atob(value);
|
|
114
|
+
const out = new Uint8Array(binary.length);
|
|
115
|
+
for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);
|
|
116
|
+
return out;
|
|
117
|
+
} catch {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Encode a captured message for the worker -> dev-server hop (`raw` as base64). */
|
|
122
|
+
function serializeCapturedMessage(message) {
|
|
123
|
+
return JSON.stringify({
|
|
124
|
+
...message,
|
|
125
|
+
raw: bytesToBase64(message.raw)
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function asAddress(value) {
|
|
129
|
+
if (typeof value !== "object" || value === null) return;
|
|
130
|
+
const v = value;
|
|
131
|
+
if (typeof v.email !== "string") return;
|
|
132
|
+
return typeof v.name === "string" ? {
|
|
133
|
+
email: v.email,
|
|
134
|
+
name: v.name
|
|
135
|
+
} : { email: v.email };
|
|
136
|
+
}
|
|
137
|
+
function asAddressList(value) {
|
|
138
|
+
if (!Array.isArray(value)) return;
|
|
139
|
+
const out = [];
|
|
140
|
+
for (const entry of value) {
|
|
141
|
+
const address = asAddress(entry);
|
|
142
|
+
if (!address) return;
|
|
143
|
+
out.push(address);
|
|
144
|
+
}
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Decode a capture payload. Returns `undefined` for anything malformed — the
|
|
149
|
+
* endpoint is reachable from the dev server's own origin, so it must reject
|
|
150
|
+
* junk rather than throw inside the middleware.
|
|
151
|
+
*/
|
|
152
|
+
function parseCapturedMessage(value) {
|
|
153
|
+
if (typeof value !== "object" || value === null) return;
|
|
154
|
+
const v = value;
|
|
155
|
+
if (typeof v.id !== "string" || typeof v.raw !== "string") return;
|
|
156
|
+
const raw = base64ToBytes(v.raw);
|
|
157
|
+
const from = asAddress(v.from);
|
|
158
|
+
const to = asAddressList(v.to);
|
|
159
|
+
const cc = asAddressList(v.cc);
|
|
160
|
+
const bcc = asAddressList(v.bcc);
|
|
161
|
+
if (!raw || !from || !to || !cc || !bcc) return;
|
|
162
|
+
const attachments = [];
|
|
163
|
+
if (!Array.isArray(v.attachments)) return;
|
|
164
|
+
for (const entry of v.attachments) {
|
|
165
|
+
if (typeof entry !== "object" || entry === null) return;
|
|
166
|
+
const a = entry;
|
|
167
|
+
attachments.push({
|
|
168
|
+
filename: typeof a.filename === "string" ? a.filename : "",
|
|
169
|
+
contentType: typeof a.contentType === "string" ? a.contentType : "application/octet-stream",
|
|
170
|
+
size: typeof a.size === "number" ? a.size : 0,
|
|
171
|
+
...typeof a.contentId === "string" && { contentId: a.contentId },
|
|
172
|
+
disposition: a.disposition === "inline" ? "inline" : "attachment"
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const headers = {};
|
|
176
|
+
if (typeof v.headers === "object" && v.headers !== null) {
|
|
177
|
+
for (const [k, hv] of Object.entries(v.headers)) if (typeof hv === "string") headers[k] = hv;
|
|
178
|
+
}
|
|
179
|
+
const replyTo = asAddress(v.replyTo);
|
|
180
|
+
return {
|
|
181
|
+
id: v.id,
|
|
182
|
+
capturedAt: typeof v.capturedAt === "number" ? v.capturedAt : Date.now(),
|
|
183
|
+
raw,
|
|
184
|
+
messageId: typeof v.messageId === "string" ? v.messageId : "",
|
|
185
|
+
from,
|
|
186
|
+
to,
|
|
187
|
+
cc,
|
|
188
|
+
bcc,
|
|
189
|
+
...replyTo && { replyTo },
|
|
190
|
+
subject: typeof v.subject === "string" ? v.subject : "",
|
|
191
|
+
...typeof v.text === "string" && { text: v.text },
|
|
192
|
+
...typeof v.html === "string" && { html: v.html },
|
|
193
|
+
headers,
|
|
194
|
+
attachments
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const SINK_KEY = "__voidEmailSinks__";
|
|
198
|
+
const BUFFER_KEY = "__voidEmailDevBuffer__";
|
|
199
|
+
const DEFAULT_BUFFER_LIMIT = 100;
|
|
200
|
+
/**
|
|
201
|
+
* Retained-byte budget for the buffer, alongside the count cap.
|
|
202
|
+
*
|
|
203
|
+
* A count cap alone does not bound the buffer: every item holds its full raw
|
|
204
|
+
* MIME plus the decoded `text`/`html`, and a single message may reach
|
|
205
|
+
* `MAX_MESSAGE_BYTES` (10 MiB), so 100 html-heavy messages is on the order of
|
|
206
|
+
* gigabytes. This buffer lives in the Vite dev server's Node process — not in
|
|
207
|
+
* workerd — so that is the dev server's own heap.
|
|
208
|
+
*/
|
|
209
|
+
const DEFAULT_BUFFER_BYTES = 67108864;
|
|
210
|
+
function registry() {
|
|
211
|
+
const g = globalThis;
|
|
212
|
+
let r = g[SINK_KEY];
|
|
213
|
+
if (!r) {
|
|
214
|
+
r = { sinks: /* @__PURE__ */ new Set() };
|
|
215
|
+
g[SINK_KEY] = r;
|
|
216
|
+
}
|
|
217
|
+
return r;
|
|
218
|
+
}
|
|
219
|
+
function registerEmailSink(sink) {
|
|
220
|
+
const r = registry();
|
|
221
|
+
r.sinks.add(sink);
|
|
222
|
+
return () => r.sinks.delete(sink);
|
|
223
|
+
}
|
|
224
|
+
function dispatchToSinks(message) {
|
|
225
|
+
const r = registry();
|
|
226
|
+
if (r.sinks.size === 0) return false;
|
|
227
|
+
for (const sink of r.sinks) try {
|
|
228
|
+
sink(message);
|
|
229
|
+
} catch (err) {
|
|
230
|
+
console.warn("[email-dev-inbox] sink error:", err);
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
function hasActiveSink() {
|
|
235
|
+
return registry().sinks.size > 0;
|
|
236
|
+
}
|
|
237
|
+
/** Get or create the shared dev-server ring buffer. */
|
|
238
|
+
function getDevBuffer(limit = DEFAULT_BUFFER_LIMIT) {
|
|
239
|
+
const g = globalThis;
|
|
240
|
+
let b = g[BUFFER_KEY];
|
|
241
|
+
if (!b) {
|
|
242
|
+
b = {
|
|
243
|
+
limit,
|
|
244
|
+
bytes: 0,
|
|
245
|
+
items: []
|
|
246
|
+
};
|
|
247
|
+
g[BUFFER_KEY] = b;
|
|
248
|
+
}
|
|
249
|
+
return b;
|
|
250
|
+
}
|
|
251
|
+
/** What a retained message costs: the raw MIME plus both decoded bodies. */
|
|
252
|
+
function messageBytes(message) {
|
|
253
|
+
return message.raw.byteLength + (message.text?.length ?? 0) + (message.html?.length ?? 0);
|
|
254
|
+
}
|
|
255
|
+
function pushToDevBuffer(message) {
|
|
256
|
+
const b = getDevBuffer();
|
|
257
|
+
b.items.push(message);
|
|
258
|
+
b.bytes += messageBytes(message);
|
|
259
|
+
while (b.items.length > b.limit || b.bytes > DEFAULT_BUFFER_BYTES && b.items.length > 1) {
|
|
260
|
+
const evicted = b.items.shift();
|
|
261
|
+
if (evicted) b.bytes -= messageBytes(evicted);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function listDevMessages() {
|
|
265
|
+
return [...getDevBuffer().items].reverse();
|
|
266
|
+
}
|
|
267
|
+
function findDevMessage(id) {
|
|
268
|
+
return getDevBuffer().items.find((m) => m.id === id);
|
|
269
|
+
}
|
|
270
|
+
function clearDevBuffer() {
|
|
271
|
+
const b = getDevBuffer();
|
|
272
|
+
b.items.length = 0;
|
|
273
|
+
b.bytes = 0;
|
|
274
|
+
}
|
|
275
|
+
function captureMessage(email, raw, messageId) {
|
|
276
|
+
return {
|
|
277
|
+
id: generateCaptureId(),
|
|
278
|
+
capturedAt: Date.now(),
|
|
279
|
+
raw,
|
|
280
|
+
messageId,
|
|
281
|
+
from: email.from,
|
|
282
|
+
to: email.to,
|
|
283
|
+
cc: email.cc,
|
|
284
|
+
bcc: email.bcc,
|
|
285
|
+
replyTo: email.replyTo,
|
|
286
|
+
subject: email.subject,
|
|
287
|
+
text: email.text,
|
|
288
|
+
html: email.html,
|
|
289
|
+
headers: { ...email.headers },
|
|
290
|
+
attachments: email.attachments.map((a) => ({
|
|
291
|
+
filename: a.filename,
|
|
292
|
+
contentType: a.contentType,
|
|
293
|
+
size: a.bytes.byteLength,
|
|
294
|
+
contentId: a.contentId,
|
|
295
|
+
disposition: a.disposition
|
|
296
|
+
}))
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function generateCaptureId() {
|
|
300
|
+
const bytes = /* @__PURE__ */ new Uint8Array(8);
|
|
301
|
+
crypto.getRandomValues(bytes);
|
|
302
|
+
let hex = "";
|
|
303
|
+
for (const b of bytes) hex += b.toString(16).padStart(2, "0");
|
|
304
|
+
return `dev_${Date.now().toString(36)}${hex}`;
|
|
305
|
+
}
|
|
306
|
+
//#endregion
|
|
307
|
+
export { parseCapturedMessage as _, DEV_INBOX_ENV_VAR as a, serializeCapturedMessage as b, DEV_INBOX_TOKEN_ENV_VAR as c, captureMessage as d, clearDevBuffer as f, listDevMessages as g, hasActiveSink as h, DEV_INBOX_CAPTURE_URL as i, DEV_INBOX_TOKEN_HEADER as l, findDevMessage as m, DEV_INBOX_ACK_VALUE as n, DEV_INBOX_MAX_CAPTURE_BYTES as o, dispatchToSinks as p, DEV_INBOX_CAPTURE_PATH as r, DEV_INBOX_PREFIX as s, DEV_INBOX_ACK_HEADER as t, DEV_INBOX_TOKEN_QUERY as u, pushToDevBuffer as v, registerEmailSink as y };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as __exportAll } from "./rolldown-runtime-
|
|
2
|
-
import {
|
|
3
|
-
import { n as readProjectPaths } from "./project-paths-
|
|
1
|
+
import { n as __exportAll } from "./rolldown-runtime-rQ84J-ij.mjs";
|
|
2
|
+
import { c as relative } from "./dist-BrsS7cai.mjs";
|
|
3
|
+
import { n as readProjectPaths } from "./project-paths-SK8nMHPp.mjs";
|
|
4
4
|
import { existsSync, statSync } from "node:fs";
|
|
5
5
|
//#region src/drizzle/discover.ts
|
|
6
6
|
var discover_exports = /* @__PURE__ */ __exportAll({
|