← Files CompText ContextARCHIVED FILE
scripts/canonical-json.mjs
829 Bytes · Oct 2, 2026 · 00:31 UTC
import crypto from 'node:crypto';
import fs from 'node:fs';
export function canonicalize(value) {
if (Array.isArray(value)) return value.map(canonicalize);
if (value && typeof value === 'object') {
return Object.fromEntries(
Object.keys(value).sort().map(key => [key, canonicalize(value[key])])
);
}
return value;
}
export function canonicalText(value) {
return JSON.stringify(canonicalize(value));
}
export function sha256Canonical(value) {
const text = canonicalText(value);
return `sha256:${crypto.createHash('sha256').update(text).digest('hex')}`;
}
if (process.argv[1] && process.argv[1].endsWith('canonical-json.mjs') && process.argv[2]) {
const value = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
process.stdout.write(`${sha256Canonical(value)}\n${canonicalText(value)}\n`);
}SHA-256: 9c0ef39f88069327854ffdc6a1bc58186a3b43623bd59985d57064610323bc0a