Releases: pubkey/rxdb
17.2.0
- ADD React
useRxDocument(collection, primaryKey)hook for subscribing to a single document by primary key with live updates - ADD React
useReplicationStatus(replicationState)hook that exposessyncing,error,lastSyncedAt, andcanceledfrom replication observables - DOCS Mark
liveQueryUpdateThrottleTimeas a beta feature in the documentation - DOCS Move the main
liveQueryUpdateThrottleTimedocumentation torx-query.md;rx-database.mdandrx-collection.mdnow 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 withdistinctUntilChangedbased on attachment ids and digests - FIX
RxAttachment.remove()not cleaning up binary attachment data from storage, becausecategorizeBulkWriteRows()only iterated over the new document's_attachmentsand 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 likeapplication/json; charset=utf-8to silently bypass compression when matched against exact patterns likeapplication/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()returningundefinedinstead ofbooleanas declared by its TypeScript return type, because the cleanup plugin implementation did not return the result fromcleanupRxCollection() - FIX CRDT plugin
bulkInserthook 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
encryptedarray. - FIX
findByIds()query operationsmodify(),patch(),incrementalModify(),incrementalPatch(), andincrementalRemove()returning an Array instead of a Map. Also fixfindByIds().remove()crashing withTypeError: docs.remove is not a functionbecause it did not handle the Map return type fromfindByIds(). - 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 ofnull, causing inconsistent behavior between cache hits and storage lookups after a local document is removed - FIX
replication-google-driveplugin requestingetagin the Google Drive v3 list APIfieldsparameter, 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, becausedistinctUntilChanged()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 checkedisLocaland 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
_attachmentsacross chained migration strategies, so later strategies received the document with_attachmentsasundefinedwhen an earlier strategy returned a new object without forwarding them, breaking theWithAttachments<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_attachmentsafter running the strategies while_metaand_deletedwere restored - FIX
RxMigrationState.migratePromise()returningcount.percent: 0instead of100when the migration status isDONEand no migration was needed, which is inconsistent with theupdateStatus()logic that correctly sets percent to100when total is0 - FIX ORM attachment-method names conflicting with built-in
RxAttachmentmethods (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 clearRxError(COL17) during collection creation. - FIX ORM document method names conflicting with schema-generated suffixed getters (
field$,field$$,field_) not being validated, causing aTypeErrorcrash at runtime instead of a clearRxError(COL18) during collection creation - FIX
RxDatabase.passwordbeing an enumerable property, which could leak the plaintext password throughObject.keys(), object spreading,Object.assign(), orJSON.stringify()in logging and error reporting contexts - FIX
RxPipelineerror state blocking unrelated reads on the destination collection, because the pipeline'swaitBeforeWriteFnhook always calledawaitIdle()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
RxPipelinedeadlock when multiple pipelines share the same destination collection and their handlers read from the destination, because each pipeline'swaitBeforeWriteFnonly recognized its own flagged function name in the stack instead of any pipeline's flagged function prefix - FIX
RxDocument.populate()throwingDOC6for array fields whenrefis defined onitemsinstead of on the array field itself, even thoughcreateRxSchemaaccepts both patterns - FIX
RxDocument.populate()silently returningnullfor invalid schema paths and non-ref fields when the value at that path was falsy. The documentedDOC5/DOC6errors 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, becausefindByIdsquery 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$eqcondition 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
useRxQueryanduseLiveRxQueryinitializingloadingstate asfalseinstead oftrue, 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 thechangeStream()observable, unlikeclose()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-defineddeletedField) instead of the typedWithDeleted<RxDocType>format (with_deleted: boolean), because thedeletedFieldswap mutated the same row object that was later forwarded to subscribers - FIX replication
sent$observable emittingnullfor documents that were filtered out by apush.modifierreturningnull, violating itsObservable<WithDeleted<RxDocType>>type and falsely reporting filtered documents as sent to the endpoint - FIX RxState
_cleanup()not returningtrueon 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$andcollection.eventBulks$triggered emissions for own-instance events - FIX
RxState.get$()(and thefield$proxy accessor) emitting a stale value when subscribed after the state was modified, becausestartWith()eagerly captured the current value at observable creation time instead of at subscription time - FIX(types)
RxDocument.collectionlosing theReactivitygeneric because it was passed as the third type argument toRxCollection(which isStaticMethods) instead of the fifth, causingdoc.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...
17.1.0
-
FIX CRDT plugin
bulkInserthook 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, becausedistinctUntilChanged()used reference equality which always fails for non-primitive values across document revisions -
FIX
incrementalUpsert()throwing a CONFLICT error when a concurrentupsert()/insert()creates the same document between the internalfindOne()andinsert()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 mappingINDEX_MINto'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, becauseLEADER_ELECTORS_OF_DBwas 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 withTypeError: Cannot read properties of nullwhen no document matches the query, instead of returningnull -
ADD
findOne().remove(true)to throw when no document matches, consistent withfindOne().exec(true) -
FIX schema migration losing
_deletedstate 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()returnsfalse(batched cleanup), becauseArray.find()returns the found valuefalseand!falseevaluates totrue, causingisDoneto be set incorrectly -
FIX encryption plugin
validatePassword()leaking the plaintext password inRxErrorparameters and error messages when password validation fails -
FIX
database.remove()not calling collectiononRemovehandlers, becauseclose()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$eqoperator form -
FIX
deleted$observable emitting on every document revision instead of only when the deleted state changes, by addingdistinctUntilChanged() -
FIX
postSavecollection hook not receiving the RxDocument instance as the second argument, unlikepostInsertandpostRemovewhich correctly pass it -
FIX
getJsonSchemaWithoutMeta()not removing_revfrom schema properties, while correctly removing other internal meta properties (_deleted,_meta,_attachments) -
FIX
allAttachments$observable emitting attachments with a stale document reference, causingattachment.docto 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 alimitset -
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_COLLECTIONnot cleaned up oncancel()/remove(), leaking replication state references -
FIX floating-point rounding overflow in index string decimal generation, where
Math.roundcould 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)passedundefinedto the modifier instead of the current state -
FIX
RxMigrationStatus.count.percentreturningNaNinstead of100when migrating a collection with 0 documents -
FIX
fillWithDefaultSettings()index deduplication was broken becauseArray.filter()return value was discarded, causing duplicate indexes in schemas when user-defined indexes become identical after adding_deletedprefix 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()evaluatedstartKeystwice instead ofendKeys, causing suboptimal index selection for$lt/$ltequeries. -
FIX event-reduce mutating cached
docsDataMapcausing 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
fillObjectWithDefaultsshared 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
🚀 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
- 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
- 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
- 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
- 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
- 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
- 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
- A list of changes for RxDB v17 can be found here
NOTICE: An overview about all releases can be found at the changelog