UNPKG

hydrogen-sanity

Version:
62 lines (59 loc) 2.71 kB
import { validateApiPerspective } from '@sanity/client'; import { urlSearchParamPreviewPerspective } from '@sanity/preview-url-secret/constants'; async function sha256(message) { const messageBuffer = await new TextEncoder().encode(message); const hashBuffer = await crypto.subtle.digest("SHA-256", messageBuffer); return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join(""); } function hashQuery(query, params) { let hash = query; if (params) { hash += JSON.stringify(params); } return sha256(hash); } function sanitizePerspective(perspective) { let sanitizedPerspective = typeof perspective === "string" && perspective.includes(",") ? perspective.split(",") : perspective; if (Array.isArray(sanitizedPerspective)) { sanitizedPerspective = sanitizedPerspective.filter( (p) => typeof p === "string" && p.length > 0 ); } validateApiPerspective(sanitizedPerspective); return sanitizedPerspective === "raw" ? "drafts" : sanitizedPerspective; } function supportsPerspectiveStack(apiVersion) { if (apiVersion === "1") return false; if (apiVersion === "X") return true; const normalizedVersion = `${apiVersion}`.replace(/^v/, ""); if (!/^\d{4}-\d{2}-\d{2}$/.test(normalizedVersion)) return false; const versionDate = new Date(normalizedVersion); const cutoffDate = /* @__PURE__ */ new Date("2025-02-19"); return versionDate >= cutoffDate; } function getPerspective(session) { const perspective = session.get("perspective")?.split(",").filter((p) => p.length > 0); validateApiPerspective(perspective); return perspective; } function getPerspectiveFromUrl(url) { try { const parsed = typeof url === "string" ? new URL(url) : url; const param = parsed.searchParams.get(urlSearchParamPreviewPerspective); if (!param) return void 0; return sanitizePerspective(param); } catch { return void 0; } } function isSanityPreviewSession(session) { return isHydrogenSession(session) && "has" in session && typeof session.has === "function" && "destroy" in session && typeof session.destroy === "function"; } function isHydrogenSession(session) { return !!session && typeof session === "object" && "get" in session && typeof session.get === "function" && "set" in session && typeof session.set === "function" && "unset" in session && typeof session.unset === "function" && "commit" in session && typeof session.commit === "function"; } function isServer() { return typeof document === "undefined"; } export { getPerspective, getPerspectiveFromUrl, hashQuery, isHydrogenSession, isSanityPreviewSession, isServer, sanitizePerspective, supportsPerspectiveStack }; //# sourceMappingURL=utils.js.map