| 'use strict'; | 
|   | 
| var callBound = require('call-bind/callBound'); | 
|   | 
| var $PromiseThen = callBound('Promise.prototype.then', true); | 
|   | 
| var Type = require('./Type'); | 
|   | 
| // https://ecma-international.org/ecma-262/6.0/#sec-ispromise | 
|   | 
| module.exports = function IsPromise(x) { | 
|     if (Type(x) !== 'Object') { | 
|         return false; | 
|     } | 
|     if (!$PromiseThen) { // Promises are not supported | 
|         return false; | 
|     } | 
|     try { | 
|         $PromiseThen(x); // throws if not a promise | 
|     } catch (e) { | 
|         return false; | 
|     } | 
|     return true; | 
| }; |