You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.2 KiB
57 lines
1.2 KiB
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 |
|
} |
|
} |
|
}
|
|
|