Skip to content

Releases: pubkey/rxdb

17.2.0

04 May 13:44

Choose a tag to compare

JavaScript Database

  • ADD React useRxDocument(collection, primaryKey) hook for subscribing to a single document by primary key with live updates
  • ADD React useReplicationStatus(replicationState) hook that exposes syncing, error, lastSyncedAt, and canceled from replication observables
  • DOCS Mark liveQueryUpdateThrottleTime as a beta feature in the documentation
  • DOCS Move the main liveQueryUpdateThrottleTime documentation to rx-query.md; rx-database.md and rx-collection.md now only list the option with a short description and a link
  • FIX allAttachments$ observable emitting a new value on every document revision even when the set of attachments is unchanged, by filtering emissions with distinctUntilChanged based on attachment ids and digests
  • FIX RxAttachment.remove() not cleaning up binary attachment data from storage, because categorizeBulkWriteRows() only iterated over the new document's _attachments and never detected attachments removed between revisions
  • FIX attachments-compression isCompressibleType() not stripping RFC 2045 parameters (e.g. ; charset=utf-8) from MIME types, causing attachments with a charset-qualified type like application/json; charset=utf-8 to silently bypass compression when matched against exact patterns like application/json
  • FIX backup plugin not removing the folder of a deleted document when the change batch only contained deletions, because findByIds() returned an empty map and the loop exited early before running the deletion handler
  • FIX RxCollection.cleanup() returning undefined instead of boolean as declared by its TypeScript return type, because the cleanup plugin implementation did not return the result from cleanupRxCollection()
  • FIX CRDT plugin bulkInsert hook not including the composite primary key in CRDT operations, causing the primary key field to be lost during conflict resolution rebuild for schemas that use a composite primary key
  • ADD dev-mode check (SC43) to prevent encrypted fields from being nested inside other encrypted fields. When a parent path is encrypted, the entire object is encrypted so child paths must not be listed separately in the encrypted array.
  • FIX findByIds() query operations modify(), patch(), incrementalModify(), incrementalPatch(), and incrementalRemove() returning an Array instead of a Map. Also fix findByIds().remove() crashing with TypeError: docs.remove is not a function because it did not handle the Map return type from findByIds().
  • FIX getJsonSchemaWithoutMeta() not removing internal meta field references (_deleted, _meta.lwt) from indexes, while correctly removing them from properties and required, causing the returned schema to be internally inconsistent
  • FIX getLocal() returning a deleted local document from the document cache instead of null, causing inconsistent behavior between cache hits and storage lookups after a local document is removed
  • FIX replication-google-drive plugin requesting etag in the Google Drive v3 list API fields parameter, which is rejected by the real API; etag is now fetched separately via the v2 API
  • FIX RxLocalDocument.get$() on nested object/array paths emitting spurious values when unrelated document fields changed, because distinctUntilChanged() used reference equality which always fails for non-primitive values across document revisions
  • FIX database-level RxLocalDocument.$ observable emitting events from a collection-level local document that shares the same id, because the filter on the database event stream only checked isLocal and did not exclude events that originated from a collection
  • FIX localstorage storage remove() not deleting attachment data from localStorage, causing orphaned attachment entries to remain after the storage instance is removed
  • FIX schema migration not forwarding _attachments across chained migration strategies, so later strategies received the document with _attachments as undefined when an earlier strategy returned a new object without forwarding them, breaking the WithAttachments<DocData> contract and preventing strategies from reading or mutating attachment metadata as described in the docs
  • FIX schema migration losing attachments when the migration strategy returns a new object, because migrateDocumentData() never restored _attachments after running the strategies while _meta and _deleted were restored
  • FIX RxMigrationState.migratePromise() returning count.percent: 0 instead of 100 when the migration status is DONE and no migration was needed, which is inconsistent with the updateStatus() logic that correctly sets percent to 100 when total is 0
  • FIX ORM attachment-method names conflicting with built-in RxAttachment methods (getData, getStringData, getDataBase64, remove) not being validated, silently shadowing the built-in method on every attachment instance and preventing users from retrieving their attachment data. Dev-mode now throws a clear RxError (COL17) during collection creation.
  • FIX ORM document method names conflicting with schema-generated suffixed getters (field$, field$$, field_) not being validated, causing a TypeError crash at runtime instead of a clear RxError (COL18) during collection creation
  • FIX RxDatabase.password being an enumerable property, which could leak the plaintext password through Object.keys(), object spreading, Object.assign(), or JSON.stringify() in logging and error reporting contexts
  • FIX RxPipeline error state blocking unrelated reads on the destination collection, because the pipeline's waitBeforeWriteFn hook always called awaitIdle() which re-throws the stored handler error forever. After a handler throws, reads on the destination collection now proceed normally instead of re-throwing the pipeline error.
  • FIX RxPipeline deadlock when multiple pipelines share the same destination collection and their handlers read from the destination, because each pipeline's waitBeforeWriteFn only recognized its own flagged function name in the stack instead of any pipeline's flagged function prefix
  • FIX RxDocument.populate() throwing DOC6 for array fields when ref is defined on items instead of on the array field itself, even though createRxSchema accepts both patterns
  • FIX RxDocument.populate() silently returning null for invalid schema paths and non-ref fields when the value at that path was falsy. The documented DOC5 / DOC6 errors are now thrown consistently, regardless of whether the document has a value at the given path.
  • FIX populate() on array ref fields returning documents in wrong order when two documents reference the same set of IDs in different order, because findByIds query cache deduplication reused a cached query whose Map iteration order matched the first caller instead of preserving each document's own ref array order
  • FIX query-builder operators (gt, lt, ne, in, etc.) silently dropping the implicit $eq condition when a selector shorthand value (e.g. { age: 5 }) was used and then another operator was chained on the same field via the query-builder API
  • FIX default cache replacement policy not evicting executed unsubscribed queries when subscribed queries caused the total cache size to exceed tryToKeepMax, because the eviction count was calculated from only the unsubscribed query count instead of the total cache size
  • FIX React hooks useRxQuery and useLiveRxQuery initializing loading state as false instead of true, causing components to briefly render with empty results before the query resolved #8292
  • FIX remote storage remove() not unsubscribing from internal subscriptions and not completing the changeStream() observable, unlike close() which correctly performs both cleanup steps
  • FIX replication upstream marking documents as successfully pushed when the replication is paused during a push retry, because masterWrite() returns an empty conflicts array on pause and the upstream updates the meta instance and checkpoint without verifying the push actually succeeded, causing those documents to never be retried on resume
  • FIX replication sent$ observable emitting documents in the master format (with the user-defined deletedField) instead of the typed WithDeleted<RxDocType> format (with _deleted: boolean), because the deletedField swap mutated the same row object that was later forwarded to subscribers
  • FIX replication sent$ observable emitting null for documents that were filtered out by a push.modifier returning null, violating its Observable<WithDeleted<RxDocType>> type and falsely reporting filtered documents as sent to the endpoint
  • FIX RxState _cleanup() not returning true on completion, causing the cleanup plugin loop to never terminate and run indefinitely
  • FIX RxState $ observable emitting duplicate and stale values on each write because both _ownEmits$ and collection.eventBulks$ triggered emissions for own-instance events
  • FIX RxState.get$() (and the field$ proxy accessor) emitting a stale value when subscribed after the state was modified, because startWith() eagerly captured the current value at observable creation time instead of at subscription time
  • FIX(types) RxDocument.collection losing the Reactivity generic because it was passed as the third type argument to RxCollection (which is StaticMethods) instead of the fifth, causing doc.collection.find().$$ and similar calls to be typed as the default reactivity instead of the user's custom reactivity type
  • FIX RxDocument.$ observable emitting stale document state when subscribed after the document was modified, because `startW...
Read more

17.1.0

02 Apr 14:26

Choose a tag to compare

JavaScript Database

  • FIX CRDT plugin bulkInsert hook not including schema default values in CRDT operations, causing data loss during conflict resolution rebuild when fields rely on schema defaults

  • FIX RxDocument.get$() on nested object/array paths emitting spurious values when unrelated document fields changed, because distinctUntilChanged() used reference equality which always fails for non-primitive values across document revisions

  • FIX incrementalUpsert() throwing a CONFLICT error when a concurrent upsert()/insert() creates the same document between the internal findOne() and insert() calls

  • FIX upsertLocal() on a previously removed local document keeping the document in deleted state instead of un-deleting it

  • FIX push-only replication losing local writes that occur during a pause because reSync() events were filtered out when no pull handler was configured

  • FIX getStartIndexStringFromUpperBound() incorrectly mapping INDEX_MIN to '1' for boolean index fields, causing queries with exclusive bounds ($gt/$lt) on a field preceding a boolean index field to include boundary documents in the results

  • FIX leader-election plugin not calling die() on the LeaderElector when the database is closed, because LEADER_ELECTORS_OF_DB was never populated due to a dead code branch

  • FIX encryption plugin schema transformation not correctly handling nested dot-notation encrypted paths (e.g. 'nested.field'), causing validation failures when using a validator storage with non-string nested encrypted fields

  • FIX dev-mode checkSchema() not validating composite primary key fields for encryption (SC15), index (SC13), unique (SC14), and type (SC16) constraints because it compared property names against the primaryKey object instead of resolving the primary field path

  • FIX findOne().remove() crashing with TypeError: Cannot read properties of null when no document matches the query, instead of returning null

  • ADD findOne().remove(true) to throw when no document matches, consistent with findOne().exec(true)

  • FIX schema migration losing _deleted state when migration strategy returns a new object, causing deleted documents to be resurrected after migration

  • FIX RxPipeline.remove() not properly cleaning up checkpoint when called during active processing, causing a re-added pipeline with the same identifier to skip already-processed documents instead of starting fresh

  • FIX cleanup plugin prematurely exiting its retry loop when storageInstance.cleanup() returns false (batched cleanup), because Array.find() returns the found value false and !false evaluates to true, causing isDone to be set incorrectly

  • FIX encryption plugin validatePassword() leaking the plaintext password in RxError parameters and error messages when password validation fails

  • FIX database.remove() not calling collection onRemove handlers, because close() unsubscribed all listeners before the remove operation could trigger them

  • FIX query-builder eq()/equals() silently overwriting other operator conditions on the same field because the value was stored as a raw primitive instead of using the $eq operator form

  • FIX deleted$ observable emitting on every document revision instead of only when the deleted state changes, by adding distinctUntilChanged()

  • FIX postSave collection hook not receiving the RxDocument instance as the second argument, unlike postInsert and postRemove which correctly pass it

  • FIX getJsonSchemaWithoutMeta() not removing _rev from schema properties, while correctly removing other internal meta properties (_deleted, _meta, _attachments)

  • FIX allAttachments$ observable emitting attachments with a stale document reference, causing attachment.doc to point to an outdated document version instead of the latest one

  • FIX RxState not correctly recovering full-state replacements (via set('', modifier)) from disk on database reopen, causing corrupted state

  • FIX memory storage count() returning incorrect results when the selector is not fully satisfied by the index and the query has a limit set

  • FIX replicateRxCollection().remove() on a never-started replication now creates the meta instance and deletes its data instead of skipping cleanup

  • FIX REPLICATION_STATE_BY_COLLECTION not cleaned up on cancel()/remove(), leaking replication state references

  • FIX floating-point rounding overflow in index string decimal generation, where Math.round could produce a value equal to the multiplier (e.g. 10 instead of max 9), creating a string one character too long and breaking sort order in compound indexes

  • FIX normalizeMangoQuery() skipped fully-matching indexes when choosing default sort order, falling back to the first index instead of using the best match

  • FIX RxState set('', modifier) passed undefined to the modifier instead of the current state

  • FIX RxMigrationStatus.count.percent returning NaN instead of 100 when migrating a collection with 0 documents

  • FIX fillWithDefaultSettings() index deduplication was broken because Array.filter() return value was discarded, causing duplicate indexes in schemas when user-defined indexes become identical after adding _deleted prefix and primary key suffix

  • FIX encryption plugin not stripping type-specific schema keywords (maxLength, required, items, etc.) from encrypted fields, causing validation errors when using a validator storage with encryption

  • FIX incorrect index string generation for negative decimal numbers causing wrong sort order and query results

  • FIX rateQueryPlan() evaluated startKeys twice instead of endKeys, causing suboptimal index selection for $lt/$lte queries.

  • FIX event-reduce mutating cached docsDataMap causing missing documents after insert-delete cycles

  • FIX modify() not deep-cloning document data, allowing the modifier to corrupt internal state via shared nested references

  • FIX fillObjectWithDefaults shared mutable references for non-primitive schema defaults (arrays/objects) causing corrupted values on subsequent inserts

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0

30 Mar 19:10

Choose a tag to compare

JavaScript Database

🚀 RxDB v15 is released

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.25

24 Mar 15:50

Choose a tag to compare

17.0.0-beta.25 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.24

24 Mar 09:54

Choose a tag to compare

17.0.0-beta.24 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.23

20 Mar 14:31

Choose a tag to compare

17.0.0-beta.23 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.22

20 Mar 09:36

Choose a tag to compare

17.0.0-beta.22 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.21

19 Mar 14:06

Choose a tag to compare

17.0.0-beta.21 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.20

18 Mar 09:57

Choose a tag to compare

17.0.0-beta.20 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB:

17.0.0-beta.18

15 Mar 12:07

Choose a tag to compare

17.0.0-beta.18 Pre-release
Pre-release

JavaScript Database

  • A list of changes for RxDB v17 can be found here

NOTICE: An overview about all releases can be found at the changelog

Join RxDB: