{"version":3,"file":"json.cjs","names":["fs"],"sources":["../src/json.ts"],"sourcesContent":["import {\n  canonicalizeJson,\n  parseJson,\n  type JsonCompatible,\n  type JsonSerializable,\n  type StringifiedJson,\n} from \"@milaboratories/pl-model-common\";\nimport { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\n\nexport type HashedJson<T = unknown> =\n  JsonCompatible<T> extends never\n    ? never\n    : string & {\n        __json_hashed: T;\n      };\n\nexport function hashJson<T>(value: JsonCompatible<T>): HashedJson<T>;\nexport function hashJson<T extends JsonSerializable>(value: T): string;\nexport function hashJson(value: unknown): string {\n  const hash = createHash(\"sha256\");\n  hash.update(canonicalizeJson(value));\n  return hash.digest().toString(\"hex\");\n}\n\nexport async function readJson<T extends JsonSerializable>(\n  filePath: string,\n  signal?: AbortSignal,\n): Promise<T> {\n  const content = await fs.promises.readFile(filePath, { encoding: \"utf8\", signal });\n  return parseJson(content as StringifiedJson<T>);\n}\n\nexport function readJsonSync<T extends JsonSerializable>(filePath: string): T {\n  const content = fs.readFileSync(filePath, { encoding: \"utf8\" });\n  return parseJson(content as StringifiedJson<T>);\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,SAAS,OAAwB;CAC/C,MAAM,QAAA,GAAA,YAAA,WAAA,CAAkB,QAAQ;CAChC,KAAK,QAAA,GAAA,gCAAA,iBAAA,CAAwB,KAAK,CAAC;CACnC,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,KAAK;AACrC;AAEA,eAAsB,SACpB,UACA,QACY;CAEZ,QAAA,GAAA,gCAAA,UAAA,CAAiB,MADKA,QAAAA,QAAG,SAAS,SAAS,UAAU;EAAE,UAAU;EAAQ;CAAO,CAAC,CACnC;AAChD;AAEA,SAAgB,aAAyC,UAAqB;CAE5E,QAAA,GAAA,gCAAA,UAAA,CADgBA,QAAAA,QAAG,aAAa,UAAU,EAAE,UAAU,OAAO,CACtC,CAAuB;AAChD"}