forked from microsoft/rushstack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenumerate.js
More file actions
99 lines (78 loc) · 1.99 KB
/
enumerate.js
File metadata and controls
99 lines (78 loc) · 1.99 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
let fs = require('fs');
let path = require('path');
let fileExists = require('./utils').fileExists;
let directoryExists = require('./utils').directoryExists;
let rootPackagePath = path.resolve('./package.json');
function findPackagesSync(dir, results) {
let excludes = [
'.git',
'node_modules',
'typings',
'lib',
'src',
'dist',
'coverage',
'common'
];
results = results || [];
let list = fs.readdirSync(dir).filter(file => excludes.indexOf(file) === -1);
list.forEach((file) => {
let fullPath = path.resolve(dir, file);
if (directoryExists(fullPath)) {
findPackagesSync(fullPath, results);
} else if (fullPath !== rootPackagePath && fileExists(fullPath) && path.basename(file) === 'package.json') {
results.push(fullPath);
}
});
return results;
}
function forEachPackage(dir, cb) {
let packageCount = 0;
let packageLocations = findPackagesSync('.');
packageLocations.forEach(packageLocation => {
// crack open packages.
let data = fs.readFileSync(packageLocation, 'utf8');
let pkg = JSON.parse(data);
cb(pkg, packageLocation);
});
}
function getAllProjects() {
let allProjects = {};
forEachPackage('.', (pkg, location) => {
allProjects[pkg.name] = {
package: pkg,
path: location
};
});
return allProjects;
}
function findReposSync(dir, results) {
let excludes = [
'node_modules'
];
results = results || [];
let list = fs.readdirSync(dir);
list = list.filter(file => excludes.indexOf(file) === -1);
list.forEach((file) => {
let fullPath = path.resolve(dir, file);
if (directoryExists(fullPath)) {
if (file === '.git') {
results.push(dir);
} else {
findReposSync(fullPath, results);
}
}
});
return results;
}
function forEachRepo(dir, cb) {
findReposSync('.').forEach(repoPath => cb(repoPath));
}
module.exports = {
findPackagesSync,
forEachPackage,
getAllProjects,
findReposSync,
forEachRepo
};