@redwoodjs/sdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
34 lines (33 loc) • 1.09 kB
JavaScript
import { AsyncLocalStorage } from "async_hooks";
const requestInfoStore = new AsyncLocalStorage();
const requestInfoBase = {};
const REQUEST_INFO_KEYS = ["request", "params", "ctx", "headers", "rw", "cf"];
REQUEST_INFO_KEYS.forEach((key) => {
Object.defineProperty(requestInfoBase, key, {
enumerable: true,
configurable: false,
get: function () {
const store = requestInfoStore.getStore();
return store ? store[key] : undefined;
},
});
});
export const requestInfo = Object.freeze(requestInfoBase);
export function getRequestInfo() {
const store = requestInfoStore.getStore();
if (!store) {
throw new Error("Request context not found");
}
return store;
}
export function runWithRequestInfo(context, fn) {
return requestInfoStore.run(context, fn);
}
export function runWithRequestInfoOverrides(overrides, fn) {
const requestInfo = requestInfoStore.getStore();
const newRequestInfo = {
...requestInfo,
...overrides,
};
return requestInfoStore.run(newRequestInfo, fn);
}