@sketch-hq/sketch-assistant-utils
Version:
Utility functions and types for Sketch Assistants.
76 lines (75 loc) • 3.28 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRuleTitle = exports.isRuleConfigValid = exports.getRuleSeverity = exports.isRuleActive = exports.isRuleConfigured = exports.getRuleOption = exports.getRuleConfig = void 0;
const ajv_1 = __importDefault(require("ajv"));
const sketch_assistant_types_1 = require("@sketch-hq/sketch-assistant-types");
const rule_option_schemas_1 = require("../rule-option-schemas");
/**
* Get rule configuration from an assistant config.
*/
const getRuleConfig = (config, ruleName) => config.rules[ruleName];
exports.getRuleConfig = getRuleConfig;
/**
* Determine if the rule has been mentioned in a given config.
*/
const isRuleConfigured = (config, ruleName) => !!getRuleConfig(config, ruleName);
exports.isRuleConfigured = isRuleConfigured;
/**
* Get the value of a specific rule option.
*/
const getRuleOption = (config, ruleName, optionKey) => {
const ruleConfig = getRuleConfig(config, ruleName);
return ruleConfig ? (optionKey in ruleConfig ? ruleConfig[optionKey] : null) : null;
};
exports.getRuleOption = getRuleOption;
/**
* Validate a rule's options in a config object according to the schema defined
* on the rule module.
*/
const isRuleConfigValid = (config, rule) => {
if (typeof rule.getOptions === 'undefined') {
// If the rule hasn't defined an options schema we can't validate it
return true;
}
const schema = rule_option_schemas_1.buildRuleOptionSchema(rule.getOptions(rule_option_schemas_1.helpers));
const ruleConfig = getRuleConfig(config, rule.name);
const ajv = new ajv_1.default();
ajv.validate(schema, ruleConfig);
return ajv.errors || true;
};
exports.isRuleConfigValid = isRuleConfigValid;
/**
* Determine if a rule is active. An active rule must both be mentioned in the
* config and have its `active` option set to `true`.
*/
const isRuleActive = (config, ruleName) => {
const active = getRuleOption(config, ruleName, sketch_assistant_types_1.ReservedRuleOptionNames.active);
return typeof active === 'boolean' ? active : false;
};
exports.isRuleActive = isRuleActive;
/**
* Determine a rule's severity, falling back to default values if not specified.
*/
const getRuleSeverity = (config, ruleName) => {
const severity = getRuleOption(config, ruleName, sketch_assistant_types_1.ReservedRuleOptionNames.severity);
switch (severity) {
case sketch_assistant_types_1.ViolationSeverity.info:
case sketch_assistant_types_1.ViolationSeverity.warn:
case sketch_assistant_types_1.ViolationSeverity.error:
return severity;
default:
return config.defaultSeverity || sketch_assistant_types_1.ViolationSeverity.error;
}
};
exports.getRuleSeverity = getRuleSeverity;
/**
* Return the custom title for a rule if its been defined at configuration-time.
*/
const getRuleTitle = (config, ruleName) => {
const ruleTitle = getRuleOption(config, ruleName, sketch_assistant_types_1.ReservedRuleOptionNames.ruleTitle);
return typeof ruleTitle === 'string' ? ruleTitle : null;
};
exports.getRuleTitle = getRuleTitle;