mirror of
https://github.com/hanzoai/firebase-js-sdk.git
synced 2026-09-24 16:59:10 +00:00
152 lines
4.3 KiB
TypeScript
152 lines
4.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2017 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { Timestamp } from '../../../src/api/timestamp';
|
|
import { Query } from '../../../src/core/query';
|
|
import { BatchId } from '../../../src/core/types';
|
|
import { MutationQueue } from '../../../src/local/mutation_queue';
|
|
import { Persistence } from '../../../src/local/persistence';
|
|
import { DocumentKeySet } from '../../../src/model/collections';
|
|
import { DocumentKey } from '../../../src/model/document_key';
|
|
import { Mutation } from '../../../src/model/mutation';
|
|
import { MutationBatch } from '../../../src/model/mutation_batch';
|
|
import { SortedMap } from '../../../src/util/sorted_map';
|
|
|
|
/**
|
|
* A wrapper around a MutationQueue that automatically creates a
|
|
* transaction around every operation to reduce test boilerplate.
|
|
*/
|
|
export class TestMutationQueue {
|
|
constructor(public persistence: Persistence, public queue: MutationQueue) {}
|
|
|
|
checkEmpty(): Promise<boolean> {
|
|
return this.persistence.runTransaction('checkEmpty', 'readonly', txn => {
|
|
return this.queue.checkEmpty(txn);
|
|
});
|
|
}
|
|
|
|
countBatches(): Promise<number> {
|
|
return this.persistence
|
|
.runTransaction('countBatches', 'readonly', txn => {
|
|
return this.queue.getAllMutationBatches(txn);
|
|
})
|
|
.then(batches => batches.length);
|
|
}
|
|
|
|
addMutationBatch(mutations: Mutation[]): Promise<MutationBatch> {
|
|
return this.persistence.runTransaction(
|
|
'addMutationBatch',
|
|
'readwrite',
|
|
txn => {
|
|
return this.queue.addMutationBatch(
|
|
txn,
|
|
Timestamp.now(),
|
|
/* baseMutations= */ [],
|
|
mutations
|
|
);
|
|
}
|
|
);
|
|
}
|
|
|
|
lookupMutationBatch(batchId: BatchId): Promise<MutationBatch | null> {
|
|
return this.persistence.runTransaction(
|
|
'lookupMutationBatch',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.lookupMutationBatch(txn, batchId);
|
|
}
|
|
);
|
|
}
|
|
|
|
getNextMutationBatchAfterBatchId(
|
|
batchId: BatchId
|
|
): Promise<MutationBatch | null> {
|
|
return this.persistence.runTransaction(
|
|
'getNextMutationBatchAfterBatchId',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.getNextMutationBatchAfterBatchId(txn, batchId);
|
|
}
|
|
);
|
|
}
|
|
|
|
getAllMutationBatches(): Promise<MutationBatch[]> {
|
|
return this.persistence.runTransaction(
|
|
'getAllMutationBatches',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.getAllMutationBatches(txn);
|
|
}
|
|
);
|
|
}
|
|
|
|
getAllMutationBatchesAffectingDocumentKey(
|
|
documentKey: DocumentKey
|
|
): Promise<MutationBatch[]> {
|
|
return this.persistence.runTransaction(
|
|
'getAllMutationBatchesAffectingDocumentKey',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.getAllMutationBatchesAffectingDocumentKey(
|
|
txn,
|
|
documentKey
|
|
);
|
|
}
|
|
);
|
|
}
|
|
|
|
getAllMutationBatchesAffectingDocumentKeys(
|
|
documentKeys: DocumentKeySet
|
|
): Promise<MutationBatch[]> {
|
|
let keyMap = new SortedMap<DocumentKey, null>(DocumentKey.comparator);
|
|
documentKeys.forEach(key => {
|
|
keyMap = keyMap.insert(key, null);
|
|
});
|
|
|
|
return this.persistence.runTransaction(
|
|
'getAllMutationBatchesAffectingDocumentKeys',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.getAllMutationBatchesAffectingDocumentKeys(
|
|
txn,
|
|
keyMap
|
|
);
|
|
}
|
|
);
|
|
}
|
|
|
|
getAllMutationBatchesAffectingQuery(query: Query): Promise<MutationBatch[]> {
|
|
return this.persistence.runTransaction(
|
|
'getAllMutationBatchesAffectingQuery',
|
|
'readonly',
|
|
txn => {
|
|
return this.queue.getAllMutationBatchesAffectingQuery(txn, query);
|
|
}
|
|
);
|
|
}
|
|
|
|
removeMutationBatch(batch: MutationBatch): Promise<void> {
|
|
return this.persistence.runTransaction(
|
|
'removeMutationBatch',
|
|
'readwrite-primary',
|
|
txn => {
|
|
return this.queue.removeMutationBatch(txn, batch);
|
|
}
|
|
);
|
|
}
|
|
}
|