@@ -200,43 +200,28 @@ export function getDocFromServer<
200200export function getDocs < AppModelType , DbModelType extends DocumentData > (
201201 query : Query < AppModelType , DbModelType >
202202) : Promise < QuerySnapshot < AppModelType , DbModelType > > ;
203- export function getDocs (
204- pipeline : RealtimePipeline
205- ) : Promise < RealtimePipelineSnapshot > ;
206- export function getDocs < AppModelType , DbModelType extends DocumentData > (
207- query : Query < AppModelType , DbModelType > | RealtimePipeline
208- ) : Promise <
209- QuerySnapshot < AppModelType , DbModelType > | RealtimePipelineSnapshot
210- > {
211- if ( query instanceof RealtimePipeline ) {
212- const firestore = cast ( query . _db , Firestore ) ;
213- const client = ensureFirestoreConfigured ( firestore ) ;
214- const userDataWriter = new ExpUserDataWriter ( firestore ) ;
215203
216- return firestoreClientGetDocumentsViaSnapshotListener ( client , query ) . then (
217- snapshot =>
218- new RealtimePipelineSnapshot ( query as RealtimePipeline , snapshot )
219- ) ;
220- } else {
221- query = cast < Query < AppModelType , DbModelType > > ( query , Query ) ;
222- const firestore = cast ( query . firestore , Firestore ) ;
223- const client = ensureFirestoreConfigured ( firestore ) ;
224- const userDataWriter = new ExpUserDataWriter ( firestore ) ;
204+ export function getDocs < AppModelType , DbModelType extends DocumentData > (
205+ query : Query < AppModelType , DbModelType >
206+ ) : Promise < QuerySnapshot < AppModelType , DbModelType > > {
207+ query = cast < Query < AppModelType , DbModelType > > ( query , Query ) ;
208+ const firestore = cast ( query . firestore , Firestore ) ;
209+ const client = ensureFirestoreConfigured ( firestore ) ;
210+ const userDataWriter = new ExpUserDataWriter ( firestore ) ;
225211
226- validateHasExplicitOrderByForLimitToLast ( query . _query ) ;
227- return firestoreClientGetDocumentsViaSnapshotListener (
228- client ,
229- query . _query
230- ) . then (
231- snapshot =>
232- new QuerySnapshot < AppModelType , DbModelType > (
233- firestore ,
234- userDataWriter ,
235- query as Query < AppModelType , DbModelType > ,
236- snapshot
237- )
238- ) ;
239- }
212+ validateHasExplicitOrderByForLimitToLast ( query . _query ) ;
213+ return firestoreClientGetDocumentsViaSnapshotListener (
214+ client ,
215+ query . _query
216+ ) . then (
217+ snapshot =>
218+ new QuerySnapshot < AppModelType , DbModelType > (
219+ firestore ,
220+ userDataWriter ,
221+ query as Query < AppModelType , DbModelType > ,
222+ snapshot
223+ )
224+ ) ;
240225}
241226
242227/**
@@ -683,41 +668,11 @@ export function onSnapshot<AppModelType, DbModelType extends DocumentData>(
683668 onError ?: ( error : FirestoreError ) => void ,
684669 onCompletion ?: ( ) => void
685670) : Unsubscribe ;
686- export function onSnapshot < AppModelType , DbModelType extends DocumentData > (
687- query : RealtimePipeline ,
688- observer : {
689- next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
690- error ?: ( error : FirestoreError ) => void ;
691- complete ?: ( ) => void ;
692- }
693- ) : Unsubscribe ;
694- export function onSnapshot < AppModelType , DbModelType extends DocumentData > (
695- query : RealtimePipeline ,
696- options : SnapshotListenOptions ,
697- observer : {
698- next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
699- error ?: ( error : FirestoreError ) => void ;
700- complete ?: ( ) => void ;
701- }
702- ) : Unsubscribe ;
703- export function onSnapshot < AppModelType , DbModelType extends DocumentData > (
704- query : RealtimePipeline ,
705- onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
706- onError ?: ( error : FirestoreError ) => void ,
707- onCompletion ?: ( ) => void
708- ) : Unsubscribe ;
709- export function onSnapshot < AppModelType , DbModelType extends DocumentData > (
710- query : RealtimePipeline ,
711- options : SnapshotListenOptions ,
712- onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
713- onError ?: ( error : FirestoreError ) => void ,
714- onCompletion ?: ( ) => void
715- ) : Unsubscribe ;
671+
716672export function onSnapshot < AppModelType , DbModelType extends DocumentData > (
717673 reference :
718674 | Query < AppModelType , DbModelType >
719- | DocumentReference < AppModelType , DbModelType >
720- | RealtimePipeline ,
675+ | DocumentReference < AppModelType , DbModelType > ,
721676 ...args : unknown [ ]
722677) : Unsubscribe {
723678 reference = getModularInstance ( reference ) ;
@@ -771,7 +726,7 @@ export function onSnapshot<AppModelType, DbModelType extends DocumentData>(
771726 error : args [ currArg + 1 ] as ErrorFn ,
772727 complete : args [ currArg + 2 ] as CompleteFn
773728 } ;
774- } else if ( reference instanceof Query ) {
729+ } else {
775730 const query = cast < Query < AppModelType , DbModelType > > ( reference , Query ) ;
776731 firestore = cast ( query . firestore , Firestore ) ;
777732 internalQuery = query . _query ;
@@ -790,24 +745,6 @@ export function onSnapshot<AppModelType, DbModelType extends DocumentData>(
790745 } ;
791746
792747 validateHasExplicitOrderByForLimitToLast ( reference . _query ) ;
793- } else {
794- // RealtimePipeline
795- firestore = cast ( reference . _db , Firestore ) ;
796- internalQuery = toCorePipeline ( reference ) ;
797- observer = {
798- next : snapshot => {
799- if ( args [ currArg ] ) {
800- ( args [ currArg ] as NextFn < RealtimePipelineSnapshot > ) (
801- new RealtimePipelineSnapshot (
802- reference as RealtimePipeline ,
803- snapshot
804- )
805- ) ;
806- }
807- } ,
808- error : args [ currArg + 1 ] as ErrorFn ,
809- complete : args [ currArg + 2 ] as CompleteFn
810- } ;
811748 }
812749
813750 const client = ensureFirestoreConfigured ( firestore ) ;
@@ -819,6 +756,106 @@ export function onSnapshot<AppModelType, DbModelType extends DocumentData>(
819756 ) ;
820757}
821758
759+ export function onPipelineSnapshot <
760+ AppModelType ,
761+ DbModelType extends DocumentData
762+ > (
763+ query : RealtimePipeline ,
764+ observer : {
765+ next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
766+ error ?: ( error : FirestoreError ) => void ;
767+ complete ?: ( ) => void ;
768+ }
769+ ) : Unsubscribe ;
770+ export function onPipelineSnapshot <
771+ AppModelType ,
772+ DbModelType extends DocumentData
773+ > (
774+ query : RealtimePipeline ,
775+ options : SnapshotListenOptions ,
776+ observer : {
777+ next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
778+ error ?: ( error : FirestoreError ) => void ;
779+ complete ?: ( ) => void ;
780+ }
781+ ) : Unsubscribe ;
782+ export function onPipelineSnapshot <
783+ AppModelType ,
784+ DbModelType extends DocumentData
785+ > (
786+ query : RealtimePipeline ,
787+ onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
788+ onError ?: ( error : FirestoreError ) => void ,
789+ onCompletion ?: ( ) => void
790+ ) : Unsubscribe ;
791+ export function onPipelineSnapshot <
792+ AppModelType ,
793+ DbModelType extends DocumentData
794+ > (
795+ query : RealtimePipeline ,
796+ options : SnapshotListenOptions ,
797+ onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
798+ onError ?: ( error : FirestoreError ) => void ,
799+ onCompletion ?: ( ) => void
800+ ) : Unsubscribe ;
801+ export function onPipelineSnapshot <
802+ AppModelType ,
803+ DbModelType extends DocumentData
804+ > ( reference : RealtimePipeline , ...args : unknown [ ] ) : Unsubscribe {
805+ reference = getModularInstance ( reference ) ;
806+
807+ let options : SnapshotListenOptions = {
808+ includeMetadataChanges : false ,
809+ source : 'default'
810+ } ;
811+ let currArg = 0 ;
812+ if ( typeof args [ currArg ] === 'object' && ! isPartialObserver ( args [ currArg ] ) ) {
813+ options = args [ currArg ] as SnapshotListenOptions ;
814+ currArg ++ ;
815+ }
816+
817+ const internalOptions = {
818+ includeMetadataChanges : options . includeMetadataChanges ,
819+ source : options . source as ListenerDataSource
820+ } ;
821+
822+ if ( isPartialObserver ( args [ currArg ] ) ) {
823+ const userObserver = args [ currArg ] as PartialObserver <
824+ QuerySnapshot < AppModelType , DbModelType >
825+ > ;
826+ args [ currArg ] = userObserver . next ?. bind ( userObserver ) ;
827+ args [ currArg + 1 ] = userObserver . error ?. bind ( userObserver ) ;
828+ args [ currArg + 2 ] = userObserver . complete ?. bind ( userObserver ) ;
829+ }
830+
831+ let observer : PartialObserver < ViewSnapshot > ;
832+ let firestore : Firestore ;
833+ let internalQuery : QueryOrPipeline ;
834+
835+ // RealtimePipeline
836+ firestore = cast ( reference . _db , Firestore ) ;
837+ internalQuery = toCorePipeline ( reference ) ;
838+ observer = {
839+ next : snapshot => {
840+ if ( args [ currArg ] ) {
841+ ( args [ currArg ] as NextFn < RealtimePipelineSnapshot > ) (
842+ new RealtimePipelineSnapshot ( reference as RealtimePipeline , snapshot )
843+ ) ;
844+ }
845+ } ,
846+ error : args [ currArg + 1 ] as ErrorFn ,
847+ complete : args [ currArg + 2 ] as CompleteFn
848+ } ;
849+
850+ const client = ensureFirestoreConfigured ( firestore ) ;
851+ return firestoreClientListen (
852+ client ,
853+ internalQuery ,
854+ internalOptions ,
855+ observer
856+ ) ;
857+ }
858+
822859// TODO(firestorexp): Make sure these overloads are tested via the Firestore
823860// integration tests
824861
0 commit comments