Amjad Masad 3667527d04 Revert "Remove flow"
This reverts commit 2827ff6b01dcce69e9d3c0402e96b52b3a2a47ee.
2016-03-03 14:49:20 -08:00

97 lines
1.9 KiB
JavaScript

import chalk from "chalk";
import path from "path";
import fs from "fs";
import * as rules from "./rules";
import symbols from "log-symbols";
let didError = false;
let lastWasSep = false;
function sep() {
if (lastWasSep) return;
lastWasSep = true;
console.log();
}
function log(msg) {
lastWasSep = false;
console.log(msg);
}
//
log("\n" + chalk.underline.yellow("Babel Doctor"));
log("Running sanity checks on your system. This may take a few minutes...\n");
//
let packages = [];
let nodeModulesDirectories = [
path.join(process.cwd(), "node_modules")
];
while (nodeModulesDirectories.length) {
let loc = nodeModulesDirectories.shift();
if (!fs.existsSync(loc)) continue;
let packagesNames: Array<string> = fs.readdirSync(loc);
for (let packageName of packagesNames) {
if (packageName[0] === ".") continue;
let packageLoc = path.join(loc, packageName);
let packageJsonLoc = path.join(packageLoc, "package.json");
if (!fs.existsSync(packageJsonLoc)) continue;
packages.push({
name: packageName,
loc: packageLoc,
version: require(packageJsonLoc).version
});
nodeModulesDirectories.push(path.join(packageLoc, "node_modules"));
}
}
//
async function run() {
let promises = [];
for (let key in rules) {
if (key[0] === "_") continue;
let fn = rules[key];
promises.push(fn(packages));
}
let results = await Promise.all(promises);
for (let [success, message] of results) {
if (!success) didError = true;
let multiline = message.indexOf("\n") >= 0;
if (multiline) sep();
log(`${success ? symbols.success : symbols.error} ${message}`);
if (multiline) sep();
}
sep();
if (didError) {
log(chalk.red("Found potential issues on your machine :("));
} else {
log(chalk.green("Everything looks all right!"));
}
sep();
}
run().then(function () {
process.exit(0);
}, function (err) {
console.error(err.stack);
process.exit(1);
});