Locale Snapshot

Verhindert stillen Datenverlust lokalisierte Blöcke und Arrays in Payload CMS beim Speichern in einer Locale mit dem PostgreSQL-Adapter.

Community 3 51/Wo. MIT v0.3.0

Installation

pnpm add payload-locale-snapshot

Über

Payload CMS 3.x mit dem PostgreSQL-Adapter hat einen destruktiven Edge Case. Beim Speichern eines Dokuments in einer Locale führt der Drizzle-Adapter ein kaskadierendes `DELETE` auf Block- und Array-Tabellen aus, gefiltert nur nach `_parent_id` ohne `_locale`-Filter. PostgreSQL entfernt daraufhin alle übersetzten Blöcke, verschachtelten Arrays und Sub-Items aller anderen Sprachen. Payload fügt danach nur die Zeilen der aktiven Locale neu ein. Der Datenverlust geschieht lautlos. `localeSnapshot` schließt diese Lücke. Das Plugin bindet sich in die `beforeChange`- und `afterChange`-Lifecycle-Hooks ein. Vor dem Speichern führt es parametrisiertes SQL aus, um alle Block-, Array- und Child-Zeilen nicht-aktiver Locales in `req._localeSnapshot` zu sichern. Die Fremdschlüssel-Hierarchie wird in topologischer Reihenfolge durchlaufen, sodass Eltern vor Kindern erfasst werden. Nach dem Commit stellt das Plugin diese Zeilen innerhalb einer dedizierten `BEGIN ... COMMIT`-Transaktion mit `ON CONFLICT ("id") DO NOTHING` wieder her. Ein PostgreSQL-Advisory-Lock wird in einem `finally`-Block freigegeben. Relevante Tabellen werden automatisch aus Fremdschlüssel-Constraints ermittelt und mit TTL-Cache zwischengespeichert, sodass Collection-Slugs nicht hartcodiert werden müssen. Die Konfiguration erfolgt als einzelner Plugin-Eintrag in `payload.config.ts`. Sie können konkrete `collections` und `globals` festlegen oder das Plugin automatisch alle Collections mit lokalisierten Blöcken oder Arrays erkennen lassen. Weitere Optionen sind `failOnError` (bricht das Speichern bei Snapshot-Fehler ab), `maxDepth` für die Hierarchie-Traversierung, `schemaCacheTTL`, `lockTimeoutMs` und `serverless` für Runtimes wie AWS Lambda oder Vercel, wo `setImmediate` eingefroren sein kann. Das Plugin unterstützt Integer-, Serial-, Text- und UUID-Primärschlüssel und nutzt den Connection-Pool von Payload. Es setzt Payload `^3.0.0` mit `@payloadcms/db-postgres` und PostgreSQL 14 oder neuer voraus und hat keine Auswirkung auf MongoDB- oder SQLite-Setups. Bricht die Datenbankverbindung während der Wiederherstellung ab, schreibt das Plugin einen dauerhaften JSON-Dump unter `.locale-snapshot-recovery/`, der mit der exportierten Funktion `restoreFromRecoveryDump()` erneut abgespielt werden kann. `resetSchemaCache()` invalidiert den Schema-Hierarchie-Cache, nachdem Migrationen neue Block-Typen hinzugefügt haben.

Paketinformationen

Paketname
payload-locale-snapshot
Neueste Version
0.3.0
Entpackte Größe
165 kB
Lizenz
MIT
Wöchentliche Downloads
51
Zuletzt veröffentlicht
4. Okt. 2026

Ähnliche Plugins

Mehr in i18n