{"version":3,"file":"bin.mjs","names":[],"sources":["../../../../src/utils/runParallel/bin.ts"],"sourcesContent":["import type { ChildProcess } from 'node:child_process';\nimport { type SpawnOptions, spawn } from 'node:child_process';\n\ntype BinCallback = (err: Error | null, stdout?: string, code?: number) => void;\n\nconst stripStderr = (stderr: string | undefined): string | undefined => {\n  if (!stderr) return;\n  let cleaned = stderr.trim();\n  // Strip bogus screen size error.\n  // See https://github.com/microsoft/vscode/issues/98590\n  const regex = /your \\d+x\\d+ screen size is bogus\\. expect trouble/gi;\n  cleaned = cleaned.replace(regex, '');\n\n  return cleaned.trim() || undefined;\n};\n\n/**\n * Spawn a binary and read its stdout.\n * @param cmd The name of the binary to spawn.\n * @param args The arguments for the binary.\n * @param options Optional option for the spawn function.\n * @param done Callback function.\n */\nexport const run = (\n  cmd: string,\n  args: string[],\n  options: SpawnOptions | BinCallback | undefined,\n  done?: BinCallback\n): void => {\n  let normalizedOptions: SpawnOptions | undefined;\n  let normalizedDone: BinCallback;\n\n  if (typeof options === 'function') {\n    normalizedDone = options;\n    normalizedOptions = undefined;\n  } else {\n    normalizedDone = done!;\n    normalizedOptions = options;\n  }\n\n  let executed = false;\n  const ch: ChildProcess = spawn(cmd, args, normalizedOptions ?? {});\n  let stdout = '';\n  let stderr = '';\n\n  if (ch.stdout) {\n    ch.stdout.on('data', (d: Buffer) => {\n      stdout += d.toString();\n    });\n  }\n\n  if (ch.stderr) {\n    ch.stderr.on('data', (d: Buffer) => {\n      stderr += d.toString();\n    });\n  }\n\n  ch.on('error', (err: Error) => {\n    if (executed) return;\n    executed = true;\n    normalizedDone(new Error(String(err)));\n  });\n\n  ch.on('close', (code: number | null) => {\n    if (executed) return;\n    executed = true;\n\n    const cleanedStderr = stripStderr(stderr);\n    if (cleanedStderr) {\n      return normalizedDone(new Error(cleanedStderr));\n    }\n\n    normalizedDone(null, stdout, code ?? undefined);\n  });\n};\n"],"mappings":";;;AAKA,MAAM,eAAe,WAAmD;AACtE,KAAI,CAAC,OAAQ;CACb,IAAI,UAAU,OAAO,MAAM;AAI3B,WAAU,QAAQ,QAAQ,wDAAO,GAAG;AAEpC,QAAO,QAAQ,MAAM,IAAI;;;;;;;;;AAU3B,MAAa,OACX,KACA,MACA,SACA,SACS;CACT,IAAI;CACJ,IAAI;AAEJ,KAAI,OAAO,YAAY,YAAY;AACjC,mBAAiB;AACjB,sBAAoB;QACf;AACL,mBAAiB;AACjB,sBAAoB;;CAGtB,IAAI,WAAW;CACf,MAAM,KAAmB,MAAM,KAAK,MAAM,qBAAqB,EAAE,CAAC;CAClE,IAAI,SAAS;CACb,IAAI,SAAS;AAEb,KAAI,GAAG,OACL,IAAG,OAAO,GAAG,SAAS,MAAc;AAClC,YAAU,EAAE,UAAU;GACtB;AAGJ,KAAI,GAAG,OACL,IAAG,OAAO,GAAG,SAAS,MAAc;AAClC,YAAU,EAAE,UAAU;GACtB;AAGJ,IAAG,GAAG,UAAU,QAAe;AAC7B,MAAI,SAAU;AACd,aAAW;AACX,iBAAe,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;GACtC;AAEF,IAAG,GAAG,UAAU,SAAwB;AACtC,MAAI,SAAU;AACd,aAAW;EAEX,MAAM,gBAAgB,YAAY,OAAO;AACzC,MAAI,cACF,QAAO,eAAe,IAAI,MAAM,cAAc,CAAC;AAGjD,iBAAe,MAAM,QAAQ,QAAQ,OAAU;GAC/C"}