UNPKG

@sketch-hq/sketch-assistant-utils

Version:

Utility functions and types for Sketch Assistants.

197 lines (196 loc) 7.75 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 }); const test_helpers_1 = require("../../test-helpers"); const sketch_assistant_types_1 = require("@sketch-hq/sketch-assistant-types"); const __1 = require("../"); describe('assign', () => { test('names are merged right to left', () => { expect(__1.assign(test_helpers_1.createAssistantDefinition({ name: 'foo', }), test_helpers_1.createAssistantDefinition({ name: 'bar', })).name).toMatchInlineSnapshot(`"bar"`); }); test('do not overwrite with values that are the empty string', () => { expect(__1.assign(test_helpers_1.createAssistantDefinition({ title: 'foo', name: 'bar', description: 'baz', }), test_helpers_1.createAssistantDefinition({ title: '', name: '', description: '', }))).toMatchInlineSnapshot(` Object { "config": Object { "rules": Object {}, }, "name": "bar", "rules": Array [], } `); }); test('config is merged right to left', () => { expect(__1.assign(test_helpers_1.createAssistantDefinition({ config: { rules: { foo: { active: true }, }, }, }), test_helpers_1.createAssistantDefinition({ config: { rules: { foo: { active: false }, bar: { active: true }, }, }, })).config).toMatchInlineSnapshot(` Object { "rules": Object { "bar": Object { "active": true, }, "foo": Object { "active": false, }, }, } `); }); test('rule config is merged right to left', () => { expect(__1.assign(test_helpers_1.createAssistantDefinition({ config: { rules: { foo: { active: true, foo: 1, bar: 'hello world!' }, }, }, }), test_helpers_1.createAssistantDefinition({ config: { rules: { foo: { active: true, bar: 'hello everyone!' }, }, }, })).config).toMatchInlineSnapshot(` Object { "rules": Object { "foo": Object { "active": true, "bar": "hello everyone!", "foo": 1, }, }, } `); }); test('rules are concatenated', () => { expect(__1.assign(test_helpers_1.createAssistantDefinition({ rules: [test_helpers_1.createRule({ name: 'foo' })], }), test_helpers_1.createAssistantDefinition({ rules: [test_helpers_1.createRule({ name: 'bar' })], })).rules.map((rule) => rule.name)).toMatchInlineSnapshot(` Array [ "foo", "bar", ] `); }); }); describe('prepare', () => { const env = { locale: 'en', runtime: sketch_assistant_types_1.AssistantRuntime.Sketch, }; test('prepares a single assistant function', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare(test_helpers_1.createAssistant(), env); expect(assistant.name).toMatchInlineSnapshot(`"dummy-assistant"`); })); test('prepares and merges multiple assistant functions', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare([ test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'foo' })] }), test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'bar' })] }), ], env); expect(assistant.rules.map((rule) => rule.name)).toMatchInlineSnapshot(` Array [ "foo", "bar", ] `); })); test('prepares and merges nested assistant functions', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare([ test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'foo' })] }), [ test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'bar' })] }), test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'baz' })] }), ], test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'qux' })] }), ], env); expect(assistant.rules.map((rule) => rule.name)).toMatchInlineSnapshot(` Array [ "foo", "bar", "baz", "qux", ] `); })); test('assistants can init lazily and do work during preparation', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare(() => __awaiter(void 0, void 0, void 0, function* () { const def = test_helpers_1.createAssistantDefinition(); def.name = 'bar'; return def; }), env); expect(assistant.name).toMatchInlineSnapshot(`"bar"`); })); test('handles assistants containing ESM default exports', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare([ { __esModule: true, default: test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'foo' })] }) }, [ test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'bar' })] }), { __esModule: true, default: test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'baz' })] }) }, ], test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'qux' })] }), ], env); expect(assistant.rules.map((rule) => rule.name)).toMatchInlineSnapshot(` Array [ "foo", "bar", "baz", "qux", ] `); })); test('handles assistants themselves exported as ESM default exports', () => __awaiter(void 0, void 0, void 0, function* () { const assistant = yield __1.prepare({ __esModule: true, default: [ { __esModule: true, default: test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'foo' })] }) }, [ test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'bar' })] }), { __esModule: true, default: test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'baz' })] }), }, ], test_helpers_1.createAssistant({ rules: [test_helpers_1.createRule({ name: 'qux' })] }), ], }, env); expect(assistant.rules.map((rule) => rule.name)).toMatchInlineSnapshot(` Array [ "foo", "bar", "baz", "qux", ] `); })); });