UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

85 lines (84 loc) 3.14 kB
import { AsyncLocalStorage } from "node:async_hooks"; import { SERVER_CONTEXT_KEY } from "../constants.mjs"; const key = "__vxrnrequestAsyncLocalStore", read = () => globalThis[key], ASYNC_LOCAL_STORE = { get current() { if (read()) return read(); const _ = new AsyncLocalStorage(); return globalThis[key] = _, _; } }, requestAsyncLocalStore = process.env.VITE_ENVIRONMENT === "ssr" ? ASYNC_LOCAL_STORE.current : null, newCache = /* @__PURE__ */new WeakMap(), asyncHeadersCache = globalThis.__vxrnasyncHeadersCache ?? newCache; globalThis.__vxrnasyncHeadersCache ||= asyncHeadersCache; async function runWithAsyncLocalContext(cb) { const id = { _id: Math.random() }; let out = null; return await ASYNC_LOCAL_STORE.current.run(id, async () => { out = await cb(id); }), out; } async function setResponseHeaders(cb) { const id = ensureAsyncLocalID(), headers = asyncHeadersCache.get(id) ?? new Headers(); asyncHeadersCache.set(id, headers), cb(headers); } function mergeHeaders(onto, from) { from.forEach((value, key2) => { value === void 0 || value === "undefined" ? onto.delete(key2) : onto.append(key2, value); }); } const globalId = { _id: Math.random() }; function ensureAsyncLocalID() { const id = process.env.VERCEL ? globalId : requestAsyncLocalStore?.getStore(); if (!id) throw new Error("Internal One error, no AsyncLocalStorage id!"); return id; } const serverContexts = /* @__PURE__ */new WeakMap(); function setServerContext(data) { if (process.env.VITE_ENVIRONMENT === "ssr") { const id = ensureAsyncLocalID(); serverContexts.has(id) || serverContexts.set(id, {}); const context = serverContexts.get(id); Object.assign(context, data); } else throw new Error("Don't call setServerContext on client"); } function getServerContext() { return (() => { if (process.env.VITE_ENVIRONMENT === "ssr") { const id = ensureAsyncLocalID(); return serverContexts.get(id); } return globalThis[SERVER_CONTEXT_KEY]; })(); } function useServerContext() { if (process.env.VITE_ENVIRONMENT === "ssr") try { const useContext = globalThis.__vxrnGetContextFromReactContext; if (useContext) return serverContexts.get(useContext()); } catch {} return getServerContext(); } function setServerData(key2, value) { if (process.env.VITE_ENVIRONMENT === "ssr") { const context = getServerContext(); setServerContext({ postRenderData: { ...context?.postRenderData, [key2]: value } }); } else throw new Error(`Cannot setServerData in ${process.env.VITE_ENVIRONMENT} environment!`); } function getServerData(key2) { if (process.env.VITE_ENVIRONMENT === "ssr") throw new Error("Cannot getServerData on the server"); if (process.env.VITE_ENVIRONMENT !== "ssr") return getServerContext()?.postRenderData?.[key2]; } export { asyncHeadersCache, ensureAsyncLocalID, getServerContext, getServerData, mergeHeaders, requestAsyncLocalStore, runWithAsyncLocalContext, setResponseHeaders, setServerContext, setServerData, useServerContext }; //# sourceMappingURL=one-server-only.mjs.map