{"version":3,"file":"dump.cjs","names":["fs"],"sources":["../export/dump.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { promises as fs } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport type { PObjectId, DataQuery } from \"@milaboratories/pl-model-common\";\n\nexport function hashColumnId(columnId: PObjectId): PObjectId {\n  return createHash(\"sha256\").update(columnId).digest(\"hex\") as PObjectId;\n}\n\nexport function hashAddColumnEntry(\n  entry: PFrameInternal.AddColumnEntryV2,\n): PFrameInternal.AddColumnEntryV2 {\n  return {\n    ...entry,\n    id: hashColumnId(entry.id),\n  };\n}\n\nexport function hashUniqueValuesRequestColumnId(\n  request: PFrameInternal.UniqueValuesRequestV2,\n): PFrameInternal.UniqueValuesRequestV2 {\n  // V2 filters are index-based (no column ids), so only `columnId` is rewritten.\n  return {\n    ...request,\n    columnId: hashColumnId(request.columnId),\n  };\n}\n\nexport function hashDataQuery(query: DataQuery): DataQuery {\n  switch (query.type) {\n    case \"column\":\n      return {\n        ...query,\n        column: hashColumnId(query.column),\n      };\n    case \"inlineColumn\":\n      return {\n        ...query,\n        spec: {\n          ...query.spec,\n          id: hashColumnId(query.spec.id),\n        },\n      };\n    case \"sparseToDenseColumn\":\n      return {\n        ...query,\n        column: hashColumnId(query.column),\n        ...(query.specOverride\n          ? {\n              specOverride: {\n                ...query.specOverride,\n                id: hashColumnId(query.specOverride.id),\n              },\n            }\n          : {}),\n      };\n    case \"innerJoin\":\n    case \"fullJoin\":\n      return {\n        ...query,\n        entries: query.entries.map((e) => ({\n          ...e,\n          entry: hashDataQuery(e.entry),\n        })),\n      };\n    case \"outerJoin\":\n      return {\n        ...query,\n        primary: {\n          ...query.primary,\n          entry: hashDataQuery(query.primary.entry),\n        },\n        secondary: query.secondary.map((e) => ({\n          ...e,\n          entry: hashDataQuery(e.entry),\n        })),\n      };\n    case \"linkerJoin\":\n      return {\n        ...query,\n        linker: {\n          ...query.linker,\n          column: hashColumnId(query.linker.column),\n        },\n        secondary: query.secondary.map((e) => ({\n          ...e,\n          entry: hashDataQuery(e.entry),\n        })),\n      };\n    case \"sliceAxes\":\n      return {\n        ...query,\n        input: hashDataQuery(query.input),\n      };\n    case \"sort\":\n      return {\n        ...query,\n        input: hashDataQuery(query.input),\n      };\n    case \"filter\":\n      return {\n        ...query,\n        input: hashDataQuery(query.input),\n      };\n    case \"transformColumns\":\n      return {\n        ...query,\n        input: hashDataQuery(query.input),\n        columns: query.columns.map((entry) =>\n          entry.specOverride\n            ? {\n                ...entry,\n                specOverride: {\n                  ...entry.specOverride,\n                  id: hashColumnId(entry.specOverride.id),\n                },\n              }\n            : entry,\n        ) as typeof query.columns,\n      };\n  }\n}\n\nexport async function dump(\n  relativePath: string[],\n  data: { [key: string]: string | number | boolean | object } | Uint8Array,\n  logger?: PFrameInternal.Logger,\n): Promise<void> {\n  if (!process.env.MI_DUMP_PFRAMES_RS) return;\n  try {\n    const relativeUri = relativePath.map((part) => encodeURIComponent(part));\n    const fileDir = join(process.env.MI_DUMP_PFRAMES_RS, ...relativeUri.slice(0, -1));\n    await fs.mkdir(fileDir, { recursive: true });\n\n    const filePath = join(process.env.MI_DUMP_PFRAMES_RS, ...relativeUri);\n    const fileData = ArrayBuffer.isView(data) ? data : JSON.stringify(data, null, 2);\n    await fs.writeFile(filePath, fileData, { flag: \"wx\" });\n  } catch (error: unknown) {\n    logger?.(\"info\", `error while dumping PFrames data: ${error}`);\n  }\n}\n"],"mappings":";;;;;AAMA,SAAgB,aAAa,UAAgC;AAC3D,SAAA,GAAA,YAAA,YAAkB,SAAS,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;;AAG5D,SAAgB,mBACd,OACiC;AACjC,QAAO;EACL,GAAG;EACH,IAAI,aAAa,MAAM,GAAG;EAC3B;;AAGH,SAAgB,gCACd,SACsC;AAEtC,QAAO;EACL,GAAG;EACH,UAAU,aAAa,QAAQ,SAAS;EACzC;;AAGH,SAAgB,cAAc,OAA6B;AACzD,SAAQ,MAAM,MAAd;EACE,KAAK,SACH,QAAO;GACL,GAAG;GACH,QAAQ,aAAa,MAAM,OAAO;GACnC;EACH,KAAK,eACH,QAAO;GACL,GAAG;GACH,MAAM;IACJ,GAAG,MAAM;IACT,IAAI,aAAa,MAAM,KAAK,GAAG;IAChC;GACF;EACH,KAAK,sBACH,QAAO;GACL,GAAG;GACH,QAAQ,aAAa,MAAM,OAAO;GAClC,GAAI,MAAM,eACN,EACE,cAAc;IACZ,GAAG,MAAM;IACT,IAAI,aAAa,MAAM,aAAa,GAAG;IACxC,EACF,GACD,EAAE;GACP;EACH,KAAK;EACL,KAAK,WACH,QAAO;GACL,GAAG;GACH,SAAS,MAAM,QAAQ,KAAK,OAAO;IACjC,GAAG;IACH,OAAO,cAAc,EAAE,MAAM;IAC9B,EAAE;GACJ;EACH,KAAK,YACH,QAAO;GACL,GAAG;GACH,SAAS;IACP,GAAG,MAAM;IACT,OAAO,cAAc,MAAM,QAAQ,MAAM;IAC1C;GACD,WAAW,MAAM,UAAU,KAAK,OAAO;IACrC,GAAG;IACH,OAAO,cAAc,EAAE,MAAM;IAC9B,EAAE;GACJ;EACH,KAAK,aACH,QAAO;GACL,GAAG;GACH,QAAQ;IACN,GAAG,MAAM;IACT,QAAQ,aAAa,MAAM,OAAO,OAAO;IAC1C;GACD,WAAW,MAAM,UAAU,KAAK,OAAO;IACrC,GAAG;IACH,OAAO,cAAc,EAAE,MAAM;IAC9B,EAAE;GACJ;EACH,KAAK,YACH,QAAO;GACL,GAAG;GACH,OAAO,cAAc,MAAM,MAAM;GAClC;EACH,KAAK,OACH,QAAO;GACL,GAAG;GACH,OAAO,cAAc,MAAM,MAAM;GAClC;EACH,KAAK,SACH,QAAO;GACL,GAAG;GACH,OAAO,cAAc,MAAM,MAAM;GAClC;EACH,KAAK,mBACH,QAAO;GACL,GAAG;GACH,OAAO,cAAc,MAAM,MAAM;GACjC,SAAS,MAAM,QAAQ,KAAK,UAC1B,MAAM,eACF;IACE,GAAG;IACH,cAAc;KACZ,GAAG,MAAM;KACT,IAAI,aAAa,MAAM,aAAa,GAAG;KACxC;IACF,GACD,MACL;GACF;;;AAIP,eAAsB,KACpB,cACA,MACA,QACe;AACf,KAAI,CAAC,QAAQ,IAAI,mBAAoB;AACrC,KAAI;EACF,MAAM,cAAc,aAAa,KAAK,SAAS,mBAAmB,KAAK,CAAC;EACxE,MAAM,WAAA,GAAA,UAAA,MAAe,QAAQ,IAAI,oBAAoB,GAAG,YAAY,MAAM,GAAG,GAAG,CAAC;AACjF,QAAMA,QAAAA,SAAG,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;EAE5C,MAAM,YAAA,GAAA,UAAA,MAAgB,QAAQ,IAAI,oBAAoB,GAAG,YAAY;EACrE,MAAM,WAAW,YAAY,OAAO,KAAK,GAAG,OAAO,KAAK,UAAU,MAAM,MAAM,EAAE;AAChF,QAAMA,QAAAA,SAAG,UAAU,UAAU,UAAU,EAAE,MAAM,MAAM,CAAC;UAC/C,OAAgB;AACvB,WAAS,QAAQ,qCAAqC,QAAQ"}