hydrogen-sanity
Version:
Sanity.io toolkit for Hydrogen
62 lines (59 loc) • 2.71 kB
JavaScript
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