| "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; | 
| }(); |