@firebase/firestore 3.5.0 → 3.6.0

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 (106) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/firestore/lite/index.d.ts +2 -0
  3. package/dist/firestore/src/api/aggregate.d.ts +43 -0
  4. package/dist/firestore/src/api/database.d.ts +15 -15
  5. package/dist/firestore/src/api.d.ts +2 -0
  6. package/dist/firestore/src/core/count_query_runner.d.ts +32 -0
  7. package/dist/firestore/src/core/firestore_client.d.ts +5 -0
  8. package/dist/firestore/src/lite-api/aggregate.d.ts +48 -0
  9. package/dist/firestore/src/lite-api/aggregate_types.d.ts +69 -0
  10. package/dist/firestore/src/lite-api/database.d.ts +7 -7
  11. package/dist/firestore/src/platform/node/grpc_connection.d.ts +1 -0
  12. package/dist/firestore/src/protos/firestore_proto_api.d.ts +28 -0
  13. package/dist/firestore/src/remote/connection.d.ts +7 -0
  14. package/dist/firestore/src/remote/datastore.d.ts +2 -0
  15. package/dist/firestore/src/remote/rest_connection.d.ts +1 -0
  16. package/dist/firestore/src/remote/serializer.d.ts +2 -1
  17. package/dist/firestore/test/integration/api/aggregation.test.d.ts +17 -0
  18. package/dist/firestore/test/integration/api_internal/aggregation.test.d.ts +17 -0
  19. package/dist/firestore/test/integration/util/helpers.d.ts +1 -0
  20. package/dist/firestore/test/unit/specs/spec_test_components.d.ts +1 -0
  21. package/dist/index.d.ts +196 -14
  22. package/dist/index.esm2017.js +4616 -4413
  23. package/dist/index.esm2017.js.map +1 -1
  24. package/dist/index.esm5.js +4608 -4402
  25. package/dist/index.esm5.js.map +1 -1
  26. package/dist/index.node.cjs.js +994 -613
  27. package/dist/index.node.cjs.js.map +1 -1
  28. package/dist/index.node.mjs +992 -615
  29. package/dist/index.node.mjs.map +1 -1
  30. package/dist/index.rn.js +4622 -4419
  31. package/dist/index.rn.js.map +1 -1
  32. package/dist/internal.d.ts +139 -17
  33. package/dist/lite/firestore/lite/index.d.ts +2 -0
  34. package/dist/lite/firestore/src/api/aggregate.d.ts +43 -0
  35. package/dist/lite/firestore/src/api/database.d.ts +15 -15
  36. package/dist/lite/firestore/src/api.d.ts +2 -0
  37. package/dist/lite/firestore/src/core/count_query_runner.d.ts +32 -0
  38. package/dist/lite/firestore/src/core/firestore_client.d.ts +5 -0
  39. package/dist/lite/firestore/src/lite-api/aggregate.d.ts +48 -0
  40. package/dist/lite/firestore/src/lite-api/aggregate_types.d.ts +69 -0
  41. package/dist/lite/firestore/src/lite-api/database.d.ts +7 -7
  42. package/dist/lite/firestore/src/platform/node/grpc_connection.d.ts +1 -0
  43. package/dist/lite/firestore/src/protos/firestore_proto_api.d.ts +28 -0
  44. package/dist/lite/firestore/src/remote/connection.d.ts +7 -0
  45. package/dist/lite/firestore/src/remote/datastore.d.ts +2 -0
  46. package/dist/lite/firestore/src/remote/rest_connection.d.ts +1 -0
  47. package/dist/lite/firestore/src/remote/serializer.d.ts +2 -1
  48. package/dist/lite/firestore/test/integration/api/aggregation.test.d.ts +17 -0
  49. package/dist/lite/firestore/test/integration/api_internal/aggregation.test.d.ts +17 -0
  50. package/dist/lite/firestore/test/integration/util/helpers.d.ts +1 -0
  51. package/dist/lite/firestore/test/unit/specs/spec_test_components.d.ts +1 -0
  52. package/dist/lite/index.browser.esm2017.js +1250 -1086
  53. package/dist/lite/index.browser.esm2017.js.map +1 -1
  54. package/dist/lite/index.browser.esm5.js +1394 -1232
  55. package/dist/lite/index.browser.esm5.js.map +1 -1
  56. package/dist/lite/index.d.ts +84 -4
  57. package/dist/lite/index.node.cjs.js +255 -63
  58. package/dist/lite/index.node.cjs.js.map +1 -1
  59. package/dist/lite/index.node.mjs +253 -65
  60. package/dist/lite/index.node.mjs.map +1 -1
  61. package/dist/lite/index.rn.esm2017.js +1257 -1093
  62. package/dist/lite/index.rn.esm2017.js.map +1 -1
  63. package/dist/lite/internal.d.ts +121 -6
  64. package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +227 -142
  65. package/dist/lite/packages/firestore/lite/index.d.ts +2 -0
  66. package/dist/lite/packages/firestore/src/api/aggregate.d.ts +43 -0
  67. package/dist/lite/packages/firestore/src/api/database.d.ts +15 -15
  68. package/dist/lite/packages/firestore/src/api.d.ts +2 -0
  69. package/dist/lite/packages/firestore/src/core/count_query_runner.d.ts +32 -0
  70. package/dist/lite/packages/firestore/src/core/firestore_client.d.ts +5 -0
  71. package/dist/lite/packages/firestore/src/lite-api/aggregate.d.ts +48 -0
  72. package/dist/lite/packages/firestore/src/lite-api/aggregate_types.d.ts +69 -0
  73. package/dist/lite/packages/firestore/src/lite-api/database.d.ts +7 -7
  74. package/dist/lite/packages/firestore/src/platform/node/grpc_connection.d.ts +1 -0
  75. package/dist/lite/packages/firestore/src/protos/firestore_proto_api.d.ts +28 -0
  76. package/dist/lite/packages/firestore/src/remote/connection.d.ts +7 -0
  77. package/dist/lite/packages/firestore/src/remote/datastore.d.ts +2 -0
  78. package/dist/lite/packages/firestore/src/remote/rest_connection.d.ts +1 -0
  79. package/dist/lite/packages/firestore/src/remote/serializer.d.ts +2 -1
  80. package/dist/lite/packages/firestore/test/integration/api/aggregation.test.d.ts +17 -0
  81. package/dist/lite/packages/firestore/test/integration/api_internal/aggregation.test.d.ts +17 -0
  82. package/dist/lite/packages/firestore/test/integration/util/helpers.d.ts +1 -0
  83. package/dist/lite/packages/firestore/test/unit/specs/spec_test_components.d.ts +1 -0
  84. package/dist/lite/private.d.ts +119 -4
  85. package/dist/packages/firestore/dist/index.esm2017.d.ts +336 -254
  86. package/dist/packages/firestore/lite/index.d.ts +2 -0
  87. package/dist/packages/firestore/src/api/aggregate.d.ts +43 -0
  88. package/dist/packages/firestore/src/api/database.d.ts +15 -15
  89. package/dist/packages/firestore/src/api.d.ts +2 -0
  90. package/dist/packages/firestore/src/core/count_query_runner.d.ts +32 -0
  91. package/dist/packages/firestore/src/core/firestore_client.d.ts +5 -0
  92. package/dist/packages/firestore/src/lite-api/aggregate.d.ts +48 -0
  93. package/dist/packages/firestore/src/lite-api/aggregate_types.d.ts +69 -0
  94. package/dist/packages/firestore/src/lite-api/database.d.ts +7 -7
  95. package/dist/packages/firestore/src/platform/node/grpc_connection.d.ts +1 -0
  96. package/dist/packages/firestore/src/protos/firestore_proto_api.d.ts +28 -0
  97. package/dist/packages/firestore/src/remote/connection.d.ts +7 -0
  98. package/dist/packages/firestore/src/remote/datastore.d.ts +2 -0
  99. package/dist/packages/firestore/src/remote/rest_connection.d.ts +1 -0
  100. package/dist/packages/firestore/src/remote/serializer.d.ts +2 -1
  101. package/dist/packages/firestore/test/integration/api/aggregation.test.d.ts +17 -0
  102. package/dist/packages/firestore/test/integration/api_internal/aggregation.test.d.ts +17 -0
  103. package/dist/packages/firestore/test/integration/util/helpers.d.ts +1 -0
  104. package/dist/packages/firestore/test/unit/specs/spec_test_components.d.ts +1 -0
  105. package/dist/private.d.ts +234 -19
  106. package/package.json +6 -6
