@reformer/builder-plugin-api 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +206 -0
  3. package/dist/index.d.ts +147 -0
  4. package/dist/index.js +76 -0
  5. package/dist/internal.d.ts +78 -0
  6. package/dist/internal.js +289 -0
  7. package/dist/permissions-BWlsUVPs.js +551 -0
  8. package/dist/plugin/bundled-modules.d.ts +25 -0
  9. package/dist/plugin/layout.d.ts +27 -0
  10. package/dist/plugin/manifest-parser.d.ts +54 -0
  11. package/dist/plugin/manifest.d.ts +320 -0
  12. package/dist/plugin/messages-bundle.d.ts +24 -0
  13. package/dist/plugin/permissions.d.ts +48 -0
  14. package/dist/plugin/plugin-exports.d.ts +10 -0
  15. package/dist/plugin/runtime-modules.d.ts +20 -0
  16. package/dist/plugin/storage.d.ts +70 -0
  17. package/dist/plugin/types.d.ts +136 -0
  18. package/dist/primitives/capability.d.ts +72 -0
  19. package/dist/primitives/command.d.ts +262 -0
  20. package/dist/primitives/disposable.d.ts +23 -0
  21. package/dist/primitives/event.d.ts +38 -0
  22. package/dist/primitives/extension-point.d.ts +53 -0
  23. package/dist/primitives/module-path.d.ts +21 -0
  24. package/dist/primitives/resource.d.ts +159 -0
  25. package/dist/primitives/semver.d.ts +93 -0
  26. package/dist/primitives/service.d.ts +68 -0
  27. package/dist/primitives/when-context.d.ts +69 -0
  28. package/dist/primitives/when-expr.d.ts +177 -0
  29. package/dist/resource-clipboard-Bdk_Is5N.js +381 -0
  30. package/dist/runtime-modules-CiUDFMIn.js +597 -0
  31. package/dist/services/context-keys.d.ts +52 -0
  32. package/dist/services/diagnostics/fixes.d.ts +40 -0
  33. package/dist/services/diagnostics/service.d.ts +34 -0
  34. package/dist/services/diagnostics/types.d.ts +148 -0
  35. package/dist/services/document-models.d.ts +20 -0
  36. package/dist/services/documents.d.ts +94 -0
  37. package/dist/services/host-messages.d.ts +10 -0
  38. package/dist/services/i18n.d.ts +43 -0
  39. package/dist/services/modules.d.ts +49 -0
  40. package/dist/services/notifications.d.ts +56 -0
  41. package/dist/services/plugin-settings.d.ts +10 -0
  42. package/dist/services/plugins-catalog.d.ts +58 -0
  43. package/dist/services/preview.d.ts +163 -0
  44. package/dist/services/prompt.d.ts +111 -0
  45. package/dist/services/resource-clipboard.d.ts +28 -0
  46. package/dist/services/selection.d.ts +46 -0
  47. package/dist/services/settings.d.ts +44 -0
  48. package/dist/services/theme.d.ts +15 -0
  49. package/dist/services/validation/types.d.ts +98 -0
  50. package/dist/services/workspace-files.d.ts +84 -0
  51. package/dist/services/workspace-resources.d.ts +41 -0
  52. package/dist/services/workspace-save.d.ts +18 -0
  53. package/dist/tooling.d.ts +28 -0
  54. package/dist/tooling.js +35 -0
  55. package/dist/ui/contributions/decorations.d.ts +55 -0
  56. package/dist/ui/contributions/editors.d.ts +58 -0
  57. package/dist/ui/contributions/plugin-settings.d.ts +54 -0
  58. package/dist/ui/keyboard/keybinding-rules.d.ts +48 -0
  59. package/dist/ui/keyboard/keybindings.d.ts +55 -0
  60. package/dist/ui/keyboard/keymap.d.ts +81 -0
  61. package/dist/ui/keyboard/scope.d.ts +38 -0
  62. package/dist/ui/menu/editor-menu.d.ts +25 -0
  63. package/dist/ui/menu/menu.d.ts +228 -0
  64. package/dist/ui/menu/palette.d.ts +36 -0
  65. package/dist/ui/menu/resource-menu.d.ts +45 -0
  66. package/dist/ui/slots.d.ts +113 -0
  67. package/dist/ui/useActiveDocument.d.ts +5 -0
  68. package/dist/ui/useLocale.d.ts +9 -0
  69. package/dist/ui/useTranslate.d.ts +4 -0
  70. package/dist/workspace/document.d.ts +42 -0
  71. package/dist/workspace/model/editor-view-states.d.ts +29 -0
  72. package/dist/workspace/model/model-document.d.ts +86 -0
  73. package/dist/workspace/model/provider.d.ts +140 -0
  74. package/dist/workspace/model/text-editor-focus.d.ts +22 -0
  75. package/dist/workspace/resource-names.d.ts +92 -0
  76. package/dist/workspace/write-options.d.ts +36 -0
  77. package/package.json +69 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Alexandr Bukhtatyy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,206 @@
