126ad19fcSEvan Baconimport { parse, StackFrame } from 'stacktrace-parser';
226ad19fcSEvan Bacon
326ad19fcSEvan Baconfunction parseErrorStack(stack?: string): (StackFrame & { collapse?: boolean })[] {
426ad19fcSEvan Bacon  if (stack == null) {
526ad19fcSEvan Bacon    return [];
626ad19fcSEvan Bacon  }
726ad19fcSEvan Bacon  if (Array.isArray(stack)) {
826ad19fcSEvan Bacon    return stack;
926ad19fcSEvan Bacon  }
1026ad19fcSEvan Bacon
11*080145beSEvan Bacon  // This file seems to be web-only, so we can remove this.
12*080145beSEvan Bacon  // // Native support for parsing for non-standard Hermes stack traces.
13*080145beSEvan Bacon  // if (global.HermesInternal) {
14*080145beSEvan Bacon  //   return require('./parseHermesStack').parseErrorStack(stack);
15*080145beSEvan Bacon  // }
1626ad19fcSEvan Bacon
1726ad19fcSEvan Bacon  return parse(stack).map((frame) => {
1826ad19fcSEvan Bacon    // frame.file will mostly look like `http://localhost:8081/index.bundle?platform=web&dev=true&hot=false`
1926ad19fcSEvan Bacon    return {
2026ad19fcSEvan Bacon      ...frame,
2126ad19fcSEvan Bacon      column: frame.column != null ? frame.column - 1 : null,
2226ad19fcSEvan Bacon    };
2326ad19fcSEvan Bacon  });
2426ad19fcSEvan Bacon}
2526ad19fcSEvan Bacon
2626ad19fcSEvan Baconexport default parseErrorStack;
27