UNPKG

@redwoodjs/sdk

Version:

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

34 lines (33 loc) 1.09 kB
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); }