The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
* Add XXXBuilder to help modify class-bound object (no need for struct-bound object), you can write `let xx = XXBuilder(x); xx.key = value; xx.build()` like you would in Obj-C. It is not Swifty, but useful to avoid some class of errors.
* Relax condition on workspace.dictionary so as long as workspace is mutable, you can now write `workspace.dictionary["somekey"] = somevalue`, this feels more ergonomic.
* Update flatbuffers dependency to latest.
* Add support to move to "ROLLBACK" again, and potentially vacuum. This helps if you want to use the result SQLite file as a single-file and move it around.
* Support observation for dictionary, so you can `workspace.dictionary.subscribe("key") { update in ... }`. There could still be some ergonomic improvements, but this helps your code to be more streamlined (i.e. having UI update all derived from observation).
* Updated for Swift 5.6
* Updated to latest flatbuffers (https://github.com/google/flatbuffers/commit/11a19887053534c43f73e74786b46a615ecbf28e)
* Updated to newer apollo-ios (https://github.com/apollographql/apollo-ios/commit/51c81bd69c8c2ab8f28c01a413f15b503d2a4a44)
* Updated SQLite (for non-Apple platforms) to 3.38.5
* Added light-weight in-tree documentation through Swift DocC: https://liuliu.github.io/dflat
* Added `func shutdown() async`, which effectively the same as `func shutdown()` just doesn't blocking the thread (simply yielding to the async runtime), i.e. more async friendly.
* Fixed the return `AsyncStream` from `subscribe` method doesn't respect `bufferingPolicy` passed in.
* Fixed another bug in `WorkspaceDictionary` that `keys` will show keys haven't finished deleting from underlying storage yet.
* `removeAll` in `WorkspaceDictionary` doesn't block on disk any more.
* Added `AsyncSequence` support for observing individual objects or `FetchedResult`.
* Fixed Linux compilation issues with Swift 5.5 (`SwiftGlibc` module cannot be found).
* Fixed a bug in `WorkspaceDictionary.keys` that will show deleted keys
* Added `WorkspaceDictionary.removeAll()`. This should be faster than iterating through keys and remove each of them.
* Added `await` interface for `Workspace.performChanges`
* Support specify type when accessing `WorkspaceDictionary`, for example: `dictionary["someKey", Int.self]`
* Updated with benchmarks for `WorkspaceDictionary`
## New Features
* Added `WorkspaceDictionary` which you can access from `Workspace.dictionary`, an easy way to persist some data through key-value pairs.
* Added `dflat_graphql` Bazel rule that takes GraphQL schemas and generate FlatBuffers schema that can be persisted with Dflat, this is only compatible with Apollo GraphQL's Swift code.
* Added `./dflatc.py graphql` to achieve above without using Bazel rule.
* Added new OrderBy primitive: `, orderBy: [someArray.firstIndex(of: Object.property)]`, this is more useful when you do `xxx.in(someArray)` to enforce ordering for the returned result array.
* Allow FlatBuffers schemas without `root_type`. These will generate struct conforms to `FlatBuffersCodable`, which can be persisted with `WorkspaceDictionary` using FlatBuffers rather than Swift Codable protocol (binary plist).
* Allow using `from(data: Data) -> Self` and `toData() -> Data` to encode objects into Data objects directly. This enables not only persist data with Dflat, but passing Dflat objects over the wire.
* Support explicit version string in FlatBuffers schema. This takes the form `table objectName (v: "a_version_string") {}`. This allows incompatible changes in FlatBuffers schema by having new tables with the version string encoded.
## Updates
* Updated to FlatBuffers 2.0.1.
* Updated to Swift Atomics 1.0.1
* Updated to SQLite 3.36.0 (for Linux)
## Bug Fixes
* Fixed a strict serializable issue because we didn't coordinate concurrent queue properly: https://github.com/liuliu/dflat/commit/97392ed6a425f9b00a4f85dd196ea7aac99693c7
* Fixed unbalanced semaphore usage when exiting (@siyuyue): https://github.com/liuliu/dflat/commit/a5873b33d9a181a32c2e7a6f81d3aae57f0cfa0f
* Fixed upsert not updating object: https://github.com/liuliu/dflat/commit/033150d7e9c53ddb6e698d9384893b606415123c
* Fixed `in` query crashes with exact-1 element array: https://github.com/liuliu/dflat/commit/96dc2f660346ee5a9f53a65e9d620f3b01a1e850
## CI
* Moved to GitHub Action, with 4 variants: macos-spm, macos-bazel, ubuntu-spm, ubuntu-bazel
* Fixed a flaky test with Combine: https://github.com/liuliu/dflat/commit/9f5491f6216314c136f609dda783db0c8a9e5fcb
* Fix the identifier for subscription can be a reused / boxed object under Linux.
* Use https://github.com/apple/swift-atomics
* Support Linux
* Change `Workspace.shutdown()` to block until all writes done before return. If a completion closure provided, this will be asynchronous still.