@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.
- package/CHANGELOG.md +10 -0
- package/dist/firestore/lite/index.d.ts +1 -0
- package/dist/firestore/src/api/transaction.d.ts +2 -1
- package/dist/firestore/src/api/transaction_options.d.ts +17 -0
- package/dist/firestore/src/api.d.ts +1 -0
- package/dist/firestore/src/core/firestore_client.d.ts +2 -1
- package/dist/firestore/src/core/query.d.ts +2 -4
- package/dist/firestore/src/core/target.d.ts +6 -4
- package/dist/firestore/src/core/transaction_options.d.ts +25 -0
- package/dist/firestore/src/core/transaction_runner.d.ts +3 -2
- package/dist/firestore/src/lite-api/transaction.d.ts +2 -1
- package/dist/firestore/src/lite-api/transaction_options.d.ts +23 -0
- package/dist/firestore/src/local/index_manager.d.ts +24 -3
- package/dist/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
- package/dist/firestore/src/local/indexeddb_schema.d.ts +1 -0
- package/dist/firestore/src/local/local_documents_view.d.ts +1 -1
- package/dist/firestore/src/local/memory_index_manager.d.ts +3 -2
- package/dist/firestore/src/local/query_engine.d.ts +44 -5
- package/dist/firestore/src/model/collections.d.ts +1 -1
- package/dist/firestore/src/model/values.d.ts +14 -2
- package/dist/firestore/src/util/misc.d.ts +3 -0
- package/dist/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
- package/dist/firestore/test/unit/local/test_index_manager.d.ts +2 -2
- package/dist/index.d.ts +24 -1
- package/dist/index.esm2017.js +4108 -3992
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm5.js +4198 -4087
- package/dist/index.esm5.js.map +1 -1
- package/dist/index.node.cjs.js +1711 -1565
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/index.node.mjs +1711 -1565
- package/dist/index.node.mjs.map +1 -1
- package/dist/index.rn.js +4100 -3984
- package/dist/index.rn.js.map +1 -1
- package/dist/internal.d.ts +50 -4
- package/dist/lite/firestore/lite/index.d.ts +1 -0
- package/dist/lite/firestore/src/api/transaction.d.ts +2 -1
- package/dist/lite/firestore/src/api/transaction_options.d.ts +17 -0
- package/dist/lite/firestore/src/api.d.ts +1 -0
- package/dist/lite/firestore/src/core/firestore_client.d.ts +2 -1
- package/dist/lite/firestore/src/core/query.d.ts +2 -4
- package/dist/lite/firestore/src/core/target.d.ts +6 -4
- package/dist/lite/firestore/src/core/transaction_options.d.ts +25 -0
- package/dist/lite/firestore/src/core/transaction_runner.d.ts +3 -2
- package/dist/lite/firestore/src/lite-api/transaction.d.ts +2 -1
- package/dist/lite/firestore/src/lite-api/transaction_options.d.ts +23 -0
- package/dist/lite/firestore/src/local/index_manager.d.ts +24 -3
- package/dist/lite/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
- package/dist/lite/firestore/src/local/indexeddb_schema.d.ts +1 -0
- package/dist/lite/firestore/src/local/local_documents_view.d.ts +1 -1
- package/dist/lite/firestore/src/local/memory_index_manager.d.ts +3 -2
- package/dist/lite/firestore/src/local/query_engine.d.ts +44 -5
- package/dist/lite/firestore/src/model/collections.d.ts +1 -1
- package/dist/lite/firestore/src/model/values.d.ts +14 -2
- package/dist/lite/firestore/src/util/misc.d.ts +3 -0
- package/dist/lite/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
- package/dist/lite/firestore/test/unit/local/test_index_manager.d.ts +2 -2
- package/dist/lite/index.browser.esm2017.js +341 -312
- package/dist/lite/index.browser.esm2017.js.map +1 -1
- package/dist/lite/index.browser.esm5.js +299 -291
- package/dist/lite/index.browser.esm5.js.map +1 -1
- package/dist/lite/index.d.ts +24 -1
- package/dist/lite/index.node.cjs.js +56 -15
- package/dist/lite/index.node.cjs.js.map +1 -1
- package/dist/lite/index.node.mjs +56 -15
- package/dist/lite/index.node.mjs.map +1 -1
- package/dist/lite/index.rn.esm2017.js +1227 -1198
- package/dist/lite/index.rn.esm2017.js.map +1 -1
- package/dist/lite/internal.d.ts +25 -1
- package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +28 -28
- package/dist/lite/packages/firestore/lite/index.d.ts +1 -0
- package/dist/lite/packages/firestore/src/api/transaction.d.ts +2 -1
- package/dist/lite/packages/firestore/src/api/transaction_options.d.ts +17 -0
- package/dist/lite/packages/firestore/src/api.d.ts +1 -0
- package/dist/lite/packages/firestore/src/core/firestore_client.d.ts +2 -1
- package/dist/lite/packages/firestore/src/core/query.d.ts +2 -4
- package/dist/lite/packages/firestore/src/core/target.d.ts +6 -4
- package/dist/lite/packages/firestore/src/core/transaction_options.d.ts +25 -0
- package/dist/lite/packages/firestore/src/core/transaction_runner.d.ts +3 -2
- package/dist/lite/packages/firestore/src/lite-api/transaction.d.ts +2 -1
- package/dist/lite/packages/firestore/src/lite-api/transaction_options.d.ts +23 -0
- package/dist/lite/packages/firestore/src/local/index_manager.d.ts +24 -3
- package/dist/lite/packages/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
- package/dist/lite/packages/firestore/src/local/indexeddb_schema.d.ts +1 -0
- package/dist/lite/packages/firestore/src/local/local_documents_view.d.ts +1 -1
- package/dist/lite/packages/firestore/src/local/memory_index_manager.d.ts +3 -2
- package/dist/lite/packages/firestore/src/local/query_engine.d.ts +44 -5
- package/dist/lite/packages/firestore/src/model/collections.d.ts +1 -1
- package/dist/lite/packages/firestore/src/model/values.d.ts +14 -2
- package/dist/lite/packages/firestore/src/util/misc.d.ts +3 -0
- package/dist/lite/packages/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
- package/dist/lite/packages/firestore/test/unit/local/test_index_manager.d.ts +2 -2
- package/dist/lite/private.d.ts +25 -1
- package/dist/packages/firestore/dist/index.esm2017.d.ts +155 -154
- package/dist/packages/firestore/lite/index.d.ts +1 -0
- package/dist/packages/firestore/src/api/transaction.d.ts +2 -1
- package/dist/packages/firestore/src/api/transaction_options.d.ts +17 -0
- package/dist/packages/firestore/src/api.d.ts +1 -0
- package/dist/packages/firestore/src/core/firestore_client.d.ts +2 -1
- package/dist/packages/firestore/src/core/query.d.ts +2 -4
- package/dist/packages/firestore/src/core/target.d.ts +6 -4
- package/dist/packages/firestore/src/core/transaction_options.d.ts +25 -0
- package/dist/packages/firestore/src/core/transaction_runner.d.ts +3 -2
- package/dist/packages/firestore/src/lite-api/transaction.d.ts +2 -1
- package/dist/packages/firestore/src/lite-api/transaction_options.d.ts +23 -0
- package/dist/packages/firestore/src/local/index_manager.d.ts +24 -3
- package/dist/packages/firestore/src/local/indexeddb_index_manager.d.ts +4 -7
- package/dist/packages/firestore/src/local/indexeddb_schema.d.ts +1 -0
- package/dist/packages/firestore/src/local/local_documents_view.d.ts +1 -1
- package/dist/packages/firestore/src/local/memory_index_manager.d.ts +3 -2
- package/dist/packages/firestore/src/local/query_engine.d.ts +44 -5
- package/dist/packages/firestore/src/model/collections.d.ts +1 -1
- package/dist/packages/firestore/src/model/values.d.ts +14 -2
- package/dist/packages/firestore/src/util/misc.d.ts +3 -0
- package/dist/packages/firestore/test/unit/local/counting_query_engine.d.ts +2 -1
- package/dist/packages/firestore/test/unit/local/test_index_manager.d.ts +2 -2
- package/dist/private.d.ts +50 -4
- package/package.json +7 -7
package/dist/internal.d.ts
CHANGED
|
@@ -2517,10 +2517,10 @@ declare interface IndexManager {
|
|
|
2517
2517
|
/** Returns all configured field indexes. */
|
|
2518
2518
|
getFieldIndexes(transaction: PersistenceTransaction): PersistencePromise<FieldIndex[]>;
|
|
2519
2519
|
/**
|
|
2520
|
-
* Returns
|
|
2521
|
-
*
|
|
2520
|
+
* Returns the type of index (if any) that can be used to serve the given
|
|
2521
|
+
* target.
|
|
2522
2522
|
*/
|
|
2523
|
-
|
|
2523
|
+
getIndexType(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexType>;
|
|
2524
2524
|
/**
|
|
2525
2525
|
* Returns the documents that match the given target based on the provided
|
|
2526
2526
|
* index or `null` if the target does not have a matching index.
|
|
@@ -2542,6 +2542,11 @@ declare interface IndexManager {
|
|
|
2542
2542
|
updateCollectionGroup(transaction: PersistenceTransaction, collectionGroup: string, offset: IndexOffset): PersistencePromise<void>;
|
|
2543
2543
|
/** Updates the index entries for the provided documents. */
|
|
2544
2544
|
updateIndexEntries(transaction: PersistenceTransaction, documents: DocumentMap): PersistencePromise<void>;
|
|
2545
|
+
/**
|
|
2546
|
+
* Iterates over all field indexes that are used to serve the given target,
|
|
2547
|
+
* and returns the minimum offset of them all.
|
|
2548
|
+
*/
|
|
2549
|
+
getMinOffset(transaction: PersistenceTransaction, target: Target): PersistencePromise<IndexOffset>;
|
|
2545
2550
|
}
|
|
2546
2551
|
|
|
2547
2552
|
/**
|
|
@@ -2614,6 +2619,23 @@ declare class IndexState_2 {
|
|
|
2614
2619
|
static empty(): IndexState_2;
|
|
2615
2620
|
}
|
|
2616
2621
|
|
|
2622
|
+
/** Represents the index state as it relates to a particular target. */
|
|
2623
|
+
declare const enum IndexType {
|
|
2624
|
+
/** Indicates that no index could be found for serving the target. */
|
|
2625
|
+
NONE = 0,
|
|
2626
|
+
/**
|
|
2627
|
+
* Indicates that only a "partial index" could be found for serving the
|
|
2628
|
+
* target. A partial index is one which does not have a segment for every
|
|
2629
|
+
* filter/orderBy in the target.
|
|
2630
|
+
*/
|
|
2631
|
+
PARTIAL = 1,
|
|
2632
|
+
/**
|
|
2633
|
+
* Indicates that a "full index" could be found for serving the target. A full
|
|
2634
|
+
* index is one which has a segment for every filter/orderBy in the target.
|
|
2635
|
+
*/
|
|
2636
|
+
FULL = 2
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2617
2639
|
/**
|
|
2618
2640
|
* Initializes a new instance of {@link Firestore} with the provided settings.
|
|
2619
2641
|
* Can only be called before any other function, including
|
|
@@ -4498,7 +4520,7 @@ export declare class _ResourcePath extends BasePath<_ResourcePath> {
|
|
|
4498
4520
|
* `updateFunction `is returned here. Otherwise, if the transaction failed, a
|
|
4499
4521
|
* rejected promise with the corresponding failure error is returned.
|
|
4500
4522
|
*/
|
|
4501
|
-
export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T
|
|
4523
|
+
export declare function runTransaction<T>(firestore: Firestore, updateFunction: (transaction: Transaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
|
|
4502
4524
|
|
|
4503
4525
|
/**
|
|
4504
4526
|
* Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to
|
|
@@ -5625,6 +5647,30 @@ declare class Transaction_3 {
|
|
|
5625
5647
|
private ensureCommitNotCalled;
|
|
5626
5648
|
}
|
|
5627
5649
|
|
|
5650
|
+
/**
|
|
5651
|
+
* @license
|
|
5652
|
+
* Copyright 2022 Google LLC
|
|
5653
|
+
*
|
|
5654
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5655
|
+
* you may not use this file except in compliance with the License.
|
|
5656
|
+
* You may obtain a copy of the License at
|
|
5657
|
+
*
|
|
5658
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
5659
|
+
*
|
|
5660
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
5661
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
5662
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
5663
|
+
* See the License for the specific language governing permissions and
|
|
5664
|
+
* limitations under the License.
|
|
5665
|
+
*/
|
|
5666
|
+
/**
|
|
5667
|
+
* Options to customize transaction behavior.
|
|
5668
|
+
*/
|
|
5669
|
+
export declare interface TransactionOptions {
|
|
5670
|
+
/** Maximum number of attempts to commit, after which transaction fails. Default is 5. */
|
|
5671
|
+
readonly maxAttempts?: number;
|
|
5672
|
+
}
|
|
5673
|
+
|
|
5628
5674
|
/** Used to represent a field transform on a mutation. */
|
|
5629
5675
|
declare class TransformOperation {
|
|
5630
5676
|
private _;
|
|
@@ -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
|
|
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
|
|
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
|
|
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 `
|
|
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
|
|
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 `
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
72
|
-
*
|
|
87
|
+
* Returns the type of index (if any) that can be used to serve the given
|
|
88
|
+
* target.
|
|
73
89
|
*/
|
|
74
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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
|
-
|
|
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
|
}
|
|
@@ -31,7 +31,7 @@ export interface DocumentSizeEntries {
|
|
|
31
31
|
sizeMap: SortedMap<DocumentKey, number>;
|
|
32
32
|
}
|
|
33
33
|
export declare type DocumentMap = SortedMap<DocumentKey, Document>;
|
|
34
|
-
export declare function documentMap(): DocumentMap;
|
|
34
|
+
export declare function documentMap(...docs: Document[]): DocumentMap;
|
|
35
35
|
export declare type OverlayMap = ObjectMap<DocumentKey, Overlay>;
|
|
36
36
|
export declare function newOverlayMap(): OverlayMap;
|
|
37
37
|
export declare type MutationMap = ObjectMap<DocumentKey, Mutation>;
|
|
@@ -81,5 +81,17 @@ export declare function isMaxValue(value: Value): boolean;
|
|
|
81
81
|
export declare function valuesGetLowerBound(value: Value): Value;
|
|
82
82
|
/** Returns the largest value for the given value type (exclusive). */
|
|
83
83
|
export declare function valuesGetUpperBound(value: Value): Value;
|
|
84
|
-
export declare function
|
|
85
|
-
|
|
84
|
+
export declare function lowerBoundCompare(left: {
|
|
85
|
+
value: Value;
|
|
86
|
+
inclusive: boolean;
|
|
87
|
+
}, right: {
|
|
88
|
+
value: Value;
|
|
89
|
+
inclusive: boolean;
|
|
90
|
+
}): number;
|
|
91
|
+
export declare function upperBoundCompare(left: {
|
|
92
|
+
value: Value;
|
|
93
|
+
inclusive: boolean;
|
|
94
|
+
}, right: {
|
|
95
|
+
value: Value;
|
|
96
|
+
inclusive: boolean;
|
|
97
|
+
}): number;
|
|
@@ -25,6 +25,9 @@ export declare function primitiveComparator<T>(left: T, right: T): number;
|
|
|
25
25
|
export interface Equatable<T> {
|
|
26
26
|
isEqual(other: T): boolean;
|
|
27
27
|
}
|
|
28
|
+
export interface Iterable<V> {
|
|
29
|
+
forEach: (cb: (v: V) => void) => void;
|
|
30
|
+
}
|
|
28
31
|
/** Helper to compare arrays using isEqual(). */
|
|
29
32
|
export declare function arrayEquals<T>(left: T[], right: T[], comparator: (l: T, r: T) => boolean): boolean;
|
|
30
33
|
/**
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { Query } from '../../../src/core/query';
|
|
18
18
|
import { SnapshotVersion } from '../../../src/core/snapshot_version';
|
|
19
|
+
import { IndexManager } from '../../../src/local/index_manager';
|
|
19
20
|
import { LocalDocumentsView } from '../../../src/local/local_documents_view';
|
|
20
21
|
import { PersistencePromise } from '../../../src/local/persistence_promise';
|
|
21
22
|
import { PersistenceTransaction } from '../../../src/local/persistence_transaction';
|
|
@@ -51,7 +52,7 @@ export declare class CountingQueryEngine extends QueryEngine {
|
|
|
51
52
|
documentsReadByKey: number;
|
|
52
53
|
resetCounts(): void;
|
|
53
54
|
getDocumentsMatchingQuery(transaction: PersistenceTransaction, query: Query, lastLimboFreeSnapshotVersion: SnapshotVersion, remoteKeys: DocumentKeySet): PersistencePromise<DocumentMap>;
|
|
54
|
-
|
|
55
|
+
initialize(localDocuments: LocalDocumentsView, indexManager: IndexManager): void;
|
|
55
56
|
private wrapRemoteDocumentCache;
|
|
56
57
|
private wrapMutationQueue;
|
|
57
58
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import { Target } from '../../../src/core/target';
|
|
18
|
-
import { IndexManager } from '../../../src/local/index_manager';
|
|
18
|
+
import { IndexManager, IndexType } from '../../../src/local/index_manager';
|
|
19
19
|
import { Persistence } from '../../../src/local/persistence';
|
|
20
20
|
import { DocumentMap } from '../../../src/model/collections';
|
|
21
21
|
import { DocumentKey } from '../../../src/model/document_key';
|
|
@@ -34,7 +34,7 @@ export declare class TestIndexManager {
|
|
|
34
34
|
addFieldIndex(index: FieldIndex): Promise<void>;
|
|
35
35
|
deleteFieldIndex(index: FieldIndex): Promise<void>;
|
|
36
36
|
getFieldIndexes(collectionGroup?: string): Promise<FieldIndex[]>;
|
|
37
|
-
|
|
37
|
+
getIndexType(target: Target): Promise<IndexType>;
|
|
38
38
|
getDocumentsMatchingTarget(target: Target): Promise<DocumentKey[] | null>;
|
|
39
39
|
getNextCollectionGroupToUpdate(): Promise<string | null>;
|
|
40
40
|
updateCollectionGroup(collectionGroup: string, offset: IndexOffset): Promise<void>;
|