UNPKG

@phala/dstack-sdk

Version:
50 lines (47 loc) 1.45 kB
import { sha256 } from '@noble/hashes/sha256'; import { bytesToHex } from '@noble/hashes/utils'; // src/get-compose-hash.ts function sortObject(obj) { if (obj === void 0 || obj === null) { return obj; } if (Array.isArray(obj)) { return obj.map(sortObject); } else if (obj && typeof obj === "object" && obj.constructor === Object) { return Object.keys(obj).sort().reduce((result, key) => { const value = obj[key]; result[key] = sortObject(value); return result; }, {}); } return obj; } function preprocessAppCompose(dic) { const obj = { ...dic }; if (obj.runner === "bash" && "docker_compose_file" in obj) { delete obj.docker_compose_file; } else if (obj.runner === "docker-compose" && "bash_script" in obj) { delete obj.bash_script; } if ("pre_launch_script" in obj && !obj.pre_launch_script) { delete obj.pre_launch_script; } return obj; } function toDeterministicJson(dic) { const ordered = sortObject(dic); return JSON.stringify(ordered, (key, value) => { if (typeof value === "number" && (isNaN(value) || !isFinite(value))) { return null; } return value; }); } function getComposeHash(app_compose, normalize = false) { if (normalize) { app_compose = preprocessAppCompose(app_compose); } const manifest_str = toDeterministicJson(app_compose); return bytesToHex(sha256(new TextEncoder().encode(manifest_str))); } export { getComposeHash };