@qualweb/cli
Version:
QualWeb evaluator command line interface
66 lines • 3.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addActRuleOptionsToCommand = addActRuleOptionsToCommand;
const node_fs_1 = __importDefault(require("node:fs"));
const commander_1 = require("commander");
const rules_json_1 = __importDefault(require("@qualweb/act-rules/lib/rules.json"));
const types_1 = require("../types");
function actRulesListParseHelper(value, previousValue) {
if (!previousValue)
previousValue = { error: [], ok: [] };
const allActRules = Object.values(rules_json_1.default);
if (/^QW-ACT-R\d+$/i.exec(value)) {
value = value.toUpperCase();
const foundActRule = allActRules.find(rule => rule.code === value);
if (foundActRule) {
previousValue.ok.push(foundActRule.code);
}
else {
previousValue.error.push(value);
}
}
else if (value.length === 6) {
value = value.toLowerCase();
const foundActRule = allActRules.find(rule => rule.mapping === value);
if (foundActRule) {
previousValue.ok.push(foundActRule.code);
}
else {
previousValue.error.push(value);
}
}
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) => actRulesListParseHelper(current, prev), previousValue);
}
else {
previousValue.error.push(value);
}
return previousValue;
}
function addActRuleOptionsToCommand(command) {
const actRuleIncludeOption = new commander_1.Option('--act-rules <rules...>', 'ACT rules to include. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of rules.')
.argParser(actRulesListParseHelper)
.implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
const actRuleExcludeOption = new commander_1.Option('--exclude-act <rules...>', 'ACT rules to exclude. Can be multiple. If a path to a FILE, it will be read as a newline-separated list of rules.')
.argParser(actRulesListParseHelper)
.implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
const actRuleLevelOption = new commander_1.Option('--act-levels <levels...>', 'ACT level to test')
.choices(Object.values(types_1.ConformanceLevelEnum))
.implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
const actRulePrincipleOption = new commander_1.Option('--act-principles <principles...>', 'Which principles to test for in ACT rules. Only ACT rules matching the principle will be tested.')
.choices(Object.values(types_1.PrincipleEnum))
.implies({ module: [types_1.ModuleOptionsEnum.ACTRules] });
command.addOption(actRuleIncludeOption);
command.addOption(actRuleExcludeOption);
command.addOption(actRuleLevelOption);
command.addOption(actRulePrincipleOption);
return command;
}
//# sourceMappingURL=actRules.js.map