UNPKG

gplint

Version:

A Gherkin linter/validator written in Javascript.

48 lines 2.4 kB
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