@tanstack/db-ivm 0.1.13 → 0.1.14

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 (99) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/d2.cjs.map +1 -1
  3. package/dist/cjs/graph.cjs.map +1 -1
  4. package/dist/cjs/hashing/hash.cjs.map +1 -1
  5. package/dist/cjs/index.cjs +2 -0
  6. package/dist/cjs/index.cjs.map +1 -1
  7. package/dist/cjs/index.d.cts +1 -0
  8. package/dist/cjs/indexes.cjs.map +1 -1
  9. package/dist/cjs/multiset.cjs.map +1 -1
  10. package/dist/cjs/operators/concat.cjs.map +1 -1
  11. package/dist/cjs/operators/consolidate.cjs.map +1 -1
  12. package/dist/cjs/operators/count.cjs.map +1 -1
  13. package/dist/cjs/operators/debug.cjs.map +1 -1
  14. package/dist/cjs/operators/distinct.cjs.map +1 -1
  15. package/dist/cjs/operators/filter.cjs.map +1 -1
  16. package/dist/cjs/operators/filterBy.cjs.map +1 -1
  17. package/dist/cjs/operators/groupBy.cjs.map +1 -1
  18. package/dist/cjs/operators/join.cjs.map +1 -1
  19. package/dist/cjs/operators/keying.cjs.map +1 -1
  20. package/dist/cjs/operators/map.cjs.map +1 -1
  21. package/dist/cjs/operators/negate.cjs.map +1 -1
  22. package/dist/cjs/operators/orderBy.cjs.map +1 -1
  23. package/dist/cjs/operators/output.cjs.map +1 -1
  24. package/dist/cjs/operators/pipe.cjs.map +1 -1
  25. package/dist/cjs/operators/reduce.cjs.map +1 -1
  26. package/dist/cjs/operators/tap.cjs.map +1 -1
  27. package/dist/cjs/operators/topK.cjs.map +1 -1
  28. package/dist/cjs/operators/topKWithFractionalIndex.cjs +20 -35
  29. package/dist/cjs/operators/topKWithFractionalIndex.cjs.map +1 -1
  30. package/dist/cjs/operators/topKWithFractionalIndex.d.cts +3 -11
  31. package/dist/cjs/operators/topKWithFractionalIndexBTree.d.cts +4 -4
  32. package/dist/cjs/utils.cjs +9 -0
  33. package/dist/cjs/utils.cjs.map +1 -1
  34. package/dist/cjs/utils.d.cts +5 -0
  35. package/dist/esm/d2.js.map +1 -1
  36. package/dist/esm/graph.js.map +1 -1
  37. package/dist/esm/hashing/hash.js.map +1 -1
  38. package/dist/esm/index.d.ts +1 -0
  39. package/dist/esm/index.js +2 -0
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/indexes.js.map +1 -1
  42. package/dist/esm/multiset.js.map +1 -1
  43. package/dist/esm/operators/concat.js.map +1 -1
  44. package/dist/esm/operators/consolidate.js.map +1 -1
  45. package/dist/esm/operators/count.js.map +1 -1
  46. package/dist/esm/operators/debug.js.map +1 -1
  47. package/dist/esm/operators/distinct.js.map +1 -1
  48. package/dist/esm/operators/filter.js.map +1 -1
  49. package/dist/esm/operators/filterBy.js.map +1 -1
  50. package/dist/esm/operators/groupBy.js.map +1 -1
  51. package/dist/esm/operators/join.js.map +1 -1
  52. package/dist/esm/operators/keying.js.map +1 -1
  53. package/dist/esm/operators/map.js.map +1 -1
  54. package/dist/esm/operators/negate.js.map +1 -1
  55. package/dist/esm/operators/orderBy.js.map +1 -1
  56. package/dist/esm/operators/output.js.map +1 -1
  57. package/dist/esm/operators/pipe.js.map +1 -1
  58. package/dist/esm/operators/reduce.js.map +1 -1
  59. package/dist/esm/operators/tap.js.map +1 -1
  60. package/dist/esm/operators/topK.js.map +1 -1
  61. package/dist/esm/operators/topKWithFractionalIndex.d.ts +3 -11
  62. package/dist/esm/operators/topKWithFractionalIndex.js +21 -36
  63. package/dist/esm/operators/topKWithFractionalIndex.js.map +1 -1
  64. package/dist/esm/operators/topKWithFractionalIndexBTree.d.ts +4 -4
  65. package/dist/esm/utils.d.ts +5 -0
  66. package/dist/esm/utils.js +9 -0
  67. package/dist/esm/utils.js.map +1 -1
  68. package/package.json +29 -29
  69. package/src/d2.ts +4 -4
  70. package/src/graph.ts +6 -6
  71. package/src/hashing/hash.ts +3 -3
  72. package/src/hashing/index.ts +2 -2
  73. package/src/index.ts +5 -4
  74. package/src/indexes.ts +8 -8
  75. package/src/multiset.ts +5 -5
  76. package/src/operators/concat.ts +6 -6
  77. package/src/operators/consolidate.ts +6 -6
  78. package/src/operators/count.ts +9 -9
  79. package/src/operators/debug.ts +8 -8
  80. package/src/operators/distinct.ts +11 -11
  81. package/src/operators/filter.ts +8 -8
  82. package/src/operators/filterBy.ts +7 -7
  83. package/src/operators/groupBy.ts +22 -22
  84. package/src/operators/index.ts +19 -19
  85. package/src/operators/join.ts +23 -23
  86. package/src/operators/keying.ts +4 -4
  87. package/src/operators/map.ts +8 -8
  88. package/src/operators/negate.ts +6 -6
  89. package/src/operators/orderBy.ts +26 -26
  90. package/src/operators/orderByBTree.ts +7 -7
  91. package/src/operators/output.ts +9 -9
  92. package/src/operators/pipe.ts +1 -1
  93. package/src/operators/reduce.ts +9 -9
  94. package/src/operators/tap.ts +8 -8
  95. package/src/operators/topK.ts +8 -8
  96. package/src/operators/topKWithFractionalIndex.ts +62 -83
  97. package/src/operators/topKWithFractionalIndexBTree.ts +19 -20
  98. package/src/types.ts +22 -22
  99. package/src/utils.ts +19 -4
