diff options
Diffstat (limited to 'node_modules/when/monitor/ConsoleReporter.js')
| -rw-r--r-- | node_modules/when/monitor/ConsoleReporter.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/node_modules/when/monitor/ConsoleReporter.js b/node_modules/when/monitor/ConsoleReporter.js new file mode 100644 index 00000000..79e56ed9 --- /dev/null +++ b/node_modules/when/monitor/ConsoleReporter.js @@ -0,0 +1,102 @@ +/** @license MIT License (c) copyright 2010-2014 original author or authors */ +/** @author Brian Cavalier */ +/** @author John Hann */ + +(function(define) { 'use strict'; +define(function(require) { + + var error = require('./error'); + var unhandledRejectionsMsg = '[promises] Unhandled rejections: '; + var allHandledMsg = '[promises] All previously unhandled rejections have now been handled'; + + function ConsoleReporter() { + this._previouslyReported = false; + } + + ConsoleReporter.prototype = initDefaultLogging(); + + ConsoleReporter.prototype.log = function(traces) { + if(traces.length === 0) { + if(this._previouslyReported) { + this._previouslyReported = false; + this.msg(allHandledMsg); + } + return; + } + + this._previouslyReported = true; + this.groupStart(unhandledRejectionsMsg + traces.length); + try { + this._log(traces); + } finally { + this.groupEnd(); + } + }; + + ConsoleReporter.prototype._log = function(traces) { + for(var i=0; i<traces.length; ++i) { + this.warn(error.format(traces[i])); + } + }; + + function initDefaultLogging() { + /*jshint maxcomplexity:7*/ + var log, warn, groupStart, groupEnd; + + if(typeof console === 'undefined') { + log = warn = consoleNotAvailable; + } else { + // Alias console to prevent things like uglify's drop_console option from + // removing console.log/error. Unhandled rejections fall into the same + // category as uncaught exceptions, and build tools shouldn't silence them. + var localConsole = console; + if(typeof localConsole.error === 'function' + && typeof localConsole.dir === 'function') { + warn = function(s) { + localConsole.error(s); + }; + + log = function(s) { + localConsole.log(s); + }; + + if(typeof localConsole.groupCollapsed === 'function') { + groupStart = function(s) { + localConsole.groupCollapsed(s); + }; + groupEnd = function() { + localConsole.groupEnd(); + }; + } + } else { + // IE8 has console.log and JSON, so we can make a + // reasonably useful warn() from those. + // Credit to webpro (https://github.com/webpro) for this idea + if (typeof localConsole.log ==='function' + && typeof JSON !== 'undefined') { + log = warn = function (x) { + if(typeof x !== 'string') { + try { + x = JSON.stringify(x); + } catch(e) {} + } + localConsole.log(x); + }; + } + } + } + + return { + msg: log, + warn: warn, + groupStart: groupStart || warn, + groupEnd: groupEnd || consoleNotAvailable + }; + } + + function consoleNotAvailable() {} + + return ConsoleReporter; + +}); +}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); |
