{"version":3,"sources":["../../src/hash/WorkerThread.ts"],"names":["parentPort","createHash","fs"],"mappings":";;;;;;;;;;;AAIA,IAAI,CAACA,yBAAA,EAAY;AACf,EAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACxD;AAuBA,SAAS,QAAA,CACP,SACA,OAAA,EAC+C;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,OAAA,GAAUC,kBAAW,QAAQ,CAAA;AACnC,IAAA,MAAM,OAAA,GAAUA,kBAAW,QAAQ,CAAA;AACnC,IAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AACtB,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,IAAA,MAAM,MAAA,GAASC,mBAAA,CAAG,gBAAA,CAAiB,OAAO,CAAA;AAC1C,IAAA,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAU;AAC3B,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IACtB,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AAC5B,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IACd,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,OAAO,MAAM;AACrB,MAAA,OAAA,CAAQ;AAAA,QACN,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,QAC7B,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAK;AAAA,OAC9B,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEAF,yBAAA,CAAW,EAAA,CAAG,SAAA,EAAW,OAAO,OAAA,KAAyB;AACvD,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,QAAQ,OAAO,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAyB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,eAAe,MAAA,CAAO,OAAA;AAAA,MACtB,iBAAiB,MAAA,CAAO;AAAA,KAC1B;AACA,IAAAA,yBAAA,EAAY,YAAY,QAAQ,CAAA;AAAA,EAClC,SAAS,KAAA,EAAY;AACnB,IAAA,MAAM,QAAA,GAAyB;AAAA,MAC7B,IAAA,EAAM,YAAA;AAAA,MACN,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAAA,MACrC,MAAM,KAAA,EAAO;AAAA,KACf;AACA,IAAAA,yBAAA,EAAY,YAAY,QAAQ,CAAA;AAAA,EAClC;AACF,CAAC,CAAA","file":"WorkerThread.cjs","sourcesContent":["import fs from 'fs';\nimport { createHash } from 'crypto';\nimport { parentPort } from 'worker_threads';\n\nif (!parentPort) {\n  throw new Error('WorkerThread must be run as a worker');\n}\n\ntype HashRequest = {\n  type: 'hash';\n  taskId: number;\n  absPath: string;\n  relPath: string;\n};\n\ntype HashResponse =\n  | {\n      type: 'hash-result';\n      taskId: number;\n      contentSha256: string;\n      serviceFileHash: string;\n    }\n  | {\n      type: 'hash-error';\n      taskId: number;\n      error: string;\n      code?: string;\n    };\n\nfunction hashFile(\n  absPath: string,\n  relPath: string,\n): Promise<{ content: string; service: string }> {\n  return new Promise((resolve, reject) => {\n    const content = createHash('sha256');\n    const service = createHash('sha256');\n    service.update(relPath);\n    service.update('\\n');\n\n    const stream = fs.createReadStream(absPath);\n    stream.on('data', (chunk) => {\n      content.update(chunk);\n      service.update(chunk);\n    });\n    stream.on('error', (error) => {\n      reject(error);\n    });\n    stream.on('end', () => {\n      resolve({\n        content: content.digest('hex'),\n        service: service.digest('hex'),\n      });\n    });\n  });\n}\n\nparentPort.on('message', async (message: HashRequest) => {\n  if (message.type !== 'hash') return;\n  try {\n    const hashes = await hashFile(message.absPath, message.relPath);\n    const response: HashResponse = {\n      type: 'hash-result',\n      taskId: message.taskId,\n      contentSha256: hashes.content,\n      serviceFileHash: hashes.service,\n    };\n    parentPort?.postMessage(response);\n  } catch (error: any) {\n    const response: HashResponse = {\n      type: 'hash-error',\n      taskId: message.taskId,\n      error: error?.message ?? String(error),\n      code: error?.code,\n    };\n    parentPort?.postMessage(response);\n  }\n});\n\nexport {};\n"]}