From 5f943da04489fb15e241a2cff725708559664010 Mon Sep 17 00:00:00 2001 From: Aria Date: Sat, 25 Jan 2014 16:55:33 +0330 Subject: [PATCH] Implemented PrettyError.listen() --- .npmignore | 2 + scripts/coffee/lib/PrettyError.coffee | 82 +++++++++++++++++---------- 2 files changed, 54 insertions(+), 30 deletions(-) diff --git a/.npmignore b/.npmignore index 63370de..5921634 100644 --- a/.npmignore +++ b/.npmignore @@ -5,6 +5,8 @@ xeno/** node_modules scripts/dist +docs + -p npm-debug.log diff --git a/scripts/coffee/lib/PrettyError.coffee b/scripts/coffee/lib/PrettyError.coffee index c6bb116..0b4b282 100644 --- a/scripts/coffee/lib/PrettyError.coffee +++ b/scripts/coffee/lib/PrettyError.coffee @@ -22,6 +22,14 @@ module.exports = class PrettyError defaultStyle() + @listen: (cb) -> + + pe = new self + + pe.listen cb + + pe + constructor: -> @_maxItems = 50 @@ -42,6 +50,20 @@ module.exports = class PrettyError @_renderer.style @_style + listen: (cb) -> + + process.on 'uncaughtException', (exc) => + + @render exc, yes + + process.exit 1 + + return + + process.nextTick cb if cb? + + @ + config: (c) -> if c.skipPackages? @@ -244,36 +266,6 @@ module.exports = class PrettyError rendered - _skipOrFilter: (item, itemNumber) -> - - if typeof item is 'object' - - return yes if item.modName in @_packagesToSkip - - return yes if item.path in @_pathsToSkip - - for modName in item.packages - - return yes if modName in @_packagesToSkip - - if typeof item.shortenedAddr is 'string' - - for pair in @_aliases - - item.shortenedAddr = item.shortenedAddr.replace pair.stringOrRx, - - pair.alias - - for cb in @_skipCallbacks - - return yes if cb(item, itemNumber) is yes - - for cb in @_filterCallbacks - - cb(item, itemNumber) - - return no - getObject: (e) -> unless e instanceof ParsedError @@ -363,6 +355,36 @@ module.exports = class PrettyError obj + _skipOrFilter: (item, itemNumber) -> + + if typeof item is 'object' + + return yes if item.modName in @_packagesToSkip + + return yes if item.path in @_pathsToSkip + + for modName in item.packages + + return yes if modName in @_packagesToSkip + + if typeof item.shortenedAddr is 'string' + + for pair in @_aliases + + item.shortenedAddr = item.shortenedAddr.replace pair.stringOrRx, + + pair.alias + + for cb in @_skipCallbacks + + return yes if cb(item, itemNumber) is yes + + for cb in @_filterCallbacks + + cb(item, itemNumber) + + return no + for prop in ['renderer', 'style'] then do -> methodName = '_get' + prop[0].toUpperCase() + prop.substr(1, prop.length)