Я написал плагин для 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