You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							130 lines
						
					
					
						
							4.8 KiB
						
					
					
				
			
		
		
	
	
							130 lines
						
					
					
						
							4.8 KiB
						
					
					
				/** | 
						|
 * @fileoverview Config file operations. This file must be usable in the browser, | 
						|
 * so no Node-specific code can be here. | 
						|
 * @author Nicholas C. Zakas | 
						|
 */ | 
						|
"use strict"; | 
						|
 | 
						|
//------------------------------------------------------------------------------ | 
						|
// 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 | 
						|
//------------------------------------------------------------------------------ | 
						|
 | 
						|
module.exports = { | 
						|
 | 
						|
    /** | 
						|
     * 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. | 
						|
     */ | 
						|
    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} | 
						|
     */ | 
						|
    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. | 
						|
     */ | 
						|
    isErrorSeverity(ruleConfig) { | 
						|
        return module.exports.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. | 
						|
     */ | 
						|
    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. | 
						|
     */ | 
						|
    isEverySeverityValid(config) { | 
						|
        return Object.keys(config).every(ruleId => this.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 | 
						|
     */ | 
						|
    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')`); | 
						|
        } | 
						|
    } | 
						|
};
 | 
						|
 |