Back

Version 6

6/14/2024
import { HttpHandler } from "https://esm.town/v/emarref/HttpHandler";
import { HttpMiddleware } from "https://esm.town/v/emarref/HttpMiddleware";
import { internalServerError, success } from "https://esm.town/v/emarref/HttpResponse";

export type Chain = {
add: (middleware: HttpMiddleware) => Promise<Chain>;
send: (response: Response) => HttpHandler;
};

export function chain(): Promise<Chain> {
const stack = new Set<HttpMiddleware>();

async function getChain(): Promise<Chain> {
return { add, send };
}

const add: Chain["add"] = (middleware) => {
stack.add(middleware);
return getChain();
};

const send: Chain["send"] = (defaultResponse) => {
return async (request) => {
const queue = Array.from(stack);
let response = defaultResponse.clone();
let middleware: HttpMiddleware | undefined;
let happy = true;

async function loop() {
middleware = queue.shift();

if (!middleware) {
return;
}

const handler = middleware(async () => response);
Updated: June 14, 2024