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