@tanstack/db-ivm 0.1.24 → 0.1.26

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.
Files changed (77) hide show
  1. package/dist/cjs/d2.d.cts +3 -3
  2. package/dist/cjs/graph.d.cts +2 -2
  3. package/dist/cjs/hashing/index.d.cts +2 -2
  4. package/dist/cjs/index.cjs +42 -42
  5. package/dist/cjs/index.d.cts +6 -6
  6. package/dist/cjs/indexes.cjs +6 -3
  7. package/dist/cjs/indexes.cjs.map +1 -1
  8. package/dist/cjs/indexes.d.cts +38 -8
  9. package/dist/cjs/multiset.cjs +12 -4
  10. package/dist/cjs/multiset.cjs.map +1 -1
  11. package/dist/cjs/multiset.d.cts +9 -4
  12. package/dist/cjs/operators/concat.d.cts +2 -2
  13. package/dist/cjs/operators/consolidate.d.cts +2 -2
  14. package/dist/cjs/operators/count.cjs.map +1 -1
  15. package/dist/cjs/operators/count.d.cts +11 -5
  16. package/dist/cjs/operators/debug.d.cts +2 -2
  17. package/dist/cjs/operators/distinct.d.cts +2 -2
  18. package/dist/cjs/operators/filter.d.cts +3 -3
  19. package/dist/cjs/operators/filterBy.cjs.map +1 -1
  20. package/dist/cjs/operators/filterBy.d.cts +2 -2
  21. package/dist/cjs/operators/groupBy.cjs.map +1 -1
  22. package/dist/cjs/operators/groupBy.d.cts +5 -2
  23. package/dist/cjs/operators/groupedOrderBy.d.cts +8 -2
  24. package/dist/cjs/operators/groupedTopKWithFractionalIndex.d.cts +34 -7
  25. package/dist/cjs/operators/index.d.cts +21 -21
  26. package/dist/cjs/operators/join.cjs.map +1 -1
  27. package/dist/cjs/operators/join.d.cts +49 -10
  28. package/dist/cjs/operators/keying.d.cts +5 -2
  29. package/dist/cjs/operators/map.d.cts +3 -3
  30. package/dist/cjs/operators/negate.d.cts +3 -3
  31. package/dist/cjs/operators/orderBy.d.cts +20 -5
  32. package/dist/cjs/operators/output.d.cts +3 -3
  33. package/dist/cjs/operators/pipe.d.cts +1 -1
  34. package/dist/cjs/operators/reduce.cjs.map +1 -1
  35. package/dist/cjs/operators/reduce.d.cts +29 -5
  36. package/dist/cjs/operators/tap.d.cts +3 -3
  37. package/dist/cjs/operators/topK.cjs.map +1 -1
  38. package/dist/cjs/operators/topK.d.cts +5 -2
  39. package/dist/cjs/operators/topKArray.d.cts +11 -2
  40. package/dist/cjs/operators/topKState.d.cts +44 -8
  41. package/dist/cjs/operators/topKWithFractionalIndex.d.cts +41 -8
  42. package/dist/cjs/operators/topKWithFractionalIndexBTree.d.cts +20 -5
  43. package/dist/cjs/types.d.cts +6 -3
  44. package/dist/cjs/utils.cjs +9 -7
  45. package/dist/cjs/utils.cjs.map +1 -1
  46. package/dist/cjs/utils.d.cts +7 -4
  47. package/dist/esm/index.js +15 -15
  48. package/dist/esm/indexes.js +6 -3
  49. package/dist/esm/indexes.js.map +1 -1
  50. package/dist/esm/multiset.d.ts +1 -2
  51. package/dist/esm/multiset.js +12 -4
  52. package/dist/esm/multiset.js.map +1 -1
  53. package/dist/esm/operators/count.d.ts +1 -1
  54. package/dist/esm/operators/count.js.map +1 -1
  55. package/dist/esm/operators/filterBy.d.ts +1 -1
  56. package/dist/esm/operators/filterBy.js.map +1 -1
  57. package/dist/esm/operators/groupBy.js.map +1 -1
  58. package/dist/esm/operators/join.d.ts +6 -6
  59. package/dist/esm/operators/join.js.map +1 -1
  60. package/dist/esm/operators/reduce.d.ts +1 -1
  61. package/dist/esm/operators/reduce.js.map +1 -1
  62. package/dist/esm/operators/topK.d.ts +2 -2
  63. package/dist/esm/operators/topK.js.map +1 -1
  64. package/dist/esm/operators/topKArray.js +1 -1
  65. package/dist/esm/utils.d.ts +3 -3
  66. package/dist/esm/utils.js +9 -7
  67. package/dist/esm/utils.js.map +1 -1
  68. package/package.json +2 -2
  69. package/src/indexes.ts +8 -3
  70. package/src/multiset.ts +13 -7
  71. package/src/operators/count.ts +2 -2
  72. package/src/operators/filterBy.ts +1 -1
  73. package/src/operators/groupBy.ts +1 -2
  74. package/src/operators/join.ts +6 -6
  75. package/src/operators/reduce.ts +2 -2
  76. package/src/operators/topK.ts +4 -4
  77. package/src/utils.ts +14 -10
