{"version":3,"sources":["../../src/common/tempGzipFile.ts"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n  createWriteStream,\n  mkdirSync,\n  readFile,\n  unlinkSync,\n  writeFileSync,\n  WriteStream,\n} from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createGzip, Gzip } from \"node:zlib\";\n\nconst TEMP_DIR = join(tmpdir(), \"apitally\");\n\nexport function checkWritableFs() {\n  try {\n    mkdirSync(TEMP_DIR, { recursive: true });\n    const testPath = join(TEMP_DIR, `test_${randomUUID()}`);\n    writeFileSync(testPath, \"test\");\n    unlinkSync(testPath);\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\nexport default class TempGzipFile {\n  public uuid: string;\n  private filePath: string;\n  private gzip: Gzip;\n  private writeStream: WriteStream;\n  private readyPromise: Promise<void>;\n  private closedPromise: Promise<void>;\n\n  constructor(name: string) {\n    mkdirSync(TEMP_DIR, { recursive: true });\n    this.uuid = randomUUID();\n    this.filePath = join(TEMP_DIR, `${name}_${this.uuid}.gz`);\n    this.writeStream = createWriteStream(this.filePath);\n    this.readyPromise = new Promise<void>((resolve, reject) => {\n      this.writeStream.once(\"ready\", resolve);\n      this.writeStream.once(\"error\", reject);\n    });\n    this.closedPromise = new Promise<void>((resolve, reject) => {\n      this.writeStream.once(\"close\", resolve);\n      this.writeStream.once(\"error\", reject);\n    });\n    this.gzip = createGzip();\n    this.gzip.pipe(this.writeStream);\n  }\n\n  get size() {\n    return this.writeStream.bytesWritten;\n  }\n\n  async writeLines(lines: Buffer[]) {\n    if (lines.length === 0) return;\n    await this.readyPromise;\n    const parts: Buffer[] = [];\n    const newline = Buffer.from(\"\\n\");\n    for (const line of lines) {\n      parts.push(line, newline);\n    }\n    const combined = Buffer.concat(parts);\n    return new Promise<void>((resolve, reject) => {\n      this.gzip.write(combined, (error) => {\n        if (error) {\n          reject(error);\n        } else {\n          resolve();\n        }\n      });\n    });\n  }\n\n  async getContent() {\n    return new Promise<Buffer>((resolve, reject) => {\n      readFile(this.filePath, (error, data) => {\n        if (error) {\n          reject(error);\n        } else {\n          resolve(data);\n        }\n      });\n    });\n  }\n\n  async close() {\n    await new Promise<void>((resolve) => {\n      this.gzip.end(() => {\n        resolve();\n      });\n    });\n    await this.closedPromise;\n  }\n\n  async delete() {\n    await this.close();\n    await unlink(this.filePath);\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,yBAAuB;AACvB,yBAA2B;AAC3B,qBAOO;AACP,sBAAuB;AACvB,qBAAuB;AACvB,uBAAqB;AACrB,uBAAiC;AAEjC,MAAMA,eAAWC,2BAAKC,uBAAAA,GAAU,UAAA;AAEzB,SAASC,kBAAAA;AACd,MAAI;AACFC,kCAAUJ,UAAU;MAAEK,WAAW;IAAK,CAAA;AACtC,UAAMC,eAAWL,uBAAKD,UAAU,YAAQO,+BAAAA,CAAAA,EAAc;AACtDC,sCAAcF,UAAU,MAAA;AACxBG,mCAAWH,QAAAA;AACX,WAAO;EACT,SAASI,OAAO;AACd,WAAO;EACT;AACF;AAVgBP;AAYhB,MAAqBQ,gBAArB,MAAqBA,cAAAA;EACZC;EACCC;EACAC;EACAC;EACAC;EACAC;EAER,YAAYC,MAAc;AACxBd,kCAAUJ,UAAU;MAAEK,WAAW;IAAK,CAAA;AACtC,SAAKO,WAAOL,+BAAAA;AACZ,SAAKM,eAAWZ,uBAAKD,UAAU,GAAGkB,IAAAA,IAAQ,KAAKN,IAAI,KAAK;AACxD,SAAKG,kBAAcI,kCAAkB,KAAKN,QAAQ;AAClD,SAAKG,eAAe,IAAII,QAAc,CAACC,SAASC,WAAAA;AAC9C,WAAKP,YAAYQ,KAAK,SAASF,OAAAA;AAC/B,WAAKN,YAAYQ,KAAK,SAASD,MAAAA;IACjC,CAAA;AACA,SAAKL,gBAAgB,IAAIG,QAAc,CAACC,SAASC,WAAAA;AAC/C,WAAKP,YAAYQ,KAAK,SAASF,OAAAA;AAC/B,WAAKN,YAAYQ,KAAK,SAASD,MAAAA;IACjC,CAAA;AACA,SAAKR,WAAOU,6BAAAA;AACZ,SAAKV,KAAKW,KAAK,KAAKV,WAAW;EACjC;EAEA,IAAIW,OAAO;AACT,WAAO,KAAKX,YAAYY;EAC1B;EAEA,MAAMC,WAAWC,OAAiB;AAChC,QAAIA,MAAMC,WAAW,EAAG;AACxB,UAAM,KAAKd;AACX,UAAMe,QAAkB,CAAA;AACxB,UAAMC,UAAUC,0BAAOC,KAAK,IAAA;AAC5B,eAAWC,QAAQN,OAAO;AACxBE,YAAMK,KAAKD,MAAMH,OAAAA;IACnB;AACA,UAAMK,WAAWJ,0BAAOK,OAAOP,KAAAA;AAC/B,WAAO,IAAIX,QAAc,CAACC,SAASC,WAAAA;AACjC,WAAKR,KAAKyB,MAAMF,UAAU,CAAC3B,UAAAA;AACzB,YAAIA,OAAO;AACTY,iBAAOZ,KAAAA;QACT,OAAO;AACLW,kBAAAA;QACF;MACF,CAAA;IACF,CAAA;EACF;EAEA,MAAMmB,aAAa;AACjB,WAAO,IAAIpB,QAAgB,CAACC,SAASC,WAAAA;AACnCmB,mCAAS,KAAK5B,UAAU,CAACH,OAAOgC,SAAAA;AAC9B,YAAIhC,OAAO;AACTY,iBAAOZ,KAAAA;QACT,OAAO;AACLW,kBAAQqB,IAAAA;QACV;MACF,CAAA;IACF,CAAA;EACF;EAEA,MAAMC,QAAQ;AACZ,UAAM,IAAIvB,QAAc,CAACC,YAAAA;AACvB,WAAKP,KAAK8B,IAAI,MAAA;AACZvB,gBAAAA;MACF,CAAA;IACF,CAAA;AACA,UAAM,KAAKJ;EACb;EAEA,MAAM4B,SAAS;AACb,UAAM,KAAKF,MAAK;AAChB,cAAMG,wBAAO,KAAKjC,QAAQ;EAC5B;AACF;AA1EqBF;AAArB,IAAqBA,eAArB;","names":["TEMP_DIR","join","tmpdir","checkWritableFs","mkdirSync","recursive","testPath","randomUUID","writeFileSync","unlinkSync","error","TempGzipFile","uuid","filePath","gzip","writeStream","readyPromise","closedPromise","name","createWriteStream","Promise","resolve","reject","once","createGzip","pipe","size","bytesWritten","writeLines","lines","length","parts","newline","Buffer","from","line","push","combined","concat","write","getContent","readFile","data","close","end","delete","unlink"]}