@@ -22,11 +22,10 @@ import * as api from '../protos/firestore_proto_api';
22
22
import { FirebaseApp } from '@firebase/app-types' ;
23
23
import { _FirebaseApp , FirebaseService } from '@firebase/app-types/private' ;
24
24
import { DatabaseId , DatabaseInfo } from '../core/database_info' ;
25
- import { ListenOptions } from '../core/event_manager' ;
26
25
import {
27
- OnlineComponentProvider ,
28
26
MemoryOfflineComponentProvider ,
29
- OfflineComponentProvider
27
+ OfflineComponentProvider ,
28
+ OnlineComponentProvider
30
29
} from '../core/component_provider' ;
31
30
import { FirestoreClient , PersistenceSettings } from '../core/firestore_client' ;
32
31
import {
@@ -485,16 +484,17 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
485
484
this . ensureClientConfigured ( ) ;
486
485
487
486
if ( isPartialObserver ( arg ) ) {
488
- return addSnapshotsInSyncListener (
489
- this . _firestoreClient ! ,
490
- arg as PartialObserver < void >
487
+ return this . _firestoreClient ! . addSnapshotsInSyncListener (
488
+ new AsyncObserver ( 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 (
496
+ new AsyncObserver ( observer )
497
+ ) ;
498
498
}
499
499
}
500
500
@@ -686,29 +686,6 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
686
686
}
687
687
}
688
688
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
689
/**
713
690
* A reference to a transaction.
714
691
*/
@@ -1248,11 +1225,10 @@ export class DocumentReference<T = firestore.DocumentData>
1248
1225
complete : args [ currArg + 2 ] as CompleteFn
1249
1226
} ;
1250
1227
1251
- return addDocSnapshotListener (
1252
- this . _firestoreClient ,
1253
- this . _key ,
1228
+ return this . _firestoreClient . listen (
1229
+ newQueryForPath ( this . _key . path ) ,
1254
1230
internalOptions ,
1255
- observer
1231
+ new AsyncObserver ( observer )
1256
1232
) ;
1257
1233
}
1258
1234
@@ -1312,40 +1288,6 @@ export class DocumentReference<T = firestore.DocumentData>
1312
1288
}
1313
1289
}
1314
1290
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
1291
/**
1350
1292
* Retrieves a latency-compensated document from the backend via a
1351
1293
* SnapshotListener.
@@ -1356,14 +1298,13 @@ export function getDocViaSnapshotListener(
1356
1298
options ?: firestore . GetOptions
1357
1299
) : Promise < ViewSnapshot > {
1358
1300
const result = new Deferred < ViewSnapshot > ( ) ;
1359
- const unlisten = addDocSnapshotListener (
1360
- firestoreClient ,
1361
- key ,
1301
+ const unlisten = firestoreClient . listen (
1302
+ newQueryForPath ( key . path ) ,
1362
1303
{
1363
1304
includeMetadataChanges : true ,
1364
1305
waitForSyncWhenOnline : true
1365
1306
} ,
1366
- {
1307
+ new AsyncObserver ( {
1367
1308
next : ( snap : ViewSnapshot ) => {
1368
1309
// Remove query first before passing event to user to avoid
1369
1310
// user actions affecting the now stale query.
@@ -1404,7 +1345,7 @@ export function getDocViaSnapshotListener(
1404
1345
}
1405
1346
} ,
1406
1347
error : e => result . reject ( e )
1407
- }
1348
+ } )
1408
1349
) ;
1409
1350
return result . promise ;
1410
1351
}
@@ -2220,11 +2161,10 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
2220
2161
2221
2162
validateHasExplicitOrderByForLimitToLast ( this . _query ) ;
2222
2163
const firestoreClient = this . firestore . ensureClientConfigured ( ) ;
2223
- return addQuerySnapshotListener (
2224
- firestoreClient ,
2164
+ return firestoreClient . listen (
2225
2165
this . _query ,
2226
2166
options ,
2227
- observer
2167
+ new AsyncObserver ( observer )
2228
2168
) ;
2229
2169
}
2230
2170
@@ -2254,14 +2194,13 @@ export function getDocsViaSnapshotListener(
2254
2194
options ?: firestore . GetOptions
2255
2195
) : Promise < ViewSnapshot > {
2256
2196
const result = new Deferred < ViewSnapshot > ( ) ;
2257
- const unlisten = addQuerySnapshotListener (
2258
- firestore ,
2197
+ const unlisten = firestore . listen (
2259
2198
query ,
2260
2199
{
2261
2200
includeMetadataChanges : true ,
2262
2201
waitForSyncWhenOnline : true
2263
2202
} ,
2264
- {
2203
+ new AsyncObserver ( {
2265
2204
next : snapshot => {
2266
2205
// Remove query first before passing event to user to avoid
2267
2206
// user actions affecting the now stale query.
@@ -2282,40 +2221,11 @@ export function getDocsViaSnapshotListener(
2282
2221
}
2283
2222
} ,
2284
2223
error : e => result . reject ( e )
2285
- }
2224
+ } )
2286
2225
) ;
2287
2226
return result . promise ;
2288
2227
}
2289
2228
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
2229
export class QuerySnapshot < T = firestore . DocumentData >
2320
2230
implements firestore . QuerySnapshot < T > {
2321
2231
private _cachedChanges : Array < firestore . DocumentChange < T > > | null = null ;
0 commit comments