export const STALE_CANVAS_REVISION_CODE = "STALE_CANVAS_REVISION"; export function parseCanvasRevisionDate(value: unknown) { const raw = String(value || "").trim(); if (!raw) return null; const parsed = new Date(raw); return Number.isNaN(parsed.getTime()) ? null : parsed; } export function isStaleCanvasSaveBaseRevision(params: { baseCanvasRevision?: unknown; baseCanvasUpdatedAt?: unknown; currentUpdatedAt: Date; }) { const baseDate = parseCanvasRevisionDate( params.baseCanvasUpdatedAt || params.baseCanvasRevision ); if (!baseDate) return false; return baseDate.getTime() < params.currentUpdatedAt.getTime(); } export function buildStaleCanvasSaveConflictPayload(currentUpdatedAt: Date) { return { success: false, error: "画布已更新,请刷新后再保存", code: STALE_CANVAS_REVISION_CODE, canvasUpdatedAt: currentUpdatedAt.toISOString(), }; }