astro-ghostcms/.pnpm-store/v3/files/b7/a8098ef51b4c5e1cd91e3870e99...

44 lines
1.5 KiB
Plaintext

import { attachCookiesToResponse, responseHasCookies } from "../cookies/index.js";
import { AstroError, AstroErrorData } from "../errors/index.js";
async function callMiddleware(onRequest, apiContext, responseFunction) {
let nextCalled = false;
let responseFunctionPromise = void 0;
const next = async () => {
nextCalled = true;
responseFunctionPromise = responseFunction();
return responseFunctionPromise;
};
let middlewarePromise = onRequest(apiContext, next);
return await Promise.resolve(middlewarePromise).then(async (value) => {
if (nextCalled) {
if (typeof value !== "undefined") {
if (value instanceof Response === false) {
throw new AstroError(AstroErrorData.MiddlewareNotAResponse);
}
return ensureCookiesAttached(apiContext, value);
} else {
if (responseFunctionPromise) {
return responseFunctionPromise;
} else {
throw new AstroError(AstroErrorData.MiddlewareNotAResponse);
}
}
} else if (typeof value === "undefined") {
throw new AstroError(AstroErrorData.MiddlewareNoDataOrNextCalled);
} else if (value instanceof Response === false) {
throw new AstroError(AstroErrorData.MiddlewareNotAResponse);
} else {
return ensureCookiesAttached(apiContext, value);
}
});
}
function ensureCookiesAttached(apiContext, response) {
if (apiContext.cookies !== void 0 && !responseHasCookies(response)) {
attachCookiesToResponse(response, apiContext.cookies);
}
return response;
}
export {
callMiddleware
};