1
1
import { 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' ;
4
4
import { Analytics , ANALYTICS_PROVIDER_NAME , AnalyticsInstances } from './analytics' ;
5
5
import { FirebaseApps , FirebaseApp } from '@angular/fire/app' ;
6
6
import { registerVersion } from 'firebase/app' ;
7
7
import { ScreenTrackingService } from './screen-tracking.service' ;
8
8
import { UserTrackingService } from './user-tracking.service' ;
9
9
10
- export const PROVIDED_ANALYTICS_INSTANCE_FACTORIES = new InjectionToken < Array < ( injector : Injector ) => Analytics > > ( 'angularfire2.analytics-instances.factory' ) ;
11
10
export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken < Analytics [ ] > ( 'angularfire2.analytics-instances' ) ;
12
- const IS_SUPPORTED = new InjectionToken < boolean > ( 'angularfire2.analytics.isSupported' ) ;
13
11
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 ; }
21
14
const defaultAnalytics = ɵgetDefaultInstanceOf < FirebaseAnalytics > ( ANALYTICS_PROVIDER_NAME , provided , defaultApp ) ;
22
15
return defaultAnalytics && new Analytics ( defaultAnalytics ) ;
23
16
}
24
17
25
18
export 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 ; }
28
21
const analytics = zone . runOutsideAngular ( ( ) => fn ( injector ) ) ;
29
22
return new Analytics ( analytics ) ;
30
23
} ;
@@ -41,7 +34,6 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
41
34
provide : Analytics ,
42
35
useFactory : defaultAnalyticsInstanceFactory ,
43
36
deps : [
44
- IS_SUPPORTED ,
45
37
[ new Optional ( ) , PROVIDED_ANALYTICS_INSTANCES ] ,
46
38
FirebaseApp ,
47
39
]
@@ -53,15 +45,15 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
53
45
ANALYTICS_INSTANCES_PROVIDER ,
54
46
{
55
47
provide : APP_INITIALIZER ,
56
- useValue : ( ) => globalThis [ isSupportedPromiseSymbol ] ,
48
+ useValue : ɵisAnalyticsSupportedFactory . async ,
57
49
multi : true ,
58
50
}
59
51
]
60
52
} )
61
53
export class AnalyticsModule {
62
54
constructor (
63
- @Optional ( ) _screenTracking : ScreenTrackingService ,
64
- @Optional ( ) _userTracking : UserTrackingService ,
55
+ @Optional ( ) _screenTrackingService : ScreenTrackingService ,
56
+ @Optional ( ) _userTrackingService : UserTrackingService ,
65
57
) {
66
58
registerVersion ( 'angularfire' , VERSION . full , 'analytics' ) ;
67
59
}
@@ -71,19 +63,11 @@ export function provideAnalytics(fn: (injector: Injector) => FirebaseAnalytics,
71
63
return {
72
64
ngModule : AnalyticsModule ,
73
65
providers : [ {
74
- provide : IS_SUPPORTED ,
75
- useFactory : ( ) => globalThis [ isSupportedValueSymbol ] ,
76
- } , {
77
- provide : PROVIDED_ANALYTICS_INSTANCE_FACTORIES ,
78
- useValue : fn ,
79
- multi : true ,
80
- } , {
81
66
provide : PROVIDED_ANALYTICS_INSTANCES ,
82
67
useFactory : analyticsInstanceFactory ( fn ) ,
83
68
multi : true ,
84
69
deps : [
85
70
NgZone ,
86
- IS_SUPPORTED ,
87
71
Injector ,
88
72
ɵAngularFireSchedulers ,
89
73
FirebaseApps ,
0 commit comments