@@ -56,6 +56,77 @@ export declare type AddPrefixToKeys<Prefix extends string, T extends Record<stri
56
56
  [K in keyof T & string as `${Prefix}.${K}`]+?: T[K];
57
57
  };
58
58
 
59
+ /**
60
+ * Represents an aggregation that can be performed by Firestore.
61
+ */
62
+ export declare class AggregateField<T> {
63
+ /** A type string to uniquely identify instances of this class. */
64
+ type: string;
65
+ }
66
+
67
+ /**
68
+ * The union of all `AggregateField` types that are supported by Firestore.
69
+ */
70
+ export declare type AggregateFieldType = AggregateField<number>;
71
+
72
+ /**
73
+ * The results of executing an aggregation query.
74
+ */
75
+ export declare class AggregateQuerySnapshot<T extends AggregateSpec> {
76
+ private readonly _data;
77
+ /** A type string to uniquely identify instances of this class. */
78
+ readonly type = "AggregateQuerySnapshot";
79
+ /**
80
+ * The underlying query over which the aggregations recorded in this
81
+ * `AggregateQuerySnapshot` were performed.
82
+ */
83
+ readonly query: Query<unknown>;
84
+ /** @hideconstructor */
85
+ constructor(query: Query<unknown>, _data: AggregateSpecData<T>);
86
+ /**
87
+ * Returns the results of the aggregations performed over the underlying
88
+ * query.
89
+ *
90
+ * The keys of the returned object will be the same as those of the
91
+ * `AggregateSpec` object specified to the aggregation method, and the values
92
+ * will be the corresponding aggregation result.
93
+ *
94
+ * @returns The results of the aggregations performed over the underlying
95
+ * query.
96
+ */
97
+ data(): AggregateSpecData<T>;
98
+ }
99
+
100
+ /**
101
+ * Compares two `AggregateQuerySnapshot` instances for equality.
102
+ *
103
+ * Two `AggregateQuerySnapshot` instances are considered "equal" if they have
104
+ * underlying queries that compare equal, and the same data.
105
+ *
106
+ * @param left - The first `AggregateQuerySnapshot` to compare.
107
+ * @param right - The second `AggregateQuerySnapshot` to compare.
108
+ *
109
+ * @returns `true` if the objects are "equal", as defined above, or `false`
110
+ * otherwise.
111
+ */
112
+ export declare function aggregateQuerySnapshotEqual<T extends AggregateSpec>(left: AggregateQuerySnapshot<T>, right: AggregateQuerySnapshot<T>): boolean;
113
+
114
+ /**
115
+ * A type whose property values are all `AggregateField` objects.
116
+ */
117
+ export declare interface AggregateSpec {
118
+ [field: string]: AggregateFieldType;
119
+ }
120
+
121
+ /**
122
+ * A type whose keys are taken from an `AggregateSpec`, and whose values are the
123
+ * result of the aggregation performed by the corresponding `AggregateField`
124
+ * from the input `AggregateSpec`.
125
+ */
126
+ export declare type AggregateSpecData<T extends AggregateSpec> = {
127
+ [P in keyof T]: T[P] extends AggregateField<infer U> ? U : never;
128
+ };
129
+
59
130
  declare interface ApiClientObjectMap<T> {
60
131
  [k: string]: T;
61
132
  }
