1
0
Fork 0

Don't re-invent the wheel.

This commit is contained in:
Alan Plum 2015-02-03 11:56:37 +01:00
parent a36c96060a
commit f9744eb761
24 changed files with 1033 additions and 22 deletions

24
js/node/node_modules/error-stack-parser/LICENSE generated vendored Normal file
View File

@ -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 <http://unlicense.org>

45
js/node/node_modules/error-stack-parser/README.md generated vendored Normal file
View File

@ -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)

View File

@ -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(/<anonymous function(: (\w+))?>/, '$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);
}
};
}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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(/<anonymous function(: (\w+))?>/, '$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);
}
};
}));

View File

@ -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
}
}

View File

@ -0,0 +1,9 @@
node_modules/
build/
coverage/
spec/
*.log
.coveralls.yml
.editorconfig
.idea
.travis.yml

View File

@ -0,0 +1 @@
0.10.32

View File

@ -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

View File

@ -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.

View File

@ -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 <http://unlicense.org>

View File

@ -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
```

View File

@ -0,0 +1,32 @@
{
"name": "stackframe",
"version": "0.2.2",
"main": "./stackframe.js",
"homepage": "https://github.com/stacktracejs/stackframe",
"authors": [
"Eric Wendelin <me@eriwen.com> (http://www.eriwen.com)",
"Victor Homyakov <vkhomyackov@gmail.com> (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"
]
}

View File

@ -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;
}));

View File

@ -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"}

View File

@ -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

View File

@ -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
});
};

View File

@ -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
});
};

View File

@ -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"
}

View File

@ -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;
}));

76
js/node/node_modules/error-stack-parser/package.json generated vendored Normal file
View File

@ -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"
}

View File

@ -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",

View File

@ -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) {