@iwonz/ywtc 3.6.0 → 4.0.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 (58) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +17 -14
  3. package/dist/adapters/confluence.d.ts +0 -2
  4. package/dist/adapters/confluence.js +61 -27
  5. package/dist/adapters/confluence.js.map +1 -1
  6. package/dist/adapters/yandex.d.ts +7 -9
  7. package/dist/adapters/yandex.js +68 -27
  8. package/dist/adapters/yandex.js.map +1 -1
  9. package/dist/cli.js +2 -2
  10. package/dist/cli.js.map +1 -1
  11. package/dist/clients/confluence-cloud.d.ts +1 -0
  12. package/dist/clients/confluence-cloud.js +2 -2
  13. package/dist/clients/confluence-cloud.js.map +1 -1
  14. package/dist/clients/confluence.d.ts +1 -0
  15. package/dist/clients/confluence.js +4 -3
  16. package/dist/clients/confluence.js.map +1 -1
  17. package/dist/clients/yandex-wiki.js +2 -6
  18. package/dist/clients/yandex-wiki.js.map +1 -1
  19. package/dist/consistency.d.ts +1 -1
  20. package/dist/consistency.js +6 -1
  21. package/dist/consistency.js.map +1 -1
  22. package/dist/content-model.d.ts +1 -0
  23. package/dist/content-model.js +118 -37
  24. package/dist/content-model.js.map +1 -1
  25. package/dist/conversion.d.ts +2 -0
  26. package/dist/conversion.js +42 -17
  27. package/dist/conversion.js.map +1 -1
  28. package/dist/domain.d.ts +27 -4
  29. package/dist/domain.js +20 -0
  30. package/dist/domain.js.map +1 -1
  31. package/dist/exclusive-lease.d.ts +14 -0
  32. package/dist/exclusive-lease.js +87 -0
  33. package/dist/exclusive-lease.js.map +1 -0
  34. package/dist/filesystem-export.d.ts +2 -0
  35. package/dist/filesystem-export.js +188 -167
  36. package/dist/filesystem-export.js.map +1 -1
  37. package/dist/graph.js +4 -4
  38. package/dist/graph.js.map +1 -1
  39. package/dist/http.js +1 -1
  40. package/dist/http.js.map +1 -1
  41. package/dist/interactive-config.js +55 -3
  42. package/dist/interactive-config.js.map +1 -1
  43. package/dist/issues.d.ts +1 -1
  44. package/dist/migrator.js +604 -366
  45. package/dist/migrator.js.map +1 -1
  46. package/dist/report-catalog.d.ts +4 -0
  47. package/dist/report-catalog.js +4 -0
  48. package/dist/report-catalog.js.map +1 -1
  49. package/dist/report-contract.d.ts +6 -0
  50. package/dist/report-contract.js.map +1 -1
  51. package/dist/report-ui/index.html +6 -6
  52. package/dist/report.js +34 -23
  53. package/dist/report.js.map +1 -1
  54. package/dist/state.d.ts +18 -0
  55. package/dist/state.js +60 -32
  56. package/dist/state.js.map +1 -1
  57. package/dist/types.d.ts +1 -0
  58. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  Notable changes to `ywtc` are documented in this file. Versions follow [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [4.0.1](https://github.com/iwonz/ywtc/compare/v4.0.0...v4.0.1) (2026-10-16)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **migration:** distinguish adaptations from incomplete transfers ([63077c3](https://github.com/iwonz/ywtc/commit/63077c32e8f5515ad2fc12389a3f0d232f08a24a))
11
+
12
+
13
+ ### Maintenance
14
+
15
+ * **homebrew:** update formula to v4.0.0 ([dc3b41c](https://github.com/iwonz/ywtc/commit/dc3b41cce1da2e14a05e1513b786df5ff132f9b2))
16
+ * **release:** retry automated release workflow ([0b5471a](https://github.com/iwonz/ywtc/commit/0b5471a80a49d4f09917b6ffb87a4bf39c708f8a))
17
+
18
+ ## [4.0.0](https://github.com/iwonz/ywtc/compare/v3.6.0...v4.0.0) (2026-10-16)
19
+
20
+
21
+ ### ⚠ BREAKING CHANGES
22
+
23
+ * destination pages and comment archives proven by state mappings are overwritten from source on rerun instead of preserving destination edits as content conflicts.
24
+
25
+ ### Features
26
+
27
+ * make mapped destination updates source-authoritative ([b33cc0b](https://github.com/iwonz/ywtc/commit/b33cc0b0fe6f97a5a9d4d2e65f7497e1cf2a9efb))
28
+
29
+
30
+ ### Maintenance
31
+
32
+ * **homebrew:** update formula to v3.6.0 ([5ffe5e5](https://github.com/iwonz/ywtc/commit/5ffe5e5366e423e5007feef9fc3cb9517a084464))
33
+ * **release:** retry automated release workflow ([a1fae54](https://github.com/iwonz/ywtc/commit/a1fae5448518bbb078d9656e2e438c3e9eec9f2e))
34
+
5
35
  ## [3.6.0](https://github.com/iwonz/ywtc/compare/v3.5.0...v3.6.0) (2026-10-16)
6
36
 
7
37
 
package/README.md CHANGED
@@ -16,13 +16,13 @@
16
16
  | --- | --- |
17
17
  | Страницы и структура | Одна страница, полное структурное поддерево или граф связанных страниц. Иерархия восстанавливается, циклы обрабатываются без повторного переноса. Пустая страница-раздел переносится как корректная пустая страница, а не как fallback. |
18
18
  | Текст и оформление | Заголовки, абзацы, жирное/курсивное/зачёркнутое и цветное начертание, списки и задачи, цитаты, разделители, inline/preformatted code с языком и обычные таблицы преобразуются в нативную или семантически эквивалентную разметку destination. |
19
- | Секции и колонки | YFM `layout/block` и Confluence page layouts сохраняются нативными секциями и колонками в Yandex Wiki и Confluence. HTML использует адаптивную сетку; Markdown сохраняет все ячейки по порядку и явно отмечает линеаризацию как degradation. |
19
+ | Секции и колонки | YFM `layout/block` и Confluence page layouts сохраняются нативными секциями и колонками в Yandex Wiki и Confluence. HTML использует адаптивную сетку; Markdown сохраняет все ячейки по порядку и отмечает линеаризацию как adaptation без ухудшения статуса. |
20
20
  | Ссылки и якоря | Ссылки между выбранными страницами переписываются на destination, якоря сохраняются. Внешние ссылки и ссылки за пределы выбранного набора остаются исходными. |
21
21
  | Вложения | Переносятся все доступные через API для скачивания файлы, включая PNG/JPEG/GIF/WebP/SVG, PDF, ZIP, DOC/DOCX, XLS/XLSX и PPT/PPTX. Файлы передаются потоково, совпадения имён разрешаются стабильно, размер и SHA-256 проверяются. |
22
22
  | Изображения | Прикреплённые изображения становятся attachments destination или локальными файлами экспорта. Внешние изображения остаются внешними; подписи и размеры сохраняются, если destination это поддерживает. |
23
- | Специальная разметка | В обе стороны сопоставляются notes ↔ `info`/`tip`/`warning`/`note`, cuts ↔ `expand`, tree ↔ `children`, задачи, code, anchors, page/attachment links и изображения. Tabs становятся статическими секциями, Grid — статической таблицей. Безопасный Storage Format и YFM сохраняются нативно при переносе внутри одного провайдера. |
23
+ | Специальная разметка | В обе стороны сопоставляются notes ↔ `info`/`tip`/`warning`/`note`, cuts ↔ `expand`, tree ↔ `children`, задачи, code, anchors, page/attachment links и изображения. Tabs становятся статическими секциями, Grid — проверяемой статической таблицей. Такие полные эквивалентные представления считаются adaptation и остаются `complete`. Безопасный Storage Format и YFM сохраняются нативно при переносе внутри одного провайдера. |
24
24
  | Комментарии | По умолчанию все доступные комментарии страницы собираются в один архивный комментарий: отдельные раскрываемые ветки сохраняют участников, авторов, даты, статусы, inline-контекст, удалённые записи и вложенность ответов. Вложения, на которые есть ссылки в тексте комментариев, складываются в один проверяемый ZIP с hash-prefixed именами и manifest. Для Markdown/HTML создаются локальные секции и ZIP. |
25
- | Конструкции без точного эквивалента | Создаётся читаемый fallback и сохраняется raw snapshot. Проверка destination отражает упрощения как degradation или `partial`, поэтому потеря не маскируется успешным статусом. |
25
+ | Конструкции без точного эквивалента | Создаётся читаемый fallback и при необходимости raw snapshot. Если весь payload представлен и проверен, это adaptation со статусом `complete`; только потеря данных, значимой структуры или невозможность проверки дают degradation и `partial`. |
26
26
 
27
27
  ### Не переносится
28
28
 
@@ -35,7 +35,7 @@
35
35
  | Удалённые, недоступные или не возвращённые source API страницы | Не восстанавливаются; недоступность и пропуски фиксируются в state и отчёте. |
36
36
  | Точная пиксельная геометрия, произвольный CSS и активные скрипты | Не исполняются и не обещают визуальную идентичность. Содержимое и поддерживаемая структура сохраняются нативно или статически; неподдерживаемая часть получает читаемый fallback и raw snapshot. |
37
37
  | Сторонние и неизвестные macros/виджеты | Не подменяются приблизительным macro без доказанного эквивалента: сохраняются безопасным статическим представлением и raw snapshot с явной degradation. |
38
- | Внешние файлы и изображения, которых нет среди доступных для скачивания ресурсов | Не копируются; сохраняется внешняя или исходная ссылка. |
38
+ | Внешние файлы и изображения, не принадлежащие source | Не копируются; абсолютный URL, подпись и доступные размеры сохраняются как external reference без ухудшения статуса. Недоступный source-managed ресурс считается неполным переносом. |
39
39
  | Активные скрипты, iframe, формы и интерактивное поведение embed-объектов | Не исполняются в destination; вместо них сохраняется безопасное статическое представление или raw snapshot. |
40
40
  | Пиксельная идентичность и поведение vendor-specific элементов без эквивалента | Используется ближайшее семантическое представление; различия явно отмечаются в отчёте. |
41
41
 
@@ -249,22 +249,23 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
249
249
 
250
250
  ## State
251
251
 
252
- По умолчанию state хранится в `<workdir>/.states/<automatic-id>.json`. ID строится из канонических профилей и ID source/destination, а для файлового экспорта также из формата; форма locator, `scope` и `source-status` на ID не влияют. State имеет единственный строгий актуальный формат без поля версии. Несоответствующий файл не преобразуется и не изменяется. Относительный `--state` разрешается внутри workspace, выход за его границы запрещён.
252
+ По умолчанию state хранится в `<workdir>/.states/<automatic-id>.json`. ID строится из канонических профилей и ID source/destination, а для файлового экспорта также из формата; форма locator, `scope` и `source-status` на ID не влияют. State имеет единственный строгий актуальный формат без поля версии. Несоответствующий файл не преобразуется и не изменяется. Относительный `--state` разрешается внутри workspace, выход за его границы запрещён. Live-run получает exclusive lock этого state: параллельный процесс останавливается до записей в destination, а доказанно stale локальный lock восстанавливается автоматически.
253
253
 
254
254
  ### Повторные запуски
255
255
 
256
256
  - Одинаковые source и destination автоматически подхватывают один state независимо от формы URL/ID/slug.
257
257
  - Переключение `current → all` расширяет тот же state новыми страницами без дубликатов; обратное переключение не удаляет mappings вне текущего выбора.
258
- - Если ранее страница была создана под временно ближайшим выбранным предком, повторный запуск безопасно перемещает неизменённую страницу под найденного родителя; пользовательские изменения дают `conflict`.
258
+ - Подтверждённая state-mapping означает, что source авторитетен: отличающийся body, title или parent mapped-страницы обновляется поверх актуальной destination-версии, а прежнее содержимое остаётся в истории провайдера.
259
+ - Если ранее страница была создана под временно ближайшим выбранным предком, повторный запуск перемещает mapped-страницу под найденного родителя до обработки потомков независимо от изменений её body.
259
260
  - Уже сопоставленные страницы и вложения сверяются по ID, фактическому размеру и SHA-256; проверенный cache повторно не скачивается.
260
261
  - Неудачные mappings вложений автоматически получают безопасные уникальные имена и повторяются без `--fresh`.
261
262
  - Временный `404` подтверждённой destination-страницы повторяется с backoff; устойчиво пропавшая mapping восстанавливается под ожидаемым родителем с сохранением прежнего ID в state.
262
263
  - Страница с прежним неизменённым служебным placeholder ywtc автоматически получает полноценный source-derived контент.
263
264
  - Ошибка отдельного файла оставляет полный текст и source-ссылку, фиксирует `partial` и повторяет ресурс при следующем запуске.
264
- - Неизменённые архивы комментариев и ZIP проверяются и переиспользуются без дубликатов. Confluence-архив обновляется, а Yandex Wiki при изменении source получает новую ревизию, поскольку Public API не предоставляет update comments.
265
- - Ручное изменение destination-комментария даёт `conflict`; удалённый комментарий создаётся заново. Исчезнувшие из доступного source API комментарии отмечаются `stale` и автоматически не удаляются.
265
+ - Неизменённые архивы комментариев и ZIP проверяются и переиспользуются без дубликатов. Mapped Confluence-архив обновляется новой версией из source, а Yandex Wiki получает новую архивную ревизию, поскольку Public API не предоставляет update comments.
266
+ - Удалённый mapped-комментарий создаётся заново. Исчезнувшие из доступного source API комментарии отмечаются `stale` и автоматически не удаляются.
266
267
  - Запуск с `--no-comments` не обращается к comment API и не удаляет ранее созданные архивы; следующий обычный запуск дополнит тот же state.
267
- - Страница, изменённая вручную после прошлого запуска, получает `conflict` и не перезаписывается.
268
+ - `conflict` используется только при доказанной неоднозначности immutable ownership/identity: несколько source mappings на один destination ID, несовпадение возвращённого immutable ID или несколько равноправных ownership-кандидатов. Версия, title, URL, slug, parent, fingerprint, HTTP `409`, слово `conflict` в сообщении и коллизия имени сами по себе конфликтом не являются.
268
269
  - `--fresh` игнорирует mappings; перед live-run прежний state сохраняется как backup, а destination может получить новые объекты.
269
270
  - Удалённые из source объекты автоматически не удаляются из destination.
270
271
 
@@ -274,10 +275,12 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
274
275
 
275
276
  Каждый запуск создаёт `<workdir>/.states/reports/<run-id>/index.html` и очищенный `report.json`, затем печатает run ID, `file://` URL и команду повторного открытия. `--open-report` открывает отчёт сразу; `ywtc reports list` показывает историю, `ywtc reports open <run-id>` — выбранный запуск, а `ywtc reports open last` или `ywtc reports open` — последний корректный.
276
277
 
277
- Автономный HTML-отчёт работает без сети. В краткой таблице сопоставлены source inventory и destination outcomes для страниц, файлов, комментариев и байтов. Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает детали файлов, комментариев, родителей, первопричин и рекомендуемых действий, а вкладка сравнения показывает sandboxed source/destination preview. Зависимые `blocked` объекты сгруппированы под root error. Интерфейс поддерживает RU/EN, системную/светлую/тёмную тему и мобильный экран.
278
+ Автономный HTML-отчёт работает без сети. Единый верхний блок объединяет статус и параметры запуска, progress, source/destination-сводку страниц, файлов, комментариев, объёма и качества, result/state/report paths и скачивание `report.json`. Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает детали файлов, комментариев, родителей, причин и рекомендуемых действий, а вкладка сравнения показывает sandboxed source/destination preview. Ошибки и зависимые `blocked` объекты видны в подсвеченном дереве и во вкладке проблем конкретной страницы. RU/EN и режимы system/light/dark переключаются компактными кнопками-иконками; выбор сохраняется локально. Интерфейс адаптирован для мобильного экрана.
278
279
 
279
280
  HTML/JSON, итог терминала и `reports list` используют одинаковые счётчики. Известный source volume отделён от подтверждённых transferred bytes; неизвестные размеры отмечены явно. `report.json` не содержит содержимое страниц, тексты комментариев или preview HTML — они остаются только в локальном `index.html`.
280
281
 
282
+ Качество преобразования учитывается отдельно: normalization — безопасная разница сериализации; adaptation — полное эквивалентное представление, например Grid → static table или колонки другой ширины; degradation — доказанная неполнота, влияющая на `partial`; preserved external reference — исходный внешний URL, который и должен остаться внешним. Normalization и adaptation не увеличивают warnings и не переводят запуск в `completed-with-warnings`.
283
+
281
284
  ### Статусы переноса
282
285
 
283
286
  Статусы страниц:
@@ -285,10 +288,10 @@ HTML/JSON, итог терминала и `reports list` используют о
285
288
  | Статус | Смысл | Данные записаны | Что делать |
286
289
  |---|---|---:|---|
287
290
  | `complete` | Страница и связанные объекты записаны и проверены | Да | Ничего |
288
- | `partial` | Основной контент проверен, но применён fallback или зафиксирована деградация | Да | Посмотреть различия в отчёте; повторить запуск для retryable-проблем |
291
+ | `partial` | Часть данных, managed-ресурсов, комментариев или значимой структуры отсутствует либо результат не проверен | Да | Посмотреть degradation в отчёте; повторить запуск для retryable-проблем |
289
292
  | `failed` | Операция страницы началась, но корректная запись или проверка не удалась | Возможно частично | Исправить root error и повторить ту же миграцию |
290
- | `blocked` | Страница не запускалась из-за failed/conflict родителя или другой зависимости | Нет в этом запуске | Исправить указанную upstream-страницу и повторить запуск |
291
- | `conflict` | Destination изменён пользователем и защищён от перезаписи | Сохранены существующие данные | Сверить изменения и разрешить конфликт вручную |
293
+ | `blocked` | Страница не запускалась из-за недоступного failed/conflict родителя или другой зависимости | Нет в этом запуске | Исправить указанную upstream-ошибку и повторить запуск |
294
+ | `conflict` | Immutable ownership/identity destination доказанно неоднозначна, в отчёте перечислены кандидаты | Нет автоматической перезаписи | Проверить candidate IDs и устранить неоднозначное сопоставление |
292
295
  | `planned` | Объект рассчитан в `--dry-run`; запись не выполнялась | Нет | Убрать `--dry-run` для переноса |
293
296
  | `not-started` | Live-run остановился до начала независимой операции | Нет | Повторить ту же миграцию |
294
297
 
@@ -305,7 +308,7 @@ HTML/JSON, итог терминала и `reports list` используют о
305
308
 
306
309
  `failed` означает неудавшуюся попытку самого объекта; `blocked` — сознательно не начатую операцию из-за upstream-зависимости. Поэтому зависимые блокировки показываются отдельно и не увеличивают число root errors.
307
310
 
308
- Итоговый статус запуска: `completed`, `completed-with-warnings`, `partial`, `failed`, `cancelled` или `interrupted`. Provider-aware verification допускает безопасные различия сериализации, отмечает значимое упрощение оформления как `partial`, а потерю текста, ссылок, ячеек таблиц, кода, изображений, вложений или anchors — как ошибку. Технический статус `skeleton-created` уже содержит source-derived bootstrap, а не progress-placeholder.
311
+ Итоговый статус запуска: `completed`, `completed-with-warnings`, `partial`, `failed`, `cancelled` или `interrupted`. Provider-aware verification допускает безопасные различия сериализации и полные adaptations. Только потеря текста, ссылки, ячейки таблицы, кода, managed-изображения, вложения, комментария, anchor или невозможность доказать полноту ухудшает статус. Технический статус `skeleton-created` уже содержит source-derived bootstrap, а не progress-placeholder.
309
312
 
310
313
  ## Разработка
311
314
 
@@ -53,12 +53,10 @@ export declare class ConfluenceAdapter implements SourceAdapter, DestinationAdap
53
53
  page: DestinationPage;
54
54
  title: string;
55
55
  body: string;
56
- expectedFingerprint?: string;
57
56
  }): Promise<DestinationPage>;
58
57
  reparentPage(input: {
59
58
  page: DestinationPage;
60
59
  parent: DestinationContainer | DestinationPage;
61
- expectedFingerprint?: string;
62
60
  }): Promise<DestinationPage>;
63
61
  uploadResource(input: {
64
62
  page: DestinationPage;
@@ -2,7 +2,7 @@ import { createHash } from 'node:crypto';
2
2
  import { createReadStream } from 'node:fs';
3
3
  import { extractPageReferences } from '../content-model.js';
4
4
  import { normalizeCommentForest } from '../comments.js';
5
- import { DestinationTitleConflictError } from '../domain.js';
5
+ import { DestinationRevisionConflictError, DestinationTitleConflictError } from '../domain.js';
6
6
  import { HttpRequestError } from '../http.js';
7
7
  const capabilities = {
8
8
  readPages: true,
@@ -20,7 +20,7 @@ function canonical(profile, id) {
20
20
  return `${profile.name}:confluence:${id}`;
21
21
  }
22
22
  function fingerprint(page) {
23
- return createHash('sha256').update(`${page.title}\0${page.body?.storage?.value ?? ''}\0${page.version?.number ?? ''}`).digest('hex');
23
+ return createHash('sha256').update(`${page.title}\0${page.body?.storage?.value ?? ''}`).digest('hex');
24
24
  }
25
25
  function contentFingerprint(content) {
26
26
  return createHash('sha256').update(content).digest('hex');
@@ -269,27 +269,50 @@ export class ConfluenceAdapter {
269
269
  }
270
270
  }
271
271
  async updatePage(input) {
272
- if (input.expectedFingerprint) {
273
- const current = destinationPage(this.profile, this.client, await this.client.getPage(input.page.id));
274
- if (current.fingerprint !== input.expectedFingerprint)
275
- throw new Error(`Destination conflict for Confluence page ${input.page.id}: content changed since the last verified run`);
272
+ try {
273
+ return destinationPage(this.profile, this.client, await this.client.updatePage({
274
+ pageId: input.page.id,
275
+ title: input.title,
276
+ storage: input.body,
277
+ ...(input.page.version ? { version: Number(input.page.version) } : {}),
278
+ }));
279
+ }
280
+ catch (error) {
281
+ if (possibleTitleConflict(error)) {
282
+ let occupied;
283
+ try {
284
+ occupied = await this.findTitleConflict(input.page, input.title);
285
+ }
286
+ catch {
287
+ // Preserve revision/provider classification when lookup cannot prove a title collision.
288
+ }
289
+ if (occupied && occupied.id !== input.page.id) {
290
+ throw new DestinationTitleConflictError(input.title, error.status, { cause: error });
291
+ }
292
+ }
293
+ if (error instanceof HttpRequestError && error.status === 409) {
294
+ throw new DestinationRevisionConflictError('page', input.page.id, { cause: error });
295
+ }
296
+ throw error;
276
297
  }
277
- return destinationPage(this.profile, this.client, await this.client.updatePage({ pageId: input.page.id, title: input.title, storage: input.body }));
278
298
  }
279
299
  async reparentPage(input) {
280
- if (input.expectedFingerprint) {
281
- const current = destinationPage(this.profile, this.client, await this.client.getPage(input.page.id));
282
- if (current.fingerprint !== input.expectedFingerprint) {
283
- throw new Error(`Destination conflict for Confluence page ${input.page.id}: content changed since the last verified run`);
300
+ let moved;
301
+ try {
302
+ moved = destinationPage(this.profile, this.client, await this.client.updatePage({
303
+ pageId: input.page.id,
304
+ title: input.page.title,
305
+ storage: input.page.content ?? '',
306
+ parentId: input.parent.id,
307
+ ...(input.page.version ? { version: Number(input.page.version) } : {}),
308
+ }));
309
+ }
310
+ catch (error) {
311
+ if (error instanceof HttpRequestError && error.status === 409) {
312
+ throw new DestinationRevisionConflictError('page', input.page.id, { cause: error });
284
313
  }
285
- input.page = current;
314
+ throw error;
286
315
  }
287
- const moved = destinationPage(this.profile, this.client, await this.client.updatePage({
288
- pageId: input.page.id,
289
- title: input.page.title,
290
- storage: input.page.content ?? '',
291
- parentId: input.parent.id,
292
- }));
293
316
  const verified = destinationPage(this.profile, this.client, await this.client.getPage(moved.id));
294
317
  if (verified.parentId !== input.parent.id) {
295
318
  throw new Error(`Confluence hierarchy verification failed for page ${input.page.id}: expected parent ${input.parent.id}, received ${verified.parentId ?? 'none'}`);
@@ -341,21 +364,32 @@ export class ConfluenceAdapter {
341
364
  }
342
365
  async findArchiveComment(page, fingerprint) {
343
366
  const comments = await this.client.getPageComments(page.id);
344
- const matches = comments.filter((comment) => (comment.body?.storage?.value ?? '').includes('Архив комментариев из'));
345
- const match = fingerprint
346
- ? matches.find((comment) => (comment.body?.storage?.value ?? '').includes(fingerprint))
347
- : matches.at(-1);
367
+ const matches = comments
368
+ .filter((comment) => (comment.body?.storage?.value ?? '').includes('Архив комментариев из'))
369
+ .sort((left, right) => String(left.id).localeCompare(String(right.id), undefined, { numeric: true }));
370
+ const candidates = fingerprint
371
+ ? matches.filter((comment) => (comment.body?.storage?.value ?? '').includes(fingerprint))
372
+ : matches;
373
+ const match = candidates.at(-1);
348
374
  return match ? destinationComment(page.id, match) : undefined;
349
375
  }
350
376
  async createArchiveComment(input) {
351
377
  return destinationComment(input.page.id, await this.client.createComment({ pageId: input.page.id, storage: input.body }));
352
378
  }
353
379
  async updateArchiveComment(input) {
354
- return destinationComment(input.comment.pageId, await this.client.updateComment({
355
- commentId: input.comment.id,
356
- storage: input.body,
357
- ...(input.comment.version ? { version: Number(input.comment.version) } : {}),
358
- }));
380
+ try {
381
+ return destinationComment(input.comment.pageId, await this.client.updateComment({
382
+ commentId: input.comment.id,
383
+ storage: input.body,
384
+ ...(input.comment.version ? { version: Number(input.comment.version) } : {}),
385
+ }));
386
+ }
387
+ catch (error) {
388
+ if (error instanceof HttpRequestError && error.status === 409) {
389
+ throw new DestinationRevisionConflictError('comment', input.comment.id, { cause: error });
390
+ }
391
+ throw error;
392
+ }
359
393
  }
360
394
  async readArchiveComment(input) {
361
395
  return destinationComment(input.page.id, await this.client.getComment(input.commentId));
@@ -1 +1 @@
1
- {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../src/adapters/confluence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../src/adapters/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAC,gCAAgC,EAAE,6BAA6B,EAAC,MAAM,cAAc,CAAC;AAgB7F,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAG5C,MAAM,YAAY,GAAwB;IACxC,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;CACrB,CAAC;AAEF,SAAS,SAAS,CAAC,OAAoC,EAAE,EAAU;IACjE,OAAO,GAAG,OAAO,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,WAAW,CAAC,IAAoB;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,qBAAqB,GAAG,qNAAqN,CAAC;AAEpP,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,gBAAgB;WACnC,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,OAAoC,EAAE,MAAqB,EAAE,IAAoB;IACnG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;IAC7C,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,EAAE,gCAAgC,CAAC,CAAC;IACvH,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,aAAsB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;QACrB,UAAU;QACV,SAAS,EAAE,oBAAoB;QAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,UAAU,EAAE,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAoC,EAAE,MAAqB,EAAE,IAAoB;IACxG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5B,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;QACrB,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;QAC9B,OAAO;QACP,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAkC;IACvD,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,KAAK,IAAI,SAAS;QAC9F,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,OAA0B;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,MAAM;QACN,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAiB;IAIA;IAAuD;IAH1E,IAAI,GAAG,YAAqB,CAAC;IAC7B,YAAY,GAAG,YAAY,CAAC;IAErC,YAA4B,OAAoC,EAAmB,MAAqB;QAA5E,YAAO,GAAP,OAAO,CAA6B;QAAmB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAE5G,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QAC7C,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;IACnH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,oBAAoB,CAAC,MAA4C,EAAE,OAAqB;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAgB,EAAE,OAA+B;QACpE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAC3E,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACpF,CAAC,CAAC,CAAC;QACJ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;YAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,kDAAkD,OAAO,CAAC,MAAM,4EAA4E,CAAC,CAAC;YAChK,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS;YACxC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC;YAC5D,CAAC,CAAC,QAAQ,CAAC;QACb,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS;gBACpC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3D,OAAO;wBACL,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnD,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,WAAY,CAAC,MAAM,GAAG,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxE,MAAM,EAAE,eAAwB;wBAChC,MAAM,EAAE,aAAa;wBACrB,gBAAgB,EAAE,IAAI;qBACvB,CAAC;gBACJ,CAAC,CAAC;gBACF,CAAC,CAAC,EAAE;YACN,eAAe,EAAE,OAAO,CAAC,MAAM;YAC/B,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK;gBAC7B,CAAC,CAAC,CAAC,yHAAyH,CAAC;gBAC7H,CAAC,CAAC,EAAE;SACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAgB,EAAE,SAAwB;QAC/D,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACpG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,CAAC;QACD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1G,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,CAAC;QACD,IAAI,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC;YAC1E,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAgB;QAClC,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACvE,QAAQ,EAAE,YAAqB;YAC/B,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,UAAU,CAAC,KAAK;YACtB,aAAa,EAAE,UAAU,CAAC,KAAK;YAC/B,gBAAgB,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;iBAChG,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrD,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,YAAqB;YACrG,QAAQ,EAAE,EAAC,UAAU,EAAC;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAgB;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACvD,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3G,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC3C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;SAC3E,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,QAAwB,EAAE,WAAmB;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAkC,EAAE,WAAW,CAAC,CAAC;IAC7H,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO;YACL,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9G,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;SAC9F,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiD,EAAE,KAAa;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;YACrC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,KAAK;gBACf,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC3D,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiD,EAAE,KAAa;QACtF,IAAI,CAAC,SAAS,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,SAAiD,EAAE,KAAa;QACxF,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAuF;QACtG,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACnG,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC7E,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI;aACvF,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC/C,IAAI,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClF,CAAC;gBAAC,MAAM,CAAC;oBACP,4EAA4E;gBAC9E,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS;gBAAE,MAAM,KAAK,CAAC;YAC5B,MAAM,IAAI,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA2D;QAC1E,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC7E,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;gBACrB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,QAAqC,CAAC;gBAC1C,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnE,CAAC;gBAAC,MAAM,CAAC;oBACP,wFAAwF;gBAC1F,CAAC;gBACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,IAAI,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YACD,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9D,MAAM,IAAI,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAGlB;QACC,IAAI,KAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC9E,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;gBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;gBACvB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;gBACjC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACzB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9D,MAAM,IAAI,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qDAAqD,KAAK,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QACrK,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAqH;QACxI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClD,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;YACrB,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;YACtC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,oBAAoB,EAAE,KAAK,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,KAAK;YACpB,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,IAAqB;QAC/C,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACvE,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,UAAU,CAAC,KAAK;YACtB,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAA+E;QAC5G,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YACnD,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;YACrB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;YAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAqB;QACpC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,mBAAmB,CAAC,IAAqB,EAAE,KAAa,EAAE,MAAe;QACvE,OAAO,WAAW,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B,IAAI,CAAC,KAAK,oBAAoB,KAAK,2BAA2B,CAAC;IACxJ,CAAC;IAED,uBAAuB,CAAC,QAA0B,EAAE,KAAa,EAAE,KAAc;QAC/E,OAAO,KAAK;YACV,CAAC,CAAC,qBAAqB,KAAK,iCAAiC,QAAQ,CAAC,IAAI,gBAAgB;YAC1F,CAAC,CAAC,wCAAwC,QAAQ,CAAC,IAAI,wCAAwC,KAAK,yCAAyC,CAAC;IAClJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAqB,EAAE,WAAoB;QAClE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,QAAQ;aACrB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;aAC3F,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACtG,MAAM,UAAU,GAAG,WAAW;YAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACzF,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAA4C;QACrE,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IAC1H,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAkD;QAC3E,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC9E,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;gBAC3B,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9D,MAAM,IAAI,gCAAgC,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAiD;QACxE,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1F,CAAC;CACF"}
@@ -20,10 +20,16 @@ export declare class YandexAdapter implements SourceAdapter, DestinationAdapter
20
20
  pages: SourcePage[];
21
21
  returned: number;
22
22
  excluded: ({
23
+ id: string;
24
+ canonicalId: string;
25
+ locator: string;
23
26
  reason: "source-status";
24
27
  status: "obsolete";
25
28
  metadataComplete: boolean;
26
- depth?: number;
29
+ } | {
30
+ metadataComplete: boolean;
31
+ status?: "current" | "non-current";
32
+ reason: "inventory-drift";
27
33
  ancestorIds?: string[];
28
34
  parentId?: string;
29
35
  id: string;
@@ -31,13 +37,6 @@ export declare class YandexAdapter implements SourceAdapter, DestinationAdapter
31
37
  locator: string;
32
38
  title: string;
33
39
  url: string;
34
- } | {
35
- id: string;
36
- canonicalId: string;
37
- locator: string;
38
- reason: "source-status";
39
- status: "obsolete";
40
- metadataComplete: boolean;
41
40
  })[];
42
41
  effectiveStatus: SourceStatus;
43
42
  notes: string[];
@@ -59,7 +58,6 @@ export declare class YandexAdapter implements SourceAdapter, DestinationAdapter
59
58
  page: DestinationPage;
60
59
  title: string;
61
60
  body: string;
62
- expectedFingerprint?: string;
63
61
  }): Promise<DestinationPage>;
64
62
  uploadResource(input: {
65
63
  page: DestinationPage;
@@ -1,6 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { stat } from 'node:fs/promises';
3
3
  import { extractPageReferences, resolveYandexReferenceSlug } from '../content-model.js';
4
+ import { DestinationRevisionConflictError, DestinationTitleConflictError } from '../domain.js';
4
5
  import { normalizeCommentForest } from '../comments.js';
5
6
  import { HttpRequestError } from '../http.js';
6
7
  import { normalizeWikiSlug, safeFilename } from '../input.js';
@@ -53,7 +54,7 @@ function sourcePage(profile, page) {
53
54
  }
54
55
  function destinationPage(profile, page) {
55
56
  const content = page.content ?? '';
56
- const fingerprint = createHash('sha256').update(`${page.title}\0${content}\0${page.attributes?.modified_at ?? ''}`).digest('hex');
57
+ const fingerprint = createHash('sha256').update(`${page.title}\0${content}`).digest('hex');
57
58
  const parent = parentId(page);
58
59
  return {
59
60
  provider: 'yandex-wiki',
@@ -202,14 +203,21 @@ export class YandexAdapter {
202
203
  const currentIds = new Set(current.map((identity) => identity.id));
203
204
  const selected = options.status === 'current' ? all.filter((identity) => currentIds.has(identity.id)) : all;
204
205
  const excludedIdentities = options.status === 'current' ? all.filter((identity) => !currentIds.has(identity.id)) : [];
206
+ const locatorDrifts = [];
205
207
  const results = await Promise.allSettled(selected.map(async (identity) => {
206
208
  const detail = await this.client.getPageById(identity.id);
207
209
  const normalized = sourcePage(this.profile, detail);
208
210
  const expectedLocator = normalizeWikiSlug(identity.slug);
209
211
  if (normalized.locator !== expectedLocator) {
210
- throw new Error(`Yandex Wiki descendant ${identity.id} detail slug ${normalized.locator} conflicts with inventory slug ${expectedLocator}`);
212
+ locatorDrifts.push(`Yandex Wiki page ${identity.id} changed locator from ${expectedLocator} to ${normalized.locator} during discovery; immutable ID was retained.`);
211
213
  }
212
- return options.status === 'current' ? { ...normalized, sourceStatus: 'current' } : normalized;
214
+ const belongsToSubtree = normalized.ancestorIds?.includes(page.id)
215
+ ?? (normalized.locator === page.locator || normalized.locator.startsWith(`${page.locator}/`));
216
+ return {
217
+ page: options.status === 'current' ? { ...normalized, sourceStatus: 'current' } : normalized,
218
+ belongsToSubtree,
219
+ expectedLocator,
220
+ };
213
221
  }));
214
222
  const failures = results.flatMap((result, index) => result.status === 'rejected'
215
223
  ? [`${selected[index]?.id ?? 'unknown'} (${selected[index]?.slug ?? 'unknown'}): ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`]
@@ -219,10 +227,7 @@ export class YandexAdapter {
219
227
  }
220
228
  const excludedResults = await Promise.allSettled(excludedIdentities.map(async (identity) => {
221
229
  const detail = await this.client.getPageById(identity.id);
222
- const expectedLocator = normalizeWikiSlug(identity.slug);
223
230
  const locator = normalizeWikiSlug(detail.slug);
224
- if (locator !== expectedLocator)
225
- throw new Error(`detail slug ${locator} conflicts with inventory slug ${expectedLocator}`);
226
231
  const ancestors = ancestorIds(detail);
227
232
  const rootIndex = ancestors.indexOf(page.id);
228
233
  const immediateParentId = parentId(detail);
@@ -242,18 +247,38 @@ export class YandexAdapter {
242
247
  }));
243
248
  const excludedFailures = excludedResults.filter((result) => result.status === 'rejected').length;
244
249
  return {
245
- pages: results.flatMap((result) => result.status === 'fulfilled' ? [result.value] : []),
250
+ pages: results.flatMap((result) => result.status === 'fulfilled' && result.value.belongsToSubtree ? [result.value.page] : []),
246
251
  returned: all.length,
247
- excluded: excludedResults.map((result, index) => result.status === 'fulfilled' ? result.value : {
248
- id: String(excludedIdentities[index].id),
249
- canonicalId: canonical(this.profile, excludedIdentities[index].id),
250
- locator: normalizeWikiSlug(excludedIdentities[index].slug),
251
- reason: 'source-status',
252
- status: 'obsolete',
253
- metadataComplete: false,
254
- }),
252
+ excluded: [
253
+ ...excludedResults.map((result, index) => result.status === 'fulfilled' ? result.value : {
254
+ id: String(excludedIdentities[index].id),
255
+ canonicalId: canonical(this.profile, excludedIdentities[index].id),
256
+ locator: normalizeWikiSlug(excludedIdentities[index].slug),
257
+ reason: 'source-status',
258
+ status: 'obsolete',
259
+ metadataComplete: false,
260
+ }),
261
+ ...results.flatMap((result) => result.status === 'fulfilled' && !result.value.belongsToSubtree ? [{
262
+ id: result.value.page.id,
263
+ canonicalId: result.value.page.canonicalId,
264
+ locator: result.value.page.locator,
265
+ title: result.value.page.title,
266
+ url: result.value.page.url,
267
+ ...(result.value.page.parentId ? { parentId: result.value.page.parentId } : {}),
268
+ ...(result.value.page.ancestorIds ? { ancestorIds: result.value.page.ancestorIds } : {}),
269
+ reason: 'inventory-drift',
270
+ ...(result.value.page.sourceStatus ? { status: result.value.page.sourceStatus } : {}),
271
+ metadataComplete: true,
272
+ }] : []),
273
+ ],
255
274
  effectiveStatus: options.status,
256
- notes: excludedFailures > 0 ? [`Yandex Wiki did not expose complete hierarchy metadata for ${excludedFailures} excluded page(s).`] : [],
275
+ notes: [
276
+ ...(excludedFailures > 0 ? [`Yandex Wiki did not expose complete hierarchy metadata for ${excludedFailures} excluded page(s).`] : []),
277
+ ...(results.some((result) => result.status === 'fulfilled' && !result.value.belongsToSubtree)
278
+ ? ['Yandex Wiki inventory changed during discovery; pages moved outside the selected subtree were excluded by immutable page ID.']
279
+ : []),
280
+ ...locatorDrifts,
281
+ ],
257
282
  };
258
283
  }
259
284
  async resolveReference(from, reference) {
@@ -333,16 +358,29 @@ export class YandexAdapter {
333
358
  return this.findChild(container, title);
334
359
  }
335
360
  async createPage(input) {
336
- const created = await this.client.createPage({ slug: this.childSlug(input.container, input.title), title: input.title, content: input.body });
337
- return destinationPage(this.profile, created);
361
+ try {
362
+ const created = await this.client.createPage({ slug: this.childSlug(input.container, input.title), title: input.title, content: input.body });
363
+ return destinationPage(this.profile, created);
364
+ }
365
+ catch (error) {
366
+ if (error instanceof HttpRequestError && (error.status === 400 || error.status === 409)) {
367
+ const occupied = await this.findChild(input.container, input.title).catch(() => undefined);
368
+ if (occupied)
369
+ throw new DestinationTitleConflictError(input.title, error.status, { cause: error });
370
+ }
371
+ throw error;
372
+ }
338
373
  }
339
374
  async updatePage(input) {
340
- if (input.expectedFingerprint) {
341
- const current = destinationPage(this.profile, await this.client.getPageById(Number(input.page.id)));
342
- if (current.fingerprint !== input.expectedFingerprint)
343
- throw new Error(`Destination conflict for Yandex Wiki page ${input.page.id}: content changed since the last verified run`);
375
+ try {
376
+ return destinationPage(this.profile, await this.client.updatePage({ id: Number(input.page.id), title: input.title, content: input.body }));
377
+ }
378
+ catch (error) {
379
+ if (error instanceof HttpRequestError && error.status === 409) {
380
+ throw new DestinationRevisionConflictError('page', input.page.id, { cause: error });
381
+ }
382
+ throw error;
344
383
  }
345
- return destinationPage(this.profile, await this.client.updatePage({ id: Number(input.page.id), title: input.title, content: input.body }));
346
384
  }
347
385
  async uploadResource(input) {
348
386
  const size = input.size ?? (await stat(input.filePath)).size;
@@ -376,10 +414,13 @@ export class YandexAdapter {
376
414
  }
377
415
  async findArchiveComment(page, fingerprint) {
378
416
  const comments = await this.client.getPageComments(Number(page.id));
379
- const matches = comments.filter((comment) => (comment.body ?? '').includes('Архив комментариев из'));
380
- const match = fingerprint
381
- ? matches.find((comment) => (comment.body ?? '').includes(fingerprint))
382
- : matches.at(-1);
417
+ const matches = comments
418
+ .filter((comment) => (comment.body ?? '').includes('Архив комментариев из'))
419
+ .sort((left, right) => String(left.id).localeCompare(String(right.id), undefined, { numeric: true }));
420
+ const candidates = fingerprint
421
+ ? matches.filter((comment) => (comment.body ?? '').includes(fingerprint))
422
+ : matches;
423
+ const match = candidates.at(-1);
383
424
  return match ? destinationComment(page.id, match) : undefined;
384
425
  }
385
426
  async createArchiveComment(input) {