1
+ # @reformer/builder-plugin-api
2
+
3
+ Контракт плагина ReFormer Builder: всё, что плагин видит от платформы, и ничего сверх.
4
+
5
+ ```bash
6
+ npm install --save-dev @reformer/builder-plugin-api
7
+ ```
8
+
9
+ ## Зачем отдельный пакет
10
+
11
+ Плагин каталога проекта компилируется **не в билдере**: у него свой `tsconfig`, своя сборка
12
+ и свой CI. Пока контракт жил исходниками приложения, компилировать плагин было не против чего,
13
+ а «скопируйте типы себе» означало вторую копию, расходящуюся с первой молча.
14
+
15
+ Версия пакета независима от версии билдера: она описывает КОНТРАКТ, а не приложение. Мажор
16
+ растёт тогда, когда из контракта что-то уходит или меняет смысл, — и ровно это диапазон
17
+ `apiVersion` в манифесте плагина и проверяет.
18
+
19
+ ## Зависимость только на сборку
20
+
21
+ В рантайме плагин получает **объект оболочки**, а не код этого пакета: загрузчик занимает
22
+ спецификатор `@reformer/builder-plugin-api` тем же экземпляром, которым пользуется сама
23
+ оболочка. Второй экземпляр означал бы плагин, регистрирующий вклады в чужой пустой реестр —
24
+ без отказа и без исключения, просто не появившаяся панель. Поэтому пакет ставится
25
+ в `devDependencies`, а сборка плагина держит его во внешних.
26
+
27
+ ## Что здесь есть
28
+
29
+ Плоский список в `src/index.ts` — и он плоский намеренно: так ЦЕНА платформы для плагина видна
30
+ в diff'е одного файла, а не растворяется в сотне импортов. Сюда попадает только то, чем плагин
31
+ пользуется по факту, а не «на будущее».
32
+
33
+ Чего здесь нет и не будет: реестров, рабочей области, хранилищ, самой оболочки. Доступ к ним
34
+ плагин получает через `PluginContext` — то есть по правилам, а не по импорту.
35
+
36
+ ## `./internal`
37
+
38
+ Второй вход — платформенные примитивы целиком, для оболочки билдера. Обещаний совместимости
39
+ у него нет: он существует, чтобы оболочка пользовалась ТЕМИ ЖЕ модулями, а не своей копией.
40
+ Плагину он не нужен, и то, что попало только туда, контрактом не является.
41
+
42
+ ## Имена в рантайме
43
+
44
+ Оболочка занимает ОДНИМ объектом два спецификатора: `@reformer/builder-plugin-api` — имя, под которым
45
+ контракт опубликован и против которого плагин компилируется, и `@builder/sdk` — прежнее имя,
46
+ оставленное, пока по нему написаны плагины. Подменить ни одно из них плагин не может.
47
+
48
+ Встроенные плагины билдера импортируют этот же пакет, и линтер билдера запрещает им что-либо ещё
49
+ из платформы — в том числе вход `./internal`. Второй поверхности «для своих» нет: всё, что нужно
50
+ встроенному, обязано быть здесь, иначе этого нет и у внешнего.
51
+
52
+ ## Версия
53
+
54
+ Версия пакета описывает КОНТРАКТ и независима от версии билдера. Манифест плагина объявляет
55
+ диапазон полем `apiVersion` (`"^1"`), и оболочка сверяет его со своим `BUILDER_API_VERSION` до
56
+ загрузки кода: минор растёт на добавление имени, мажор — на удаление или смену смысла. Политики
57
+ совместимости между мажорами нет — при расхождении плагин не грузится и объясняет почему.
58
+
59
+ Поля `compatibility.builder` (диапазон версий самого приложения) нет. Проверять его нечем:
60
+ версии в рантайме у билдера нет, а поле, которое ничего не принуждает, создавало бы ложное
61
+ ощущение проверки.
62
+
63
+ ## Права
64
+
65
+ `permissions` в манифесте — ключ к службе, которую оболочка отдаёт не всем, а не объявление
66
+ намерений. Сегодня право одно, `workspace.save`, и за ним стоит `WorkspaceSaveServiceToken` —
67
+ сохранение в источник, единственная операция, выносящая написанное наружу.
68
+
69
+ ```json
70
+ { "permissions": ["workspace.save"] }
71
+ ```
72
+
73
+ Плагину без подтверждённого права службы не видно: `ctx.services.get` отвечает `undefined`,
74
+ `require` отказывает, а занять её слот самому нельзя. Спрашивают человека при включении плагина;
75
+ подтверждение живёт в настройках проекта. Список прав закрыт и растёт по одному имени на одну
76
+ такую службу: право, за которым не заперта дверь, было бы тем самым ложным ощущением границы,
77
+ из-за которого поля `permissions` не было вовсе.
78
+
79
+ ## Контракт редактора
80
+
81
+ Редактор — вклад в `EditorPoint`. Три обязанности, без которых он ломает соседей молча.
82
+
83
+ **Фокус.** Текстовый редактор ОБЯЗАН писать в реестр фокуса (`TextEditorFocusToken`):
84
+ `setFocused(id, true)` при получении фокуса полем документа и `setFocused(id, false)` при потере.
85
+ Рабочая область откладывает перерисовку буфера из модели, пока человек печатает; редактор,
86
+ не пишущий в реестр, получает буфер, переписанный под руками, — набранное просто исчезает.
87
+
88
+ **`flush` — после снятия фокуса, не до.** Потеряв фокус, редактор просит рабочую область догнать
89
+ буфер моделью: `documents.flush(id)`. Порядок несущий: `flush` сам спрашивает реестр фокуса и при
90
+ живом фокусе отложит перерисовку снова, так что вызов до `setFocused(id, false)` оставит буфер
91
+ отставшим до следующего повода.
92
+
93
+ **Стабильное тело.** `Body` — это ОДНА ссылка на компонент на всё время жизни вклада, а не функция,
94
+ создающая компонент при каждом обращении. React сравнивает тип элемента по ссылке: новая ссылка —
95
+ размонтирование и монтирование заново, то есть потерянные прокрутка, каретка и состояние движка
96
+ на каждой перерисовке родителя. Если тело нужно соседям (режим «рядом» у другого редактора),
97
+ его отдают возможностью, а не собирают второй раз.
98
+
99
+ Состояние вида (прокрутка, свёрнутые ветки, каретка) — через `viewState` вклада или хранилище
100
+ снимков `EditorViewStatesToken`, адресованное документом. Выделение туда не входит: оно часть
101
+ модели правки и живёт в снимке отмены.
102
+
103
+ **Отмена модельного документа — обязанность редактора стека.** История живёт в ручке модели
104
+ (`ModelDocumentHandle.undo/redo/canUndo/canRedo`), а клавиши `mod+z`/`mod+shift+z` вносит редактор
105
+ того стека, чей документ, с условием по виду документа: `activeResourceKind == <provider-id>`.
106
+ Оболочка своих команд отмены не заводит: у текстового документа своя отмена у Monaco, у каждого
107
+ стека — свой вид документа, и условие по нему делает сочетания стеков непересекающимися. Образцы —
108
+ `plugins/editor-schema` (`form.schema`) и `plugins/plain` (`plain.form`).
109
+
110
+ ## Контракт словаря
111
+
112
+ Словарь плагина приходит полем `ctx.i18n` и живёт в ЕГО пространстве имён: `panel.title` двух
113
+ плагинов — две разные строки. Пространство имён — отдельное измерение, а не префикс в ключе,
114
+ поэтому ключ `sub.title` плагина `acme` не пересекается с ключом `title` плагина `acme.sub`.
115
+
116
+ - **Внести:** `ctx.i18n.contribute(locale, messages)` в `activate`, или декларативно — полем
117
+ манифеста `contributes.messages: { "ru": "locales/ru.json" }`. Повторный вклад той же локали
118
+ дополняет словарь; сообщение, которое не разбирается, отвергает весь вызов с именем ключа.
119
+ - **Показать в React:** `useTranslate(ctx.i18n)` — хук подписывает компонент на смену языка;
120
+ голый `t` отвечает, как строка звучит СЕЙЧАС, и панель осталась бы на прежнем языке.
121
+ - **Промах виден:** в разработке отсутствующий ключ показывается маркером `⟦id.key⟧`, в сборке
122
+ откатывается на `en`. Тихого возврата самого ключа нет никогда.
123
+ - **Не переводится здесь** текст диагностик: одна ошибка обязана выглядеть одинаково в редакторе,
124
+ в панели проблем и в логе, поэтому находка несёт код и параметры, а переводит тот, кто показывает.
125
+ Голый код переводит словарь оболочки (`errors.<code>`). Свои коды плагин помечает владельцем —
126
+ `pluginDiagnosticCode(pluginId, code)` даёт `<plugin-id>:<code>`, — и такой код переводится
127
+ по ключу `errors.<code>` ЕГО словарём: стек, пришедший плагином, в словарь оболочки не пишет.
128
+
129
+ Заголовки команд (`titleKey`) и панелей разрешаются словарём ВНЁСШЕГО плагина — реестр проставляет
130
+ владельца сам, и чужим словарём заголовок не разрешится даже по ошибке.
131
+
132
+ ## Превью: поверхности и живой вид
133
+
134
+ Поверхности превью вносят плагины РАЗНЫХ стеков: стек ReFormer рисует схему `@reformer/renderer-json`,
135
+ другой стек — свой формат. Поэтому точка `PreviewSurfacePoint` и её контракт — здесь. Модель
136
+ документа в контракте `unknown`: поверхность берётся за документ по `DocumentRef.providerId` —
137
+ провайдеру модели, который его разобрал, — и сама сужает модель своей проверкой. Обязанности
138
+ поверхности:
139
+
140
+ - **`applies(doc)`** — синхронно и дёшево, по адресу, виду и провайдеру модели; `.json` бывает
141
+ схемой любого стека, поэтому медиатипа недостаточно;
142
+ - **хит-тест** — узлы формы размечены классом с префиксом `rbnode-` (`[class*="rbnode-"]`),
143
+ и поверхность сообщает о щелчке `select(ids)` теми же адресами (`$nodeId`), что у редактора;
144
+ - **`keepValues`** — перед пересборкой и при размонтировании поверхность САМА отдаёт введённые
145
+ значения на хранение: только она знает, когда её модель ещё жива;
146
+ - **`publishForm`** — живой объект собранной формы для наблюдателей (панель модели); необязателен;
147
+ - **`report(source, problems)`** — находки сборки, список ЗАМЕЩАЕТСЯ целиком по имени поверхности;
148
+ - **`title()`** — имя, УЖЕ переведённое словарём внёсшего плагина; нет — показывают `id`.
149
+
150
+ Живой вид — возможность `PreviewLiveCapability` (`reformer.preview.live`), провайдер — плагин
151
+ превью. Им редактор ЛЮБОГО стека показывает документ: служба выбирает поверхность общим правилом
152
+ и монтирует её в элемент редактора, а `formOf` отдаёт опубликованную форму наблюдателю. Превью
153
+ выключаемо, поэтому возможность спрашивают в момент вопроса, а не при активации.
154
+
155
+ ## Модель документа и механизмы оболочки
156
+
157
+ Редактор модели — плагин стека, и всё, что ему нужно от оболочки, он берёт возможностями:
158
+
159
+ | Возможность | Что даёт |
160
+ | -------------------------------------------------------- | ------------------------------------------------------------------------------- |
161
+ | `DocumentModelsCapability` (`reformer.workspace.models`) | `handleOf(id)` — ручка модельного документа: модель, правка операциями, история |
162
+ | `WorkspaceFilesCapability` (`reformer.workspace.files`) | соседи, чтение, адресация; `executesCode(id)` и `onDidChange` — с версии 1.1 |
163
+ | `ModuleLoaderCapability` (`reformer.modules`) | загрузчик модулей с прогретым компилятором — исполнить код рабочей копии |
164
+ | `HostMessagesCapability` (`reformer.host.messages`) | словарь оболочки на чтение: перевести код чужой находки |
165
+
166
+ Ручка отдаёт модель как `unknown`: оболочка держит провайдеров разом несколько и ни одной модели
167
+ не знает. Плагин сверяет `handle.document.providerId` со своим провайдером и только тогда сужает
168
+ тип — иначе редактор получил бы модель другого стека под своим типом. Провайдер модели
169
+ (`DocumentModelPoint`) вправе ответить `nodePaths(model)` — где в тексте лежит каждый узел; этим
170
+ текстовый редактор подчёркивает находку на узле, у которого в тексте нет своего идентификатора.
171
+
172
+ ## `./tooling` — для инструментов автора плагина
173
+
174
+ Сборщику, валидатору и упаковщику плагина нужно то, что обязано совпадать с оболочкой
175
+ буквально, — поэтому оно живёт здесь, а не копируется в инструмент:
176
+
177
+ - **разбор манифеста** (`parsePluginManifest`) — тот же, которым оболочка решает, грузить ли
178
+ плагин. Два разбора разошлись бы на первой же правке правил, и валидатор пропускал бы то,
179
+ что оболочка отвергнет;
180
+ - **модули рантайма** (`PLUGIN_RUNTIME_MODULES`) — спецификаторы, которые оболочка подставляет
181
+ своими объектами; сборка плагина обязана держать их внешними. Билдер тестом сверяет с этим
182
+ списком свой реестр модулей;
183
+ - **вкладываемые пакеты** (`PLUGIN_BUNDLED_PACKAGES`, `isBundledPluginModule`) — пакеты стеков
184
+ (`@reformer/builder-toolkit`, `@reformer/builder-stack-*`), которые сборка кладёт в `main.js`
185
+ плагина сама: оболочка стека не знает и их не подставляет, а второй экземпляр чистых функций
186
+ без синглтонов безвреден. Что эти пакеты берут из рантайма, остаётся внешним; что берут
187
+ из `@reformer/*` вне списка (глубокие импорты `@reformer/mcp` у стека ReFormer), вкладывается
188
+ вместе с ними. Тот же импорт из кода самого плагина — по-прежнему отказ `module-unavailable`;
189
+ - **нормализация пути модуля** (`normalizeModulePath`) — та же, которой линковщик ищет точку
190
+ входа: выход за каталог плагина — данные отказа, а не исключение;
191
+ - **раскладка каталога и словари** (`PLUGIN_CATALOG_DIR`, `PLUGIN_FILE_LIMIT`,
192
+ `isPluginCodeFile`, `parseMessagesBundle`) — потолок файлов, расширения кода и форма
193
+ `locales/*.json`, по которым загрузчик оболочки отказывает плагину;
194
+ - **узнавание плагина в экспортах** (`pluginFromExports`) — то же, что у загрузчика: сборка
195
+ проверяет им собранный `main.js`, чтобы не выпустить то, что оболочка отвергнет с `not-a-plugin`;
196
+ - **манифест исходников** (`parsePluginSourceManifest`) — тот же разбор для репозитория автора
197
+ до сборки. Отличий два: имя каталога с `id` не сверяется, `version` обязательна.
198
+
199
+ Пользуется этим входом `@reformer/builder-plugin-cli` (`reformer-plugin`).
200
+
201
+ В отличие от `./internal`, это контракт и версионируется вместе с пакетом. Типы манифеста
202
+ (`PluginManifest`, `ProjectPluginManifest`, `BuiltinPluginManifest`) отдаются этим же входом.
203
+
204
+ ## Лицензия
205
+
206
+ MIT
@@ -0,0 +1,147 @@
1
+ /**
2
+ * `@reformer/builder-plugin-api` — вся поверхность платформы, видимая плагину ReFormer Builder.
3
+ *
4
+ * Это буквально тот объект, который оболочка подставит плагину каталога проекта: встроенный
5
+ * плагин импортирует его как обычный пакет, внешний получит ТО ЖЕ САМОЕ через линковщик
6
+ * (слот занят самим пакетом), и разойтись они не смогут, потому что источник один.
7
+ *
8
+ * ## Правило состава
9
+ *
10
+ * Сюда попадает **только то, чем плагин пользуется**, и попадает по факту, а не «на будущее».
11
+ * Модуль этим и ценен: он делает видимой ЦЕНУ платформы для плагина, и любое расширение
12
+ * поверхности видно в diff'е ОДНОГО файла, а не растворяется в сотне импортов по всему
13
+ * `plugins/`. Поэтому файл и остаётся плоским списком: делить его на `primitives/ui/services`
14
+ * значило бы разменять единственное свойство, ради которого он существует.
15
+ *
16
+ * Отсюда же следует, чего здесь нет и не будет: реестров, рабочей области, хранилищ, оболочки.
17
+ * Плагин получает доступ к ним через `PluginContext` — то есть по правилам, а не по импорту.
18
+ *
19
+ * ## Почему это отдельный пакет, а не каталог в билдере
20
+ *
21
+ * Плагин каталога проекта компилируется НЕ в билдере: у него свой `tsconfig`, своя сборка
22
+ * и свой CI. Компилировать его не против чего, пока контракт живёт исходниками приложения,
23
+ * — а «скопируйте типы себе» означает вторую копию, расходящуюся с первой молча. Версия
24
+ * пакета при этом независима от версии билдера: она описывает КОНТРАКТ, а не приложение,
25
+ * и мажор у неё растёт тогда, когда из контракта что-то уходит.
26
+ *
27
+ * ## Что здесь значения, а не только типы
28
+ *
29
+ * Значения бывают ровно четырёх родов, и каждый обязан быть значением:
30
+ *
31
+ * - **точки расширения** — вклад вносится ПО НИМ, и реестр берёт из них `id`, которым ключует
32
+ * вклады; реэкспорт, а не переобъявление, нужен ради единого источника имени и параметра
33
+ * типа: разъехавшись по типу вклада, копия сузила бы чужую точку под себя;
34
+ * - **токены служб** — токен и есть ключ реестра, а не описание ключа;
35
+ * - **объявители** (`definePlugin`, `defineService`, `defineCapability`) — проверка и вывод
36
+ * типов в месте объявления;
37
+ * - **чистые функции и константы** без состояния — вторая их реализация в плагине разошлась бы
38
+ * с платформенной, а состояния они не несут, поэтому копия ничем не лучше.
39
+ *
40
+ * Ни одно из них не тянет платформу в бандл плагина: это либо стираемые типы, либо мелкие
41
+ * листовые модули.
42
+ *
43
+ * ## Встроенные плагины пользуются тем же входом
44
+ *
45
+ * Встроенный плагин билдера импортирует этот пакет ровно так же, как внешний, — и линтер
46
+ * билдера запрещает ему что-либо ещё из платформы. Второй поверхности для «своих» нет:
47
+ * всё, что нужно встроенному, обязано быть здесь, иначе этого нет и у внешнего.
48
+ *
49
+ * @module @reformer/builder-plugin-api
50
+ */
51
+ export { definePlugin } from './plugin/types.js';
52
+ export type { Plugin, PluginContext } from './plugin/types.js';
53
+ export { useTranslate } from './ui/useTranslate.js';
54
+ export type { Translate } from './ui/useTranslate.js';
55
+ export type { PluginI18n } from './services/i18n.js';
56
+ export { pluginMessageKey, splitMessageKey } from './services/i18n.js';
57
+ export type { Disposable } from './primitives/disposable.js';
58
+ export type { ResourceId, ResourceRef } from './primitives/resource.js';
59
+ export { validateResourceName, splitName } from './workspace/resource-names.js';
60
+ export type { NameRejection } from './workspace/resource-names.js';
61
+ export type { Diagnostic, DiagnosticSeverity, DiagnosticTarget, NodePart, QuickFix, TextRange, } from './services/diagnostics/types.js';
62
+ export { usableFixes, withUsableFixes } from './services/diagnostics/fixes.js';
63
+ export type { CommandLookup, FixesOptions } from './services/diagnostics/fixes.js';
64
+ export { ValidatorPoint } from './services/validation/types.js';
65
+ export type { DocumentRef, ValidateContext, ValidatorContribution, } from './services/validation/types.js';
66
+ export type { DocumentKind } from './workspace/document.js';
67
+ export { PanelPoint } from './ui/slots.js';
68
+ export type { PanelContribution, SlotId } from './ui/slots.js';
69
+ export { EditorPoint } from './ui/contributions/editors.js';
70
+ export type { EditorContribution } from './ui/contributions/editors.js';
71
+ export type { EditorProbe } from './workspace/model/provider.js';
72
+ export { ResourceDecorationPoint } from './ui/contributions/decorations.js';
73
+ export type { Decoration, ResourceDecorationContribution } from './ui/contributions/decorations.js';
74
+ export { PaletteItemsPoint } from './ui/menu/palette.js';
75
+ export type { PaletteItem, PaletteItemProvider } from './ui/menu/palette.js';
76
+ export { CatalogPluginSettingsPoint } from './ui/contributions/plugin-settings.js';
77
+ export type { CatalogPluginSettingsContribution } from './ui/contributions/plugin-settings.js';
78
+ export { pluginSettingsKey } from './services/plugin-settings.js';
79
+ export type { CommandContribution } from './primitives/command.js';
80
+ export type { WhenContext, FocusTarget } from './primitives/when-context.js';
81
+ export { parseWhen, compileWhen, evaluateWhen, WHEN_TRUE } from './primitives/when-expr.js';
82
+ export type { WhenExpr, WhenNode, WhenParseError, WhenParseResult, } from './primitives/when-expr.js';
83
+ export { ScopeStackServiceToken, DIALOG_SCOPE } from './ui/keyboard/scope.js';
84
+ export type { ScopeId, ScopeStack } from './ui/keyboard/scope.js';
85
+ export { chordOfCommand, KeymapServiceToken } from './ui/keyboard/keymap.js';
86
+ export type { KeymapService } from './ui/keyboard/keymap.js';
87
+ export type { KeybindingIndex, KeybindingLayer, KeybindingRule, } from './ui/keyboard/keybinding-rules.js';
88
+ export { detectPlatformModifier, formatChord, formatKeybinding, } from './ui/keyboard/keybindings.js';
89
+ export type { PlatformModifier } from './ui/keyboard/keybindings.js';
90
+ export { MAX_CHORD_STEPS, normalizeChord, normalizeKeybinding } from './primitives/command.js';
91
+ export { ContextKeyServiceToken } from './services/context-keys.js';
92
+ export type { ContextKey, ContextKeyReader, ContextKeyService, ContextKeySnapshot, } from './services/context-keys.js';
93
+ export { defineService } from './primitives/service.js';
94
+ export type { ServiceToken, ServiceRegistry } from './primitives/service.js';
95
+ export { defineCapability } from './primitives/capability.js';
96
+ export type { Capability, CapabilityAccess, CapabilityDeclaration, CapabilityProvider, CapabilityRequirement, } from './primitives/capability.js';
97
+ export { SettingsServiceToken } from './services/settings.js';
98
+ export type { SettingsService } from './services/settings.js';
99
+ export { ThemeServiceToken } from './services/theme.js';
100
+ export type { ThemeService, ThemePreference } from './services/theme.js';
101
+ export { NotificationsServiceToken } from './services/notifications.js';
102
+ export type { NotificationsService } from './services/notifications.js';
103
+ export { DiagnosticsServiceToken } from './services/diagnostics/service.js';
104
+ export type { DiagnosticsService } from './services/diagnostics/service.js';
105
+ export { DocumentsServiceToken } from './services/documents.js';
106
+ export { WorkspaceFilesServiceToken, WorkspaceFilesCapability, } from './services/workspace-files.js';
107
+ export type { WorkspaceFilesService } from './services/workspace-files.js';
108
+ export { PluginsCatalogServiceToken, PluginsCatalogCapability, } from './services/plugins-catalog.js';
109
+ export type { ManagedPlugin, ManagedPluginState, PluginsCatalogService, } from './services/plugins-catalog.js';
110
+ export { WorkspaceResourcesServiceToken, WorkspaceResourcesCapability, } from './services/workspace-resources.js';
111
+ export type { WorkspaceResourcesService, WorkspaceBatchResult, } from './services/workspace-resources.js';
112
+ export { WorkspaceSaveServiceToken, WorkspaceSaveCapability } from './services/workspace-save.js';
113
+ export type { WorkspaceSaveService } from './services/workspace-save.js';
114
+ export { PLUGIN_PERMISSIONS } from './plugin/permissions.js';
115
+ export type { PluginPermission } from './plugin/permissions.js';
116
+ export { useActiveDocument } from './ui/useActiveDocument.js';
117
+ export type { DocumentsService, OpenDocumentOptions } from './services/documents.js';
118
+ export type { Document } from './workspace/document.js';
119
+ export type { WriteOptions } from './workspace/write-options.js';
120
+ export { TextEditorFocusToken } from './workspace/model/text-editor-focus.js';
121
+ export type { TextEditorFocusRegistry } from './workspace/model/text-editor-focus.js';
122
+ export { EditorViewStatesToken } from './workspace/model/editor-view-states.js';
123
+ export type { EditorViewStates, EditorViewStateSlice, } from './workspace/model/editor-view-states.js';
124
+ export { SelectionServiceToken } from './services/selection.js';
125
+ export type { SelectionService } from './services/selection.js';
126
+ export { PreviewSurfacePoint, PreviewLiveCapability } from './services/preview.js';
127
+ export type { LiveSurfaceContext, LiveSurfaceInfo, PreviewCapabilities, PreviewContext, PreviewFormHandle, PreviewLiveService, PreviewMock, PreviewProblem, PreviewProblemPhase, PreviewSurface, PreviewValues, } from './services/preview.js';
128
+ export { DocumentModelPoint } from './workspace/model/provider.js';
129
+ export type { DocumentModelProvider, EditOp, ApplyResult, NodeId, JsonSchemaHint, TextStringSite, TextCompletion, } from './workspace/model/provider.js';
130
+ export { DocumentModelsCapability } from './services/document-models.js';
131
+ export type { DocumentModelsService } from './services/document-models.js';
132
+ export type { ApplyOptions, ApplyOutcome, ApplyRejection, DocumentSyncState, ModelChange, ModelChangeReason, ModelDocument, ModelDocumentHandle, ParseFailure, } from './workspace/model/model-document.js';
133
+ export { ModuleLoaderCapability } from './services/modules.js';
134
+ export type { ModuleGraph, ModuleLoadProblem, ModuleLoaderService, PrimedCompile, } from './services/modules.js';
135
+ export { HostMessagesCapability } from './services/host-messages.js';
136
+ export type { HostMessagesService } from './services/host-messages.js';
137
+ export { SEVERITY_RANK, pluginDiagnosticCode, splitDiagnosticCode, } from './services/diagnostics/types.js';
138
+ export { MenuPoint, MENU_ROOT_IDS, CONTEXT_MENU_IDS } from './ui/menu/menu.js';
139
+ export type { ContextMenuId, MenuContribution, MenuDynamicContribution, MenuDynamicItem, MenuItemContribution, MenuPath, MenuRootContribution, MenuRootId, MenuSubmenuContribution, MenuTarget, } from './ui/menu/menu.js';
140
+ export { RESOURCE_CONTEXT_MENU, argsOfResource, asResourceTarget, selectedIds, whenResource, } from './ui/menu/resource-menu.js';
141
+ export type { ResourceMenuTarget } from './ui/menu/resource-menu.js';
142
+ export { EDITOR_TITLE_MENU, argsOfEditor, whenEditor } from './ui/menu/editor-menu.js';
143
+ export type { EditorMenuTarget } from './ui/menu/editor-menu.js';
144
+ export { PromptServiceToken } from './services/prompt.js';
145
+ export type { PromptPickItem, PromptPickRequest, PromptService } from './services/prompt.js';
146
+ export { ResourceClipboardServiceToken } from './services/resource-clipboard.js';
147
+ export type { ClipboardMode, ClipboardState, ResourceClipboardService, } from './services/resource-clipboard.js';
package/dist/index.js ADDED
@@ -0,0 +1,76 @@
1
+ import { $ as s, C as i, j as o, D as t, n, L as r, M as c, o as l, a5 as S, E as T, G as p, Q as d, K as u, _ as g, Z as k, O as v, N as C, c as P, P as E, t as m, r as R, J as y, I as M, a8 as b, a0 as f, a9 as _, R as D, U as N, S as O, H as I, m as W, F as h, T as K, V as U, q as w, W as x, y as F, x as L, A, z as H, a6 as V, a1 as X, a2 as z, f as G, l as Y, d as j, k as q, g as B, h as J, i as Q, X as Z, p as $, e as ee, a3 as ae, Y as se, s as ie, a as oe, b as te, B as ne, u as re, v as ce, a7 as le, a4 as Se, w as Te } from "./resource-clipboard-Bdk_Is5N.js";
2
+ import { M as de, P as ue, W as ge, c as ke, e as ve, n as Ce, a as Pe, p as Ee } from "./permissions-BWlsUVPs.js";
3
+ export {
4
+ s as CONTEXT_MENU_IDS,
5
+ i as CatalogPluginSettingsPoint,
6
+ o as ContextKeyServiceToken,
7
+ t as DIALOG_SCOPE,
8
+ n as DiagnosticsServiceToken,
9
+ r as DocumentModelPoint,
10
+ c as DocumentModelsCapability,
11
+ l as DocumentsServiceToken,
12
+ S as EDITOR_TITLE_MENU,
13
+ T as EditorPoint,
14
+ p as EditorViewStatesToken,
15
+ d as HostMessagesCapability,
16
+ u as KeymapServiceToken,
17
+ de as MAX_CHORD_STEPS,
18
+ g as MENU_ROOT_IDS,
19
+ k as MenuPoint,
20
+ v as ModuleLoaderCapability,
21
+ C as NotificationsServiceToken,
22
+ ue as PLUGIN_PERMISSIONS,
23
+ P as PaletteItemsPoint,
24
+ E as PanelPoint,
25
+ m as PluginsCatalogCapability,
26
+ R as PluginsCatalogServiceToken,
27
+ y as PreviewLiveCapability,
28
+ M as PreviewSurfacePoint,
29
+ b as PromptServiceToken,
30
+ f as RESOURCE_CONTEXT_MENU,
31
+ _ as ResourceClipboardServiceToken,
32
+ D as ResourceDecorationPoint,
33
+ N as SEVERITY_RANK,
34
+ O as ScopeStackServiceToken,
35
+ I as SelectionServiceToken,
36
+ W as SettingsServiceToken,
37
+ h as TextEditorFocusToken,
38
+ K as ThemeServiceToken,
39
+ U as ValidatorPoint,
40
+ ge as WHEN_TRUE,
41
+ w as WorkspaceFilesCapability,
42
+ x as WorkspaceFilesServiceToken,
43
+ F as WorkspaceResourcesCapability,
44
+ L as WorkspaceResourcesServiceToken,
45
+ A as WorkspaceSaveCapability,
46
+ H as WorkspaceSaveServiceToken,
47
+ V as argsOfEditor,
48
+ X as argsOfResource,
49
+ z as asResourceTarget,
50
+ G as chordOfCommand,
51
+ ke as compileWhen,
52
+ Y as defineCapability,
53
+ j as definePlugin,
54
+ q as defineService,
55
+ B as detectPlatformModifier,
56
+ ve as evaluateWhen,
57
+ J as formatChord,
58
+ Q as formatKeybinding,
59
+ Ce as normalizeChord,
60
+ Pe as normalizeKeybinding,
61
+ Ee as parseWhen,
62
+ Z as pluginDiagnosticCode,
63
+ $ as pluginMessageKey,
64
+ ee as pluginSettingsKey,
65
+ ae as selectedIds,
66
+ se as splitDiagnosticCode,
67
+ ie as splitMessageKey,
68
+ oe as splitName,
69
+ te as usableFixes,
70
+ ne as useActiveDocument,
71
+ re as useTranslate,
72
+ ce as validateResourceName,
73
+ le as whenEditor,
74
+ Se as whenResource,
75
+ Te as withUsableFixes
76
+ };
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Платформенные примитивы ЦЕЛИКОМ — вход для оболочки билдера, а не для плагина.
3
+ *
4
+ * Контрактом плагина остаётся `.` (см. `./index`), и он обязан оставаться КУРИРОВАННЫМ:
5
+ * попади сюда путевая арифметика, `toDisposable` и генератор неповторяющихся имён, свойство
6
+ * «цена платформы для плагина видна в одном файле» перестало бы что-либо значить. Но модули
7
+ * от этого не делятся надвое: `makeResourceId` живёт там же, где `ResourceId`, потому что
8
+ * это его конструктор, и растащить их значило бы завести два места для одного понятия.
9
+ *
10
+ * Отсюда второй вход. Обещаний совместимости у него нет: он существует ради того, чтобы
11
+ * оболочка билдера пользовалась ТЕМИ ЖЕ модулями, а не своей копией, и меняется вместе с ней.
12
+ *
13
+ * @module @reformer/builder-plugin-api/internal
14
+ */
15
+ export * from './plugin/layout.js';
16
+ export * from './plugin/manifest.js';
17
+ export * from './plugin/manifest-parser.js';
18
+ export * from './plugin/messages-bundle.js';
19
+ export * from './plugin/permissions.js';
20
+ export * from './plugin/plugin-exports.js';
21
+ export * from './plugin/runtime-modules.js';
22
+ export * from './plugin/storage.js';
23
+ export * from './plugin/types.js';
24
+ export * from './primitives/capability.js';
25
+ export * from './primitives/command.js';
26
+ export * from './primitives/disposable.js';
27
+ export * from './primitives/event.js';
28
+ export * from './primitives/extension-point.js';
29
+ export * from './primitives/module-path.js';
30
+ export * from './primitives/resource.js';
31
+ export * from './primitives/semver.js';
32
+ export * from './primitives/service.js';
33
+ export * from './primitives/when-context.js';
34
+ export * from './primitives/when-expr.js';
35
+ export * from './services/context-keys.js';
36
+ export * from './services/diagnostics/fixes.js';
37
+ export * from './services/diagnostics/service.js';
38
+ export * from './services/diagnostics/types.js';
39
+ export * from './services/documents.js';
40
+ export * from './services/i18n.js';
41
+ export * from './services/notifications.js';
42
+ export * from './services/plugin-settings.js';
43
+ export * from './services/prompt.js';
44
+ export * from './services/resource-clipboard.js';
45
+ export * from './services/selection.js';
46
+ export * from './services/settings.js';
47
+ export * from './services/theme.js';
48
+ export * from './services/validation/types.js';
49
+ export * from './services/workspace-files.js';
50
+ export * from './services/plugins-catalog.js';
51
+ export * from './services/workspace-resources.js';
52
+ export * from './services/workspace-save.js';
53
+ export * from './services/preview.js';
54
+ export * from './services/document-models.js';
55
+ export * from './services/modules.js';
56
+ export * from './services/host-messages.js';
57
+ export * from './ui/contributions/decorations.js';
58
+ export * from './ui/contributions/editors.js';
59
+ export * from './ui/contributions/plugin-settings.js';
60
+ export * from './ui/keyboard/keybinding-rules.js';
61
+ export * from './ui/keyboard/keybindings.js';
62
+ export * from './ui/keyboard/keymap.js';
63
+ export * from './ui/keyboard/scope.js';
64
+ export * from './ui/menu/editor-menu.js';
65
+ export * from './ui/menu/menu.js';
66
+ export * from './ui/menu/palette.js';
67
+ export * from './ui/menu/resource-menu.js';
68
+ export * from './ui/slots.js';
69
+ export * from './ui/useActiveDocument.js';
70
+ export * from './ui/useLocale.js';
71
+ export * from './ui/useTranslate.js';
72
+ export * from './workspace/document.js';
73
+ export * from './workspace/model/editor-view-states.js';
74
+ export * from './workspace/model/provider.js';
75
+ export * from './workspace/model/model-document.js';
76
+ export * from './workspace/model/text-editor-focus.js';
77
+ export * from './workspace/resource-names.js';
78
+ export * from './workspace/write-options.js';