@@ -29,8 +29,8 @@ export class CountOperator<K, V> extends ReduceOperator<K, V, number> {
29
29
  * Counts the number of elements by key (version-free)
30
30
  */
31
31
  export function count<
32
- KType extends T extends KeyValue<infer K, infer _V> ? K : never,
33
- VType extends T extends KeyValue<KType, infer V> ? V : never,
32
+ KType extends (T extends KeyValue<infer K, infer _V> ? K : never),
33
+ VType extends (T extends KeyValue<KType, infer V> ? V : never),
34
34
  T,
35
35
  >() {
36
36
  return (
@@ -12,7 +12,7 @@ import type { IStreamBuilder, KeyValue, PipedOperator } from '../types.js'
12
12
  */
13
13
  export function filterBy<
14
14
  K,
15
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
15
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
16
16
  T,
17
17
  >(
18
18
  other: IStreamBuilder<KeyValue<K, unknown>>,
@@ -16,8 +16,7 @@ type PipedAggregateFunction<T, R> = {
16
16
  }
17
17
 
18
18
  type AggregateFunction<T, R, V = unknown> =
19
- | BasicAggregateFunction<T, R, V>
20
- | PipedAggregateFunction<T, R>
19
+ BasicAggregateFunction<T, R, V> | PipedAggregateFunction<T, R>
21
20
 
22
21
  type ExtractAggregateReturnType<T, A> =
23
22
  A extends AggregateFunction<T, infer R, any> ? R : never
@@ -254,7 +254,7 @@ export class JoinOperator<K, V1, V2> extends BinaryOperator<
254
254
  */
255
255
  export function join<
256
256
  K,
257
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
257
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
258
258
  V2,
259
259
  T,
260
260
  >(
@@ -289,7 +289,7 @@ export function join<
289
289
  */
290
290
  export function innerJoin<
291
291
  K,
292
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
292
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
293
293
  V2,
294
294
  T,
295
295
  >(
@@ -307,7 +307,7 @@ export function innerJoin<
307
307
  */
308
308
  export function antiJoin<
309
309
  K,
310
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
310
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
311
311
  V2,
312
312
  T,
313
313
  >(
@@ -325,7 +325,7 @@ export function antiJoin<
325
325
  */
326
326
  export function leftJoin<
327
327
  K,
328
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
328
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
329
329
  V2,
330
330
  T,
331
331
  >(
@@ -343,7 +343,7 @@ export function leftJoin<
343
343
  */
344
344
  export function rightJoin<
345
345
  K,
346
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
346
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
347
347
  V2,
348
348
  T,
349
349
  >(
@@ -361,7 +361,7 @@ export function rightJoin<
361
361
  */
362
362
  export function fullJoin<
363
363
  K,
364
- V1 extends T extends KeyValue<infer _KT, infer VT> ? VT : never,
364
+ V1 extends (T extends KeyValue<infer _KT, infer VT> ? VT : never),
365
365
  V2,
366
366
  T,
367
367
  >(
@@ -101,8 +101,8 @@ export class ReduceOperator<K, V1, V2> extends UnaryOperator<[K, V1], [K, V2]> {
101
101
  * Reduces the elements in the stream by key (version-free)
102
102
  */
103
103
  export function reduce<
104
- KType extends T extends KeyValue<infer K, infer _V> ? K : never,
105
- V1Type extends T extends KeyValue<KType, infer V> ? V : never,
104
+ KType extends (T extends KeyValue<infer K, infer _V> ? K : never),
105
+ V1Type extends (T extends KeyValue<KType, infer V> ? V : never),
106
106
  R,
107
107
  T,
108
108
  >(f: (values: Array<[V1Type, number]>) => Array<[R, number]>) {
@@ -19,8 +19,8 @@ interface TopKOptions {
19
19
  * @returns A piped operator that limits the number of results
20
20
  */
21
21
  export function topK<
22
- KType extends T extends KeyValue<infer K, infer _V> ? K : never,
23
- V1Type extends T extends KeyValue<KType, infer V> ? V : never,
22
+ KType extends (T extends KeyValue<infer K, infer _V> ? K : never),
23
+ V1Type extends (T extends KeyValue<KType, infer V> ? V : never),
24
24
  T,
25
25
  >(
26
26
  comparator: (a: V1Type, b: V1Type) => number,
@@ -57,8 +57,8 @@ export function topK<
57
57
  * @returns A piped operator that orders the elements and limits the number of results
58
58
  */
59
59
  export function topKWithIndex<
60
- KType extends T extends KeyValue<infer K, infer _V> ? K : never,
61
- V1Type extends T extends KeyValue<KType, infer V> ? V : never,
60
+ KType extends (T extends KeyValue<infer K, infer _V> ? K : never),
61
+ V1Type extends (T extends KeyValue<KType, infer V> ? V : never),
62
62
  T,
63
63
  >(
64
64
  comparator: (a: V1Type, b: V1Type) => number,
package/src/utils.ts CHANGED
@@ -50,20 +50,24 @@ export function binarySearch<T>(
50
50
  return low
51
51
  }
52
52
 
53
- const objectIds = new WeakMap<object, number>()
54
- let nextObjectId = 0
55
-
56
53
  /**
57
- * A string identity for composite keys: primitives by value, objects by
58
- * reference.
54
+ * A string identity within one consolidation: primitives by value, objects,
55
+ * functions, and symbols by identity.
59
56
  */
60
- export function getStringId(value: unknown): string {
57
+ export function getStringId(
58
+ value: unknown,
59
+ referenceIds: Map<object | symbol, number>,
60
+ ): string {
61
61
  if (value === null) return `null`
62
62
  if (value === undefined) return `undefined`
63
- if (typeof value !== `object`) return `str_${String(value)}`
64
- let id = objectIds.get(value)
65
- if (id === undefined) objectIds.set(value, (id = nextObjectId++))
66
- return `obj_${id}`
63
+ const type = typeof value
64
+ if (type === `object` || type === `function` || type === `symbol`) {
65
+ const reference = value as object | symbol
66
+ let id = referenceIds.get(reference)
67
+ if (id === undefined) referenceIds.set(reference, (id = referenceIds.size))
68
+ return `ref_${id}`
69
+ }
70
+ return `${type}_${String(value)}`
67
71
  }
68
72
 
69
73
  export function* concatIterable<T>(