one
Version:
One is a new React Framework that makes Vite serve both native and web.
65 lines • 2.44 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 key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
value: true
}), mod);
var useQuery_exports = {};
__export(useQuery_exports, {
useQuery: () => useQuery
});
module.exports = __toCommonJS(useQuery_exports);
var import_react = require("react");
var import_one_server_only = require("../vite/one-server-only.cjs");
var import_getQueryKey = require("./getQueryKey.cjs");
var import_resolveQuery = require("./resolveQuery.cjs");
var import_useQueryZero = require("./useQueryZero.cjs");
const clientInitialData = (0, import_one_server_only.getServerContext)()?.postRenderData;
const serverQueryData = {};
globalThis["__vxrnServerData__"] = serverQueryData;
const promises = /* @__PURE__ */new WeakMap();
const useQuery = (query, enable = true) => {
const snapshot = (0, import_useQueryZero.useQuery)(query, enable);
const queryIdRef = (0, import_react.useRef)(void 0);
if (query && !queryIdRef.current) queryIdRef.current = (0, import_getQueryKey.getQueryKey)(query);
const queryId = queryIdRef.current || "";
if (typeof window === "undefined") {
if (!query) return [];
const promise = promises.get(query);
const value = serverQueryData[queryId];
if (value) return value;
if (!promise) {
const promise2 = new Promise((res, rej) => {
(0, import_resolveQuery.resolveZeroQuery)(query).then(val => {
serverQueryData[queryId] = val;
res();
}).catch(err => {
promises.set(query, null);
rej(err);
});
});
promises.set(query, promise2);
throw promise2;
}
if (promise) throw promise;
return [];
}
if (clientInitialData && !snapshot) return clientInitialData[queryId] || [];
return snapshot || [];
};