Changelog#
1.0.2#
π Bug Fixes#
-
core: prevent direct usage of DatumEntityInterface
- add checks to prevent using DatumEntityInterface directly in manager and query methods
- throw ArgumentError with a descriptive message if DatumEntityInterface is used directly
- add test cases to ensure ArgumentError is thrown when using DatumEntityInterface directly
-
datum-manager: add error handling to post-fetch transforms
- Prevent entire read/watch operations from failing when individual entity transforms throw errors. Log errors and use original entities instead, improving robustness in DatumManager methods like readAll, watchAll, watchById, and watchQuery.
β¨ Features#
-
adapter: add realtime watch methods for Supabase adapter
- Implement watchAll and watchById methods to enable real-time data watching via Supabase RealtimeChannel. These methods allow subscribing to changes in the table, fetching initial data, and emitting updates on changes, improving data synchronization for user-specific or all records. Includes proper error handling, logging, and channel management
-
hive_adapter: add reactive user change support to watchAll method
- Add optional userChangeStream parameter to HiveLocalAdapter constructor and enhance watchAll method to emit updated data when the active user changes. This enables reactive queries that filter and refresh data based on user ID switches, improving app responsiveness in multi-user environments. Includes error handling and proper stream management.
1.0.1#
β¨ Features#
-
core: add connectivity monitoring and auto-sync
- Introduces a new feature that monitors the device's connectivity status and automatically triggers a sync when connectivity is restored.
- This ensures that any pending operations that were queued while offline are automatically synchronized once the device is back online.
- Fixes an issue where users had to manually trigger a sync after regaining connectivity.
- Adds a new deleteBehavior option to the DatumConfig to allow developers to choose between soft and hard deletes. Soft deletes mark items as deleted locally and queue a delete operation, while hard deletes immediately remove the item from local storage.
- Adds a HiveDatumPersistence class to the example app to demonstrate how to use Hive for data persistence.
-
delete: add optional behavior parameter to delete methods
- added DeleteBehavior? behavior parameter to delete and deleteAndSync methods in Datum class, allowing per-operation override of global delete behavior
- updated method documentation to explain the new parameter
- improved dispose method to safely handle instance checks and nullify the singleton instance
- enhanced test setup in background_sync_test.dart with proper mocking of ConnectivityChecker
- added error handling in integration test for Datum.initialize to catch and report failures
π Bug Fixes#
-
datum: revert default delete behavior to hard delete
- revert default deleteBehavior to hardDelete in DatumConfig
- update tests to explicitly use soft delete where needed
1.0.0#
ποΈ Breaking Changes#
-
core: Removed deprecated
pause()andresume()methods fromDatumManagerandDatumclasses - useunsubscribeFromRemoteChanges()andresubscribeToRemoteChanges()instead
β¨ Core Library Features#
- Entity System: Enhanced entity definitions with interfaces and mixins for more flexible implementations
- Sync Engine: Added initial sync on user authentication, metadata comparison for optimized syncing, device tracking, and improved error handling
- Auto-sync: Enhanced auto-sync functionality with better scheduling and management
- Configuration: Added default sync options and remote metadata access
- Logging: Advanced logging features with performance monitoring and sampling
- Cold Start Manager: Major architectural improvements to cold start synchronization including per-user state isolation, configurable retry logic with exponential backoff, pluggable persistence interface, enhanced error handling and recovery, and comprehensive testing. Replaced static state with instance-level per-user state management to prevent race conditions and enable proper multi-user support. Added retry policies, error recovery mechanisms, and extensible persistence layer for custom storage solutions.
- Cascading Delete: Major enhancements to cascading delete functionality including dry-run mode, progress callbacks, cancellation support, timeout protection, and improved error handling. Added comprehensive dry-run capabilities for safely previewing deletion operations before execution. Enhanced cascading delete integration tests with 48 total test cases covering complex relationship scenarios, mixin usage patterns, restrict violations, and edge cases.
β»οΈ Refactors#
- Entity Handling: Improved entity mixins and relational detection
- Sync Performance: Batch processing, performance monitoring, and enhanced error boundaries
- Concurrent Operations: Better handling of concurrent sync operations
π Bug Fixes#
- Sync Engine: Fixed return values and unused variables in tests
-
Cascading Delete: Removed unused
_CascadeDeleteStepand_CascadeDeletePlanclasses and fixed method call inCascadeDeleteBuilder.execute()
π Documentation#
- API Documentation: Enhanced documentation for Datum singleton API, sync patterns, and troubleshooting guides
Medium Priority (Next Release):
- Parallel execution
- Progress callbacks
- Relationship caching
- Rollback capability
0.0.13#
- fixed type casting error in
initialize()method in Datum
0.0.12#
β¨ Features#
-
core: Add stacktrace to DatumEither
- The
Failureclass now includes an optionalStackTraceproperty. - The
foldmethod inDatumEithernow passes theStackTraceto theonFailurecallback. - The
onFailuremethod now accepts aStackTraceparameter. - The
getErrormethod now returns a tuple containing the error value and the stack trace.
- The
-
core: Bring back getSuccess method
- Added the
getSuccessmethod back to theDatumEitherclass. - This method returns the success value if the
DatumEitheris aSuccess, otherwise it throws aStateError.
- Added the
β»οΈ Refactors#
-
core: Remove isSuccess and isFailure methods
- Removed the
isSuccessandisFailuremethods from theDatumEitherclass.
- Removed the
-
core: Use switch statement instead of if statement
- Refactor the
onSuccess,onFailure,getSuccess,getError,successOrNull, anderrorOrNullmethods to use switch statement instead of if statement.
- Refactor the
0.0.11#
β¨ Features#
-
core: introduce DatumEither for initialization result
- Use DatumEither to handle potential errors during Datum initialization
- Return Success or Failure based on the outcome of the initialization process
- Update related code to handle the new DatumEither return type
- Add DatumEither model for typing success or failure.
0.0.10#
β¨ Features#
-
Batch Operations: Added
createManyandupdateManymethods for performing batch create and update operations. -
Lifecycle Management: Implemented
DatumProviderWithLifecyclewidget to manage Datum's lifecycle based on app state. -
Flexible Entity Implementation: Introduced
DatumEntityMixinandRelationalDatumEntityMixinto allow for more flexible entity implementation without requiring inheritance from a base class. -
Schema Versioning: Added
schemaVersionproperty toIsolatedHiveLocalAdapterfor easier schema migration. - Type Comparison: Added a
sameTypesmethod for type comparison. - Dependencies: Added
equatabledependency for easier object comparison.
π Bug Fixes#
- Logging: Removed unnecessary debug logs from
tasksStreamProvider. -
Initialization: Ensured managers are initialized before
saveManyoperations. -
Memory Leaks: Improved stream handling in
SupabaseRemoteAdapterto prevent memory leaks. -
Error Handling: Improved type safety and error handling in
fetchRelatedmethods.
β»οΈ Refactors#
-
Background Sync: Enhanced
SupabaseRemoteAdapterwithresubscribeToChangesandunsubscribeFromChangesmethods for better background sync and lifecycle management. -
Entity Handling: Updated
DatumEntityBaseand related classes for better sync and versioning. -
Adapters: Updated
HiveLocalAdapterandSupabaseRemoteAdapterto useDatumEntityBaseinstead ofDatumEntity. -
Task Entity: Refactored the
Taskentity to useDatumEntityMixin. -
Sync Execution: Updated the default sync execution strategy to
parallel. - Data Serialization: Enhanced data serialization for local and remote persistence.
π Documentation#
-
Datum Class: Enhanced
Datumclass documentation for clarity and improved usage examples. -
Sync Options: Enhanced
DatumSyncOptionsdocumentation for better clarity. - General: Improved overall documentation for clarity.
β Tests#
- Background Sync: Added tests for background sync functionality.
0.0.9#
β¨ Features#
Core#
-
Implement Sync Request Strategies: Introduced a new system to control how concurrent calls to the
synchronizemethod are handled, preventing race conditions and improving data consistency.- Added
DatumSyncRequestStrategyas the base for defining execution behavior. - Implemented
SequentialRequestStrategyto queue and process allsynchronizecalls in the order they are received. This is the new default behavior. - Implemented
SkipConcurrentStrategyas an alternative strategy to ignore newsynchronizecalls if a sync is already in progress. - Added
syncRequestStrategytoDatumConfigto allow global configuration of this behavior. - Added an
isSyncinggetter toDatumSyncEngineto check the current sync status.
- Added
π Bug Fixes#
Build#
-
Correct Conditional Imports: Fixed conditional imports to ensure compatibility across both
dart:ioanddart:htmlenvironments.
0.0.8#
- fix conditional import for web and io
0.0.7#
π Bug Fixes#
-
π Isolate Error Handling & Web Compatibility:
- Ensured errors during isolate operations are properly caught and sent back to the main thread.
- Enhanced web compatibility by using
computefunction for isolate operations. - Removed unnecessary newline at end of file for consistency.
- Removed unused import in
supabase_security_dialog.dart.
0.0.6#
π Features#
-
π Isolate Sync Strategy: Introduced a new
IsolateStrategythat runs data synchronization in a background isolate for improved performance and UI responsiveness. This includes platform-specific runners for both mobile/desktop (dart:io) and web (dart:html) via conditional imports, ensuring broad platform support. -
β¨ Sealed Class Migration: Migrated
DatumEntityandRelationalDatumEntityto aDatumEntityBasesealed class for enhanced type safety and to remove the need forsampleInstance. -
π New Facade Methods: Added a suite of new methods to the global
Datumfacade for easier data interaction:- Reactive Watching:
watchAll,watchById,watchQuery,watchRelated. - One-time Fetching:
query,fetchRelated. - Data & Sync Management:
getPendingCount,getPendingOperations,getStorageSize,watchStorageSize,getLastSyncResult,checkHealth. - Sync Control:
pauseSync,resumeSync.
- Reactive Watching:
β Tests#
-
π§ͺ Enhanced Core Tests: Added test cases for uninitialized state errors,
statusForUser,allHealths, and relational method behavior. Introduced aCustomManagerConfigfor easier mock manager injection in tests.
β»οΈ Refactors & π§Ή Chores#
-
β»οΈ Isolate Helper Improvements:
- Replaced conditional imports with platform-specific implementations.
- Removed
isolate_helper.dartandisolate_helper_unsupported.dart. - Added
_isolate_helper_io.dartfor IO platforms. - Updated
_isolate_helper_web.dartto use synchronous JSON encoding. - Updated
datum_sync_engine.dartto use the new isolate helper. - Removed unused imports in
test.dart,adapter_test.dart,relational_data_test.dart,relational_data_integration_test.dart,mock_adapters.dart, andtest_entity.dart. - Updated
isolate_helper_test.dartto use the new isolate helper.
-
ποΈ Removed
sampleInstance: ThesampleInstanceproperty onLocalAdapteris no longer needed due to the sealed class migration and has been removed. -
π©Ί Renamed
AdapterHealthStatus.oktoAdapterHealthStatus.healthyfor better clarity. - π¦ Refactored internal imports to use the
datumpackage consistently. -
βοΈ Made
MigrationExecutorgeneric to improve type safety during migrations. -
πΊοΈ Added
DataSourceenum to explicitly specify the source for query operations.
0.0.5#
- Add docs link
0.0.4#
Features#
- Added support for funding and contributions.
Documentation#
- Added
CONTRIBUTING.mdandCODE_OF_CONDUCT.md. - Updated
README.mdwith funding and contribution sections. - Updated
README.mdto mention future support for multiple adapters for a single entity.
Chores#
- β¨ chore(analysis): apply linter and formatter rules
- enable recommended linter rules for code quality
- set formatter rules for consistent code style
- ignore non_constant_identifier_names error
0.0.3#
π docs(readme): enhance architecture diagrams in README
update architecture diagrams for better clarity
improve image display using
tag for alignment
0.0.2#
- Update readme to add images correctly
0.0.1#
- Initial release π