forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
43 lines
1.5 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.readdirRecursive = void 0;
|
|
const path_1 = require("path");
|
|
const fs_extra_1 = require("fs-extra");
|
|
const _ = require("lodash");
|
|
const minimatch = require("minimatch");
|
|
async function readdirRecursiveHelper(options) {
|
|
const dirContents = (0, fs_extra_1.readdirSync)(options.path);
|
|
const fullPaths = dirContents.map((n) => (0, path_1.join)(options.path, n));
|
|
const filteredPaths = fullPaths.filter((p) => !options.filter(p));
|
|
const filePromises = [];
|
|
for (const p of filteredPaths) {
|
|
const fstat = (0, fs_extra_1.statSync)(p);
|
|
if (fstat.isFile()) {
|
|
filePromises.push(Promise.resolve({ name: p, mode: fstat.mode }));
|
|
}
|
|
if (!fstat.isDirectory()) {
|
|
continue;
|
|
}
|
|
filePromises.push(readdirRecursiveHelper({ path: p, filter: options.filter }));
|
|
}
|
|
const files = await Promise.all(filePromises);
|
|
let flatFiles = _.flattenDeep(files);
|
|
flatFiles = flatFiles.filter((f) => f !== null);
|
|
return flatFiles;
|
|
}
|
|
async function readdirRecursive(options) {
|
|
const mmopts = { matchBase: true, dot: true };
|
|
const rules = (options.ignore || []).map((glob) => {
|
|
return (p) => minimatch(p, glob, mmopts);
|
|
});
|
|
const filter = (t) => {
|
|
return rules.some((rule) => {
|
|
return rule(t);
|
|
});
|
|
};
|
|
return readdirRecursiveHelper({
|
|
path: options.path,
|
|
filter: filter,
|
|
});
|
|
}
|
|
exports.readdirRecursive = readdirRecursive;
|