13 lines
553 B
TypeScript
13 lines
553 B
TypeScript
import { createHash } from "node:crypto";
|
|
|
|
export function stableJsonValue(value: unknown): unknown {
|
|
if (Array.isArray(value)) return value.map(stableJsonValue);
|
|
if (typeof value !== "object" || value === null) return value;
|
|
const input = value as Record<string, unknown>;
|
|
return Object.fromEntries(Object.keys(input).sort().map((key) => [key, stableJsonValue(input[key])]));
|
|
}
|
|
|
|
export function stableJsonSha256(value: unknown): string {
|
|
return `sha256:${createHash("sha256").update(JSON.stringify(stableJsonValue(value))).digest("hex")}`;
|
|
}
|