Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-go / node_modules / isexe / index.js
1 var fs = require('fs')
2 var core
3 if (process.platform === 'win32' || global.TESTING_WINDOWS) {
4   core = require('./windows.js')
5 } else {
6   core = require('./mode.js')
7 }
8
9 module.exports = isexe
10 isexe.sync = sync
11
12 function isexe (path, options, cb) {
13   if (typeof options === 'function') {
14     cb = options
15     options = {}
16   }
17
18   if (!cb) {
19     if (typeof Promise !== 'function') {
20       throw new TypeError('callback not provided')
21     }
22
23     return new Promise(function (resolve, reject) {
24       isexe(path, options || {}, function (er, is) {
25         if (er) {
26           reject(er)
27         } else {
28           resolve(is)
29         }
30       })
31     })
32   }
33
34   core(path, options || {}, function (er, is) {
35     // ignore EACCES because that just means we aren't allowed to run it
36     if (er) {
37       if (er.code === 'EACCES' || options && options.ignoreErrors) {
38         er = null
39         is = false
40       }
41     }
42     cb(er, is)
43   })
44 }
45
46 function sync (path, options) {
47   // my kingdom for a filtered catch
48   try {
49     return core.sync(path, options || {})
50   } catch (er) {
51     if (options && options.ignoreErrors || er.code === 'EACCES') {
52       return false
53     } else {
54       throw er
55     }
56   }
57 }