import { getLayerAssetRef, type Project } from "@pien-studio/types"; export function hasProjectChanged(left: Project, right: Project): boolean { if (left.id !== right.id) return true; if (left.title !== right.title) return true; if (left.createdAt !== right.createdAt) return true; if (left.updatedAt !== right.updatedAt) return true; if (left.aspectRatio !== right.aspectRatio) return true; if ( left.canvas.width !== right.canvas.width || left.canvas.height !== right.canvas.height || left.canvas.unit !== right.canvas.unit ) { return true; } if (left.layers.length !== right.layers.length) return true; for (let index = 0; index < left.layers.length; index += 1) { const a = left.layers[index]; const b = right.layers[index]; if (!a || !b) return true; if ( a.id !== b.id || a.type !== b.type || a.name !== b.name || a.x !== b.x || a.y !== b.y || a.width !== b.width || a.height !== b.height || a.scale !== b.scale || a.rotation !== b.rotation || a.opacity !== b.opacity || a.visible !== b.visible ) { return true; } if ( JSON.stringify(getLayerAssetRef(a)) !== JSON.stringify(getLayerAssetRef(b)) ) return true; if ( (a.type === "raster" || a.type === "sticker") && (b.type === "raster" || b.type === "sticker") && a.runtimeSourceUri !== b.runtimeSourceUri ) return true; if ( a.type === "text" && b.type === "text" && (a.text !== b.text || a.fontFamily !== b.fontFamily || a.fontSize !== b.fontSize || a.color !== b.color) ) return true; if (JSON.stringify(a.effects) !== JSON.stringify(b.effects)) return true; } return false; }