Skip to content

magne4000/universal-middleware

Repository files navigation

universal-middleware

Write middlewares and handlers once, target Hono, Express, Cloudflare, Hattip, Webroute, Fastify, h3, Elysia, (and more on the way!).

Documentation

Learn more on the Documentation

Code example

A middleware that returns an early response if some header is missing.

// 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:

// 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;