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