import { createHash } from "node:crypto"; import { readFileSync, statSync } from "node:fs"; export function sha256(buf: Buffer | string): string { return createHash("sha256").update(buf).digest("hex"); } export function fileSha256(path: string): string { return sha256(readFileSync(path)); } export function fileExists(path: string): boolean { try { statSync(path); return true; } catch { return false; } } export function getByPath(obj: unknown, path: string): unknown { const parts = path.split("."); let cur: unknown = obj; for (const part of parts) { if (cur == null || typeof cur !== "object") return undefined; cur = (cur as Record)[part]; } return cur; } export function setByPath( obj: Record, path: string, value: unknown, ): void { const parts = path.split("."); let cur: Record = obj; for (let i = 0; i < parts.length - 1; i++) { const key = parts[i]!; const next = cur[key]; if (next == null || typeof next !== "object" || Array.isArray(next)) { cur[key] = {}; } cur = cur[key] as Record; } cur[parts[parts.length - 1]!] = value; }