@@ -53,7 +53,7 @@ import {
53
53
} from '../util/input_validation' ;
54
54
55
55
import { FieldPath } from './field_path' ;
56
- import { DocumentReference , Query } from './reference' ;
56
+ import { DocumentData , DocumentReference , Query } from './reference' ;
57
57
import { DocumentSnapshot , fieldPathFromArgument } from './snapshot' ;
58
58
import {
59
59
newUserDataReader ,
@@ -95,7 +95,7 @@ export abstract class AppliableConstraint {
95
95
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
96
96
* {@link AppliableConstraint} applied.
97
97
*/
98
- abstract _apply < T > ( query : Query < T > ) : Query < T > ;
98
+ abstract _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > ;
99
99
}
100
100
101
101
/**
@@ -114,7 +114,7 @@ export abstract class QueryConstraint extends AppliableConstraint {
114
114
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
115
115
* {@link AppliableConstraint} applied.
116
116
*/
117
- abstract _apply < T > ( query : Query < T > ) : Query < T > ;
117
+ abstract _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > ;
118
118
}
119
119
120
120
/**
@@ -131,11 +131,11 @@ export abstract class QueryConstraint extends AppliableConstraint {
131
131
* @throws if any of the provided query constraints cannot be combined with the
132
132
* existing or new constraints.
133
133
*/
134
- export function query < T > (
135
- query : Query < T > ,
134
+ export function query < AppType = DocumentData , DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData > (
135
+ query : Query < AppType , DbType > ,
136
136
compositeFilter : QueryCompositeFilterConstraint ,
137
137
...queryConstraints : QueryNonFilterConstraint [ ]
138
- ) : Query < T > ;
138
+ ) : Query < AppType , DbType > ;
139
139
140
140
/**
141
141
* Creates a new immutable instance of {@link Query} that is extended to also
@@ -147,18 +147,18 @@ export function query<T>(
147
147
* @throws if any of the provided query constraints cannot be combined with the
148
148
* existing or new constraints.
149
149
*/
150
- export function query < T > (
151
- query : Query < T > ,
150
+ export function query < AppType = DocumentData , DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData > (
151
+ query : Query < AppType , DbType > ,
152
152
...queryConstraints : QueryConstraint [ ]
153
- ) : Query < T > ;
153
+ ) : Query < AppType , DbType > ;
154
154
155
- export function query < T > (
156
- query : Query < T > ,
155
+ export function query < AppType = DocumentData , DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData > (
156
+ query : Query < AppType , DbType > ,
157
157
queryConstraint : QueryCompositeFilterConstraint | QueryConstraint | undefined ,
158
158
...additionalQueryConstraints : Array <
159
159
QueryConstraint | QueryNonFilterConstraint
160
160
>
161
- ) : Query < T > {
161
+ ) : Query < AppType , DbType > {
162
162
let queryConstraints : AppliableConstraint [ ] = [ ] ;
163
163
164
164
if ( queryConstraint instanceof AppliableConstraint ) {
@@ -205,17 +205,17 @@ export class QueryFieldFilterConstraint extends QueryConstraint {
205
205
return new QueryFieldFilterConstraint ( _field , _op , _value ) ;
206
206
}
207
207
208
- _apply < T > ( query : Query < T > ) : Query < T > {
208
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
209
209
const filter = this . _parse ( query ) ;
210
210
validateNewFieldFilter ( query . _query , filter ) ;
211
- return new Query (
211
+ return new Query < AppType , DbType > (
212
212
query . firestore ,
213
213
query . converter ,
214
214
queryWithAddedFilter ( query . _query , filter )
215
215
) ;
216
216
}
217
217
218
- _parse < T > ( query : Query < T > ) : FieldFilter {
218
+ _parse < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : FieldFilter {
219
219
const reader = newUserDataReader ( query . firestore ) ;
220
220
const filter = newQueryFilter (
221
221
query . _query ,
@@ -295,7 +295,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
295
295
return new QueryCompositeFilterConstraint ( type , _queryConstraints ) ;
296
296
}
297
297
298
- _parse < T > ( query : Query < T > ) : Filter {
298
+ _parse < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Filter {
299
299
const parsedFilters = this . _queryConstraints
300
300
. map ( queryConstraint => {
301
301
return queryConstraint . _parse ( query ) ;
@@ -309,7 +309,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
309
309
return CompositeFilter . create ( parsedFilters , this . _getOperator ( ) ) ;
310
310
}
311
311
312
- _apply < T > ( query : Query < T > ) : Query < T > {
312
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
313
313
const parsedFilter = this . _parse ( query ) ;
314
314
if ( parsedFilter . getFilters ( ) . length === 0 ) {
315
315
// Return the existing query if not adding any more filters (e.g. an empty
@@ -318,7 +318,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
318
318
}
319
319
validateNewFilter ( query . _query , parsedFilter ) ;
320
320
321
- return new Query (
321
+ return new Query < AppType , DbType > (
322
322
query . firestore ,
323
323
query . converter ,
324
324
queryWithAddedFilter ( query . _query , parsedFilter )
@@ -435,7 +435,7 @@ export class QueryOrderByConstraint extends QueryConstraint {
435
435
return new QueryOrderByConstraint ( _field , _direction ) ;
436
436
}
437
437
438
- _apply < T > ( query : Query < T > ) : Query < T > {
438
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
439
439
const orderBy = newQueryOrderBy ( query . _query , this . _field , this . _direction ) ;
440
440
return new Query (
441
441
query . firestore ,
@@ -500,8 +500,8 @@ export class QueryLimitConstraint extends QueryConstraint {
500
500
return new QueryLimitConstraint ( type , _limit , _limitType ) ;
501
501
}
502
502
503
- _apply < T > ( query : Query < T > ) : Query < T > {
504
- return new Query (
503
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
504
+ return new Query < AppType , DbType > (
505
505
query . firestore ,
506
506
query . converter ,
507
507
queryWithLimit ( query . _query , this . _limit , this . _limitType )
@@ -564,14 +564,14 @@ export class QueryStartAtConstraint extends QueryConstraint {
564
564
return new QueryStartAtConstraint ( type , _docOrFields , _inclusive ) ;
565
565
}
566
566
567
- _apply < T > ( query : Query < T > ) : Query < T > {
567
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
568
568
const bound = newQueryBoundFromDocOrFields (
569
569
query ,
570
570
this . type ,
571
571
this . _docOrFields ,
572
572
this . _inclusive
573
573
) ;
574
- return new Query (
574
+ return new Query < AppType , DbType > (
575
575
query . firestore ,
576
576
query . converter ,
577
577
queryWithStartAt ( query . _query , bound )
@@ -671,7 +671,7 @@ export class QueryEndAtConstraint extends QueryConstraint {
671
671
return new QueryEndAtConstraint ( type , _docOrFields , _inclusive ) ;
672
672
}
673
673
674
- _apply < T > ( query : Query < T > ) : Query < T > {
674
+ _apply < AppType , DbType extends DocumentData > ( query : Query < AppType , DbType > ) : Query < AppType , DbType > {
675
675
const bound = newQueryBoundFromDocOrFields (
676
676
query ,
677
677
this . type ,
@@ -751,10 +751,10 @@ export function endAt(
751
751
}
752
752
753
753
/** Helper function to create a bound from a document or fields */
754
- function newQueryBoundFromDocOrFields < T > (
755
- query : Query ,
754
+ function newQueryBoundFromDocOrFields < AppType , DbType extends DocumentData > (
755
+ query : Query < AppType , DbType > ,
756
756
methodName : string ,
757
- docOrFields : Array < unknown | DocumentSnapshot < T > > ,
757
+ docOrFields : Array < unknown | DocumentSnapshot < AppType , DbType > > ,
758
758
inclusive : boolean
759
759
) : Bound {
760
760
docOrFields [ 0 ] = getModularInstance ( docOrFields [ 0 ] ) ;
0 commit comments