UNPKG

webdash-readme-preview

Version:
96 lines (79 loc) 2.75 kB
/** * @license * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. * * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt * The complete set of authors may be found at polymer.github.io/AUTHORS.txt * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt * Code distributed by Google as part of the polymer project is also subject to * an additional IP rights grant found at polymer.github.io/PATENTS.txt */ (function(scope) { 'use strict'; function parse(stack) { var rawLines = stack.split('\n'); var stackyLines = compact(rawLines.map(parseStackyLine)); if (stackyLines.length === rawLines.length) return stackyLines; var v8Lines = compact(rawLines.map(parseV8Line)); if (v8Lines.length > 0) return v8Lines; var geckoLines = compact(rawLines.map(parseGeckoLine)); if (geckoLines.length > 0) return geckoLines; throw new Error('Unknown stack format: ' + stack); } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack var GECKO_LINE = /^(?:([^@]*)@)?(.*?):(\d+)(?::(\d+))?$/; function parseGeckoLine(line) { var match = line.match(GECKO_LINE); if (!match) return null; return { method: match[1] || '', location: match[2] || '', line: parseInt(match[3]) || 0, column: parseInt(match[4]) || 0, }; } // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi var V8_OUTER1 = /^\s*(eval )?at (.*) \((.*)\)$/; var V8_OUTER2 = /^\s*at()() (\S+)$/; var V8_INNER = /^\(?([^\(]+):(\d+):(\d+)\)?$/; function parseV8Line(line) { var outer = line.match(V8_OUTER1) || line.match(V8_OUTER2); if (!outer) return null; var inner = outer[3].match(V8_INNER); if (!inner) return null; var method = outer[2] || ''; if (outer[1]) method = 'eval at ' + method; return { method: method, location: inner[1] || '', line: parseInt(inner[2]) || 0, column: parseInt(inner[3]) || 0, }; } // Stacky.formatting.pretty var STACKY_LINE = /^\s*(.+) at (.+):(\d+):(\d+)$/; function parseStackyLine(line) { var match = line.match(STACKY_LINE); if (!match) return null; return { method: match[1] || '', location: match[2] || '', line: parseInt(match[3]) || 0, column: parseInt(match[4]) || 0, }; } // Helpers function compact(array) { var result = []; array.forEach(function(value) { if (value) { result.push(value); } }); return result; } scope.parse = parse; scope.parseGeckoLine = parseGeckoLine; scope.parseV8Line = parseV8Line; scope.parseStackyLine = parseStackyLine; })(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));