Permalink
Cannot retrieve contributors at this time
135 lines (116 sloc)
4.6 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@eslint/eslintrc/lib/shared/config-ops.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @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 | |
}; |