UNPKG

rwsdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

36 lines (35 loc) 1.46 kB
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); }