UNPKG

universal-middleware

Version:

Write middlewares and handlers once, target [srvx](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hono), [Express](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-express), [Cloudflare](https://gi

64 lines (48 loc) 2.23 kB
# `universal-middleware` Write middlewares and handlers once, target [srvx](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hono), [Express](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-express), [Cloudflare](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-cloudflare), [Hattip](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hattip), [Webroute](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-webroute), [Fastify](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-fastify), [h3](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-h3), [Elysia](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-elysia) [Vercel](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-vercel) , (and more on the way!). ## Documentation Learn more on the [Documentation](https://universal-middleware.dev/) ## Code example A middleware that returns an early response if some header is missing. ```ts // src/middlewares/demo.middleware.ts import type { Get, UniversalMiddleware } from "@universal-middleware/core"; interface Config { header: string; } // This middleware will return an early response if given header is missing const guardMiddleware = ((config) => (request, ctx) => { if (!request.headers.has(config.header)) { return new Response("Header not present", { status: 401, }); } // else we do nothing // Using `satisfies` to not lose return type }) satisfies Get<[Config], UniversalMiddleware>; // export default is mandatory export default guardMiddleware; ``` After bundling and publishing, this would be used like this: ```ts // hono-entry.ts import { Hono } from "hono"; // hattip users would use "some-lib/middlewares/demo-middleware-hattip" // express users would use "some-lib/middlewares/demo-middleware-express" // etc. import demoMiddleware from "some-lib/middlewares/demo-middleware-hono"; const app = new Hono(); app.use(demoMiddleware({ header: 'X-Universal-Demo' })); app.get("/", () => new Response('ok'))); export default app; ```