11![ License] ( https://img.shields.io/badge/license-MIT-red )
2- ![ Maven Central] ( https://img.shields.io/maven-central/v/de.splatgames.aether/aether-datafixers )
3- ![ Version] ( https://img.shields.io/badge/version-0.3 .0-orange )
2+ ![ Maven Central] ( https://img.shields.io/maven-central/v/de.splatgames.aether.datafixers /aether-datafixers )
3+ ![ Version] ( https://img.shields.io/badge/version-0.4 .0-orange )
44
55# Aether Datafixers 🔧
66
@@ -10,7 +10,7 @@ inspired by Minecraft's DataFixer Upper (DFU), with a focus on **simplicity**, *
1010
1111---
1212
13- ## ✨ Features (v0.3 .0)
13+ ## ✨ Features (v0.4 .0)
1414
1515- ✅ ** Schema-Based Versioning** — Define data types per version with ` Schema ` and ` TypeRegistry `
1616- ✅ ** Forward Patching** — Apply ` DataFix ` instances sequentially to migrate data across versions
@@ -89,23 +89,23 @@ Dynamic<?> updated = fixer.update(
8989<dependency >
9090 <groupId >de.splatgames.aether.datafixers</groupId >
9191 <artifactId >aether-datafixers-core</artifactId >
92- <version >0.3 .0</version >
92+ <version >0.4 .0</version >
9393</dependency >
9494```
9595
9696** Gradle (Groovy)**
9797
9898``` groovy
9999dependencies {
100- implementation 'de.splatgames.aether.datafixers:aether-datafixers-core:0.3 .0'
100+ implementation 'de.splatgames.aether.datafixers:aether-datafixers-core:0.4 .0'
101101}
102102```
103103
104104** Gradle (Kotlin)**
105105
106106``` kotlin
107107dependencies {
108- implementation(" de.splatgames.aether.datafixers:aether-datafixers-core:0.3 .0" )
108+ implementation(" de.splatgames.aether.datafixers:aether-datafixers-core:0.4 .0" )
109109}
110110```
111111
@@ -125,7 +125,7 @@ The Bill of Materials (BOM) ensures consistent versions across all Aether Datafi
125125 <dependency >
126126 <groupId >de.splatgames.aether.datafixers</groupId >
127127 <artifactId >aether-datafixers-bom</artifactId >
128- <version >0.3 .0</version >
128+ <version >0.4 .0</version >
129129 <type >pom</type >
130130 <scope >import</scope >
131131 </dependency >
@@ -149,7 +149,7 @@ The Bill of Materials (BOM) ensures consistent versions across all Aether Datafi
149149
150150``` groovy
151151dependencies {
152- implementation platform('de.splatgames.aether.datafixers:aether-datafixers-bom:0.3 .0')
152+ implementation platform('de.splatgames.aether.datafixers:aether-datafixers-bom:0.4 .0')
153153
154154 // No version needed
155155 implementation 'de.splatgames.aether.datafixers:aether-datafixers-core'
@@ -161,7 +161,7 @@ dependencies {
161161
162162``` kotlin
163163dependencies {
164- implementation(platform(" de.splatgames.aether.datafixers:aether-datafixers-bom:0.3 .0" ))
164+ implementation(platform(" de.splatgames.aether.datafixers:aether-datafixers-bom:0.4 .0" ))
165165
166166 // No version needed
167167 implementation(" de.splatgames.aether.datafixers:aether-datafixers-core" )
@@ -194,15 +194,15 @@ Optics provide composable, type-safe accessors for nested data structures. They
194194
195195### Optic Hierarchy
196196
197- | Optic | Focus | Description |
198- | ---------------| -------------------| -------------------------------------------------------|
199- | ** Iso** | 1 ↔ 1 | Reversible 1-to-1 transformation between two types |
197+ | Optic | Focus | Description |
198+ | ---------------| -------------------| --------------------------------------------------------------- |
199+ | ** Iso** | 1 ↔ 1 | Reversible 1-to-1 transformation between two types |
200200| ** Lens** | 1 → 1 | Focus on exactly one part of a product type (always succeeds) |
201- | ** Prism** | 1 → 0..1 | Focus on one case of a sum type (may not match) |
202- | ** Affine** | 1 → 0..1 | Combines lens and prism capabilities |
203- | ** Traversal** | 1 → 0..n | Focus on zero or more parts |
204- | ** Getter** | 1 → 1 (read-only) | Read-only focus (no modification) |
205- | ** Finder** | Type → Optic | Locates nested types within a schema |
201+ | ** Prism** | 1 → 0..1 | Focus on one case of a sum type (may not match) |
202+ | ** Affine** | 1 → 0..1 | Combines lens and prism capabilities |
203+ | ** Traversal** | 1 → 0..n | Focus on zero or more parts |
204+ | ** Getter** | 1 → 1 (read-only) | Read-only focus (no modification) |
205+ | ** Finder** | Type → Optic | Locates nested types within a schema |
206206
207207### Lens Example
208208
@@ -334,13 +334,13 @@ void testFieldRename() {
334334
335335### Testkit Features
336336
337- | Component | Description |
338- | -----------| -------------|
339- | ** TestData** | Fluent builders for creating test data (` TestData.gson().object()... ` ) |
340- | ** AetherAssertions** | Custom AssertJ assertions for ` Dynamic ` , ` DataResult ` , ` Typed ` |
341- | ** DataFixTester** | Test harness for isolated DataFix testing |
342- | ** QuickFix** | Factory methods for common fix patterns (rename, add, remove, transform) |
343- | ** MockSchemas** | Mock schema utilities for testing |
337+ | Component | Description |
338+ | ---------------------- | ------------------------------------------------------------- -------------|
339+ | ** TestData** | Fluent builders for creating test data (` TestData.gson().object()... ` ) |
340+ | ** AetherAssertions** | Custom AssertJ assertions for ` Dynamic ` , ` DataResult ` , ` Typed ` |
341+ | ** DataFixTester** | Test harness for isolated DataFix testing |
342+ | ** QuickFix** | Factory methods for common fix patterns (rename, add, remove, transform) |
343+ | ** MockSchemas** | Mock schema utilities for testing |
344344
345345Add to your project:
346346
@@ -556,22 +556,21 @@ mvn test
556556 - **High-performance APIs** — `Rules.batch()` and single-pass conditional transforms
557557 - **Performance optimizations** — Path caching, optimized fix registry, reduced allocations
558558
559- - **v0.3.0** (current)
559+ - **v0.3.0**
560560 - **CLI module** — Migrate files from the command line with batch processing and reports
561561 - **Schema Tools module** — Schema diffing, migration analysis, validation, and introspection
562562 - **Fix coverage analysis** — Detect schema changes without corresponding DataFixes
563563 - **Convention checking** — Enforce naming conventions for types, fields, and classes
564564
565- - **v0.4.0** (next )
565+ - **v0.4.0** (current )
566566 - **Spring Boot Starter** — Auto-configuration, MigrationService with fluent API
567567 - **Actuator integration** — Health indicator, info contributor, custom endpoint, Micrometer metrics
568568 - **Multi-domain support** — Multiple DataFixers with @Qualifier annotations
569569 - **DynamicOps auto-configuration** — Conditional beans for all supported formats
570570 - **Multi-format DynamicOps** — YAML (SnakeYAML, Jackson), TOML (Jackson), XML (Jackson)
571571 - **Package restructuring** — Format-first package organization (`codec.json.gson`, `codec.yaml.jackson`, etc.)
572- - **Debug utilities** — Pretty printers / tree diff for Dynamic structures (dev-facing)
573572
574- - **v0.5.0** (API freeze candidate)
573+ - **v0.5.0** (next, API freeze candidate)
575574 - **API stabilization pass** — Naming/packaging cleanup + deprecations completed
576575 - **Compatibility checks in CI** — Binary/source compatibility guardrails for public API
577576 - **Hardened error model** — Consistent exception types + structured error details
0 commit comments