From ce6fc0a8ae2f7f2db2149457027ac9b590d30ba2 Mon Sep 17 00:00:00 2001 From: Naitik Shah Date: Wed, 17 Aug 2011 13:33:34 -0700 Subject: [PATCH] add useful stack traces --- lib/makeerror.js | 18 ++++++++++++++++++ package.json | 2 +- test/makeerror-tests.js | 9 ++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/makeerror.js b/lib/makeerror.js index d928d9b..65d7805 100644 --- a/lib/makeerror.js +++ b/lib/makeerror.js @@ -56,6 +56,24 @@ function makeError(name, defaultMessage, defaultData) { } else { this.message = defaultMessage(this.data) } + + var er = new Error() + this.stack = er.stack + if (this.stack) { + // remove TWO stack level: + if (typeof Components !== 'undefined') { + // Mozilla: + this.stack = this.stack.substring(this.stack.indexOf('\n') + 2) + } else if (typeof chrome !== 'undefined' || typeof process !== 'undefined') { + // Google Chrome/Node.js: + this.stack = this.stack.replace(/\n[^\n]*/, '') + this.stack = this.stack.replace(/\n[^\n]*/, '') + this.stack = this.name + this.stack.substring(5) + } + } + + if ('fileName' in er) this.fileName = er.fileName + if ('lineNumber' in er) this.lineNumber = er.lineNumber } CustomError.prototype = defaultData.proto || new BaseError() diff --git a/package.json b/package.json index 5c929ee..fa7831d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "makeerror", "description": "A library to make errors.", - "version": "1.0.5", + "version": "1.0.6", "author": "Naitik Shah ", "main": "lib/makeerror", "repository": { diff --git a/test/makeerror-tests.js b/test/makeerror-tests.js index 62e2fa4..512dd12 100644 --- a/test/makeerror-tests.js +++ b/test/makeerror-tests.js @@ -140,5 +140,12 @@ exports['proto must be created via makeError'] = function(beforeExit) { makeError('Child', '', { proto: new Error() }) }, /created via makeError/ - ); + ) +} + +exports['stack trace'] = function(beforeExit) { + var name = 'MyError' + , MyError = makeError(name) + , er = MyError() + assert.match(er.stack, new RegExp(name + '\\n *at ' + __filename)) }