@@ -418,7 +489,7 @@ export declare type ChildUpdateFields<K extends string, V> = V extends Record<st
418
489
  * Must be called while the {@link Firestore} instance is not started (after the app is
419
490
  * terminated or when the app is first initialized). On startup, this function
420
491
  * must be called before other functions (other than {@link
421
- * initializeFirestore} or {@link getFirestore})). If the {@link Firestore}
492
+ * initializeFirestore} or {@link (getFirestore:1)})). If the {@link Firestore}
422
493
  * instance is still running, the promise will be rejected with the error code
423
494
  * of `failed-precondition`.
424
495
  *
@@ -1258,7 +1329,7 @@ export { EmulatorMockTokenOptions }
1258
1329
  * Attempts to enable persistent storage, if possible.
1259
1330
  *
1260
1331
  * Must be called before any other functions (other than
1261
- * {@link initializeFirestore}, {@link getFirestore} or
1332
+ * {@link initializeFirestore}, {@link (getFirestore:1)} or
1262
1333
  * {@link clearIndexedDbPersistence}.
1263
1334
  *
1264
1335
  * If this fails, `enableIndexedDbPersistence()` will reject the promise it
@@ -1549,7 +1620,7 @@ declare abstract class Filter {
1549
1620
  /**
1550
1621
  * The Cloud Firestore service interface.
1551
1622
  *
1552
- * Do not call this constructor directly. Instead, use {@link getFirestore}.
1623
+ * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.
1553
1624
  */
1554
1625
  export declare class Firestore extends Firestore_2 {
1555
1626
  /**
@@ -1567,7 +1638,7 @@ export declare class Firestore extends Firestore_2 {
1567
1638
  /**
1568
1639
  * The Cloud Firestore service interface.
1569
1640
  *
1570
- * Do not call this constructor directly. Instead, use {@link getFirestore}.
1641
+ * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.
1571
1642
  */
1572
1643
  declare class Firestore_2 implements FirestoreService {
1573
1644
  _authCredentials: CredentialsProvider<User>;
@@ -2150,6 +2221,32 @@ declare namespace firestoreV1ApiClientInterfaces {
2150
2221
  readTime?: string;
2151
2222
  skippedResults?: number;
2152
2223
  }
2224
+ interface RunAggregationQueryRequest {
2225
+ parent?: string;
2226
+ structuredAggregationQuery?: StructuredAggregationQuery;
2227
+ transaction?: string;
2228
+ newTransaction?: TransactionOptions;
2229
+ readTime?: string;
2230
+ }
2231
+ interface RunAggregationQueryResponse {
2232
+ result?: AggregationResult;
2233
+ transaction?: string;
2234
+ readTime?: string;
2235
+ }
2236
+ interface AggregationResult {
2237
+ aggregateFields?: ApiClientObjectMap<Value>;
2238
+ }
2239
+ interface StructuredAggregationQuery {
2240
+ structuredQuery?: StructuredQuery;
2241
+ aggregations?: Aggregation[];
2242
+ }
2243
+ interface Aggregation {
2244
+ count?: Count;
2245
+ alias?: string;
2246
+ }
2247
+ interface Count {
2248
+ upTo?: number;
2249
+ }
2153
2250
  interface Status {
2154
2251
  code?: number;
2155
2252
  message?: string;
@@ -2316,6 +2413,31 @@ export declare class GeoPoint {
2316
2413
  _compareTo(other: GeoPoint): number;
2317
2414
  }
2318
2415
 
2416
+ /**
2417
+ * Calculates the number of documents in the result set of the given query,
2418
+ * without actually downloading the documents.
2419
+ *
2420
+ * Using this function to count the documents is efficient because only the
2421
+ * final count, not the documents' data, is downloaded. This function can even
2422
+ * count the documents if the result set would be prohibitively large to
2423
+ * download entirely (e.g. thousands of documents).
2424
+ *
2425
+ * The result received from the server is presented, unaltered, without
2426
+ * considering any local state. That is, documents in the local cache are not
2427
+ * taken into consideration, neither are local modifications not yet
2428
+ * synchronized with the server. Previously-downloaded results, if any, are not
2429
+ * used: every request using this source necessarily involves a round trip to
2430
+ * the server.
2431
+ *
2432
+ * @param query - The query whose result set size to calculate.
2433
+ * @returns A Promise that will be resolved with the count; the count can be
2434
+ * retrieved from `snapshot.data().count`, where `snapshot` is the
2435
+ * `AggregateQuerySnapshot` to which the returned Promise resolves.
2436
+ */
2437
+ export declare function getCountFromServer(query: Query<unknown>): Promise<AggregateQuerySnapshot<{
2438
+ count: AggregateField<number>;
2439
+ }>>;
2440
+
2319
2441
  /**
2320
2442
  * Reads the document referred to by this `DocumentReference`.
2321
2443
  *
@@ -2376,15 +2498,6 @@ export declare function getDocsFromCache<T>(query: Query<T>): Promise<QuerySnaps
2376
2498
  */
2377
2499
  export declare function getDocsFromServer<T>(query: Query<T>): Promise<QuerySnapshot<T>>;
2378
2500
 
2379
- /**
2380
- * Returns the existing default {@link Firestore} instance that is associated with the
2381
- * default {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
2382
- * instance with default settings.
2383
- *
2384
- * @returns The {@link Firestore} instance of the provided app.
2385
- */
2386
- export declare function getFirestore(): Firestore;
2387
-
2388
2501
  /**
2389
2502
  * Returns the existing default {@link Firestore} instance that is associated with the
2390
2503
  * provided {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
@@ -2408,7 +2521,16 @@ export declare function getFirestore(app: FirebaseApp): Firestore;
2408
2521
  export declare function getFirestore(databaseId: string): Firestore;
2409
2522
 
2410
2523
  /**
2411
- * Returns the existing {@link Firestore} instance that is associated with the
2524
+ * Returns the existing default {@link Firestore} instance that is associated with the
2525
+ * default {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
2526
+ * instance with default settings.
2527
+ *
2528
+ * @returns The {@link Firestore} instance of the provided app.
2529
+ */
2530
+ export declare function getFirestore(): Firestore;
2531
+
2532
+ /**
2533
+ * Returns the existing default {@link Firestore} instance that is associated with the
2412
2534
  * provided {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
2413
2535
  * instance with default settings.
2414
2536
  *
@@ -2677,8 +2799,8 @@ declare const enum IndexType {
2677
2799
  /**
2678
2800
  * Initializes a new instance of {@link Firestore} with the provided settings.
2679
2801
  * Can only be called before any other function, including
2680
- * {@link getFirestore}. If the custom settings are empty, this function is
2681
- * equivalent to calling {@link getFirestore}.
2802
+ * {@link (getFirestore:1)}. If the custom settings are empty, this function is
2803
+ * equivalent to calling {@link (getFirestore:1)}.
2682
2804
  *
2683
2805
  * @param app - The {@link @firebase/app#FirebaseApp} with which the {@link Firestore} instance will
2684
2806
  * be associated.
@@ -5503,7 +5625,7 @@ export declare type TaskState = 'Error' | 'Running' | 'Success';
5503
5625
  * may be used. Any other function will throw a `FirestoreError`.
5504
5626
  *
5505
5627
  * To restart after termination, create a new instance of FirebaseFirestore with
5506
- * {@link getFirestore}.
5628
+ * {@link (getFirestore:1)}.
5507
5629
  *
5508
5630
  * Termination does not cancel any pending writes, and any promises that are
5509
5631
  * awaiting a response from the server will not be resolved. If you have
@@ -6,6 +6,8 @@
6
6
  * directly to the backend, and `onSnapshot()` APIs are not supported.
7
7
  * @packageDocumentation
8
8
  */
9
+ export { aggregateQuerySnapshotEqual, getCount } from '../src/lite-api/aggregate';
10
+ export { AggregateField, AggregateFieldType, AggregateSpec, AggregateSpecData, AggregateQuerySnapshot } from '../src/lite-api/aggregate_types';
9
11
  export { FirestoreSettings as Settings } from '../src/lite-api/settings';
10
12
  export { Firestore as Firestore, EmulatorMockTokenOptions, initializeFirestore, getFirestore, terminate, connectFirestoreEmulator } from '../src/lite-api/database';
11
13
  export { DocumentData, UpdateData, WithFieldValue, PartialWithFieldValue, SetOptions, DocumentReference, Query, CollectionReference, collection, collectionGroup, doc, refEqual, queryEqual } from '../src/lite-api/reference';
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Query } from '../api';
18
+ import { AggregateField, AggregateQuerySnapshot } from '../lite-api/aggregate_types';
19
+ export { aggregateQuerySnapshotEqual } from '../lite-api/aggregate';
20
+ /**
21
+ * Calculates the number of documents in the result set of the given query,
22
+ * without actually downloading the documents.
23
+ *
24
+ * Using this function to count the documents is efficient because only the
25
+ * final count, not the documents' data, is downloaded. This function can even
26
+ * count the documents if the result set would be prohibitively large to
27
+ * download entirely (e.g. thousands of documents).
28
+ *
29
+ * The result received from the server is presented, unaltered, without
30
+ * considering any local state. That is, documents in the local cache are not
31
+ * taken into consideration, neither are local modifications not yet
32
+ * synchronized with the server. Previously-downloaded results, if any, are not
33
+ * used: every request using this source necessarily involves a round trip to
34
+ * the server.
35
+ *
36
+ * @param query - The query whose result set size to calculate.
37
+ * @returns A Promise that will be resolved with the count; the count can be
38
+ * retrieved from `snapshot.data().count`, where `snapshot` is the
39
+ * `AggregateQuerySnapshot` to which the returned Promise resolves.
40
+ */
41
+ export declare function getCountFromServer(query: Query<unknown>): Promise<AggregateQuerySnapshot<{
42
+ count: AggregateField<number>;
43
+ }>>;
@@ -39,7 +39,7 @@ export declare const CACHE_SIZE_UNLIMITED = -1;
39
39
  /**
40
40
  * The Cloud Firestore service interface.
41
41
  *
42
- * Do not call this constructor directly. Instead, use {@link getFirestore}.
42
+ * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.
43
43
  */
44
44
  export declare class Firestore extends LiteFirestore {
45
45
  /**
@@ -56,8 +56,8 @@ export declare class Firestore extends LiteFirestore {
56
56
  /**
57
57
  * Initializes a new instance of {@link Firestore} with the provided settings.
58
58
  * Can only be called before any other function, including
59
- * {@link getFirestore}. If the custom settings are empty, this function is
60
- * equivalent to calling {@link getFirestore}.
59
+ * {@link (getFirestore:1)}. If the custom settings are empty, this function is
60
+ * equivalent to calling {@link (getFirestore:1)}.
61
61
  *
62
62
  * @param app - The {@link @firebase/app#FirebaseApp} with which the {@link Firestore} instance will
63
63
  * be associated.
@@ -66,14 +66,6 @@ export declare class Firestore extends LiteFirestore {
66
66
  * @returns A newly initialized {@link Firestore} instance.
67
67
  */
68
68
  export declare function initializeFirestore(app: FirebaseApp, settings: FirestoreSettings, databaseId?: string): Firestore;
69
- /**
70
- * Returns the existing default {@link Firestore} instance that is associated with the
71
- * default {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
72
- * instance with default settings.
73
- *
74
- * @returns The {@link Firestore} instance of the provided app.
75
- */
76
- export declare function getFirestore(): Firestore;
77
69
  /**
78
70
  * Returns the existing default {@link Firestore} instance that is associated with the
79
71
  * provided {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
@@ -95,7 +87,15 @@ export declare function getFirestore(app: FirebaseApp): Firestore;
95
87
  */
96
88
  export declare function getFirestore(databaseId: string): Firestore;
97
89
  /**
98
- * Returns the existing {@link Firestore} instance that is associated with the
90
+ * Returns the existing default {@link Firestore} instance that is associated with the
91
+ * default {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
92
+ * instance with default settings.
93
+ *
94
+ * @returns The {@link Firestore} instance of the provided app.
95
+ */
96
+ export declare function getFirestore(): Firestore;
97
+ /**
98
+ * Returns the existing default {@link Firestore} instance that is associated with the
99
99
  * provided {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
100
100
  * instance with default settings.
101
101
  *
@@ -115,7 +115,7 @@ export declare function configureFirestore(firestore: Firestore): void;
115
115
  * Attempts to enable persistent storage, if possible.
116
116
  *
117
117
  * Must be called before any other functions (other than
118
- * {@link initializeFirestore}, {@link getFirestore} or
118
+ * {@link initializeFirestore}, {@link (getFirestore:1)} or
119
119
  * {@link clearIndexedDbPersistence}.
120
120
  *
121
121
  * If this fails, `enableIndexedDbPersistence()` will reject the promise it
@@ -165,7 +165,7 @@ export declare function enableMultiTabIndexedDbPersistence(firestore: Firestore)
165
165
  * Must be called while the {@link Firestore} instance is not started (after the app is
166
166
  * terminated or when the app is first initialized). On startup, this function
167
167
  * must be called before other functions (other than {@link
168
- * initializeFirestore} or {@link getFirestore})). If the {@link Firestore}
168
+ * initializeFirestore} or {@link (getFirestore:1)})). If the {@link Firestore}
169
169
  * instance is still running, the promise will be rejected with the error code
170
170
  * of `failed-precondition`.
171
171
  *
@@ -221,7 +221,7 @@ export declare function disableNetwork(firestore: Firestore): Promise<void>;
221
221
  * may be used. Any other function will throw a `FirestoreError`.
222
222
  *
223
223
  * To restart after termination, create a new instance of FirebaseFirestore with
224
- * {@link getFirestore}.
224
+ * {@link (getFirestore:1)}.
225
225
  *
226
226
  * Termination does not cancel any pending writes, and any promises that are
227
227
  * awaiting a response from the server will not be resolved. If you have
@@ -14,6 +14,8 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
+ export { aggregateQuerySnapshotEqual, getCountFromServer } from './api/aggregate';
18
+ export { AggregateField, AggregateFieldType, AggregateSpec, AggregateSpecData, AggregateQuerySnapshot } from './lite-api/aggregate_types';
17
19
  export { FieldPath, documentId } from './api/field_path';
18
20
  export { Firestore, EmulatorMockTokenOptions, initializeFirestore, getFirestore, enableIndexedDbPersistence, enableMultiTabIndexedDbPersistence, clearIndexedDbPersistence, waitForPendingWrites, disableNetwork, enableNetwork, terminate, connectFirestoreEmulator, loadBundle, namedQuery, ensureFirestoreConfigured } from './api/database';
19
21
  export { LoadBundleTask, LoadBundleTaskProgress, TaskState } from './api/bundle';
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { AbstractUserDataWriter, Query } from '../api';
18
+ import { AggregateField, AggregateQuerySnapshot } from '../lite-api/aggregate_types';
19
+ import { Datastore } from '../remote/datastore';
20
+ /**
21
+ * CountQueryRunner encapsulates the logic needed to run the count aggregation
22
+ * queries.
23
+ */
24
+ export declare class CountQueryRunner {
25
+ private readonly query;
26
+ private readonly datastore;
27
+ private readonly userDataWriter;
28
+ constructor(query: Query<unknown>, datastore: Datastore, userDataWriter: AbstractUserDataWriter);
29
+ run(): Promise<AggregateQuerySnapshot<{
30
+ count: AggregateField<number>;
31
+ }>>;
32
+ }
@@ -15,9 +15,11 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { GetOptions } from '@firebase/firestore-types';
18
+ import { AbstractUserDataWriter, AggregateField, AggregateQuerySnapshot } from '../api';
18
19
  import { LoadBundleTask } from '../api/bundle';
19
20
  import { CredentialsProvider } from '../api/credentials';
20
21
  import { User } from '../auth/user';
22
+ import { Query as LiteQuery } from '../lite-api/reference';
21
23
  import { LocalStore } from '../local/local_store';
22
24
  import { Document } from '../model/document';
23
25
  import { DocumentKey } from '../model/document_key';
@@ -115,5 +117,8 @@ export declare function firestoreClientAddSnapshotsInSyncListener(client: Firest
115
117
  * performed before any writes. Transactions must be performed while online.
116
118
  */
117
119
  export declare function firestoreClientTransaction<T>(client: FirestoreClient, updateFunction: (transaction: Transaction) => Promise<T>, options: TransactionOptions): Promise<T>;
120
+ export declare function firestoreClientRunCountQuery(client: FirestoreClient, query: LiteQuery<unknown>, userDataWriter: AbstractUserDataWriter): Promise<AggregateQuerySnapshot<{
121
+ count: AggregateField<number>;
122
+ }>>;
118
123
  export declare function firestoreClientLoadBundle(client: FirestoreClient, databaseId: DatabaseId, data: ReadableStream<Uint8Array> | ArrayBuffer | string, resultTask: LoadBundleTask): void;
119
124
  export declare function firestoreClientGetNamedQuery(client: FirestoreClient, queryName: string): Promise<NamedQuery | undefined>;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { AggregateField, AggregateQuerySnapshot, AggregateSpec } from './aggregate_types';
18
+ import { Query } from './reference';
19
+ /**
20
+ * Calculates the number of documents in the result set of the given query,
21
+ * without actually downloading the documents.
22
+ *
23
+ * Using this function to count the documents is efficient because only the
24
+ * final count, not the documents' data, is downloaded. This function can even
25
+ * count the documents if the result set would be prohibitively large to
26
+ * download entirely (e.g. thousands of documents).
27
+ *
28
+ * @param query - The query whose result set size to calculate.
29
+ * @returns A Promise that will be resolved with the count; the count can be
30
+ * retrieved from `snapshot.data().count`, where `snapshot` is the
31
+ * `AggregateQuerySnapshot` to which the returned Promise resolves.
32
+ */
33
+ export declare function getCount(query: Query<unknown>): Promise<AggregateQuerySnapshot<{
34
+ count: AggregateField<number>;
35
+ }>>;
36
+ /**
37
+ * Compares two `AggregateQuerySnapshot` instances for equality.
38
+ *
39
+ * Two `AggregateQuerySnapshot` instances are considered "equal" if they have
40
+ * underlying queries that compare equal, and the same data.
41
+ *
42
+ * @param left - The first `AggregateQuerySnapshot` to compare.
43
+ * @param right - The second `AggregateQuerySnapshot` to compare.
44
+ *
45
+ * @returns `true` if the objects are "equal", as defined above, or `false`
46
+ * otherwise.
47
+ */
48
+ export declare function aggregateQuerySnapshotEqual<T extends AggregateSpec>(left: AggregateQuerySnapshot<T>, right: AggregateQuerySnapshot<T>): boolean;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Query } from './reference';
18
+ /**
19
+ * Represents an aggregation that can be performed by Firestore.
20
+ */
21
+ export declare class AggregateField<T> {
22
+ /** A type string to uniquely identify instances of this class. */
23
+ type: string;
24
+ }
25
+ /**
26
+ * The union of all `AggregateField` types that are supported by Firestore.
27
+ */
28
+ export declare type AggregateFieldType = AggregateField<number>;
29
+ /**
30
+ * A type whose property values are all `AggregateField` objects.
31
+ */
32
+ export interface AggregateSpec {
33
+ [field: string]: AggregateFieldType;
34
+ }
35
+ /**
36
+ * A type whose keys are taken from an `AggregateSpec`, and whose values are the
37
+ * result of the aggregation performed by the corresponding `AggregateField`
38
+ * from the input `AggregateSpec`.
39
+ */
40
+ export declare type AggregateSpecData<T extends AggregateSpec> = {
41
+ [P in keyof T]: T[P] extends AggregateField<infer U> ? U : never;
42
+ };
43
+ /**
44
+ * The results of executing an aggregation query.
45
+ */
46
+ export declare class AggregateQuerySnapshot<T extends AggregateSpec> {
47
+ private readonly _data;
48
+ /** A type string to uniquely identify instances of this class. */
49
+ readonly type = "AggregateQuerySnapshot";
50
+ /**
51
+ * The underlying query over which the aggregations recorded in this
52
+ * `AggregateQuerySnapshot` were performed.
53
+ */
54
+ readonly query: Query<unknown>;
55
+ /** @hideconstructor */
56
+ constructor(query: Query<unknown>, _data: AggregateSpecData<T>);
57
+ /**
58
+ * Returns the results of the aggregations performed over the underlying
59
+ * query.
60
+ *
61
+ * The keys of the returned object will be the same as those of the
62
+ * `AggregateSpec` object specified to the aggregation method, and the values
63
+ * will be the corresponding aggregation result.
64
+ *
65
+ * @returns The results of the aggregations performed over the underlying
66
+ * query.
67
+ */
68
+ data(): AggregateSpecData<T>;
69
+ }
@@ -21,6 +21,7 @@ import { User } from '../auth/user';
21
21
  import { DatabaseId } from '../core/database_info';
22
22
  import { FirestoreService } from './components';
23
23
  import { FirestoreSettingsImpl, PrivateSettings, FirestoreSettings } from './settings';
24
+ export { EmulatorMockTokenOptions } from '@firebase/util';
24
25
  declare module '@firebase/component' {
25
26
  interface NameServiceMapping {
26
27
  'firestore/lite': Firestore;
@@ -29,7 +30,7 @@ declare module '@firebase/component' {
29
30
  /**
30
31
  * The Cloud Firestore service interface.
31
32
  *
32
- * Do not call this constructor directly. Instead, use {@link getFirestore}.
33
+ * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.
33
34
  */
34
35
  export declare class Firestore implements FirestoreService {
35
36
  _authCredentials: CredentialsProvider<User>;
@@ -71,8 +72,8 @@ export declare class Firestore implements FirestoreService {
71
72
  /**
72
73
  * Initializes a new instance of Cloud Firestore with the provided settings.
73
74
  * Can only be called before any other functions, including
74
- * {@link getFirestore}. If the custom settings are empty, this function is
75
- * equivalent to calling {@link getFirestore}.
75
+ * {@link (getFirestore:1)}. If the custom settings are empty, this function is
76
+ * equivalent to calling {@link (getFirestore:1)}.
76
77
  *
77
78
  * @param app - The {@link @firebase/app#FirebaseApp} with which the `Firestore` instance will
78
79
  * be associated.
@@ -83,8 +84,8 @@ export declare function initializeFirestore(app: FirebaseApp, settings: Firestor
83
84
  /**
84
85
  * Initializes a new instance of Cloud Firestore with the provided settings.
85
86
  * Can only be called before any other functions, including
86
- * {@link getFirestore}. If the custom settings are empty, this function is
87
- * equivalent to calling {@link getFirestore}.
87
+ * {@link (getFirestore:1)}. If the custom settings are empty, this function is
88
+ * equivalent to calling {@link (getFirestore:1)}.
88
89
  *
89
90
  * @param app - The {@link @firebase/app#FirebaseApp} with which the `Firestore` instance will
90
91
  * be associated.
@@ -134,7 +135,6 @@ export declare function getFirestore(databaseId: string): Firestore;
134
135
  * @internal
135
136
  */
136
137
  export declare function getFirestore(app: FirebaseApp, databaseId: string): Firestore;
137
- export { EmulatorMockTokenOptions } from '@firebase/util';
138
138
  /**
139
139
  * Modify this instance to communicate with the Cloud Firestore emulator.
140
140
  *
@@ -160,7 +160,7 @@ export declare function connectFirestoreEmulator(firestore: Firestore, host: str
160
160
  * response from the server will not be resolved.
161
161
  *
162
162
  * To restart after termination, create a new instance of `Firestore` with
163
- * {@link getFirestore}.
163
+ * {@link (getFirestore:1)}.
164
164
  *
165
165
  * Note: Under normal circumstances, calling `terminate()` is not required. This
166
166
  * function is useful only when you want to force this instance to release all of
@@ -26,6 +26,7 @@ export declare class GrpcConnection implements Connection {
26
26
  private readonly databasePath;
27
27
  private readonly firestore;
28
28
  private cachedStub;
29
+ get shouldResourcePathBeIncludedInRequest(): boolean;
29
30
  constructor(protos: grpc.GrpcObject, databaseInfo: DatabaseInfo);
30
31
  private ensureActiveStub;
31
32
  invokeRPC<Req, Resp>(rpcName: string, path: string, request: Req, authToken: Token | null, appCheckToken: Token | null): Promise<Resp>;
@@ -295,6 +295,32 @@ export declare namespace firestoreV1ApiClientInterfaces {
295
295
  readTime?: string;
296
296
  skippedResults?: number;
297
297
  }
298
+ interface RunAggregationQueryRequest {
299
+ parent?: string;
300
+ structuredAggregationQuery?: StructuredAggregationQuery;
301
+ transaction?: string;
302
+ newTransaction?: TransactionOptions;
303
+ readTime?: string;
304
+ }
305
+ interface RunAggregationQueryResponse {
306
+ result?: AggregationResult;
307
+ transaction?: string;
308
+ readTime?: string;
309
+ }
310
+ interface AggregationResult {
311
+ aggregateFields?: ApiClientObjectMap<Value>;
312
+ }
313
+ interface StructuredAggregationQuery {
314
+ structuredQuery?: StructuredQuery;
315
+ aggregations?: Aggregation[];
316
+ }
317
+ interface Aggregation {
318
+ count?: Count;
319
+ alias?: string;
320
+ }
321
+ interface Count {
322
+ upTo?: number;
323
+ }
298
324
  interface Status {
299
325
  code?: number;
300
326
  message?: string;
@@ -417,6 +443,8 @@ export declare type ReadWrite = firestoreV1ApiClientInterfaces.ReadWrite;
417
443
  export declare type RollbackRequest = firestoreV1ApiClientInterfaces.RollbackRequest;
418
444
  export declare type RunQueryRequest = firestoreV1ApiClientInterfaces.RunQueryRequest;
419
445
  export declare type RunQueryResponse = firestoreV1ApiClientInterfaces.RunQueryResponse;
446
+ export declare type RunAggregationQueryRequest = firestoreV1ApiClientInterfaces.RunAggregationQueryRequest;
447
+ export declare type RunAggregationQueryResponse = firestoreV1ApiClientInterfaces.RunAggregationQueryResponse;
420
448
  export declare type Status = firestoreV1ApiClientInterfaces.Status;
421
449
  export declare type StructuredQuery = firestoreV1ApiClientInterfaces.StructuredQuery;
422
450
  export declare type Target = firestoreV1ApiClientInterfaces.Target;
@@ -62,6 +62,13 @@ export interface Connection {
62
62
  * @param token - the Token to use for the RPC.
63
63
  */
64
64
  openStream<Req, Resp>(rpcName: string, authToken: Token | null, appCheckToken: Token | null): Stream<Req, Resp>;
65
+ /**
66
+ * Returns whether or not the implementation requires that the "path" of the resource
67
+ * (a document or a collection) be present in the request message. If true, then the
68
+ * request message must include the path. If false, then the request message must NOT
69
+ * include the path.
70
+ */
71
+ readonly shouldResourcePathBeIncludedInRequest: boolean;
65
72
  }
66
73
  /**
67
74
  * A bidirectional stream that can be used to send an receive messages.