| var fs = require('fs') | 
| var core | 
| if (process.platform === 'win32' || global.TESTING_WINDOWS) { | 
|   core = require('./windows.js') | 
| } else { | 
|   core = require('./mode.js') | 
| } | 
|   | 
| module.exports = isexe | 
| isexe.sync = sync | 
|   | 
| function isexe (path, options, cb) { | 
|   if (typeof options === 'function') { | 
|     cb = options | 
|     options = {} | 
|   } | 
|   | 
|   if (!cb) { | 
|     if (typeof Promise !== 'function') { | 
|       throw new TypeError('callback not provided') | 
|     } | 
|   | 
|     return new Promise(function (resolve, reject) { | 
|       isexe(path, options || {}, function (er, is) { | 
|         if (er) { | 
|           reject(er) | 
|         } else { | 
|           resolve(is) | 
|         } | 
|       }) | 
|     }) | 
|   } | 
|   | 
|   core(path, options || {}, function (er, is) { | 
|     // ignore EACCES because that just means we aren't allowed to run it | 
|     if (er) { | 
|       if (er.code === 'EACCES' || options && options.ignoreErrors) { | 
|         er = null | 
|         is = false | 
|       } | 
|     } | 
|     cb(er, is) | 
|   }) | 
| } | 
|   | 
| function sync (path, options) { | 
|   // my kingdom for a filtered catch | 
|   try { | 
|     return core.sync(path, options || {}) | 
|   } catch (er) { | 
|     if (options && options.ignoreErrors || er.code === 'EACCES') { | 
|       return false | 
|     } else { | 
|       throw er | 
|     } | 
|   } | 
| } |