Änderungsprotokoll¶
Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Das Format basiert auf Keep a Changelog, und dieses Projekt hält sich an Semantische Versionierung.
[3.4.0] - 2026-09-08¶
Hinzugefügt¶
- Cursor-Paginierung:
where()gibt die Instanzen mit einer nicht aufzählbaren Eigenschaftcursorzurück, sobald einlimitgesetzt ist. Wird sie als{ cursor }zurückgegeben, wird nur die nächste Seite gelesen, währendskipauf jeder Seite alles Vorherige liest und verwirft. createMany(zeilen, options?): legt mehrere Datensätze mitBatchWriteIteman, 25 pro Anfrage, und wiederholt, was DynamoDB unverarbeitet lässt. Doppelte Primärschlüssel lassen sich nicht prüfen,BatchWriteItemkennt diese Bedingung nicht.deleteMany(ids, options?): löscht über den Primärschlüssel, ohne die Datensätze vorher zu lesen. Immer endgültig und ohne Hooks.- Abfrageoption
deleted: ersetzt_includeTrashed, das als veralteter Alias weiterhin funktioniert. - Option
whereauf oberster Ebene: die Filter ausWhereOptions.wherewerden jetzt mit denen des ersten Arguments zusammengeführt. Bisher wurden sie stillschweigend ignoriert. - Neue öffentliche Typen:
QueryResult<M>,DynamiteConfig.
Geändert¶
- Lesezugriffe über den Primärschlüssel nutzen
GetItemundBatchGetItem: ein=auf den Primärschlüssel ist ein einzigesGetItem, einineinBatchGetItemmit 100 Schlüsseln pro Anfrage statt einerQueryje Wert. Jeder zusätzliche Filter wird auf dem bereits gelesenen Item ausgewertet, die Abfrage bleibt also eine einzige Anfrage. limitbricht die Lesung ab: die Paginierung stoppt, sobald genug Datensätze zusammen sind, und das Limit reist alsLimitzu DynamoDB, wenn serverseitig nichts mehr zu filtern ist.first()liest nicht mehr die ganze Tabelle.- Paralleler
Scan: eine Lesung ohnelimit, die in einemScanendet, wird in vier Segmente geteilt. Dieselben Leseeinheiten, ein Bruchteil der Latenz. Ohneorderist die Reihenfolge beliebig, wie schon zuvor. - Native Sortierung über den Sort Key: eine
Queryauf den Primärschlüssel, sortiert nach der@IndexSort-Spalte, nutztScanIndexForwardstatt im Speicher zu sortieren. update()über den Primärschlüssel schreibt ohne zu lesen: ein einzigesUpdateItemmit den berührten Feldern, unter der Bedingung, dass der Datensatz existiert, sofern kein@Setund kein@Validatedieser Felder das Argumentcurrentdeklariert. Dasupdate()der Instanz tut dasselbe mit den Werten, die sie bereits hält.- Batch-Schreibvorgänge:
delete(), das Massen-update(), dassync()einer Beziehung,createMany()unddeleteMany()schreiben in Blöcken von 25. - Pivot-Tabellen werden abgefragt, nie gescannt:
attach(),detach(), dassync()der Instanz und das Laden eines@ManyToManygehen über den GSI<fremdschlüssel>_indexder Pivot-Tabelle und fallen nur dann auf einenScanzurück, wenn dieser Index nicht existiert. - Abhängigkeiten:
pluralize,uuid,@arcaelas/utilsund@aws-sdk/lib-dynamodbwaren deklariert, wurden aber nie importiert, und sind entfernt.@aws-sdk/util-dynamodbwurde ohne Deklaration importiert und ist jetzt eine Abhängigkeit. Das AWS SDK wechselte von einer festen Version zu^3.329.0und wird so mit der Kopie des Konsumenten dedupliziert.
Behoben¶
- Der mit
@Nameumbenannte Primärschlüssel eines Modells wird jetzt indelete,forceDestroy,incrementunddecrementkorrekt verwendet. - Dokumentation:
withTrashed(),onlyTrashed(),relationDecorator(),ColumnBuilderundWrapperEntrywaren dokumentiert und existieren nicht. Die Signatur von@BelongsTowar mit vertauschten Argumenten dokumentiert.connect()galt als Erzeuger der Tabellen, wassync()tut. Die Schreib-Pipeline galt als(current, next), obwohl sie(next, current)erhält.
[3.2.1] - 2026-09-03¶
Behoben¶
- Typisierung von
WhereFilters:in/$inakzeptieren jetzt ein Array des Spaltentyps ({ role: { $in: ["user", "assistant"] } }); zuvor verlangte der Typ einen einzelnen Wert und TypeScript wies gültige Filter zurück.
[3.2.0] - 2026-09-03¶
Geändert¶
@PrimaryKeyakzeptiert jede nicht leere Zeichenkette als id. Ohne Angabe wird weiterhin eine ULID erzeugt, aber vorhandene UUID- oder eigene Schlüssel werfen keinInvalid ULIDmehr.@Index-Spalten sind GSIs:connect()registriert jede@Index-Spalte, die nicht der Primärschlüssel ist, als GSI<feld>_index, undsync()erstellt ihn, sodasswhere/firstauf diesen FeldernQueryCommandverwenden. Zuvor wurden nur die Fremdschlüssel von@HasMany/@HasOneberücksichtigt.$inauf dem Primärschlüssel oder einem GSI führt einenQueryCommandje unterschiedlichem Wert aus statt eines vollständigenScanCommandmitOR-Filter. Das Laden von Beziehungen (include) profitiert automatisch.
Behoben¶
- Die Erkennung des Primärschlüssels bevorzugt die
@PrimaryKey-Spalte gegenüber der ersten@Index-Spalte. - Die Selbstheilung nach einem fehlenden GSI entfernt jetzt den Datenbanknamen der Spalte aus der GSI-Registrierung.
[3.0.0] - 2026-06-06¶
Inkompatible Änderungen¶
- Vereinheitlichte Mutations-Optionen: Die statischen Methoden
create,update,delete,increment,decrementsowie die Instanzmethodensave,update,destroy,forceDestroyerhalten als letztes Argument einoptions-Objekt vom TypMutationOptions = { hook?: boolean; tx?: TransactionContext }. Das positionelletx-Argument wurde entfernt. Vorher:User.create(data, tx)→ jetzt:User.create(data, { tx }). Vorher:order.destroy(tx)→ jetzt:order.destroy({ tx }).
Hinzugefügt¶
- Lifecycle-Hooks: Sechs neue Methoden-Dekoratoren für Instanzen —
@BeforeCreate,@AfterCreate,@BeforeUpdate,@AfterUpdate,@BeforeDestroy,@AfterDestroy. Pro Operation opt-in über{ hook: true }. Innerhalb des Hooks istthisdie Entität; die Update-Hooks erhalten das Delta als erstes Argument. Mehrere Hooks desselben Typs laufen in Deklarationsreihenfolge, async-Hooks werden awaited. Bei Massen-update/deletelaufen die Hooks einmal pro betroffener Entität.before*läuft vor dem Persistieren,after*danach (in einer Transaktion nach dem Commit).increment()/decrement()akzeptieren{ tx }, lösen aber keine Hooks aus. TransactionContext.onCommitakzeptiert jetzt async-Callbacks.
[2.0.0] - 2026-04-02¶
Inkompatible Änderungen¶
- Primitive Dekoratoren:
@Get,@Set,@Validateersetzen@Mutate,@Column,@Serialize(entfernt). @Defaultvon Get- in Set-Pipeline verschoben. Wird bei Konstruktion aufgelöst, nicht beim Lesen.@PrimaryKeygeneriert ULID statt UUID. Validiert ULID-Format. Unveränderlich nach erster Zuweisung.@NotNullist Komposition von@Validate.store.nullableaus Schema entfernt.@UpdatedAtrespektiert explizite Werte. Generiertnow()nur wenn kein Wert übergeben wird.@BelongsToSignatur vereinheitlicht zu(model, foreignKey, localKey), wie@HasMany/@HasOne.- Set-Pipeline Argumentreihenfolge von
(current, next)zu(next, current)geändert. - Konstruktor führt Setter für alle Felder aus, nicht nur für in Props vorhandene.
connect()erstellt keine Tabellen mehr. Konfiguriert nur den DynamoDB-Client.- Entfernt:
withTrashed(),onlyTrashed(),relationDecorator(),@Column,@Mutate,@Serialize. where()wirft Fehler wenn Feld nicht inschema.columnsexistiert.
Hinzugefügt¶
sync(): erstellt Tabellen, GSIs und Pivot-Tabellen. Erkennt GSIs automatisch aus Relationen. Parallele Operationen mit Polling.- Intelligentes
where():QueryCommandmit PK oder GSI, Fallback zuScanCommand. Self-Healing wenn GSI nicht existiert. connect()berechnet erwartete GSIs aus Schemas ohne API-Aufrufe.update()/delete()PK-Optimierung: direktesGetItemCommand/DeleteItemCommand.increment()/decrement(): atomar viaUpdateItemCommand. Statisch, Instanz und transaktional.create()Eindeutigkeit:ConditionExpression: attribute_not_exists(pk).- ULID: interner Generator ohne Abhängigkeiten. Monoton, sequentiell, lexikographisch sortierbar.
- Transaktionen:
addUpdate(),onCommit(),__isPersistednach Commit, Auto-Chunking in 25er-Batches. - Typisierung:
Schemamit echten Typen.WhereOptionsmit rekursivem typisierteninclude.PickByType<T, V>.orderakzeptiert Objekte.
Behoben¶
@CreatedAtsetzt jetztstore.createdAt = truefür Standard-Sortierung.- Relationen-Cache vereinfacht mit Dirty-Flag.
processIncludesweist via Setter zu._mapPropertiesToDBentfernt (toter Code).where()Normalisierung vereinheitlicht.
Tests¶
- 165 Tests gegen DynamoDB Local: Dekoratoren, CRUD, rekursive Relationen, ManyToMany, kombinierte Filter, Bulk 3000, Query vs Scan, Pipeline-Verträge, PK-Unveränderlichkeit, PK-Duplikate, ULID-Sequenzialität.
[1.0.23] - 2025-12-13¶
Behoben¶
- mkdocs.yml: Navigationsstruktur korrigiert, die auf nicht existierende Pfade verwies (
guides/,api/) - TOC-Anker: 47 defekte Ankerlinks in ES/DE-Dokumentationsdateien behoben
- Akzente aus Ankern entfernt (
#introducción→#introduccion) - Dreifach-Strich-Anker korrigiert (
#primarykey---claves→#primarykey-claves) - docs/index.es.md, docs/index.de.md: Startseiten-Links auf korrekte Pfade korrigiert
- docs/installation.*.md: API-Referenzlinks korrigiert (
./api/table.md→./references/table.md) - docs/getting-started.*.md: Core-Concepts- und Beispiel-Links korrigiert
- docs/references/client.*.md: Decorators-Linkformat korrigiert (
./decorators/→./decorators.md) - docs/references/decorators.de.md: TOC-Einträge für nicht existierende Abschnitte entfernt (Datei unvollständig)
- docs/examples/relations.*.md: Decorator-Referenzlinks auf korrekte Anker korrigiert
- docs/examples/advanced.*.md: Core-Concepts-Querverweislink korrigiert
Dokumentation¶
- Alle MkDocs-Build-Warnungen behoben (von 47 auf 0 defekte Links)
- Mehrsprachige Dokumentationskonsistenz verbessert (EN/ES/DE)
- Deutsche Navigationsleiste auf 404-Seiten aufgrund falscher Linkpfade behoben
[1.0.20] - 2025-12-12¶
Hinzugefügt¶
API.md- Umfassende API-Dokumentation zu Decorators, Schemas und Methodendocs/references/table.md- Vollständige Table-Klassen-API-Referenz auf Englischdocs/references/types.md- Vollständige TypeScript-Typen-Dokumentation auf Englischsrc/@types/index.ts- Zentralisierte TypeScript-Typdefinitionen für bessere Typinferenzeslint.config.js- ESLint-Konfiguration für konsistente Codequalitätscripts/generate_seed.ts- Hilfsskript zur Generierung von Testdatenscripts/load_seed.ts- Hilfsskript zum Laden von Testdaten in DynamoDBtsx.config.json- TSX-Laufzeitkonfiguration für Entwicklung
Geändert¶
- Dokumentationsstruktur von
guides/,api/,advanced/in einheitlichesreferences/-Verzeichnis reorganisiert - Beispieldateien für Konsistenz umbenannt:
basic-model→basic,advanced-queries→advanced,relationships→relations getting-started.mdvonguides/in Dokumentationswurzel für einfacheren Zugriff verschoben- ~40 interne Dokumentationslinks an neue Struktur angepasst
- Navigation in
index.mdmit sauberer Hierarchie vereinfacht - Changelog-Dateinamen in Kleinbuchstaben für plattformübergreifende Konsistenz
src/core/table.tsmit verbesserter Abfragebehandlung und Beziehungsladung refaktoriertsrc/core/decorator.tsmit optimierten Getter/Setter-Pipelines verbessertsrc/core/client.tsmit besserer DynamoDB-Verbindungsbehandlung verbessert- Alle Decorators in
src/decorators/*.tsfür bessere Leistung optimiert src/utils/relations.tsmit sauberer Beziehungsauflösungslogik refaktoriertsrc/index.ts-Exports für vereinfachte Modulstruktur aktualisiertsrc/index.test.ts-Testsuite für schnellere Ausführung reduziertpackage.jsonmit verbesserten Skripten und Abhängigkeiten aktualisiertyarn.lockbereinigt und redundante Abhängigkeitseinträge entfernt
Entfernt¶
docs/examples/validation.*- Redundante Beispiele, Inhalt inbasic-Beispiele zusammengeführtdocs/guides/relationships.*- Doppelter Inhalt, inrelations-Beispiele konsolidiertdocs/api/table.mdunddocs/api/types.md- Durch neue englische Versionen inreferences/ersetztsrc/core/method.ts- Funktionalität intable.tskonsolidiert
Behoben¶
- Sprache von
table.mdundtypes.mdkorrigiert (waren fälschlicherweise auf Spanisch, jetzt korrekt auf Englisch) - Alle defekten internen Dokumentationslinks in 39 Dateien behoben
- Inkonsistente Dateibenennungskonventionen im Beispielverzeichnis behoben
Leistung¶
- Testkomplexität für schnellere CI/CD-Ausführung reduziert
- yarn.lock mit -2873 Zeilen redundanter Einträge optimiert
- Netto-Codebasisreduktion von -9220 Zeilen bei Erhaltung der Funktionalität
Dokumentation¶
- Vollständige Dokumentationsumstrukturierung nach: Erste Schritte → Installation → Beispiele → Referenzen → Changelog
- Mehrsprachige Unterstützung (EN/ES/DE) in allen Dokumentationsdateien beibehalten
- Querverweise zwischen verwandten Dokumentationsabschnitten verbessert
[1.0.17] - 2025-12-03¶
Hinzugefügt¶
@Serialize(fromDB, toDB)- Bidirektionaler Datentransformations-Decorator@DeleteAt()- Soft-Delete-Decorator mit ZeitstempelDynamite.tx()- Atomare Transaktionen mit automatischem RollbackTransactionContext-Klasse zur Verwaltung transaktionaler OperationenwithTrashed()-Methode zum Einschließen soft-gelöschter DatensätzeonlyTrashed()-Methode zur Abfrage nur soft-gelöschter Datensätze- Unterstützung für
nullals Fallback in@Serialize-Parametern
Geändert¶
destroy()-Methode verbessert zur Unterstützung von Soft-Delete wenn@DeleteAtvorhanden istdestroy()akzeptiert jetzt optionalenTransactionContext-Parameter für transaktionale Operationen- Verbesserte Dokumentation mit
@Serialize- und@DeleteAt-Beispielen - Decorator-Dokumentation in
/guides/decorators.mdkonsolidiert
Entfernt¶
/api/decorators/-Verzeichnis (21 Dateien) - Inhalt in/guides/decorators.mdzusammengeführt
Dokumentation¶
- Umfassende
@Serialize-Dokumentation mit Verschlüsselungs- und Komprimierungsbeispielen hinzugefügt @DeleteAt-Dokumentation mit Papierkorb-Systemmustern hinzugefügtDynamite.tx()-Transaktions-API-Dokumentation hinzugefügt- Modellbeispiele mit neuen Decorators aktualisiert
- Mehrsprachige Dokumentation (EN/ES/DE) konsolidiert
[1.0.13] - 2025-10-13¶
Aktuelle Version¶
Dies ist eine stabile Version von @arcaelas/dynamite - ein modernes, Decorator-first ORM für DynamoDB mit vollständiger TypeScript-Unterstützung.
Funktionen¶
Kernfunktionalität¶
- Vollwertiges ORM mit Decorator-first-Ansatz
- Vollständige TypeScript-Unterstützung mit Typsicherheit
- Automatische Tabellenerstellung und -verwaltung
- Konfiguration ohne Boilerplate
Decorators¶
- Kern-Decorators:
@PrimaryKey(),@Index(),@IndexSort(),@Name() - Daten-Decorators:
@Default(),@Mutate(),@Validate(),@NotNull() - Zeitstempel-Decorators:
@CreatedAt(),@UpdatedAt() - Beziehungs-Decorators:
@HasMany(),@BelongsTo()
TypeScript-Typen¶
CreationOptional<T>- Felder bei Erstellung als optional markierenNonAttribute<T>- Berechnete Eigenschaften von der Datenbank ausschließenHasMany<T>- Eins-zu-viele-BeziehungenBelongsTo<T>- Viele-zu-eins-BeziehungenInferAttributes<T>- Typinferenz für Modellattribute
Abfrageoperationen¶
- Grundlegende CRUD-Operationen (erstellen, lesen, aktualisieren, löschen)
- Erweiterte Abfrageoperatoren:
=,!=,<,<=,>,>=,in,not-in,contains,begins-with - Paginierungsunterstützung mit
limitundskip - Sortierung mit
order(ASC/DESC) - Attributauswahl mit
attributes-Array - Komplexe Filterung mit mehreren Bedingungen
Beziehungen¶
- Eins-zu-viele-Beziehungen über
@HasMany() - Viele-zu-eins-Beziehungen über
@BelongsTo() - Verschachtelte Beziehungsladung mit
include - Gefilterte Beziehungsabfragen
- Rekursive Beziehungsunterstützung
Datenvalidierung & Transformation¶
- Feldvalidierung mit benutzerdefinierten Validatoren
- Datenmutation/Transformation vor dem Speichern
- Mehrstufige Validierungsketten
- Nicht-null-Einschränkungen
- E-Mail-, Alters- und benutzerdefinierte Formatvalidierung
Konfiguration¶
- AWS DynamoDB-Verbindungsunterstützung
- DynamoDB Local-Entwicklungsunterstützung
- Benutzerdefinierte Endpoint-Konfiguration
- Flexible Anmeldedatenverwaltung
- Umgebungsvariablenunterstützung
Abhängigkeiten¶
@aws-sdk/client-dynamodb: ^3.329.0@aws-sdk/lib-dynamodb: ^3.329.0pluralize: ^8.0.0uuid: ^11.1.0
Dokumentation¶
- Umfassende README mit Beispielen
- TypeScript-Typen-Dokumentation
- API-Referenzhandbuch
- Entwicklungs-Setup-Anweisungen
- Fehlerbehebungshandbuch
- Best Practices und Leistungstipps
[1.0.0] - Erstveröffentlichung¶
Hinzugefügt¶
- Erstveröffentlichung von @arcaelas/dynamite
- Basis-Table-Klassen-Implementierung
- Kern-Decorator-System
- DynamoDB-Client-Wrapper
- Metadaten-Verwaltungssystem
- Grundlegende CRUD-Operationen
- Query-Builder-Funktionalität
- Beziehungsunterstützungs-Grundlage
- TypeScript-Definitionen
- Jest-Test-Setup
Versionsverlauf-Zusammenfassung¶
- v3.0.0 (Aktuell) - Lifecycle-Hooks (@Before/@After) und vereinheitlichte
{ hook, tx }-Mutationsoptionen (Breaking: positionalestxentfernt) - v1.0.23 - Dokumentationslink-Korrekturen, TOC-Anker-Korrekturen, mehrsprachige Konsistenz
- v1.0.20 - Dokumentationsumstrukturierung, Codebasis-Optimierung, API.md-Erstellung
- v1.0.17 - @Serialize, @DeleteAt, Dynamite.tx()-Transaktionen hinzugefügt
- v1.0.13 - Stabile Version mit vollständigem Funktionsumfang
- v1.0.0 - Erste öffentliche Veröffentlichung
Links¶
- Repository: https://github.com/arcaelas/dynamite
- Issues: https://github.com/arcaelas/dynamite/issues
- NPM-Paket: https://www.npmjs.com/package/@arcaelas/dynamite
- Autor: Arcaelas Insiders
Migrationshandbücher¶
Upgrade auf v1.0.20¶
Dokumentationslinks¶
Wenn Sie externe Links zur Dokumentation haben, aktualisieren Sie diese: - docs/guides/getting-started.md → docs/getting-started.md - docs/api/* → docs/references/* - docs/guides/decorators.md → docs/references/decorators.md - docs/examples/basic-model.md → docs/examples/basic.md - docs/examples/advanced-queries.md → docs/examples/advanced.md - docs/examples/relationships.md → docs/examples/relations.md
Keine Breaking Changes an der API. Alle Funktionen sind abwärtskompatibel.
Upgrade auf v1.0.13¶
Keine Breaking Changes seit v1.0.0. Alle Funktionen sind abwärtskompatibel.
Mitwirken¶
Siehe GitHub-Repository für Beitragsrichtlinien.
Hinweis: Für detaillierte Verwendungsbeispiele und API-Dokumentation besuchen Sie bitte das GitHub-Repository.