11import { NgModule , Optional , NgZone , InjectionToken , ModuleWithProviders , APP_INITIALIZER , Injector } from '@angular/core' ;
2- import { Analytics as FirebaseAnalytics , isSupported } from 'firebase/analytics' ;
3- import { ɵgetDefaultInstanceOf , ɵAngularFireSchedulers , VERSION } from '@angular/fire' ;
2+ import { Analytics as FirebaseAnalytics } from 'firebase/analytics' ;
3+ import { ɵgetDefaultInstanceOf , ɵAngularFireSchedulers , VERSION , ɵisAnalyticsSupportedFactory } from '@angular/fire' ;
44import { Analytics , ANALYTICS_PROVIDER_NAME , AnalyticsInstances } from './analytics' ;
55import { FirebaseApps , FirebaseApp } from '@angular/fire/app' ;
66import { registerVersion } from 'firebase/app' ;
77import { ScreenTrackingService } from './screen-tracking.service' ;
88import { UserTrackingService } from './user-tracking.service' ;
99
10- export const PROVIDED_ANALYTICS_INSTANCE_FACTORIES = new InjectionToken < Array < ( injector : Injector ) => Analytics > > ( 'angularfire2.analytics-instances.factory' ) ;
1110export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken < Analytics [ ] > ( 'angularfire2.analytics-instances' ) ;
12- const IS_SUPPORTED = new InjectionToken < boolean > ( 'angularfire2.analytics.isSupported' ) ;
1311
14- const isSupportedValueSymbol = Symbol ( 'angularfire2.analytics.isSupported.value' ) ;
15- export const isSupportedPromiseSymbol = Symbol ( 'angularfire2.analytics.isSupported' ) ;
16-
17- globalThis [ isSupportedPromiseSymbol ] ||= isSupported ( ) . then ( it => globalThis [ isSupportedValueSymbol ] = it ) ;
18-
19- export function defaultAnalyticsInstanceFactory ( isSupported : boolean , provided : FirebaseAnalytics [ ] | undefined , defaultApp : FirebaseApp ) {
20- if ( ! isSupported ) { return null ; }
12+ export function defaultAnalyticsInstanceFactory ( provided : FirebaseAnalytics [ ] | undefined , defaultApp : FirebaseApp ) {
13+ if ( ! ɵisAnalyticsSupportedFactory . sync ( ) ) { return null ; }
2114 const defaultAnalytics = ɵgetDefaultInstanceOf < FirebaseAnalytics > ( ANALYTICS_PROVIDER_NAME , provided , defaultApp ) ;
2215 return defaultAnalytics && new Analytics ( defaultAnalytics ) ;
2316}
2417
2518export function analyticsInstanceFactory ( fn : ( injector : Injector ) => FirebaseAnalytics ) {
26- return ( zone : NgZone , isSupported : boolean , injector : Injector ) => {
27- if ( ! isSupported ) { return null ; }
19+ return ( zone : NgZone , injector : Injector ) => {
20+ if ( ! ɵisAnalyticsSupportedFactory . sync ( ) ) { return null ; }
2821 const analytics = zone . runOutsideAngular ( ( ) => fn ( injector ) ) ;
2922 return new Analytics ( analytics ) ;
3023 } ;
@@ -41,7 +34,6 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
4134 provide : Analytics ,
4235 useFactory : defaultAnalyticsInstanceFactory ,
4336 deps : [
44- IS_SUPPORTED ,
4537 [ new Optional ( ) , PROVIDED_ANALYTICS_INSTANCES ] ,
4638 FirebaseApp ,
4739 ]
@@ -53,15 +45,15 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
5345 ANALYTICS_INSTANCES_PROVIDER ,
5446 {
5547 provide : APP_INITIALIZER ,
56- useValue : ( ) => globalThis [ isSupportedPromiseSymbol ] ,
48+ useValue : ɵisAnalyticsSupportedFactory . async ,
5749 multi : true ,
5850 }
5951 ]
6052} )
6153export class AnalyticsModule {
6254 constructor (
63- @Optional ( ) _screenTracking : ScreenTrackingService ,
64- @Optional ( ) _userTracking : UserTrackingService ,
55+ @Optional ( ) _screenTrackingService : ScreenTrackingService ,
56+ @Optional ( ) _userTrackingService : UserTrackingService ,
6557 ) {
6658 registerVersion ( 'angularfire' , VERSION . full , 'analytics' ) ;
6759 }
@@ -71,19 +63,11 @@ export function provideAnalytics(fn: (injector: Injector) => FirebaseAnalytics,
7163 return {
7264 ngModule : AnalyticsModule ,
7365 providers : [ {
74- provide : IS_SUPPORTED ,
75- useFactory : ( ) => globalThis [ isSupportedValueSymbol ] ,
76- } , {
77- provide : PROVIDED_ANALYTICS_INSTANCE_FACTORIES ,
78- useValue : fn ,
79- multi : true ,
80- } , {
8166 provide : PROVIDED_ANALYTICS_INSTANCES ,
8267 useFactory : analyticsInstanceFactory ( fn ) ,
8368 multi : true ,
8469 deps : [
8570 NgZone ,
86- IS_SUPPORTED ,
8771 Injector ,
8872 ɵAngularFireSchedulers ,
8973 FirebaseApps ,
0 commit comments