first-existing
Version:
Finds the first existing file from a list of choices
46 lines (35 loc) • 972 B
JavaScript
var la = require('lazy-ass');
var is = require('check-more-types');
var path = require('path');
var exists = require('fs').existsSync;
function isRoot(folder) {
return folder === '/';
}
function parentFolder(folder) {
return path.normalize(path.join(folder, '..'))
}
function firstExisting(folder, filenames, walkUp) {
la(is.unemptyString(folder), 'missing folder', folder);
if (isRoot(folder)) {
return;
}
if (is.string(filenames)) {
filenames = [filenames];
}
la(is.strings(filenames), 'missing filename candidates', filenames);
la(exists(folder), 'cannot find folder', folder);
var found;
filenames.some(function (name) {
var full = path.isAbsolute(name) ? name : path.join(folder, name);
if (exists(full)) {
found = full;
return true;
}
});
if (!found && walkUp) {
return firstExisting(parentFolder(folder), filenames, walkUp);
}
return found;
}
module.exports = firstExisting;
;