UNPKG

@sketch-hq/sketch-assistant-utils

Version:

Utility functions and types for Sketch Assistants.

130 lines (129 loc) 6.43 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.testAssistant = exports.testRuleInAssistant = exports.testRule = exports.createAssistantDefinition = exports.createAssistant = exports.createAssistantConfig = exports.createDummySwatch = exports.createDummyRect = exports.createRule = void 0; const sketch_assistant_types_1 = require("@sketch-hq/sketch-assistant-types"); const sketch_file_1 = require("@sketch-hq/sketch-file"); const assistant_1 = require("../assistant"); const get_image_metadata_1 = require("../get-image-metadata"); const process_1 = require("../process"); const run_assistant_1 = require("../run/run-assistant"); /** * Create a dummy rule definition. */ const createRule = ({ title, description, rule, getOptions, name, debug, runtime, } = {}) => ({ name: name !== null && name !== void 0 ? name : 'dummy-assistant/dummy-rule', title: title !== null && title !== void 0 ? title : 'Dummy Rule', description: description !== null && description !== void 0 ? description : 'Dummy rule created in a test helper', rule: rule || (() => __awaiter(void 0, void 0, void 0, function* () { })), getOptions, debug, runtime, }); exports.createRule = createRule; /** * Create a dummy assistant configuration. */ const createAssistantConfig = ({ rules, defaultSeverity, } = {}) => (Object.assign(Object.assign({}, (typeof defaultSeverity === 'undefined' ? {} : { defaultSeverity })), { rules: rules || {} })); exports.createAssistantConfig = createAssistantConfig; /** * Create a dummy assistant definition. */ const createAssistantDefinition = ({ name, config, rules, } = {}) => ({ name: name !== null && name !== void 0 ? name : 'dummy-assistant', config: config || createAssistantConfig(), rules: rules || [], }); exports.createAssistantDefinition = createAssistantDefinition; /** * Create a dummy assistant function. */ const createAssistant = ({ title, description, name, config, rules, } = {}) => () => __awaiter(void 0, void 0, void 0, function* () { return createAssistantDefinition({ title, description, name, config, rules }); }); exports.createAssistant = createAssistant; const createDummyRect = () => ({ _class: 'rect', constrainProportions: false, height: 10, width: 10, x: 0, y: 0, }); exports.createDummyRect = createDummyRect; const createDummySwatch = (id = '1') => ({ _class: 'swatch', do_objectID: id, name: 'dummy-swatch', value: { _class: 'color', alpha: 1, red: 1, blue: 1, green: 1, }, }); exports.createDummySwatch = createDummySwatch; /** * Test an Assistant. */ const testAssistant = (filepath, assistant, env = { locale: 'en', runtime: sketch_assistant_types_1.AssistantRuntime.Node }) => __awaiter(void 0, void 0, void 0, function* () { const file = yield sketch_file_1.fromFile(filepath); const op = { cancelled: false }; const processedFile = yield process_1.process(file, op); const def = yield assistant_1.prepare(assistant, env); const { violations, ruleErrors, grade } = yield run_assistant_1.runAssistant(processedFile, def, env, op, get_image_metadata_1.getImageMetadata, { pages: [], assistants: {} }, Infinity); return { violations, ruleErrors, grade }; }); exports.testAssistant = testAssistant; /** * Test a rule by running it against a custom config within the context of a * temporary Assistant. */ const testRule = (filepath, rule, ruleConfig = { active: true }, env = { locale: 'en', runtime: sketch_assistant_types_1.AssistantRuntime.Node }) => __awaiter(void 0, void 0, void 0, function* () { const file = yield sketch_file_1.fromFile(filepath); const op = { cancelled: false }; const processedFile = yield process_1.process(file, op); const assistant = () => __awaiter(void 0, void 0, void 0, function* () { return ({ name: 'test-assistant', rules: [rule], config: { rules: { [rule.name]: ruleConfig, }, }, }); }); const def = yield assistant_1.prepare(assistant, env); const { violations, ruleErrors, grade } = yield run_assistant_1.runAssistant(processedFile, def, env, op, get_image_metadata_1.getImageMetadata, { pages: [], assistants: {} }, Infinity); return { violations, ruleErrors, grade }; }); exports.testRule = testRule; /** * Test a rule in isolation within the context of an Assistant. Only the rule under test is * activated, so violations or rule errors from other rules are ignored. A custom rule config can * be supplied, but if omitted the config currently configured in the Assistant is used. */ const testRuleInAssistant = (filepath, assistant, ruleName, ruleConfig, env = { locale: 'en', runtime: sketch_assistant_types_1.AssistantRuntime.Node }) => __awaiter(void 0, void 0, void 0, function* () { const file = yield sketch_file_1.fromFile(filepath); const op = { cancelled: false }; const processedFile = yield process_1.process(file, op); const def = yield assistant_1.prepare(assistant, env); def.rules = def.rules.filter((rule) => rule.name === ruleName); if (!assistant_1.getRuleDefinition(def, ruleName)) { throw new Error(`Rule "${ruleName}" not found on Assistant "${def.name}"`); } def.config.rules = { [ruleName]: ruleConfig ? ruleConfig : def.config.rules[ruleName], }; const { violations, ruleErrors, grade } = yield run_assistant_1.runAssistant(processedFile, def, env, op, get_image_metadata_1.getImageMetadata, { pages: [], assistants: {} }, Infinity); return { violations, ruleErrors, grade }; }); exports.testRuleInAssistant = testRuleInAssistant;