@firebase/firestore 3.4.8 → 3.4.9

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 (118) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/firestore/lite/index.d.ts +1 -0
  3. package/dist/firestore/src/api/transaction.d.ts +2 -1
  4. package/dist/firestore/src/api/transaction_options.d.ts +17 -0
  5. package/dist/firestore/src/api.d.ts +1 -0
  6. package/dist/firestore/src/core/firestore_client.d.ts +2 -1
  7. package/dist/firestore/src/core/query.d.ts +2 -4
  8. package/dist/firestore/src/core/target.d.ts +6 -4
  9. package/dist/firestore/src/core/transaction_options.d.ts +25 -0
  10. package/dist/firestore/src/core/transaction_runner.d.ts +3 -2
  11. package/dist/firestore/src/lite-api/transaction.d.ts +2 -1
  12. package/dist/firestore/src/lite-api/transaction_options.d.ts +23 -0
  13. package/dist/firestore/src/local/index_manager.d.ts +24 -3
  14. package/dist/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
  15. package/dist/firestore/src/local/indexeddb_schema.d.ts +1 -0
  16. package/dist/firestore/src/local/local_documents_view.d.ts +1 -1
  17. package/dist/firestore/src/local/memory_index_manager.d.ts +3 -2
  18. package/dist/firestore/src/local/query_engine.d.ts +44 -5
  19. package/dist/firestore/src/model/collections.d.ts +1 -1
  20. package/dist/firestore/src/model/values.d.ts +14 -2
  21. package/dist/firestore/src/util/misc.d.ts +3 -0
  22. package/dist/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
  23. package/dist/firestore/test/unit/local/test_index_manager.d.ts +2 -2
  24. package/dist/index.d.ts +24 -1
  25. package/dist/index.esm2017.js +4108 -3992
  26. package/dist/index.esm2017.js.map +1 -1
  27. package/dist/index.esm5.js +4198 -4087
  28. package/dist/index.esm5.js.map +1 -1
  29. package/dist/index.node.cjs.js +1711 -1565
  30. package/dist/index.node.cjs.js.map +1 -1
  31. package/dist/index.node.mjs +1711 -1565
  32. package/dist/index.node.mjs.map +1 -1
  33. package/dist/index.rn.js +4100 -3984
  34. package/dist/index.rn.js.map +1 -1
  35. package/dist/internal.d.ts +50 -4
  36. package/dist/lite/firestore/lite/index.d.ts +1 -0
  37. package/dist/lite/firestore/src/api/transaction.d.ts +2 -1
  38. package/dist/lite/firestore/src/api/transaction_options.d.ts +17 -0
  39. package/dist/lite/firestore/src/api.d.ts +1 -0
  40. package/dist/lite/firestore/src/core/firestore_client.d.ts +2 -1
  41. package/dist/lite/firestore/src/core/query.d.ts +2 -4
  42. package/dist/lite/firestore/src/core/target.d.ts +6 -4
  43. package/dist/lite/firestore/src/core/transaction_options.d.ts +25 -0
  44. package/dist/lite/firestore/src/core/transaction_runner.d.ts +3 -2
  45. package/dist/lite/firestore/src/lite-api/transaction.d.ts +2 -1
  46. package/dist/lite/firestore/src/lite-api/transaction_options.d.ts +23 -0
  47. package/dist/lite/firestore/src/local/index_manager.d.ts +24 -3
  48. package/dist/lite/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
  49. package/dist/lite/firestore/src/local/indexeddb_schema.d.ts +1 -0
  50. package/dist/lite/firestore/src/local/local_documents_view.d.ts +1 -1
  51. package/dist/lite/firestore/src/local/memory_index_manager.d.ts +3 -2
  52. package/dist/lite/firestore/src/local/query_engine.d.ts +44 -5
  53. package/dist/lite/firestore/src/model/collections.d.ts +1 -1
  54. package/dist/lite/firestore/src/model/values.d.ts +14 -2
  55. package/dist/lite/firestore/src/util/misc.d.ts +3 -0
  56. package/dist/lite/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
  57. package/dist/lite/firestore/test/unit/local/test_index_manager.d.ts +2 -2
  58. package/dist/lite/index.browser.esm2017.js +341 -312
  59. package/dist/lite/index.browser.esm2017.js.map +1 -1
  60. package/dist/lite/index.browser.esm5.js +299 -291
  61. package/dist/lite/index.browser.esm5.js.map +1 -1
  62. package/dist/lite/index.d.ts +24 -1
  63. package/dist/lite/index.node.cjs.js +56 -15
  64. package/dist/lite/index.node.cjs.js.map +1 -1
  65. package/dist/lite/index.node.mjs +56 -15
  66. package/dist/lite/index.node.mjs.map +1 -1
  67. package/dist/lite/index.rn.esm2017.js +1227 -1198
  68. package/dist/lite/index.rn.esm2017.js.map +1 -1
  69. package/dist/lite/internal.d.ts +25 -1
  70. package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +28 -28
  71. package/dist/lite/packages/firestore/lite/index.d.ts +1 -0
  72. package/dist/lite/packages/firestore/src/api/transaction.d.ts +2 -1
  73. package/dist/lite/packages/firestore/src/api/transaction_options.d.ts +17 -0
  74. package/dist/lite/packages/firestore/src/api.d.ts +1 -0
  75. package/dist/lite/packages/firestore/src/core/firestore_client.d.ts +2 -1
  76. package/dist/lite/packages/firestore/src/core/query.d.ts +2 -4
  77. package/dist/lite/packages/firestore/src/core/target.d.ts +6 -4
  78. package/dist/lite/packages/firestore/src/core/transaction_options.d.ts +25 -0
  79. package/dist/lite/packages/firestore/src/core/transaction_runner.d.ts +3 -2
  80. package/dist/lite/packages/firestore/src/lite-api/transaction.d.ts +2 -1
  81. package/dist/lite/packages/firestore/src/lite-api/transaction_options.d.ts +23 -0
  82. package/dist/lite/packages/firestore/src/local/index_manager.d.ts +24 -3
  83. package/dist/lite/packages/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
  84. package/dist/lite/packages/firestore/src/local/indexeddb_schema.d.ts +1 -0
  85. package/dist/lite/packages/firestore/src/local/local_documents_view.d.ts +1 -1
  86. package/dist/lite/packages/firestore/src/local/memory_index_manager.d.ts +3 -2
  87. package/dist/lite/packages/firestore/src/local/query_engine.d.ts +44 -5
  88. package/dist/lite/packages/firestore/src/model/collections.d.ts +1 -1
  89. package/dist/lite/packages/firestore/src/model/values.d.ts +14 -2
  90. package/dist/lite/packages/firestore/src/util/misc.d.ts +3 -0
  91. package/dist/lite/packages/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
  92. package/dist/lite/packages/firestore/test/unit/local/test_index_manager.d.ts +2 -2
  93. package/dist/lite/private.d.ts +25 -1
  94. package/dist/packages/firestore/dist/index.esm2017.d.ts +155 -154
  95. package/dist/packages/firestore/lite/index.d.ts +1 -0
  96. package/dist/packages/firestore/src/api/transaction.d.ts +2 -1
  97. package/dist/packages/firestore/src/api/transaction_options.d.ts +17 -0
  98. package/dist/packages/firestore/src/api.d.ts +1 -0
  99. package/dist/packages/firestore/src/core/firestore_client.d.ts +2 -1
  100. package/dist/packages/firestore/src/core/query.d.ts +2 -4
  101. package/dist/packages/firestore/src/core/target.d.ts +6 -4
  102. package/dist/packages/firestore/src/core/transaction_options.d.ts +25 -0
  103. package/dist/packages/firestore/src/core/transaction_runner.d.ts +3 -2
  104. package/dist/packages/firestore/src/lite-api/transaction.d.ts +2 -1
  105. package/dist/packages/firestore/src/lite-api/transaction_options.d.ts +23 -0
  106. package/dist/packages/firestore/src/local/index_manager.d.ts +24 -3
  107. package/dist/packages/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
  108. package/dist/packages/firestore/src/local/indexeddb_schema.d.ts +1 -0
  109. package/dist/packages/firestore/src/local/local_documents_view.d.ts +1 -1
  110. package/dist/packages/firestore/src/local/memory_index_manager.d.ts +3 -2
  111. package/dist/packages/firestore/src/local/query_engine.d.ts +44 -5
  112. package/dist/packages/firestore/src/model/collections.d.ts +1 -1
  113. package/dist/packages/firestore/src/model/values.d.ts +14 -2
  114. package/dist/packages/firestore/src/util/misc.d.ts +3 -0
  115. package/dist/packages/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
  116. package/dist/packages/firestore/test/unit/local/test_index_manager.d.ts +2 -2
  117. package/dist/private.d.ts +50 -4
  118. package/package.json +7 -7
