41 lines
1.6 KiB
JavaScript
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
|