JSFiddle - React, Tailwind, and code Playground
by darthdeus
JavaScript
var data = "" +
"c@http://fiddle.jshell.net/_display/:266\n" +
"b@http://fiddle.jshell.net/_display/:262\n" +
"a@http://fiddle.jshell.net/_display/:258\n" +
"@http://fiddle.jshell.net/_display/:273\n" +
"wrap/<@http://fiddle.jshell.net/_display/:123" +
" Error: async bug\n" +
" at c (http://fiddle.jshell.net/darthdeus/RdghB/1/show/:265:9)\n" +
" at b (http://fiddle.jshell.net/darthdeus/RdghB/1/show/:261:3)\n" +
" at a (http://fiddle.jshell.net/darthdeus/RdghB/1/show/:257:3)\n" +
" at http://fiddle.jshell.net/darthdeus/RdghB/1/show/:272:5\n" +
" at http://fiddle.jshell.net/darthdeus/RdghB/1/show/:122:18";
var CHROME_REGEX = /at (\w+) \((.+?):(\d+):\d+\)/;
// Safari and Firefox use the same format for stacktraces,
// hence we can use the same regex for both
var FIREFOX_AND_SAFARI_REGEX = /(\w+)@(.+):(\d+)/;
var PARSERS = [FIREFOX_AND_SAFARI_REGEX, CHROME_REGEX];
function matchStackLine(line) {
var match;
for (var i = 0; i < PARSERS.length; i++) {
if (match = line.match(PARSERS[i])) {
return match;
}
}
return null;
}
function parseStack(stack) {
var lines = stack.split("\n");
var results = [];
for (var i = 0; i < lines.length; i++) {
var match = matchStackLine(lines[i]);
if (match) {
results.push({
"function": match[1],
"file": match[2],
"line": match[3]
});
}
}
return results;
}
function joinParsedStack(lines) {
var results = [];
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
results.push(line["function"] + " at " + line["file"] + ":" + line["line"]);
}
return results.join("\n");
}
console.log(joinParsedStack(parseStack(data)));