UNPKG

fs-iterator

Version:

A file system iterator with filter and asyncIterator iterafaces. Supports Node 0.10 and above

58 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return depthFirst; } }); var _indexts = /*#__PURE__*/ _interop_require_default(require("../fs-compat/index.js")); var _createEntryts = /*#__PURE__*/ _interop_require_default(require("./createEntry.js")); var _filterts = /*#__PURE__*/ _interop_require_default(require("./filter.js")); var _statts = /*#__PURE__*/ _interop_require_default(require("./stat.js")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isDirectory(entry) { if (entry.realStats) return entry.realStats.isDirectory(); return entry.stats.isDirectory(); } function depthFirst(item, iterator, callback) { var depth = item.depth; var entry = (0, _createEntryts.default)(iterator, item); item = null; // release reference (0, _statts.default)(iterator, entry, function statCallback(err) { if (err || iterator.isDone()) return callback(err); (0, _filterts.default)(iterator, entry, function filterCallback(err, keep) { if (err || !keep || iterator.isDone()) return callback(err); // not a directory or is a directory, but next level is too deep if (!isDirectory(entry) || depth + 1 > iterator.depth) return callback(null, { done: false, value: entry }); // get files in this directory _indexts.default.readdir(entry.fullPath, iterator.readdirOptions, function(err, files) { if (err || iterator.isDone()) return callback(err); if (files.length) { var stackItems = files.map(function(x) { return depthFirst.bind(null, { path: entry.path, depth: depth + 1, basename: x }); }).reverse(); iterator.push.apply(iterator, stackItems); } return callback(null, { done: false, value: entry }); }); }); }); } /* 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; }