@@ -9,7 +9,7 @@ import type {
99 OrderBy ,
1010 OrderByClause ,
1111 OrderByDirection ,
12- Query ,
12+ QueryIR ,
1313} from "../ir.js"
1414import type {
1515 Context ,
@@ -27,17 +27,10 @@ import type {
2727 WithResult ,
2828} from "./types.js"
2929
30- export function buildQuery < TContext extends Context > (
31- fn : ( builder : InitialQueryBuilder ) => QueryBuilder < TContext >
32- ) : Query {
33- const result = fn ( new BaseQueryBuilder ( ) )
34- return getQuery ( result )
35- }
36-
3730export class BaseQueryBuilder < TContext extends Context = Context > {
38- private readonly query : Partial < Query > = { }
31+ private readonly query : Partial < QueryIR > = { }
3932
40- constructor ( query : Partial < Query > = { } ) {
33+ constructor ( query : Partial < QueryIR > = { } ) {
4134 this . query = { ...query }
4235 }
4336
@@ -64,7 +57,7 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
6457 ref = new CollectionRef ( sourceValue , alias )
6558 } else if ( sourceValue instanceof BaseQueryBuilder ) {
6659 const subQuery = sourceValue . _getQuery ( )
67- if ( ! ( subQuery as Partial < Query > ) . from ) {
60+ if ( ! ( subQuery as Partial < QueryIR > ) . from ) {
6861 throw new Error (
6962 `A sub query passed to a ${ context } must have a from clause itself`
7063 )
@@ -605,28 +598,44 @@ export class BaseQueryBuilder<TContext extends Context = Context> {
605598 }
606599 }
607600
608- _getQuery ( ) : Query {
601+ _getQuery ( ) : QueryIR {
609602 if ( ! this . query . from ) {
610603 throw new Error ( `Query must have a from clause` )
611604 }
612- return this . query as Query
605+ return this . query as QueryIR
613606 }
614607}
615608
616- export function getQuery (
609+ // Internal function to build a query from a callback
610+ // used by liveQueryCollectionOptions.query
611+ export function buildQuery < TContext extends Context > (
612+ fn : ( builder : InitialQueryBuilder ) => QueryBuilder < TContext >
613+ ) : QueryIR {
614+ const result = fn ( new BaseQueryBuilder ( ) )
615+ return getQueryIR ( result )
616+ }
617+
618+ // Internal function to get the QueryIR from a builder
619+ export function getQueryIR (
617620 builder : BaseQueryBuilder | QueryBuilder < any > | InitialQueryBuilder
618- ) : Query {
621+ ) : QueryIR {
619622 return ( builder as unknown as BaseQueryBuilder ) . _getQuery ( )
620623}
621624
622625// Type-only exports for the query builder
623626export type InitialQueryBuilder = Pick < BaseQueryBuilder < Context > , `from`>
624627
628+ export type InitialQueryBuilderConstructor = new ( ) => InitialQueryBuilder
629+
625630export type QueryBuilder < TContext extends Context > = Omit <
626631 BaseQueryBuilder < TContext > ,
627632 `from` | `_getQuery`
628633>
629634
635+ // Main query builder class alias with the constructor type modified to hide all
636+ // but the from method on the initial instance
637+ export const Query : InitialQueryBuilderConstructor = BaseQueryBuilder
638+
630639// Helper type to extract context from a QueryBuilder
631640export type ExtractContext < T > =
632641 T extends BaseQueryBuilder < infer TContext >
0 commit comments