| | |
| | | import chalk from "chalk" |
| | | import process from "process" |
| | | import { isMainThread } from "workerpool" |
| | | |
| | | const rootFile = /.*at file:/ |
| | | export function trace(msg: string, err: Error) { |
| | | const stack = err.stack |
| | | console.log() |
| | | console.log( |
| | | |
| | | const lines: string[] = [] |
| | | |
| | | lines.push("") |
| | | lines.push( |
| | | "\n" + |
| | | chalk.bgRed.black.bold(" ERROR ") + |
| | | "\n" + |
| | | chalk.red(` ${msg}`) + |
| | | (err.message.length > 0 ? `: ${err.message}` : ""), |
| | | chalk.bgRed.black.bold(" ERROR ") + |
| | | "\n" + |
| | | chalk.red(` ${msg}`) + |
| | | (err.message.length > 0 ? `: ${err.message}` : ""), |
| | | ) |
| | | |
| | | if (!stack) { |
| | | return |
| | | } |
| | |
| | | } |
| | | |
| | | if (!line.includes("node_modules")) { |
| | | console.log(` ${line}`) |
| | | lines.push(` ${line}`) |
| | | if (rootFile.test(line)) { |
| | | reachedEndOfLegibleTrace = true |
| | | } |
| | | } |
| | | } |
| | | process.exit(1) |
| | | |
| | | const traceMsg = lines.join("\n") |
| | | if (!isMainThread) { |
| | | // gather lines and throw |
| | | throw new Error(traceMsg) |
| | | } else { |
| | | // print and exit |
| | | console.error(traceMsg) |
| | | process.exit(1) |
| | | } |
| | | } |