Locale Snapshot

Плагин для Payload CMS 3.x и PostgreSQL-адаптера, который предотвращает тихую потерю локализованных блоков и массивов при сохранении документа на одном языке.

Сообщество 3 51/нед MIT v0.3.0

Установка

pnpm add payload-locale-snapshot

Описание

В Payload CMS 3.x с адаптером PostgreSQL есть деструктивный крайний случай. Когда вы сохраняете документ на одном языке, адаптер Drizzle выполняет каскадный DELETE по таблицам блоков и массивов, ограниченный только `_parent_id`, без фильтра по `_locale`. PostgreSQL удаляет все переведенные блоки, вложенные массивы и подэлементы на всех остальных языках, а Payload заново вставляет строки только для активной локали. Потеря данных происходит незаметно. `localeSnapshot` закрывает этот пробел. Плагин подключается к хукам жизненного цикла `beforeChange` и `afterChange`. Перед сохранением он выполняет параметризованный SQL и делает снимок всех строк блоков, массивов и дочерних элементов, принадлежащих неактивным локалям, сохраняя их в `req._localeSnapshot`. Обход иерархии внешних ключей выполняется в топологическом порядке: сначала родительские строки, затем дочерние. После коммита сохранения плагин восстанавливает эти строки в отдельной транзакции `BEGIN ... COMMIT` с условием `ON CONFLICT ("id") DO NOTHING`, освобождая PostgreSQL advisory lock в блоке `finally`. Таблицы обнаруживаются автоматически по ограничениям внешних ключей с TTL-кэшем, так что хардкодить слаги коллекций не нужно. Настройка сводится к одной записи в `payload.config.ts`. Можно указать конкретные `collections` и `globals` или позволить плагину автоматически определять те, где есть локализованные блоки или массивы. Доступны опции `failOnError` (прервать сохранение при ошибке снимка), `maxDepth` для глубины обхода иерархии, `schemaCacheTTL`, `lockTimeoutMs` и `serverless` для окружений вроде AWS Lambda или Vercel, где `setImmediate` может быть заморожен. Поддерживаются целочисленные, serial, text и UUID первичные ключи; используется пул соединений самого Payload. Для работы требуется Payload `^3.0.0` с `@payloadcms/db-postgres` и PostgreSQL 14 или новее; для MongoDB и SQLite плагин ничего не делает. Если соединение с базой данных разрывается во время восстановления, плагин записывает надежный JSON-дамп в `.locale-snapshot-recovery/`, который можно воспроизвести с помощью экспортированной функции `restoreFromRecoveryDump()`. Функция `resetSchemaCache()` инвалидирует кэш иерархии схемы после добавления новых типов блоков миграциями.

О пакете

Имя пакета
payload-locale-snapshot
Последняя версия
0.3.0
Размер
165 кБ
Лицензия
MIT
Загрузок в неделю
51
Последняя публикация
4 окт. 2026 г.

Похожие плагины

Ещё в категории «i18n»