UNPKG

@rollercoaster-dev/rd-logger

Version:

A neurodivergent-friendly logger for Rollercoaster.dev projects

47 lines (46 loc) 1.66 kB
import { AsyncLocalStorage } from 'async_hooks'; import { randomUUID } from 'crypto'; // Create an AsyncLocalStorage instance to hold the context for each request const requestContext = new AsyncLocalStorage(); /** * Runs a function within an asynchronous request context. * Creates a new context with a unique request ID and start time. * * @param fn The function to execute within the context. * @param existingRequestId Optional request ID from headers (e.g., 'x-request-id') * @returns The return value of the executed function. */ export function runWithRequestContext(fn, existingRequestId) { const store = { requestId: existingRequestId || randomUUID(), requestStartTime: Date.now(), }; return requestContext.run(store, fn); } /** * Gets the current request context store. * Returns undefined if called outside a context created by runWithRequestContext. * * @returns The current request store or undefined. */ export function getRequestStore() { return requestContext.getStore(); } /** * Gets the current request ID. * * @returns The current request ID or 'unknown' if not in a request context. */ export function getCurrentRequestId() { var _a; return ((_a = getRequestStore()) === null || _a === void 0 ? void 0 : _a.requestId) || 'unknown'; } /** * Gets the start time of the current request. * * @returns The request start timestamp (milliseconds since epoch) or the current time if not in a request context. */ export function getCurrentRequestStartTime() { var _a; return ((_a = getRequestStore()) === null || _a === void 0 ? void 0 : _a.requestStartTime) || Date.now(); }