package/src/types.ts CHANGED
@@ -1,10 +1,10 @@
1
- import type { MultiSet, MultiSetArray } from "./multiset.js"
1
+ import type { MultiSet, MultiSetArray } from './multiset.js'
2
2
  import type {
3
3
  BinaryOperator,
4
4
  DifferenceStreamReader,
5
5
  DifferenceStreamWriter,
6
6
  UnaryOperator,
7
- } from "./graph.js"
7
+ } from './graph.js'
8
8
 
9
9
  export type KeyValue<K, V> = [K, V]
10
10
 
@@ -44,25 +44,25 @@ export interface IStreamBuilder<T> {
44
44
  pipe: (<O>(o1: PipedOperator<T, O>) => IStreamBuilder<O>) &
45
45
  (<T2, O>(
46
46
  o1: PipedOperator<T, T2>,
47
- o2: PipedOperator<T2, O>
47
+ o2: PipedOperator<T2, O>,
48
48
  ) => IStreamBuilder<O>) &
49
49
  (<T2, T3, O>(
50
50
  o1: PipedOperator<T, T2>,
51
51
  o2: PipedOperator<T2, T3>,
52
- o3: PipedOperator<T3, O>
52
+ o3: PipedOperator<T3, O>,
53
53
  ) => IStreamBuilder<O>) &
54
54
  (<T2, T3, T4, O>(
55
55
  o1: PipedOperator<T, T2>,
56
56
  o2: PipedOperator<T2, T3>,
57
57
  o3: PipedOperator<T3, T4>,
58
- o4: PipedOperator<T4, O>
58
+ o4: PipedOperator<T4, O>,
59
59
  ) => IStreamBuilder<O>) &
60
60
  (<T2, T3, T4, T5, O>(
61
61
  o1: PipedOperator<T, T2>,
62
62
  o2: PipedOperator<T2, T3>,
63
63
  o3: PipedOperator<T3, T4>,
64
64
  o4: PipedOperator<T4, T5>,
65
- o5: PipedOperator<T5, O>
65
+ o5: PipedOperator<T5, O>,
66
66
  ) => IStreamBuilder<O>) &
67
67
  (<T2, T3, T4, T5, T6, O>(
68
68
  o1: PipedOperator<T, T2>,
@@ -70,7 +70,7 @@ export interface IStreamBuilder<T> {
70
70
  o3: PipedOperator<T3, T4>,
71
71
  o4: PipedOperator<T4, T5>,
72
72
  o5: PipedOperator<T5, T6>,
73
- o6: PipedOperator<T6, O>
73
+ o6: PipedOperator<T6, O>,
74
74
  ) => IStreamBuilder<O>) &
75
75
  (<T2, T3, T4, T5, T6, T7, O>(
76
76
  o1: PipedOperator<T, T2>,
@@ -79,7 +79,7 @@ export interface IStreamBuilder<T> {
79
79
  o4: PipedOperator<T4, T5>,
80
80
  o5: PipedOperator<T5, T6>,
81
81
  o6: PipedOperator<T6, T7>,
82
- o7: PipedOperator<T7, O>
82
+ o7: PipedOperator<T7, O>,
83
83
  ) => IStreamBuilder<O>) &
84
84
  (<T2, T3, T4, T5, T6, T7, T8, O>(
85
85
  o1: PipedOperator<T, T2>,
@@ -89,7 +89,7 @@ export interface IStreamBuilder<T> {
89
89
  o5: PipedOperator<T5, T6>,
90
90
  o6: PipedOperator<T6, T7>,
91
91
  o7: PipedOperator<T7, T8>,
92
- o8: PipedOperator<T8, O>
92
+ o8: PipedOperator<T8, O>,
93
93
  ) => IStreamBuilder<O>) &
94
94
  (<T2, T3, T4, T5, T6, T7, T8, T9, O>(
95
95
  o1: PipedOperator<T, T2>,
@@ -100,7 +100,7 @@ export interface IStreamBuilder<T> {
100
100
  o6: PipedOperator<T6, T7>,
101
101
  o7: PipedOperator<T7, T8>,
102
102
  o8: PipedOperator<T8, T9>,
103
- o9: PipedOperator<T9, O>
103
+ o9: PipedOperator<T9, O>,
104
104
  ) => IStreamBuilder<O>) &
105
105
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, O>(
106
106
  o1: PipedOperator<T, T2>,
@@ -112,7 +112,7 @@ export interface IStreamBuilder<T> {
112
112
  o7: PipedOperator<T7, T8>,
113
113
  o8: PipedOperator<T8, T9>,
114
114
  o9: PipedOperator<T9, T10>,
115
- o10: PipedOperator<T10, O>
115
+ o10: PipedOperator<T10, O>,
116
116
  ) => IStreamBuilder<O>) &
117
117
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, O>(
118
118
  o1: PipedOperator<T, T2>,
@@ -125,7 +125,7 @@ export interface IStreamBuilder<T> {
125
125
  o8: PipedOperator<T8, T9>,
126
126
  o9: PipedOperator<T9, T10>,
127
127
  o10: PipedOperator<T10, T11>,
128
- o11: PipedOperator<T11, O>
128
+ o11: PipedOperator<T11, O>,
129
129
  ) => IStreamBuilder<O>) &
130
130
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, O>(
131
131
  o1: PipedOperator<T, T2>,
@@ -139,7 +139,7 @@ export interface IStreamBuilder<T> {
139
139
  o9: PipedOperator<T9, T10>,
140
140
  o10: PipedOperator<T10, T11>,
141
141
  o11: PipedOperator<T11, T12>,
142
- o12: PipedOperator<T12, O>
142
+ o12: PipedOperator<T12, O>,
143
143
  ) => IStreamBuilder<O>) &
144
144
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, O>(
145
145
  o1: PipedOperator<T, T2>,
@@ -154,7 +154,7 @@ export interface IStreamBuilder<T> {
154
154
  o10: PipedOperator<T10, T11>,
155
155
  o11: PipedOperator<T11, T12>,
156
156
  o12: PipedOperator<T12, T13>,
157
- o13: PipedOperator<T13, O>
157
+ o13: PipedOperator<T13, O>,
158
158
  ) => IStreamBuilder<O>) &
159
159
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, O>(
160
160
  o1: PipedOperator<T, T2>,
@@ -170,7 +170,7 @@ export interface IStreamBuilder<T> {
170
170
  o11: PipedOperator<T11, T12>,
171
171
  o12: PipedOperator<T12, T13>,
172
172
  o13: PipedOperator<T13, T14>,
173
- o14: PipedOperator<T14, O>
173
+ o14: PipedOperator<T14, O>,
174
174
  ) => IStreamBuilder<O>) &
175
175
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, O>(
176
176
  o1: PipedOperator<T, T2>,
@@ -187,7 +187,7 @@ export interface IStreamBuilder<T> {
187
187
  o12: PipedOperator<T12, T13>,
188
188
  o13: PipedOperator<T13, T14>,
189
189
  o14: PipedOperator<T14, T15>,
190
- o15: PipedOperator<T15, O>
190
+ o15: PipedOperator<T15, O>,
191
191
  ) => IStreamBuilder<O>) &
192
192
  (<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, O>(
193
193
  o1: PipedOperator<T, T2>,
@@ -205,7 +205,7 @@ export interface IStreamBuilder<T> {
205
205
  o13: PipedOperator<T13, T14>,
206
206
  o14: PipedOperator<T14, T15>,
207
207
  o15: PipedOperator<T15, T16>,
208
- o16: PipedOperator<T16, O>
208
+ o16: PipedOperator<T16, O>,
209
209
  ) => IStreamBuilder<O>) &
210
210
  (<
211
211
  T2,
@@ -242,7 +242,7 @@ export interface IStreamBuilder<T> {
242
242
  o14: PipedOperator<T14, T15>,
243
243
  o15: PipedOperator<T15, T16>,
244
244
  o16: PipedOperator<T16, T17>,
245
- o17: PipedOperator<T17, O>
245
+ o17: PipedOperator<T17, O>,
246
246
  ) => IStreamBuilder<O>) &
247
247
  (<
248
248
  T2,
@@ -281,7 +281,7 @@ export interface IStreamBuilder<T> {
281
281
  o15: PipedOperator<T15, T16>,
282
282
  o16: PipedOperator<T16, T17>,
283
283
  o17: PipedOperator<T17, T18>,
284
- o18: PipedOperator<T18, O>
284
+ o18: PipedOperator<T18, O>,
285
285
  ) => IStreamBuilder<O>) &
286
286
  (<
287
287
  T2,
@@ -322,7 +322,7 @@ export interface IStreamBuilder<T> {
322
322
  o16: PipedOperator<T16, T17>,
323
323
  o17: PipedOperator<T17, T18>,
324
324
  o18: PipedOperator<T18, T19>,
325
- o19: PipedOperator<T19, O>
325
+ o19: PipedOperator<T19, O>,
326
326
  ) => IStreamBuilder<O>) &
327
327
  (<
328
328
  T2,
@@ -365,11 +365,11 @@ export interface IStreamBuilder<T> {
365
365
  o17: PipedOperator<T17, T18>,
366
366
  o18: PipedOperator<T18, T19>,
367
367
  o19: PipedOperator<T19, T20>,
368
- o20: PipedOperator<T20, O>
368
+ o20: PipedOperator<T20, O>,
369
369
  ) => IStreamBuilder<O>) &
370
370
  (<O>(...operators: Array<PipedOperator<any, any>>) => IStreamBuilder<O>)
371
371
  }
372
372
 
373
373
  export type PipedOperator<I, O> = (
374
- stream: IStreamBuilder<I>
374
+ stream: IStreamBuilder<I>,
375
375
  ) => IStreamBuilder<O>
package/src/utils.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export function assert(
6
6
  condition: unknown,
7
- message?: string
7
+ message?: string,
8
8
  ): asserts condition {
9
9
  if (!condition) {
10
10
  throw new Error(message || `Assertion failed`)
@@ -17,7 +17,7 @@ export function assert(
17
17
  export class DefaultMap<K, V> extends Map<K, V> {
18
18
  constructor(
19
19
  private defaultValue: () => V,
20
- entries?: Iterable<[K, V]>
20
+ entries?: Iterable<[K, V]>,
21
21
  ) {
22
22
  super(entries)
23
23
  }
@@ -60,7 +60,7 @@ export function chunkedArrayPush(array: Array<unknown>, other: Array<unknown>) {
60
60
  export function binarySearch<T>(
61
61
  array: Array<T>,
62
62
  value: T,
63
- comparator: (a: T, b: T) => number
63
+ comparator: (a: T, b: T) => number,
64
64
  ): number {
65
65
  let low = 0
66
66
  let high = array.length
@@ -138,7 +138,7 @@ export function* concatIterable<T>(
138
138
 
139
139
  export function* mapIterable<T, U>(
140
140
  it: Iterable<T>,
141
- fn: (t: T) => U
141
+ fn: (t: T) => U,
142
142
  ): Iterable<U> {
143
143
  for (const t of it) {
144
144
  yield fn(t)
@@ -177,3 +177,18 @@ function range(start: number, end: number): Array<number> {
177
177
  for (let i = start; i < end; i++) out.push(i)
178
178
  return out
179
179
  }
180
+
181
+ /**
182
+ * Compares two keys (string | number) in a consistent, deterministic way.
183
+ * Handles mixed types by ordering strings before numbers.
184
+ */
185
+ export function compareKeys(a: string | number, b: string | number): number {
186
+ // Same type: compare directly
187
+ if (typeof a === typeof b) {
188
+ if (a < b) return -1
189
+ if (a > b) return 1
190
+ return 0
191
+ }
192
+ // Different types: strings come before numbers
193
+ return typeof a === `string` ? -1 : 1
194
+ }