@backstage/cli
Version:
CLI for developing Backstage plugins and apps
92 lines (86 loc) • 2.89 kB
JavaScript
var chalk = require('chalk');
var path = require('path');
var cliNode = require('@backstage/cli-node');
var index = require('./index-ce56dce5.cjs.js');
var parallel = require('./parallel-a8f6219c.cjs.js');
require('commander');
require('fs-extra');
require('semver');
require('@backstage/cli-common');
require('@backstage/errors');
require('os');
require('worker_threads');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
function depCount(pkg) {
const deps = pkg.dependencies ? Object.keys(pkg.dependencies).length : 0;
const devDeps = pkg.devDependencies ? Object.keys(pkg.devDependencies).length : 0;
return deps + devDeps;
}
async function command(opts) {
let packages = await cliNode.PackageGraph.listTargetPackages();
if (opts.since) {
const graph = cliNode.PackageGraph.fromPackages(packages);
packages = await graph.listChangedPackages({
ref: opts.since,
analyzeLockfile: true
});
}
packages.sort((a, b) => depCount(b.packageJson) - depCount(a.packageJson));
if (opts.format === "eslint-formatter-friendly") {
process.chdir(index.paths.targetRoot);
}
if (!process.env.FORCE_COLOR) {
process.env.FORCE_COLOR = "1";
}
const resultsList = await parallel.runWorkerQueueThreads({
items: packages.map((pkg) => ({
fullDir: pkg.dir,
relativeDir: path.relative(index.paths.targetRoot, pkg.dir)
})),
workerData: {
fix: Boolean(opts.fix),
format: opts.format
},
workerFactory: async ({ fix, format }) => {
const { ESLint } = require("eslint");
return async ({
fullDir,
relativeDir
}) => {
process.cwd = () => fullDir;
const start = Date.now();
const eslint = new ESLint({
cwd: fullDir,
fix,
extensions: ["js", "jsx", "ts", "tsx", "mjs", "cjs"]
});
const formatter = await eslint.loadFormatter(format);
const results = await eslint.lintFiles(["."]);
const count = String(results.length).padStart(3);
const time = ((Date.now() - start) / 1e3).toFixed(2);
console.log(`Checked ${count} files in ${relativeDir} ${time}s`);
if (fix) {
await ESLint.outputFixes(results);
}
const resultText = formatter.format(results);
return { relativeDir, resultText };
};
}
});
let failed = false;
for (const { relativeDir, resultText } of resultsList) {
if (resultText) {
console.log();
console.log(chalk__default["default"].red(`Lint failed in ${relativeDir}:`));
console.log(resultText.trimStart());
failed = true;
}
}
if (failed) {
process.exit(1);
}
}
exports.command = command;
//# sourceMappingURL=lint-04d6d7e9.cjs.js.map
;