The snapshot to validate.
Validation result with status and optional reason.
export function validateSyncSnapshot(snapshot: unknown): {
valid: boolean;
reason?: string;
} {
if (!snapshot || typeof snapshot !== "object") {
return { valid: false, reason: "Snapshot is not an object" };
}
const snap = snapshot as Record<string, unknown>;
if (!Array.isArray(snap.entries)) {
return { valid: false, reason: "Missing or invalid entries array" };
}
if (!Array.isArray(snap.uniqueMediaIds)) {
return { valid: false, reason: "Missing or invalid uniqueMediaIds array" };
}
if (!Array.isArray(snap.remainingMediaIds)) {
return {
valid: false,
reason: "Missing or invalid remainingMediaIds array",
};
}
if (snap.remainingMediaIds.length === 0) {
return { valid: false, reason: "No remaining entries in snapshot" };
}
if (!snap.progress || typeof snap.progress !== "object") {
return { valid: false, reason: "Missing or invalid progress object" };
}
if (typeof snap.timestamp !== "number") {
return { valid: false, reason: "Missing or invalid timestamp" };
}
if (snap.timestamp > Date.now()) {
return { valid: false, reason: "Timestamp is in the future" };
}
return { valid: true };
}
Validates a sync snapshot object for completeness and correctness.