astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
37 lines (36 loc) • 1.19 kB
JavaScript
import { createOriginCheckMiddleware } from "../app/origin-check.js";
import { createAsyncManifestMemo } from "../manifest/memo.js";
import { NOOP_MIDDLEWARE_FN } from "./noop-middleware.js";
import { sequence } from "./sequence.js";
const resolvedMiddleware = /* @__PURE__ */ new WeakMap();
const middlewareMemo = createAsyncManifestMemo(async (manifest) => {
let handler;
if (manifest.middleware) {
const middlewareInstance = await manifest.middleware();
const onRequest = middlewareInstance.onRequest ?? NOOP_MIDDLEWARE_FN;
const internalMiddlewares = [onRequest];
if (manifest.checkOrigin) {
internalMiddlewares.unshift(createOriginCheckMiddleware());
}
handler = sequence(...internalMiddlewares);
} else {
handler = NOOP_MIDDLEWARE_FN;
}
resolvedMiddleware.set(manifest, handler);
return handler;
});
function getMiddleware(manifest) {
return middlewareMemo.get(manifest);
}
function peekMiddleware(manifest) {
return resolvedMiddleware.get(manifest);
}
function clearMiddleware(manifest) {
middlewareMemo.invalidate(manifest);
resolvedMiddleware.delete(manifest);
}
export {
clearMiddleware,
getMiddleware,
peekMiddleware
};