UNPKG

fs-iterator

Version:

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

33 lines (32 loc) 1.44 kB
import fsCompat from '../fs-compat/index.js'; import lifoFromArray from '../lifoFromArray.js'; import createEntry from './createEntry.js'; import filter from './filter.js'; import stat from './stat.js'; function isDirectory(entry) { if (entry.realStats) return entry.realStats.isDirectory(); return entry.stats.isDirectory(); } export default function path(item, iterator, callback) { const depth = item.depth; const entry = createEntry(iterator, item); item = null; // release reference stat(iterator, entry, function statCallback(err) { if (err || iterator.isDone()) return callback(err); filter(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, entry); // get files in this directory fsCompat.readdir(entry.fullPath, iterator.readdirOptions, function readdirCallback(err, files) { if (err || iterator.isDone()) return callback(err); if (files.length) iterator.push({ path: entry.path, depth: depth + 1, files: lifoFromArray(files) }); return callback(null, entry); }); }); }); }