UNPKG

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
"use strict"; 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; }