From f9744eb7619dbcabcda758da01c2deb0ad33c08d Mon Sep 17 00:00:00 2001 From: Alan Plum Date: Tue, 3 Feb 2015 11:56:37 +0100 Subject: [PATCH] Don't re-invent the wheel. --- .../node_modules/error-stack-parser/LICENSE | 24 ++++ .../node_modules/error-stack-parser/README.md | 45 ++++++ .../dist/error-stack-parser.js | 135 ++++++++++++++++++ .../dist/error-stack-parser.js.map | 1 + .../dist/error-stack-parser.min.js | 2 + .../error-stack-parser/error-stack-parser.js | 135 ++++++++++++++++++ .../node_modules/stackframe/.jshintrc | 42 ++++++ .../node_modules/stackframe/.npmignore | 9 ++ .../node_modules/stackframe/.nvmrc | 1 + .../node_modules/stackframe/CHANGELOG.md | 16 +++ .../node_modules/stackframe/CONTRIBUTING.md | 28 ++++ .../node_modules/stackframe/LICENSE | 24 ++++ .../node_modules/stackframe/README.md | 42 ++++++ .../node_modules/stackframe/bower.json | 32 +++++ .../stackframe/dist/stackframe.js | 95 ++++++++++++ .../stackframe/dist/stackframe.js.map | 1 + .../stackframe/dist/stackframe.min.js | 2 + .../node_modules/stackframe/karma.conf.ci.js | 132 +++++++++++++++++ .../node_modules/stackframe/karma.conf.js | 25 ++++ .../node_modules/stackframe/package.json | 67 +++++++++ .../node_modules/stackframe/stackframe.js | 95 ++++++++++++ .../error-stack-parser/package.json | 76 ++++++++++ js/node/package.json | 1 + .../modules/org/arangodb/foxx/console.js | 25 +--- 24 files changed, 1033 insertions(+), 22 deletions(-) create mode 100644 js/node/node_modules/error-stack-parser/LICENSE create mode 100644 js/node/node_modules/error-stack-parser/README.md create mode 100644 js/node/node_modules/error-stack-parser/dist/error-stack-parser.js create mode 100644 js/node/node_modules/error-stack-parser/dist/error-stack-parser.js.map create mode 100644 js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js create mode 100644 js/node/node_modules/error-stack-parser/error-stack-parser.js create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/.npmignore create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js.map create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json create mode 100644 js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js create mode 100644 js/node/node_modules/error-stack-parser/package.json diff --git a/js/node/node_modules/error-stack-parser/LICENSE b/js/node/node_modules/error-stack-parser/LICENSE new file mode 100644 index 0000000000..cf1ab25da0 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/js/node/node_modules/error-stack-parser/README.md b/js/node/node_modules/error-stack-parser/README.md new file mode 100644 index 0000000000..6703e1766c --- /dev/null +++ b/js/node/node_modules/error-stack-parser/README.md @@ -0,0 +1,45 @@ +error-stack-parser.js - Extract meaning from JS Errors +=============== +[![Build Status](https://travis-ci.org/stacktracejs/error-stack-parser.svg?branch=master)](https://travis-ci.org/stacktracejs/error-stack-parser) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/error-stack-parser.svg)](https://coveralls.io/r/stacktracejs/error-stack-parser) [![Code Climate](https://codeclimate.com/github/stacktracejs/error-stack-parser/badges/gpa.svg)](https://codeclimate.com/github/stacktracejs/error-stack-parser) + +Simple, cross-browser [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) parser. +This library parses and extracts function names, URLs, line numbers, and column numbers from the given Error's `stack` as +an Array of [StackFrame](http://git.io/stackframe)s. + +Once you have parsed out StackFrames, you can do much more interesting things. See [stacktrace-gps](http://git.io/stacktrace-gps). + +Note that in IE9 and earlier, `Error` objects don't have enough information to extract much of anything. In IE 10, `Error`s +are given a `stack` once they're `throw`n. + +## Usage +```js +ErrorStackParser.parse(new Error('boom')); + +=> [ + StackFrame('funky1', [], 'path/to/file.js', 35, 79), + StackFrame('filter', undefined, 'https://cdn.somewherefast.com/utils.min.js', 1, 832), + StackFrame(... and so on ...) + ] +``` + +## Installation +```bash +npm install error-stack-parser +bower install error-stack-parser +https://raw.githubusercontent.com/stacktracejs/error-stack-parser/master/dist/error-stack-parser.min.js +``` + +## Browser Support +* Chrome 1+ +* Firefox 3.6+ +* Safari 7+ +* Opera 9+ +* IE 10+ +* iOS 7+ +* Android 4.2+ + +## Contributing +Want to be listed as a *Contributor*? Start with the [Contributing Guide](CONTRIBUTING.md)! + +## License +This project is licensed to the [Public Domain](http://unlicense.org) diff --git a/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js new file mode 100644 index 0000000000..09d304898d --- /dev/null +++ b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js @@ -0,0 +1,135 @@ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + if (typeof define === 'function' && define.amd) { + define('error-stack-parser', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.ErrorStackParser = factory(root.StackFrame); + } +}(this, function ErrorStackParser(StackFrame) { + 'use strict'; + + var FIREFOX_SAFARI_STACK_REGEXP = /\S+\:\d+/; + var CHROME_IE_STACK_REGEXP = /\s+at /; + + return { + /** + * Given an Error object, extract the most information from it. + * @param error {Error} + * @return Array[StackFrame] + */ + parse: function ErrorStackParser$$parse(error) { + if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { + return this.parseOpera(error); + } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { + return this.parseV8OrIE(error); + } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + return this.parseFFOrSafari(error); + } else { + throw new Error('Cannot parse given Error object'); + } + }, + + /** + * Separate line and column numbers from a URL-like string. + * @param urlLike String + * @return Array[String] + */ + extractLocation: function ErrorStackParser$$extractLocation(urlLike) { + var locationParts = urlLike.split(':'); + var lastNumber = locationParts.pop(); + var possibleNumber = locationParts[locationParts.length - 1]; + if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { + var lineNumber = locationParts.pop(); + return [locationParts.join(':'), lineNumber, lastNumber]; + } else { + return [locationParts.join(':'), lastNumber, undefined]; + } + }, + + parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { + return error.stack.split('\n').slice(1).map(function (line) { + var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop().replace(/[\(\)\s]/g, '')); + var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2]); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.shift() || undefined; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2]); + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(undefined, undefined, match[2], match[1])); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1])); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && + !line.match(/^Error created at/); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); + return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2]); + }, this); + } + }; +})); + diff --git a/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js.map b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js.map new file mode 100644 index 0000000000..815550b58f --- /dev/null +++ b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/stackframe/dist/stackframe.min.js","error-stack-parser.js"],"names":["root","factory","define","amd","exports","module","StackFrame","this","_isNumber","n","isNaN","parseFloat","isFinite","functionName","args","fileName","lineNumber","columnNumber","undefined","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","prototype","getFunctionName","v","String","getArgs","Object","toString","call","TypeError","getFileName","getLineNumber","Number","getColumnNumber","join","require","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","parse","ErrorStackParser$$parse","error","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","ErrorStackParser$$extractLocation","urlLike","locationParts","split","lastNumber","pop","possibleNumber","length","ErrorStackParser$$parseV8OrIE","slice","map","line","tokens","replace","ErrorStackParser$$parseFFOrSafari","filter","shift","ErrorStackParser$$parseOpera","e","message","indexOf","parseOpera9","parseOpera10","parseOpera11","ErrorStackParser$$parseOpera9","lineRE","lines","result","i","len","exec","push","ErrorStackParser$$parseOpera10","ErrorStackParser$$parseOpera11","functionCall","argsRaw"],"mappings":"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","file":"error-stack-parser.min.js"} \ No newline at end of file diff --git a/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js new file mode 100644 index 0000000000..5f01eb0035 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js @@ -0,0 +1,2 @@ +(function(root,factory){"use strict";if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.StackFrame=factory()}})(this,function(){"use strict";function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n)}function StackFrame(functionName,args,fileName,lineNumber,columnNumber){if(functionName!==undefined){this.setFunctionName(functionName)}if(args!==undefined){this.setArgs(args)}if(fileName!==undefined){this.setFileName(fileName)}if(lineNumber!==undefined){this.setLineNumber(lineNumber)}if(columnNumber!==undefined){this.setColumnNumber(columnNumber)}}StackFrame.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(v){this.functionName=String(v)},getArgs:function(){return this.args},setArgs:function(v){if(Object.prototype.toString.call(v)!=="[object Array]"){throw new TypeError("Args must be an Array")}this.args=v},getFileName:function(){return this.fileName},setFileName:function(v){this.fileName=String(v)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(v){if(!_isNumber(v)){throw new TypeError("Line Number must be a Number")}this.lineNumber=Number(v)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(v){if(!_isNumber(v)){throw new TypeError("Column Number must be a Number")}this.columnNumber=Number(v)},toString:function(){var functionName=this.getFunctionName()||"{anonymous}";var args="("+(this.getArgs()||[]).join(",")+")";var fileName=this.getFileName()?"@"+this.getFileName():"";var lineNumber=_isNumber(this.getLineNumber())?":"+this.getLineNumber():"";var columnNumber=_isNumber(this.getColumnNumber())?":"+this.getColumnNumber():"";return functionName+args+fileName+lineNumber+columnNumber}};return StackFrame});(function(root,factory){"use strict";if(typeof define==="function"&&define.amd){define("error-stack-parser",["stackframe"],factory)}else if(typeof exports==="object"){module.exports=factory(require("stackframe"))}else{root.ErrorStackParser=factory(root.StackFrame)}})(this,function ErrorStackParser(StackFrame){"use strict";var FIREFOX_SAFARI_STACK_REGEXP=/\S+\:\d+/;var CHROME_IE_STACK_REGEXP=/\s+at /;return{parse:function ErrorStackParser$$parse(error){if(typeof error.stacktrace!=="undefined"||typeof error["opera#sourceloc"]!=="undefined"){return this.parseOpera(error)}else if(error.stack&&error.stack.match(CHROME_IE_STACK_REGEXP)){return this.parseV8OrIE(error)}else if(error.stack&&error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)){return this.parseFFOrSafari(error)}else{throw new Error("Cannot parse given Error object")}},extractLocation:function ErrorStackParser$$extractLocation(urlLike){var locationParts=urlLike.split(":");var lastNumber=locationParts.pop();var possibleNumber=locationParts[locationParts.length-1];if(!isNaN(parseFloat(possibleNumber))&&isFinite(possibleNumber)){var lineNumber=locationParts.pop();return[locationParts.join(":"),lineNumber,lastNumber]}else{return[locationParts.join(":"),lastNumber,undefined]}},parseV8OrIE:function ErrorStackParser$$parseV8OrIE(error){return error.stack.split("\n").slice(1).map(function(line){var tokens=line.replace(/^\s+/,"").split(/\s+/).slice(1);var locationParts=this.extractLocation(tokens.pop().replace(/[\(\)\s]/g,""));var functionName=!tokens[0]||tokens[0]==="Anonymous"?undefined:tokens[0];return new StackFrame(functionName,undefined,locationParts[0],locationParts[1],locationParts[2])},this)},parseFFOrSafari:function ErrorStackParser$$parseFFOrSafari(error){return error.stack.split("\n").filter(function(line){return!!line.match(FIREFOX_SAFARI_STACK_REGEXP)},this).map(function(line){var tokens=line.split("@");var locationParts=this.extractLocation(tokens.pop());var functionName=tokens.shift()||undefined;return new StackFrame(functionName,undefined,locationParts[0],locationParts[1],locationParts[2])},this)},parseOpera:function ErrorStackParser$$parseOpera(e){if(!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length){return this.parseOpera9(e)}else if(!e.stack){return this.parseOpera10(e)}else{return this.parseOpera11(e)}},parseOpera9:function ErrorStackParser$$parseOpera9(e){var lineRE=/Line (\d+).*script (?:in )?(\S+)/i;var lines=e.message.split("\n");var result=[];for(var i=2,len=lines.length;i/,"$2").replace(/\([^\)]*\)/g,"")||undefined;var argsRaw;if(functionCall.match(/\(([^\)]*)\)/)){argsRaw=functionCall.replace(/^[^\(]+\(([^\)]*)\)$/,"$1")}var args=argsRaw===undefined||argsRaw==="[arguments not available]"?undefined:argsRaw.split(",");return new StackFrame(functionName,args,locationParts[0],locationParts[1],locationParts[2])},this)}}}); +//@ sourceMappingURL=error-stack-parser.js.map \ No newline at end of file diff --git a/js/node/node_modules/error-stack-parser/error-stack-parser.js b/js/node/node_modules/error-stack-parser/error-stack-parser.js new file mode 100644 index 0000000000..09d304898d --- /dev/null +++ b/js/node/node_modules/error-stack-parser/error-stack-parser.js @@ -0,0 +1,135 @@ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + if (typeof define === 'function' && define.amd) { + define('error-stack-parser', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.ErrorStackParser = factory(root.StackFrame); + } +}(this, function ErrorStackParser(StackFrame) { + 'use strict'; + + var FIREFOX_SAFARI_STACK_REGEXP = /\S+\:\d+/; + var CHROME_IE_STACK_REGEXP = /\s+at /; + + return { + /** + * Given an Error object, extract the most information from it. + * @param error {Error} + * @return Array[StackFrame] + */ + parse: function ErrorStackParser$$parse(error) { + if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { + return this.parseOpera(error); + } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { + return this.parseV8OrIE(error); + } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + return this.parseFFOrSafari(error); + } else { + throw new Error('Cannot parse given Error object'); + } + }, + + /** + * Separate line and column numbers from a URL-like string. + * @param urlLike String + * @return Array[String] + */ + extractLocation: function ErrorStackParser$$extractLocation(urlLike) { + var locationParts = urlLike.split(':'); + var lastNumber = locationParts.pop(); + var possibleNumber = locationParts[locationParts.length - 1]; + if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { + var lineNumber = locationParts.pop(); + return [locationParts.join(':'), lineNumber, lastNumber]; + } else { + return [locationParts.join(':'), lastNumber, undefined]; + } + }, + + parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { + return error.stack.split('\n').slice(1).map(function (line) { + var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop().replace(/[\(\)\s]/g, '')); + var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2]); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.shift() || undefined; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2]); + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(undefined, undefined, match[2], match[1])); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1])); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && + !line.match(/^Error created at/); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); + return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2]); + }, this); + } + }; +})); + diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc new file mode 100644 index 0000000000..c1aba6ead0 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc @@ -0,0 +1,42 @@ +{ + "nonew": true, + "curly": true, + "noarg": true, + "trailing": true, + "forin": true, + "noempty": true, + "node": true, + "eqeqeq": true, + "undef": true, + "bitwise": true, + "newcap": true, + "immed": true, + "browser": true, + "es3": true, + "camelcase": true, + "nonbsp": true, + "freeze": true, + "predef": { + "afterEach": false, + "beforeEach": false, + "define": false, + "describe": false, + "expect": false, + "exports": false, + "it": false, + "jasmine": false, + "require": false, + "runs": false, + "spyOn": false, + "waitsFor": false, + "files": true, + "exclude": true, + "autoWatch": true, + "reporters": true, + "port": true, + "JASMINE": true, + "JASMINE_ADAPTER": true, + "matchers": true, + "priv": true + } +} diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/.npmignore b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.npmignore new file mode 100644 index 0000000000..f0bfa1adef --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.npmignore @@ -0,0 +1,9 @@ +node_modules/ +build/ +coverage/ +spec/ +*.log +.coveralls.yml +.editorconfig +.idea +.travis.yml diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc new file mode 100644 index 0000000000..d0e8c69957 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc @@ -0,0 +1 @@ +0.10.32 diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md b/js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md new file mode 100644 index 0000000000..5d575fb9cf --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md @@ -0,0 +1,16 @@ +## v0.2.2 +* Add name to AMD definition +* Better docs + +## v0.2.1 +* Add minified/source-mapped distribution + +## v0.2.0 +* Add .toString() method compatible with stacktrace.js + +## v0.1.1 +* Clean up npm package + +## v0.1.0 +* Draft implementation + diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md b/js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md new file mode 100644 index 0000000000..b71d649ecd --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md @@ -0,0 +1,28 @@ +## Submitting bugs +Please include the following information to help us reproduce and fix: + +* What you did +* What you expected to happen +* What actually happened +* Browser and version +* Example code that reproduces the problem (if possible) +* *(l33t mode)* A failing test + +## Making contributions +Want to be listed as a *Contributor*? Make a pull request with: + +* Unit and/or functional tests that validate changes you're making. +* Run unit tests in the latest IE, Firefox, Chrome, Safari and Opera and make sure they pass. +* Rebase your changes onto origin/HEAD if you can do so cleanly. +* If submitting additional functionality, provide an example of how to use it. +* Please keep code style consistent with surrounding code. + +## Dev Setup +* Make sure you have [NodeJS v0.10](http://nodejs.org/) installed +* Run `npm install` from the project directory + +## Testing +* (Local) Run `make test`. Make sure [Karma Local Config](karma.conf.js) has the browsers you want. +* (Any browser, remotely) If you have a [Sauce Labs](https://saucelabs.com) account, you can run `make ci`. + Make sure the target browser is enabled in [Karma CI Config](karma.conf.ci.js). + Otherwise, Travis will run all browsers if you submit a Pull Request. diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE b/js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE new file mode 100644 index 0000000000..cf1ab25da0 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md b/js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md new file mode 100644 index 0000000000..2d2bbb891a --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md @@ -0,0 +1,42 @@ +stackframe - JS Object representation of a stack frame. +========== +[![Build Status](https://travis-ci.org/stacktracejs/stackframe.svg?branch=master)](https://travis-ci.org/stacktracejs/stackframe) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stackframe.svg)](https://coveralls.io/r/stacktracejs/stackframe?branch=master) [![Code Climate](https://codeclimate.com/github/stacktracejs/stackframe/badges/gpa.svg)](https://codeclimate.com/github/stacktracejs/stackframe) + +Underlies functionality of other modules within [stacktrace.js](http://www.stacktracejs.com). + +Written to closely resemble StackFrame representations in [Gecko](http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14) and [V8](https://code.google.com/p/v8-wiki/wiki/JavaScriptStackTraceApi) + +## Usage +``` +// Create StackFrame and set properties +var stackFrame = new StackFrame('funName', ['args'], 'http://localhost:3000/file.js', 1, 3288); + +stackFrame.functionName // => "funName" +stackFrame.setFunctionName('newName') +stackFrame.getFunctionName() // => "newName" + +stackFrame.args // => ["args"] +stackFrame.setArgs([]) +stackFrame.getArgs() // => [] + +stackFrame.fileName // => 'http://localhost:3000/file.min.js' +stackFrame.setFileName('http://localhost:3000/file.js') +stackFrame.getFileName() // => 'http://localhost:3000/file.js' + +stackFrame.lineNumber // => 1 +stackFrame.setLineNumber(325) +stackFrame.getLineNumber() // => 325 + +stackFrame.columnNumber // => 3288 +stackFrame.setColumnNumber(20) +stackFrame.getColumnNumber() // => 20 + +stackFrame.toString() // => 'funName(args)@http://localhost:3000/file.js:325:20' +``` + +## Installation +``` +npm install stackframe +bower install stackframe +https://raw.githubusercontent.com/stacktracejs/stackframe/master/dist/stackframe.min.js +``` diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json b/js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json new file mode 100644 index 0000000000..94df40a910 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json @@ -0,0 +1,32 @@ +{ + "name": "stackframe", + "version": "0.2.2", + "main": "./stackframe.js", + "homepage": "https://github.com/stacktracejs/stackframe", + "authors": [ + "Eric Wendelin (http://www.eriwen.com)", + "Victor Homyakov (https://github.com/victor-homyakov)" + ], + "description": "JS Object representation of a stack frame", + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "stacktrace", + "stack-trace", + "backtrace", + "cross-browser", + "framework-agnostic", + "error", + "debugger" + ], + "license": "Public Domain", + "ignore": [ + "**/.*", + "node_modules", + "spec", + "coverage" + ] +} diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js new file mode 100644 index 0000000000..04e1bac143 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js @@ -0,0 +1,95 @@ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function () { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function StackFrame(functionName, args, fileName, lineNumber, columnNumber) { + if (functionName !== undefined) { + this.setFunctionName(functionName); + } + if (args !== undefined) { + this.setArgs(args); + } + if (fileName !== undefined) { + this.setFileName(fileName); + } + if (lineNumber !== undefined) { + this.setLineNumber(lineNumber); + } + if (columnNumber !== undefined) { + this.setColumnNumber(columnNumber); + } + } + + StackFrame.prototype = { + getFunctionName: function () { + return this.functionName; + }, + setFunctionName: function (v) { + this.functionName = String(v); + }, + + getArgs: function () { + return this.args; + }, + setArgs: function (v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + // NOTE: Property name may be misleading as it includes the path, + // but it somewhat mirrors V8's JavaScriptStackTraceApi + // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's + // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14 + getFileName: function () { + return this.fileName; + }, + setFileName: function (v) { + this.fileName = String(v); + }, + + getLineNumber: function () { + return this.lineNumber; + }, + setLineNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Line Number must be a Number'); + } + this.lineNumber = Number(v); + }, + + getColumnNumber: function () { + return this.columnNumber; + }, + setColumnNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Column Number must be a Number'); + } + this.columnNumber = Number(v); + }, + + toString: function() { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + return StackFrame; +})); diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js.map b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js.map new file mode 100644 index 0000000000..b2587ddd3e --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["stackframe.js"],"names":["root","factory","define","amd","exports","module","StackFrame","this","_isNumber","n","isNaN","parseFloat","isFinite","functionName","args","fileName","lineNumber","columnNumber","undefined","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","prototype","getFunctionName","v","String","getArgs","Object","toString","call","TypeError","getFileName","getLineNumber","Number","getColumnNumber","join"],"mappings":"CAAC,SAAUA,KAAMC,SACb,YAEA,UAAWC,UAAW,YAAcA,OAAOC,IAAK,CAC5CD,OAAO,gBAAkBD,aACtB,UAAWG,WAAY,SAAU,CACpCC,OAAOD,QAAUH,cACd,CACHD,KAAKM,WAAaL,aAExBM,KAAM,WACJ,YACA,SAASC,WAAUC,GACf,OAAQC,MAAMC,WAAWF,KAAOG,SAASH,GAG7C,QAASH,YAAWO,aAAcC,KAAMC,SAAUC,WAAYC,cAC1D,GAAIJ,eAAiBK,UAAW,CAC5BX,KAAKY,gBAAgBN,cAEzB,GAAIC,OAASI,UAAW,CACpBX,KAAKa,QAAQN,MAEjB,GAAIC,WAAaG,UAAW,CACxBX,KAAKc,YAAYN,UAErB,GAAIC,aAAeE,UAAW,CAC1BX,KAAKe,cAAcN,YAEvB,GAAIC,eAAiBC,UAAW,CAC5BX,KAAKgB,gBAAgBN,eAI7BX,WAAWkB,WACPC,gBAAiB,WACb,MAAOlB,MAAKM,cAEhBM,gBAAiB,SAAUO,GACvBnB,KAAKM,aAAec,OAAOD,IAG/BE,QAAS,WACL,MAAOrB,MAAKO,MAEhBM,QAAS,SAAUM,GACf,GAAIG,OAAOL,UAAUM,SAASC,KAAKL,KAAO,iBAAkB,CACxD,KAAM,IAAA,AAAIM,WAAU,yBAExBzB,KAAKO,KAAOY,GAOhBO,YAAa,WACT,MAAO1B,MAAKQ,UAEhBM,YAAa,SAAUK,GACnBnB,KAAKQ,SAAWY,OAAOD,IAG3BQ,cAAe,WACX,MAAO3B,MAAKS,YAEhBM,cAAe,SAAUI,GACrB,IAAKlB,UAAUkB,GAAI,CACf,KAAM,IAAA,AAAIM,WAAU,gCAExBzB,KAAKS,WAAamB,OAAOT,IAG7BU,gBAAiB,WACb,MAAO7B,MAAKU,cAEhBM,gBAAiB,SAAUG,GACvB,IAAKlB,UAAUkB,GAAI,CACf,KAAM,IAAA,AAAIM,WAAU,kCAExBzB,KAAKU,aAAekB,OAAOT,IAG/BI,SAAU,WACN,GAAIjB,cAAeN,KAAKkB,mBAAqB,aAC7C,IAAIX,MAAO,KAAOP,KAAKqB,eAAiBS,KAAK,KAAO,GACpD,IAAItB,UAAWR,KAAK0B,cAAiB,IAAM1B,KAAK0B,cAAiB,EACjE,IAAIjB,YAAaR,UAAUD,KAAK2B,iBAAoB,IAAM3B,KAAK2B,gBAAmB,EAClF,IAAIjB,cAAeT,UAAUD,KAAK6B,mBAAsB,IAAM7B,KAAK6B,kBAAqB,EACxF,OAAOvB,cAAeC,KAAOC,SAAWC,WAAaC,cAI7D,OAAOX","file":"stackframe.min.js"} \ No newline at end of file diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js new file mode 100644 index 0000000000..3ef9d2d1d2 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js @@ -0,0 +1,2 @@ +(function(root,factory){"use strict";if(typeof define==="function"&&define.amd){define("stackframe",[],factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.StackFrame=factory()}})(this,function(){"use strict";function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n)}function StackFrame(functionName,args,fileName,lineNumber,columnNumber){if(functionName!==undefined){this.setFunctionName(functionName)}if(args!==undefined){this.setArgs(args)}if(fileName!==undefined){this.setFileName(fileName)}if(lineNumber!==undefined){this.setLineNumber(lineNumber)}if(columnNumber!==undefined){this.setColumnNumber(columnNumber)}}StackFrame.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(v){this.functionName=String(v)},getArgs:function(){return this.args},setArgs:function(v){if(Object.prototype.toString.call(v)!=="[object Array]"){throw new TypeError("Args must be an Array")}this.args=v},getFileName:function(){return this.fileName},setFileName:function(v){this.fileName=String(v)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(v){if(!_isNumber(v)){throw new TypeError("Line Number must be a Number")}this.lineNumber=Number(v)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(v){if(!_isNumber(v)){throw new TypeError("Column Number must be a Number")}this.columnNumber=Number(v)},toString:function(){var functionName=this.getFunctionName()||"{anonymous}";var args="("+(this.getArgs()||[]).join(",")+")";var fileName=this.getFileName()?"@"+this.getFileName():"";var lineNumber=_isNumber(this.getLineNumber())?":"+this.getLineNumber():"";var columnNumber=_isNumber(this.getColumnNumber())?":"+this.getColumnNumber():"";return functionName+args+fileName+lineNumber+columnNumber}};return StackFrame}); +//@ sourceMappingURL=stackframe.js.map \ No newline at end of file diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js b/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js new file mode 100644 index 0000000000..792414a8b0 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js @@ -0,0 +1,132 @@ +module.exports = function (config) { + if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { + console.log('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.'); + process.exit(1); + } + + // Commented some of these out just so CI doesn't take forever. + // Check out https://saucelabs.com/platforms for all browser/platform combos + var customLaunchers = { + //slIOS7: { + // base: 'SauceLabs', + // browserName: 'iPhone', + // platform: 'OS X 10.9', + // version: '7.1' + //}, + slIOS8: { + base: 'SauceLabs', + browserName: 'iPhone', + platform: 'OS X 10.9', + version: '8.1' + }, + //slAndroid4: { + // base: 'SauceLabs', + // browserName: 'Android', + // platform: 'Linux', + // version: '4.0' + //}, + slChrome: { + base: 'SauceLabs', + browserName: 'chrome' + }, + slFirefox: { + base: 'SauceLabs', + browserName: 'firefox' + }, + slSafari6: { + base: 'SauceLabs', + browserName: 'safari', + platform: 'OS X 10.8', + version: '6' + }, + //slSafari7: { + // base: 'SauceLabs', + // browserName: 'safari', + // platform: 'OS X 10.9', + // version: '7' + //}, + //slSafari8: { + // base: 'SauceLabs', + // browserName: 'safari', + // platform: 'OS X 10.10', + // version: '8' + //} + slOpera: { + base: 'SauceLabs', + browserName: 'opera' + }, + slIE11: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 8.1', + version: '11' + }, + //slIE10: { + // base: 'SauceLabs', + // browserName: 'internet explorer', + // platform: 'Windows 8', + // version: '10' + //}, + //slIE9: { + // base: 'SauceLabs', + // browserName: 'internet explorer', + // platform: 'Windows 7', + // version: '9' + //} + //slIE8: { + // base: 'SauceLabs', + // browserName: 'internet explorer', + // platform: 'Windows XP', + // version: '8' + //} + slIE7: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows XP', + version: '7' + } + //slIE6: { + // base: 'SauceLabs', + // browserName: 'internet explorer', + // platform: 'Windows XP', + // version: '6' + //} + }; + + config.set({ + basePath: '', + frameworks: ['jasmine'], + files: [ + 'stackframe.js', + 'spec/*-spec.js' + ], + exclude: [], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browserDisconnectTimeout : 10000, + browserDisconnectTolerance : 1, + browserNoActivityTimeout : 240000, + captureTimeout : 240000, + sauceLabs: { + testName: 'stackframe unit tests', + recordScreenshots: false, + connectOptions: { + port: 5757, + logfile: 'sauce_connect.log' + } + }, + customLaunchers: customLaunchers, + browsers: Object.keys(customLaunchers), + reporters: ['progress', 'saucelabs', 'coverage'], + preprocessors: { + 'stackframe.js': 'coverage' + }, + coverageReporter: { + type: 'lcov', + dir: 'coverage' + }, + singleRun: true + }); +}; diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js b/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js new file mode 100644 index 0000000000..c6ebaee813 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js @@ -0,0 +1,25 @@ +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine'], + files: [ + 'stackframe.js', + 'spec/*-spec.js' + ], + reporters: ['progress', 'coverage'], + preprocessors: { + '*.js': 'coverage' + }, + coverageReporter: { + type: 'lcov', + dir: 'coverage' + }, + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Firefox', 'ChromeCanary', 'Opera', 'Safari', 'PhantomJS'], + singleRun: false + }); +}; diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json b/js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json new file mode 100644 index 0000000000..664530de55 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json @@ -0,0 +1,67 @@ +{ + "name": "stackframe", + "description": "JS Object representation of a stack frame", + "maintainers": [ + { + "name": "eriwen", + "email": "me@eriwen.com" + } + ], + "version": "0.2.2", + "keywords": [ + "stacktrace", + "error", + "debugger", + "stack frame" + ], + "homepage": "http://www.stacktracejs.com", + "repository": { + "type": "git", + "url": "git://github.com/stacktracejs/stackframe.git" + }, + "devDependencies": { + "colors": "~1.0.3", + "coveralls": "^2.11.2", + "jasmine-node": "~1.14", + "jshint": "^2.6.0", + "karma": "~0.12", + "karma-chrome-launcher": "^0.1.5", + "karma-coverage": "^0.2.6", + "karma-firefox-launcher": "^0.1.3", + "karma-ie-launcher": "^0.1.5", + "karma-jasmine": "^0.2.3", + "karma-opera-launcher": "^0.1.0", + "karma-phantomjs-launcher": "^0.1.4", + "karma-safari-launcher": "^0.1.1", + "karma-sauce-launcher": "^0.2.10", + "uglify-js2": "^2.1.11" + }, + "bugs": { + "url": "https://github.com/stacktracejs/stackframe/issues" + }, + "licenses": [ + { + "type": "Public Domain", + "url": "https://github.com/stacktracejs/stackframe/blob/master/LICENSE" + } + ], + "main": "./stackframe.js", + "scripts": { + "test": "make test" + }, + "gitHead": "49dd7e8c64309217e6c146ee7d56b9893c91f9cd", + "_id": "stackframe@0.2.2", + "_shasum": "477b3d067b2ca51c287039ad054192fe5492f95e", + "_from": "stackframe@>=0.0.0 <1.0.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "eriwen", + "email": "me@eriwen.com" + }, + "dist": { + "shasum": "477b3d067b2ca51c287039ad054192fe5492f95e", + "tarball": "http://registry.npmjs.org/stackframe/-/stackframe-0.2.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.2.2.tgz" +} diff --git a/js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js b/js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js new file mode 100644 index 0000000000..04e1bac143 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js @@ -0,0 +1,95 @@ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function () { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function StackFrame(functionName, args, fileName, lineNumber, columnNumber) { + if (functionName !== undefined) { + this.setFunctionName(functionName); + } + if (args !== undefined) { + this.setArgs(args); + } + if (fileName !== undefined) { + this.setFileName(fileName); + } + if (lineNumber !== undefined) { + this.setLineNumber(lineNumber); + } + if (columnNumber !== undefined) { + this.setColumnNumber(columnNumber); + } + } + + StackFrame.prototype = { + getFunctionName: function () { + return this.functionName; + }, + setFunctionName: function (v) { + this.functionName = String(v); + }, + + getArgs: function () { + return this.args; + }, + setArgs: function (v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + // NOTE: Property name may be misleading as it includes the path, + // but it somewhat mirrors V8's JavaScriptStackTraceApi + // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's + // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14 + getFileName: function () { + return this.fileName; + }, + setFileName: function (v) { + this.fileName = String(v); + }, + + getLineNumber: function () { + return this.lineNumber; + }, + setLineNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Line Number must be a Number'); + } + this.lineNumber = Number(v); + }, + + getColumnNumber: function () { + return this.columnNumber; + }, + setColumnNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Column Number must be a Number'); + } + this.columnNumber = Number(v); + }, + + toString: function() { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + return StackFrame; +})); diff --git a/js/node/node_modules/error-stack-parser/package.json b/js/node/node_modules/error-stack-parser/package.json new file mode 100644 index 0000000000..64dff072c7 --- /dev/null +++ b/js/node/node_modules/error-stack-parser/package.json @@ -0,0 +1,76 @@ +{ + "name": "error-stack-parser", + "description": "Extract meaning from JS Errors", + "maintainers": [ + { + "name": "eriwen", + "email": "me@eriwen.com" + } + ], + "version": "1.1.1", + "keywords": [ + "stacktrace", + "error", + "stack" + ], + "homepage": "http://www.stacktracejs.com", + "dependencies": { + "stackframe": "~0" + }, + "repository": { + "type": "git", + "url": "git://github.com/stacktracejs/error-stack-parser.git" + }, + "devDependencies": { + "colors": "~1.0.3", + "coveralls": "^2.11.2", + "jasmine-node": "~1.14", + "jshint": "^2.5.6", + "karma": "~0.12", + "karma-chrome-launcher": "^0.1.5", + "karma-coverage": "^0.2.6", + "karma-firefox-launcher": "^0.1.3", + "karma-ie-launcher": "^0.1.5", + "karma-jasmine": "^0.1.5", + "karma-opera-launcher": "^0.1.0", + "karma-phantomjs-launcher": "^0.1.4", + "karma-safari-launcher": "^0.1.1", + "karma-sauce-launcher": "^0.2.10", + "uglify-js2": "^2.1.11" + }, + "bugs": { + "url": "https://github.com/stacktracejs/error-stack-parser/issues" + }, + "licenses": [ + { + "type": "Public Domain", + "url": "https://github.com/stacktracejs/error-stack-parser/blob/master/LICENSE" + } + ], + "main": "./error-stack-parser.js", + "files": [ + "LICENSE", + "README.md", + "error-stack-parser.js", + "dist/", + "node_modules/stackframe/" + ], + "scripts": { + "test": "make clean test" + }, + "gitHead": "7f6828ec08bbfe50dc0c47042a2b0c571cdab3d1", + "_id": "error-stack-parser@1.1.1", + "_shasum": "26d018fcec17c9ea16e8acf727da03f4a15375e6", + "_from": "error-stack-parser@*", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "eriwen", + "email": "me@eriwen.com" + }, + "dist": { + "shasum": "26d018fcec17c9ea16e8acf727da03f4a15375e6", + "tarball": "http://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.1.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.1.1.tgz" +} diff --git a/js/node/package.json b/js/node/package.json index aca03221f3..9954639b79 100644 --- a/js/node/package.json +++ b/js/node/package.json @@ -6,6 +6,7 @@ "coffee-script": "1.7.1", "decimal": "0.0.2", "docco": "0.6.3", + "error-stack-parser": "^1.1.1", "expect.js": "^0.3.1", "foxx_generator": "0.5.1", "htmlparser2": "3.7.2", diff --git a/js/server/modules/org/arangodb/foxx/console.js b/js/server/modules/org/arangodb/foxx/console.js index 6a797a526e..b5f2a2a0af 100644 --- a/js/server/modules/org/arangodb/foxx/console.js +++ b/js/server/modules/org/arangodb/foxx/console.js @@ -32,6 +32,7 @@ var qb = require('aqb'); var util = require('util'); var extend = require('underscore').extend; +var ErrorStackParser = require('error-stack-parser'); var AssertionError = require('assert').AssertionError; var exists = require('org/arangodb/is').existy; var db = require('org/arangodb').db; @@ -176,28 +177,8 @@ extend(Console.prototype, { if (this._tracing) { var e = new Error(); Error.captureStackTrace(e, callee || this._log); - doc.stack = e.stack.replace(/\n$/, '').split('\n').slice(2) - .map(function (line) { - var tokens = line.match(/\s+at\s+(.+)\s+\((.+):(\d+):(\d+)\)/); - if (tokens) { - return { - functionName: tokens[1], - fileName: tokens[2], - lineNumber: Number(tokens[3]), - columnNumber: Number(tokens[4]) - }; - } - tokens = line.match(/\s+at\s+(.+):(\d+):(\d+)/); - if (tokens) { - return { - functionName: null, - fileName: tokens[1], - lineNumber: Number(tokens[2]), - columnNumber: Number(tokens[3]) - }; - } - return false; - }).filter(Boolean); + e.stack = e.stack.replace(/\n$/, ''); + doc.stack = ErrorStackParser.parse(e).slice(1); } if (!db._foxxlog) {