| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 'use strict';var Promise = require('./core');var DEFAULT_WHITELIST = [  ReferenceError,  TypeError,  RangeError];var enabled = false;exports.disable = disable;function disable() {  enabled = false;  Promise._37 = null;  Promise._87 = null;}exports.enable = enable;function enable(options) {  options = options || {};  if (enabled) disable();  enabled = true;  var id = 0;  var displayId = 0;  var rejections = {};  Promise._37 = function (promise) {    if (      promise._65 === 2 && // IS REJECTED      rejections[promise._51]    ) {      if (rejections[promise._51].logged) {        onHandled(promise._51);      } else {        clearTimeout(rejections[promise._51].timeout);      }      delete rejections[promise._51];    }  };  Promise._87 = function (promise, err) {    if (promise._40 === 0) { // not yet handled      promise._51 = id++;      rejections[promise._51] = {        displayId: null,        error: err,        timeout: setTimeout(          onUnhandled.bind(null, promise._51),          // For reference errors and type errors, this almost always          // means the programmer made a mistake, so log them after just          // 100ms          // otherwise, wait 2 seconds to see if they get handled          matchWhitelist(err, DEFAULT_WHITELIST)            ? 100            : 2000        ),        logged: false      };    }  };  function onUnhandled(id) {    if (      options.allRejections ||      matchWhitelist(        rejections[id].error,        options.whitelist || DEFAULT_WHITELIST      )    ) {      rejections[id].displayId = displayId++;      if (options.onUnhandled) {        rejections[id].logged = true;        options.onUnhandled(          rejections[id].displayId,          rejections[id].error        );      } else {        rejections[id].logged = true;        logError(          rejections[id].displayId,          rejections[id].error        );      }    }  }  function onHandled(id) {    if (rejections[id].logged) {      if (options.onHandled) {        options.onHandled(rejections[id].displayId, rejections[id].error);      } else if (!rejections[id].onUnhandled) {        console.warn(          'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'        );        console.warn(          '  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +          rejections[id].displayId + '.'        );      }    }  }}function logError(id, error) {  console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');  var errStr = (error && (error.stack || error)) + '';  errStr.split('\n').forEach(function (line) {    console.warn('  ' + line);  });}function matchWhitelist(error, list) {  return list.some(function (cls) {    return error instanceof cls;  });}
 |