UNPKG

when

Version:

A lightweight Promises/A+ and when() implementation, plus other async goodies.

107 lines (91 loc) 2.93 kB
/** @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); }));