one
Version:
One is a new React Framework that makes Vite serve both native and web.
36 lines (35 loc) • 1.36 kB
JavaScript
import { useRef } from "react";
import { getServerContext } from "../vite/one-server-only";
import { getQueryKey } from "./getQueryKey";
import { resolveZeroQuery } from "./resolveQuery";
import { useQuery as useQueryZero } from "./useQueryZero";
let clientInitialData = getServerContext()?.postRenderData;
const serverQueryData = {};
globalThis.__vxrnServerData__ = serverQueryData;
const promises = /* @__PURE__ */ new WeakMap(), useQuery = ((query, enable = !0) => {
const snapshot = useQueryZero(query, enable), queryIdRef = useRef(void 0);
query && !queryIdRef.current && (queryIdRef.current = getQueryKey(query));
const queryId = queryIdRef.current || "";
if (typeof window > "u") {
if (!query) return [];
const promise = promises.get(query), value = serverQueryData[queryId];
if (value) return value;
if (!promise) {
const promise2 = new Promise((res, rej) => {
resolveZeroQuery(query).then((val) => {
serverQueryData[queryId] = val, res();
}).catch((err) => {
promises.set(query, null), rej(err);
});
});
throw promises.set(query, promise2), promise2;
}
if (promise) throw promise;
return [];
}
return clientInitialData && !snapshot ? clientInitialData[queryId] || [] : snapshot || [];
});
export {
useQuery
};
//# sourceMappingURL=useQuery.js.map