@@ -2110,7 +2110,7 @@ declare class ResourcePath extends BasePath<ResourcePath> {
2110
2110
  * `updateFunction `is returned here. Otherwise, if the transaction failed, a
2111
2111
  * rejected promise with the corresponding failure error is returned.
2112
2112
  */
2113
- export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>): Promise<T>;
2113
+ export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
2114
2114
 
2115
2115
  /**
2116
2116
  * Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to
@@ -2615,6 +2615,30 @@ declare class Transaction_2 {
2615
2615
  private ensureCommitNotCalled;
2616
2616
  }
2617
2617
 
2618
+ /**
2619
+ * @license
2620
+ * Copyright 2022 Google LLC
2621
+ *
2622
+ * Licensed under the Apache License, Version 2.0 (the "License");
2623
+ * you may not use this file except in compliance with the License.
2624
+ * You may obtain a copy of the License at
2625
+ *
2626
+ * http://www.apache.org/licenses/LICENSE-2.0
2627
+ *
2628
+ * Unless required by applicable law or agreed to in writing, software
2629
+ * distributed under the License is distributed on an "AS IS" BASIS,
2630
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2631
+ * See the License for the specific language governing permissions and
2632
+ * limitations under the License.
2633
+ */
2634
+ /**
2635
+ * Options to customize transaction behavior.
2636
+ */
2637
+ export declare interface TransactionOptions {
2638
+ /** Maximum number of attempts to commit, after which transaction fails. Default is 5. */
2639
+ readonly maxAttempts?: number;
2640
+ }
2641
+
2618
2642
  /** Used to represent a field transform on a mutation. */
