UNPKG

1.06 kBJavaScriptView Raw
1// @flow strict-local
2
3export type PrintableError =
4 | string
5 | (Error & {
6 codeFrame?: string,
7 highlightedCodeFrame?: string,
8 loc?: {
9 column: number,
10 line: number
11 }
12 });
13
14export type PrettyErrorOpts = {
15 color?: boolean
16};
17
18export type PrettyError = {|
19 message: string,
20 stack?: string
21|};
22
23export default function prettyError(
24 err: PrintableError,
25 opts: PrettyErrorOpts = {}
26): PrettyError {
27 if (typeof err === 'string') {
28 return {
29 message: err
30 };
31 }
32
33 let message = err.message;
34 if (!message) {
35 message = 'Unknown error';
36 }
37
38 if (err.fileName != null) {
39 let fileName = err.fileName;
40 if (err.loc) {
41 fileName += `:${err.loc.line}:${err.loc.column}`;
42 }
43
44 message = `${fileName}: ${message}`;
45 }
46
47 let stack;
48 if (err.codeFrame != null && err.codeFrame !== '') {
49 stack = (opts.color === true && err.highlightedCodeFrame) || err.codeFrame;
50 } else if (err.stack) {
51 stack = err.stack.slice(err.stack.indexOf('\n') + 1);
52 }
53
54 return {message, stack};
55}