super-fs
Version:
Virtual file system
47 lines (28 loc) • 1.41 kB
JavaScript
const _ = require('lodash');
const addPrefix = function(name, options){
var result = options.prefix ? options.prefix + name : name;
return result;
};
const listAll = function(path, virtual_fs, config){
var result = [];
var options = config || {};
var shouldFilterByType = ['directories', 'files'].indexOf(options.filter) > -1;
var directory = path ? _.find(virtual_fs.contents, {name: path}) : virtual_fs;
var contents = directory && directory.contents ? directory.contents : [];
contents.forEach(function(element){
var shouldDisplayFiles = element.type === 'file' && (!shouldFilterByType || options.filter !== 'directories');
var shouldDisplayDirectories = !shouldFilterByType || options.filter !== 'files';
var prefixed = addPrefix(element.name, options);
if(shouldDisplayFiles) {
result.push(prefixed);
} else if(element.type === 'directory') {
var new_config = _.merge({}, options, {prefix: addPrefix(element.name + '/', options)});
var directory_result = listAll(null, element, new_config);
var filteredName = shouldDisplayDirectories ? [prefixed] : [];
var nested_result = directory_result.length ? directory_result : filteredName;
result = result.concat(nested_result);
}
});
return result;
};
module.exports = listAll;