@tanstack/db 0.5.10 → 0.5.12

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 (224) hide show
  1. package/dist/cjs/SortedMap.cjs +40 -26
  2. package/dist/cjs/SortedMap.cjs.map +1 -1
  3. package/dist/cjs/SortedMap.d.cts +10 -15
  4. package/dist/cjs/collection/change-events.cjs +1 -1
  5. package/dist/cjs/collection/change-events.cjs.map +1 -1
  6. package/dist/cjs/collection/changes.cjs.map +1 -1
  7. package/dist/cjs/collection/events.cjs.map +1 -1
  8. package/dist/cjs/collection/events.d.cts +12 -4
  9. package/dist/cjs/collection/index.cjs +2 -1
  10. package/dist/cjs/collection/index.cjs.map +1 -1
  11. package/dist/cjs/collection/indexes.cjs.map +1 -1
  12. package/dist/cjs/collection/lifecycle.cjs.map +1 -1
  13. package/dist/cjs/collection/mutations.cjs +5 -2
  14. package/dist/cjs/collection/mutations.cjs.map +1 -1
  15. package/dist/cjs/collection/state.cjs +6 -5
  16. package/dist/cjs/collection/state.cjs.map +1 -1
  17. package/dist/cjs/collection/state.d.cts +4 -1
  18. package/dist/cjs/collection/subscription.cjs +60 -53
  19. package/dist/cjs/collection/subscription.cjs.map +1 -1
  20. package/dist/cjs/collection/subscription.d.cts +18 -4
  21. package/dist/cjs/collection/sync.cjs.map +1 -1
  22. package/dist/cjs/errors.cjs +9 -0
  23. package/dist/cjs/errors.cjs.map +1 -1
  24. package/dist/cjs/errors.d.cts +3 -0
  25. package/dist/cjs/event-emitter.cjs.map +1 -1
  26. package/dist/cjs/index.cjs +4 -0
  27. package/dist/cjs/index.cjs.map +1 -1
  28. package/dist/cjs/index.d.cts +2 -1
  29. package/dist/cjs/indexes/auto-index.cjs.map +1 -1
  30. package/dist/cjs/indexes/base-index.cjs.map +1 -1
  31. package/dist/cjs/indexes/btree-index.cjs +8 -6
  32. package/dist/cjs/indexes/btree-index.cjs.map +1 -1
  33. package/dist/cjs/indexes/lazy-index.cjs.map +1 -1
  34. package/dist/cjs/indexes/reverse-index.cjs.map +1 -1
  35. package/dist/cjs/local-only.cjs.map +1 -1
  36. package/dist/cjs/local-storage.cjs.map +1 -1
  37. package/dist/cjs/optimistic-action.cjs.map +1 -1
  38. package/dist/cjs/paced-mutations.cjs.map +1 -1
  39. package/dist/cjs/proxy.cjs.map +1 -1
  40. package/dist/cjs/query/builder/functions.cjs.map +1 -1
  41. package/dist/cjs/query/builder/index.cjs.map +1 -1
  42. package/dist/cjs/query/builder/ref-proxy.cjs.map +1 -1
  43. package/dist/cjs/query/compiler/evaluators.cjs.map +1 -1
  44. package/dist/cjs/query/compiler/expressions.cjs.map +1 -1
  45. package/dist/cjs/query/compiler/group-by.cjs.map +1 -1
  46. package/dist/cjs/query/compiler/index.cjs.map +1 -1
  47. package/dist/cjs/query/compiler/joins.cjs.map +1 -1
  48. package/dist/cjs/query/compiler/order-by.cjs +91 -38
  49. package/dist/cjs/query/compiler/order-by.cjs.map +1 -1
  50. package/dist/cjs/query/compiler/order-by.d.cts +6 -2
  51. package/dist/cjs/query/compiler/select.cjs.map +1 -1
  52. package/dist/cjs/query/expression-helpers.cjs.map +1 -1
  53. package/dist/cjs/query/index.d.cts +1 -1
  54. package/dist/cjs/query/ir.cjs.map +1 -1
  55. package/dist/cjs/query/live/collection-config-builder.cjs.map +1 -1
  56. package/dist/cjs/query/live/collection-registry.cjs.map +1 -1
  57. package/dist/cjs/query/live/collection-subscriber.cjs +30 -15
  58. package/dist/cjs/query/live/collection-subscriber.cjs.map +1 -1
  59. package/dist/cjs/query/live/internal.cjs.map +1 -1
  60. package/dist/cjs/query/live-query-collection.cjs.map +1 -1
  61. package/dist/cjs/query/optimizer.cjs.map +1 -1
  62. package/dist/cjs/query/predicate-utils.cjs +19 -2
  63. package/dist/cjs/query/predicate-utils.cjs.map +1 -1
  64. package/dist/cjs/query/predicate-utils.d.cts +32 -1
  65. package/dist/cjs/query/subset-dedupe.cjs.map +1 -1
  66. package/dist/cjs/scheduler.cjs.map +1 -1
  67. package/dist/cjs/strategies/debounceStrategy.cjs.map +1 -1
  68. package/dist/cjs/strategies/queueStrategy.cjs.map +1 -1
  69. package/dist/cjs/strategies/throttleStrategy.cjs.map +1 -1
  70. package/dist/cjs/transactions.cjs.map +1 -1
  71. package/dist/cjs/types.d.cts +43 -5
  72. package/dist/cjs/utils/browser-polyfills.cjs.map +1 -1
  73. package/dist/cjs/utils/btree.cjs.map +1 -1
  74. package/dist/cjs/utils/comparison.cjs.map +1 -1
  75. package/dist/cjs/utils/cursor.cjs +39 -0
  76. package/dist/cjs/utils/cursor.cjs.map +1 -0
  77. package/dist/cjs/utils/cursor.d.cts +18 -0
  78. package/dist/cjs/utils/index-optimization.cjs.map +1 -1
  79. package/dist/cjs/utils.cjs.map +1 -1
  80. package/dist/esm/SortedMap.d.ts +10 -15
  81. package/dist/esm/SortedMap.js +40 -26
  82. package/dist/esm/SortedMap.js.map +1 -1
  83. package/dist/esm/collection/change-events.js +1 -1
  84. package/dist/esm/collection/change-events.js.map +1 -1
  85. package/dist/esm/collection/changes.js.map +1 -1
  86. package/dist/esm/collection/events.d.ts +12 -4
  87. package/dist/esm/collection/events.js.map +1 -1
  88. package/dist/esm/collection/index.js +2 -1
  89. package/dist/esm/collection/index.js.map +1 -1
  90. package/dist/esm/collection/indexes.js.map +1 -1
  91. package/dist/esm/collection/lifecycle.js.map +1 -1
  92. package/dist/esm/collection/mutations.js +6 -3
  93. package/dist/esm/collection/mutations.js.map +1 -1
  94. package/dist/esm/collection/state.d.ts +4 -1
  95. package/dist/esm/collection/state.js +6 -5
  96. package/dist/esm/collection/state.js.map +1 -1
  97. package/dist/esm/collection/subscription.d.ts +18 -4
  98. package/dist/esm/collection/subscription.js +61 -54
  99. package/dist/esm/collection/subscription.js.map +1 -1
  100. package/dist/esm/collection/sync.js.map +1 -1
  101. package/dist/esm/errors.d.ts +3 -0
  102. package/dist/esm/errors.js +9 -0
  103. package/dist/esm/errors.js.map +1 -1
  104. package/dist/esm/event-emitter.js.map +1 -1
  105. package/dist/esm/index.d.ts +2 -1
  106. package/dist/esm/index.js +6 -2
  107. package/dist/esm/index.js.map +1 -1
  108. package/dist/esm/indexes/auto-index.js.map +1 -1
  109. package/dist/esm/indexes/base-index.js.map +1 -1
  110. package/dist/esm/indexes/btree-index.js +8 -6
  111. package/dist/esm/indexes/btree-index.js.map +1 -1
  112. package/dist/esm/indexes/lazy-index.js.map +1 -1
  113. package/dist/esm/indexes/reverse-index.js.map +1 -1
  114. package/dist/esm/local-only.js.map +1 -1
  115. package/dist/esm/local-storage.js.map +1 -1
  116. package/dist/esm/optimistic-action.js.map +1 -1
  117. package/dist/esm/paced-mutations.js.map +1 -1
  118. package/dist/esm/proxy.js.map +1 -1
  119. package/dist/esm/query/builder/functions.js.map +1 -1
  120. package/dist/esm/query/builder/index.js.map +1 -1
  121. package/dist/esm/query/builder/ref-proxy.js.map +1 -1
  122. package/dist/esm/query/compiler/evaluators.js.map +1 -1
  123. package/dist/esm/query/compiler/expressions.js.map +1 -1
  124. package/dist/esm/query/compiler/group-by.js.map +1 -1
  125. package/dist/esm/query/compiler/index.js.map +1 -1
  126. package/dist/esm/query/compiler/joins.js.map +1 -1
  127. package/dist/esm/query/compiler/order-by.d.ts +6 -2
  128. package/dist/esm/query/compiler/order-by.js +91 -38
  129. package/dist/esm/query/compiler/order-by.js.map +1 -1
  130. package/dist/esm/query/compiler/select.js.map +1 -1
  131. package/dist/esm/query/expression-helpers.js.map +1 -1
  132. package/dist/esm/query/index.d.ts +1 -1
  133. package/dist/esm/query/ir.js.map +1 -1
  134. package/dist/esm/query/live/collection-config-builder.js.map +1 -1
  135. package/dist/esm/query/live/collection-registry.js.map +1 -1
  136. package/dist/esm/query/live/collection-subscriber.js +30 -15
  137. package/dist/esm/query/live/collection-subscriber.js.map +1 -1
  138. package/dist/esm/query/live/internal.js.map +1 -1
  139. package/dist/esm/query/live-query-collection.js.map +1 -1
  140. package/dist/esm/query/optimizer.js.map +1 -1
  141. package/dist/esm/query/predicate-utils.d.ts +32 -1
  142. package/dist/esm/query/predicate-utils.js +19 -2
  143. package/dist/esm/query/predicate-utils.js.map +1 -1
  144. package/dist/esm/query/subset-dedupe.js.map +1 -1
  145. package/dist/esm/scheduler.js.map +1 -1
  146. package/dist/esm/strategies/debounceStrategy.js.map +1 -1
  147. package/dist/esm/strategies/queueStrategy.js.map +1 -1
  148. package/dist/esm/strategies/throttleStrategy.js.map +1 -1
  149. package/dist/esm/transactions.js.map +1 -1
  150. package/dist/esm/types.d.ts +43 -5
  151. package/dist/esm/utils/browser-polyfills.js.map +1 -1
  152. package/dist/esm/utils/btree.js.map +1 -1
  153. package/dist/esm/utils/comparison.js.map +1 -1
  154. package/dist/esm/utils/cursor.d.ts +18 -0
  155. package/dist/esm/utils/cursor.js +39 -0
  156. package/dist/esm/utils/cursor.js.map +1 -0
  157. package/dist/esm/utils/index-optimization.js.map +1 -1
  158. package/dist/esm/utils.js.map +1 -1
  159. package/package.json +30 -28
  160. package/src/SortedMap.ts +50 -31
  161. package/src/collection/change-events.ts +23 -21
  162. package/src/collection/changes.ts +12 -12
  163. package/src/collection/events.ts +20 -10
  164. package/src/collection/index.ts +47 -46
  165. package/src/collection/indexes.ts +14 -14
  166. package/src/collection/lifecycle.ts +16 -16
  167. package/src/collection/mutations.ts +25 -20
  168. package/src/collection/state.ts +43 -36
  169. package/src/collection/subscription.ts +114 -83
  170. package/src/collection/sync.ts +13 -13
  171. package/src/duplicate-instance-check.ts +1 -1
  172. package/src/errors.ts +49 -40
  173. package/src/event-emitter.ts +5 -5
  174. package/src/index.ts +21 -20
  175. package/src/indexes/auto-index.ts +11 -11
  176. package/src/indexes/base-index.ts +13 -13
  177. package/src/indexes/btree-index.ts +21 -17
  178. package/src/indexes/index-options.ts +3 -3
  179. package/src/indexes/lazy-index.ts +8 -8
  180. package/src/indexes/reverse-index.ts +5 -5
  181. package/src/local-only.ts +12 -12
  182. package/src/local-storage.ts +17 -17
  183. package/src/optimistic-action.ts +5 -5
  184. package/src/paced-mutations.ts +6 -6
  185. package/src/proxy.ts +43 -43
  186. package/src/query/builder/functions.ts +28 -28
  187. package/src/query/builder/index.ts +22 -22
  188. package/src/query/builder/ref-proxy.ts +4 -4
  189. package/src/query/builder/types.ts +8 -8
  190. package/src/query/compiler/evaluators.ts +9 -9
  191. package/src/query/compiler/expressions.ts +6 -6
  192. package/src/query/compiler/group-by.ts +24 -24
  193. package/src/query/compiler/index.ts +44 -44
  194. package/src/query/compiler/joins.ts +37 -37
  195. package/src/query/compiler/order-by.ts +170 -77
  196. package/src/query/compiler/select.ts +13 -13
  197. package/src/query/compiler/types.ts +2 -2
  198. package/src/query/expression-helpers.ts +16 -16
  199. package/src/query/index.ts +10 -9
  200. package/src/query/ir.ts +13 -13
  201. package/src/query/live/collection-config-builder.ts +53 -53
  202. package/src/query/live/collection-registry.ts +6 -6
  203. package/src/query/live/collection-subscriber.ts +87 -48
  204. package/src/query/live/internal.ts +1 -1
  205. package/src/query/live/types.ts +4 -4
  206. package/src/query/live-query-collection.ts +15 -15
  207. package/src/query/optimizer.ts +29 -29
  208. package/src/query/predicate-utils.ts +105 -50
  209. package/src/query/subset-dedupe.ts +6 -6
  210. package/src/scheduler.ts +3 -3
  211. package/src/strategies/debounceStrategy.ts +6 -6
  212. package/src/strategies/index.ts +4 -4
  213. package/src/strategies/queueStrategy.ts +5 -5
  214. package/src/strategies/throttleStrategy.ts +6 -6
  215. package/src/strategies/types.ts +2 -2
  216. package/src/transactions.ts +9 -9
  217. package/src/types.ts +51 -12
  218. package/src/utils/array-utils.ts +1 -1
  219. package/src/utils/browser-polyfills.ts +2 -2
  220. package/src/utils/btree.ts +22 -22
  221. package/src/utils/comparison.ts +3 -3
  222. package/src/utils/cursor.ts +78 -0
  223. package/src/utils/index-optimization.ts +14 -14
  224. package/src/utils.ts +4 -4
