void 0.1.6 → 0.7.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/AGENT_PROMPT.md +15 -0
- package/README.md +62 -123
- package/dist/auth-BdsJ0Aff.d.mts +43 -0
- package/dist/auth-cmd-Dx8oPKZC.mjs +43 -0
- package/dist/auth-migrations-BAtAck2g.mjs +117 -0
- package/dist/better-auth-shared-C9_GHSkR.d.mts +71 -0
- package/dist/better-auth-shared-CdYmQGry.mjs +163 -0
- package/dist/cache-W82I8ihI.mjs +47 -0
- package/dist/cancel-deploy-BOBTqqh0.mjs +59 -0
- package/dist/cf-access-Dee5cXxL.mjs +22 -0
- package/dist/chunk-DJd-R1mw.mjs +34 -0
- package/dist/cli/cli.d.mts +1 -0
- package/dist/cli/cli.mjs +1807 -0
- package/dist/client-snXOjrp1.mjs +565 -0
- package/dist/collect-CjeZgz5D.mjs +55 -0
- package/dist/config-BIa9HwVX.mjs +573 -0
- package/dist/config-BzM9Dy7T.mjs +37 -0
- package/dist/config-CvHtTM0q.mjs +30 -0
- package/dist/create-project-BIA15W7z.mjs +90 -0
- package/dist/db-DsRoMcfN.mjs +895 -0
- package/dist/defer-DcxEsVH1.mjs +49 -0
- package/dist/delete-DAP6yDc7.mjs +64 -0
- package/dist/deploy-BPKblFx6.mjs +2424 -0
- package/dist/discover-B7FkXBLB.mjs +40 -0
- package/dist/dist-DUyXJLkq.mjs +2667 -0
- package/dist/dist-Dayj3gCK.mjs +1287 -0
- package/dist/domain-BGofcQ6I.mjs +79 -0
- package/dist/dotenv-DwO4ti0Z.mjs +173 -0
- package/dist/drizzle-NnudE_UN.mjs +232 -0
- package/dist/env-CyG3tvU0.mjs +301 -0
- package/dist/env-helpers-Dr9Y7RnE.d.mts +52 -0
- package/dist/env-raw-BDL4TvdN.mjs +32 -0
- package/dist/env-types-DknSA4SO.mjs +64 -0
- package/dist/env-validation-DJKjR_8q.mjs +163 -0
- package/dist/fetch-error-BQ8sZ5Nd.mjs +266 -0
- package/dist/fetch-error-CVZ5CGA-.d.mts +20 -0
- package/dist/gen-U0Ktr4Zd.mjs +761 -0
- package/dist/handler-B0ds0OHJ.d.mts +269 -0
- package/dist/head-P-egrtFE.d.mts +45 -0
- package/dist/headers-DCXc7mDs.mjs +279 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.mjs +4695 -0
- package/dist/init-C7wS5iGP.mjs +2625 -0
- package/dist/link-p2R6NbgN.mjs +49 -0
- package/dist/list-Bfel-QLc.mjs +113 -0
- package/dist/log-DXdqnmhF.mjs +26 -0
- package/dist/login-CkcXUiIu.mjs +72 -0
- package/dist/logs-DmkrRvx6.mjs +98 -0
- package/dist/magic-string.es-D6g9UnIy.mjs +1011 -0
- package/dist/mcp-CaQzfeUi.mjs +373 -0
- package/dist/node-DDfXj10V.mjs +54 -0
- package/dist/output-BwlcIYSR.mjs +139 -0
- package/dist/pages/client.d.mts +198 -0
- package/dist/pages/client.mjs +980 -0
- package/dist/pages/head-client.d.mts +15 -0
- package/dist/pages/head-client.mjs +90 -0
- package/dist/pages/head.d.mts +2 -0
- package/dist/pages/head.mjs +112 -0
- package/dist/pages/index.d.mts +38 -0
- package/dist/pages/index.mjs +76 -0
- package/dist/pages/islands-plugin.d.mts +50 -0
- package/dist/pages/islands-plugin.mjs +195 -0
- package/dist/pages/prefetch.d.mts +31 -0
- package/dist/pages/prefetch.mjs +90 -0
- package/dist/pages/protocol.d.mts +3 -0
- package/dist/pages/protocol.mjs +193 -0
- package/dist/pages/serialize.d.mts +10 -0
- package/dist/pages/serialize.mjs +14 -0
- package/dist/pathe.M-eThtNZ-D-kmWkCS.mjs +150 -0
- package/dist/plugin-inference-oZ6Ybu2_.mjs +2447 -0
- package/dist/prepare-BAtWufvm.mjs +99 -0
- package/dist/preset-D4I73kT4.mjs +221 -0
- package/dist/project-TqORyHn8.mjs +72 -0
- package/dist/project-cmd-B7lQp3F3.mjs +67 -0
- package/dist/project-slug-CKam8lF9.mjs +11 -0
- package/dist/project-tsconfig-DfkESbDL.mjs +63 -0
- package/dist/protocol-BWzXs2A2.d.mts +34 -0
- package/dist/providers-B3aMxWzP.mjs +67 -0
- package/dist/resolve-project-Br5BR03U.mjs +29 -0
- package/dist/rollback-gyC59l7U.mjs +92 -0
- package/dist/route-types-DReF1gUY.mjs +255 -0
- package/dist/routes-stub.d.mts +55 -0
- package/dist/routes-stub.mjs +1 -0
- package/dist/runner-6Ep3fNQu.mjs +123 -0
- package/dist/runner-pg-D0wWHYnr.mjs +57 -0
- package/dist/runtime/ai.d.mts +127 -0
- package/dist/runtime/ai.mjs +348 -0
- package/dist/runtime/auth-client-react.d.mts +8 -0
- package/dist/runtime/auth-client-react.mjs +6 -0
- package/dist/runtime/auth-client-solid.d.mts +8 -0
- package/dist/runtime/auth-client-solid.mjs +6 -0
- package/dist/runtime/auth-client-svelte.d.mts +8 -0
- package/dist/runtime/auth-client-svelte.mjs +6 -0
- package/dist/runtime/auth-client-vue.d.mts +8 -0
- package/dist/runtime/auth-client-vue.mjs +6 -0
- package/dist/runtime/auth-client.d.mts +8 -0
- package/dist/runtime/auth-client.mjs +6 -0
- package/dist/runtime/auth.d.mts +2 -0
- package/dist/runtime/auth.mjs +22 -0
- package/dist/runtime/better-auth-pg.d.mts +11 -0
- package/dist/runtime/better-auth-pg.mjs +51 -0
- package/dist/runtime/better-auth.d.mts +11 -0
- package/dist/runtime/better-auth.mjs +33 -0
- package/dist/runtime/client.d.mts +6 -0
- package/dist/runtime/client.mjs +5 -0
- package/dist/runtime/db-pg.d.mts +2 -0
- package/dist/runtime/db-pg.mjs +1 -0
- package/dist/runtime/db.d.mts +17 -0
- package/dist/runtime/db.mjs +30 -0
- package/dist/runtime/drizzle-arktype.d.mts +1 -0
- package/dist/runtime/drizzle-arktype.mjs +2 -0
- package/dist/runtime/drizzle-valibot.d.mts +1 -0
- package/dist/runtime/drizzle-valibot.mjs +2 -0
- package/dist/runtime/drizzle-zod.d.mts +1 -0
- package/dist/runtime/drizzle-zod.mjs +2 -0
- package/dist/runtime/env-helpers.d.mts +2 -0
- package/dist/runtime/env-helpers.mjs +173 -0
- package/dist/runtime/env-public-client.d.mts +22 -0
- package/dist/runtime/env-public-client.mjs +54 -0
- package/dist/runtime/env-public.d.mts +143 -0
- package/dist/runtime/env-public.mjs +366 -0
- package/dist/runtime/env.d.mts +13 -0
- package/dist/runtime/env.mjs +51 -0
- package/dist/runtime/fetch-stream.d.mts +51 -0
- package/dist/runtime/fetch-stream.mjs +81 -0
- package/dist/runtime/fetch.d.mts +59 -0
- package/dist/runtime/fetch.mjs +18 -0
- package/dist/runtime/handler.d.mts +3 -0
- package/dist/runtime/handler.mjs +85 -0
- package/dist/runtime/isr.d.mts +26 -0
- package/dist/runtime/isr.mjs +43 -0
- package/dist/runtime/kv.d.mts +48 -0
- package/dist/runtime/kv.mjs +106 -0
- package/dist/runtime/log.d.mts +24 -0
- package/dist/runtime/log.mjs +31 -0
- package/dist/runtime/migration-handler-pg.d.mts +6 -0
- package/dist/runtime/migration-handler-pg.mjs +85 -0
- package/dist/runtime/migration-handler.d.mts +19 -0
- package/dist/runtime/migration-handler.mjs +92 -0
- package/dist/runtime/queues.d.mts +7 -0
- package/dist/runtime/queues.mjs +8 -0
- package/dist/runtime/remote/binding-handler.d.mts +15 -0
- package/dist/runtime/remote/binding-handler.mjs +208 -0
- package/dist/runtime/remote/index.d.mts +8 -0
- package/dist/runtime/remote/index.mjs +461 -0
- package/dist/runtime/response.d.mts +14 -0
- package/dist/runtime/response.mjs +30 -0
- package/dist/runtime/sandbox.d.mts +17 -0
- package/dist/runtime/sandbox.mjs +19 -0
- package/dist/runtime/schema-d1.d.mts +1 -0
- package/dist/runtime/schema-d1.mjs +2 -0
- package/dist/runtime/schema-pg.d.mts +1 -0
- package/dist/runtime/schema-pg.mjs +2 -0
- package/dist/runtime/seed.d.mts +30 -0
- package/dist/runtime/seed.mjs +6 -0
- package/dist/runtime/storage.d.mts +7 -0
- package/dist/runtime/storage.mjs +14 -0
- package/dist/runtime/validator.d.mts +2 -0
- package/dist/runtime/validator.mjs +72 -0
- package/dist/runtime/ws-server.d.mts +26 -0
- package/dist/runtime/ws-server.mjs +296 -0
- package/dist/runtime/ws.d.mts +123 -0
- package/dist/runtime/ws.mjs +103 -0
- package/dist/scan-Ba4hFwlH.mjs +324 -0
- package/dist/scan-C6HMEIdW.mjs +318 -0
- package/dist/secret-CeRSukgM.mjs +109 -0
- package/dist/skills-ipldjlKE.mjs +62 -0
- package/dist/standard-schema-9CRjx-uR.d.mts +42 -0
- package/dist/subcommand-prompt-BKjuNAPb.mjs +349 -0
- package/dist/sveltekit.d.mts +20 -0
- package/dist/sveltekit.mjs +61 -0
- package/dist/types-mHOEwpW4.d.mts +57 -0
- package/dist/validate-CaMavMxu.mjs +146 -0
- package/dist/yarn-pnp-BFqMV_bl.mjs +196 -0
- package/getting-started-prompt.txt +26 -0
- package/package.json +322 -30
- package/schema.json +364 -0
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
- package/skills/void/SKILL.md +75 -0
- package/skills/void/command/void.md +7 -0
- package/skills/void/docs/guide/ai.md +235 -0
- package/skills/void/docs/guide/app-types.md +103 -0
- package/skills/void/docs/guide/auth.md +257 -0
- package/skills/void/docs/guide/database/d1.md +106 -0
- package/skills/void/docs/guide/database/postgresql.md +106 -0
- package/skills/void/docs/guide/database.md +418 -0
- package/skills/void/docs/guide/deployment.md +98 -0
- package/skills/void/docs/guide/edge/headers.md +79 -0
- package/skills/void/docs/guide/edge/prerendering.md +83 -0
- package/skills/void/docs/guide/edge/redirects.md +116 -0
- package/skills/void/docs/guide/edge/revalidation.md +131 -0
- package/skills/void/docs/guide/edge/rewrites.md +354 -0
- package/skills/void/docs/guide/edge/static-assets.md +72 -0
- package/skills/void/docs/guide/env-vars.md +298 -0
- package/skills/void/docs/guide/index.md +80 -0
- package/skills/void/docs/guide/jobs.md +91 -0
- package/skills/void/docs/guide/kv.md +107 -0
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +419 -0
- package/skills/void/docs/guide/pages-routing/head.md +130 -0
- package/skills/void/docs/guide/pages-routing/islands.md +405 -0
- package/skills/void/docs/guide/pages-routing/layouts.md +362 -0
- package/skills/void/docs/guide/pages-routing/loaders.md +267 -0
- package/skills/void/docs/guide/pages-routing/markdown.md +625 -0
- package/skills/void/docs/guide/pages-routing/overview.md +236 -0
- package/skills/void/docs/guide/pages-routing/view-transitions.md +140 -0
- package/skills/void/docs/guide/queues.md +140 -0
- package/skills/void/docs/guide/quickstart.md +233 -0
- package/skills/void/docs/guide/remote-dev.md +67 -0
- package/skills/void/docs/guide/sandboxes.md +82 -0
- package/skills/void/docs/guide/server-routing.md +246 -0
- package/skills/void/docs/guide/ssg.md +74 -0
- package/skills/void/docs/guide/ssr.md +105 -0
- package/skills/void/docs/guide/storage.md +67 -0
- package/skills/void/docs/guide/type-safety.md +179 -0
- package/skills/void/docs/guide/typed-fetch.md +113 -0
- package/skills/void/docs/guide/websockets.md +190 -0
- package/skills/void/docs/index.md +48 -0
- package/skills/void/docs/integrations/agents.md +84 -0
- package/skills/void/docs/integrations/cloudflare.md +284 -0
- package/skills/void/docs/integrations/frameworks/analog.md +182 -0
- package/skills/void/docs/integrations/frameworks/astro.md +197 -0
- package/skills/void/docs/integrations/frameworks/nuxt.md +164 -0
- package/skills/void/docs/integrations/frameworks/overview.md +136 -0
- package/skills/void/docs/integrations/frameworks/react-router.md +137 -0
- package/skills/void/docs/integrations/frameworks/sveltekit.md +191 -0
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +140 -0
- package/skills/void/docs/integrations/hono.md +97 -0
- package/skills/void/docs/integrations/nodejs-bun-deno.md +210 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +408 -0
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +5 -0
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +103 -0
- package/skills/void/docs/node_modules/oxc-minify/README.md +78 -0
- package/skills/void/docs/node_modules/reka-ui/README.md +80 -0
- package/skills/void/docs/node_modules/vitepress/README.md +28 -0
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +49 -0
- package/skills/void/docs/node_modules/vitepress/template/index.md +28 -0
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +85 -0
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +101 -0
- package/skills/void/docs/node_modules/void/AGENTS.md +204 -0
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +15 -0
- package/skills/void/docs/node_modules/void/README.md +89 -0
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +591 -0
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +375 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +174 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +37 -0
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +135 -0
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +189 -0
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +143 -0
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +1272 -0
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +19 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +22 -0
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +69 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +152 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +24 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +565 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +124 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +600 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +386 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +95 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +101 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathe/README.md +73 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +15 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +25 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tsdown/README.md +55 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/LICENSE.md +2230 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/README.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +58 -0
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +165 -0
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +32 -0
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +99 -0
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +108 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +51 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +79 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +44 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +51 -0
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +65 -0
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +390 -0
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +48 -0
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +85 -0
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +452 -0
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +76 -0
- package/{LICENSE → skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md} +21 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +364 -0
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +41 -0
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +325 -0
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +398 -0
- package/skills/void/docs/node_modules/void/node_modules/pathe/README.md +73 -0
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +95 -0
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md +21 -0
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +135 -0
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +21 -0
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +25 -0
- package/skills/void/docs/node_modules/void/node_modules/tsdown/README.md +55 -0
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +94 -0
- package/skills/void/docs/node_modules/void/node_modules/vite/LICENSE.md +2230 -0
- package/skills/void/docs/node_modules/void/node_modules/vite/README.md +20 -0
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +63 -0
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +191 -0
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +75 -0
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +7 -0
- package/skills/void/docs/reference/api.md +917 -0
- package/skills/void/docs/reference/cli.md +561 -0
- package/skills/void/docs/reference/config.md +408 -0
- package/skills/void/docs/reference/resource-inference.md +149 -0
- package/skills/void/docs/reference/structure.md +176 -0
- package/.npmignore +0 -29
- package/.travis.yml +0 -9
- package/favicon.ico +0 -0
- package/index.js +0 -14
- package/lib/Job.js +0 -150
- package/lib/Void.js +0 -99
- package/lib/scan.js +0 -19
- package/test/credentials.js +0 -20
- package/test/job.js +0 -64
- package/test/static/dir1/test6.html +0 -0
- package/test/static/dir2/test7.html +0 -0
- package/test/static/dir2/test8.html +0 -0
- package/test/static/dir2/test9.html +0 -0
- package/test/static/test1.html +0 -0
- package/test/static/test2.html +0 -0
- package/test/static/test3.html +0 -0
- package/test/void.js +0 -31
- /package/{test/static/dir1/test4.html → skills/void/docs/integrations/auth-providers.md} +0 -0
- /package/{test/static/dir1/test5.html → skills/void/docs/integrations/payment-processors.md} +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# React Router v7
|
|
6
|
+
|
|
7
|
+
[React Router v7](https://reactrouter.com/) is a Vite-based full-stack React framework. `voidPlugin()` composes directly with the React Router plugin in the Vite pipeline, so there is no separate adapter to install.
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
### 1. Create a new project
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm create react-router@latest my-app
|
|
15
|
+
cd my-app
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Install dependencies
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -D void
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 3. Configure `vite.config.ts`
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { defineConfig } from 'vite';
|
|
28
|
+
import { reactRouter } from '@react-router/dev/vite';
|
|
29
|
+
import { voidPlugin } from 'void';
|
|
30
|
+
|
|
31
|
+
export default defineConfig({
|
|
32
|
+
plugins: [
|
|
33
|
+
voidPlugin(), // must come before the framework plugin
|
|
34
|
+
reactRouter(),
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 4. Deploy
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
void auth login
|
|
43
|
+
void deploy
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Using Void Platform Features
|
|
47
|
+
|
|
48
|
+
Most [Void platform features](../../guide/app-types.md#void-apps) work with React Router. Use them in loaders and actions:
|
|
49
|
+
|
|
50
|
+
Void-managed auth is not supported in framework mode yet. Use Better Auth's official React Router integration directly for now.
|
|
51
|
+
|
|
52
|
+
### Database
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import type { Route } from './+types/users';
|
|
56
|
+
import { db } from 'void/db';
|
|
57
|
+
import { users } from '@schema';
|
|
58
|
+
|
|
59
|
+
export async function loader({}: Route.LoaderArgs) {
|
|
60
|
+
return { users: await db.select().from(users) };
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### KV Storage
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { kv } from 'void/kv';
|
|
68
|
+
|
|
69
|
+
export async function loader() {
|
|
70
|
+
return { settings: await kv.get('app:settings') };
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Blob Storage
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
import { storage } from 'void/storage';
|
|
78
|
+
|
|
79
|
+
export async function loader() {
|
|
80
|
+
return { avatar: await storage.get('avatars/user-1.png') };
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### AI
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
import { ai } from 'void/ai';
|
|
88
|
+
|
|
89
|
+
export async function action() {
|
|
90
|
+
return ai.run('@cf/meta/llama-3.1-8b-instruct', {
|
|
91
|
+
prompt: 'Summarize the latest news',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Cron Jobs
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
// crons/daily-cleanup.ts
|
|
100
|
+
import { defineScheduled } from 'void';
|
|
101
|
+
|
|
102
|
+
export const cron = '0 0 * * *';
|
|
103
|
+
|
|
104
|
+
export default defineScheduled(async () => {
|
|
105
|
+
// runs daily at midnight
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Queue Consumers
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
// queues/emails.ts
|
|
113
|
+
import { defineQueue } from 'void';
|
|
114
|
+
|
|
115
|
+
export default defineQueue<{ to: string; subject: string }>(async (batch) => {
|
|
116
|
+
for (const msg of batch.messages) {
|
|
117
|
+
// process each message
|
|
118
|
+
msg.ack();
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Environment Variables
|
|
124
|
+
|
|
125
|
+
Void gives you a typed env layer: declare keys in `env.ts`, read them via `import { env } from "void/env"`, and get schema validation at build + deploy time plus a client-leak guard that fails the build if a server-only key reaches the browser. See the [env vars guide](../../guide/env-vars.md) for the full feature set.
|
|
126
|
+
|
|
127
|
+
React Router-specific caveat: because `loader()` and the component live in the same route file, the leak guard treats the module as client-reachable. Reading `env.SERVER_ONLY_KEY` inside `loader()` is safe at runtime (RR strips loaders from the client bundle), but the guard flags it as a potential leak. Move server-only secrets into a `.server.ts` companion file to silence the guard cleanly.
|
|
128
|
+
|
|
129
|
+
## Accessing Bindings Directly
|
|
130
|
+
|
|
131
|
+
You can also access Cloudflare bindings via the `cloudflare:workers` module:
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
import { env } from 'cloudflare:workers';
|
|
135
|
+
|
|
136
|
+
const { results } = await env.DB.prepare('SELECT * FROM users').all();
|
|
137
|
+
```
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# SvelteKit
|
|
6
|
+
|
|
7
|
+
[SvelteKit](https://svelte.dev/docs/kit) uses Vite internally with its own Cloudflare adapter (`@sveltejs/adapter-cloudflare`). Add `voidPlugin()` to the Vite config for binding inference, typed DB, and migrations during development.
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
### 1. Create a new project
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx sv create my-app
|
|
15
|
+
cd my-app
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Install dependencies
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -D @sveltejs/adapter-cloudflare void
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 3. Configure `svelte.config.js`
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
import adapter from '@sveltejs/adapter-cloudflare';
|
|
28
|
+
import { withVoidTSConfig } from 'void/sveltekit';
|
|
29
|
+
|
|
30
|
+
export default {
|
|
31
|
+
kit: {
|
|
32
|
+
adapter: adapter(),
|
|
33
|
+
typescript: {
|
|
34
|
+
config: withVoidTSConfig(),
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 4. Add `voidPlugin()` to `vite.config.ts`
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { sveltekit } from '@sveltejs/kit/vite';
|
|
44
|
+
import { voidPlugin } from 'void';
|
|
45
|
+
import { defineConfig } from 'vite';
|
|
46
|
+
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
plugins: [voidPlugin(), sveltekit()],
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 5. Create `wrangler.jsonc`
|
|
53
|
+
|
|
54
|
+
SvelteKit's adapter reads bindings from `wrangler.jsonc` for local dev. `voidPlugin()` auto-syncs inferred bindings into this file on dev startup, so you only need the base config:
|
|
55
|
+
|
|
56
|
+
```jsonc
|
|
57
|
+
{
|
|
58
|
+
"name": "my-app",
|
|
59
|
+
"compatibility_date": "2026-02-24",
|
|
60
|
+
"compatibility_flags": ["nodejs_compat"],
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
By default, SvelteKit's Cloudflare adapter, `voidPlugin()` migrations, and `void db` commands share Wrangler's local state at `.wrangler/state/v3`, so no extra `platformProxy.persist` configuration is required.
|
|
65
|
+
|
|
66
|
+
### 6. Configure `tsconfig.json`
|
|
67
|
+
|
|
68
|
+
SvelteKit generates `.svelte-kit/tsconfig.json` and expects your root config to extend it. Void generates `.void/tsconfig.json` for project-specific aliases such as `void/db` and `@schema`.
|
|
69
|
+
|
|
70
|
+
Do not add Void's `compilerOptions.paths` to the root `tsconfig.json`; SvelteKit warns because root-level paths override its generated aliases. The `withVoidTSConfig()` hook above merges Void's generated files and aliases into SvelteKit's generated config instead.
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"extends": "./.svelte-kit/tsconfig.json",
|
|
75
|
+
"compilerOptions": {
|
|
76
|
+
"types": ["void/env"]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Run `void prepare` after a fresh clone or before typechecking in CI so `.void/tsconfig.json` exists before SvelteKit syncs its config.
|
|
82
|
+
|
|
83
|
+
### 7. Deploy
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
void auth login
|
|
87
|
+
void deploy
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Using Void Platform Features
|
|
91
|
+
|
|
92
|
+
Most [Void platform features](../../guide/app-types.md#void-apps) work with SvelteKit. Use them in server load functions, actions, and API routes:
|
|
93
|
+
|
|
94
|
+
Void-managed auth is not supported in framework mode yet. Use Better Auth's official SvelteKit integration directly for now.
|
|
95
|
+
|
|
96
|
+
### Database
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
// src/routes/users/+page.server.ts
|
|
100
|
+
import { db } from 'void/db';
|
|
101
|
+
import { users } from '@schema';
|
|
102
|
+
|
|
103
|
+
export async function load() {
|
|
104
|
+
return { users: await db.select().from(users) };
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### KV Storage
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { kv } from 'void/kv';
|
|
112
|
+
|
|
113
|
+
export async function load() {
|
|
114
|
+
return { settings: await kv.get('app:settings') };
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Blob Storage
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
import { storage } from 'void/storage';
|
|
122
|
+
|
|
123
|
+
export async function load() {
|
|
124
|
+
return { avatar: await storage.get('avatars/user-1.png') };
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### AI
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
import { ai } from 'void/ai';
|
|
132
|
+
|
|
133
|
+
export const actions = {
|
|
134
|
+
summarize: async () => {
|
|
135
|
+
return ai.run('@cf/meta/llama-3.1-8b-instruct', {
|
|
136
|
+
prompt: 'Summarize the latest news',
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Cron Jobs
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
// crons/daily-cleanup.ts
|
|
146
|
+
import { defineScheduled } from 'void';
|
|
147
|
+
|
|
148
|
+
export const cron = '0 0 * * *';
|
|
149
|
+
|
|
150
|
+
export default defineScheduled(async () => {
|
|
151
|
+
// runs daily at midnight
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Queue Consumers
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
// queues/emails.ts
|
|
159
|
+
import { defineQueue } from 'void';
|
|
160
|
+
|
|
161
|
+
export default defineQueue<{ to: string; subject: string }>(async (batch) => {
|
|
162
|
+
for (const msg of batch.messages) {
|
|
163
|
+
// process each message
|
|
164
|
+
msg.ack();
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Environment Variables
|
|
170
|
+
|
|
171
|
+
Void gives you a typed env layer: declare keys in `env.ts`, read them via `import { env } from "void/env"`, and get schema validation at build + deploy time plus a client-leak guard that fails the build if a server-only key reaches the browser. `void/env` is a drop-in replacement for SvelteKit's `$env/static/*` and `$env/dynamic/*` for env-var access. See the [env vars guide](../../guide/env-vars.md) for the full feature set.
|
|
172
|
+
|
|
173
|
+
## Accessing Bindings Directly
|
|
174
|
+
|
|
175
|
+
You can also use SvelteKit's `platform.env` in server hooks and load functions:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
// src/routes/users/+page.server.ts
|
|
179
|
+
export async function load({ platform }) {
|
|
180
|
+
const { results } = await platform.env.DB.prepare('SELECT * FROM users').all();
|
|
181
|
+
return { users: results };
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Or the `cloudflare:workers` module:
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
import { env } from 'cloudflare:workers';
|
|
189
|
+
|
|
190
|
+
const { results } = await env.DB.prepare('SELECT * FROM users').all();
|
|
191
|
+
```
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# TanStack Start
|
|
6
|
+
|
|
7
|
+
[TanStack Start](https://tanstack.com/start/latest) is a Vite-based full-stack React framework. `voidPlugin()` composes directly with the TanStack Start plugin in the Vite pipeline, so there is no separate adapter to install.
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
### 1. Create a new project
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm create @tanstack/start@latest my-app
|
|
15
|
+
cd my-app
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Install dependencies
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -D void
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 3. Configure `vite.config.ts`
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { defineConfig } from 'vite';
|
|
28
|
+
import { tanstackStart } from '@tanstack/react-start/plugin';
|
|
29
|
+
import react from '@vitejs/plugin-react';
|
|
30
|
+
import { voidPlugin } from 'void';
|
|
31
|
+
|
|
32
|
+
export default defineConfig({
|
|
33
|
+
plugins: [
|
|
34
|
+
voidPlugin(), // must come before the framework plugin
|
|
35
|
+
tanstackStart(),
|
|
36
|
+
react(),
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 4. Deploy
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
void auth login
|
|
45
|
+
void deploy
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Using Void Platform Features
|
|
49
|
+
|
|
50
|
+
Most [Void platform features](../../guide/app-types.md#void-apps) work with TanStack Start. Use them in server functions:
|
|
51
|
+
|
|
52
|
+
Void-managed auth is not supported in framework mode yet. Use Better Auth's official TanStack Start integration directly for now.
|
|
53
|
+
|
|
54
|
+
### Database
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { createServerFn } from '@tanstack/react-start';
|
|
58
|
+
import { db } from 'void/db';
|
|
59
|
+
import { users } from '@schema';
|
|
60
|
+
|
|
61
|
+
const getUsers = createServerFn().handler(async () => {
|
|
62
|
+
return db.select().from(users);
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### KV Storage
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import { createServerFn } from '@tanstack/react-start';
|
|
70
|
+
import { kv } from 'void/kv';
|
|
71
|
+
|
|
72
|
+
const getSettings = createServerFn().handler(async () => {
|
|
73
|
+
return kv.get('app:settings');
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Blob Storage
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
import { createServerFn } from '@tanstack/react-start';
|
|
81
|
+
import { storage } from 'void/storage';
|
|
82
|
+
|
|
83
|
+
const getAvatar = createServerFn().handler(async () => {
|
|
84
|
+
return storage.get('avatars/user-1.png');
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### AI
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
import { createServerFn } from '@tanstack/react-start';
|
|
92
|
+
import { ai } from 'void/ai';
|
|
93
|
+
|
|
94
|
+
const summarize = createServerFn().handler(async () => {
|
|
95
|
+
return ai.run('@cf/meta/llama-3.1-8b-instruct', {
|
|
96
|
+
prompt: 'Summarize the latest news',
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Cron Jobs
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
// crons/daily-cleanup.ts
|
|
105
|
+
import { defineScheduled } from 'void';
|
|
106
|
+
|
|
107
|
+
export const cron = '0 0 * * *';
|
|
108
|
+
|
|
109
|
+
export default defineScheduled(async () => {
|
|
110
|
+
// runs daily at midnight
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Queue Consumers
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
// queues/emails.ts
|
|
118
|
+
import { defineQueue } from 'void';
|
|
119
|
+
|
|
120
|
+
export default defineQueue<{ to: string; subject: string }>(async (batch) => {
|
|
121
|
+
for (const msg of batch.messages) {
|
|
122
|
+
// process each message
|
|
123
|
+
msg.ack();
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Environment Variables
|
|
129
|
+
|
|
130
|
+
Void gives you a typed env layer: declare keys in `env.ts`, read them via `import { env } from "void/env"`, and get schema validation at build + deploy time plus a client-leak guard that fails the build if a server-only key reaches the browser. See the [env vars guide](../../guide/env-vars.md) for the full feature set.
|
|
131
|
+
|
|
132
|
+
## Accessing Bindings Directly
|
|
133
|
+
|
|
134
|
+
You can also access Cloudflare bindings via the `cloudflare:workers` module:
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
import { env } from 'cloudflare:workers';
|
|
138
|
+
|
|
139
|
+
const { results } = await env.DB.prepare('SELECT * FROM users').all();
|
|
140
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Hono
|
|
6
|
+
|
|
7
|
+
Void handlers run on [Hono](https://hono.dev). Void depends on Hono internally, but if your app imports from `hono/*` directly, add `hono` to your app's dependencies first.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install hono
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Once `hono` is installed in your app, you can use built-in middleware, helpers, and third-party Hono packages directly.
|
|
14
|
+
|
|
15
|
+
## Built-in Middleware
|
|
16
|
+
|
|
17
|
+
Use Hono's built-in middleware in your global middleware files or per-route:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
// middleware/01.cors.ts
|
|
21
|
+
import { defineMiddleware } from 'void';
|
|
22
|
+
import { cors } from 'hono/cors';
|
|
23
|
+
|
|
24
|
+
export default defineMiddleware(cors({ origin: 'https://example.com' }));
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
// middleware/02.cache.ts
|
|
29
|
+
import { defineMiddleware } from 'void';
|
|
30
|
+
import { cache } from 'hono/cache';
|
|
31
|
+
|
|
32
|
+
export default defineMiddleware(cache({ cacheName: 'my-app', cacheControl: 'max-age=3600' }));
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
// routes/api/webhooks/stripe.ts (per-route usage)
|
|
37
|
+
import { defineHandler } from 'void';
|
|
38
|
+
import { bearerAuth } from 'hono/bearer-auth';
|
|
39
|
+
|
|
40
|
+
export const POST = defineHandler(bearerAuth({ token: 'webhook-secret' }), async (c) => {
|
|
41
|
+
const body = await c.req.json();
|
|
42
|
+
return { received: true };
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Response Helpers
|
|
47
|
+
|
|
48
|
+
Hono's context helpers are available on `c` in every handler:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
// routes/api/download.ts
|
|
52
|
+
import { defineHandler } from 'void';
|
|
53
|
+
import { stream } from 'hono/streaming';
|
|
54
|
+
|
|
55
|
+
export const GET = defineHandler((c) => {
|
|
56
|
+
return stream(c, async (stream) => {
|
|
57
|
+
await stream.write('chunk 1');
|
|
58
|
+
await stream.write('chunk 2');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
// routes/api/data.ts
|
|
65
|
+
import { defineHandler } from 'void';
|
|
66
|
+
|
|
67
|
+
export const GET = defineHandler((c) => {
|
|
68
|
+
c.header('X-Custom', 'value');
|
|
69
|
+
c.status(201);
|
|
70
|
+
return c.json({ created: true });
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Third-party Middleware
|
|
75
|
+
|
|
76
|
+
Any `hono/*` or `@hono/*` package works. Install the package in your app, then use it directly:
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
// middleware/01.rate-limit.ts
|
|
80
|
+
import { defineMiddleware } from 'void';
|
|
81
|
+
import { rateLimiter } from 'hono-rate-limiter';
|
|
82
|
+
|
|
83
|
+
export default defineMiddleware(rateLimiter({ windowMs: 60_000, limit: 100 }));
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Utilities
|
|
87
|
+
|
|
88
|
+
Hono's standalone helpers work anywhere:
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import { HTTPException } from 'hono/http-exception';
|
|
92
|
+
|
|
93
|
+
// Throw typed HTTP errors
|
|
94
|
+
throw new HTTPException(404, { message: 'User not found' });
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
For the full list of built-in middleware, see the [Hono documentation](https://hono.dev/docs/middleware/builtin).
|