Releases: brunoga/deep
Releases · brunoga/deep
v5.3.0
⚠️ Breaking change — JSON wire format
Operation.From (json "f") now carries the source path for OpMove/OpCopy. Previously the source path was stored in Operation.Old (json "o"). Patches serialised by v5.2.0 and earlier will not round-trip cleanly through ParseJSONPatch / UnmarshalJSON. Generated *_deep.go files are unaffected — Move/Copy ops fall through to the reflection path which now reads From.
Migration: re-serialise any persisted patches, or attach a transformation step that copies the source path from Old to From for OpMove/OpCopy ops before parsing.
What's Changed
Twelve correctness/robustness fixes plus the wire-format split, all in #45:
- engine:
OpCopydeep-copies the source so reference-typed destinations no longer alias. - selector:
MapKeyRFC 6901-escapes the key so values containing/or~navigate correctly. - patch:
ReversedropsOpLogops instead of emitting a malformed zero-Kind operation. - patch:
ParseJSONPatchonly lifts the leadingtest-op intoGuard; a later same-shape entry no longer overwrites it. - operation: split
From(source path) fromOld(prior value) — see the breaking change note above. - deep-gen: root-level strict check uses a comma-ok type assertion (no more panic on mismatched
Old). - engine:
ApplyOpReflectionValuenil-checks the logger. - engine:
OpMove/OpCopyfrom a non-existent source now surface an error (test gap closed). - hlc:
Clock.SetLatestrehydrates the clock under the mutex;CRDT.UnmarshalJSONuses it. - hlc:
Clock.Reservepanics on negativenorint32overflow instead of silently wrapping. - condition:
Notwith an emptySubreturns an explicit error. - crdt:
Set.Lenno longer materialises the fullItems()slice.
Full Changelog: v5.2.0...v5.3.0
v5.2.0
v5.1.1
v5.1.0
v5.0.1
v5.0.0
v4.1.0
v4.0.0
What's Changed
- feat: robust move detection and dependency-aware patch application by @brunoga in #30
- Refactor/core internal and json paths by @brunoga in #31
- refactor: clean up and simplify public API for release by @brunoga in #32
- refactor: merge Node into PatchBuilder for a fluent API by @brunoga in #33
- fix: update examples to use JSON Pointers in conditions by @brunoga in #34
- refactor: improve ConflictResolver API with current/proposed context by @brunoga in #35
- release: v4.0.0 by @brunoga in #36
Full Changelog: v3.1.1...v4.0.0