Skip to content

Commit 2e25a0f

Browse files
FirestoreClient cleanup
This replaces a bunch of duplicate logic in firestore-exp with the FirestoreClient functions
1 parent 6a154eb commit 2e25a0f

File tree

2 files changed

+32
-116
lines changed

2 files changed

+32
-116
lines changed

packages/firestore/exp/src/api/reference.ts

Lines changed: 28 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,18 @@ import {
5757
Unsubscribe
5858
} from '../../../src/api/observer';
5959
import {
60-
executeQueryFromCache,
61-
executeQueryViaSnapshotListener,
62-
firestoreClientWrite,
63-
getEventManager,
64-
getLocalStore,
65-
readDocumentFromCache,
66-
readDocumentViaSnapshotListener
60+
firestoreClientAddSnapshotsInSyncListener,
61+
firestoreClientGetDocumentFromLocalCache,
62+
firestoreClientGetDocumentsFromLocalCache,
63+
firestoreClientGetDocumentsViaSnapshotListener,
64+
firestoreClientGetDocumentViaSnapshotListener,
65+
firestoreClientListen,
66+
firestoreClientWrite
6767
} from '../../../src/core/firestore_client';
6868
import {
6969
newQueryForPath,
7070
Query as InternalQuery
7171
} from '../../../src/core/query';
72-
import { Deferred } from '../../../src/util/promise';
73-
import { AsyncObserver } from '../../../src/util/async_observer';
74-
import {
75-
addSnapshotsInSyncListener,
76-
eventManagerListen,
77-
eventManagerUnlisten,
78-
QueryListener,
79-
removeSnapshotsInSyncListener
80-
} from '../../../src/core/event_manager';
8172
import { FirestoreError } from '../../../src/util/error';
8273
import { Compat } from '../../../src/compat/compat';
8374
import { ByteString } from '../../../src/util/byte_string';
@@ -134,20 +125,10 @@ export function getDoc<T>(
134125
const firestore = cast(reference.firestore, FirebaseFirestore);
135126
const client = ensureFirestoreConfigured(firestore);
136127

137-
const deferred = new Deferred<ViewSnapshot>();
138-
firestore._queue.enqueueAndForget(async () => {
139-
const eventManager = await getEventManager(client);
140-
await readDocumentViaSnapshotListener(
141-
eventManager,
142-
firestore._queue,
143-
reference._key,
144-
{ source: 'default' },
145-
deferred
146-
);
147-
});
148-
return deferred.promise.then(snapshot =>
149-
convertToDocSnapshot(firestore, reference, snapshot)
150-
);
128+
return firestoreClientGetDocumentViaSnapshotListener(
129+
client,
130+
reference._key
131+
).then(snapshot => convertToDocSnapshot(firestore, reference, snapshot));
151132
}
152133

