Skip to content

Commit 7c54b30

Browse files
Making public API changes to ensure that only QueryFilterConstraints can be passed to or(...) and and(...). (#6559)
Making public API changes to ensure that only QueryFilterConstraints can be passed to or(...) and and(...).
1 parent 2a20810 commit 7c54b30

File tree

7 files changed

+377
-132
lines changed

7 files changed

+377
-132
lines changed

common/api-review/firestore-lite.api.md

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export type AddPrefixToKeys<Prefix extends string, T extends Record<string, unkn
1717
[K in keyof T & string as `${Prefix}.${K}`]+?: T[K];
1818
};
1919

20+
// @public
21+
export function and(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;
22+
2023
// @public
2124
export function arrayRemove(...elements: unknown[]): FieldValue;
2225

@@ -111,16 +114,16 @@ export class DocumentSnapshot<T = DocumentData> {
111114
export { EmulatorMockTokenOptions }
112115

113116
// @public
114-
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
117+
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;
115118

116119
// @public
117-
export function endAt(...fieldValues: unknown[]): QueryConstraint;
120+
export function endAt(...fieldValues: unknown[]): QueryEndAtConstraint;
118121

119122
// @public
120-
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
123+
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;
121124

122125
// @public
123-
export function endBefore(...fieldValues: unknown[]): QueryConstraint;
126+
export function endBefore(...fieldValues: unknown[]): QueryEndAtConstraint;
124127

125128
// @public
126129
export class FieldPath {
@@ -188,10 +191,10 @@ export function increment(n: number): FieldValue;
188191
export function initializeFirestore(app: FirebaseApp, settings: Settings): Firestore;
189192

190193
// @public
191-
export function limit(limit: number): QueryConstraint;
194+
export function limit(limit: number): QueryLimitConstraint;
192195

193196
// @public
194-
export function limitToLast(limit: number): QueryConstraint;
197+
export function limitToLast(limit: number): QueryLimitConstraint;
195198

196199
export { LogLevel }
197200

@@ -201,7 +204,10 @@ export type NestedUpdateFields<T extends Record<string, unknown>> = UnionToInter
201204
}[keyof T & string]>;
202205

203206
// @public
204-
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryConstraint;
207+
export function or(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;
208+
209+
// @public
210+
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryOrderByConstraint;
205211

206212
// @public
207213
export type OrderByDirection = 'desc' | 'asc';
@@ -227,6 +233,11 @@ export class Query<T = DocumentData> {
227233
// @public
228234
export function query<T>(query: Query<T>, ...queryConstraints: QueryConstraint[]): Query<T>;
229235

236+
// @public
237+
export class QueryCompositeFilterConstraint extends QueryFilterConstraint {
238+
readonly type: 'or' | 'and';
239+
}
240+
230241
// @public
231242
export abstract class QueryConstraint {
232243
abstract readonly type: QueryConstraintType;
@@ -241,9 +252,33 @@ export class QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot<T>
241252
data(): T;
242253
}
243254

255+
// @public
256+
export class QueryEndAtConstraint extends QueryConstraint {
257+
readonly type: 'endBefore' | 'endAt';
258+
}
259+
244260
// @public
245261
export function queryEqual<T>(left: Query<T>, right: Query<T>): boolean;
246262

263+
// @public
264+
export class QueryFieldFilterConstraint extends QueryFilterConstraint {
265+
readonly type = "where";
266+
}
267+
268+
// @public
269+
export abstract class QueryFilterConstraint extends QueryConstraint {
270+
}
271+
272+
// @public
273+
export class QueryLimitConstraint extends QueryConstraint {
274+
readonly type: 'limit' | 'limitToLast';
275+
}
276+
277+
// @public
278+
export class QueryOrderByConstraint extends QueryConstraint {
279+
readonly type = "orderBy";
280+
}
281+
247282
// @public
248283
export class QuerySnapshot<T = DocumentData> {
249284
get docs(): Array<QueryDocumentSnapshot<T>>;
@@ -253,6 +288,11 @@ export class QuerySnapshot<T = DocumentData> {
253288
get size(): number;
254289
}
255290

291+
// @public
292+
export class QueryStartAtConstraint extends QueryConstraint {
293+
readonly type: 'startAt' | 'startAfter';
294+
}
295+
256296
// @public
257297
export function refEqual<T>(left: DocumentReference<T> | CollectionReference<T>, right: DocumentReference<T> | CollectionReference<T>): boolean;
258298

@@ -289,16 +329,16 @@ export interface Settings {
289329
export function snapshotEqual<T>(left: DocumentSnapshot<T> | QuerySnapshot<T>, right: DocumentSnapshot<T> | QuerySnapshot<T>): boolean;
290330

291331
// @public
292-
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
332+
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;
293333

294334
// @public
295-
export function startAfter(...fieldValues: unknown[]): QueryConstraint;
335+
export function startAfter(...fieldValues: unknown[]): QueryStartAtConstraint;
296336

297337
// @public
298-
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
338+
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;
299339

300340
// @public
301-
export function startAt(...fieldValues: unknown[]): QueryConstraint;
341+
export function startAt(...fieldValues: unknown[]): QueryStartAtConstraint;
302342

303343
// @public
304344
export function terminate(firestore: Firestore): Promise<void>;
@@ -354,7 +394,7 @@ export function updateDoc<T>(reference: DocumentReference<T>, data: UpdateData<T
354394
export function updateDoc(reference: DocumentReference<unknown>, field: string | FieldPath, value: unknown, ...moreFieldsAndValues: unknown[]): Promise<void>;
355395

356396
// @public
357-
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryConstraint;
397+
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryFieldFilterConstraint;
358398

359399
// @public
360400
export type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';

common/api-review/firestore.api.md

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export type AddPrefixToKeys<Prefix extends string, T extends Record<string, unkn
1818
};
1919

2020
// @public
21-
export function and(...queryConstraints: QueryConstraint[]): QueryConstraint;
21+
export function and(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;
2222

2323
// @public
2424
export function arrayRemove(...elements: unknown[]): FieldValue;
@@ -144,16 +144,16 @@ export function enableMultiTabIndexedDbPersistence(firestore: Firestore): Promis
144144
export function enableNetwork(firestore: Firestore): Promise<void>;
145145

146146
// @public
147-
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
147+
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;
148148

149149
// @public
150-
export function endAt(...fieldValues: unknown[]): QueryConstraint;
150+
export function endAt(...fieldValues: unknown[]): QueryEndAtConstraint;
151151

152152
// @public
153-
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
153+
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;
154154

155155
// @public
156-
export function endBefore(...fieldValues: unknown[]): QueryConstraint;
156+
export function endBefore(...fieldValues: unknown[]): QueryEndAtConstraint;
157157

158158
// @public
159159
export class FieldPath {
@@ -243,10 +243,10 @@ export function increment(n: number): FieldValue;
243243
export function initializeFirestore(app: FirebaseApp, settings: FirestoreSettings, databaseId?: string): Firestore;
244244

245245
// @public
246-
export function limit(limit: number): QueryConstraint;
246+
export function limit(limit: number): QueryLimitConstraint;
247247

248248
// @public
249-
export function limitToLast(limit: number): QueryConstraint;
249+
export function limitToLast(limit: number): QueryLimitConstraint;
250250

251251
// @public
252252
export function loadBundle(firestore: Firestore, bundleData: ReadableStream<Uint8Array> | ArrayBuffer | string): LoadBundleTask;
@@ -328,10 +328,10 @@ export function onSnapshotsInSync(firestore: Firestore, observer: {
328328
export function onSnapshotsInSync(firestore: Firestore, onSync: () => void): Unsubscribe;
329329

330330
// @public
331-
export function or(...queryConstraints: QueryConstraint[]): QueryConstraint;
331+
export function or(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;
332332

333333
// @public
334-
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryConstraint;
334+
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryOrderByConstraint;
335335

336336
// @public
337337
export type OrderByDirection = 'desc' | 'asc';
@@ -362,6 +362,11 @@ export class Query<T = DocumentData> {
362362
// @public
363363
export function query<T>(query: Query<T>, ...queryConstraints: QueryConstraint[]): Query<T>;
364364

365+
// @public
366+
export class QueryCompositeFilterConstraint extends QueryFilterConstraint {
367+
readonly type: 'or' | 'and';
368+
}
369+
365370
// @public
366371
export abstract class QueryConstraint {
367372
abstract readonly type: QueryConstraintType;
@@ -376,9 +381,33 @@ export class QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot<T>
376381
data(options?: SnapshotOptions): T;
377382
}
378383

384+
// @public
385+
export class QueryEndAtConstraint extends QueryConstraint {
386+
readonly type: 'endBefore' | 'endAt';
387+
}
388+
379389
// @public
380390
export function queryEqual<T>(left: Query<T>, right: Query<T>): boolean;
381391

392+
// @public
393+
export class QueryFieldFilterConstraint extends QueryFilterConstraint {
394+
readonly type = "where";
395+
}
396+
397+
// @public
398+
export abstract class QueryFilterConstraint extends QueryConstraint {
399+
}
400+
401+
// @public
402+
export class QueryLimitConstraint extends QueryConstraint {
403+
readonly type: 'limit' | 'limitToLast';
404+
}
405+
406+
// @public
407+
export class QueryOrderByConstraint extends QueryConstraint {
408+
readonly type = "orderBy";
409+
}
410+
382411
// @public
383412
export class QuerySnapshot<T = DocumentData> {
384413
docChanges(options?: SnapshotListenOptions): Array<DocumentChange<T>>;
@@ -390,6 +419,11 @@ export class QuerySnapshot<T = DocumentData> {
390419
get size(): number;
391420
}
392421

422+
// @public
423+
export class QueryStartAtConstraint extends QueryConstraint {
424+
readonly type: 'startAt' | 'startAfter';
425+
}
426+
393427
// @public
394428
export function refEqual<T>(left: DocumentReference<T> | CollectionReference<T>, right: DocumentReference<T> | CollectionReference<T>): boolean;
395429

@@ -436,16 +470,16 @@ export interface SnapshotOptions {
436470
}
437471

438472
// @public
439-
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
473+
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;
440474

441475
// @public
442-
export function startAfter(...fieldValues: unknown[]): QueryConstraint;
476+
export function startAfter(...fieldValues: unknown[]): QueryStartAtConstraint;
443477

444478
// @public
445-
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
479+
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;
446480

447481
// @public
448-
export function startAt(...fieldValues: unknown[]): QueryConstraint;
482+
export function startAt(...fieldValues: unknown[]): QueryStartAtConstraint;
449483

450484
// @public
451485
export type TaskState = 'Error' | 'Running' | 'Success';
@@ -512,7 +546,7 @@ export function updateDoc(reference: DocumentReference<unknown>, field: string |
512546
export function waitForPendingWrites(firestore: Firestore): Promise<void>;
513547

514548
// @public
515-
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryConstraint;
549+
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryFieldFilterConstraint;
516550

517551
// @public
518552
export type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';

packages/firestore/lite/index.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,28 @@ export {
5555
} from '../src/lite-api/reference';
5656

5757
export {
58+
and,
5859
endAt,
5960
endBefore,
6061
startAt,
6162
startAfter,
6263
limit,
6364
limitToLast,
64-
orderBy,
65-
OrderByDirection,
6665
where,
67-
WhereFilterOp,
66+
or,
67+
orderBy,
6868
query,
6969
QueryConstraint,
70-
QueryConstraintType
70+
QueryConstraintType,
71+
QueryCompositeFilterConstraint,
72+
QueryFieldFilterConstraint,
73+
QueryFilterConstraint,
74+
QueryOrderByConstraint,
75+
QueryLimitConstraint,
76+
QueryStartAtConstraint,
77+
QueryEndAtConstraint,
78+
OrderByDirection,
79+
WhereFilterOp
7180
} from '../src/lite-api/query';
7281

7382
export {

packages/firestore/src/api.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ export {
8585
query,
8686
QueryConstraint,
8787
QueryConstraintType,
88+
QueryCompositeFilterConstraint,
89+
QueryFieldFilterConstraint,
90+
QueryFilterConstraint,
91+
QueryOrderByConstraint,
92+
QueryLimitConstraint,
93+
QueryStartAtConstraint,
94+
QueryEndAtConstraint,
8895
OrderByDirection,
8996
WhereFilterOp
9097
} from './api/filter';

packages/firestore/src/api/filter.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ export {
2929
where,
3030
WhereFilterOp,
3131
query,
32+
QueryCompositeFilterConstraint,
3233
QueryConstraint,
33-
QueryConstraintType
34+
QueryConstraintType,
35+
QueryFilterConstraint,
36+
QueryFieldFilterConstraint,
37+
QueryOrderByConstraint,
38+
QueryLimitConstraint,
39+
QueryStartAtConstraint,
40+
QueryEndAtConstraint
3441
} from '../lite-api/query';

0 commit comments

Comments
 (0)