{
  "version": 3,
  "sources": ["../../src/errorHandler.ts"],
  "sourcesContent": ["import { promisify } from 'node:util';\nimport { logger } from './packages/logger/index.ts';\nimport pidTree from 'pidtree';\nimport { type Global, REPORTER_INITIALIZED } from './main.ts';\n\ndeclare const global: Global;\n\nconst getDescendentProcesses = promisify(\n  (\n    pid: number,\n    callback: (error: Error | undefined, result: number[]) => void\n  ) => {\n    pidTree(pid, { root: false }, callback);\n  }\n);\n\nexport async function errorHandler(\n  error: Error & { code?: string }\n): Promise<void> {\n  if (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    error.name != null &&\n    error.name !== 'pnpm' &&\n    !error.name.startsWith('pnpm:')\n  ) {\n    try {\n      error.name = 'pnpm';\n    } catch {\n      // Sometimes the name property is read-only\n    }\n  }\n\n  if (typeof global[REPORTER_INITIALIZED] === 'undefined') {\n    // print parseable error on unhandled exception\n    console.info(\n      JSON.stringify(\n        {\n          error: {\n            code: error.code ?? error.name,\n            message: error.message,\n          },\n        },\n        null,\n        2\n      )\n    );\n    process.exitCode = 1;\n    return;\n  }\n  if (global[REPORTER_INITIALIZED] === 'silent') {\n    process.exitCode = 1;\n    return;\n  }\n\n  // bole passes only the name, message and stack of an error\n  // that is why we pass error as a message as well, to pass\n  // any additional info\n  logger.error(error, error);\n\n  // Deferring exit. Otherwise, the reporter wouldn't show the error\n  setTimeout(async () => {\n    await killProcesses(\n      'errno' in error && typeof error.errno === 'number' ? error.errno : 1\n    );\n  }, 0);\n}\n\nasync function killProcesses(status: number): Promise<void> {\n  try {\n    const descendentProcesses = await getDescendentProcesses(process.pid);\n    for (const pid of descendentProcesses) {\n      try {\n        process.kill(pid);\n      } catch {\n        // ignore error here\n      }\n    }\n  } catch {\n    // ignore error here\n  }\n\n  // eslint-disable-next-line n/no-process-exit\n  process.exit(status);\n}\n"],
  "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,OAAO,aAAa;AACpB,SAAsB,4BAA4B;AAIlD,MAAM,yBAAyB;AAAA,EAC7B,CACE,KACA,aACG;AACH,YAAQ,KAAK,EAAE,MAAM,MAAM,GAAG,QAAQ;AAAA,EACxC;AACF;AAEA,eAAsB,aACpB,OACe;AACf;AAAA;AAAA,IAEE,MAAM,QAAQ,QACd,MAAM,SAAS,UACf,CAAC,MAAM,KAAK,WAAW,OAAO;AAAA,IAC9B;AACA,QAAI;AACF,YAAM,OAAO;AAAA,IACf,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,oBAAoB,MAAM,aAAa;AAEvD,YAAQ;AAAA,MACN,KAAK;AAAA,QACH;AAAA,UACE,OAAO;AAAA,YACL,MAAM,MAAM,QAAQ,MAAM;AAAA,YAC1B,SAAS,MAAM;AAAA,UACjB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,MAAI,OAAO,oBAAoB,MAAM,UAAU;AAC7C,YAAQ,WAAW;AACnB;AAAA,EACF;AAKA,SAAO,MAAM,OAAO,KAAK;AAGzB,aAAW,YAAY;AACrB,UAAM;AAAA,MACJ,WAAW,SAAS,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,IACtE;AAAA,EACF,GAAG,CAAC;AACN;AAEA,eAAe,cAAc,QAA+B;AAC1D,MAAI;AACF,UAAM,sBAAsB,MAAM,uBAAuB,QAAQ,GAAG;AACpE,eAAW,OAAO,qBAAqB;AACrC,UAAI;AACF,gBAAQ,KAAK,GAAG;AAAA,MAClB,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,UAAQ,KAAK,MAAM;AACrB;",
  "names": []
}