2619
2643
  declare class TransformOperation {
2620
2644
  private _;
@@ -243,7 +243,7 @@ declare class an {
243
243
  /**
244
244
  * Sentinel values that can be used when writing document fields with `set()`
245
245
  * or `update()`.
246
- */ declare class vn {
246
+ */ declare class bn {
247
247
  /**
248
248
  * @param _methodName - The public API endpoint that returns this class.
249
249
  * @hideconstructor
@@ -335,7 +335,7 @@ declare class an {
335
335
  *
336
336
  * Latitude values are in the range of [-90, 90].
337
337
  * Longitude values are in the range of [-180, 180].
338
- */ declare class bn {
338
+ */ declare class vn {
339
339
  /**
340
340
  * Creates a new immutable `GeoPoint` object with the provided latitude and
341
341
  * longitude values.
@@ -536,7 +536,7 @@ declare class gt {
536
536
  * to be compared using the `>`, `<=`, `>=` and `>` operators.
537
537
  */ valueOf(): string;
538
538
  }
539
- declare class Ur {
539
+ declare class kr {
540
540
  /** @hideconstructor */
541
541
  constructor(t: any, e: any);
542
542
  _firestore: any;
@@ -548,14 +548,14 @@ declare class Ur {
548
548
  * @param documentRef - A reference to the document to be read.
549
549
  * @returns A `DocumentSnapshot` with the read data.
550
550
  */ get(t: any): any;
551
- set(t: any, e: any, n: any): Ur;
552
- update(t: any, e: any, n: any, ...r: any[]): Ur;
551
+ set(t: any, e: any, n: any): kr;
552
+ update(t: any, e: any, n: any, ...r: any[]): kr;
553
553
  /**
554
554
  * Deletes the document referred to by the provided {@link DocumentReference}.
555
555
  *
556
556
  * @param documentRef - A reference to the document to be deleted.
557
557
  * @returns This `Transaction` instance. Used for chaining method calls.
558
- */ delete(t: any): Ur;
558
+ */ delete(t: any): kr;
559
559
  }
560
560
  /**
561
561
  * @license
@@ -624,7 +624,7 @@ declare class Ur {
624
624
  * @throws Error - If the provided input is not a valid Firestore document.
625
625
  * @returns A `Promise` resolved with a `DocumentReference` pointing to the
626
626
  * newly created document after it has been written to the backend.
627
- */ declare function Ar(t: any, e: any): Promise<an>;
627
+ */ declare function Ir(t: any, e: any): Promise<an>;
628
628
  /**
629
629
  * Returns a special value that can be used with {@link (setDoc:1)} or {@link
630
630
  * updateDoc:1} that tells the server to remove the given elements from any
@@ -635,7 +635,7 @@ declare class Ur {
635
635
  * @param elements - The elements to remove from the array.
636
636
  * @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
637
637
  * `updateDoc()`
638
- */ declare function Dr(...t: any[]): xn;
638
+ */ declare function Dr(...t: any[]): Fn;
639
639
  /**
640
640
  * Returns a special value that can be used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link
641
641
  * @firebase/firestore/lite#(updateDoc:1)} that tells the server to union the given elements with any array
@@ -647,7 +647,7 @@ declare class Ur {
647
647
  * @param elements - The elements to union into the array.
648
648
  * @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
649
649
  * `updateDoc()`.
650
- */ declare function Vr(...t: any[]): Fn;
650
+ */ declare function Vr(...t: any[]): xn;
651
651
  declare function fn(t: any, e: any, ...n: any[]): ln;
652
652
  /**
653
653
  * Creates and returns a new `Query` instance that includes all documents in the
@@ -684,7 +684,7 @@ declare function fn(t: any, e: any, ...n: any[]): ln;
684
684
  * @param reference - A reference to the document to delete.
685
685
  * @returns A `Promise` resolved once the document has been successfully
686
686
  * deleted from the backend.
687
- */ declare function Ir(t: any): Promise<void>;
687
+ */ declare function Ar(t: any): Promise<void>;
688
688
  /**
689
689
  * @license
690
690
  * Copyright 2020 Google LLC
@@ -724,7 +724,7 @@ declare function fr(...t: any[]): lr;
724
724
  * @param reference - The reference of the document to fetch.
725
725
  * @returns A Promise resolved with a `DocumentSnapshot` containing the current
726
726
  * document contents.
727
- */ declare function vr(t: any): Promise<Yn>;
727
+ */ declare function br(t: any): Promise<Yn>;
728
728
  /**
729
729
  * Executes the query and returns the results as a {@link QuerySnapshot}.
730
730
  *
@@ -736,7 +736,7 @@ declare function fr(...t: any[]): lr;
736
736
  *
737
737
  * @param query - The `Query` to execute.
738
738
  * @returns A Promise that will be resolved with the results of the query.
739
- */ declare function br(t: any): Promise<Kn>;
739
+ */ declare function vr(t: any): Promise<Kn>;
740
740
  /**
741
741
  * Returns the existing `Firestore` instance that is associated with the
742
742
  * provided {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new
@@ -832,7 +832,7 @@ declare function sn(t: any, e: any): import("../../lite").Firestore;
832
832
  * (the `updateFunction` returned a failed promise), the promise returned by the
833
833
  * `updateFunction `is returned here. Otherwise, if the transaction failed, a
834
834
  * rejected promise with the corresponding failure error is returned.
835
- */ declare function kr(t: any, e: any): Promise<any>;
835
+ */ declare function jr(t: any, e: any, n: any): Promise<any>;
836
836
  /**
837
837
  * Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to
838
838
  * include a server-generated timestamp in the written data.
@@ -904,7 +904,7 @@ declare function Tr(t: any, e: any, n: any, ...r: any[]): Promise<void>;
904
904
  *
905
905
  * @returns A `WriteBatch` that can be used to atomically execute multiple
906
906
  * writes.
907
- */ declare function Fr(t: any): $r;
907
+ */ declare function xr(t: any): $r;
908
908
  /**
909
909
  * A dot-separated path for navigating sub-objects within a document.
910
910
  * @internal
@@ -979,40 +979,40 @@ import { FirebaseError as c } from "@firebase/util/dist/src/errors";
979
979
  q: any;
980
980
  /** Creates a new top-level parse context. */ ht(t: any, e: any, n: any, r?: boolean): Rn;
981
981
  }
982
- declare class xn extends vn {
982
+ declare class Fn extends bn {
983
983
  constructor(t: any, e: any);
984
984
  lt: any;
985
- _toFieldTransform(t: any): ve;
985
+ _toFieldTransform(t: any): be;
986
986
  isEqual(t: any): boolean;
987
987
  }
988
- declare class Fn extends vn {
988
+ declare class xn extends bn {
989
989
  constructor(t: any, e: any);
990
990
  lt: any;
991
- _toFieldTransform(t: any): ve;
991
+ _toFieldTransform(t: any): be;
992
992
  isEqual(t: any): boolean;
993
993
  }
994
- declare class Nn extends vn {
994
+ declare class Nn extends bn {
995
995
  _toFieldTransform(t: any): null;
996
996
  isEqual(t: any): boolean;
997
997
  }
998
998
  declare class lr extends Zn {
999
999
  constructor(t: any, e: any, n: any);
1000
1000
  type: any;
1001
- bt: any;
1001
+ vt: any;
1002
1002
  Et: any;
1003
1003
  _apply(t: any): hn;
1004
1004
  }
1005
- declare class qn extends vn {
1005
+ declare class qn extends bn {
1006
1006
  constructor(t: any, e: any);
1007
1007
  ft: any;
1008
- _toFieldTransform(t: any): ve;
1008
+ _toFieldTransform(t: any): be;
1009
1009
  isEqual(t: any): boolean;
1010
1010
  }
1011
1011
  declare class ir extends Zn {
1012
1012
  constructor(t: any, e: any, n: any);
1013
1013
  type: any;
1014
1014
  gt: any;
1015
- vt: any;
1015
+ bt: any;
1016
1016
  _apply(t: any): hn;
1017
1017
  }
1018
1018
  declare class rr extends Zn {
@@ -1022,14 +1022,14 @@ declare class rr extends Zn {
1022
1022
  type: string;
1023
1023
  _apply(t: any): hn;
1024
1024
  }
1025
- declare class Sn extends vn {
1026
- _toFieldTransform(t: any): ve;
1025
+ declare class Sn extends bn {
1026
+ _toFieldTransform(t: any): be;
1027
1027
  isEqual(t: any): boolean;
1028
1028
  }
1029
1029
  declare class cr extends Zn {
1030
1030
  constructor(t: any, e: any, n: any);
1031
1031
  type: any;
1032
- bt: any;
1032
+ vt: any;
1033
1033
  Et: any;
1034
1034
  _apply(t: any): hn;
1035
1035
  }
@@ -1134,9 +1134,9 @@ declare class J {
1134
1134
  * See the License for the specific language governing permissions and
1135
1135
  * limitations under the License.
1136
1136
  */
1137
- /** A field path and the TransformOperation to perform upon it. */ declare class ve {
1137
+ /** A field path and the TransformOperation to perform upon it. */ declare class be {
1138
1138
  constructor(t: any, e: any);
1139
1139
  field: any;
1140
1140
  transform: any;
1141
1141
  }
1142
- export { gn as Bytes, ln as CollectionReference, an as DocumentReference, Yn as DocumentSnapshot, yn as FieldPath, vn as FieldValue, rn as Firestore, U as FirestoreError, bn as GeoPoint, hn as Query, Zn as QueryConstraint, Hn as QueryDocumentSnapshot, Kn as QuerySnapshot, gt as Timestamp, Ur as Transaction, $r as WriteBatch, Ar as addDoc, Dr as arrayRemove, Vr as arrayUnion, fn as collection, dn as collectionGroup, un as connectFirestoreEmulator, Ir as deleteDoc, Rr as deleteField, wn as doc, _n as documentId, dr as endAt, fr as endBefore, vr as getDoc, br as getDocs, on as getFirestore, Nr as increment, sn as initializeFirestore, or as limit, ur as limitToLast, sr as orderBy, tr as query, pn as queryEqual, mn as refEqual, kr as runTransaction, Pr as serverTimestamp, Er as setDoc, w as setLogLevel, Jn as snapshotEqual, hr as startAfter, ar as startAt, cn as terminate, Tr as updateDoc, nr as where, Fr as writeBatch };
1142
+ export { gn as Bytes, ln as CollectionReference, an as DocumentReference, Yn as DocumentSnapshot, yn as FieldPath, bn as FieldValue, rn as Firestore, U as FirestoreError, vn as GeoPoint, hn as Query, Zn as QueryConstraint, Hn as QueryDocumentSnapshot, Kn as QuerySnapshot, gt as Timestamp, kr as Transaction, $r as WriteBatch, Ir as addDoc, Dr as arrayRemove, Vr as arrayUnion, fn as collection, dn as collectionGroup, un as connectFirestoreEmulator, Ar as deleteDoc, Rr as deleteField, wn as doc, _n as documentId, dr as endAt, fr as endBefore, br as getDoc, vr as getDocs, on as getFirestore, Nr as increment, sn as initializeFirestore, or as limit, ur as limitToLast, sr as orderBy, tr as query, pn as queryEqual, mn as refEqual, jr as runTransaction, Pr as serverTimestamp, Er as setDoc, w as setLogLevel, Jn as snapshotEqual, hr as startAfter, ar as startAt, cn as terminate, Tr as updateDoc, nr as where, xr as writeBatch };
@@ -17,6 +17,7 @@ export { FieldValue } from '../src/lite-api/field_value';
17
17
  export { increment, arrayRemove, arrayUnion, serverTimestamp, deleteField } from '../src/lite-api/field_value_impl';
18
18
  export { FirestoreDataConverter, DocumentSnapshot, QueryDocumentSnapshot, QuerySnapshot, snapshotEqual } from '../src/lite-api/snapshot';
19
19
  export { WriteBatch, writeBatch } from '../src/lite-api/write_batch';
20
+ export { TransactionOptions } from '../src/lite-api/transaction_options';
20
21
  export { Transaction, runTransaction } from '../src/lite-api/transaction';
21
22
  export { setLogLevel, LogLevelString as LogLevel } from '../src/util/log';
22
23
  export { Bytes } from '../src/lite-api/bytes';
@@ -19,6 +19,7 @@ import { DocumentReference } from '../lite-api/reference';
19
19
  import { Transaction as LiteTransaction } from '../lite-api/transaction';
20
20
  import { Firestore } from './database';
21
21
  import { DocumentSnapshot } from './snapshot';
22
+ import { TransactionOptions } from './transaction_options';
22
23
  /**
23
24
  * A reference to a transaction.
24
25
  *
@@ -55,4 +56,4 @@ export declare class Transaction extends LiteTransaction {
55
56
  * `updateFunction `is returned here. Otherwise, if the transaction failed, a
56
57
  * rejected promise with the corresponding failure error is returned.
57
58
  */
58
- export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>): Promise<T>;
59
+ export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
@@ -0,0 +1,17 @@
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
+ export { TransactionOptions } from '../lite-api/transaction_options';
@@ -22,6 +22,7 @@ export { DocumentChange, DocumentSnapshot, QueryDocumentSnapshot, QuerySnapshot,
22
22
  export { DocumentReference, CollectionReference, Query, doc, collection, collectionGroup, SetOptions, DocumentData, UpdateData, WithFieldValue, PartialWithFieldValue, refEqual, queryEqual } from './api/reference';
23
23
  export { endAt, endBefore, startAt, startAfter, limit, limitToLast, where, orderBy, query, QueryConstraint, QueryConstraintType, OrderByDirection, WhereFilterOp } from './api/filter';
24
24
  export { Unsubscribe, SnapshotListenOptions } from './api/reference_impl';
25
+ export { TransactionOptions } from './api/transaction_options';
25
26
  export { runTransaction, Transaction } from './api/transaction';
26
27
  export { getDoc, getDocFromCache, getDocFromServer, getDocs, getDocsFromCache, getDocsFromServer, onSnapshot, onSnapshotsInSync, setDoc, updateDoc, deleteDoc, addDoc, executeWrite } from './api/reference_impl';
27
28
  export { FieldValue } from './api/field_value';
@@ -30,6 +30,7 @@ import { EventManager, ListenOptions, Observer } from './event_manager';
30
30
  import { Query } from './query';
31
31
  import { SyncEngine } from './sync_engine';
32
32
  import { Transaction } from './transaction';
33
+ import { TransactionOptions } from './transaction_options';
33
34
  import { ViewSnapshot } from './view_snapshot';
34
35
  export declare const MAX_CONCURRENT_LIMBO_RESOLUTIONS = 100;
35
36
  /**
@@ -113,6 +114,6 @@ export declare function firestoreClientAddSnapshotsInSyncListener(client: Firest
113
114
  * been committed. For this reason, it is required that all reads are
114
115
  * performed before any writes. Transactions must be performed while online.
115
116
  */
116
- export declare function firestoreClientTransaction<T>(client: FirestoreClient, updateFunction: (transaction: Transaction) => Promise<T>): Promise<T>;
117
+ export declare function firestoreClientTransaction<T>(client: FirestoreClient, updateFunction: (transaction: Transaction) => Promise<T>, options: TransactionOptions): Promise<T>;
117
118
  export declare function firestoreClientLoadBundle(client: FirestoreClient, databaseId: DatabaseId, data: ReadableStream<Uint8Array> | ArrayBuffer | string, resultTask: LoadBundleTask): void;
118
119
  export declare function firestoreClientGetNamedQuery(client: FirestoreClient, queryName: string): Promise<NamedQuery | undefined>;
@@ -76,9 +76,7 @@ export declare function asCollectionQueryAtPath(query: Query, path: ResourcePath
76
76
  * Returns true if this query does not specify any query constraints that
77
77
  * could remove results.
78
78
  */
79
- export declare function matchesAllDocuments(query: Query): boolean;
80
- export declare function hasLimitToFirst(query: Query): boolean;
81
- export declare function hasLimitToLast(query: Query): boolean;
79
+ export declare function queryMatchesAllDocuments(query: Query): boolean;
82
80
  export declare function getFirstOrderByField(query: Query): FieldPath | null;
83
81
  export declare function getInequalityFilterField(query: Query): FieldPath | null;
84
82
  /**
@@ -113,7 +111,7 @@ export declare function queryOrderBy(query: Query): OrderBy[];
113
111
  export declare function queryToTarget(query: Query): Target;
114
112
  export declare function queryWithAddedFilter(query: Query, filter: Filter): Query;
115
113
  export declare function queryWithAddedOrderBy(query: Query, orderBy: OrderBy): Query;
116
- export declare function queryWithLimit(query: Query, limit: number, limitType: LimitType): Query;
114
+ export declare function queryWithLimit(query: Query, limit: number | null, limitType: LimitType): Query;
117
115
  export declare function queryWithStartAt(query: Query, bound: Bound): Query;
118
116
  export declare function queryWithEndAt(query: Query, bound: Bound): Query;
119
117
  export declare function queryEquals(left: Query, right: Query): boolean;
@@ -72,16 +72,18 @@ export declare function targetGetArrayValues(target: Target, fieldIndex: FieldIn
72
72
  export declare function targetGetNotInValues(target: Target, fieldIndex: FieldIndex): ProtoValue[] | null;
73
73
  /**
74
74
  * Returns a lower bound of field values that can be used as a starting point to
75
- * scan the index defined by `fieldIndex`. Returns `null` if no lower bound
75
+ * scan the index defined by `fieldIndex`. Returns `MIN_VALUE` if no lower bound
76
76
  * exists.
77
77
  */
78
- export declare function targetGetLowerBound(target: Target, fieldIndex: FieldIndex): Bound | null;
78
+ export declare function targetGetLowerBound(target: Target, fieldIndex: FieldIndex): Bound;
79
79
  /**
80
80
  * Returns an upper bound of field values that can be used as an ending point
81
- * when scanning the index defined by `fieldIndex`. Returns `null` if no
81
+ * when scanning the index defined by `fieldIndex`. Returns `MAX_VALUE` if no
82
82
  * upper bound exists.
83
83
  */
84
- export declare function targetGetUpperBound(target: Target, fieldIndex: FieldIndex): Bound | null;
84
+ export declare function targetGetUpperBound(target: Target, fieldIndex: FieldIndex): Bound;
85
+ /** Returns the number of segments of a perfect index for this target. */
86
+ export declare function targetGetSegmentCount(target: Target): number;
85
87
  export declare abstract class Filter {
86
88
  abstract matches(doc: Document): boolean;
87
89
  }
@@ -0,0 +1,25 @@
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
+ export declare const DEFAULT_TRANSACTION_OPTIONS: TransactionOptions;
18
+ /**
19
+ * Options to customize transaction behavior.
20
+ */
21
+ export declare interface TransactionOptions {
22
+ /** Maximum number of attempts to commit, after which transaction fails. Default is 5. */
23
+ readonly maxAttempts: number;
24
+ }
25
+ export declare function validateTransactionOptions(options: TransactionOptions): void;
@@ -18,7 +18,7 @@ import { Datastore } from '../remote/datastore';
18
18
  import { AsyncQueue } from '../util/async_queue';
19
19
  import { Deferred } from '../util/promise';
20
20
  import { Transaction } from './transaction';
21
- export declare const DEFAULT_MAX_ATTEMPTS_COUNT = 5;
21
+ import { TransactionOptions } from './transaction_options';
22
22
  /**
23
23
  * TransactionRunner encapsulates the logic needed to run and retry transactions
24
24
  * with backoff.
@@ -26,11 +26,12 @@ export declare const DEFAULT_MAX_ATTEMPTS_COUNT = 5;
26
26
  export declare class TransactionRunner<T> {
27
27
  private readonly asyncQueue;
28
28
  private readonly datastore;
29
+ private readonly options;
29
30
  private readonly updateFunction;
30
31
  private readonly deferred;
31
32
  private attemptsRemaining;
32
33
  private backoff;
33
- constructor(asyncQueue: AsyncQueue, datastore: Datastore, updateFunction: (transaction: Transaction) => Promise<T>, deferred: Deferred<T>);
34
+ constructor(asyncQueue: AsyncQueue, datastore: Datastore, options: TransactionOptions, updateFunction: (transaction: Transaction) => Promise<T>, deferred: Deferred<T>);
34
35
  /** Runs the transaction and sets the result on deferred. */
35
36
  run(): void;
36
37
  private runWithBackOff;
@@ -19,6 +19,7 @@ import { Firestore } from './database';
19
19
  import { FieldPath } from './field_path';
20
20
  import { DocumentReference, PartialWithFieldValue, SetOptions, UpdateData, WithFieldValue } from './reference';
21
21
  import { DocumentSnapshot } from './snapshot';
22
+ import { TransactionOptions } from './transaction_options';
22
23
  /**
23
24
  * A reference to a transaction.
24
25
  *
@@ -116,4 +117,4 @@ export declare class Transaction {
116
117
  * `updateFunction `is returned here. Otherwise, if the transaction failed, a
117
118
  * rejected promise with the corresponding failure error is returned.
118
119
  */
119
- export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>): Promise<T>;
120
+ export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
@@ -0,0 +1,23 @@
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
+ /**
18
+ * Options to customize transaction behavior.
19
+ */
20
+ export declare interface TransactionOptions {
21
+ /** Maximum number of attempts to commit, after which transaction fails. Default is 5. */
22
+ readonly maxAttempts?: number;
23
+ }
@@ -21,6 +21,22 @@ import { FieldIndex, IndexOffset } from '../model/field_index';
21
21
  import { ResourcePath } from '../model/path';
22
22
  import { PersistencePromise } from './persistence_promise';
23
23
  import { PersistenceTransaction } from './persistence_transaction';
24
+ /** Represents the index state as it relates to a particular target. */
25
+ export declare const enum IndexType {
26
+ /** Indicates that no index could be found for serving the target. */
27
+ NONE = 0,
28
+ /**
29
+ * Indicates that only a "partial index" could be found for serving the
30
+ * target. A partial index is one which does not have a segment for every
31
+ * filter/orderBy in the target.
32
+ */
33
+ PARTIAL = 1,
34
+ /**
35
+ * Indicates that a "full index" could be found for serving the target. A full
36
+ * index is one which has a segment for every filter/orderBy in the target.
37
+ */
38
+ FULL = 2
39
+ }
24
40
  /**
25
41
  * Represents a set of indexes that are used to execute queries efficiently.
26
42
  *
@@ -68,10 +84,10 @@ export interface IndexManager {
68
84
  /** Returns all configured field indexes. */
69
85
  getFieldIndexes(transaction: PersistenceTransaction): PersistencePromise<FieldIndex[]>;
70
86
  /**
71
- * Returns an index that can be used to serve the provided target. Returns
72
- * `null` if no index is configured.
87
+ * Returns the type of index (if any) that can be used to serve the given
88
+ * target.
73
89
  */
74
- getFieldIndex(transaction: PersistenceTransaction, target: Target): PersistencePromise<FieldIndex | null>;
90
+ getIndexType(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexType>;
75
91
  /**
76
92
  * Returns the documents that match the given target based on the provided
77
93
  * index or `null` if the target does not have a matching index.
@@ -93,4 +109,9 @@ export interface IndexManager {
93
109
  updateCollectionGroup(transaction: PersistenceTransaction, collectionGroup: string, offset: IndexOffset): PersistencePromise<void>;
94
110
  /** Updates the index entries for the provided documents. */
95
111
  updateIndexEntries(transaction: PersistenceTransaction, documents: DocumentMap): PersistencePromise<void>;
112
+ /**
113
+ * Iterates over all field indexes that are used to serve the given target,
114
+ * and returns the minimum offset of them all.
115
+ */
116
+ getMinOffset(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexOffset>;
96
117
  }
@@ -21,7 +21,7 @@ import { DocumentMap } from '../model/collections';
21
21
  import { DocumentKey } from '../model/document_key';
22
22
  import { FieldIndex, IndexOffset } from '../model/field_index';
23
23
  import { ResourcePath } from '../model/path';
24
- import { IndexManager } from './index_manager';
24
+ import { IndexManager, IndexType } from './index_manager';
25
25
  import { PersistencePromise } from './persistence_promise';
26
26
  import { PersistenceTransaction } from './persistence_transaction';
27
27
  /**
@@ -70,12 +70,8 @@ export declare class IndexedDbIndexManager implements IndexManager {
70
70
  private generateLowerBound;
71
71
  /** Generates the upper bound for `arrayValue` and `directionalValue`. */
72
72
  private generateUpperBound;
73
- /**
74
- * Generates an empty bound that scopes the index scan to the current index
75
- * and user.
76
- */
77
- private generateEmptyBound;
78
- getFieldIndex(transaction: PersistenceTransaction, target: Target): PersistencePromise<FieldIndex | null>;
73
+ private getFieldIndex;
74
+ getIndexType(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexType>;
79
75
  /**
80
76
  * Returns the byte encoded form of the directional values in the field index.
81
77
  * Returns `null` if the document does not have all fields specified in the
@@ -132,4 +128,5 @@ export declare class IndexedDbIndexManager implements IndexManager {
132
128
  * '[foo > 2 && foo != 3]` becomes `[foo > 2 && < 3, foo > 3]`.
133
129
  */
134
130
  private createRange;
131
+ getMinOffset(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexOffset>;
135
132
  }
@@ -20,6 +20,7 @@ import { BundledQuery } from '../protos/firestore_bundle_proto';
20
20
  import { Document as ProtoDocument, DocumentsTarget as ProtoDocumentsTarget, QueryTarget as ProtoQueryTarget, Write as ProtoWrite } from '../protos/firestore_proto_api';
21
21
  import { EncodedResourcePath } from './encoded_resource_path';
22
22
  import { DbTimestampKey } from './indexeddb_sentinels';
23
+ export declare const INDEXING_ENABLED = false;
23
24
  export declare const INDEXING_SCHEMA_VERSION = 14;
24
25
  /**
25
26
  * Schema Version for the Web client:
@@ -33,7 +33,7 @@ import { RemoteDocumentCache } from './remote_document_cache';
33
33
  export declare class LocalDocumentsView {
34
34
  readonly remoteDocumentCache: RemoteDocumentCache;
35
35
  readonly mutationQueue: MutationQueue;
36
- readonly indexManager: IndexManager;
36
+ private readonly indexManager;
37
37
  constructor(remoteDocumentCache: RemoteDocumentCache, mutationQueue: MutationQueue, indexManager: IndexManager);
38
38
  /**
39
39
  * Get the local view of the document identified by `key`.
@@ -19,7 +19,7 @@ import { DocumentMap } from '../model/collections';
19
19
  import { DocumentKey } from '../model/document_key';
20
20
  import { FieldIndex, IndexOffset } from '../model/field_index';
21
21
  import { ResourcePath } from '../model/path';
22
- import { IndexManager } from './index_manager';
22
+ import { IndexManager, IndexType } from './index_manager';
23
23
  import { PersistencePromise } from './persistence_promise';
24
24
  import { PersistenceTransaction } from './persistence_transaction';
25
25
  /**
@@ -32,9 +32,10 @@ export declare class MemoryIndexManager implements IndexManager {
32
32
  addFieldIndex(transaction: PersistenceTransaction, index: FieldIndex): PersistencePromise<void>;
33
33
  deleteFieldIndex(transaction: PersistenceTransaction, index: FieldIndex): PersistencePromise<void>;
34
34
  getDocumentsMatchingTarget(transaction: PersistenceTransaction, target: Target): PersistencePromise<DocumentKey[] | null>;
35
- getFieldIndex(transaction: PersistenceTransaction, target: Target): PersistencePromise<FieldIndex | null>;
35
+ getIndexType(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexType>;
36
36
  getFieldIndexes(transaction: PersistenceTransaction, collectionGroup?: string): PersistencePromise<FieldIndex[]>;
37
37
  getNextCollectionGroupToUpdate(transaction: PersistenceTransaction): PersistencePromise<string | null>;
38
+ getMinOffset(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexOffset>;
38
39
  updateCollectionGroup(transaction: PersistenceTransaction, collectionGroup: string, offset: IndexOffset): PersistencePromise<void>;
39
40
  updateIndexEntries(transaction: PersistenceTransaction, documents: DocumentMap): PersistencePromise<void>;
40
41
  }
@@ -17,14 +17,35 @@
17
17
  import { Query } from '../core/query';
18
18
  import { SnapshotVersion } from '../core/snapshot_version';
19
19
  import { DocumentKeySet, DocumentMap } from '../model/collections';
20
+ import { IndexManager } from './index_manager';
20
21
  import { LocalDocumentsView } from './local_documents_view';
21
22
  import { PersistencePromise } from './persistence_promise';
22
23
  import { PersistenceTransaction } from './persistence_transaction';
23
24
  /**
24
- * A query engine that takes advantage of the target document mapping in the
25
- * QueryCache. Query execution is optimized by only reading the documents that
26
- * previously matched a query plus any documents that were edited after the
27
- * query was last listened to.
25
+ * The Firestore query engine.
26
+ *
27
+ * Firestore queries can be executed in three modes. The Query Engine determines
28
+ * what mode to use based on what data is persisted. The mode only determines
29
+ * the runtime complexity of the query - the result set is equivalent across all
30
+ * implementations.
31
+ *
32
+ * The Query engine will use indexed-based execution if a user has configured
33
+ * any index that can be used to execute query (via `setIndexConfiguration()`).
34
+ * Otherwise, the engine will try to optimize the query by re-using a previously
35
+ * persisted query result. If that is not possible, the query will be executed
36
+ * via a full collection scan.
37
+ *
38
+ * Index-based execution is the default when available. The query engine
39
+ * supports partial indexed execution and merges the result from the index
40
+ * lookup with documents that have not yet been indexed. The index evaluation
41
+ * matches the backend's format and as such, the SDK can use indexing for all
42
+ * queries that the backend supports.
43
+ *
44
+ * If no index exists, the query engine tries to take advantage of the target
45
+ * document mapping in the TargetCache. These mappings exists for all queries
46
+ * that have been synced with the backend at least once and allow the query
47
+ * engine to only read documents that previously matched a query plus any
48
+ * documents that were edited after the query was last listened to.
28
49
  *
29
50
  * There are some cases when this optimization is not guaranteed to produce
30
51
  * the same results as full collection scans. In these cases, query
@@ -40,16 +61,29 @@ import { PersistenceTransaction } from './persistence_transaction';
40
61
  */
41
62
  export declare class QueryEngine {
42
63
  private localDocumentsView;
64
+ private indexManager;
65
+ private initialized;
43
66
  /** Sets the document view to query against. */
44
- setLocalDocumentsView(localDocuments: LocalDocumentsView): void;
67
+ initialize(localDocuments: LocalDocumentsView, indexManager: IndexManager): void;
45
68
  /** Returns all local documents matching the specified query. */
46
69
  getDocumentsMatchingQuery(transaction: PersistenceTransaction, query: Query, lastLimboFreeSnapshotVersion: SnapshotVersion, remoteKeys: DocumentKeySet): PersistencePromise<DocumentMap>;
70
+ /**
71
+ * Performs an indexed query that evaluates the query based on a collection's
72
+ * persisted index values. Returns `null` if an index is not available.
73
+ */
74
+ private performQueryUsingIndex;
75
+ /**
76
+ * Performs a query based on the target's persisted query mapping. Returns
77
+ * `null` if the mapping is not available or cannot be used.
78
+ */
79
+ private performQueryUsingRemoteKeys;
47
80
  /** Applies the query filter and sorting to the provided documents. */
48
81
  private applyQuery;
49
82
  /**
50
83
  * Determines if a limit query needs to be refilled from cache, making it
51
84
  * ineligible for index-free execution.
52
85
  *
86
+ * @param query The query.
53
87
  * @param sortedPreviousResults - The documents that matched the query when it
54
88
  * was last synchronized, sorted by the query's comparator.
55
89
  * @param remoteKeys - The document keys that matched the query at the last
@@ -59,4 +93,9 @@ export declare class QueryEngine {
59
93
  */
60
94
  private needsRefill;
61
95
  private executeFullCollectionScan;
96
+ /**
97
+ * Combines the results from an indexed execution with the remaining documents
98
+ * that have not yet been indexed.
99
+ */
100
+ private appendRemainingResults;
62
101
  }