UNPKG

@angular/fire

Version:
1 lines 19.6 kB
{"version":3,"file":"angular-fire-compat-analytics.mjs","sources":["../../../src/compat/analytics/base.ts","../../../src/compat/analytics/analytics.ts","../../../src/compat/analytics/user-tracking.service.ts","../../../src/compat/analytics/screen-tracking.service.ts","../../../src/compat/analytics/analytics.module.ts","../../../src/compat/analytics/angular-fire-compat-analytics.ts"],"sourcesContent":["// DO NOT MODIFY, this file is autogenerated by tools/build.ts\n// Export a null object with the same keys as firebase/compat/analytics, so Proxy can work with proxy-polyfill in Internet Explorer\nexport const proxyPolyfillCompat = {\n app: null,\n logEvent: null,\n setCurrentScreen: null,\n setUserId: null,\n setUserProperties: null,\n setAnalyticsCollectionEnabled: null,\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';\nimport { ɵAngularFireSchedulers } from '@angular/fire';\nimport { ɵPromiseProxy, ɵapplyMixins, ɵcacheInstance, ɵlazySDKProxy } from '@angular/fire/compat';\nimport { FirebaseApp } from '@angular/fire/compat';\nimport { isSupported } from 'firebase/analytics';\nimport firebase from 'firebase/compat/app';\nimport { EMPTY, of } from 'rxjs';\nimport { map, observeOn, shareReplay, switchMap } from 'rxjs/operators';\nimport { proxyPolyfillCompat } from './base';\n\nexport type Config = Record<string, any>;\n\nexport const COLLECTION_ENABLED = new InjectionToken<boolean>('angularfire2.analytics.analyticsCollectionEnabled');\nexport const APP_VERSION = new InjectionToken<string>('angularfire2.analytics.appVersion');\nexport const APP_NAME = new InjectionToken<string>('angularfire2.analytics.appName');\nexport const DEBUG_MODE = new InjectionToken<boolean>('angularfire2.analytics.debugMode');\nexport const CONFIG = new InjectionToken<Config>('angularfire2.analytics.config');\n\nconst APP_NAME_KEY = 'app_name';\nconst APP_VERSION_KEY = 'app_version';\nconst DEBUG_MODE_KEY = 'debug_mode';\nconst GTAG_CONFIG_COMMAND = 'config';\nconst GTAG_FUNCTION_NAME = 'gtag'; // TODO rename these\nconst DATA_LAYER_NAME = 'dataLayer';\nconst SEND_TO_KEY = 'send_to';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AngularFireAnalytics extends ɵPromiseProxy<firebase.analytics.Analytics> {\n}\n\n@Injectable({\n providedIn: 'any'\n})\nexport class AngularFireAnalytics {\n\n private measurementId: string;\n private analyticsInitialized = new Promise<void>(() => undefined);\n\n async updateConfig(config: Config) {\n await this.analyticsInitialized;\n window[GTAG_FUNCTION_NAME](GTAG_CONFIG_COMMAND, this.measurementId, { ...config, update: true });\n }\n\n constructor(\n app: FirebaseApp,\n @Optional() @Inject(COLLECTION_ENABLED) analyticsCollectionEnabled: boolean | null,\n @Optional() @Inject(APP_VERSION) providedAppVersion: string | null,\n @Optional() @Inject(APP_NAME) providedAppName: string | null,\n @Optional() @Inject(DEBUG_MODE) debugModeEnabled: boolean | null,\n @Optional() @Inject(CONFIG) providedConfig: Config | null,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n zone: NgZone,\n schedulers: ɵAngularFireSchedulers,\n ) {\n\n if (isPlatformBrowser(platformId)) {\n\n window[DATA_LAYER_NAME] = window[DATA_LAYER_NAME] || [];\n\n // It turns out we can't rely on the measurementId in the Firebase config JSON\n // this identifier is not stable. firebase/analytics does a call to get a fresh value\n // falling back on the one in the config. Rather than do that ourselves we should listen\n // on our gtag function for a analytics config command\n // e.g, ['config', measurementId, { origin: 'firebase', firebase_id }]\n const parseMeasurementId = (...args: any[]) => {\n if (args[0] === 'config' && args[2].origin === 'firebase') {\n this.measurementId = args[1];\n return true;\n } else {\n return false;\n }\n };\n\n const patchGtag = (fn?: (...args: any[]) => void) => {\n window[GTAG_FUNCTION_NAME] = (...args: any[]) => {\n if (fn) {\n fn(...args);\n }\n // Inject app_name and app_version into events\n // TODO(jamesdaniels): I'm doing this as documented but it's still not\n // showing up in the console. Investigate. Guessing it's just part of the\n // whole GA4 transition mess.\n if (args[0] === 'event' && args[2][SEND_TO_KEY] === this.measurementId) {\n if (providedAppName) {\n args[2][APP_NAME_KEY] = providedAppName;\n }\n if (providedAppVersion) {\n args[2][APP_VERSION_KEY] = providedAppVersion;\n }\n }\n if (debugModeEnabled && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.info(...args);\n }\n /**\n * According to the gtag documentation, this function that defines a custom data layer cannot be\n * an arrow function because 'arguments' is not an array. It is actually an object that behaves\n * like an array and contains more information then just indexes. Transforming this into arrow function\n * caused issue #2505 where analytics no longer sent any data.\n */\n (function(..._args: any[]) {\n window[DATA_LAYER_NAME].push(arguments);\n })(...args);\n };\n };\n\n // Unclear if we still need to but I was running into config/events I passed\n // to gtag before ['js' timestamp] weren't getting parsed, so let's make a promise\n // that resolves when firebase/analytics has configured gtag.js that we wait on\n // before sending anything\n const firebaseAnalyticsAlreadyInitialized = window[DATA_LAYER_NAME].some(parseMeasurementId);\n if (firebaseAnalyticsAlreadyInitialized) {\n this.analyticsInitialized = Promise.resolve();\n patchGtag();\n } else {\n this.analyticsInitialized = new Promise(resolve => {\n patchGtag((...args) => {\n if (parseMeasurementId(...args)) {\n resolve();\n }\n });\n });\n }\n\n if (providedConfig) {\n this.updateConfig(providedConfig);\n }\n if (debugModeEnabled) {\n this.updateConfig({ [DEBUG_MODE_KEY]: 1 });\n }\n\n } else {\n\n this.analyticsInitialized = Promise.resolve();\n\n }\n\n const analytics = of(undefined).pipe(\n observeOn(schedulers.outsideAngular),\n switchMap(isSupported),\n switchMap(supported => supported ? zone.runOutsideAngular(() => import('firebase/compat/analytics')) : EMPTY),\n map(() => {\n return ɵcacheInstance(`analytics`, 'AngularFireAnalytics', app.name, () => {\n const analytics = app.analytics();\n if (analyticsCollectionEnabled === false) {\n analytics.setAnalyticsCollectionEnabled(false);\n }\n return analytics;\n }, [app, analyticsCollectionEnabled, providedConfig, debugModeEnabled]);\n }),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n return ɵlazySDKProxy(this, analytics, zone);\n\n }\n\n}\n\nɵapplyMixins(AngularFireAnalytics, [proxyPolyfillCompat]);\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, NgZone, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport { AngularFireAuth } from '@angular/fire/compat/auth';\nimport firebase from 'firebase/compat/app';\nimport { Subscription } from 'rxjs';\nimport { AngularFireAnalytics } from './analytics';\n\n@Injectable()\nexport class UserTrackingService implements OnDestroy {\n\n initialized: Promise<void>;\n private disposables: Subscription[] = [];\n\n // TODO a user properties injector\n constructor(\n analytics: AngularFireAnalytics,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) platformId: Object,\n auth: AngularFireAuth,\n zone: NgZone,\n ) {\n firebase.registerVersion('angularfire', VERSION.full, 'compat-user-tracking');\n if (isPlatformBrowser(platformId)) {\n let resolveInitialized;\n this.initialized = zone.runOutsideAngular(() => new Promise(resolve => resolveInitialized = resolve));\n this.disposables = [\n auth.authState.subscribe(user => {\n analytics.setUserId(user?.uid);\n resolveInitialized();\n }),\n auth.credential.subscribe(credential => {\n if (credential) {\n const method = credential.user.isAnonymous ? 'anonymous' : credential.additionalUserInfo.providerId;\n if (credential.additionalUserInfo.isNewUser) {\n analytics.logEvent('sign_up', { method });\n }\n analytics.logEvent('login', { method });\n }\n })\n ];\n } else {\n this.initialized = Promise.resolve();\n }\n\n }\n\n ngOnDestroy() {\n this.disposables.forEach(it => it.unsubscribe());\n }\n}\n","import { ComponentFactoryResolver, Injectable, NgZone, OnDestroy, Optional } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport { ɵscreenViewEvent } from '@angular/fire/analytics';\nimport { Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport firebase from 'firebase/compat/app';\nimport { Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { AngularFireAnalytics } from './analytics';\nimport { UserTrackingService } from './user-tracking.service';\n\nconst SCREEN_VIEW_EVENT = 'screen_view';\n\n@Injectable()\nexport class ScreenTrackingService implements OnDestroy {\n\n private disposable: Subscription | undefined;\n\n constructor(\n analytics: AngularFireAnalytics,\n @Optional() router: Router,\n @Optional() title: Title,\n componentFactoryResolver: ComponentFactoryResolver,\n zone: NgZone,\n @Optional() userTrackingService: UserTrackingService,\n ) {\n firebase.registerVersion('angularfire', VERSION.full, 'compat-screen-tracking');\n if (!router || !analytics) { return this; }\n zone.runOutsideAngular(() => {\n this.disposable = ɵscreenViewEvent(router, title, componentFactoryResolver).pipe(\n switchMap(async params => {\n if (userTrackingService) {\n await userTrackingService.initialized;\n }\n return await analytics.logEvent(SCREEN_VIEW_EVENT, params);\n })\n ).subscribe();\n });\n }\n\n ngOnDestroy() {\n if (this.disposable) {\n this.disposable.unsubscribe();\n }\n }\n\n}\n","import { NgModule, Optional } from '@angular/core';\nimport { VERSION } from '@angular/fire';\nimport firebase from 'firebase/compat/app';\nimport { AngularFireAnalytics } from './analytics';\nimport { ScreenTrackingService } from './screen-tracking.service';\nimport { UserTrackingService } from './user-tracking.service';\n\n@NgModule({\n providers: [ AngularFireAnalytics ]\n})\nexport class AngularFireAnalyticsModule {\n constructor(\n analytics: AngularFireAnalytics,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n @Optional() screenTracking: ScreenTrackingService,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n @Optional() userTracking: UserTrackingService,\n ) {\n firebase.registerVersion('angularfire', VERSION.full, 'analytics-compat');\n // calling anything on analytics will eagerly load the SDK\n analytics.app.then(() => undefined);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵcacheInstance","ɵlazySDKProxy","ɵapplyMixins","i2","ɵscreenViewEvent","i1.AngularFireAnalytics","i4.UserTrackingService","i2.ScreenTrackingService","i3.UserTrackingService"],"mappings":"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"}