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.
31 lines
805 B
31 lines
805 B
'use strict'; |
|
|
|
var path = require('path'); |
|
var which = require('which'); |
|
var LRU = require('lru-cache'); |
|
|
|
var commandCache = new LRU({ max: 50, maxAge: 30 * 1000 }); // Cache just for 30sec |
|
|
|
function resolveCommand(command, noExtension) { |
|
var resolved; |
|
|
|
noExtension = !!noExtension; |
|
resolved = commandCache.get(command + '!' + noExtension); |
|
|
|
// Check if its resolved in the cache |
|
if (commandCache.has(command)) { |
|
return commandCache.get(command); |
|
} |
|
|
|
try { |
|
resolved = !noExtension ? |
|
which.sync(command) : |
|
which.sync(command, { pathExt: path.delimiter + (process.env.PATHEXT || '') }); |
|
} catch (e) { /* empty */ } |
|
|
|
commandCache.set(command + '!' + noExtension, resolved); |
|
|
|
return resolved; |
|
} |
|
|
|
module.exports = resolveCommand;
|
|
|