@sketch-hq/sketch-assistant-utils
Version:
Utility functions and types for Sketch Assistants.
75 lines (74 loc) • 3.94 kB
JavaScript
;
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;