You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.6 KiB
102 lines
2.6 KiB
/** @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); }));
|
|
|