Skip to content

Commit a93a353

Browse files
committed
done lite sdk
1 parent ec6884e commit a93a353

File tree

6 files changed

+106
-104
lines changed

6 files changed

+106
-104
lines changed

packages/firestore/src/lite-api/aggregate.ts

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
import { getDatastore } from './components';
3333
import { Firestore } from './database';
3434
import { FieldPath } from './field_path';
35-
import { Query, queryEqual } from './reference';
35+
import {DocumentData, Query, queryEqual} from './reference';
3636
import { LiteUserDataWriter } from './reference_impl';
3737
import { fieldPathFromArgument } from './user_data_reader';
3838

@@ -50,9 +50,9 @@ import { fieldPathFromArgument } from './user_data_reader';
5050
* retrieved from `snapshot.data().count`, where `snapshot` is the
5151
* `AggregateQuerySnapshot` to which the returned Promise resolves.
5252
*/
53-
export function getCount(
54-
query: Query<unknown>
55-
): Promise<AggregateQuerySnapshot<{ count: AggregateField<number> }>> {
53+
export function getCount<AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData>(
54+
query: Query<AppType, DbType>
55+
): Promise<AggregateQuerySnapshot<{ count: AggregateField<number> }, AppType, DbType>> {
5656
const countQuerySpec: { count: AggregateField<number> } = {
5757
count: count()
5858
};
@@ -87,10 +87,10 @@ export function getCount(
8787
* ```
8888
* @internal TODO (sum/avg) remove when public
8989
*/
90-
export function getAggregate<T extends AggregateSpec>(
91-
query: Query<unknown>,
92-
aggregateSpec: T
93-
): Promise<AggregateQuerySnapshot<T>> {
90+
export function getAggregate<AggregateSpecType extends AggregateSpec, AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData>(
91+
query: Query<AppType, DbType>,
92+
aggregateSpec: AggregateSpecType
93+
): Promise<AggregateQuerySnapshot<AggregateSpecType, AppType, DbType>> {
9494
const firestore = cast(query.firestore, Firestore);
9595
const datastore = getDatastore(firestore);
9696

@@ -112,17 +112,13 @@ export function getAggregate<T extends AggregateSpec>(
112112
);
113113
}
114114

115-
function convertToAggregateQuerySnapshot<T extends AggregateSpec>(
115+
function convertToAggregateQuerySnapshot<AggregateSpecType extends AggregateSpec, AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData>(
116116
firestore: Firestore,
117-
query: Query<unknown>,
117+
query: Query<AppType, DbType>,
118118
aggregateResult: ObjectValue
119-
): AggregateQuerySnapshot<T> {
119+
): AggregateQuerySnapshot<AggregateSpecType, AppType, DbType> {
120120
const userDataWriter = new LiteUserDataWriter(firestore);
121-
const querySnapshot = new AggregateQuerySnapshot<T>(
122-
query,
123-
userDataWriter,
124-
aggregateResult
125-
);
121+
const querySnapshot = new AggregateQuerySnapshot<AggregateSpecType, AppType, DbType>(query, userDataWriter, aggregateResult);
126122
return querySnapshot;
127123
}
128124

packages/firestore/src/lite-api/aggregate_types.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { AggregateType } from '../core/aggregate';
1919
import { ObjectValue } from '../model/object_value';
2020
import { FieldPath as InternalFieldPath } from '../model/path';
2121

22-
import { Query } from './reference';
22+
import {DocumentData, Query} from './reference';
2323
import { AbstractUserDataWriter } from './user_data_writer';
2424

2525
export { AggregateType };
@@ -71,19 +71,19 @@ export type AggregateSpecData<T extends AggregateSpec> = {
7171
/**
7272
* The results of executing an aggregation query.
7373
*/
74-
export class AggregateQuerySnapshot<T extends AggregateSpec> {
74+
export class AggregateQuerySnapshot<AggregateSpecType extends AggregateSpec, AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData> {
7575
/** A type string to uniquely identify instances of this class. */
7676
readonly type = 'AggregateQuerySnapshot';
7777

7878
/**
7979
* The underlying query over which the aggregations recorded in this
8080
* `AggregateQuerySnapshot` were performed.
8181
*/
82-
readonly query: Query<unknown>;
82+
readonly query: Query<AppType, DbType>;
8383

8484
/** @hideconstructor */
8585
constructor(
86-
query: Query<unknown>,
86+
query: Query<AppType, DbType>,
8787
private readonly _userDataWriter: AbstractUserDataWriter,
8888
private readonly _data: ObjectValue
8989
) {
@@ -101,9 +101,9 @@ export class AggregateQuerySnapshot<T extends AggregateSpec> {
101101
* @returns The results of the aggregations performed over the underlying
102102
* query.
103103
*/
104-
data(): AggregateSpecData<T> {
104+
data(): AggregateSpecData<AggregateSpecType> {
105105
return this._userDataWriter.convertValue(
106106
this._data.value
107-
) as AggregateSpecData<T>;
107+
) as AggregateSpecData<AggregateSpecType>;
108108
}
109109
}

packages/firestore/src/lite-api/query.ts

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import {
5353
} from '../util/input_validation';
5454

5555
import { FieldPath } from './field_path';
56-
import { DocumentReference, Query } from './reference';
56+
import {DocumentData, DocumentReference, Query} from './reference';
5757
import { DocumentSnapshot, fieldPathFromArgument } from './snapshot';
5858
import {
5959
newUserDataReader,
@@ -95,7 +95,7 @@ export abstract class AppliableConstraint {
9595
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
9696
* {@link AppliableConstraint} applied.
9797
*/
98-
abstract _apply<T>(query: Query<T>): Query<T>;
98+
abstract _apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType>;
9999
}
100100

101101
/**
@@ -114,7 +114,7 @@ export abstract class QueryConstraint extends AppliableConstraint {
114114
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
115115
* {@link AppliableConstraint} applied.
116116
*/
117-
abstract _apply<T>(query: Query<T>): Query<T>;
117+
abstract _apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType>;
118118
}
119119

120120
/**
@@ -131,11 +131,11 @@ export abstract class QueryConstraint extends AppliableConstraint {
131131
* @throws if any of the provided query constraints cannot be combined with the
132132
* existing or new constraints.
133133
*/
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>,
136136
compositeFilter: QueryCompositeFilterConstraint,
137137
...queryConstraints: QueryNonFilterConstraint[]
138-
): Query<T>;
138+
): Query<AppType, DbType>;
139139

140140
/**
141141
* Creates a new immutable instance of {@link Query} that is extended to also
@@ -147,18 +147,18 @@ export function query<T>(
147147
* @throws if any of the provided query constraints cannot be combined with the
148148
* existing or new constraints.
149149
*/
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>,
152152
...queryConstraints: QueryConstraint[]
153-
): Query<T>;
153+
): Query<AppType, DbType>;
154154

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>,
157157
queryConstraint: QueryCompositeFilterConstraint | QueryConstraint | undefined,
158158
...additionalQueryConstraints: Array<
159159
QueryConstraint | QueryNonFilterConstraint
160160
>
161-
): Query<T> {
161+
): Query<AppType, DbType> {
162162
let queryConstraints: AppliableConstraint[] = [];
163163

164164
if (queryConstraint instanceof AppliableConstraint) {
@@ -205,17 +205,17 @@ export class QueryFieldFilterConstraint extends QueryConstraint {
205205
return new QueryFieldFilterConstraint(_field, _op, _value);
206206
}
207207

208-
_apply<T>(query: Query<T>): Query<T> {
208+
_apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType> {
209209
const filter = this._parse(query);
210210
validateNewFieldFilter(query._query, filter);
211-
return new Query(
211+
return new Query<AppType, DbType>(
212212
query.firestore,
213213
query.converter,
214214
queryWithAddedFilter(query._query, filter)
215215
);
216216
}
217217

218-
_parse<T>(query: Query<T>): FieldFilter {
218+
_parse<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): FieldFilter {
219219
const reader = newUserDataReader(query.firestore);
220220
const filter = newQueryFilter(
221221
query._query,
@@ -295,7 +295,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
295295
return new QueryCompositeFilterConstraint(type, _queryConstraints);
296296
}
297297

298-
_parse<T>(query: Query<T>): Filter {
298+
_parse<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Filter {
299299
const parsedFilters = this._queryConstraints
300300
.map(queryConstraint => {
301301
return queryConstraint._parse(query);
@@ -309,7 +309,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
309309
return CompositeFilter.create(parsedFilters, this._getOperator());
310310
}
311311

312-
_apply<T>(query: Query<T>): Query<T> {
312+
_apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType> {
313313
const parsedFilter = this._parse(query);
314314
if (parsedFilter.getFilters().length === 0) {
315315
// Return the existing query if not adding any more filters (e.g. an empty
@@ -318,7 +318,7 @@ export class QueryCompositeFilterConstraint extends AppliableConstraint {
318318
}
319319
validateNewFilter(query._query, parsedFilter);
320320

321-
return new Query(
321+
return new Query<AppType, DbType>(
322322
query.firestore,
323323
query.converter,
324324
queryWithAddedFilter(query._query, parsedFilter)
@@ -435,7 +435,7 @@ export class QueryOrderByConstraint extends QueryConstraint {
435435
return new QueryOrderByConstraint(_field, _direction);
436436
}
437437

438-
_apply<T>(query: Query<T>): Query<T> {
438+
_apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType> {
439439
const orderBy = newQueryOrderBy(query._query, this._field, this._direction);
440440
return new Query(
441441
query.firestore,
@@ -500,8 +500,8 @@ export class QueryLimitConstraint extends QueryConstraint {
500500
return new QueryLimitConstraint(type, _limit, _limitType);
501501
}
502502

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>(
505505
query.firestore,
506506
query.converter,
507507
queryWithLimit(query._query, this._limit, this._limitType)
@@ -564,14 +564,14 @@ export class QueryStartAtConstraint extends QueryConstraint {
564564
return new QueryStartAtConstraint(type, _docOrFields, _inclusive);
565565
}
566566

567-
_apply<T>(query: Query<T>): Query<T> {
567+
_apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType> {
568568
const bound = newQueryBoundFromDocOrFields(
569569
query,
570570
this.type,
571571
this._docOrFields,
572572
this._inclusive
573573
);
574-
return new Query(
574+
return new Query<AppType, DbType>(
575575
query.firestore,
576576
query.converter,
577577
queryWithStartAt(query._query, bound)
@@ -671,7 +671,7 @@ export class QueryEndAtConstraint extends QueryConstraint {
671671
return new QueryEndAtConstraint(type, _docOrFields, _inclusive);
672672
}
673673

674-
_apply<T>(query: Query<T>): Query<T> {
674+
_apply<AppType, DbType extends DocumentData>(query: Query<AppType, DbType>): Query<AppType, DbType> {
675675
const bound = newQueryBoundFromDocOrFields(
676676
query,
677677
this.type,
@@ -751,10 +751,10 @@ export function endAt(
751751
}
752752

753753
/** 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>,
756756
methodName: string,
757-
docOrFields: Array<unknown | DocumentSnapshot<T>>,
757+
docOrFields: Array<unknown | DocumentSnapshot<AppType, DbType>>,
758758
inclusive: boolean
759759
): Bound {
760760
docOrFields[0] = getModularInstance(docOrFields[0]);

packages/firestore/src/lite-api/reference.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ export class DocumentReference<AppType = DocumentData, DbType extends DocumentDa
179179
* @param converter - `null` removes the current converter.
180180
* @returns A `DocumentReference<DocumentData>` that does not use a converter.
181181
*/
182-
withConverter(converter: null): DocumentReference<DocumentData>;
182+
withConverter(converter: null): DocumentReference<DocumentData, DocumentData>;
183183
withConverter<NewAppType = DocumentData, NewDbType extends DocumentData = NewAppType extends DocumentData ? NewAppType : DocumentData>(
184184
converter: FirestoreDataConverter<NewAppType, NewDbType> | null
185185
): DocumentReference<NewAppType, NewDbType> {
@@ -538,7 +538,7 @@ export function doc<AppType = DocumentData, DbType extends DocumentData = AppTyp
538538
* @returns true if the references point to the same location in the same
539539
* Firestore database.
540540
*/
541-
export function refEqual<AppType, DbType extends DocumentData>(
541+
export function refEqual<AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData>(
542542
left: DocumentReference<AppType, DbType> | CollectionReference<AppType, DbType>,
543543
right: DocumentReference<AppType, DbType> | CollectionReference<AppType, DbType>
544544
): boolean {
@@ -568,7 +568,7 @@ export function refEqual<AppType, DbType extends DocumentData>(
568568
* @returns true if the references point to the same location in the same
569569
* Firestore database.
570570
*/
571-
export function queryEqual<AppType, DbType extends DocumentData>(left: Query<AppType, DbType>, right: Query<AppType, DbType>): boolean {
571+
export function queryEqual<AppType = DocumentData, DbType extends DocumentData = AppType extends DocumentData ? AppType : DocumentData>(left: Query<AppType, DbType>, right: Query<AppType, DbType>): boolean {
572572
left = getModularInstance(left);
573573
right = getModularInstance(right);
574574

0 commit comments

Comments
 (0)