@qualweb/cli
Version:
QualWeb evaluator command line interface
55 lines • 2.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addBestPracticeOptionsToCommand = addBestPracticeOptionsToCommand;
const node_fs_1 = __importDefault(require("node:fs"));
const commander_1 = require("commander");
const bestPractices_json_1 = __importDefault(require("@qualweb/best-practices/lib/bestPractices.json"));
const types_1 = require("../types");
function bestPracticesListParseHelper(value, previousValue) {
if (!previousValue)
previousValue = { error: [], ok: [] };
const allBestPractices = Object.values(bestPractices_json_1.default);
if (/^QW-BP\d+$/i.exec(value)) {
value = value.toUpperCase();
const foundBestPractice = allBestPractices.find(rule => rule.code === value);
if (foundBestPractice) {
previousValue.ok.push(foundBestPractice.code);
}
else {
previousValue.error.push(value);
}
}
else {
value = value.toUpperCase();
const foundTechnique = allBestPractices.find(rule => 'mapping' in rule && rule.mapping === value);
if (foundTechnique) {
previousValue.ok.push(foundTechnique.code);
}
else if (node_fs_1.default.existsSync(value)) {
const fileContents = node_fs_1.default.readFileSync(value, 'utf8')
.split(/\r?\n/)
.map(line => line.trim())
.filter(line => line.length > 0);
return fileContents.reduce((prev, current) => bestPracticesListParseHelper(current, prev), previousValue);
}
else {
previousValue.error.push(value);
}
}
return previousValue;
}
function addBestPracticeOptionsToCommand(command) {
const bestPracticeIncludeOption = new commander_1.Option('--best-practices <practices...>', 'Which tests for best practices to execute. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of practices.')
.argParser(bestPracticesListParseHelper)
.implies({ module: [types_1.ModuleOptionsEnum.BestPractices] });
const bestPracticeExcludeOption = new commander_1.Option('--exclude-bp <practices...>', 'Which tests for best practices to exclude. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of practices.')
.argParser(bestPracticesListParseHelper)
.implies({ module: [types_1.ModuleOptionsEnum.BestPractices] });
command.addOption(bestPracticeIncludeOption);
command.addOption(bestPracticeExcludeOption);
return command;
}
//# sourceMappingURL=bestPractices.js.map