2024-02-24 00:37:31 +08:00

41 lines
1.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "recursiveReadDir", {
enumerable: true,
get: function() {
return recursiveReadDir;
}
});
const _fs = require("fs");
const _path = require("path");
async function recursiveReadDir(/** Directory to read */ dir, /** Filter for the file path */ filter, /** Filter for the file path */ ignore, ignorePart, /** This doesn't have to be provided, it's used for the recursion */ arr = [], /** Used to replace the initial path, only the relative path is left, it's faster than path.relative. */ rootDir = dir) {
const result = await _fs.promises.readdir(dir, {
withFileTypes: true
});
await Promise.all(result.map(async (part)=>{
const absolutePath = (0, _path.join)(dir, part.name);
const relativePath = absolutePath.replace(rootDir, "");
if (ignore && ignore(absolutePath)) return;
if (ignorePart && ignorePart(part.name)) return;
// readdir does not follow symbolic links
// if part is a symbolic link, follow it using stat
let isDirectory = part.isDirectory();
if (part.isSymbolicLink()) {
const stats = await _fs.promises.stat(absolutePath);
isDirectory = stats.isDirectory();
}
if (isDirectory) {
await recursiveReadDir(absolutePath, filter, ignore, ignorePart, arr, rootDir);
return;
}
if (!filter(absolutePath)) {
return;
}
arr.push(relativePath);
}));
return arr.sort();
}
//# sourceMappingURL=recursive-readdir.js.map