UNPKG

one

Version:

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

169 lines 5.41 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key2 of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key2) && key2 !== except) __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable }); } return to; }; var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var one_server_only_exports = {}; __export(one_server_only_exports, { asyncHeadersCache: () => asyncHeadersCache, ensureAsyncLocalID: () => ensureAsyncLocalID, getServerContext: () => getServerContext, getServerData: () => getServerData, mergeHeaders: () => mergeHeaders, requestAsyncLocalStore: () => requestAsyncLocalStore, runWithAsyncLocalContext: () => runWithAsyncLocalContext, setResponseHeaders: () => setResponseHeaders, setServerContext: () => setServerContext, setServerData: () => setServerData, useServerContext: () => useServerContext }); module.exports = __toCommonJS(one_server_only_exports); var import_constants = require("../constants.cjs"); var import_node_async_hooks = require("node:async_hooks"); const _ctxKey = Symbol.for("__oneCtx"); const key = "__vxrnrequestAsyncLocalStore"; const read = () => globalThis[key]; const ASYNC_LOCAL_STORE = { get current() { if (read()) return read(); const _ = new import_node_async_hooks.AsyncLocalStorage(); globalThis[key] = _; return _; } }; const requestAsyncLocalStore = process.env.VITE_ENVIRONMENT === "ssr" ? ASYNC_LOCAL_STORE.current : null; const newCache = /* @__PURE__ */new WeakMap(); const asyncHeadersCache = globalThis["__vxrnasyncHeadersCache"] ?? newCache; globalThis["__vxrnasyncHeadersCache"] ||= asyncHeadersCache; async function runWithAsyncLocalContext(cb) { const id = { _id: Math.random() }; const store = ASYNC_LOCAL_STORE.current; if (!store) { return cb(id); } let out = null; await store.run(id, async () => { out = await cb(id); }); return out; } async function setResponseHeaders(cb) { const id = ensureAsyncLocalID(); const cache = globalThis["__vxrnasyncHeadersCache"] ?? asyncHeadersCache; const headers = cache.get(id) ?? new Headers(); cache.set(id, headers); cb(headers); } function mergeHeaders(onto, from) { const setCookies = from.getSetCookie?.(); if (setCookies?.length) { for (const cookie of setCookies) { onto.append("set-cookie", cookie); } } from.forEach((value, key2) => { if (key2 === "set-cookie") return; if (value === void 0 || value === "undefined") { onto.delete(key2); } else { onto.set(key2, value); } }); } const globalId = { _id: Math.random() }; const GLOBAL_ID_KEY = "__oneGlobalContextId"; if (!globalThis[GLOBAL_ID_KEY]) { globalThis[GLOBAL_ID_KEY] = globalId; } function ensureAsyncLocalID() { const globalIdKey = GLOBAL_ID_KEY || "__oneGlobalContextId"; const store = requestAsyncLocalStore ?? globalThis["__vxrnrequestAsyncLocalStore"]; const id = process.env.VERCEL ? globalThis[globalIdKey] : store?.getStore(); if (!id) { throw new Error(`Internal One error, no AsyncLocalStorage id!`); } return id; } const SERVER_CONTEXTS_KEY = "__oneServerContexts"; if (!globalThis[SERVER_CONTEXTS_KEY]) { globalThis[SERVER_CONTEXTS_KEY] = /* @__PURE__ */new WeakMap(); } const serverContexts = globalThis[SERVER_CONTEXTS_KEY]; function setServerContext(data) { if (process.env.VITE_ENVIRONMENT === "ssr") { const id = ensureAsyncLocalID(); let context = id[_ctxKey]; if (!context) { context = {}; id[_ctxKey] = context; serverContexts.set(id, context); } Object.assign(context, data); } else { throw new Error(`Don't call setServerContext on client`); } } function getServerContext() { const out = (() => { if (process.env.VITE_ENVIRONMENT === "ssr") { const id = ensureAsyncLocalID(); return id[_ctxKey] || serverContexts.get(id); } return globalThis[import_constants.SERVER_CONTEXT_KEY]; })(); return out; } function useServerContext() { if (process.env.VITE_ENVIRONMENT === "ssr") { try { const useContext = globalThis["__vxrnGetContextFromReactContext"]; if (useContext) { const id = useContext(); if (id) return id[_ctxKey] || serverContexts.get(id); } } 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]; } }