Skip to content
Merged
9 changes: 9 additions & 0 deletions packages/firestore/src/local/document_overlay_cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ export interface DocumentOverlayCache {
key: DocumentKey
): PersistencePromise<Overlay | null>;

/**
* Gets the saved overlay mutation for the given document keys. Skips keys for
* which there are no overlays.
*/
getOverlays(
transaction: PersistenceTransaction,
keys: DocumentKeySet
): PersistencePromise<OverlayMap>;

/**
* Saves the given document mutation map to persistence as overlays.
* All overlays will have their largest batch id set to `largestBatchId`.
Expand Down
18 changes: 18 additions & 0 deletions packages/firestore/src/local/indexeddb_document_overlay_cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,24 @@ export class IndexedDbDocumentOverlayCache implements DocumentOverlayCache {
});
}

getOverlays(
transaction: PersistenceTransaction,
keys: DocumentKeySet
): PersistencePromise<OverlayMap> {
const result = newOverlayMap();
const promises: Array<PersistencePromise<void>> = [];
keys.forEach(key => {
promises.push(
this.getOverlay(transaction, key).next(overlay => {
if (overlay !== null) {
result.set(key, overlay);
}
})
);
});
return PersistencePromise.waitFor(promises).next(() => result);
}

saveOverlays(
transaction: PersistenceTransaction,
largestBatchId: number,
Expand Down
Loading