import type { CanvasElement } from "./store.ts"; /** Ignore history metadata and object key ordering, but preserve drawing/point order. */ export function documentFingerprint( elements: readonly CanvasElement[], ): string { return JSON.stringify( elements .filter((element) => !element.isDeleted) .map( ({ version, versionNonce, updated, index, ...document }) => document, ), (_key, value: unknown) => value !== null && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries( Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0, ), ) : value, ); }