-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfindFilesBy.js
43 lines (33 loc) · 1.12 KB
/
findFilesBy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const fs = require('fs');
const path = require('path');
const minimatch = require("minimatch");
const readFiles = (startPath) => {
if (!fs.existsSync(startPath)) {
console.log('Path does not exist:', startPath);
return [];
}
return fs.readdirSync(startPath);
};
const findFilesBy = (startDirectory, stringSearch) => {
const directories = [startDirectory];
const foundFiles = [];
const pathsToIgnore = [
`${startDirectory}/.git`,
`${startDirectory}/.github`,
`${startDirectory}/.trybe`,
];
while (directories.length > 0) {
const currentDirectory = directories.pop();
const files = readFiles(currentDirectory);
files.forEach((file) => {
const filename = path.join(currentDirectory, file);
if (filename.indexOf('node_modules') !== -1) return;
if (pathsToIgnore.some((pathToIgnore) => minimatch(filename, pathToIgnore))) return;
const stat = fs.lstatSync(filename);
if (stat.isDirectory()) directories.push(filename);
else if (filename.indexOf(stringSearch) >= 0) foundFiles.push(filename);
});
}
return foundFiles;
};
module.exports = findFilesBy;