UNPKG

@sketch-hq/sketch-assistant-utils

Version:

Utility functions and types for Sketch Assistants.

75 lines (74 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getIgnoredObjectIdsForRule = exports.isRuleFullIgnored = exports.pruneObjects = exports.pruneRules = exports.pruneAssistants = exports.prunePages = void 0; const assistant_1 = require("../../assistant/"); /** * Prune ignored pages that are no longer present in a SketchFile. */ const prunePages = (ignore, file) => { const ids = file.contents.document.pages.map((page) => page.do_objectID); return Object.assign(Object.assign({}, ignore), { pages: ignore.pages.filter((id) => ids.includes(id)) }); }; exports.prunePages = prunePages; /** * Prune ignore directives that relate to Assistants not present in an AssistantPackageMap. */ const pruneAssistants = (ignore, assistants) => (Object.assign(Object.assign({}, ignore), { assistants: Object.keys(ignore.assistants) .filter((assistantName) => assistantName in assistants) .reduce((acc, assistantName) => (Object.assign(Object.assign({}, acc), { [assistantName]: ignore.assistants[assistantName] })), {}) })); exports.pruneAssistants = pruneAssistants; /** * Prune ignored rules not present in an Assistant Definition. */ const pruneRules = (ignore, assistant) => { if (!(assistant.name in ignore.assistants)) return ignore; return Object.assign(Object.assign({}, ignore), { assistants: Object.assign(Object.assign({}, ignore.assistants), { [assistant.name]: Object.assign(Object.assign({}, ignore.assistants[assistant.name]), { rules: Object.keys(ignore.assistants[assistant.name].rules) .filter((ruleName) => !!assistant_1.getRuleDefinition(assistant, ruleName)) .reduce((rules, ruleName) => (Object.assign(Object.assign({}, rules), { [ruleName]: ignore.assistants[assistant.name].rules[ruleName] })), {}) }) }) }); }; exports.pruneRules = pruneRules; /** * Prune ignored objects not present in a ProcessedSketchFile. */ const pruneObjects = (ignore, processedFile) => (Object.assign(Object.assign({}, ignore), { assistants: Object.keys(ignore.assistants).reduce((assistants, assistantName) => (Object.assign(Object.assign({}, assistants), { [assistantName]: Object.assign(Object.assign({}, ignore.assistants[assistantName]), { rules: Object.keys(ignore.assistants[assistantName].rules).reduce((rules, ruleName) => { const ruleIgnore = ignore.assistants[assistantName].rules[ruleName]; return Object.assign(Object.assign({}, rules), { [ruleName]: 'objects' in ruleIgnore ? Object.assign(Object.assign({}, ruleIgnore), { objects: ruleIgnore.objects.filter((id) => processedFile.objectIds.has(id)) }) : ruleIgnore }); }, {}) }) })), {}) })); exports.pruneObjects = pruneObjects; /** * Determine whether a given rule is full ignored, according to a IgnoreConfig. Full ignored means * it both has an entry, and has been set to { allObjects: true }. */ const isRuleFullIgnored = (ignore, assistantName, ruleName) => { if (!(assistantName in ignore.assistants)) return false; if (!(ruleName in ignore.assistants[assistantName].rules)) return false; const ruleIgnore = ignore.assistants[assistantName].rules[ruleName]; if ('allObjects' in ruleIgnore) { return !!ruleIgnore.allObjects; } else { return false; } }; exports.isRuleFullIgnored = isRuleFullIgnored; /** * Return the set of ignored objects for a rule. */ const getIgnoredObjectIdsForRule = (ignore, assistantName, ruleName) => { if (!(assistantName in ignore.assistants)) return []; if (!(ruleName in ignore.assistants[assistantName].rules)) return []; const ignoreState = ignore.assistants[assistantName].rules[ruleName]; if ('objects' in ignoreState) { return ignoreState.objects; } else { return []; } }; exports.getIgnoredObjectIdsForRule = getIgnoredObjectIdsForRule;