Редактор сценариев, созданный с помощью Monaco и поддерживающий взаимодействие с платформой 1C:Предприятие 8.3.14+ (рекомендуется 8.3.18+).
Собрано для Vanessa Automation.
Лицензия — BSD 3-Clause, см. LICENSE.
src/— исходники редактора: интеграция с Monaco, провайдер и воркер Gherkin, оформление, публичный API;test/— тесты (mocha) и демо-примеры сценариев;example/— внешние обработки-примеры, которые встраивают редактор;tools/— сборка и проверки: скрипты oscript, плагины и загрузчики webpack, локальный прогон;config/— тестовая конфигурация 1С для автотестов.
Для npm run compile и npm run decompile дополнительно нужен OneScript
(команда oscript в PATH).
Требуется Node.js 20+ (см. engines в package.json). Зависимости ставятся по lock-файлу:
npm ci
Для запуска отладки в браузере (на встроенном сервере для разработки) выполните команду
npm run demo
Для сборки финального файла ./dist/index.html, встраиваемого в проект выполните команду
npm run build
Кроме редактора есть страница автотестов dist/test.html (mocha + демо-примеры). Она нужна
только для прогона тестов, поэтому в обычную сборку не входит — собирается отдельно:
npm run build:test
Быстрый прогон без 1С — сборка и headless-браузер, результат в консоль:
npm run test:headless
Полный локальный прогон (сборка, упаковка макетов, чистая база, сборка epf, автотест) — тот же сценарий, что выполняет CI:
check.cmd
Скрипт сам находит установленную платформу; другой каталог с 1cv8.exe передаётся вторым
аргументом: check.cmd autotest "<каталог платформы>". Напрямую то же делает
tools/local-check.ps1 (первым параметром — каталог платформы). Успех — файл success.txt
в корне проекта. Скрипт сам закрывает зависшие процессы 1С, создаёт базу с уникальным именем
и показывает логи Конфигуратора.
Автотест запускается клиентом 1С с внешней обработкой (/Execute <путь к epf> и /C autotest).
Платформа перед этим показывает диалог «Разрешить открывать данный файл?», и неинтерактивный
прогон (в том числе в CI) висит на нём до таймаута. В CI предупреждение снимается настройкой
платформы; при локальном прогоне tools/local-check.ps1 подтверждает диалог сам через
UI Automation — но только при активной сессии Windows: ввод в заблокированный рабочий стол
недоступен.
dist/index.html получается самодостаточным: скрипты, стили и бандлы воркеров (Gherkin и
четыре монко́вских) встроены внутрь страницы, внешних файлов нет. Это требование движков,
встраиваемых в 1С: страница открывается по file://, а ресурсы по этому протоколу не
загружаются. Асинхронные чанки (ленивые import() из monaco) тоже встраиваются в страницу и
исполняются до основного бандла, поэтому файлов чанков в dist не остаётся.
Продакшн-сборка проверяется на совместимость с движком, встроенным в 1С: бандл разбирается
парсером как ES2020, отдельно запрещены ?? и ?., плюс проверяется отсутствие не-ASCII
символов в коде. Если что-то не так, сборка падает с указанием места. Проверка живёт в
tools/plugins/checkRuntimeCompat.js.
Ошибки времени выполнения дублируются красным баннером внизу страницы (src/error-reporting.ts):
консоль встроенного движка пользователю недоступна, а пустое место вместо редактора ничего
не объясняет.
Оформление подстраивается под интерфейс платформы: в новом интерфейсе 1С передаёт в страницу
палитру цветов и класс темы, редактор определяет по ним вариант интерфейса и тему
(src/ui-interface.ts) и ставит data-interface и data-theme на body. Скин «Версия 8.5»
в src/media/tabs.css берёт цвета из палитры платформы, поэтому светлая и тёмная темы
переключаются сами, без участия редактора. Для отладки в браузере и для обработок, которые
решают это сами, параметры URL interface=taxi|85 и theme=light|dark имеют приоритет. Без
палитры и без параметров остаётся историческое оформление «Такси»: его цвета заданы
литералами, потому что старый движок не понимает CSS-переменные. Тёмная тема «Такси»
платформой не поддерживается — она включается только вручную через EditorTheme.
Версия сборки доступна из страницы (window.VAEditorVersion) и лежит рядом с ней в
dist/version.json, который пакуется в макет редактора вместе с index.html. Обработка,
встраивающая редактор, читает её из архива шаблона и использует как ключ кеша распакованных
файлов — держать версию константой в своём коде ей больше не нужно. В CI значение берётся из
version.json (там ещё и номер сборки), локально — из package.json.
Для сборки примера внешней обработки из исходников в epf файл (необходим oscrip) выполните команду
npm run compile
Для разборки примера внешней обработки из epf в исходники (необходим oscript) выполните команду
npm run decompile
Для запуска статанализа проверки стиля кода
npm run codestyle
Доступны три режима работы:
- Простой редактор кода в одном окне
- Редактор для сравнение двух файлов
- Многооконный интерфейс с вкладками
По умолчанию открывается пустая страница без редакторов. Для начала работы при помощи глобального метода необходимо создать экземпляр объекта, соответствующий выбранному режиму.
Смотрите пример использования во внешней обработке Example.
Полный машиночитаемый контракт публичного API с JSDoc для каждого метода — в
src/types/public-api.d.ts. TS/JS-интеграторы получают autocomplete и проверку типов в IDE автоматически.
VanessaGherkinProvider - экземпляр класса, реализующего поддержку языка Gherkin и обеспечивающий его конфигурирование.
VanessaEditor - экземпляр редактора, если используется модель одного окна.
VanessaDiffEditor - экземпляр редактора для сравнения двух файлов, если используется модель одного окна.
VanessaTabs - объект для управления множеством редакторов, с вкладками для переключения между ними.
createVanessaTabs() - создать многооконный интерфейс для управления множеством редакторов.
createVanessaEditor(content, language) - создать простой редактор с одним окном для редактирования кода.
createVanessaDiffEditor(original, modified, language) - создать простой редактор для сравнения двух файлов.
Для управления редактором кода из 1С:Предприятия вы можете вызывать методы-действия объекта редактора, полученного из HTML-документа расположенного на форме. Самые часто используемые:
setTheme(theme)— установить тему (vs,vs-dark,hc-black)setContent(text)— загрузить контент в модель редактораgetContent()— получить текст из моделиrevealLine(lineNumber)— прокрутить редактор до строки
Полный список (53 метода с JSDoc-описанием) — в public-api.d.ts → интерфейс IPublicVanessaEditor.
Пример:
view = Items.VanessaEditor.Document.defaultView;
VanessaEditor = view.createVanessaEditor("", "turbo-gherkin");
VanessaEditor.setContent("Text to edit");Посмотреть все доступные действия можно в списке действий в Example.
Редактор отправляет события, которые могут быть обработаны на стороне 1С:Предприятия. Примеры:
UPDATE_BREAKPOINTS— обновлено состояние брейкпоинтовON_HREF_CLICK— клик по ссылке
Полный enum (9 встроенных событий) — в public-api.d.ts → VanessaEditorEventName. Дополнительно можно регистрировать кастомные события через VanessaEditor.addCommands.
Пример:
Function VanessaEditorOnReceiveEventHandler(Event, Arg)
If Event = "UPDATE_BREAKPOINTS" Then
UpdateBreakpoints(Arg);
EndIf;
EndFunctionОтслеживать события можно в логе событий в Example.
В большинстве случаев обмен редактора и 1С:Предприятия осуществляется с помощью сообщений в json формате. Для быстрой сериализации и десериализации объектов 1С:Предприятия в json формат Вы можете воспользоваться функциями:
&AtClient
Function JsonDump(Value)
JSONWriter = New JSONWriter;
JSONWriter.SetString();
WriteJSON(JSONWriter, Value);
Return JSONWriter.Close();
EndFunction
&AtClient
Function JsonLoad(Json)
JSONReader = New JSONReader;
JSONReader.SetString(Json);
Value = ReadJSON(JSONReader);
JSONReader.Close();
Return Value;
EndFunction- Ключевые слова верхнего уровня делят файл на секции и сворачиваются сами по себе, независимо от наличия отступов.
- Комментарии которые идут подряд сворачиваются к первой строке комментариев тоже независимо от отступов. Пустая строка прерывает группу комментариев.
- Параметры шага, строки начинающиеся с символа "|" сворачиваются к своей строке шага. Если внутри комментарии, то они сворачиваются независимо, сами в себя.
- Инструкции, которые начинаются с собаки "@", группируются внутри себя.
- Всё остальное сворачивается внутри секций по числу пробелов и табуляторов.