react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / which / which.js
80681 viewsmodule.exports = which1which.sync = whichSync23var path = require("path")4, fs5, COLON = process.platform === "win32" ? ";" : ":"6, isExe7, fs = require("fs")89if (process.platform == "win32") {10// On windows, there is no good way to check that a file is executable11isExe = function isExe () { return true }12} else {13isExe = function isExe (mod, uid, gid) {14//console.error(mod, uid, gid);15//console.error("isExe?", (mod & 0111).toString(8))16var ret = (mod & 0001)17|| (mod & 0010) && process.getgid && gid === process.getgid()18|| (mod & 0010) && process.getuid && 0 === process.getuid()19|| (mod & 0100) && process.getuid && uid === process.getuid()20|| (mod & 0100) && process.getuid && 0 === process.getuid()21//console.error("isExe?", ret)22return ret23}24}25262728function which (cmd, cb) {29if (isAbsolute(cmd)) return cb(null, cmd)30var pathEnv = (process.env.PATH || "").split(COLON)31, pathExt = [""]32if (process.platform === "win32") {33pathEnv.push(process.cwd())34pathExt = (process.env.PATHEXT || ".EXE").split(COLON)35if (cmd.indexOf(".") !== -1) pathExt.unshift("")36}37//console.error("pathEnv", pathEnv)38;(function F (i, l) {39if (i === l) return cb(new Error("not found: "+cmd))40var p = path.resolve(pathEnv[i], cmd)41;(function E (ii, ll) {42if (ii === ll) return F(i + 1, l)43var ext = pathExt[ii]44//console.error(p + ext)45fs.stat(p + ext, function (er, stat) {46if (!er &&47stat &&48stat.isFile() &&49isExe(stat.mode, stat.uid, stat.gid)) {50//console.error("yes, exe!", p + ext)51return cb(null, p + ext)52}53return E(ii + 1, ll)54})55})(0, pathExt.length)56})(0, pathEnv.length)57}5859function whichSync (cmd) {60if (isAbsolute(cmd)) return cmd61var pathEnv = (process.env.PATH || "").split(COLON)62, pathExt = [""]63if (process.platform === "win32") {64pathEnv.push(process.cwd())65pathExt = (process.env.PATHEXT || ".EXE").split(COLON)66if (cmd.indexOf(".") !== -1) pathExt.unshift("")67}68for (var i = 0, l = pathEnv.length; i < l; i ++) {69var p = path.join(pathEnv[i], cmd)70for (var j = 0, ll = pathExt.length; j < ll; j ++) {71var cur = p + pathExt[j]72var stat73try { stat = fs.statSync(cur) } catch (ex) {}74if (stat &&75stat.isFile() &&76isExe(stat.mode, stat.uid, stat.gid)) return cur77}78}79throw new Error("not found: "+cmd)80}8182var isAbsolute = process.platform === "win32" ? absWin : absUnix8384function absWin (p) {85if (absUnix(p)) return true86// pull off the device/UNC bit from a windows path.87// from node's lib/path.js88var splitDeviceRe =89/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/90, result = splitDeviceRe.exec(p)91, device = result[1] || ''92, isUnc = device && device.charAt(1) !== ':'93, isAbsolute = !!result[2] || isUnc // UNC paths are always absolute9495return isAbsolute96}9798function absUnix (p) {99return p.charAt(0) === "/" || p === ""100}101102103