- Update dependencies
- Add
isDeleted
flag to watched change events
- Remove timezone drift from
Hlc.toString
- Fix
Hlc
in Dart web - Breaking: replaced
millis
time representation withDateTime
object - Breaking: removed
logicalTime
operators fromHlc
since they failed silently in 32-bit environments - Add
watch
method toMapCrdtBase
- Add convenience function to parse over-the-wire changesets
- Fix dependency compatibility with the Flutter SDK
This version introduces a major refactor which results in multiple breaking changes. This was done with the intention to make this package the basis for a family of CRDT libraries.
Another motivation was to make this package compatible with crdt_sync, thereby abstracting the communication protocol and network management for real-time remote synchronization.
Changes:
- Simplified API
- Removed insert and get operations to make package more storage-agnostic
- Made most methods optionally async
- Reimplemented CrdtMap as a zero-dependency implementation
- Update to Dart 3
- Add purge() method to reset the data store
- Fix edge case when merging remote records
- Migrate to Dart null safety
- Use milliseconds instead of microseconds for HLCs
- Allow using non-string node ids
- Allow watching for changes
- Add
modified
field toRecord
- Add optional parameter
modifiedSince
to 'recordMap' to generate delta sets - Make basic tests available to subclasses
- Move HiveCrdt project to its own repo: https://github.com/cachapa/hive_crdt
- Hlc: Add convenience
fromDate
constructor - HiveCrdt: Fix NPE when getting a non-existing record
- Crdt: Fix encoder return type
- Crdt: Pass keys to map encoder and decoder, useful to disambiguate when parsing
- Crdt: Fix HLC timestamp generation for dart-web
- Hlc: Add
const
keywords to constructors wherever possible - Crdt: Expose canonical time
- Crdt: Add convenience methods (isEmpty. length, etc.)
- Crdt: Add encoders and decoders to serialization helpers
- Crdt: Remove delta subsets using the record's HLC since it can lead to incomplete merges
- Crdt: Fix issue where canonical time wasn't being incremented on merge
- Crdt: Fix NPE when getting non-existent value
- HiveCrdt: Store record modified time
- HiveCrdt: Retrieve delta changesets based on modified times
- HiveCrdt:
between()
returns values instead of records - HiveCrdt:
watch()
returnsMapEntry
instead ofBoxEvent
- HiveCrdt: Fix DateTime key serialization
- Remove CrdtStore.
- Make Crdt abstract.
- Remove watches (they can be added in subclasses - see HiveCrdt).
- Add MapCrdt, a CRDT backed by a standard Map useful for testing or for volatile datasets.
- Add HiveCrdt as a submodule, A CRDT backed by a Hive store.
- Fix incrementing the HLC when merging newer records.
- Fix counter not being able to reach maximum (0xFFFF)
- Remove unnecessary Future in
Crdt.values
getter.
- Breaking:
Crdt.get()
now returns the value (ornull
) rather than the record. UseCrdt.getRecord()
for the previous behaviour. - API Change: Getter methods on both
Crdt
andStore
are now synchronous. - API Change:
Crdt.Clear()
now acceptspurgeRecords
to determine if records should be purged or marked as deleted. - Add
Crdt.watch()
andStore.watch()
to monitor the CRDT for changes. - Add
Crdt.isDeleted()
to check if a record has been deleted.
- Add values getter which retrieves all values as list, excluding deleted records
- HLCs implement Comparable
- Support typed key and values
- Refactor CRDT and Store to replace index operators with getters and setters
- Add clear() method
- Add JSON de/serialisation helper methods
- Initial version