153134
export class ExpUserDataWriter extends AbstractUserDataWriter {
@@ -179,12 +160,7 @@ export function getDocFromCache<T>(
179160
const client = ensureFirestoreConfigured(firestore);
180161
const userDataWriter = new ExpUserDataWriter(firestore);
181162

182-
const deferred = new Deferred<Document | null>();
183-
firestore._queue.enqueueAndForget(async () => {
184-
const localStore = await getLocalStore(client);
185-
await readDocumentFromCache(localStore, reference._key, deferred);
186-
});
187-
return deferred.promise.then(
163+
return firestoreClientGetDocumentFromLocalCache(client, reference._key).then(
188164
doc =>
189165
new DocumentSnapshot(
190166
firestore,
@@ -213,20 +189,9 @@ export function getDocFromServer<T>(
213189
const firestore = cast(reference.firestore, FirebaseFirestore);
214190
const client = ensureFirestoreConfigured(firestore);
215191

216-
const deferred = new Deferred<ViewSnapshot>();
217-
firestore._queue.enqueueAndForget(async () => {
218-
const eventManager = await getEventManager(client);
219-
await readDocumentViaSnapshotListener(
220-
eventManager,
221-
firestore._queue,
222-
reference._key,
223-
{ source: 'server' },
224-
deferred
225-
);
226-
});
227-
return deferred.promise.then(snapshot =>
228-
convertToDocSnapshot(firestore, reference, snapshot)
229-
);
192+
return firestoreClientGetDocumentViaSnapshotListener(client, reference._key, {
193+
source: 'server'
194+
}).then(snapshot => convertToDocSnapshot(firestore, reference, snapshot));
230195
}
231196

232197
/**
@@ -245,19 +210,10 @@ export function getDocs<T>(query: Query<T>): Promise<QuerySnapshot<T>> {
245210
const userDataWriter = new ExpUserDataWriter(firestore);
246211

247212
validateHasExplicitOrderByForLimitToLast(query._query);
248-
249-
const deferred = new Deferred<ViewSnapshot>();
250-
firestore._queue.enqueueAndForget(async () => {
251-
const eventManager = await getEventManager(client);
252-
await executeQueryViaSnapshotListener(
253-
eventManager,
254-
firestore._queue,
255-
query._query,
256-
{ source: 'default' },
257-
deferred
258-
);
259-
});
260-
return deferred.promise.then(
213+
return firestoreClientGetDocumentsViaSnapshotListener(
214+
client,
215+
query._query
216+
).then(
261217
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
262218
);
263219
}
@@ -275,12 +231,7 @@ export function getDocsFromCache<T>(
275231
const client = ensureFirestoreConfigured(firestore);
276232
const userDataWriter = new ExpUserDataWriter(firestore);
277233

278-
const deferred = new Deferred<ViewSnapshot>();
279-
firestore._queue.enqueueAndForget(async () => {
280-
const localStore = await getLocalStore(client);
281-
await executeQueryFromCache(localStore, query._query, deferred);
282-
});
283-
return deferred.promise.then(
234+
return firestoreClientGetDocumentsFromLocalCache(client, query._query).then(
284235
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
285236
);
286237
}
@@ -298,18 +249,9 @@ export function getDocsFromServer<T>(
298249
const client = ensureFirestoreConfigured(firestore);
299250
const userDataWriter = new ExpUserDataWriter(firestore);
300251

301-
const deferred = new Deferred<ViewSnapshot>();
302-
firestore._queue.enqueueAndForget(async () => {
303-
const eventManager = await getEventManager(client);
304-
await executeQueryViaSnapshotListener(
305-
eventManager,
306-
firestore._queue,
307-
query._query,
308-
{ source: 'server' },
309-
deferred
310-
);
311-
});
312-
return deferred.promise.then(
252+
return firestoreClientGetDocumentsViaSnapshotListener(client, query._query, {
253+
source: 'server'
254+
}).then(
313255
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
314256
);
315257
}
@@ -761,25 +703,12 @@ export function onSnapshot<T>(
761703
}
762704

763705
const client = ensureFirestoreConfigured(firestore);
764-
765-
const wrappedObserver = new AsyncObserver(observer);
766-
const listener = new QueryListener(
706+
return firestoreClientListen(
707+
client,
767708
internalQuery,
768-
wrappedObserver,
769-
internalOptions
709+
internalOptions,
710+
observer
770711
);
771-
firestore._queue.enqueueAndForget(async () => {
772-
const eventManager = await getEventManager(client);
773-
return eventManagerListen(eventManager, listener);
774-
});
775-
776-
return () => {
777-
wrappedObserver.mute();
778-
firestore._queue.enqueueAndForget(async () => {
779-
const eventManager = await getEventManager(client);
780-
return eventManagerUnlisten(eventManager, listener);
781-
});
782-
};
783712
}
784713

785714
// TODO(firestorexp): Make sure these overloads are tested via the Firestore
@@ -833,26 +762,13 @@ export function onSnapshotsInSync(
833762
arg: unknown
834763
): Unsubscribe {
835764
const client = ensureFirestoreConfigured(firestore);
836-
837765
const observer = isPartialObserver(arg)
838766
? (arg as PartialObserver<void>)
839767
: {
840768
next: arg as () => void
841769
};
842770

843-
const wrappedObserver = new AsyncObserver(observer);
844-
firestore._queue.enqueueAndForget(async () => {
845-
const eventManager = await getEventManager(client);
846-
addSnapshotsInSyncListener(eventManager, wrappedObserver);
847-
});
848-
849-
return () => {
850-
wrappedObserver.mute();
851-
firestore._queue.enqueueAndForget(async () => {
852-
const eventManager = await getEventManager(client);
853-
removeSnapshotsInSyncListener(eventManager, wrappedObserver);
854-
});
855-
};
771+
return firestoreClientAddSnapshotsInSyncListener(client, observer);
856772
}
857773

858774
/** Locally writes `mutations` on the async queue. */

packages/firestore/src/core/firestore_client.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ export function firestoreClientTransaction<T>(
485485
return deferred.promise;
486486
}
487487

488-
export async function readDocumentFromCache(
488+
async function readDocumentFromCache(
489489
localStore: LocalStore,
490490
docKey: DocumentKey,
491491
result: Deferred<Document | null>
@@ -520,7 +520,7 @@ export async function readDocumentFromCache(
520520
* Retrieves a latency-compensated document from the backend via a
521521
* SnapshotListener.
522522
*/
523-
export function readDocumentViaSnapshotListener(
523+
function readDocumentViaSnapshotListener(
524524
eventManager: EventManager,
525525
asyncQueue: AsyncQueue,
526526
key: DocumentKey,
@@ -587,7 +587,7 @@ export function readDocumentViaSnapshotListener(
587587
return eventManagerListen(eventManager, listener);
588588
}
589589

590-
export async function executeQueryFromCache(
590+
async function executeQueryFromCache(
591591
localStore: LocalStore,
592592
query: Query,
593593
result: Deferred<ViewSnapshot>
@@ -618,7 +618,7 @@ export async function executeQueryFromCache(
618618
* Retrieves a latency-compensated query snapshot from the backend via a
619619
* SnapshotListener.
620620
*/
621-
export function executeQueryViaSnapshotListener(
621+
function executeQueryViaSnapshotListener(
622622
eventManager: EventManager,
623623
asyncQueue: AsyncQueue,
624624
query: Query,

0 commit comments

Comments
 (0)