walk-filtered
Version:
A simple, performant file system walker to provided fine-grained control over directories and files to walk. Supports Node 0.10 and above.
70 lines • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return walk;
}
});
var _fsiterator = /*#__PURE__*/ _interop_require_default(require("fs-iterator"));
_export_star(require("./types.js"), exports);
function _export_star(from, to) {
Object.keys(from).forEach(function(k) {
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
Object.defineProperty(to, k, {
enumerable: true,
get: function() {
return from[k];
}
});
}
});
return from;
}
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function worker(root, filter, options, callback) {
var iterator = new _fsiterator.default(root, {
depth: options.depth === undefined ? Infinity : options.depth,
alwaysStat: options.alwaysStat || false,
lstat: options.lstat || false,
filter: filter,
callbacks: options.callbacks || options.async,
error: function(err) {
if (!~_fsiterator.default.EXPECTED_ERRORS.indexOf(err.code)) return false;
if (options.error) return options.error(err);
return true;
}
});
return iterator.forEach(function(_entry) {}, {
concurrency: options.concurrency || Infinity
}, function forEachCallback(err) {
iterator.destroy();
iterator = null;
callback(err);
});
}
function walk(root, filter, options, callback) {
if (typeof root !== 'string') throw new Error('Directory is required');
if (typeof filter !== 'function') throw new Error('Filter is required');
if (typeof options === 'function') {
callback = options;
options = {};
}
options = options || {};
if (typeof callback === 'function') {
worker(root, filter, options, callback);
return;
}
return new Promise(function(resolve, reject) {
return worker(root, filter, options, function(err) {
err ? reject(err) : resolve(undefined);
});
});
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }