@appworks/doctor
Version:
Analyse and running codemods over react/rax projects, troubleshooting and automatically fixing errors
62 lines (61 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs-extra");
var path = require("path");
var ignore_1 = require("ignore");
var glob_1 = require("glob");
// Supprot check file's max LoC
var MAX_CHECK_LOC = 3000;
// Get ignore config from file
var IGNORE_CONFIG_FILES = ['.gitignore'];
function getFileInfo(filePath, directory) {
var file = directory ? path.join(directory, filePath) : filePath;
var source = fs.readFileSync(file).toString().trim();
// if begins with shebang
if (source[0] === '#' && source[1] === '!') {
source = "//" + source;
}
return {
path: file,
source: source,
LoC: (source.match(/\n/g) || '').length + 1,
};
}
function getFiles(directory, ignoreDirs) {
var options = {
nodir: true,
cwd: directory,
};
if (!fs.existsSync(directory)) {
return [];
}
try {
var ig_1 = ignore_1.default();
var stat = fs.statSync(directory);
if (stat.isFile()) {
return [getFileInfo(directory)];
}
if (ignoreDirs) {
options.ignore = ignoreDirs.map(function (ignoreDir) { return "**/" + ignoreDir + "/**"; });
}
IGNORE_CONFIG_FILES.forEach(function (ignoreConfigFile) {
var ignoreConfigFilePath = path.join(directory, ignoreConfigFile);
if (fs.existsSync(ignoreConfigFilePath)) {
ig_1.add(fs.readFileSync(ignoreConfigFilePath).toString());
}
});
// https://www.npmjs.com/package/glob
return glob_1.glob.sync('**/*', options)
.map(function (file) { return getFileInfo(file, directory); })
.filter(function (file) {
// https://www.npmjs.com/package/ignore
// Use .ignore file to filter glob result. Same as https://www.npmjs.com/package/glob-gitignore
return file.LoC <= MAX_CHECK_LOC && !ig_1.ignores(file.path.replace(path.join(directory, '/'), ''));
});
}
catch (e) {
console.log('Get files failed!', e);
return [];
}
}
exports.default = getFiles;