123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /** @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
- // typeof localConsole.log will return 'object' in IE8, so can't test it with === 'function'
- // Since this is more of a corner case for IE8, I'm ok to check it with !== 'undefined' to reduce complexity
- if (typeof localConsole.log !== 'undefined' && typeof JSON !== 'undefined') {
- log = warn = function(x) {
- if (typeof x !== 'string') {
- try {
- x = JSON.stringify(x);
- } catch (e) {
- }
- }
- localConsole.log(x);
- };
- } else {
- log = warn = consoleNotAvailable;
- }
- }
- }
- 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); }));
|