one
Version:
One is a new React Framework that makes Vite serve both native and web.
30 lines (29 loc) • 1.14 kB
JavaScript
import { useSyncExternalStore } from "react";
import { useServerContext } from "./vite/one-server-only.mjs";
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.mjs.map