@@ -1,4 +1,4 @@
1
- import { CollectionImpl } from "../../collection/index.js"
1
+ import { CollectionImpl } from '../../collection/index.js'
2
2
  import {
3
3
  Aggregate as AggregateExpr,
4
4
  CollectionRef,
@@ -7,7 +7,7 @@ import {
7
7
  QueryRef,
8
8
  Value as ValueExpr,
9
9
  isExpressionLike,
10
- } from "../ir.js"
10
+ } from '../ir.js'
11
11
  import {
12
12
  InvalidSourceError,
13
13
  InvalidSourceTypeError,
@@ -15,9 +15,9 @@ import {
15
15
  OnlyOneSourceAllowedError,
16
16
  QueryMustHaveFromClauseError,
17
17
  SubQueryMustHaveFromClauseError,
18
- } from "../../errors.js"
19
- import { createRefProxy, toExpression } from "./ref-proxy.js"
20
- import type { NamespacedRow, SingleResult } from "../../types.js"
18
+ } from '../../errors.js'
19
+ import { createRefProxy, toExpression } from './ref-proxy.js'
20
+ import type { NamespacedRow, SingleResult } from '../../types.js'
21
21
  import type {
22
22
  Aggregate,
23
23
  BasicExpression,
@@ -25,7 +25,7 @@ import type {
25
25
  OrderBy,
26
26
  OrderByDirection,
27
27
  QueryIR,
28
- } from "../ir.js"
28
+ } from '../ir.js'
29
29
  import type {
30
30
  CompareOptions,
31
31
  Context,
@@ -42,7 +42,7 @@ import type {
42
42
  Source,
43
43
  WhereCallback,
44
44
  WithResult,
45
- } from "./types.js"
45
+ } from './types.js'
46
46
 
