Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/canvas/src/document.ts

Raw
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,
	);
}