@@ -24,9 +24,9 @@ import { _FirebaseApp, FirebaseService } from '@firebase/app-types/private';
24
24
import { DatabaseId , DatabaseInfo } from '../core/database_info' ;
25
25
import { ListenOptions } from '../core/event_manager' ;
26
26
import {
27
- OnlineComponentProvider ,
28
27
MemoryOfflineComponentProvider ,
29
- OfflineComponentProvider
28
+ OfflineComponentProvider ,
29
+ OnlineComponentProvider
30
30
} from '../core/component_provider' ;
31
31
import { FirestoreClient , PersistenceSettings } from '../core/firestore_client' ;
32
32
import {
@@ -60,7 +60,6 @@ import { FieldPath, ResourcePath } from '../model/path';
60
60
import { isServerTimestamp } from '../model/server_timestamps' ;
61
61
import { refValue } from '../model/values' ;
62
62
import { debugAssert , fail } from '../util/assert' ;
63
- import { AsyncObserver } from '../util/async_observer' ;
64
63
import { AsyncQueue } from '../util/async_queue' ;
65
64
import { Code , FirestoreError } from '../util/error' ;
66
65
import {
@@ -485,16 +484,15 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
485
484
this . ensureClientConfigured ( ) ;
486
485
487
486
if ( isPartialObserver ( arg ) ) {
488
- return addSnapshotsInSyncListener (
489
- this . _firestoreClient ! ,
487
+ return this . _firestoreClient ! . addSnapshotsInSyncListener (
490
488
arg as PartialObserver < void >
491
489
) ;
492
490
} else {
493
491
validateArgType ( 'Firestore.onSnapshotsInSync' , 'function' , 1 , arg ) ;
494
492
const observer : PartialObserver < void > = {
495
493
next : arg as ( ) => void
496
494
} ;
497
- return addSnapshotsInSyncListener ( this . _firestoreClient ! , observer ) ;
495
+ return this . _firestoreClient ! . addSnapshotsInSyncListener ( observer ) ;
498
496
}
499
497
}
500
498
@@ -686,29 +684,6 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
686
684
}
687
685
}
688
686
689
- /** Registers the listener for onSnapshotsInSync() */
690
- export function addSnapshotsInSyncListener (
691
- firestoreClient : FirestoreClient ,
692
- observer : PartialObserver < void >
693
- ) : Unsubscribe {
694
- const errHandler = ( err : Error ) : void => {
695
- throw fail ( 'Uncaught Error in onSnapshotsInSync' ) ;
696
- } ;
697
- const asyncObserver = new AsyncObserver < void > ( {
698
- next : ( ) => {
699
- if ( observer . next ) {
700
- observer . next ( ) ;
701
- }
702
- } ,
703
- error : errHandler
704
- } ) ;
705
- firestoreClient . addSnapshotsInSyncListener ( asyncObserver ) ;
706
- return ( ) => {
707
- asyncObserver . mute ( ) ;
708
- firestoreClient . removeSnapshotsInSyncListener ( asyncObserver ) ;
709
- } ;
710
- }
711
-
712
687
/**
713
688
* A reference to a transaction.
714
689
*/
@@ -1183,7 +1158,7 @@ export class DocumentReference<T = firestore.DocumentData>
1183
1158
1 ,
1184
1159
4
1185
1160
) ;
1186
- let options : firestore . SnapshotListenOptions = {
1161
+ let options : ListenOptions = {
1187
1162
includeMetadataChanges : false
1188
1163
} ;
1189
1164
let currArg = 0 ;
@@ -1248,9 +1223,8 @@ export class DocumentReference<T = firestore.DocumentData>
1248
1223
complete : args [ currArg + 2 ] as CompleteFn
1249
1224
} ;
1250
1225
1251
- return addDocSnapshotListener (
1252
- this . _firestoreClient ,
1253
- this . _key ,
1226
+ return this . _firestoreClient . listen (
1227
+ newQueryForPath ( this . _key . path ) ,
1254
1228
internalOptions ,
1255
1229
observer
1256
1230
) ;
@@ -1312,40 +1286,6 @@ export class DocumentReference<T = firestore.DocumentData>
1312
1286
}
1313
1287
}
1314
1288
1315
- /** Registers an internal snapshot listener for `ref`. */
1316
- export function addDocSnapshotListener (
1317
- firestoreClient : FirestoreClient ,
1318
- key : DocumentKey ,
1319
- options : ListenOptions ,
1320
- observer : PartialObserver < ViewSnapshot >
1321
- ) : Unsubscribe {
1322
- let errHandler = ( err : Error ) : void => {
1323
- console . error ( 'Uncaught Error in onSnapshot:' , err ) ;
1324
- } ;
1325
- if ( observer . error ) {
1326
- errHandler = observer . error . bind ( observer ) ;
1327
- }
1328
-
1329
- const asyncObserver = new AsyncObserver < ViewSnapshot > ( {
1330
- next : snapshot => {
1331
- if ( observer . next ) {
1332
- observer . next ( snapshot ) ;
1333
- }
1334
- } ,
1335
- error : errHandler
1336
- } ) ;
1337
- const internalListener = firestoreClient . listen (
1338
- newQueryForPath ( key . path ) ,
1339
- asyncObserver ,
1340
- options
1341
- ) ;
1342
-
1343
- return ( ) => {
1344
- asyncObserver . mute ( ) ;
1345
- firestoreClient . unlisten ( internalListener ) ;
1346
- } ;
1347
- }
1348
-
1349
1289
/**
1350
1290
* Retrieves a latency-compensated document from the backend via a
1351
1291
* SnapshotListener.
@@ -1356,9 +1296,8 @@ export function getDocViaSnapshotListener(
1356
1296
options ?: firestore . GetOptions
1357
1297
) : Promise < ViewSnapshot > {
1358
1298
const result = new Deferred < ViewSnapshot > ( ) ;
1359
- const unlisten = addDocSnapshotListener (
1360
- firestoreClient ,
1361
- key ,
1299
+ const unlisten = firestoreClient . listen (
1300
+ newQueryForPath ( key . path ) ,
1362
1301
{
1363
1302
includeMetadataChanges : true ,
1364
1303
waitForSyncWhenOnline : true
@@ -2159,7 +2098,7 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
2159
2098
2160
2099
onSnapshot ( ...args : unknown [ ] ) : Unsubscribe {
2161
2100
validateBetweenNumberOfArgs ( 'Query.onSnapshot' , arguments , 1 , 4 ) ;
2162
- let options : firestore . SnapshotListenOptions = { } ;
2101
+ let options : ListenOptions = { } ;
2163
2102
let currArg = 0 ;
2164
2103
if (
2165
2104
typeof args [ currArg ] === 'object' &&
@@ -2220,12 +2159,7 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
2220
2159
2221
2160
validateHasExplicitOrderByForLimitToLast ( this . _query ) ;
2222
2161
const firestoreClient = this . firestore . ensureClientConfigured ( ) ;
2223
- return addQuerySnapshotListener (
2224
- firestoreClient ,
2225
- this . _query ,
2226
- options ,
2227
- observer
2228
- ) ;
2162
+ return firestoreClient . listen ( this . _query , options , observer ) ;
2229
2163
}
2230
2164
2231
2165
get ( options ?: firestore . GetOptions ) : Promise < firestore . QuerySnapshot < T > > {
@@ -2254,8 +2188,7 @@ export function getDocsViaSnapshotListener(
2254
2188
options ?: firestore . GetOptions
2255
2189
) : Promise < ViewSnapshot > {
2256
2190
const result = new Deferred < ViewSnapshot > ( ) ;
2257
- const unlisten = addQuerySnapshotListener (
2258
- firestore ,
2191
+ const unlisten = firestore . listen (
2259
2192
query ,
2260
2193
{
2261
2194
includeMetadataChanges : true ,
@@ -2287,35 +2220,6 @@ export function getDocsViaSnapshotListener(
2287
2220
return result . promise ;
2288
2221
}
2289
2222
2290
- /** Registers an internal snapshot listener for `query`. */
2291
- export function addQuerySnapshotListener (
2292
- firestore : FirestoreClient ,
2293
- query : InternalQuery ,
2294
- options : ListenOptions ,
2295
- observer : PartialObserver < ViewSnapshot >
2296
- ) : Unsubscribe {
2297
- let errHandler = ( err : Error ) : void => {
2298
- console . error ( 'Uncaught Error in onSnapshot:' , err ) ;
2299
- } ;
2300
- if ( observer . error ) {
2301
- errHandler = observer . error . bind ( observer ) ;
2302
- }
2303
- const asyncObserver = new AsyncObserver < ViewSnapshot > ( {
2304
- next : ( result : ViewSnapshot ) : void => {
2305
- if ( observer . next ) {
2306
- observer . next ( result ) ;
2307
- }
2308
- } ,
2309
- error : errHandler
2310
- } ) ;
2311
-
2312
- const internalListener = firestore . listen ( query , asyncObserver , options ) ;
2313
- return ( ) : void => {
2314
- asyncObserver . mute ( ) ;
2315
- firestore . unlisten ( internalListener ) ;
2316
- } ;
2317
- }
2318
-
2319
2223
export class QuerySnapshot < T = firestore . DocumentData >
2320
2224
implements firestore . QuerySnapshot < T > {
2321
2225
private _cachedChanges : Array < firestore . DocumentChange < T > > | null = null ;
0 commit comments