Skip to content

Commit c76e1ff

Browse files
FirestoreClient cleanup (#4075)
1 parent 6358fd0 commit c76e1ff

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';
@@ -135,20 +126,10 @@ export function getDoc<T>(
135126
const firestore = cast(reference.firestore, FirebaseFirestore);
136127
const client = ensureFirestoreConfigured(firestore);
137128

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

154135
export class ExpUserDataWriter extends AbstractUserDataWriter {
@@ -181,12 +162,7 @@ export function getDocFromCache<T>(
181162
const client = ensureFirestoreConfigured(firestore);
182163
const userDataWriter = new ExpUserDataWriter(firestore);
183164

184-
const deferred = new Deferred<Document | null>();
185-
firestore._queue.enqueueAndForget(async () => {
186-
const localStore = await getLocalStore(client);
187-
await readDocumentFromCache(localStore, reference._key, deferred);
188-
});
189-
return deferred.promise.then(
165+
return firestoreClientGetDocumentFromLocalCache(client, reference._key).then(
190166
doc =>
191167
new DocumentSnapshot(
192168
firestore,
@@ -216,20 +192,9 @@ export function getDocFromServer<T>(
216192
const firestore = cast(reference.firestore, FirebaseFirestore);
217193
const client = ensureFirestoreConfigured(firestore);
218194

219-
const deferred = new Deferred<ViewSnapshot>();
220-
firestore._queue.enqueueAndForget(async () => {
221-
const eventManager = await getEventManager(client);
222-
await readDocumentViaSnapshotListener(
223-
eventManager,
224-
firestore._queue,
225-
reference._key,
226-
{ source: 'server' },
227-
deferred
228-
);
229-
});
230-
return deferred.promise.then(snapshot =>
231-
convertToDocSnapshot(firestore, reference, snapshot)
232-
);
195+
return firestoreClientGetDocumentViaSnapshotListener(client, reference._key, {
196+
source: 'server'
197+
}).then(snapshot => convertToDocSnapshot(firestore, reference, snapshot));
233198
}
234199

235200
/**
@@ -249,19 +214,10 @@ export function getDocs<T>(query: Query<T>): Promise<QuerySnapshot<T>> {
249214
const userDataWriter = new ExpUserDataWriter(firestore);
250215

251216
validateHasExplicitOrderByForLimitToLast(query._query);
252-
253-
const deferred = new Deferred<ViewSnapshot>();
254-
firestore._queue.enqueueAndForget(async () => {
255-
const eventManager = await getEventManager(client);
256-
await executeQueryViaSnapshotListener(
257-
eventManager,
258-
firestore._queue,
259-
query._query,
260-
{ source: 'default' },
261-
deferred
262-
);
263-
});
264-
return deferred.promise.then(
217+
return firestoreClientGetDocumentsViaSnapshotListener(
218+
client,
219+
query._query
220+
).then(
265221
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
266222
);
267223
}
@@ -280,12 +236,7 @@ export function getDocsFromCache<T>(
280236
const client = ensureFirestoreConfigured(firestore);
281237
const userDataWriter = new ExpUserDataWriter(firestore);
282238

283-
const deferred = new Deferred<ViewSnapshot>();
284-
firestore._queue.enqueueAndForget(async () => {
285-
const localStore = await getLocalStore(client);
286-
await executeQueryFromCache(localStore, query._query, deferred);
287-
});
288-
return deferred.promise.then(
239+
return firestoreClientGetDocumentsFromLocalCache(client, query._query).then(
289240
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
290241
);
291242
}
@@ -304,18 +255,9 @@ export function getDocsFromServer<T>(
304255
const client = ensureFirestoreConfigured(firestore);
305256
const userDataWriter = new ExpUserDataWriter(firestore);
306257

307-
const deferred = new Deferred<ViewSnapshot>();
308-
firestore._queue.enqueueAndForget(async () => {
309-
const eventManager = await getEventManager(client);
310-
await executeQueryViaSnapshotListener(
311-
eventManager,
312-
firestore._queue,
313-
query._query,
314-
{ source: 'server' },
315-
deferred
316-
);
317-
});
318-
return deferred.promise.then(
258+
return firestoreClientGetDocumentsViaSnapshotListener(client, query._query, {
259+
source: 'server'
260+
}).then(
319261
snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot)
320262
);
321263
}
@@ -778,25 +720,12 @@ export function onSnapshot<T>(
778720
}
779721

780722
const client = ensureFirestoreConfigured(firestore);
781-
782-
const wrappedObserver = new AsyncObserver(observer);
783-
const listener = new QueryListener(
723+
return firestoreClientListen(
724+
client,
784725
internalQuery,
785-
wrappedObserver,
786-
internalOptions
726+
internalOptions,
727+
observer
787728
);
788-
firestore._queue.enqueueAndForget(async () => {
789-
const eventManager = await getEventManager(client);
790-
return eventManagerListen(eventManager, listener);
791-
});
792-
793-
return () => {
794-
wrappedObserver.mute();
795-
firestore._queue.enqueueAndForget(async () => {
796-
const eventManager = await getEventManager(client);
797-
return eventManagerUnlisten(eventManager, listener);
798-
});
799-
};
800729
}
801730

802731
// TODO(firestorexp): Make sure these overloads are tested via the Firestore
@@ -851,26 +780,13 @@ export function onSnapshotsInSync(
851780
): Unsubscribe {
852781
firestore = cast(firestore, FirebaseFirestore);
853782
const client = ensureFirestoreConfigured(firestore);
854-
855783
const observer = isPartialObserver(arg)
856784
? (arg as PartialObserver<void>)
857785
: {
858786
next: arg as () => void
859787
};
860788

861-
const wrappedObserver = new AsyncObserver(observer);
862-
firestore._queue.enqueueAndForget(async () => {
863-
const eventManager = await getEventManager(client);
864-
addSnapshotsInSyncListener(eventManager, wrappedObserver);
865-
});
866-
867-
return () => {
868-
wrappedObserver.mute();
869-
firestore._queue.enqueueAndForget(async () => {
870-
const eventManager = await getEventManager(client);
871-
removeSnapshotsInSyncListener(eventManager, wrappedObserver);
872-
});
873-
};
789+
return firestoreClientAddSnapshotsInSyncListener(client, observer);
874790
}
875791

876792
/** 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)