Files
Pien-Studio/apps/web/lib/project-equality.ts
T

41 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-10 03:06:54 +07:00
import 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.assetId !== b.assetId ||
a.sourceUri !== b.sourceUri ||
a.x !== b.x ||
a.y !== b.y ||
a.width !== b.width ||
a.height !== b.height ||
a.scale !== b.scale ||
a.rotation !== b.rotation ||
2026-05-24 21:05:21 +07:00
a.opacity !== b.opacity ||
a.visible !== b.visible
2026-05-10 03:06:54 +07:00
) {
return true;
}
2026-05-21 00:02:12 +07:00
if (JSON.stringify(a.effects) !== JSON.stringify(b.effects)) return true;
2026-05-10 03:06:54 +07:00
}
return false;
}