@whatwg-node/server
Version:
Fetch API compliant HTTP Server adapter
32 lines (31 loc) • 1 kB
JavaScript
import { completeAssign } from '../utils.js';
export function isFetchEvent(event) {
return event != null && event.request != null && event.respondWith != null;
}
// Required for envs like nextjs edge runtime
function isRequestAccessible(serverContext) {
try {
return !!serverContext?.request;
}
catch {
return false;
}
}
export function useFetchEvent() {
const eventMap = new WeakMap();
return {
onRequestAdapt({ args: [event, ...restOfCtx], setRequest, setServerContext }) {
if (isRequestAccessible(event)) {
setRequest(event.request);
const serverContext = restOfCtx.length > 0 ? completeAssign(...restOfCtx) : event;
setServerContext(serverContext);
}
},
onResponse({ request, response }) {
const event = eventMap.get(request);
if (isFetchEvent(event)) {
event.respondWith(response);
}
},
};
}