@emailmaker/extensions-app 1.1.85-dev.7 → 1.1.88
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.
- package/README.md +9 -166
- package/externals.json +4 -4
- package/index.js +75 -105
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ npm install @emailmaker/emailmaker @emailmaker/extensions-app @emailmaker/extens
|
|
|
79
79
|
|
|
80
80
|
| Пакет | Назначение | Что экспортирует |
|
|
81
81
|
|-------|------------|------------------|
|
|
82
|
-
| `@emailmaker/emailmaker` | Основной пакет | `init()`, `
|
|
82
|
+
| `@emailmaker/emailmaker` | Основной пакет | `init()`, `prefetch()`, типы `IPlugin`, `Instance`; runtime React/Ant Design — subpath `@emailmaker/emailmaker/runtime/*` (отдельный npm не нужен) |
|
|
83
83
|
| `@emailmaker/extensions-app` | API для app-плагинов | `pluginRegistry`, `DomComponentRegistry`, `ElementsApi`, `SettingsPanelApi`, `ModalApi` |
|
|
84
84
|
| `@emailmaker/extensions-react` | React API для плагинов | `ComponentRegistry`, `createComponentIdentifier()` |
|
|
85
85
|
| `@emailmaker/extensions-sandbox` | API для sandbox-плагинов | `App`, `MessageService`, `SyncService` |
|
|
@@ -205,11 +205,6 @@ module.exports = {
|
|
|
205
205
|
- `встраиваемый bundle` -> `globals`
|
|
206
206
|
- `advanced` -> только если host уже требует async/globals контракт Webpack
|
|
207
207
|
|
|
208
|
-
`globals` читает зависимости из глобального реестра **синхронно**, когда выполняется скрипт
|
|
209
|
-
плагина. Хост готовит реестр сам, если грузит плагин по URL через `init()` или `useAsync()`; при
|
|
210
|
-
ручной вставке `<script>` дождитесь `preload()` — подробности в разделе
|
|
211
|
-
`Подключение плагина`.
|
|
212
|
-
|
|
213
208
|
Для `встраиваемый bundle` и `advanced` рекомендуемый runtime-контракт — descriptor вида `{ type: 'umd', url, name, resolve: 'registry' }`, где `name` совпадает с ключом из `PluginTypeMap`.
|
|
214
209
|
|
|
215
210
|
### Ручная настройка (без PluginDev)
|
|
@@ -217,16 +212,9 @@ module.exports = {
|
|
|
217
212
|
Нужна только для продвинутой интеграции или собственного бандлерного пайплайна. Основной сценарий для внешнего плагина — отдельный пакет с `PluginDev`.
|
|
218
213
|
|
|
219
214
|
- `resolve.alias`: `react` → `@emailmaker/emailmaker/runtime/react` (и т.д.) для `esm` / dev; локальные shared internals идут через compat facades runtime; UI-kit (`@emailmaker/ui-kit`) → **`@emailmaker/emailmaker/ui-kit`** (singleton bytes на main, не `runtime/@scope/ui-kit`)
|
|
220
|
-
- `externals`: `@emailmaker/emailmaker/runtime
|
|
215
|
+
- `externals`: `@emailmaker/emailmaker/runtime/core`, runtime npm-модули; ui-kit external → **`@emailmaker/emailmaker/ui-kit`** (глобальный ключ `UiKit` в `runtimeExports`, см. манифест)
|
|
221
216
|
- Список модулей: `@emailmaker/emailmaker/runtime/plugin-dev-manifest.json` → `runtimeModules`
|
|
222
217
|
|
|
223
|
-
**Иконки — особый случай.** Общим (singleton) обязан быть только класс
|
|
224
|
-
`@ant-design/icons/es/components/AntdIcon`: он вычисляет иконку, читая `IconContext`, и вторая его
|
|
225
|
-
копия сломает тему. Сам каталог из восьми с лишним сотен определений singleton'ом не является —
|
|
226
|
-
каждый потребитель берёт его себе и вытрясает неиспользуемое. Поэтому обычный
|
|
227
|
-
`import { UserOutlined } from '@ant-design/icons'` в плагине законен: в сборку попадут только взятые
|
|
228
|
-
иконки, а общая машинерия придёт из продукта. `PluginDev` разводит эти два случая сам.
|
|
229
|
-
|
|
230
218
|
Если release bundle неожиданно стал толстым или target `встраиваемый bundle` не загружается, начните с раздела `Troubleshooting`.
|
|
231
219
|
|
|
232
220
|
Типы для плагина всё равно собираются отдельно: CLI-шаблон запускает `build:types` и кладёт `dist/public-types.d.ts` рядом с JS bundle, поэтому TypeScript support сохраняется и для browser/advanced targets.
|
|
@@ -260,114 +248,6 @@ import { ComponentRegistry } from '@emailmaker/extensions-react';
|
|
|
260
248
|
> Обычно достаточно использовать готовый шаблон CLI и не настраивать alias/external вручную.
|
|
261
249
|
|
|
262
250
|
|
|
263
|
-
---
|
|
264
|
-
|
|
265
|
-
# Совместимость: как плагин встречается с редактором
|
|
266
|
-
|
|
267
|
-
Одна страница на вопрос «что с чем работает». Всё остальное в этом разделе — подробности.
|
|
268
|
-
|
|
269
|
-
## Главное правило
|
|
270
|
-
|
|
271
|
-
Плагин и редактор обязаны использовать **один экземпляр** React, antd и ui-kit. Не потому, что так
|
|
272
|
-
аккуратнее: компоненты плагина рисуются внутри дерева редактора, и если экземпляры разные, хуки
|
|
273
|
-
вызываются против чужого диспетчера. На странице это выглядит как
|
|
274
|
-
`Cannot read properties of null (reading 'useState')` — падает не панель плагина, а весь интерфейс.
|
|
275
|
-
|
|
276
|
-
Сводить их вручную не нужно: этим занимается `PluginDev` в сборке плагина.
|
|
277
|
-
|
|
278
|
-
## Формат плагина × способ подключения
|
|
279
|
-
|
|
280
|
-
| Формат плагина | Как подключается | Где берёт React, antd, ui-kit |
|
|
281
|
-
|---|---|---|
|
|
282
|
-
| **ESM** (npm-пакет, собирается вместе с хостом) | импортом: `plugins: [MyPlugin]` или `useAsync(() => import(…))` | `PluginDev` переписывает импорты на подпути продукта |
|
|
283
|
-
| **UMD / globals** (файл по URL) | `{ type: 'umd', url, name, resolve: 'registry' }` | из реестра `window.emailmaker.modules` на странице |
|
|
284
|
-
| ~~**ESM по URL**~~ | **не поддерживается** | — |
|
|
285
|
-
|
|
286
|
-
**Почему `{ type: 'esm', url }` не работает.** В собранном ESM-плагине остаются имена подпутей
|
|
287
|
-
продукта (`@emailmaker/emailmaker/runtime/*`). Браузеру разрешать их нечем: карту импортов
|
|
288
|
-
продукт не выдаёт. Плагин в формате ESM подключают как npm-пакет, собирая вместе с хостом.
|
|
289
|
-
|
|
290
|
-
## Что приходит из продукта, а что собирается в плагин
|
|
291
|
-
|
|
292
|
-
| Зависимость | Откуда берётся | Почему так |
|
|
293
|
-
|---|---|---|
|
|
294
|
-
| `react`, `react-dom` | из продукта (`@emailmaker/emailmaker/runtime/react`) | один диспетчер хуков на страницу |
|
|
295
|
-
| `antd` | из продукта | контексты темы и формы общие |
|
|
296
|
-
| `@emailmaker/ui-kit` | из продукта (`@emailmaker/emailmaker/ui-kit`) | общий `ThemeProvider`, стили вставляются один раз |
|
|
297
|
-
| `@ant-design/icons` — **класс `AntdIcon`** | из продукта | читает `IconContext`; вторая копия ломает тему |
|
|
298
|
-
| `@ant-design/icons` — **каталог иконок** | собирается в плагин | каждый берёт только те иконки, что использует |
|
|
299
|
-
| всё остальное | собирается в плагин | к общему состоянию отношения не имеет |
|
|
300
|
-
|
|
301
|
-
## Как проверить, что всё сошлось
|
|
302
|
-
|
|
303
|
-
Сборка хоста сама скажет, если в граф попала вторая копия React или ui-kit: плагин хоста
|
|
304
|
-
(Vite/webpack) печатает предупреждение с именем файла-виновника и обоими путями. Молчание на сборке
|
|
305
|
-
— признак того, что копии сведены.
|
|
306
|
-
|
|
307
|
-
Плагин **на глобалах** при этом ничего не импортирует и в графе не появляется: он берёт зависимости
|
|
308
|
-
из реестра уже на странице, и проверять там нечего.
|
|
309
|
-
|
|
310
|
-
## Вход редактора тоже участвует
|
|
311
|
-
|
|
312
|
-
Редактор подключают двумя способами, и не с каждым работает ESM-плагин:
|
|
313
|
-
|
|
314
|
-
| Вход редактора | ESM-плагин | Плагин на глобалах |
|
|
315
|
-
|---|---|---|
|
|
316
|
-
| **ESM** (собирается вместе с хостом) | да | да |
|
|
317
|
-
| **UMD** (`<script>` на странице) | **нет** | да |
|
|
318
|
-
|
|
319
|
-
**Почему UMD-вход и ESM-плагин не сходятся.** UMD-вход несёт React внутри себя и объявляет его на
|
|
320
|
-
странице сам. ESM-плагин собирает ваш сборщик, и подпуть `@emailmaker/emailmaker/runtime/react`
|
|
321
|
-
он разрешает в копию внутри пакета. Это два разных файла с двумя диспетчерами хуков — тот самый
|
|
322
|
-
`Cannot read properties of null (reading 'useState')`, падающий вместе со всем интерфейсом.
|
|
323
|
-
|
|
324
|
-
Сборка про это молчать обязана: UMD-редактор подключён скриптом и в граф сборки хоста не входит, а
|
|
325
|
-
в момент сборки плагина ещё неизвестно, какой вход выберет хост. Поэтому **редактор говорит сам** —
|
|
326
|
-
при инициализации он сверяет копии и, найдя вторую, пишет в консоль, что нашёл и как это чинить.
|
|
327
|
-
|
|
328
|
-
Чинится любым из двух способов: собрать плагин **на глобалах** — тогда он возьмёт React из реестра
|
|
329
|
-
`window.emailmaker.modules` на странице, — либо подключить **ESM-вход** редактора и
|
|
330
|
-
собрать оба одним сборщиком.
|
|
331
|
-
|
|
332
|
-
## Что бывает, если собрать плагин без `PluginDev`
|
|
333
|
-
|
|
334
|
-
Плагин соберётся, сборка хоста пройдёт — и редактор упадёт на странице. Ровно этот случай:
|
|
335
|
-
|
|
336
|
-
- в плагине остались `import 'react'` и `import '@emailmaker/ui-kit'` как есть;
|
|
337
|
-
- сборщик хоста разрешил их из `node_modules` проекта — это **вторые** копии;
|
|
338
|
-
- редактор при этом работает на своих, вендоренных.
|
|
339
|
-
|
|
340
|
-
Лечится добавлением `PluginDev` в конфигурацию сборки плагина (`externals: 'esm'`) либо сборкой
|
|
341
|
-
плагина на глобалах.
|
|
342
|
-
|
|
343
|
-
## Ваши настройки резолва редактора не касаются
|
|
344
|
-
|
|
345
|
-
Внутри пакета React адресуется **путём** к копии, которая лежит в нём же, а не именем `react`.
|
|
346
|
-
Следствий два, и оба в вашу пользу:
|
|
347
|
-
|
|
348
|
-
- `resolve.dedupe`, `resolve.alias`, `resolve.modules` и Module Federation `shared` работают у вас
|
|
349
|
-
так, как вы их написали. Мы не занимаем имя `react` и ничего у вас не перехватываем.
|
|
350
|
-
- Редактор не зависит от того, что вы с этим именем делаете: своя копия достаётся ему при любой
|
|
351
|
-
конфигурации сборки, в том числе если наш плагин у вас не подключён.
|
|
352
|
-
|
|
353
|
-
Одно исключение — `sharedReact` ниже: им вы просите обратного.
|
|
354
|
-
|
|
355
|
-
## Общий React (необязательно)
|
|
356
|
-
|
|
357
|
-
Плагин хоста умеет обратное: отдать редактору **ваш** React вместо вендоренного —
|
|
358
|
-
`VitePlugin({ sharedReact: true })` или `new WebpackPlugin({ sharedReact: true })`.
|
|
359
|
-
|
|
360
|
-
| | по умолчанию | `sharedReact: true` |
|
|
361
|
-
|---|---|---|
|
|
362
|
-
| React редактора | свой, внутри пакета | ваш |
|
|
363
|
-
| требования к вашему React | нет | мажорная версия 19 |
|
|
364
|
-
| Strict Mode и dev-сборка React | не касаются редактора | касаются |
|
|
365
|
-
| antd | свой, внутри пакета | свой, внутри пакета |
|
|
366
|
-
| вес поставки | как есть | меньше примерно на 98 КБ gzip |
|
|
367
|
-
|
|
368
|
-
Версия проверяется до сборки: несовпадение мажора будет названо в предупреждении.
|
|
369
|
-
|
|
370
|
-
|
|
371
251
|
---
|
|
372
252
|
|
|
373
253
|
## 📂 PublicPath
|
|
@@ -564,17 +444,12 @@ emailmaker.init({
|
|
|
564
444
|
```ts
|
|
565
445
|
emailmaker.init({
|
|
566
446
|
plugins: [
|
|
447
|
+
{ type: 'esm', url: 'https://cdn.example.com/my-plugin.js' },
|
|
567
448
|
{ type: 'umd', url: 'https://cdn.example.com/my-plugin.umd.js', name: 'MyPlugin', resolve: 'registry' },
|
|
568
449
|
]
|
|
569
450
|
});
|
|
570
451
|
```
|
|
571
452
|
|
|
572
|
-
> **По URL работает `umd` с `resolve: 'registry'`.** Вариант `{ type: 'esm', url }` в браузере не
|
|
573
|
-
> поддерживается: в собранном ESM-плагине остаются имена подпутей продукта
|
|
574
|
-
> (`@emailmaker/emailmaker/runtime/*`), а разрешить их браузеру нечем — карту импортов
|
|
575
|
-
> продукт не выдаёт. ESM-плагин подключают как npm-пакет: способами 1 и 2 выше, собирая его вместе
|
|
576
|
-
> с хостом.
|
|
577
|
-
|
|
578
453
|
| Параметр | Описание |
|
|
579
454
|
|----------|----------|
|
|
580
455
|
| `type` | `'esm'` — ESM модуль (`import()`), `'umd'` — UMD/IIFE (`<script>`) |
|
|
@@ -582,30 +457,6 @@ emailmaker.init({
|
|
|
582
457
|
| `name` | Для `resolve: 'registry'` — строковый ключ из `PluginTypeMap`; для legacy `umd`/`window` — ключ в `window` |
|
|
583
458
|
| `resolve` | Опционально. `'module'` (default ESM), `'window'` (legacy default UMD), `'registry'` |
|
|
584
459
|
|
|
585
|
-
#### Кто готовит runtime до запуска скрипта
|
|
586
|
-
|
|
587
|
-
Плагин, собранный под `globals` (targets `встраиваемый bundle` и `advanced`), читает
|
|
588
|
-
`window.__emailmaker__.modules.Antd` **синхронно** — в момент, когда выполняется его скрипт.
|
|
589
|
-
До этого момента в реестре лежат ожидания: часть runtime приезжает по требованию, чтобы первый
|
|
590
|
-
экран не платил за то, чем не пользуется.
|
|
591
|
-
|
|
592
|
-
Если плагин подключён через `init({ plugins: [...] })` или `useAsync(...)`, делать ничего не
|
|
593
|
-
нужно: хост сам дожидается готовности runtime перед тем, как выполнить скрипт. Тормозится только
|
|
594
|
-
загрузка такого плагина, остальное приложение работает своим ходом.
|
|
595
|
-
|
|
596
|
-
Если же вы вставляете `<script>` с плагином сами, мимо API — дождитесь `preload()`:
|
|
597
|
-
|
|
598
|
-
```ts
|
|
599
|
-
import { preload } from '@emailmaker/emailmaker';
|
|
600
|
-
|
|
601
|
-
await preload();
|
|
602
|
-
document.head.appendChild(Object.assign(document.createElement('script'), {
|
|
603
|
-
src: 'https://cdn.example.com/my-plugin.umd.js',
|
|
604
|
-
}));
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
Плагинов на `esm` это не касается: их импорты разрешает сборщик, ждать им нечего.
|
|
608
|
-
|
|
609
460
|
### 4. Регистрация по имени (связь между плагинами)
|
|
610
461
|
|
|
611
462
|
Если плагин A должен обращаться к плагину B через `editor.use('PluginB')` — используйте `pluginRegistry.add`:
|
|
@@ -653,6 +504,10 @@ const myPlugin = await this.editor.useAsync(
|
|
|
653
504
|
() => import('my-plugin').then(m => m.MyPlugin)
|
|
654
505
|
);
|
|
655
506
|
|
|
507
|
+
const myPlugin = await this.editor.useAsync(
|
|
508
|
+
{ type: 'esm', url: '/plugins/analytics.js' }
|
|
509
|
+
);
|
|
510
|
+
|
|
656
511
|
const myPluginByKey = await this.editor.useAsync(
|
|
657
512
|
{ type: 'umd', url: '/plugins/my-plugin.umd.js', name: 'MyPlugin', resolve: 'registry' }
|
|
658
513
|
);
|
|
@@ -1165,7 +1020,7 @@ settingsPanel.showSettingsPanel({
|
|
|
1165
1020
|
|
|
1166
1021
|
### `--dev` / `--dev-packages`
|
|
1167
1022
|
|
|
1168
|
-
**Самый частый флаг для разработки:**
|
|
1023
|
+
**Самый частый флаг для разработки:** подставляет **dev**-версии внутренних npm-пакетов (`@emailmaker-internal/*`), которые в шаблонах задаются с dist-tag `dev` вместо `latest`. Используйте, когда нужны свежие предрелизные сборки экосистемы.
|
|
1169
1024
|
|
|
1170
1025
|
```bash
|
|
1171
1026
|
npx @emailmaker/cli my-plugin --kind plugin --preset advanced --bundler vite --target npm-package --dev --output-dir ./my-plugin
|
|
@@ -1281,18 +1136,6 @@ npm run start:release
|
|
|
1281
1136
|
- что release bundle собран под target `встраиваемый bundle`
|
|
1282
1137
|
- что sandbox и main bundle публикуются по ожидаемым URL
|
|
1283
1138
|
|
|
1284
|
-
### Плагин на `globals` падает: вместо `antd` приходит объект с `then`
|
|
1285
|
-
|
|
1286
|
-
Значит скрипт плагина выполнился раньше, чем хост подготовил реестр runtime. Часть runtime
|
|
1287
|
-
приезжает по требованию, и до этого момента в `window.__emailmaker__.modules` лежат
|
|
1288
|
-
ожидания, а не значения.
|
|
1289
|
-
|
|
1290
|
-
Проверьте:
|
|
1291
|
-
|
|
1292
|
-
- плагин подключён через `init({ plugins: [{ type, url, ... }] })` или `useAsync(...)` — тогда
|
|
1293
|
-
хост дожидается готовности сам;
|
|
1294
|
-
- если `<script>` вставляете вы, перед вставкой вызван `await preload()`.
|
|
1295
|
-
|
|
1296
1139
|
### Duplicate React / hooks error
|
|
1297
1140
|
|
|
1298
1141
|
Почти всегда это значит, что React попал в bundle плагина вместо runtime externals.
|
|
@@ -1319,7 +1162,7 @@ npm run start:release
|
|
|
1319
1162
|
## ❓ FAQ / Типичные ошибки
|
|
1320
1163
|
|
|
1321
1164
|
- **«Invalid hook call» или два React на странице**
|
|
1322
|
-
> Для обычного плагина используйте стандартные импорты `react` / `antd` и собирайте проект через `PluginDev` с `alias: true` (по умолчанию). Не смешивайте обычные импорты с прямыми импортами из runtime в одном
|
|
1165
|
+
> Для обычного плагина используйте стандартные импорты `react` / `antd` и собирайте проект через `PluginDev` с `alias: true` (по умолчанию). Не смешивайте обычные импорты с прямыми импортами из runtime в одном plugin UI.
|
|
1323
1166
|
|
|
1324
1167
|
- **Externals не работают в dev server**
|
|
1325
1168
|
> В serve-режиме externals должны быть отключены: `PluginDev({ externals: false })`. Зависимости резолвятся из runtime через alias.
|
package/externals.json
CHANGED
|
@@ -23,10 +23,6 @@
|
|
|
23
23
|
"promise __emailmaker__.modules",
|
|
24
24
|
"Antd"
|
|
25
25
|
],
|
|
26
|
-
"@ant-design/icons/es/components/AntdIcon": [
|
|
27
|
-
"promise __emailmaker__.modules",
|
|
28
|
-
"AntDesignIconBase"
|
|
29
|
-
],
|
|
30
26
|
"@ant-design/icons": [
|
|
31
27
|
"promise __emailmaker__.modules",
|
|
32
28
|
"AntDesignIcons"
|
|
@@ -43,6 +39,10 @@
|
|
|
43
39
|
"promise __emailmaker__.modules",
|
|
44
40
|
"Dayjs"
|
|
45
41
|
],
|
|
42
|
+
"uuid": [
|
|
43
|
+
"promise __emailmaker__.modules",
|
|
44
|
+
"Uuid"
|
|
45
|
+
],
|
|
46
46
|
"@emailmaker/ui-kit": [
|
|
47
47
|
"promise __emailmaker__.modules",
|
|
48
48
|
"UiKit"
|
package/index.js
CHANGED
|
@@ -33,11 +33,7 @@ var e = class e {
|
|
|
33
33
|
function t(e) {
|
|
34
34
|
return `service_container_${e}`;
|
|
35
35
|
}
|
|
36
|
-
var n =
|
|
37
|
-
function r(e) {
|
|
38
|
-
n.delete(e);
|
|
39
|
-
}
|
|
40
|
-
var i = class i extends e {
|
|
36
|
+
var n = class n extends e {
|
|
41
37
|
_parent;
|
|
42
38
|
_injectCallbacks = [];
|
|
43
39
|
_injections = Object.create(null);
|
|
@@ -78,24 +74,7 @@ var i = class i extends e {
|
|
|
78
74
|
}
|
|
79
75
|
getInstanceAsync(e) {
|
|
80
76
|
let t = this._find(e);
|
|
81
|
-
return typeof t == "function" ? Promise.resolve(t()) : new Promise((t,
|
|
82
|
-
let a = {
|
|
83
|
-
id: String(e),
|
|
84
|
-
startedAt: Date.now(),
|
|
85
|
-
origin: void 0,
|
|
86
|
-
container: this,
|
|
87
|
-
reject: i
|
|
88
|
-
};
|
|
89
|
-
n.add(a), this._onInject(e, () => {
|
|
90
|
-
r(a), t(this.getInstance(e));
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
failPendingWaits(e) {
|
|
95
|
-
for (let t of Array.from(n)) t.container === this && (r(t), t.reject(e));
|
|
96
|
-
}
|
|
97
|
-
pendingWaits() {
|
|
98
|
-
return [...n].filter((e) => e.container === this);
|
|
77
|
+
return typeof t == "function" ? Promise.resolve(t()) : new Promise((t) => this._onInject(e, () => t(this.getInstance(e))));
|
|
99
78
|
}
|
|
100
79
|
addService(n, r) {
|
|
101
80
|
let i = t(n);
|
|
@@ -118,78 +97,70 @@ var i = class i extends e {
|
|
|
118
97
|
return [...this.getInstance(n, !1) || [], ...this._parent?.getServices(e) || []];
|
|
119
98
|
}
|
|
120
99
|
createChild() {
|
|
121
|
-
return new
|
|
100
|
+
return new n(this);
|
|
122
101
|
}
|
|
123
102
|
getOrCreateIsolatedContainer(e) {
|
|
124
103
|
return this.getOrCreateInstance(e, () => {
|
|
125
104
|
let t = this._parent?.getOrCreateIsolatedContainer(e);
|
|
126
|
-
return new
|
|
105
|
+
return new n(t);
|
|
127
106
|
});
|
|
128
107
|
}
|
|
129
|
-
remove(e) {
|
|
130
|
-
let t = this._injections;
|
|
131
|
-
delete t[String(e)];
|
|
132
|
-
}
|
|
133
|
-
injectListenerCount() {
|
|
134
|
-
return this._injectCallbacks.length;
|
|
135
|
-
}
|
|
136
108
|
dispose() {
|
|
137
|
-
|
|
138
|
-
this._injections = Object.create(null), this._injectCallbacks = [], super.dispose();
|
|
109
|
+
this._injections = Object.create(null);
|
|
139
110
|
}
|
|
140
111
|
};
|
|
141
112
|
//#endregion
|
|
142
113
|
//#region packages/runtime-core/di/namespace.ts
|
|
143
|
-
function
|
|
114
|
+
function r(e) {
|
|
144
115
|
return e.startsWith("__") ? e : `__${e}__`;
|
|
145
116
|
}
|
|
146
|
-
function
|
|
117
|
+
function i(e) {
|
|
147
118
|
if (typeof globalThis > "u") throw Error("[di] globalThis is required for namespace container access.");
|
|
148
|
-
let t =
|
|
119
|
+
let t = r(e), n = globalThis;
|
|
149
120
|
return n[t] ??= {};
|
|
150
121
|
}
|
|
151
122
|
//#endregion
|
|
152
123
|
//#region packages/runtime-core/di/ensureContainer.ts
|
|
153
|
-
function
|
|
124
|
+
function a(e) {
|
|
154
125
|
return typeof e == "object" && !!e && typeof e.inject == "function" && typeof e.getInstance == "function";
|
|
155
126
|
}
|
|
156
|
-
function
|
|
157
|
-
return
|
|
127
|
+
function o(e) {
|
|
128
|
+
return r(e || "emailmaker");
|
|
158
129
|
}
|
|
159
|
-
function
|
|
160
|
-
let t = o(
|
|
161
|
-
if (
|
|
162
|
-
let
|
|
163
|
-
return t.container =
|
|
130
|
+
function s(e) {
|
|
131
|
+
let t = i(o(e));
|
|
132
|
+
if (a(t.container)) return t.container;
|
|
133
|
+
let r = new n(null);
|
|
134
|
+
return t.container = r, r;
|
|
164
135
|
}
|
|
165
|
-
function
|
|
166
|
-
return
|
|
136
|
+
function c(e) {
|
|
137
|
+
return s(e);
|
|
167
138
|
}
|
|
168
139
|
//#endregion
|
|
169
140
|
//#region packages/runtime-core/guid/index.ts
|
|
170
|
-
function
|
|
141
|
+
function l() {
|
|
171
142
|
let e = (/* @__PURE__ */ new Date()).getTime(), t = typeof performance < "u" && performance.now && performance.now() * 1e3 || 0;
|
|
172
143
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(n) {
|
|
173
144
|
let r = Math.random() * 16;
|
|
174
145
|
return e > 0 ? (r = (e + r) % 16 | 0, e = Math.floor(e / 16)) : (r = (t + r) % 16 | 0, t = Math.floor(t / 16)), (n === "x" ? r : r & 3 | 8).toString(16);
|
|
175
146
|
});
|
|
176
147
|
}
|
|
177
|
-
function
|
|
178
|
-
return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() :
|
|
148
|
+
function u() {
|
|
149
|
+
return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : l();
|
|
179
150
|
}
|
|
180
151
|
//#endregion
|
|
181
152
|
//#region packages/runtime-core/di/identifier.ts
|
|
182
|
-
function
|
|
153
|
+
function d(e = u()) {
|
|
183
154
|
return e;
|
|
184
155
|
}
|
|
185
156
|
//#endregion
|
|
186
157
|
//#region packages/runtime-core/di/index.ts
|
|
187
|
-
function
|
|
158
|
+
function f() {
|
|
188
159
|
return "app";
|
|
189
160
|
}
|
|
190
|
-
function
|
|
161
|
+
function p(e) {
|
|
191
162
|
if (typeof globalThis > "u") return;
|
|
192
|
-
let t =
|
|
163
|
+
let t = f(), n = globalThis[e] ?? {};
|
|
193
164
|
globalThis[e] = n;
|
|
194
165
|
let r = n.__diagnostics ??= {}, i = r.diModuleEval ??= {
|
|
195
166
|
evalCount: 0,
|
|
@@ -201,12 +172,12 @@ function h(e) {
|
|
|
201
172
|
stack: (/* @__PURE__ */ Error()).stack
|
|
202
173
|
}), i.evalCount += 1;
|
|
203
174
|
}
|
|
204
|
-
function
|
|
175
|
+
function m() {
|
|
205
176
|
return "__emailmaker__";
|
|
206
177
|
}
|
|
207
|
-
function
|
|
208
|
-
if (
|
|
209
|
-
let n =
|
|
178
|
+
function h(e, t) {
|
|
179
|
+
if (p(t), typeof globalThis > "u") return e;
|
|
180
|
+
let n = f(), r = globalThis, i = r[t] = r[t] || {}, a = i.__diagnostics = i.__diagnostics || {}, o = a.dependencyResolver = a.dependencyResolver || { entries: [] }, s = {
|
|
210
181
|
container: e,
|
|
211
182
|
source: "packages/runtime-core/di/index.ts",
|
|
212
183
|
buildSource: n,
|
|
@@ -215,16 +186,16 @@ function _(e, t) {
|
|
|
215
186
|
};
|
|
216
187
|
return o.entries.push(s), e;
|
|
217
188
|
}
|
|
218
|
-
var
|
|
219
|
-
function
|
|
220
|
-
if (
|
|
221
|
-
let e =
|
|
222
|
-
return
|
|
189
|
+
var g;
|
|
190
|
+
function _() {
|
|
191
|
+
if (g) return g;
|
|
192
|
+
let e = m();
|
|
193
|
+
return g = h(s(e), e), g;
|
|
223
194
|
}
|
|
224
|
-
var
|
|
225
|
-
let r =
|
|
195
|
+
var v = new Proxy({}, { get(e, t, n) {
|
|
196
|
+
let r = _(), i = Reflect.get(r, t, n);
|
|
226
197
|
return typeof i == "function" ? i.bind(r) : i;
|
|
227
|
-
} }),
|
|
198
|
+
} }), y = class {
|
|
228
199
|
_plugins = /* @__PURE__ */ new Map();
|
|
229
200
|
_listeners = /* @__PURE__ */ new Map();
|
|
230
201
|
_getOrCreateEntry(e) {
|
|
@@ -339,7 +310,7 @@ var b = new Proxy({}, { get(e, t, n) {
|
|
|
339
310
|
e.add(t, n);
|
|
340
311
|
} };
|
|
341
312
|
}
|
|
342
|
-
},
|
|
313
|
+
}, b = class {
|
|
343
314
|
resolveRegistry;
|
|
344
315
|
constructor(e) {
|
|
345
316
|
this.resolveRegistry = e;
|
|
@@ -386,7 +357,7 @@ var b = new Proxy({}, { get(e, t, n) {
|
|
|
386
357
|
forContext() {
|
|
387
358
|
return this.target().forContext();
|
|
388
359
|
}
|
|
389
|
-
},
|
|
360
|
+
}, x = class {
|
|
390
361
|
_factories = /* @__PURE__ */ new Map();
|
|
391
362
|
add(e, t) {
|
|
392
363
|
let n = e;
|
|
@@ -397,34 +368,33 @@ var b = new Proxy({}, { get(e, t, n) {
|
|
|
397
368
|
get(e) {
|
|
398
369
|
return this._factories.get(e);
|
|
399
370
|
}
|
|
400
|
-
},
|
|
401
|
-
function
|
|
402
|
-
return
|
|
371
|
+
}, S = d("DomComponentRegistry");
|
|
372
|
+
function C(e, t = S) {
|
|
373
|
+
return v.getOrCreateInstance(t, () => new x());
|
|
403
374
|
}
|
|
404
375
|
//#endregion
|
|
405
376
|
//#region src/plugin/registryId.ts
|
|
406
|
-
var
|
|
377
|
+
var w = "PluginRegistry";
|
|
407
378
|
//#endregion
|
|
408
379
|
//#region src/plugin/pluginRegistry.ts
|
|
409
|
-
function
|
|
410
|
-
return e.getOrCreateInstance(
|
|
380
|
+
function T(e = c()) {
|
|
381
|
+
return e.getOrCreateInstance(w, () => new y());
|
|
411
382
|
}
|
|
412
|
-
var
|
|
413
|
-
p("ELEMENT_INSERT_HTML_PIPELINE"), p("BLOCK_INSERT_HTML_PIPELINE");
|
|
383
|
+
var E = new b(() => T());
|
|
414
384
|
//#endregion
|
|
415
385
|
//#region packages/extensions-core/identifiers/index.ts
|
|
416
|
-
function
|
|
417
|
-
return
|
|
386
|
+
function D(e) {
|
|
387
|
+
return d(e);
|
|
418
388
|
}
|
|
419
|
-
|
|
389
|
+
D("HANDLE_ATOM_INSERT"), D("SETTINGS_PANEL_EVENT"), D("MODAL_SHOW_EVENT"), D("MODAL_CLOSE_EVENT"), D("MODAL_UPDATE_EVENT");
|
|
420
390
|
//#endregion
|
|
421
391
|
//#region packages/extensions-core/utils/blockInjectInfo.ts
|
|
422
|
-
function
|
|
392
|
+
function O(e) {
|
|
423
393
|
if (e.meta !== void 0 && e.meta !== null && typeof e.meta == "object") return e.meta;
|
|
424
394
|
let t = e.catalogExtra?.meta;
|
|
425
395
|
if (typeof t == "object" && t) return t;
|
|
426
396
|
}
|
|
427
|
-
function
|
|
397
|
+
function k(e, t) {
|
|
428
398
|
let n = e.insertFrom ?? t?.type, r = t?.blockId ?? (e.id != null && e.id !== "" ? String(e.id) : void 0), i = t?.project ?? (e.project !== void 0 && e.project !== null ? String(e.project) : void 0);
|
|
429
399
|
return {
|
|
430
400
|
type: t?.type ?? n,
|
|
@@ -436,11 +406,11 @@ function j(e, t) {
|
|
|
436
406
|
id: r,
|
|
437
407
|
title: e.title ?? void 0,
|
|
438
408
|
blockType: e.type,
|
|
439
|
-
meta:
|
|
409
|
+
meta: O(e)
|
|
440
410
|
};
|
|
441
411
|
}
|
|
442
|
-
function
|
|
443
|
-
return t ?
|
|
412
|
+
function A(e, t) {
|
|
413
|
+
return t ? k(t, e) : {
|
|
444
414
|
type: e.type,
|
|
445
415
|
name: e.name,
|
|
446
416
|
blockId: e.blockId,
|
|
@@ -450,7 +420,7 @@ function M(e, t) {
|
|
|
450
420
|
}
|
|
451
421
|
//#endregion
|
|
452
422
|
//#region src/extensions/api/src/index.ts
|
|
453
|
-
function
|
|
423
|
+
function j(e, t, n, r) {
|
|
454
424
|
if (typeof r.value == "function") {
|
|
455
425
|
Object.defineProperty(e, n, {
|
|
456
426
|
value: r.value.bind(t),
|
|
@@ -478,50 +448,50 @@ function N(e, t, n, r) {
|
|
|
478
448
|
enumerable: !1
|
|
479
449
|
});
|
|
480
450
|
}
|
|
481
|
-
function
|
|
451
|
+
function M(e, t, n) {
|
|
482
452
|
let r = t.use(n), i = /* @__PURE__ */ new Set(), a = [r];
|
|
483
453
|
for (let e = Object.getPrototypeOf(r); e && e !== Object.prototype; e = Object.getPrototypeOf(e)) a.push(e);
|
|
484
454
|
for (let t of a) for (let n of Reflect.ownKeys(t)) {
|
|
485
455
|
if (n === "constructor" || i.has(n)) continue;
|
|
486
456
|
let a = Object.getOwnPropertyDescriptor(t, n);
|
|
487
|
-
a && (i.add(n),
|
|
457
|
+
a && (i.add(n), j(e, r, n, a));
|
|
488
458
|
}
|
|
489
459
|
}
|
|
490
|
-
function
|
|
460
|
+
function N() {
|
|
491
461
|
return typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID() : `component-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
492
462
|
}
|
|
493
|
-
var
|
|
463
|
+
var P = class {
|
|
494
464
|
constructor(e) {
|
|
495
|
-
|
|
465
|
+
M(this, e, "SandboxScriptApi");
|
|
496
466
|
}
|
|
497
|
-
},
|
|
467
|
+
}, F = class {
|
|
498
468
|
constructor(e) {
|
|
499
|
-
|
|
469
|
+
M(this, e, "ElementsApi");
|
|
500
470
|
}
|
|
501
|
-
},
|
|
471
|
+
}, I = class {
|
|
502
472
|
constructor(e) {
|
|
503
|
-
|
|
473
|
+
M(this, e, "BlocksApi");
|
|
504
474
|
}
|
|
505
|
-
},
|
|
475
|
+
}, L = class {
|
|
506
476
|
constructor(e) {
|
|
507
|
-
|
|
477
|
+
M(this, e, "MessageService");
|
|
508
478
|
}
|
|
509
|
-
},
|
|
479
|
+
}, R = class {
|
|
510
480
|
constructor(e) {
|
|
511
|
-
|
|
481
|
+
M(this, e, "SettingsPanelApi");
|
|
512
482
|
}
|
|
513
|
-
},
|
|
483
|
+
}, z = class {
|
|
514
484
|
constructor(e) {
|
|
515
|
-
|
|
485
|
+
M(this, e, "ModalApi");
|
|
516
486
|
}
|
|
517
|
-
},
|
|
487
|
+
}, B = class {
|
|
518
488
|
constructor(e) {
|
|
519
|
-
|
|
489
|
+
M(this, e, "EmailSettingsApi");
|
|
520
490
|
}
|
|
521
491
|
};
|
|
522
|
-
function
|
|
492
|
+
function V(e = N()) {
|
|
523
493
|
return e;
|
|
524
494
|
}
|
|
525
|
-
var
|
|
495
|
+
var H = C(v), U = "1.1.88";
|
|
526
496
|
//#endregion
|
|
527
|
-
export {
|
|
497
|
+
export { I as BlocksApi, H as DomComponentRegistry, F as ElementsApi, B as EmailSettingsApi, L as MessageService, z as ModalApi, P as SandboxScriptApi, R as SettingsPanelApi, k as blockInsertContextToInjectInfo, V as createComponentIdentifier, A as mergeBlockInjectAck, E as pluginRegistry, U as version };
|
package/package.json
CHANGED