gplint
Version:
A Gherkin linter/validator written in Javascript.
48 lines • 2.4 kB
JavaScript
import * as rules from './rules.js';
export async function verifyConfigurationFile(config, additionalRulesDirs) {
const errors = [];
for (const rule in config) {
if (!(await rules.doesRuleExist(rule, additionalRulesDirs))) {
errors.push(`Rule "${rule}" does not exist`);
}
else {
await verifyRuleConfiguration(rule, config[rule], additionalRulesDirs, errors);
}
}
return errors;
}
async function verifyRuleConfiguration(rule, ruleConfig, additionalRulesDirs, errors) {
const enablingSettings = ['off', '0', 'warn', '1', 'error', 'on', '2'];
const genericErrorMsg = `Invalid rule configuration for "${rule}" -`;
if (Array.isArray(ruleConfig)) {
if (!enablingSettings.includes(ruleConfig[0])) {
errors.push(`${genericErrorMsg} The first part of the config should be ${enablingSettings.join('/')}.`);
}
if (ruleConfig.length !== 2) {
errors.push(`${genericErrorMsg} The config should only have 2 parts.`);
}
const ruleObj = await rules.getRule(rule, additionalRulesDirs);
let isValidSubConfig;
if (typeof (ruleConfig[1]) === 'string') {
isValidSubConfig = (_, subConfig) => (ruleObj?.availableConfigs).includes(subConfig);
await testSubconfig(genericErrorMsg, rule, ruleConfig[1], isValidSubConfig, additionalRulesDirs, errors);
}
else {
isValidSubConfig = (_, subConfig) => ruleObj?.availableConfigs != null
&& Object.hasOwn(ruleObj.availableConfigs, subConfig);
for (const subConfig in ruleConfig[1]) {
await testSubconfig(genericErrorMsg, rule, subConfig, isValidSubConfig, additionalRulesDirs, errors);
}
}
}
else if (ruleConfig != null && !enablingSettings.includes(ruleConfig.toString())) {
errors.push(`${genericErrorMsg} The config should be ${enablingSettings.join('/')}.`);
}
}
async function testSubconfig(genericErrorMsg, rule, subConfig, isValidSubConfig, additionalRulesDirs, errors) {
const ruleObj = await rules.getRule(rule, additionalRulesDirs);
if (!isValidSubConfig(ruleObj?.availableConfigs, subConfig)) {
errors.push(`${genericErrorMsg} The rule does not have the specified configuration option "${subConfig}"`);
}
}
//# sourceMappingURL=config-verifier.js.map