{"version":3,"file":"ngx-firebase.mjs","sources":["../../../projects/ngx-firebase/src/lib/firebase-providers.ts","../../../projects/ngx-firebase/src/public-api.ts","../../../projects/ngx-firebase/src/ngx-firebase.ts"],"sourcesContent":["import { inject, Injectable, Provider } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { FirebaseApp as NativeFirebaseApp } from 'firebase/app';\nimport { Firestore, DocumentReference, Query, QueryDocumentSnapshot, onSnapshot } from 'firebase/firestore';\nimport { Auth as NativeAuth, User, onAuthStateChanged } from 'firebase/auth';\nimport { FirebaseStorage as NativeFirebaseStorage } from 'firebase/storage';\nimport { Functions as NativeFunctions } from 'firebase/functions';\nimport { Analytics as NativeAnalytics, logEvent } from 'firebase/analytics';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n// --- DI TOKENS ---\n// We export abstract classes with matching names to act as DI Tokens in Angular\nexport abstract class FirebaseApp {}\nexport abstract class Auth {}\nexport abstract class FirebaseStorage {}\nexport abstract class Functions {}\nexport abstract class Analytics {}\n\n// --- FIREBASE SDK MUTABLE WRAPPER FOR TESTING ---\nexport const firebaseSdk = {\n  onSnapshot,\n  onAuthStateChanged,\n};\n\n// --- RXJS WRAPPERS ---\n\n/**\n * Wraps onSnapshot for a document reference.\n */\nexport function docData<T = any>(ref: DocumentReference<T>): Observable<T | undefined> {\n  return new Observable<T | undefined>((subscriber) => {\n    const unsubscribe = firebaseSdk.onSnapshot(\n      ref,\n      (snapshot) => {\n        subscriber.next(snapshot.data());\n      },\n      (error) => {\n        subscriber.error(error);\n      }\n    );\n    return () => unsubscribe();\n  });\n}\n\n/**\n * Wraps onSnapshot for a query/collection.\n */\nexport function collectionSnapshots<T = any>(q: Query<T>): Observable<QueryDocumentSnapshot<T>[]> {\n  return new Observable<QueryDocumentSnapshot<T>[]>((subscriber) => {\n    const unsubscribe = firebaseSdk.onSnapshot(\n      q,\n      (snapshot) => {\n        subscriber.next(snapshot.docs);\n      },\n      (error) => {\n        subscriber.error(error);\n      }\n    );\n    return () => unsubscribe();\n  });\n}\n\n/**\n * Wraps onAuthStateChanged to monitor auth state.\n */\nexport function user(auth: Auth): Observable<User | null> {\n  return new Observable<User | null>((subscriber) => {\n    const unsubscribe = firebaseSdk.onAuthStateChanged(\n      auth as unknown as NativeAuth,\n      (user) => {\n        subscriber.next(user);\n      },\n      (error) => {\n        subscriber.error(error);\n      }\n    );\n    return () => unsubscribe();\n  });\n}\n\n// --- SCREEN TRACKING SERVICE ---\n\n/**\n * Custom ScreenTrackingService to replace @angular/fire/analytics ScreenTrackingService.\n * Automatically tracks page views on router navigation events.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ScreenTrackingService {\n  private analytics = inject(Analytics, { optional: true });\n  private router = inject(Router, { optional: true });\n\n  constructor() {\n    if (this.analytics && this.router) {\n      this.router.events\n        .pipe(filter((event) => event instanceof NavigationEnd))\n        .subscribe((event: any) => {\n          logEvent(this.analytics as unknown as NativeAnalytics, 'screen_view', {\n            firebase_screen: event.urlAfterRedirects || event.url,\n            firebase_screen_class: 'AngularRoute',\n          });\n        });\n    }\n  }\n}\n\n// --- DI PROVIDERS ---\n\nexport function provideFirebaseApp(fn: () => NativeFirebaseApp): Provider {\n  return {\n    provide: FirebaseApp,\n    useFactory: fn,\n  };\n}\n\nexport function provideFirestore(fn: () => Firestore): Provider {\n  return {\n    provide: Firestore,\n    useFactory: () => {\n      inject(FirebaseApp); // Force app initialization before building Firestore\n      return fn();\n    },\n  };\n}\n\nexport function provideAuth(fn: () => NativeAuth): Provider {\n  return {\n    provide: Auth,\n    useFactory: () => {\n      inject(FirebaseApp); // Force app initialization before building Auth\n      return fn();\n    },\n  };\n}\n\nexport function provideStorage(fn: () => NativeFirebaseStorage): Provider {\n  return {\n    provide: FirebaseStorage,\n    useFactory: () => {\n      inject(FirebaseApp); // Force app initialization before building Storage\n      return fn();\n    },\n  };\n}\n\nexport function provideFunctions(fn: () => NativeFunctions): Provider {\n  return {\n    provide: Functions,\n    useFactory: () => {\n      inject(FirebaseApp); // Force app initialization before building Functions\n      return fn();\n    },\n  };\n}\n\nexport function provideAnalytics(fn: () => NativeAnalytics): Provider {\n  return {\n    provide: Analytics,\n    useFactory: () => {\n      inject(FirebaseApp); // Force app initialization before building Analytics\n      return fn();\n    },\n  };\n}\n","/*\n * Public API Surface of ngx-firebase\n */\n\nexport * from './lib/firebase-providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}