UNPKG

@sketch-hq/sketch-assistant-utils

Version:

Utility functions and types for Sketch Assistants.

76 lines (75 loc) 3.28 kB
"use strict"; 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;