rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
36 lines (35 loc) • 1.46 kB
JavaScript
import { AsyncLocalStorage } from "async_hooks";
import { defineRwState } from "rwsdk/__state";
const requestInfoStore = defineRwState("requestInfoStore", () => new AsyncLocalStorage());
const requestInfoBase = {};
const REQUEST_INFO_KEYS = ["request", "params", "ctx", "rw", "cf", "response"];
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("RedwoodSDK: Request context not found. getRequestInfo() can only be called within the request lifecycle (e.g., in a route handler, middleware, or server action).\n\n" +
"For detailed troubleshooting steps, see: https://docs.rwsdk.com/guides/troubleshooting#request-context-errors");
}
return store;
}
export function runWithRequestInfo(nextRequestInfo, fn) {
return requestInfoStore.run(nextRequestInfo, fn);
}
export function runWithRequestInfoOverrides(overrides, fn) {
const requestInfo = requestInfoStore.getStore();
const newRequestInfo = {
...requestInfo,
...overrides,
};
return runWithRequestInfo(newRequestInfo, fn);
}