// @refresh skip
import { defineMiddleware, sendWebResponse } from "vinxi/http";
import { getFetchEvent } from "../server/fetchEvent";
function wrapRequestMiddleware(onRequest) {
    return async (h3Event) => {
        const fetchEvent = getFetchEvent(h3Event);
        const response = await onRequest(fetchEvent);
        if (response) {
            await sendWebResponse(h3Event, response);
        }
    };
}
function wrapResponseMiddleware(onBeforeResponse) {
    return async (h3Event, response) => {
        const fetchEvent = getFetchEvent(h3Event);
        const mwResponse = await onBeforeResponse(fetchEvent, response);
        if (mwResponse) {
            await sendWebResponse(h3Event, mwResponse);
        }
    };
}
export function createMiddleware({ onRequest, onBeforeResponse }) {
    return defineMiddleware({
        onRequest: typeof onRequest === "function"
            ? wrapRequestMiddleware(onRequest)
            : Array.isArray(onRequest)
                ? onRequest.map(wrapRequestMiddleware)
                : undefined,
        onBeforeResponse: typeof onBeforeResponse === "function"
            ? wrapResponseMiddleware(onBeforeResponse)
            : Array.isArray(onBeforeResponse)
                ? onBeforeResponse.map(wrapResponseMiddleware)
                : undefined
    });
}
