one
Version:
One is a new React Framework that makes Vite serve both native and web.
115 lines (114 loc) • 4.66 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: !0 });
}, __copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function")
for (let key2 of __getOwnPropNames(from))
!__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: !0 }), 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_node_async_hooks = require("node:async_hooks"), import_constants = require("../constants");
const key = "__vxrnrequestAsyncLocalStore", read = () => globalThis[key], ASYNC_LOCAL_STORE = {
get current() {
if (read()) return read();
const _ = new import_node_async_hooks.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() }, GLOBAL_ID_KEY = "__oneGlobalContextId";
globalThis[GLOBAL_ID_KEY] || (globalThis[GLOBAL_ID_KEY] = globalId);
function ensureAsyncLocalID() {
const id = process.env.VERCEL ? globalThis[GLOBAL_ID_KEY] : requestAsyncLocalStore?.getStore();
if (!id)
throw new Error("Internal One error, no AsyncLocalStorage id!");
return id;
}
const SERVER_CONTEXTS_KEY = "__oneServerContexts";
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();
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[import_constants.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];
}
//# sourceMappingURL=one-server-only.js.map