@tanstack/db 0.5.24 → 0.5.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/collection/change-events.cjs +1 -1
- package/dist/cjs/collection/change-events.cjs.map +1 -1
- package/dist/cjs/collection/changes.cjs +6 -1
- package/dist/cjs/collection/changes.cjs.map +1 -1
- package/dist/cjs/collection/lifecycle.cjs +11 -0
- package/dist/cjs/collection/lifecycle.cjs.map +1 -1
- package/dist/cjs/collection/subscription.cjs +18 -5
- package/dist/cjs/collection/subscription.cjs.map +1 -1
- package/dist/cjs/collection/subscription.d.cts +7 -1
- package/dist/cjs/indexes/base-index.cjs.map +1 -1
- package/dist/cjs/indexes/base-index.d.cts +10 -6
- package/dist/cjs/indexes/btree-index.cjs +64 -24
- package/dist/cjs/indexes/btree-index.cjs.map +1 -1
- package/dist/cjs/indexes/btree-index.d.cts +31 -9
- package/dist/cjs/indexes/reverse-index.cjs +6 -0
- package/dist/cjs/indexes/reverse-index.cjs.map +1 -1
- package/dist/cjs/indexes/reverse-index.d.cts +4 -2
- package/dist/cjs/query/live/collection-config-builder.cjs +4 -1
- package/dist/cjs/query/live/collection-config-builder.cjs.map +1 -1
- package/dist/cjs/query/live/collection-subscriber.cjs +111 -30
- package/dist/cjs/query/live/collection-subscriber.cjs.map +1 -1
- package/dist/cjs/query/live/collection-subscriber.d.cts +5 -0
- package/dist/cjs/types.d.cts +16 -0
- package/dist/cjs/utils/comparison.cjs +16 -0
- package/dist/cjs/utils/comparison.cjs.map +1 -1
- package/dist/cjs/utils/comparison.d.cts +21 -0
- package/dist/esm/collection/change-events.js +1 -1
- package/dist/esm/collection/change-events.js.map +1 -1
- package/dist/esm/collection/changes.js +6 -1
- package/dist/esm/collection/changes.js.map +1 -1
- package/dist/esm/collection/lifecycle.js +11 -0
- package/dist/esm/collection/lifecycle.js.map +1 -1
- package/dist/esm/collection/subscription.d.ts +7 -1
- package/dist/esm/collection/subscription.js +18 -5
- package/dist/esm/collection/subscription.js.map +1 -1
- package/dist/esm/indexes/base-index.d.ts +10 -6
- package/dist/esm/indexes/base-index.js.map +1 -1
- package/dist/esm/indexes/btree-index.d.ts +31 -9
- package/dist/esm/indexes/btree-index.js +65 -25
- package/dist/esm/indexes/btree-index.js.map +1 -1
- package/dist/esm/indexes/reverse-index.d.ts +4 -2
- package/dist/esm/indexes/reverse-index.js +6 -0
- package/dist/esm/indexes/reverse-index.js.map +1 -1
- package/dist/esm/query/live/collection-config-builder.js +4 -1
- package/dist/esm/query/live/collection-config-builder.js.map +1 -1
- package/dist/esm/query/live/collection-subscriber.d.ts +5 -0
- package/dist/esm/query/live/collection-subscriber.js +112 -31
- package/dist/esm/query/live/collection-subscriber.js.map +1 -1
- package/dist/esm/types.d.ts +16 -0
- package/dist/esm/utils/comparison.d.ts +21 -0
- package/dist/esm/utils/comparison.js +16 -0
- package/dist/esm/utils/comparison.js.map +1 -1
- package/package.json +1 -1
- package/src/collection/change-events.ts +1 -1
- package/src/collection/changes.ts +6 -1
- package/src/collection/lifecycle.ts +14 -0
- package/src/collection/subscription.ts +38 -10
- package/src/indexes/base-index.ts +19 -6
- package/src/indexes/btree-index.ts +101 -30
- package/src/indexes/reverse-index.ts +13 -2
- package/src/query/live/collection-config-builder.ts +4 -5
- package/src/query/live/collection-subscriber.ts +173 -50
- package/src/types.ts +16 -0
- package/src/utils/comparison.ts +34 -0
package/src/types.ts
CHANGED
|
@@ -809,6 +809,22 @@ export interface SubscribeChangesOptions<
|
|
|
809
809
|
* @internal
|
|
810
810
|
*/
|
|
811
811
|
onStatusChange?: (event: SubscriptionStatusChangeEvent) => void
|
|
812
|
+
/**
|
|
813
|
+
* Optional orderBy to include in loadSubset for query-specific cache keys.
|
|
814
|
+
* @internal
|
|
815
|
+
*/
|
|
816
|
+
orderBy?: OrderBy
|
|
817
|
+
/**
|
|
818
|
+
* Optional limit to include in loadSubset for query-specific cache keys.
|
|
819
|
+
* @internal
|
|
820
|
+
*/
|
|
821
|
+
limit?: number
|
|
822
|
+
/**
|
|
823
|
+
* Callback that receives the loadSubset result (Promise or true) from requestSnapshot.
|
|
824
|
+
* Allows the caller to directly track the loading promise for isReady status.
|
|
825
|
+
* @internal
|
|
826
|
+
*/
|
|
827
|
+
onLoadSubsetResult?: (result: Promise<void> | true) => void
|
|
812
828
|
}
|
|
813
829
|
|
|
814
830
|
export interface SubscribeChangesSnapshotOptions<
|
package/src/utils/comparison.ts
CHANGED
|
@@ -134,10 +134,20 @@ function areUint8ArraysEqual(a: Uint8Array, b: Uint8Array): boolean {
|
|
|
134
134
|
*/
|
|
135
135
|
const UINT8ARRAY_NORMALIZE_THRESHOLD = 128
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Sentinel value representing undefined in normalized form.
|
|
139
|
+
* This allows distinguishing between "start from beginning" (undefined parameter)
|
|
140
|
+
* and "start from the key undefined" (actual undefined value in the tree).
|
|
141
|
+
*/
|
|
142
|
+
export const UNDEFINED_SENTINEL = `__TS_DB_BTREE_UNDEFINED_VALUE__`
|
|
143
|
+
|
|
137
144
|
/**
|
|
138
145
|
* Normalize a value for comparison and Map key usage
|
|
139
146
|
* Converts values that can't be directly compared or used as Map keys
|
|
140
147
|
* into comparable primitive representations
|
|
148
|
+
*
|
|
149
|
+
* Note: This does NOT convert undefined to a sentinel. Use normalizeForBTree
|
|
150
|
+
* for BTree index operations that need to distinguish undefined values.
|
|
141
151
|
*/
|
|
142
152
|
export function normalizeValue(value: any): any {
|
|
143
153
|
if (value instanceof Date) {
|
|
@@ -164,6 +174,30 @@ export function normalizeValue(value: any): any {
|
|
|
164
174
|
return value
|
|
165
175
|
}
|
|
166
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Normalize a value for BTree index usage.
|
|
179
|
+
* Extends normalizeValue to also convert undefined to a sentinel value.
|
|
180
|
+
* This is needed because the BTree does not properly support `undefined` as a key
|
|
181
|
+
* (it interprets undefined as "start from beginning" in nextHigherPair/nextLowerPair).
|
|
182
|
+
*/
|
|
183
|
+
export function normalizeForBTree(value: any): any {
|
|
184
|
+
if (value === undefined) {
|
|
185
|
+
return UNDEFINED_SENTINEL
|
|
186
|
+
}
|
|
187
|
+
return normalizeValue(value)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Converts the `UNDEFINED_SENTINEL` back to `undefined`.
|
|
192
|
+
* Needed such that the sentinel is converted back to `undefined` before comparison.
|
|
193
|
+
*/
|
|
194
|
+
export function denormalizeUndefined(value: any): any {
|
|
195
|
+
if (value === UNDEFINED_SENTINEL) {
|
|
196
|
+
return undefined
|
|
197
|
+
}
|
|
198
|
+
return value
|
|
199
|
+
}
|
|
200
|
+
|
|
167
201
|
/**
|
|
168
202
|
* Compare two values for equality, with special handling for Uint8Arrays and Buffers
|
|
169
203
|
*/
|