one
Version:
One is a new React Framework that makes Vite serve both native and web.
39 lines (38 loc) • 1.17 kB
JavaScript
import { useSyncExternalStore } from "react";
import { useServerContext } from "./vite/one-server-only";
let clientMatches = [];
const clientMatchesListeners = /* @__PURE__ */ new Set();
function subscribeToClientMatches(callback) {
return clientMatchesListeners.add(callback), () => clientMatchesListeners.delete(callback);
}
function getClientMatchesSnapshot() {
return clientMatches;
}
function setClientMatches(matches) {
clientMatches = matches;
for (const listener of clientMatchesListeners)
listener();
}
function useMatches() {
const serverContext = useServerContext();
return process.env.VITE_ENVIRONMENT === "ssr" ? serverContext?.matches ?? [] : useSyncExternalStore(
subscribeToClientMatches,
getClientMatchesSnapshot,
// server snapshot for hydration - must match what SSR rendered
() => serverContext?.matches ?? []
);
}
function useMatch(routeId) {
return useMatches().find((m) => m.routeId === routeId);
}
function usePageMatch() {
const matches = useMatches();
return matches[matches.length - 1];
}
export {
setClientMatches,
useMatch,
useMatches,
usePageMatch
};
//# sourceMappingURL=useMatches.js.map