one
Version:
One is a new React Framework that makes Vite serve both native and web.
169 lines • 5.41 kB
JavaScript
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];
}
}