repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/canvas/src/document.ts
Rawimport 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,
);
}