1515 * limitations under the License.
1616 */
1717
18- import { Pipeline } from '../api/pipeline' ;
18+ // Re-adding necessary imports that were removed previously
19+ import {
20+ CompleteFn ,
21+ ErrorFn ,
22+ isPartialObserver ,
23+ NextFn ,
24+ PartialObserver
25+ } from '../api/observer' ;
1926import {
2027 firestoreClientExecutePipeline ,
2128 firestoreClientListen
2229} from '../core/firestore_client' ;
30+ import { ListenerDataSource } from '../core/event_manager' ;
2331import { toCorePipeline } from '../core/pipeline-util' ;
2432import { ViewSnapshot } from '../core/view_snapshot' ;
2533import { Pipeline as LitePipeline } from '../lite-api/pipeline' ;
@@ -31,9 +39,10 @@ import { FirestoreError } from '../util/error';
3139import { cast } from '../util/input_validation' ;
3240
3341import { ensureFirestoreConfigured , Firestore } from './database' ;
42+ import { Pipeline } from './pipeline' ; // Keep this specific Pipeline import if needed alongside LitePipeline
3443import { RealtimePipeline } from './realtime_pipeline' ;
3544import { DocumentReference } from './reference' ;
36- import { Unsubscribe } from './reference_impl' ;
45+ import { SnapshotListenOptions , Unsubscribe } from './reference_impl' ;
3746import { RealtimePipelineSnapshot } from './snapshot' ;
3847import { ExpUserDataWriter } from './user_data_writer' ;
3948
@@ -143,18 +152,91 @@ Firestore.prototype.realtimePipeline =
143152 */
144153export function _onRealtimePipelineSnapshot (
145154 pipeline : RealtimePipeline ,
146- next : ( snapshot : RealtimePipelineSnapshot ) => void ,
147- error ?: ( error : FirestoreError ) => void ,
148- complete ?: ( ) => void
155+ observer : {
156+ next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
157+ error ?: ( error : FirestoreError ) => void ;
158+ complete ?: ( ) => void ;
159+ }
160+ ) : Unsubscribe ;
161+ /**
162+ * @internal
163+ * @private
164+ */
165+ export function _onRealtimePipelineSnapshot (
166+ pipeline : RealtimePipeline ,
167+ options : SnapshotListenOptions ,
168+ observer : {
169+ next ?: ( snapshot : RealtimePipelineSnapshot ) => void ;
170+ error ?: ( error : FirestoreError ) => void ;
171+ complete ?: ( ) => void ;
172+ }
173+ ) : Unsubscribe ;
174+ /**
175+ * @internal
176+ * @private
177+ */
178+ export function _onRealtimePipelineSnapshot (
179+ pipeline : RealtimePipeline ,
180+ onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
181+ onError ?: ( error : FirestoreError ) => void ,
182+ onComplete ?: ( ) => void
183+ ) : Unsubscribe ;
184+ /**
185+ * @internal
186+ * @private
187+ */
188+ export function _onRealtimePipelineSnapshot (
189+ pipeline : RealtimePipeline ,
190+ options : SnapshotListenOptions ,
191+ onNext : ( snapshot : RealtimePipelineSnapshot ) => void ,
192+ onError ?: ( error : FirestoreError ) => void ,
193+ onComplete ?: ( ) => void
194+ ) : Unsubscribe ;
195+ export function _onRealtimePipelineSnapshot (
196+ pipeline : RealtimePipeline ,
197+ ...args : unknown [ ]
149198) : Unsubscribe {
199+ let options : SnapshotListenOptions = {
200+ includeMetadataChanges : false ,
201+ source : 'default'
202+ } ;
203+ let currArg = 0 ;
204+ if ( typeof args [ currArg ] === 'object' && ! isPartialObserver ( args [ currArg ] ) ) {
205+ options = args [ currArg ] as SnapshotListenOptions ;
206+ currArg ++ ;
207+ }
208+
209+ const internalOptions = {
210+ includeMetadataChanges : options . includeMetadataChanges ,
211+ source : options . source as ListenerDataSource
212+ } ;
213+
214+ let userObserver : PartialObserver < RealtimePipelineSnapshot > ;
215+ if ( isPartialObserver ( args [ currArg ] ) ) {
216+ userObserver = args [ currArg ] as PartialObserver < RealtimePipelineSnapshot > ;
217+ } else {
218+ userObserver = {
219+ next : args [ currArg ] as NextFn < RealtimePipelineSnapshot > ,
220+ error : args [ currArg + 1 ] as ErrorFn ,
221+ complete : args [ currArg + 2 ] as CompleteFn
222+ } ;
223+ }
224+
150225 const client = ensureFirestoreConfigured ( pipeline . _db as Firestore ) ;
151226 const observer = {
152227 next : ( snapshot : ViewSnapshot ) => {
153- next ( new RealtimePipelineSnapshot ( pipeline , snapshot ) ) ;
228+ if ( userObserver . next ) {
229+ userObserver . next ( new RealtimePipelineSnapshot ( pipeline , snapshot ) ) ;
230+ }
154231 } ,
155- error,
156- complete
232+ error : userObserver . error ,
233+ complete : userObserver . complete
157234 } ;
158- // TODO(pipeline) hook up options
159- return firestoreClientListen ( client , toCorePipeline ( pipeline ) , { } , observer ) ;
235+
236+ return firestoreClientListen (
237+ client ,
238+ toCorePipeline ( pipeline ) ,
239+ internalOptions , // Pass parsed options here
240+ observer
241+ ) ;
160242}
0 commit comments