| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | /** * @fileoverview Config file operations. This file must be usable in the browser, * so no Node-specific code can be here. * @author Nicholas C. Zakas *///------------------------------------------------------------------------------// Private//------------------------------------------------------------------------------const RULE_SEVERITY_STRINGS = ["off", "warn", "error"],    RULE_SEVERITY = RULE_SEVERITY_STRINGS.reduce((map, value, index) => {        map[value] = index;        return map;    }, {}),    VALID_SEVERITIES = [0, 1, 2, "off", "warn", "error"];//------------------------------------------------------------------------------// Public Interface//------------------------------------------------------------------------------/** * Normalizes the severity value of a rule's configuration to a number * @param {(number|string|[number, ...*]|[string, ...*])} ruleConfig A rule's configuration value, generally * received from the user. A valid config value is either 0, 1, 2, the string "off" (treated the same as 0), * the string "warn" (treated the same as 1), the string "error" (treated the same as 2), or an array * whose first element is one of the above values. Strings are matched case-insensitively. * @returns {(0|1|2)} The numeric severity value if the config value was valid, otherwise 0. */function getRuleSeverity(ruleConfig) {    const severityValue = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;    if (severityValue === 0 || severityValue === 1 || severityValue === 2) {        return severityValue;    }    if (typeof severityValue === "string") {        return RULE_SEVERITY[severityValue.toLowerCase()] || 0;    }    return 0;}/** * Converts old-style severity settings (0, 1, 2) into new-style * severity settings (off, warn, error) for all rules. Assumption is that severity * values have already been validated as correct. * @param {Object} config The config object to normalize. * @returns {void} */function normalizeToStrings(config) {    if (config.rules) {        Object.keys(config.rules).forEach(ruleId => {            const ruleConfig = config.rules[ruleId];            if (typeof ruleConfig === "number") {                config.rules[ruleId] = RULE_SEVERITY_STRINGS[ruleConfig] || RULE_SEVERITY_STRINGS[0];            } else if (Array.isArray(ruleConfig) && typeof ruleConfig[0] === "number") {                ruleConfig[0] = RULE_SEVERITY_STRINGS[ruleConfig[0]] || RULE_SEVERITY_STRINGS[0];            }        });    }}/** * Determines if the severity for the given rule configuration represents an error. * @param {int|string|Array} ruleConfig The configuration for an individual rule. * @returns {boolean} True if the rule represents an error, false if not. */function isErrorSeverity(ruleConfig) {    return getRuleSeverity(ruleConfig) === 2;}/** * Checks whether a given config has valid severity or not. * @param {number|string|Array} ruleConfig The configuration for an individual rule. * @returns {boolean} `true` if the configuration has valid severity. */function isValidSeverity(ruleConfig) {    let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;    if (typeof severity === "string") {        severity = severity.toLowerCase();    }    return VALID_SEVERITIES.indexOf(severity) !== -1;}/** * Checks whether every rule of a given config has valid severity or not. * @param {Object} config The configuration for rules. * @returns {boolean} `true` if the configuration has valid severity. */function isEverySeverityValid(config) {    return Object.keys(config).every(ruleId => isValidSeverity(config[ruleId]));}/** * Normalizes a value for a global in a config * @param {(boolean|string|null)} configuredValue The value given for a global in configuration or in * a global directive comment * @returns {("readable"|"writeable"|"off")} The value normalized as a string * @throws Error if global value is invalid */function normalizeConfigGlobal(configuredValue) {    switch (configuredValue) {        case "off":            return "off";        case true:        case "true":        case "writeable":        case "writable":            return "writable";        case null:        case false:        case "false":        case "readable":        case "readonly":            return "readonly";        default:            throw new Error(`'${configuredValue}' is not a valid configuration for a global (use 'readonly', 'writable', or 'off')`);    }}export {    getRuleSeverity,    normalizeToStrings,    isErrorSeverity,    isValidSeverity,    isEverySeverityValid,    normalizeConfigGlobal};
 |