Написать плагин для Adobe XD в PureScript - PullRequest
0 голосов
/ 14 марта 2020

Я написал плагин для Adobe XD простым JavaScript. Сейчас я пытаюсь переписать его на PureScript и не могу понять, как заставить компилятор выплевывать точный формат файла main.js, требуемый Adobe XD.

Проблема 1

Мой плагин имеет две команды: «заполнить» и «восстановить». Adobe XD ожидает, что файл main.js будет содержать экспорты со следующей структурой для работы плагина (обратите внимание на свойство commands):

exports.commands = {
    fill: fill,
    restore: restore
}

В Main.purs Я определяю экспорт следующим образом:

module Main (fill, restore) where

и скомпилируйте его следующим образом:

$ pulp build --skip-entry-point --to main.js

Что приводит к экспорту в main.js:

exports["fill"] = fill;
exports["restore"] = restore;

Это не будет работать как Adobe Плагин XD, потому что отсутствует свойство command.

Более того, даже когда я исправляю экспорты вручную, эти экспорты находятся в глобальном объекте $PS.Main, и Adobe XD не может найти их в глобальной области видимости. :

Plugin Error: No handler supplied for declared commandIds: fill, restore

Задача 2

При выполнении команды плагина Adobe XD вызывает функции fill(selection) и restore(selection), передавая активную выбор из текущего документа. fill и restore должны изменить выбранный объект на месте. Но в main.js, созданном из Main.purs, эти функции возвращают значение:

Main.purs

fill :: Selection -> Effect Selection
fill sel = pure sel
-- not implemented yet

restore :: Selection -> Effect Selection
restore sel = pure sel
-- not implemented yet

приводит к main.js (сокращенно)

(function($PS) {
  // Generated by purs version 0.13.6
  "use strict";
  $PS["Main"] = $PS["Main"] || {};
  var exports = $PS["Main"];
  var Control_Applicative = $PS["Control.Applicative"];
  var Effect = $PS["Effect"];
  var restore = function (sel) {
      return Control_Applicative.pure(Effect.applicativeEffect)(sel);
  };                                                      
  var fill = function (sel) {
      return Control_Applicative.pure(Effect.applicativeEffect)(sel);
  };
  exports["fill"] = fill;
  exports["restore"] = restore;
})(PS);

Я предполагал, что возвращаемый тип Effect Selection исправит это (создание у функции побочных эффектов вместо возврата объекта). Но я, вероятно, неправильно понял.

Как это поведение можно изменить?

Справочник по плагину Adobe XD

...