47
47
  export class BaseQueryBuilder<TContext extends Context = Context> {
48
48
  private readonly query: Partial<QueryIR> = {}
@@ -59,7 +59,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
59
59
  */
60
60
  private _createRefForSource<TSource extends Source>(
61
61
  source: TSource,
62
- context: string
62
+ context: string,
63
63
  ): [string, CollectionRef | QueryRef] {
64
64
  // Validate source is a plain object (not null, array, string, etc.)
65
65
  // We use try-catch to handle null/undefined gracefully
@@ -127,7 +127,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
127
127
  * ```
128
128
  */
129
129
  from<TSource extends Source>(
130
- source: TSource
130
+ source: TSource,
131
131
  ): QueryBuilder<{
132
132
  baseSchema: SchemaFromSource<TSource>
133
133
  schema: SchemaFromSource<TSource>
@@ -177,7 +177,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
177
177
  onCallback: JoinOnCallback<
178
178
  MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>
179
179
  >,
180
- type: TJoinType = `left` as TJoinType
180
+ type: TJoinType = `left` as TJoinType,
181
181
  ): QueryBuilder<
182
182
  MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, TJoinType>
183
183
  > {
@@ -243,7 +243,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
243
243
  source: TSource,
244
244
  onCallback: JoinOnCallback<
245
245
  MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>
246
- >
246
+ >,
247
247
  ): QueryBuilder<
248
248
  MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, `left`>
249
249
  > {
@@ -269,7 +269,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
269
269
  source: TSource,
270
270
  onCallback: JoinOnCallback<
271
271
  MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>
272
- >
272
+ >,
273
273
  ): QueryBuilder<
274
274
  MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, `right`>
275
275
  > {
@@ -295,7 +295,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
295
295
  source: TSource,
296
296
  onCallback: JoinOnCallback<
297
297
  MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>
298
- >
298
+ >,
299
299
  ): QueryBuilder<
300
300
  MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, `inner`>
301
301
  > {
@@ -321,7 +321,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
321
321
  source: TSource,
322
322
  onCallback: JoinOnCallback<
323
323
  MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>
324
- >
324
+ >,
325
325
  ): QueryBuilder<
326
326
  MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, `full`>
327
327
  > {
@@ -445,7 +445,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
445
445
  * ```
446
446
  */
447
447
  select<TSelectObject extends SelectObject>(
448
- callback: (refs: RefsForContext<TContext>) => TSelectObject
448
+ callback: (refs: RefsForContext<TContext>) => TSelectObject,
449
449
  ): QueryBuilder<WithResult<TContext, ResultTypeFromSelect<TSelectObject>>> {
450
450
  const aliases = this._getCurrentAliases()
451
451
  const refProxy = createRefProxy(aliases) as RefsForContext<TContext>
@@ -487,7 +487,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
487
487
  */
488
488
  orderBy(
489
489
  callback: OrderByCallback<TContext>,
490
- options: OrderByDirection | OrderByOptions = `asc`
490
+ options: OrderByDirection | OrderByOptions = `asc`,
491
491
  ): QueryBuilder<TContext> {
492
492
  const aliases = this._getCurrentAliases()
493
493
  const refProxy = createRefProxy(aliases) as RefsForContext<TContext>
@@ -717,7 +717,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
717
717
  * ```
718
718
  */
719
719
  select<TFuncSelectResult>(
720
- callback: (row: TContext[`schema`]) => TFuncSelectResult
720
+ callback: (row: TContext[`schema`]) => TFuncSelectResult,
721
721
  ): QueryBuilder<WithResult<TContext, TFuncSelectResult>> {
722
722
  return new BaseQueryBuilder({
723
723
  ...builder.query,
@@ -741,7 +741,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
741
741
  * ```
742
742
  */
743
743
  where(
744
- callback: (row: TContext[`schema`]) => any
744
+ callback: (row: TContext[`schema`]) => any,
745
745
  ): QueryBuilder<TContext> {
746
746
  return new BaseQueryBuilder({
747
747
  ...builder.query,
@@ -768,7 +768,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
768
768
  * ```
769
769
  */
770
770
  having(
771
- callback: (row: TContext[`schema`]) => any
771
+ callback: (row: TContext[`schema`]) => any,
772
772
  ): QueryBuilder<TContext> {
773
773
  return new BaseQueryBuilder({
774
774
  ...builder.query,
@@ -829,7 +829,7 @@ function buildNestedSelect(obj: any): any {
829
829
  // Internal function to build a query from a callback
830
830
  // used by liveQueryCollectionOptions.query
831
831
  export function buildQuery<TContext extends Context>(
832
- fn: (builder: InitialQueryBuilder) => QueryBuilder<TContext>
832
+ fn: (builder: InitialQueryBuilder) => QueryBuilder<TContext>,
833
833
  ): QueryIR {
834
834
  const result = fn(new BaseQueryBuilder())
835
835
  return getQueryIR(result)
@@ -837,7 +837,7 @@ export function buildQuery<TContext extends Context>(
837
837
 
838
838
  // Internal function to get the QueryIR from a builder
839
839
  export function getQueryIR(
840
- builder: BaseQueryBuilder | QueryBuilder<any> | InitialQueryBuilder
840
+ builder: BaseQueryBuilder | QueryBuilder<any> | InitialQueryBuilder,
841
841
  ): QueryIR {
842
842
  return (builder as unknown as BaseQueryBuilder)._getQuery()
843
843
  }
@@ -871,4 +871,4 @@ export type {
871
871
  GetResult,
872
872
  RefLeaf as Ref,
873
873
  InferResultType,
874
- } from "./types.js"
874
+ } from './types.js'
@@ -1,6 +1,6 @@
1
- import { PropRef, Value } from "../ir.js"
2
- import type { BasicExpression } from "../ir.js"
3
- import type { RefLeaf } from "./types.js"
1
+ import { PropRef, Value } from '../ir.js'
2
+ import type { BasicExpression } from '../ir.js'
3
+ import type { RefLeaf } from './types.js'
4
4
 
5
5
  export interface RefProxy<T = any> {
6
6
  /** @internal */
@@ -81,7 +81,7 @@ export function createSingleRowRefProxy<
81
81
  * Used in callbacks like where, select, etc. to create type-safe references
82
82
  */
83
83
  export function createRefProxy<T extends Record<string, any>>(
84
- aliases: Array<string>
84
+ aliases: Array<string>,
85
85
  ): RefProxy<T> & T {
86
86
  const cache = new Map<string, any>()
87
87
  let accessId = 0 // Monotonic counter to record evaluation order
@@ -1,5 +1,5 @@
1
- import type { CollectionImpl } from "../../collection/index.js"
2
- import type { SingleResult, StringCollationConfig } from "../../types.js"
1
+ import type { CollectionImpl } from '../../collection/index.js'
2
+ import type { SingleResult, StringCollationConfig } from '../../types.js'
3
3
  import type {
4
4
  Aggregate,
5
5
  BasicExpression,
@@ -7,8 +7,8 @@ import type {
7
7
  OrderByDirection,
8
8
  PropRef,
9
9
  Value,
10
- } from "../ir.js"
11
- import type { QueryBuilder } from "./index.js"
10
+ } from '../ir.js'
11
+ import type { QueryBuilder } from './index.js'
12
12
 
13
13
  /**
14
14
  * Context - The central state container for query builder operations
@@ -121,7 +121,7 @@ export type GetAliases<TContext extends Context> = keyof TContext[`schema`]
121
121
  * Example: `(refs) => eq(refs.users.age, 25)`
122
122
  */
123
123
  export type WhereCallback<TContext extends Context> = (
124
- refs: RefsForContext<TContext>
124
+ refs: RefsForContext<TContext>,
125
125
  ) => any
126
126
 
127
127
  /**
@@ -290,7 +290,7 @@ type NeedsExtraction<T> = T extends
290
290
  * Example: `(refs) => refs.users.createdAt`
291
291
  */
292
292
  export type OrderByCallback<TContext extends Context> = (
293
- refs: RefsForContext<TContext>
293
+ refs: RefsForContext<TContext>,
294
294
  ) => any
295
295
 
296
296
  /**
@@ -326,7 +326,7 @@ export type CompareOptions = StringCollationConfig & {
326
326
  * Example: `(refs) => refs.orders.status`
327
327
  */
328
328
  export type GroupByCallback<TContext extends Context> = (
329
- refs: RefsForContext<TContext>
329
+ refs: RefsForContext<TContext>,
330
330
  ) => any
331
331
 
332
332
  /**
@@ -342,7 +342,7 @@ export type GroupByCallback<TContext extends Context> = (
342
342
  * Example: `(refs) => eq(refs.users.id, refs.orders.userId)`
343
343
  */
344
344
  export type JoinOnCallback<TContext extends Context> = (
345
- refs: RefsForContext<TContext>
345
+ refs: RefsForContext<TContext>,
346
346
  ) => any
347
347
 
348
348
  /**
@@ -2,10 +2,10 @@ import {
2
2
  EmptyReferencePathError,
3
3
  UnknownExpressionTypeError,
4
4
  UnknownFunctionError,
5
- } from "../../errors.js"
6
- import { areValuesEqual, normalizeValue } from "../../utils/comparison.js"
7
- import type { BasicExpression, Func, PropRef } from "../ir.js"
8
- import type { NamespacedRow } from "../../types.js"
5
+ } from '../../errors.js'
6
+ import { areValuesEqual, normalizeValue } from '../../utils/comparison.js'
7
+ import type { BasicExpression, Func, PropRef } from '../ir.js'
8
+ import type { NamespacedRow } from '../../types.js'
9
9
 
10
10
  /**
11
11
  * Helper function to check if a value is null or undefined (represents UNKNOWN in 3-valued logic)
@@ -46,7 +46,7 @@ export type CompiledSingleRowExpression = (item: Record<string, unknown>) => any
46
46
  */
47
47
  export function compileExpression(
48
48
  expr: BasicExpression,
49
- isSingleRow: boolean = false
49
+ isSingleRow: boolean = false,
50
50
  ): CompiledExpression | CompiledSingleRowExpression {
51
51
  const compiledFn = compileExpressionInternal(expr, isSingleRow)
52
52
  return compiledFn
@@ -56,7 +56,7 @@ export function compileExpression(
56
56
  * Compiles a single-row expression into an optimized evaluator function.
57
57
  */
58
58
  export function compileSingleRowExpression(
59
- expr: BasicExpression
59
+ expr: BasicExpression,
60
60
  ): CompiledSingleRowExpression {
61
61
  const compiledFn = compileExpressionInternal(expr, true)
62
62
  return compiledFn as CompiledSingleRowExpression
@@ -67,7 +67,7 @@ export function compileSingleRowExpression(
67
67
  */
68
68
  function compileExpressionInternal(
69
69
  expr: BasicExpression,
70
- isSingleRow: boolean
70
+ isSingleRow: boolean,
71
71
  ): (data: any) => any {
72
72
  switch (expr.type) {
73
73
  case `val`: {
@@ -157,7 +157,7 @@ function compileSingleRowRef(ref: PropRef): CompiledSingleRowExpression {
157
157
  function compileFunction(func: Func, isSingleRow: boolean): (data: any) => any {
158
158
  // Pre-compile all arguments using the appropriate compiler
159
159
  const compiledArgs = func.args.map((arg) =>
160
- compileExpressionInternal(arg, isSingleRow)
160
+ compileExpressionInternal(arg, isSingleRow),
161
161
  )
162
162
 
163
163
  switch (func.name) {
@@ -463,7 +463,7 @@ function compileFunction(func: Func, isSingleRow: boolean): (data: any) => any {
463
463
  function evaluateLike(
464
464
  value: any,
465
465
  pattern: any,
466
- caseInsensitive: boolean
466
+ caseInsensitive: boolean,
467
467
  ): boolean {
468
468
  if (typeof value !== `string` || typeof pattern !== `string`) {
469
469
  return false
@@ -1,5 +1,5 @@
1
- import { Func, PropRef, Value } from "../ir.js"
2
- import type { BasicExpression, OrderBy } from "../ir.js"
1
+ import { Func, PropRef, Value } from '../ir.js'
2
+ import type { BasicExpression, OrderBy } from '../ir.js'
3
3
 
4
4
  /**
5
5
  * Normalizes a WHERE clause expression by removing table aliases from property references.
@@ -20,7 +20,7 @@ import type { BasicExpression, OrderBy } from "../ir.js"
20
20
  */
21
21
  export function normalizeExpressionPaths(
22
22
  whereClause: BasicExpression<boolean>,
23
- collectionAlias: string
23
+ collectionAlias: string,
24
24
  ): BasicExpression<boolean> {
25
25
  const tpe = whereClause.type
26
26
  if (tpe === `val`) {
@@ -44,7 +44,7 @@ export function normalizeExpressionPaths(
44
44
  for (const arg of whereClause.args) {
45
45
  const convertedArg = normalizeExpressionPaths(
46
46
  arg as BasicExpression<boolean>,
47
- collectionAlias
47
+ collectionAlias,
48
48
  )
49
49
  args.push(convertedArg)
50
50
  }
@@ -54,12 +54,12 @@ export function normalizeExpressionPaths(
54
54
 
55
55
  export function normalizeOrderByPaths(
56
56
  orderBy: OrderBy,
57
- collectionAlias: string
57
+ collectionAlias: string,
58
58
  ): OrderBy {
59
59
  const normalizedOrderBy = orderBy.map((clause) => {
60
60
  const basicExp = normalizeExpressionPaths(
61
61
  clause.expression,
62
- collectionAlias
62
+ collectionAlias,
63
63
  )
64
64
 
65
65
  return {
@@ -1,20 +1,20 @@
1
- import { filter, groupBy, groupByOperators, map } from "@tanstack/db-ivm"
2
- import { Func, PropRef, getHavingExpression } from "../ir.js"
1
+ import { filter, groupBy, groupByOperators, map } from '@tanstack/db-ivm'
2
+ import { Func, PropRef, getHavingExpression } from '../ir.js'
3
3
  import {
4
4
  AggregateFunctionNotInSelectError,
5
5
  NonAggregateExpressionNotInGroupByError,
6
6
  UnknownHavingExpressionTypeError,
7
7
  UnsupportedAggregateFunctionError,
8
- } from "../../errors.js"
9
- import { compileExpression, toBooleanPredicate } from "./evaluators.js"
8
+ } from '../../errors.js'
9
+ import { compileExpression, toBooleanPredicate } from './evaluators.js'
10
10
  import type {
11
11
  Aggregate,
12
12
  BasicExpression,
13
13
  GroupBy,
14
14
  Having,
15
15
  Select,
16
- } from "../ir.js"
17
- import type { NamespacedAndKeyedStream, NamespacedRow } from "../../types.js"
16
+ } from '../ir.js'
17
+ import type { NamespacedAndKeyedStream, NamespacedRow } from '../../types.js'
18
18
 
19
19
  const { sum, count, avg, min, max } = groupByOperators
20
20
 
@@ -32,7 +32,7 @@ interface GroupBySelectMapping {
32
32
  */
33
33
  function validateAndCreateMapping(
34
34
  groupByClause: GroupBy,
35
- selectClause?: Select
35
+ selectClause?: Select,
36
36
  ): GroupBySelectMapping {
37
37
  const selectToGroupByIndex = new Map<string, number>()
38
38
  const groupByExpressions = [...groupByClause]
@@ -50,7 +50,7 @@ function validateAndCreateMapping(
50
50
 
51
51
  // Non-aggregate expression must be in GROUP BY
52
52
  const groupIndex = groupByExpressions.findIndex((groupExpr) =>
53
- expressionsEqual(expr, groupExpr)
53
+ expressionsEqual(expr, groupExpr),
54
54
  )
55
55
 
56
56
  if (groupIndex === -1) {
@@ -73,7 +73,7 @@ export function processGroupBy(
73
73
  groupByClause: GroupBy,
74
74
  havingClauses?: Array<Having>,
75
75
  selectClause?: Select,
76
- fnHavingClauses?: Array<(row: any) => any>
76
+ fnHavingClauses?: Array<(row: any) => any>,
77
77
  ): NamespacedAndKeyedStream {
78
78
  // Handle empty GROUP BY (single-group aggregation)
79
79
  if (groupByClause.length === 0) {
@@ -95,7 +95,7 @@ export function processGroupBy(
95
95
 
96
96
  // Apply the groupBy operator with single group
97
97
  pipeline = pipeline.pipe(
98
- groupBy(keyExtractor, aggregates)
98
+ groupBy(keyExtractor, aggregates),
99
99
  ) as NamespacedAndKeyedStream
100
100
 
101
101
  // Update __select_results to include aggregate values
@@ -123,7 +123,7 @@ export function processGroupBy(
123
123
  __select_results: finalResults,
124
124
  },
125
125
  ] as [unknown, Record<string, any>]
126
- })
126
+ }),
127
127
  )
128
128
 
129
129
  // Apply HAVING clauses if present
@@ -132,7 +132,7 @@ export function processGroupBy(
132
132
  const havingExpression = getHavingExpression(havingClause)
133
133
  const transformedHavingClause = replaceAggregatesByRefs(
134
134
  havingExpression,
135
- selectClause || {}
135
+ selectClause || {},
136
136
  )
137
137
  const compiledHaving = compileExpression(transformedHavingClause)
138
138
 
@@ -141,7 +141,7 @@ export function processGroupBy(
141
141
  // Create a namespaced row structure for HAVING evaluation
142
142
  const namespacedRow = { result: (row as any).__select_results }
143
143
  return toBooleanPredicate(compiledHaving(namespacedRow))
144
- })
144
+ }),
145
145
  )
146
146
  }
147
147
  }
@@ -154,7 +154,7 @@ export function processGroupBy(
154
154
  // Create a namespaced row structure for functional HAVING evaluation
155
155
  const namespacedRow = { result: (row as any).__select_results }
156
156
  return toBooleanPredicate(fnHaving(namespacedRow))
157
- })
157
+ }),
158
158
  )
159
159
  }
160
160
  }
@@ -168,7 +168,7 @@ export function processGroupBy(
168
168
 
169
169
  // Pre-compile groupBy expressions
170
170
  const compiledGroupByExpressions = groupByClause.map((e) =>
171
- compileExpression(e)
171
+ compileExpression(e),
172
172
  )
173
173
 
174
174
  // Create a key extractor function using simple __key_X format
@@ -258,7 +258,7 @@ export function processGroupBy(
258
258
  __select_results: finalResults,
259
259
  },
260
260
  ] as [unknown, Record<string, any>]
261
- })
261
+ }),
262
262
  )
263
263
 
264
264
  // Apply HAVING clauses if present
@@ -267,7 +267,7 @@ export function processGroupBy(
267
267
  const havingExpression = getHavingExpression(havingClause)
268
268
  const transformedHavingClause = replaceAggregatesByRefs(
269
269
  havingExpression,
270
- selectClause || {}
270
+ selectClause || {},
271
271
  )
272
272
  const compiledHaving = compileExpression(transformedHavingClause)
273
273
 
@@ -276,7 +276,7 @@ export function processGroupBy(
276
276
  // Create a namespaced row structure for HAVING evaluation
277
277
  const namespacedRow = { result: (row as any).__select_results }
278
278
  return compiledHaving(namespacedRow)
279
- })
279
+ }),
280
280
  )
281
281
  }
282
282
  }
@@ -289,7 +289,7 @@ export function processGroupBy(
289
289
  // Create a namespaced row structure for functional HAVING evaluation
290
290
  const namespacedRow = { result: (row as any).__select_results }
291
291
  return toBooleanPredicate(fnHaving(namespacedRow))
292
- })
292
+ }),
293
293
  )
294
294
  }
295
295
  }
@@ -310,7 +310,7 @@ function expressionsEqual(expr1: any, expr2: any): boolean {
310
310
  if (!expr1.path || !expr2.path) return false
311
311
  if (expr1.path.length !== expr2.path.length) return false
312
312
  return expr1.path.every(
313
- (segment: string, i: number) => segment === expr2.path[i]
313
+ (segment: string, i: number) => segment === expr2.path[i],
314
314
  )
315
315
  case `val`:
316
316
  return expr1.value === expr2.value
@@ -319,7 +319,7 @@ function expressionsEqual(expr1: any, expr2: any): boolean {
319
319
  expr1.name === expr2.name &&
320
320
  expr1.args?.length === expr2.args?.length &&
321
321
  (expr1.args || []).every((arg: any, i: number) =>
322
- expressionsEqual(arg, expr2.args[i])
322
+ expressionsEqual(arg, expr2.args[i]),
323
323
  )
324
324
  )
325
325
  case `agg`:
@@ -327,7 +327,7 @@ function expressionsEqual(expr1: any, expr2: any): boolean {
327
327
  expr1.name === expr2.name &&
328
328
  expr1.args?.length === expr2.args?.length &&
329
329
  (expr1.args || []).every((arg: any, i: number) =>
330
- expressionsEqual(arg, expr2.args[i])
330
+ expressionsEqual(arg, expr2.args[i]),
331
331
  )
332
332
  )
333
333
  default:
@@ -390,7 +390,7 @@ function getAggregateFunction(aggExpr: Aggregate) {
390
390
  export function replaceAggregatesByRefs(
391
391
  havingExpr: BasicExpression | Aggregate,
392
392
  selectClause: Select,
393
- resultAlias: string = `result`
393
+ resultAlias: string = `result`,
394
394
  ): BasicExpression {
395
395
  switch (havingExpr.type) {
396
396
  case `agg`: {
@@ -411,7 +411,7 @@ export function replaceAggregatesByRefs(
411
411
  // Transform function arguments recursively
412
412
  const transformedArgs = funcExpr.args.map(
413
413
  (arg: BasicExpression | Aggregate) =>
414
- replaceAggregatesByRefs(arg, selectClause)
414
+ replaceAggregatesByRefs(arg, selectClause),
415
415
  )
416
416
  return new Func(funcExpr.name, transformedArgs)
417
417
  }