text: "use strict";
  
  /* global self, window, module, global, require */
  module.exports = function () {
  
      "use strict";
  
      var globalObject = void 0;
  
      function isFunction(x) {
          return typeof x === "function";
      }
  
      // Seek the global object
      if (global !== undefined) {
          globalObject = global;
      } else if (window !== undefined && window.document) {
          globalObject = window;
      } else {
          globalObject = self;
      }
  
      // Test for any native promise implementation, and if that
      // implementation appears to conform to the specificaton.
      // This code mostly nicked from the es6-promise module polyfill
      // and then fooled with.
      var hasPromiseSupport = function () {
  
          // No promise object at all, and it's a non-starter
          if (!globalObject.hasOwnProperty("Promise")) {
              return false;
          }
  
          // There is a Promise object. Does it conform to the spec?
          var P = globalObject.Promise;
  
          // Some of these methods are missing from
          // Firefox/Chrome experimental implementations
          if (!P.hasOwnProperty("resolve") || !P.hasOwnProperty("reject")) {
              return false;
          }
  
          if (!P.hasOwnProperty("all") || !P.hasOwnProperty("race")) {
              return false;
          }
  
          // Older version of the spec had a resolver object
          // as the arg rather than a function
          return function () {
  
              var resolve = void 0;
  
              var p = new globalObject.Promise(function (r) {
                  resolve = r;
              });
  
              if (p) {
                  return isFunction(resolve);
              }
  
              return false;
          }();
      }();
  
      // Export the native Promise implementation if it
      // looks like it matches the spec
      if (hasPromiseSupport) {
          return globalObject.Promise;
      }
  
      //  Otherwise, return the es6-promise polyfill by @jaffathecake.
      return require("es6-promise").Promise;
  }();