@angular/fire 7.1.0-rc.3 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analytics/analytics.module.d.ts +9 -6
- package/analytics/firebase.d.ts +2 -2
- package/analytics/overrides.d.ts +1 -0
- package/analytics/public_api.d.ts +2 -0
- package/analytics/screen-tracking.service.d.ts +40 -0
- package/analytics/user-tracking.service.d.ts +11 -0
- package/app/app.module.d.ts +3 -3
- package/app-check/app-check.module.d.ts +3 -3
- package/auth/auth.module.d.ts +3 -3
- package/auth-guard/angular-fire-auth-guard.d.ts +5 -0
- package/auth-guard/auth-guard.d.ts +29 -0
- package/auth-guard/auth-guard.module.d.ts +7 -0
- package/auth-guard/package.json +11 -0
- package/auth-guard/public_api.d.ts +2 -0
- package/bundles/angular-fire-analytics.umd.js +548 -41
- package/bundles/angular-fire-analytics.umd.js.map +1 -1
- package/bundles/angular-fire-app-check.umd.js +336 -18
- package/bundles/angular-fire-app-check.umd.js.map +1 -1
- package/bundles/angular-fire-app.umd.js +323 -3
- package/bundles/angular-fire-app.umd.js.map +1 -1
- package/bundles/angular-fire-auth-guard.umd.js +109 -0
- package/bundles/angular-fire-auth-guard.umd.js.map +1 -0
- package/bundles/angular-fire-auth.umd.js +324 -9
- package/bundles/angular-fire-auth.umd.js.map +1 -1
- package/bundles/angular-fire-compat-analytics.umd.js +16 -112
- package/bundles/angular-fire-compat-analytics.umd.js.map +1 -1
- package/bundles/angular-fire-compat-auth.umd.js +1 -1
- package/bundles/angular-fire-compat-auth.umd.js.map +1 -1
- package/bundles/angular-fire-compat-database.umd.js +1 -1
- package/bundles/angular-fire-compat-database.umd.js.map +1 -1
- package/bundles/angular-fire-compat-firestore.umd.js +1 -1
- package/bundles/angular-fire-compat-firestore.umd.js.map +1 -1
- package/bundles/angular-fire-compat-functions.umd.js +1 -1
- package/bundles/angular-fire-compat-functions.umd.js.map +1 -1
- package/bundles/angular-fire-compat-messaging.umd.js +5 -5
- package/bundles/angular-fire-compat-messaging.umd.js.map +1 -1
- package/bundles/angular-fire-compat-performance.umd.js +5 -5
- package/bundles/angular-fire-compat-performance.umd.js.map +1 -1
- package/bundles/angular-fire-compat-remote-config.umd.js +5 -5
- package/bundles/angular-fire-compat-remote-config.umd.js.map +1 -1
- package/bundles/angular-fire-compat-storage.umd.js +2 -1
- package/bundles/angular-fire-compat-storage.umd.js.map +1 -1
- package/bundles/angular-fire-compat.umd.js +38 -2
- package/bundles/angular-fire-compat.umd.js.map +1 -1
- package/bundles/angular-fire-database.umd.js +323 -6
- package/bundles/angular-fire-database.umd.js.map +1 -1
- package/bundles/angular-fire-firestore-lite.umd.js +327 -9
- package/bundles/angular-fire-firestore-lite.umd.js.map +1 -1
- package/bundles/angular-fire-firestore.umd.js +323 -8
- package/bundles/angular-fire-firestore.umd.js.map +1 -1
- package/bundles/angular-fire-functions.umd.js +323 -6
- package/bundles/angular-fire-functions.umd.js.map +1 -1
- package/bundles/angular-fire-messaging.umd.js +339 -24
- package/bundles/angular-fire-messaging.umd.js.map +1 -1
- package/bundles/angular-fire-performance.umd.js +339 -11
- package/bundles/angular-fire-performance.umd.js.map +1 -1
- package/bundles/angular-fire-remote-config.umd.js +342 -6
- package/bundles/angular-fire-remote-config.umd.js.map +1 -1
- package/bundles/angular-fire-storage.umd.js +324 -7
- package/bundles/angular-fire-storage.umd.js.map +1 -1
- package/bundles/angular-fire.umd.js +43 -371
- package/bundles/angular-fire.umd.js.map +1 -1
- package/compat/analytics/screen-tracking.service.d.ts +2 -2
- package/compat/cache.d.ts +1 -0
- package/compat/public_api.d.ts +1 -0
- package/compat/storage/interfaces.d.ts +1 -0
- package/compat/storage/ref.d.ts +2 -1
- package/core.d.ts +13 -3
- package/database/database.module.d.ts +3 -3
- package/docs/deploy/getting-started.md +62 -1
- package/docs/version-7-upgrade.md +1 -1
- package/esm2015/analytics/analytics.module.js +33 -27
- package/esm2015/analytics/firebase.js +3 -3
- package/esm2015/analytics/overrides.js +3 -0
- package/esm2015/analytics/public_api.js +3 -1
- package/esm2015/analytics/screen-tracking.service.js +139 -0
- package/esm2015/analytics/user-tracking.service.js +43 -0
- package/esm2015/app/app.module.js +12 -7
- package/esm2015/app-check/app-check.js +1 -2
- package/esm2015/app-check/app-check.module.js +19 -14
- package/esm2015/auth/auth.js +1 -2
- package/esm2015/auth/auth.module.js +10 -9
- package/esm2015/auth-guard/angular-fire-auth-guard.js +5 -0
- package/esm2015/auth-guard/auth-guard.js +49 -0
- package/esm2015/auth-guard/auth-guard.module.js +20 -0
- package/esm2015/auth-guard/public_api.js +3 -0
- package/esm2015/compat/analytics/analytics.js +2 -3
- package/esm2015/compat/analytics/screen-tracking.service.js +11 -100
- package/esm2015/compat/auth/auth.js +2 -3
- package/esm2015/compat/cache.js +32 -0
- package/esm2015/compat/database/database.js +2 -3
- package/esm2015/compat/firestore/firestore.js +2 -3
- package/esm2015/compat/functions/functions.js +2 -3
- package/esm2015/compat/messaging/messaging.js +3 -3
- package/esm2015/compat/performance/performance.js +2 -3
- package/esm2015/compat/public_api.js +2 -1
- package/esm2015/compat/remote-config/remote-config.js +4 -5
- package/esm2015/compat/storage/interfaces.js +1 -1
- package/esm2015/compat/storage/ref.js +2 -1
- package/esm2015/compat/storage/storage.js +3 -3
- package/esm2015/core.js +44 -52
- package/esm2015/database/database.module.js +9 -7
- package/esm2015/firestore/firestore.module.js +9 -9
- package/esm2015/firestore/lite/lite.module.js +11 -7
- package/esm2015/functions/functions.module.js +9 -7
- package/esm2015/messaging/firebase.js +3 -3
- package/esm2015/messaging/messaging.module.js +19 -21
- package/esm2015/messaging/overrides.js +3 -0
- package/esm2015/performance/performance.module.js +22 -8
- package/esm2015/remote-config/firebase.js +2 -1
- package/esm2015/remote-config/overrides.js +3 -0
- package/esm2015/remote-config/remote-config.module.js +25 -7
- package/esm2015/storage/storage.module.js +10 -8
- package/esm2015/zones.js +3 -2
- package/fesm2015/angular-fire-analytics.js +209 -40
- package/fesm2015/angular-fire-analytics.js.map +1 -1
- package/fesm2015/angular-fire-app-check.js +18 -14
- package/fesm2015/angular-fire-app-check.js.map +1 -1
- package/fesm2015/angular-fire-app.js +11 -6
- package/fesm2015/angular-fire-app.js.map +1 -1
- package/fesm2015/angular-fire-auth-guard.js +72 -0
- package/fesm2015/angular-fire-auth-guard.js.map +1 -0
- package/fesm2015/angular-fire-auth.js +9 -9
- package/fesm2015/angular-fire-auth.js.map +1 -1
- package/fesm2015/angular-fire-compat-analytics.js +10 -98
- package/fesm2015/angular-fire-compat-analytics.js.map +1 -1
- package/fesm2015/angular-fire-compat-auth.js +2 -2
- package/fesm2015/angular-fire-compat-auth.js.map +1 -1
- package/fesm2015/angular-fire-compat-database.js +2 -2
- package/fesm2015/angular-fire-compat-database.js.map +1 -1
- package/fesm2015/angular-fire-compat-firestore.js +2 -2
- package/fesm2015/angular-fire-compat-firestore.js.map +1 -1
- package/fesm2015/angular-fire-compat-functions.js +2 -2
- package/fesm2015/angular-fire-compat-functions.js.map +1 -1
- package/fesm2015/angular-fire-compat-messaging.js +2 -2
- package/fesm2015/angular-fire-compat-messaging.js.map +1 -1
- package/fesm2015/angular-fire-compat-performance.js +2 -2
- package/fesm2015/angular-fire-compat-performance.js.map +1 -1
- package/fesm2015/angular-fire-compat-remote-config.js +4 -4
- package/fesm2015/angular-fire-compat-remote-config.js.map +1 -1
- package/fesm2015/angular-fire-compat-storage.js +3 -2
- package/fesm2015/angular-fire-compat-storage.js.map +1 -1
- package/fesm2015/angular-fire-compat.js +34 -3
- package/fesm2015/angular-fire-compat.js.map +1 -1
- package/fesm2015/angular-fire-database.js +8 -6
- package/fesm2015/angular-fire-database.js.map +1 -1
- package/fesm2015/angular-fire-firestore-lite.js +10 -6
- package/fesm2015/angular-fire-firestore-lite.js.map +1 -1
- package/fesm2015/angular-fire-firestore.js +8 -8
- package/fesm2015/angular-fire-firestore.js.map +1 -1
- package/fesm2015/angular-fire-functions.js +8 -6
- package/fesm2015/angular-fire-functions.js.map +1 -1
- package/fesm2015/angular-fire-messaging.js +22 -22
- package/fesm2015/angular-fire-messaging.js.map +1 -1
- package/fesm2015/angular-fire-performance.js +21 -7
- package/fesm2015/angular-fire-performance.js.map +1 -1
- package/fesm2015/angular-fire-remote-config.js +27 -7
- package/fesm2015/angular-fire-remote-config.js.map +1 -1
- package/fesm2015/angular-fire-storage.js +9 -7
- package/fesm2015/angular-fire-storage.js.map +1 -1
- package/fesm2015/angular-fire.js +46 -53
- package/fesm2015/angular-fire.js.map +1 -1
- package/firestore/firestore.module.d.ts +3 -3
- package/firestore/lite/lite.module.d.ts +3 -3
- package/functions/functions.module.d.ts +3 -3
- package/messaging/firebase.d.ts +2 -2
- package/messaging/messaging.module.d.ts +4 -4
- package/messaging/overrides.d.ts +1 -0
- package/package.json +9 -3
- package/performance/performance.module.d.ts +4 -4
- package/remote-config/firebase.d.ts +1 -0
- package/remote-config/overrides.d.ts +1 -0
- package/remote-config/remote-config.module.d.ts +3 -3
- package/schematics/deploy/actions.js +40 -26
- package/schematics/deploy/schema.json +4 -0
- package/schematics/firebaseTools.js +22 -2
- package/schematics/setup/index.js +9 -2
- package/schematics/setup/prompts.js +1 -1
- package/schematics/setup/ssr.js +7 -1
- package/schematics/setup/static.js +9 -3
- package/schematics/utils.js +1 -1
- package/schematics/versions.json +1 -1
- package/storage/storage.module.d.ts +3 -3
|
@@ -6,3 +6,4 @@ export declare type SettableMetadata = firebase.storage.SettableMetadata;
|
|
|
6
6
|
export declare type Reference = firebase.storage.Reference;
|
|
7
7
|
export declare type StringFormat = firebase.storage.StringFormat;
|
|
8
8
|
export declare type ListResult = firebase.storage.ListResult;
|
|
9
|
+
export declare type ListOptions = firebase.storage.ListOptions;
|
package/compat/storage/ref.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ListResult, Reference, SettableMetadata, UploadMetadata } from './interfaces';
|
|
1
|
+
import { ListOptions, ListResult, Reference, SettableMetadata, UploadMetadata } from './interfaces';
|
|
2
2
|
import { AngularFireUploadTask } from './task';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
export interface AngularFireStorageReference {
|
|
@@ -9,6 +9,7 @@ export interface AngularFireStorageReference {
|
|
|
9
9
|
updateMetadata(meta: SettableMetadata): Observable<any>;
|
|
10
10
|
put(data: any, metadata?: UploadMetadata | undefined): AngularFireUploadTask;
|
|
11
11
|
putString(data: string, format?: string | undefined, metadata?: UploadMetadata | undefined): AngularFireUploadTask;
|
|
12
|
+
list(options?: ListOptions): Observable<ListResult>;
|
|
12
13
|
listAll(): Observable<ListResult>;
|
|
13
14
|
}
|
|
14
15
|
/**
|
package/core.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Version } from '@angular/core';
|
|
2
2
|
import { FirebaseApp } from 'firebase/app';
|
|
3
3
|
export declare const VERSION: Version;
|
|
4
|
-
export declare
|
|
5
|
-
|
|
4
|
+
export declare const ɵisMessagingSupportedFactory: {
|
|
5
|
+
async: () => any;
|
|
6
|
+
sync: () => any;
|
|
7
|
+
};
|
|
8
|
+
export declare const ɵisRemoteConfigSupportedFactory: {
|
|
9
|
+
async: () => any;
|
|
10
|
+
sync: () => any;
|
|
11
|
+
};
|
|
12
|
+
export declare const ɵisAnalyticsSupportedFactory: {
|
|
13
|
+
async: () => any;
|
|
14
|
+
sync: () => any;
|
|
15
|
+
};
|
|
6
16
|
export declare function ɵgetDefaultInstanceOf<T = unknown>(identifier: string, provided: T[] | undefined, defaultApp: FirebaseApp): T | undefined;
|
|
7
17
|
export declare const ɵgetAllInstancesOf: <T = unknown>(identifier: string, app?: FirebaseApp) => T[];
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { NgZone, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
1
|
+
import { NgZone, InjectionToken, ModuleWithProviders, Injector } from '@angular/core';
|
|
2
2
|
import { Database as FirebaseDatabase } from 'firebase/database';
|
|
3
3
|
import { Database } from './database';
|
|
4
4
|
import { FirebaseApp } from '@angular/fire/app';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare const PROVIDED_DATABASE_INSTANCES: InjectionToken<Database[]>;
|
|
7
7
|
export declare function defaultDatabaseInstanceFactory(provided: FirebaseDatabase[] | undefined, defaultApp: FirebaseApp): Database;
|
|
8
|
-
export declare function databaseInstanceFactory(fn: () => FirebaseDatabase): (zone: NgZone) => Database;
|
|
8
|
+
export declare function databaseInstanceFactory(fn: (injector: Injector) => FirebaseDatabase): (zone: NgZone, injector: Injector) => Database;
|
|
9
9
|
export declare class DatabaseModule {
|
|
10
10
|
constructor();
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatabaseModule, never>;
|
|
12
12
|
static ɵmod: i0.ɵɵNgModuleDeclaration<DatabaseModule, never, never, never>;
|
|
13
13
|
static ɵinj: i0.ɵɵInjectorDeclaration<DatabaseModule>;
|
|
14
14
|
}
|
|
15
|
-
export declare function provideDatabase(fn: () => FirebaseDatabase): ModuleWithProviders<DatabaseModule>;
|
|
15
|
+
export declare function provideDatabase(fn: () => FirebaseDatabase, ...deps: any[]): ModuleWithProviders<DatabaseModule>;
|
|
@@ -140,4 +140,65 @@ The above configuration specifies the following:
|
|
|
140
140
|
2. `ng deploy projectName` will deploy the specified project with default configuration.
|
|
141
141
|
3. `ng deploy projectName --prod` or `ng deploy projectName --configuration='production'` will deploy `projectName` with production build settings to your production environment.
|
|
142
142
|
|
|
143
|
-
All of the options are optional. If you do not specify a `buildTarget`, it defaults to a production build (`projectName:build:production`). If you do not specify a `firebaseProject`, it defaults to the first matching deploy target found in your `.firebaserc` (where your projectName is the same as your Firebase deploy target name). The `configurations` section is also optional.
|
|
143
|
+
All of the options are optional. If you do not specify a `buildTarget`, it defaults to a production build (`projectName:build:production`). If you do not specify a `firebaseProject`, it defaults to the first matching deploy target found in your `.firebaserc` (where your projectName is the same as your Firebase deploy target name). The `configurations` section is also optional.
|
|
144
|
+
|
|
145
|
+
### Working with multiple project sites
|
|
146
|
+
|
|
147
|
+
For example, if you have muti sites config in firebase.json like this:
|
|
148
|
+
```
|
|
149
|
+
{
|
|
150
|
+
"hosting": [
|
|
151
|
+
{
|
|
152
|
+
"target": "custom-site",
|
|
153
|
+
"public": "public/my-custom-site",
|
|
154
|
+
"ignore": [
|
|
155
|
+
"firebase.json",
|
|
156
|
+
"**/.*",
|
|
157
|
+
"**/node_modules/**"
|
|
158
|
+
],
|
|
159
|
+
"rewrites": [
|
|
160
|
+
{
|
|
161
|
+
"source": "**",
|
|
162
|
+
"destination": "/index.html"
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
If you have multiple build targets and deploy targets, it is possible to specify them in your `angular.json` or `workspace.json`.
|
|
170
|
+
|
|
171
|
+
It is possible to use either your project name or project alias in `siteTarget`.
|
|
172
|
+
|
|
173
|
+
You may specify a `siteTarget` in your `options` as follows:
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
"deploy": {
|
|
177
|
+
"builder": "@angular/fire:deploy",
|
|
178
|
+
"options": {
|
|
179
|
+
"buildTarget": "projectName:build",
|
|
180
|
+
"firebaseProject": "developmentProject",
|
|
181
|
+
"siteTarget": "yourDefaultSiteTarget"
|
|
182
|
+
},
|
|
183
|
+
"configurations": {
|
|
184
|
+
"production": {
|
|
185
|
+
"buildTarget": "projectName:build:production",
|
|
186
|
+
"firebaseProject": "productionProject",
|
|
187
|
+
"siteTarget": "yourProdSiteTarget"
|
|
188
|
+
},
|
|
189
|
+
"storybook": {
|
|
190
|
+
"buildTarget": "projectName:build-storybook",
|
|
191
|
+
"firebaseProject": "developmentProject",
|
|
192
|
+
"siteTarget": "yourStorybookSiteTarget"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The above configuration specifies the following:
|
|
199
|
+
|
|
200
|
+
1. `ng deploy` will deploy the default project with default configuration.
|
|
201
|
+
2. `ng deploy projectName` will deploy the specified project with default configuration.
|
|
202
|
+
3. `ng deploy projectName --configuration=storybook --siteTarget=mySiteTarget` will deploy `projectName` to `mySiteTarget` with configuration`storybook`.
|
|
203
|
+
|
|
204
|
+
All of the options are optional
|
|
@@ -103,7 +103,7 @@ In AngularFire v7 working with multiple instances was difficult, in the new SDK
|
|
|
103
103
|
|
|
104
104
|
```ts
|
|
105
105
|
import { FirebaseApp, FirebaseApps } from '@angular/fire/app';
|
|
106
|
-
import { Storage,
|
|
106
|
+
import { Storage, StorageInstances } from '@angular/fire/storage';
|
|
107
107
|
|
|
108
108
|
export class Foo {
|
|
109
109
|
constructor(
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import { NgModule, Optional, NgZone, InjectionToken, APP_INITIALIZER } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { ɵgetDefaultInstanceOf, ɵmemoizeInstance, ɵAngularFireSchedulers, VERSION } from '@angular/fire';
|
|
1
|
+
import { NgModule, Optional, NgZone, InjectionToken, APP_INITIALIZER, Injector } from '@angular/core';
|
|
2
|
+
import { ɵgetDefaultInstanceOf, ɵAngularFireSchedulers, VERSION, ɵisAnalyticsSupportedFactory } from '@angular/fire';
|
|
4
3
|
import { Analytics, ANALYTICS_PROVIDER_NAME, AnalyticsInstances } from './analytics';
|
|
5
4
|
import { FirebaseApps, FirebaseApp } from '@angular/fire/app';
|
|
6
5
|
import { registerVersion } from 'firebase/app';
|
|
6
|
+
import { ScreenTrackingService } from './screen-tracking.service';
|
|
7
|
+
import { UserTrackingService } from './user-tracking.service';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
export function defaultAnalyticsInstanceFactory(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
import * as i1 from "./screen-tracking.service";
|
|
10
|
+
import * as i2 from "./user-tracking.service";
|
|
11
|
+
export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken('angularfire2.analytics-instances');
|
|
12
|
+
export function defaultAnalyticsInstanceFactory(provided, defaultApp) {
|
|
13
|
+
if (!ɵisAnalyticsSupportedFactory.sync()) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const defaultAnalytics = ɵgetDefaultInstanceOf(ANALYTICS_PROVIDER_NAME, provided, defaultApp);
|
|
17
|
+
return defaultAnalytics && new Analytics(defaultAnalytics);
|
|
16
18
|
}
|
|
17
19
|
export function analyticsInstanceFactory(fn) {
|
|
18
|
-
return (zone,
|
|
19
|
-
|
|
20
|
+
return (zone, injector) => {
|
|
21
|
+
if (!ɵisAnalyticsSupportedFactory.sync()) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const analytics = zone.runOutsideAngular(() => fn(injector));
|
|
20
25
|
return new Analytics(analytics);
|
|
21
26
|
};
|
|
22
27
|
}
|
|
@@ -30,26 +35,25 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
|
|
|
30
35
|
provide: Analytics,
|
|
31
36
|
useFactory: defaultAnalyticsInstanceFactory,
|
|
32
37
|
deps: [
|
|
33
|
-
IS_SUPPORTED,
|
|
34
38
|
[new Optional(), PROVIDED_ANALYTICS_INSTANCES],
|
|
35
39
|
FirebaseApp,
|
|
36
40
|
]
|
|
37
41
|
};
|
|
38
42
|
export class AnalyticsModule {
|
|
39
|
-
constructor() {
|
|
43
|
+
constructor(_screenTrackingService, _userTrackingService) {
|
|
40
44
|
registerVersion('angularfire', VERSION.full, 'analytics');
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
|
-
AnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: AnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
47
|
+
AnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: AnalyticsModule, deps: [{ token: i1.ScreenTrackingService, optional: true }, { token: i2.UserTrackingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
44
48
|
AnalyticsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: AnalyticsModule });
|
|
45
49
|
AnalyticsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: AnalyticsModule, providers: [
|
|
46
50
|
DEFAULT_ANALYTICS_INSTANCE_PROVIDER,
|
|
47
51
|
ANALYTICS_INSTANCES_PROVIDER,
|
|
48
52
|
{
|
|
49
53
|
provide: APP_INITIALIZER,
|
|
50
|
-
useValue:
|
|
54
|
+
useValue: ɵisAnalyticsSupportedFactory.async,
|
|
51
55
|
multi: true,
|
|
52
|
-
}
|
|
56
|
+
}
|
|
53
57
|
] });
|
|
54
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: AnalyticsModule, decorators: [{
|
|
55
59
|
type: NgModule,
|
|
@@ -59,29 +63,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.3", ngImpor
|
|
|
59
63
|
ANALYTICS_INSTANCES_PROVIDER,
|
|
60
64
|
{
|
|
61
65
|
provide: APP_INITIALIZER,
|
|
62
|
-
useValue:
|
|
66
|
+
useValue: ɵisAnalyticsSupportedFactory.async,
|
|
63
67
|
multi: true,
|
|
64
|
-
}
|
|
68
|
+
}
|
|
65
69
|
]
|
|
66
70
|
}]
|
|
67
|
-
}], ctorParameters: function () { return [
|
|
68
|
-
|
|
71
|
+
}], ctorParameters: function () { return [{ type: i1.ScreenTrackingService, decorators: [{
|
|
72
|
+
type: Optional
|
|
73
|
+
}] }, { type: i2.UserTrackingService, decorators: [{
|
|
74
|
+
type: Optional
|
|
75
|
+
}] }]; } });
|
|
76
|
+
export function provideAnalytics(fn, ...deps) {
|
|
69
77
|
return {
|
|
70
78
|
ngModule: AnalyticsModule,
|
|
71
79
|
providers: [{
|
|
72
|
-
provide: IS_SUPPORTED,
|
|
73
|
-
useFactory: () => globalThis[isSupportedSymbol],
|
|
74
|
-
}, {
|
|
75
80
|
provide: PROVIDED_ANALYTICS_INSTANCES,
|
|
76
81
|
useFactory: analyticsInstanceFactory(fn),
|
|
77
82
|
multi: true,
|
|
78
83
|
deps: [
|
|
79
84
|
NgZone,
|
|
80
|
-
|
|
85
|
+
Injector,
|
|
81
86
|
ɵAngularFireSchedulers,
|
|
82
87
|
FirebaseApps,
|
|
88
|
+
...deps,
|
|
83
89
|
]
|
|
84
90
|
}]
|
|
85
91
|
};
|
|
86
92
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmFseXRpY3MvYW5hbHl0aWNzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUF1QixlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFOUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBQWMsa0NBQWtDLENBQUMsQ0FBQztBQUVoSCxNQUFNLFVBQVUsK0JBQStCLENBQUMsUUFBdUMsRUFBRSxVQUF1QjtJQUM5RyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztLQUFFO0lBQzFELE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQW9CLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqSCxPQUFPLGdCQUFnQixJQUFJLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxFQUE2QztJQUNwRixPQUFPLENBQUMsSUFBWSxFQUFFLFFBQWtCLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsSUFBSSxFQUFFO1FBQ0osQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLDRCQUE0QixDQUFFO0tBQ2hEO0NBQ0YsQ0FBQztBQUVGLE1BQU0sbUNBQW1DLEdBQUc7SUFDMUMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLCtCQUErQjtJQUMzQyxJQUFJLEVBQUU7UUFDSixDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsNEJBQTRCLENBQUU7UUFDL0MsV0FBVztLQUNaO0NBQ0YsQ0FBQztBQWFGLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ2Msc0JBQTZDLEVBQzdDLG9CQUF5QztRQUVyRCxlQUFlLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7NEdBTlUsZUFBZTs2R0FBZixlQUFlOzZHQUFmLGVBQWUsYUFWZjtRQUNULG1DQUFtQztRQUNuQyw0QkFBNEI7UUFDNUI7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsNEJBQTRCLENBQUMsS0FBSztZQUM1QyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0Y7MkZBRVUsZUFBZTtrQkFYM0IsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsbUNBQW1DO3dCQUNuQyw0QkFBNEI7d0JBQzVCOzRCQUNFLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixRQUFRLEVBQUUsNEJBQTRCLENBQUMsS0FBSzs0QkFDNUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVE7O0FBTWIsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQTZDLEVBQUUsR0FBRyxJQUFXO0lBQzVGLE9BQU87UUFDTCxRQUFRLEVBQUUsZUFBZTtRQUN6QixTQUFTLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsNEJBQTRCO2dCQUNyQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUU7b0JBQ0osTUFBTTtvQkFDTixRQUFRO29CQUNSLHNCQUFzQjtvQkFDdEIsWUFBWTtvQkFDWixHQUFHLElBQUk7aUJBQ1I7YUFDRixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgT3B0aW9uYWwsIE5nWm9uZSwgSW5qZWN0aW9uVG9rZW4sIE1vZHVsZVdpdGhQcm92aWRlcnMsIEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuYWx5dGljcyBhcyBGaXJlYmFzZUFuYWx5dGljcyB9IGZyb20gJ2ZpcmViYXNlL2FuYWx5dGljcyc7XG5pbXBvcnQgeyDJtWdldERlZmF1bHRJbnN0YW5jZU9mLCDJtUFuZ3VsYXJGaXJlU2NoZWR1bGVycywgVkVSU0lPTiwgybVpc0FuYWx5dGljc1N1cHBvcnRlZEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9maXJlJztcbmltcG9ydCB7IEFuYWx5dGljcywgQU5BTFlUSUNTX1BST1ZJREVSX05BTUUsIEFuYWx5dGljc0luc3RhbmNlcyB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IEZpcmViYXNlQXBwcywgRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCc7XG5pbXBvcnQgeyByZWdpc3RlclZlcnNpb24gfSBmcm9tICdmaXJlYmFzZS9hcHAnO1xuaW1wb3J0IHsgU2NyZWVuVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi9zY3JlZW4tdHJhY2tpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXRyYWNraW5nLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgUFJPVklERURfQU5BTFlUSUNTX0lOU1RBTkNFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBbmFseXRpY3NbXT4oJ2FuZ3VsYXJmaXJlMi5hbmFseXRpY3MtaW5zdGFuY2VzJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QW5hbHl0aWNzSW5zdGFuY2VGYWN0b3J5KHByb3ZpZGVkOiBGaXJlYmFzZUFuYWx5dGljc1tdfHVuZGVmaW5lZCwgZGVmYXVsdEFwcDogRmlyZWJhc2VBcHApIHtcbiAgaWYgKCHJtWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeS5zeW5jKCkpIHsgcmV0dXJuIG51bGw7IH1cbiAgY29uc3QgZGVmYXVsdEFuYWx5dGljcyA9IMm1Z2V0RGVmYXVsdEluc3RhbmNlT2Y8RmlyZWJhc2VBbmFseXRpY3M+KEFOQUxZVElDU19QUk9WSURFUl9OQU1FLCBwcm92aWRlZCwgZGVmYXVsdEFwcCk7XG4gIHJldHVybiBkZWZhdWx0QW5hbHl0aWNzICYmIG5ldyBBbmFseXRpY3MoZGVmYXVsdEFuYWx5dGljcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3NJbnN0YW5jZUZhY3RvcnkoZm46IChpbmplY3RvcjogSW5qZWN0b3IpID0+IEZpcmViYXNlQW5hbHl0aWNzKSB7XG4gIHJldHVybiAoem9uZTogTmdab25lLCBpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICBpZiAoIcm1aXNBbmFseXRpY3NTdXBwb3J0ZWRGYWN0b3J5LnN5bmMoKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IGFuYWx5dGljcyA9IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZm4oaW5qZWN0b3IpKTtcbiAgICByZXR1cm4gbmV3IEFuYWx5dGljcyhhbmFseXRpY3MpO1xuICB9O1xufVxuXG5jb25zdCBBTkFMWVRJQ1NfSU5TVEFOQ0VTX1BST1ZJREVSID0ge1xuICBwcm92aWRlOiBBbmFseXRpY3NJbnN0YW5jZXMsXG4gIGRlcHM6IFtcbiAgICBbbmV3IE9wdGlvbmFsKCksIFBST1ZJREVEX0FOQUxZVElDU19JTlNUQU5DRVMgXSxcbiAgXVxufTtcblxuY29uc3QgREVGQVVMVF9BTkFMWVRJQ1NfSU5TVEFOQ0VfUFJPVklERVIgPSB7XG4gIHByb3ZpZGU6IEFuYWx5dGljcyxcbiAgdXNlRmFjdG9yeTogZGVmYXVsdEFuYWx5dGljc0luc3RhbmNlRmFjdG9yeSxcbiAgZGVwczogW1xuICAgIFtuZXcgT3B0aW9uYWwoKSwgUFJPVklERURfQU5BTFlUSUNTX0lOU1RBTkNFUyBdLFxuICAgIEZpcmViYXNlQXBwLFxuICBdXG59O1xuXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtcbiAgICBERUZBVUxUX0FOQUxZVElDU19JTlNUQU5DRV9QUk9WSURFUixcbiAgICBBTkFMWVRJQ1NfSU5TVEFOQ0VTX1BST1ZJREVSLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZVZhbHVlOiDJtWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeS5hc3luYyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBfc2NyZWVuVHJhY2tpbmdTZXJ2aWNlOiBTY3JlZW5UcmFja2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgX3VzZXJUcmFja2luZ1NlcnZpY2U6IFVzZXJUcmFja2luZ1NlcnZpY2UsXG4gICkge1xuICAgIHJlZ2lzdGVyVmVyc2lvbignYW5ndWxhcmZpcmUnLCBWRVJTSU9OLmZ1bGwsICdhbmFseXRpY3MnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFuYWx5dGljcyhmbjogKGluamVjdG9yOiBJbmplY3RvcikgPT4gRmlyZWJhc2VBbmFseXRpY3MsIC4uLmRlcHM6IGFueVtdKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmFseXRpY3NNb2R1bGU+IHtcbiAgcmV0dXJuIHtcbiAgICBuZ01vZHVsZTogQW5hbHl0aWNzTW9kdWxlLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgIHByb3ZpZGU6IFBST1ZJREVEX0FOQUxZVElDU19JTlNUQU5DRVMsXG4gICAgICB1c2VGYWN0b3J5OiBhbmFseXRpY3NJbnN0YW5jZUZhY3RvcnkoZm4pLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICBkZXBzOiBbXG4gICAgICAgIE5nWm9uZSxcbiAgICAgICAgSW5qZWN0b3IsXG4gICAgICAgIMm1QW5ndWxhckZpcmVTY2hlZHVsZXJzLFxuICAgICAgICBGaXJlYmFzZUFwcHMsXG4gICAgICAgIC4uLmRlcHMsXG4gICAgICBdXG4gICAgfV1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// DO NOT MODIFY, this file is autogenerated by tools/build.ts
|
|
2
2
|
export * from 'firebase/analytics';
|
|
3
3
|
import { ɵzoneWrap } from '@angular/fire';
|
|
4
|
-
import { getAnalytics as _getAnalytics, initializeAnalytics as _initializeAnalytics,
|
|
4
|
+
import { getAnalytics as _getAnalytics, initializeAnalytics as _initializeAnalytics, logEvent as _logEvent, setAnalyticsCollectionEnabled as _setAnalyticsCollectionEnabled, setCurrentScreen as _setCurrentScreen, settings as _settings, setUserId as _setUserId, setUserProperties as _setUserProperties } from 'firebase/analytics';
|
|
5
|
+
export { isSupported } from './overrides';
|
|
5
6
|
export const getAnalytics = ɵzoneWrap(_getAnalytics, true);
|
|
6
7
|
export const initializeAnalytics = ɵzoneWrap(_initializeAnalytics, true);
|
|
7
|
-
export const isSupported = ɵzoneWrap(_isSupported, true);
|
|
8
8
|
export const logEvent = ɵzoneWrap(_logEvent, true);
|
|
9
9
|
export const setAnalyticsCollectionEnabled = ɵzoneWrap(_setAnalyticsCollectionEnabled, true);
|
|
10
10
|
export const setCurrentScreen = ɵzoneWrap(_setCurrentScreen, true);
|
|
11
11
|
export const settings = ɵzoneWrap(_settings, true);
|
|
12
12
|
export const setUserId = ɵzoneWrap(_setUserId, true);
|
|
13
13
|
export const setUserProperties = ɵzoneWrap(_setUserProperties, true);
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5hbHl0aWNzL2ZpcmViYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUM5RCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUNMLFlBQVksSUFBSSxhQUFhLEVBQzdCLG1CQUFtQixJQUFJLG9CQUFvQixFQUMzQyxRQUFRLElBQUksU0FBUyxFQUNyQiw2QkFBNkIsSUFBSSw4QkFBOEIsRUFDL0QsZ0JBQWdCLElBQUksaUJBQWlCLEVBQ3JDLFFBQVEsSUFBSSxTQUFTLEVBQ3JCLFNBQVMsSUFBSSxVQUFVLEVBQ3ZCLGlCQUFpQixJQUFJLGtCQUFrQixFQUN4QyxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFDTCxXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLFNBQVMsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRE8gTk9UIE1PRElGWSwgdGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQgYnkgdG9vbHMvYnVpbGQudHNcbmV4cG9ydCAqIGZyb20gJ2ZpcmViYXNlL2FuYWx5dGljcyc7XG5pbXBvcnQgeyDJtXpvbmVXcmFwIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZSc7XG5pbXBvcnQge1xuICBnZXRBbmFseXRpY3MgYXMgX2dldEFuYWx5dGljcyxcbiAgaW5pdGlhbGl6ZUFuYWx5dGljcyBhcyBfaW5pdGlhbGl6ZUFuYWx5dGljcyxcbiAgbG9nRXZlbnQgYXMgX2xvZ0V2ZW50LFxuICBzZXRBbmFseXRpY3NDb2xsZWN0aW9uRW5hYmxlZCBhcyBfc2V0QW5hbHl0aWNzQ29sbGVjdGlvbkVuYWJsZWQsXG4gIHNldEN1cnJlbnRTY3JlZW4gYXMgX3NldEN1cnJlbnRTY3JlZW4sXG4gIHNldHRpbmdzIGFzIF9zZXR0aW5ncyxcbiAgc2V0VXNlcklkIGFzIF9zZXRVc2VySWQsXG4gIHNldFVzZXJQcm9wZXJ0aWVzIGFzIF9zZXRVc2VyUHJvcGVydGllc1xufSBmcm9tICdmaXJlYmFzZS9hbmFseXRpY3MnO1xuXG5leHBvcnQge1xuICBpc1N1cHBvcnRlZFxufSBmcm9tICcuL292ZXJyaWRlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRBbmFseXRpY3MgPSDJtXpvbmVXcmFwKF9nZXRBbmFseXRpY3MsIHRydWUpO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVBbmFseXRpY3MgPSDJtXpvbmVXcmFwKF9pbml0aWFsaXplQW5hbHl0aWNzLCB0cnVlKTtcbmV4cG9ydCBjb25zdCBsb2dFdmVudCA9IMm1em9uZVdyYXAoX2xvZ0V2ZW50LCB0cnVlKTtcbmV4cG9ydCBjb25zdCBzZXRBbmFseXRpY3NDb2xsZWN0aW9uRW5hYmxlZCA9IMm1em9uZVdyYXAoX3NldEFuYWx5dGljc0NvbGxlY3Rpb25FbmFibGVkLCB0cnVlKTtcbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50U2NyZWVuID0gybV6b25lV3JhcChfc2V0Q3VycmVudFNjcmVlbiwgdHJ1ZSk7XG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSDJtXpvbmVXcmFwKF9zZXR0aW5ncywgdHJ1ZSk7XG5leHBvcnQgY29uc3Qgc2V0VXNlcklkID0gybV6b25lV3JhcChfc2V0VXNlcklkLCB0cnVlKTtcbmV4cG9ydCBjb25zdCBzZXRVc2VyUHJvcGVydGllcyA9IMm1em9uZVdyYXAoX3NldFVzZXJQcm9wZXJ0aWVzLCB0cnVlKTtcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ɵisAnalyticsSupportedFactory } from '@angular/fire';
|
|
2
|
+
export const isSupported = ɵisAnalyticsSupportedFactory.async;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuYWx5dGljcy9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyDJtWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuXG5leHBvcnQgY29uc3QgaXNTdXBwb3J0ZWQgPSDJtWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeS5hc3luYztcbiJdfQ==
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { Analytics, AnalyticsInstances, analyticInstance$ } from './analytics';
|
|
2
2
|
export { provideAnalytics, AnalyticsModule } from './analytics.module';
|
|
3
3
|
export * from './firebase';
|
|
4
|
-
|
|
4
|
+
export * from './screen-tracking.service';
|
|
5
|
+
export * from './user-tracking.service';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmFseXRpY3MvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBbmFseXRpY3MsIEFuYWx5dGljc0luc3RhbmNlcywgYW5hbHl0aWNJbnN0YW5jZSQgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5leHBvcnQgeyBwcm92aWRlQW5hbHl0aWNzLCBBbmFseXRpY3NNb2R1bGUgfSBmcm9tICcuL2FuYWx5dGljcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9maXJlYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjcmVlbi10cmFja2luZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci10cmFja2luZy5zZXJ2aWNlJztcbiJdfQ==
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { ComponentFactoryResolver, Injectable, NgZone, Optional, Injector } from '@angular/core';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import { distinctUntilChanged, filter, groupBy, map, mergeMap, pairwise, startWith, switchMap } from 'rxjs/operators';
|
|
5
|
+
import { ActivationEnd, Router, ɵEmptyOutletComponent } from '@angular/router';
|
|
6
|
+
import { Title } from '@angular/platform-browser';
|
|
7
|
+
import { VERSION } from '@angular/fire';
|
|
8
|
+
import { registerVersion } from 'firebase/app';
|
|
9
|
+
import { Analytics } from './analytics';
|
|
10
|
+
import { logEvent, isSupported } from './firebase';
|
|
11
|
+
import { UserTrackingService } from './user-tracking.service';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/router";
|
|
14
|
+
import * as i2 from "@angular/platform-browser";
|
|
15
|
+
import * as i3 from "./user-tracking.service";
|
|
16
|
+
const FIREBASE_EVENT_ORIGIN_KEY = 'firebase_event_origin';
|
|
17
|
+
const FIREBASE_PREVIOUS_SCREEN_CLASS_KEY = 'firebase_previous_class';
|
|
18
|
+
const FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY = 'firebase_previous_id';
|
|
19
|
+
const FIREBASE_PREVIOUS_SCREEN_NAME_KEY = 'firebase_previous_screen';
|
|
20
|
+
const FIREBASE_SCREEN_CLASS_KEY = 'firebase_screen_class';
|
|
21
|
+
const FIREBASE_SCREEN_INSTANCE_ID_KEY = 'firebase_screen_id';
|
|
22
|
+
const FIREBASE_SCREEN_NAME_KEY = 'firebase_screen';
|
|
23
|
+
const OUTLET_KEY = 'outlet';
|
|
24
|
+
const PAGE_PATH_KEY = 'page_path';
|
|
25
|
+
const PAGE_TITLE_KEY = 'page_title';
|
|
26
|
+
const SCREEN_CLASS_KEY = 'screen_class';
|
|
27
|
+
const SCREEN_NAME_KEY = 'screen_name';
|
|
28
|
+
const SCREEN_VIEW_EVENT = 'screen_view';
|
|
29
|
+
const EVENT_ORIGIN_AUTO = 'auto';
|
|
30
|
+
const SCREEN_INSTANCE_DELIMITER = '#';
|
|
31
|
+
// this is an INT64 in iOS/Android but use INT32 cause javascript
|
|
32
|
+
let nextScreenInstanceID = Math.floor(Math.random() * (Math.pow(2, 32) - 1)) - Math.pow(2, 31);
|
|
33
|
+
const knownScreenInstanceIDs = {};
|
|
34
|
+
const getScreenInstanceID = (params) => {
|
|
35
|
+
// unique the screen class against the outlet name
|
|
36
|
+
const screenInstanceKey = [
|
|
37
|
+
params[SCREEN_CLASS_KEY],
|
|
38
|
+
params[OUTLET_KEY]
|
|
39
|
+
].join(SCREEN_INSTANCE_DELIMITER);
|
|
40
|
+
if (knownScreenInstanceIDs.hasOwnProperty(screenInstanceKey)) {
|
|
41
|
+
return knownScreenInstanceIDs[screenInstanceKey];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const ret = nextScreenInstanceID++;
|
|
45
|
+
knownScreenInstanceIDs[screenInstanceKey] = ret;
|
|
46
|
+
return ret;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const ɵscreenViewEvent = (router, title, componentFactoryResolver) => {
|
|
50
|
+
const activationEndEvents = router.events.pipe(filter(e => e instanceof ActivationEnd));
|
|
51
|
+
return activationEndEvents.pipe(switchMap(activationEnd => {
|
|
52
|
+
var _a;
|
|
53
|
+
// router parseUrl is having trouble with outlets when they're empty
|
|
54
|
+
// e.g, /asdf/1(bob://sally:asdf), so put another slash in when empty
|
|
55
|
+
const urlTree = router.parseUrl(router.url.replace(/(?:\().+(?:\))/g, a => a.replace('://', ':///')));
|
|
56
|
+
const pagePath = ((_a = urlTree.root.children[activationEnd.snapshot.outlet]) === null || _a === void 0 ? void 0 : _a.toString()) || '';
|
|
57
|
+
const actualSnapshot = router.routerState.root.children.map(it => it).find(it => it.outlet === activationEnd.snapshot.outlet);
|
|
58
|
+
if (!actualSnapshot) {
|
|
59
|
+
return of(null);
|
|
60
|
+
}
|
|
61
|
+
let actualDeep = actualSnapshot;
|
|
62
|
+
while (actualDeep.firstChild) {
|
|
63
|
+
actualDeep = actualDeep.firstChild;
|
|
64
|
+
}
|
|
65
|
+
const screenName = actualDeep.pathFromRoot.map(s => { var _a; return (_a = s.routeConfig) === null || _a === void 0 ? void 0 : _a.path; }).filter(it => it).join('/') || '/';
|
|
66
|
+
const params = {
|
|
67
|
+
[SCREEN_NAME_KEY]: screenName,
|
|
68
|
+
[PAGE_PATH_KEY]: `/${pagePath}`,
|
|
69
|
+
[FIREBASE_EVENT_ORIGIN_KEY]: EVENT_ORIGIN_AUTO,
|
|
70
|
+
[FIREBASE_SCREEN_NAME_KEY]: screenName,
|
|
71
|
+
[OUTLET_KEY]: activationEnd.snapshot.outlet
|
|
72
|
+
};
|
|
73
|
+
if (title) {
|
|
74
|
+
params[PAGE_TITLE_KEY] = title.getTitle();
|
|
75
|
+
}
|
|
76
|
+
let component = actualSnapshot.component;
|
|
77
|
+
if (component) {
|
|
78
|
+
if (component === ɵEmptyOutletComponent) {
|
|
79
|
+
let deepSnapshot = activationEnd.snapshot;
|
|
80
|
+
// TODO when might there be mutple children, different outlets? explore
|
|
81
|
+
while (deepSnapshot.firstChild) {
|
|
82
|
+
deepSnapshot = deepSnapshot.firstChild;
|
|
83
|
+
}
|
|
84
|
+
component = deepSnapshot.component;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
component = activationEnd.snapshot.component;
|
|
89
|
+
}
|
|
90
|
+
if (typeof component === 'string') {
|
|
91
|
+
return of(Object.assign(Object.assign({}, params), { [SCREEN_CLASS_KEY]: component }));
|
|
92
|
+
}
|
|
93
|
+
else if (component) {
|
|
94
|
+
const componentFactory = componentFactoryResolver.resolveComponentFactory(component);
|
|
95
|
+
return of(Object.assign(Object.assign({}, params), { [SCREEN_CLASS_KEY]: componentFactory.selector }));
|
|
96
|
+
}
|
|
97
|
+
// lazy loads cause extra activations, ignore
|
|
98
|
+
return of(null);
|
|
99
|
+
}), filter(it => !!it), map(params => (Object.assign({ [FIREBASE_SCREEN_CLASS_KEY]: params[SCREEN_CLASS_KEY], [FIREBASE_SCREEN_INSTANCE_ID_KEY]: getScreenInstanceID(params) }, params))), groupBy(it => it[OUTLET_KEY]), mergeMap(it => it.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), startWith(undefined), pairwise(), map(([prior, current]) => prior ? Object.assign({ [FIREBASE_PREVIOUS_SCREEN_CLASS_KEY]: prior[SCREEN_CLASS_KEY], [FIREBASE_PREVIOUS_SCREEN_NAME_KEY]: prior[SCREEN_NAME_KEY], [FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY]: prior[FIREBASE_SCREEN_INSTANCE_ID_KEY] }, current) : current))));
|
|
100
|
+
};
|
|
101
|
+
export class ScreenTrackingService {
|
|
102
|
+
constructor(router, title, componentFactoryResolver, zone, userTrackingService, injector) {
|
|
103
|
+
registerVersion('angularfire', VERSION.full, 'screen-tracking');
|
|
104
|
+
// The APP_INITIALIZER that is making isSupported() sync for the sake of convenient DI
|
|
105
|
+
// may not be done when services are initialized. Guard the functionality by first ensuring
|
|
106
|
+
// that the (global) promise has resolved, then get Analytics from the injector.
|
|
107
|
+
isSupported().then(() => {
|
|
108
|
+
const analytics = injector.get(Analytics);
|
|
109
|
+
if (!router || !analytics) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
zone.runOutsideAngular(() => {
|
|
113
|
+
this.disposable = ɵscreenViewEvent(router, title, componentFactoryResolver).pipe(switchMap((params) => __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
if (userTrackingService) {
|
|
115
|
+
yield userTrackingService.initialized;
|
|
116
|
+
}
|
|
117
|
+
return logEvent(analytics, SCREEN_VIEW_EVENT, params);
|
|
118
|
+
}))).subscribe();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
ngOnDestroy() {
|
|
123
|
+
if (this.disposable) {
|
|
124
|
+
this.disposable.unsubscribe();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
ScreenTrackingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: ScreenTrackingService, deps: [{ token: i1.Router, optional: true }, { token: i2.Title, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.NgZone }, { token: i3.UserTrackingService, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
129
|
+
ScreenTrackingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: ScreenTrackingService });
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: ScreenTrackingService, decorators: [{
|
|
131
|
+
type: Injectable
|
|
132
|
+
}], ctorParameters: function () { return [{ type: i1.Router, decorators: [{
|
|
133
|
+
type: Optional
|
|
134
|
+
}] }, { type: i2.Title, decorators: [{
|
|
135
|
+
type: Optional
|
|
136
|
+
}] }, { type: i0.ComponentFactoryResolver }, { type: i0.NgZone }, { type: i3.UserTrackingService, decorators: [{
|
|
137
|
+
type: Optional
|
|
138
|
+
}] }, { type: i0.Injector }]; } });
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLXRyYWNraW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5hbHl0aWNzL3NjcmVlbi10cmFja2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxFQUFFLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFFOUQsTUFBTSx5QkFBeUIsR0FBRyx1QkFBdUIsQ0FBQztBQUMxRCxNQUFNLGtDQUFrQyxHQUFHLHlCQUF5QixDQUFDO0FBQ3JFLE1BQU0sd0NBQXdDLEdBQUcsc0JBQXNCLENBQUM7QUFDeEUsTUFBTSxpQ0FBaUMsR0FBRywwQkFBMEIsQ0FBQztBQUNyRSxNQUFNLHlCQUF5QixHQUFHLHVCQUF1QixDQUFD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QUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDOztrSEFsQ1UscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBTU4sUUFBUTs7MEJBQ1IsUUFBUTs7MEJBR1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0YWJsZSwgTmdab25lLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZ3JvdXBCeSwgbWFwLCBtZXJnZU1hcCwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgUm91dGVyLCDJtUVtcHR5T3V0bGV0Q29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZSc7XG5pbXBvcnQgeyByZWdpc3RlclZlcnNpb24gfSBmcm9tICdmaXJlYmFzZS9hcHAnO1xuXG5pbXBvcnQgeyBBbmFseXRpY3MgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBsb2dFdmVudCwgaXNTdXBwb3J0ZWQgfSBmcm9tICcuL2ZpcmViYXNlJztcbmltcG9ydCB7IFVzZXJUcmFja2luZ1NlcnZpY2UgfSBmcm9tICcuL3VzZXItdHJhY2tpbmcuc2VydmljZSc7XG5cbmNvbnN0IEZJUkVCQVNFX0VWRU5UX09SSUdJTl9LRVkgPSAnZmlyZWJhc2VfZXZlbnRfb3JpZ2luJztcbmNvbnN0IEZJUkVCQVNFX1BSRVZJT1VTX1NDUkVFTl9DTEFTU19LRVkgPSAnZmlyZWJhc2VfcHJldmlvdXNfY2xhc3MnO1xuY29uc3QgRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWSA9ICdmaXJlYmFzZV9wcmV2aW91c19pZCc7XG5jb25zdCBGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fTkFNRV9LRVkgPSAnZmlyZWJhc2VfcHJldmlvdXNfc2NyZWVuJztcbmNvbnN0IEZJUkVCQVNFX1NDUkVFTl9DTEFTU19LRVkgPSAnZmlyZWJhc2Vfc2NyZWVuX2NsYXNzJztcbmNvbnN0IEZJUkVCQVNFX1NDUkVFTl9JTlNUQU5DRV9JRF9LRVkgPSAnZmlyZWJhc2Vfc2NyZWVuX2lkJztcbmNvbnN0IEZJUkVCQVNFX1NDUkVFTl9OQU1FX0tFWSA9ICdmaXJlYmFzZV9zY3JlZW4nO1xuY29uc3QgT1VUTEVUX0tFWSA9ICdvdXRsZXQnO1xuY29uc3QgUEFHRV9QQVRIX0tFWSA9ICdwYWdlX3BhdGgnO1xuY29uc3QgUEFHRV9USVRMRV9LRVkgPSAncGFnZV90aXRsZSc7XG5jb25zdCBTQ1JFRU5fQ0xBU1NfS0VZID0gJ3NjcmVlbl9jbGFzcyc7XG5jb25zdCBTQ1JFRU5fTkFNRV9LRVkgPSAnc2NyZWVuX25hbWUnO1xuY29uc3QgU0NSRUVOX1ZJRVdfRVZFTlQgPSAnc2NyZWVuX3ZpZXcnO1xuY29uc3QgRVZFTlRfT1JJR0lOX0FVVE8gPSAnYXV0byc7XG5jb25zdCBTQ1JFRU5fSU5TVEFOQ0VfREVMSU1JVEVSID0gJyMnO1xuXG4vLyB0aGlzIGlzIGFuIElOVDY0IGluIGlPUy9BbmRyb2lkIGJ1dCB1c2UgSU5UMzIgY2F1c2UgamF2YXNjcmlwdFxubGV0IG5leHRTY3JlZW5JbnN0YW5jZUlEID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDIgKiogMzIgLSAxKSkgLSAyICoqIDMxO1xuXG5jb25zdCBrbm93blNjcmVlbkluc3RhbmNlSURzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG5cbmNvbnN0IGdldFNjcmVlbkluc3RhbmNlSUQgPSAocGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gIC8vIHVuaXF1ZSB0aGUgc2NyZWVuIGNsYXNzIGFnYWluc3QgdGhlIG91dGxldCBuYW1lXG4gIGNvbnN0IHNjcmVlbkluc3RhbmNlS2V5ID0gW1xuICAgIHBhcmFtc1tTQ1JFRU5fQ0xBU1NfS0VZXSxcbiAgICBwYXJhbXNbT1VUTEVUX0tFWV1cbiAgXS5qb2luKFNDUkVFTl9JTlNUQU5DRV9ERUxJTUlURVIpO1xuICBpZiAoa25vd25TY3JlZW5JbnN0YW5jZUlEcy5oYXNPd25Qcm9wZXJ0eShzY3JlZW5JbnN0YW5jZUtleSkpIHtcbiAgICByZXR1cm4ga25vd25TY3JlZW5JbnN0YW5jZUlEc1tzY3JlZW5JbnN0YW5jZUtleV07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmV0ID0gbmV4dFNjcmVlbkluc3RhbmNlSUQrKztcbiAgICBrbm93blNjcmVlbkluc3RhbmNlSURzW3NjcmVlbkluc3RhbmNlS2V5XSA9IHJldDtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgybVzY3JlZW5WaWV3RXZlbnQgPSAoXG4gIHJvdXRlcjogUm91dGVyLFxuICB0aXRsZTogVGl0bGV8bnVsbCxcbiAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4pOiBPYnNlcnZhYmxlPHtcbiAgW1NDUkVFTl9OQU1FX0tFWV06IHN0cmluZyxcbiAgW1BBR0VfUEFUSF9LRVldOiBzdHJpbmcsXG4gIFtGSVJFQkFTRV9FVkVOVF9PUklHSU5fS0VZXTogJ2F1dG8nLFxuICBbRklSRUJBU0VfU0NSRUVOX05BTUVfS0VZXTogc3RyaW5nLFxuICBbT1VUTEVUX0tFWV06IHN0cmluZyxcbiAgW1BBR0VfVElUTEVfS0VZXT86IHN0cmluZyxcbiAgW1NDUkVFTl9DTEFTU19LRVldOiBzdHJpbmcsXG4gIFtGSVJFQkFTRV9TQ1JFRU5fQ0xBU1NfS0VZXTogc3RyaW5nLFxuICBbRklSRUJBU0VfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWV06IG51bWJlcixcbiAgW0ZJUkVCQVNFX1BSRVZJT1VTX1NDUkVFTl9DTEFTU19LRVldOiBzdHJpbmcsXG4gIFtGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fTkFNRV9LRVldOiBzdHJpbmcsXG4gIFtGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fSU5TVEFOQ0VfSURfS0VZXTogbnVtYmVyLFxufT4gPT4ge1xuICBjb25zdCBhY3RpdmF0aW9uRW5kRXZlbnRzID0gcm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcjxBY3RpdmF0aW9uRW5kPihlID0+IGUgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSk7XG4gIHJldHVybiBhY3RpdmF0aW9uRW5kRXZlbnRzLnBpcGUoXG4gICAgc3dpdGNoTWFwPEFjdGl2YXRpb25FbmQsIE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgYW55PnxudWxsPj4oYWN0aXZhdGlvbkVuZCA9PiB7XG4gICAgICAvLyByb3V0ZXIgcGFyc2VVcmwgaXMgaGF2aW5nIHRyb3VibGUgd2l0aCBvdXRsZXRzIHdoZW4gdGhleSdyZSBlbXB0eVxuICAgICAgLy8gZS5nLCAvYXNkZi8xKGJvYjovL3NhbGx5OmFzZGYpLCBzbyBwdXQgYW5vdGhlciBzbGFzaCBpbiB3aGVuIGVtcHR5XG4gICAgICBjb25zdCB1cmxUcmVlID0gcm91dGVyLnBhcnNlVXJsKHJvdXRlci51cmwucmVwbGFjZSgvKD86XFwoKS4rKD86XFwpKS9nLCBhID0+IGEucmVwbGFjZSgnOi8vJywgJzovLy8nKSkpO1xuICAgICAgY29uc3QgcGFnZVBhdGggPSB1cmxUcmVlLnJvb3QuY2hpbGRyZW5bYWN0aXZhdGlvbkVuZC5zbmFwc2hvdC5vdXRsZXRdPy50b1N0cmluZygpIHx8ICcnO1xuICAgICAgY29uc3QgYWN0dWFsU25hcHNob3QgPSByb3V0ZXIucm91dGVyU3RhdGUucm9vdC5jaGlsZHJlbi5tYXAoaXQgPT4gaXQpLmZpbmQoaXQgPT4gaXQub3V0bGV0ID09PSBhY3RpdmF0aW9uRW5kLnNuYXBzaG90Lm91dGxldCk7XG5cbiAgICAgIGlmICghYWN0dWFsU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWN0dWFsRGVlcCA9IGFjdHVhbFNuYXBzaG90O1xuICAgICAgd2hpbGUgKGFjdHVhbERlZXAuZmlyc3RDaGlsZCkge1xuICAgICAgICBhY3R1YWxEZWVwID0gYWN0dWFsRGVlcC5maXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2NyZWVuTmFtZSA9IGFjdHVhbERlZXAucGF0aEZyb21Sb290Lm1hcChzID0+IHMucm91dGVDb25maWc/LnBhdGgpLmZpbHRlcihpdCA9PiBpdCkuam9pbignLycpIHx8ICcvJztcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBbU0NSRUVOX05BTUVfS0VZXTogc2NyZWVuTmFtZSxcbiAgICAgICAgW1BBR0VfUEFUSF9LRVldOiBgLyR7cGFnZVBhdGh9YCxcbiAgICAgICAgW0ZJUkVCQVNFX0VWRU5UX09SSUdJTl9LRVldOiBFVkVOVF9PUklHSU5fQVVUTyxcbiAgICAgICAgW0ZJUkVCQVNFX1NDUkVFTl9OQU1FX0tFWV06IHNjcmVlbk5hbWUsXG4gICAgICAgIFtPVVRMRVRfS0VZXTogYWN0aXZhdGlvbkVuZC5zbmFwc2hvdC5vdXRsZXRcbiAgICAgIH07XG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgcGFyYW1zW1BBR0VfVElUTEVfS0VZXSA9IHRpdGxlLmdldFRpdGxlKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjb21wb25lbnQgPSBhY3R1YWxTbmFwc2hvdC5jb21wb25lbnQ7XG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgPT09IMm1RW1wdHlPdXRsZXRDb21wb25lbnQpIHtcbiAgICAgICAgICBsZXQgZGVlcFNuYXBzaG90ID0gYWN0aXZhdGlvbkVuZC5zbmFwc2hvdDtcbiAgICAgICAgICAvLyBUT0RPIHdoZW4gbWlnaHQgdGhlcmUgYmUgbXV0cGxlIGNoaWxkcmVuLCBkaWZmZXJlbnQgb3V0bGV0cz8gZXhwbG9yZVxuICAgICAgICAgIHdoaWxlIChkZWVwU25hcHNob3QuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgZGVlcFNuYXBzaG90ID0gZGVlcFNuYXBzaG90LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbXBvbmVudCA9IGRlZXBTbmFwc2hvdC5jb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudCA9IGFjdGl2YXRpb25FbmQuc25hcHNob3QuY29tcG9uZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG9mKHsgLi4ucGFyYW1zLCBbU0NSRUVOX0NMQVNTX0tFWV06IGNvbXBvbmVudCB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgcmV0dXJuIG9mKHsgLi4ucGFyYW1zLCBbU0NSRUVOX0NMQVNTX0tFWV06IGNvbXBvbmVudEZhY3Rvcnkuc2VsZWN0b3IgfSk7XG4gICAgICB9XG4gICAgICAvLyBsYXp5IGxvYWRzIGNhdXNlIGV4dHJhIGFjdGl2YXRpb25zLCBpZ25vcmVcbiAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9KSxcbiAgICBmaWx0ZXIoaXQgPT4gISFpdCksXG4gICAgbWFwKHBhcmFtcyA9PiAoe1xuICAgICAgW0ZJUkVCQVNFX1NDUkVFTl9DTEFTU19LRVldOiBwYXJhbXNbU0NSRUVOX0NMQVNTX0tFWV0sXG4gICAgICBbRklSRUJBU0VfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWV06IGdldFNjcmVlbkluc3RhbmNlSUQocGFyYW1zKSxcbiAgICAgIC4uLnBhcmFtc1xuICAgIH0pKSxcbiAgICBncm91cEJ5KGl0ID0+IGl0W09VVExFVF9LRVldKSxcbiAgICBtZXJnZU1hcChpdCA9PiBpdC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSksXG4gICAgICBzdGFydFdpdGg8YW55LCBhbnk+KHVuZGVmaW5lZCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbcHJpb3IsIGN1cnJlbnRdKSA9PlxuICAgICAgICBwcmlvciA/IHtcbiAgICAgICAgICBbRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX0NMQVNTX0tFWV06IHByaW9yW1NDUkVFTl9DTEFTU19LRVldLFxuICAgICAgICAgIFtGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fTkFNRV9LRVldOiBwcmlvcltTQ1JFRU5fTkFNRV9LRVldLFxuICAgICAgICAgIFtGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fSU5TVEFOQ0VfSURfS0VZXTogcHJpb3JbRklSRUJBU0VfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWV0sXG4gICAgICAgICAgLi4uY3VycmVudFxuICAgICAgICB9IDogY3VycmVudFxuICAgICAgKSxcbiAgICApKVxuICApO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNjcmVlblRyYWNraW5nU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBkaXNwb3NhYmxlOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcm91dGVyOiBSb3V0ZXIsXG4gICAgQE9wdGlvbmFsKCkgdGl0bGU6IFRpdGxlLFxuICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSB1c2VyVHJhY2tpbmdTZXJ2aWNlOiBVc2VyVHJhY2tpbmdTZXJ2aWNlLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgKSB7XG4gICAgcmVnaXN0ZXJWZXJzaW9uKCdhbmd1bGFyZmlyZScsIFZFUlNJT04uZnVsbCwgJ3NjcmVlbi10cmFja2luZycpO1xuICAgIC8vIFRoZSBBUFBfSU5JVElBTElaRVIgdGhhdCBpcyBtYWtpbmcgaXNTdXBwb3J0ZWQoKSBzeW5jIGZvciB0aGUgc2FrZSBvZiBjb252ZW5pZW50IERJXG4gICAgLy8gbWF5IG5vdCBiZSBkb25lIHdoZW4gc2VydmljZXMgYXJlIGluaXRpYWxpemVkLiBHdWFyZCB0aGUgZnVuY3Rpb25hbGl0eSBieSBmaXJzdCBlbnN1cmluZ1xuICAgIC8vIHRoYXQgdGhlIChnbG9iYWwpIHByb21pc2UgaGFzIHJlc29sdmVkLCB0aGVuIGdldCBBbmFseXRpY3MgZnJvbSB0aGUgaW5qZWN0b3IuXG4gICAgaXNTdXBwb3J0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGFuYWx5dGljcyA9IGluamVjdG9yLmdldChBbmFseXRpY3MpO1xuICAgICAgaWYgKCFyb3V0ZXIgfHwgIWFuYWx5dGljcykgeyByZXR1cm47IH1cbiAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3Bvc2FibGUgPSDJtXNjcmVlblZpZXdFdmVudChyb3V0ZXIsIHRpdGxlLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIHBhcmFtcyA9PiB7XG4gICAgICAgICAgICBpZiAodXNlclRyYWNraW5nU2VydmljZSkgeyBhd2FpdCB1c2VyVHJhY2tpbmdTZXJ2aWNlLmluaXRpYWxpemVkOyB9XG4gICAgICAgICAgICByZXR1cm4gbG9nRXZlbnQoYW5hbHl0aWNzLCBTQ1JFRU5fVklFV19FVkVOVCwgcGFyYW1zKTtcbiAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5kaXNwb3NhYmxlKSB7XG4gICAgICB0aGlzLmRpc3Bvc2FibGUudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
2
|
+
import { VERSION } from '@angular/fire';
|
|
3
|
+
import { Auth, authState } from '@angular/fire/auth';
|
|
4
|
+
import { registerVersion } from 'firebase/app';
|
|
5
|
+
import { Analytics } from './analytics';
|
|
6
|
+
import { setUserId, isSupported } from './firebase';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/fire/auth";
|
|
9
|
+
export class UserTrackingService {
|
|
10
|
+
constructor(auth, zone, injector) {
|
|
11
|
+
this.disposables = [];
|
|
12
|
+
registerVersion('angularfire', VERSION.full, 'user-tracking');
|
|
13
|
+
let resolveInitialized;
|
|
14
|
+
this.initialized = zone.runOutsideAngular(() => new Promise(resolve => { resolveInitialized = resolve; }));
|
|
15
|
+
// The APP_INITIALIZER that is making isSupported() sync for the sake of convenient DI
|
|
16
|
+
// may not be done when services are initialized. Guard the functionality by first ensuring
|
|
17
|
+
// that the (global) promise has resolved, then get Analytics from the injector.
|
|
18
|
+
isSupported().then(() => {
|
|
19
|
+
const analytics = injector.get(Analytics);
|
|
20
|
+
if (analytics) {
|
|
21
|
+
this.disposables = [
|
|
22
|
+
// TODO add credential tracking back in
|
|
23
|
+
authState(auth).subscribe(user => {
|
|
24
|
+
setUserId(analytics, user === null || user === void 0 ? void 0 : user.uid);
|
|
25
|
+
resolveInitialized();
|
|
26
|
+
}),
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
resolveInitialized();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
ngOnDestroy() {
|
|
35
|
+
this.disposables.forEach(it => it.unsubscribe());
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
UserTrackingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: UserTrackingService, deps: [{ token: i1.Auth }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39
|
+
UserTrackingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: UserTrackingService });
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.3", ngImport: i0, type: UserTrackingService, decorators: [{
|
|
41
|
+
type: Injectable
|
|
42
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i0.NgZone }, { type: i0.Injector }]; } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci10cmFja2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuYWx5dGljcy91c2VyLXRyYWNraW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUdwRCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ0UsSUFBVSxFQUNWLElBQVksRUFDWixRQUFrQjtRQUxaLGdCQUFXLEdBQXdCLEVBQUUsQ0FBQztRQU81QyxlQUFlLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDOUQsSUFBSSxrQkFBOEIsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csc0ZBQXNGO1FBQ3RGLDJGQUEyRjtRQUMzRixnRkFBZ0Y7UUFDaEYsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLEdBQUc7b0JBQ2pCLHVDQUF1QztvQkFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDL0IsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ2hDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQztpQkFDSCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsa0JBQWtCLEVBQUUsQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O2dIQWxDVSxtQkFBbUI7b0hBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICdAYW5ndWxhci9maXJlJztcbmltcG9ydCB7IEF1dGgsIGF1dGhTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQgeyByZWdpc3RlclZlcnNpb24gfSBmcm9tICdmaXJlYmFzZS9hcHAnO1xuXG5pbXBvcnQgeyBBbmFseXRpY3MgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBzZXRVc2VySWQsIGlzU3VwcG9ydGVkIH0gZnJvbSAnLi9maXJlYmFzZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyVHJhY2tpbmdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbGl6ZWQ6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgZGlzcG9zYWJsZXM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhdXRoOiBBdXRoLFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHJlZ2lzdGVyVmVyc2lvbignYW5ndWxhcmZpcmUnLCBWRVJTSU9OLmZ1bGwsICd1c2VyLXRyYWNraW5nJyk7XG4gICAgbGV0IHJlc29sdmVJbml0aWFsaXplZDogKCkgPT4gdm9pZDtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgcmVzb2x2ZUluaXRpYWxpemVkID0gcmVzb2x2ZTsgfSkpO1xuICAgIC8vIFRoZSBBUFBfSU5JVElBTElaRVIgdGhhdCBpcyBtYWtpbmcgaXNTdXBwb3J0ZWQoKSBzeW5jIGZvciB0aGUgc2FrZSBvZiBjb252ZW5pZW50IERJXG4gICAgLy8gbWF5IG5vdCBiZSBkb25lIHdoZW4gc2VydmljZXMgYXJlIGluaXRpYWxpemVkLiBHdWFyZCB0aGUgZnVuY3Rpb25hbGl0eSBieSBmaXJzdCBlbnN1cmluZ1xuICAgIC8vIHRoYXQgdGhlIChnbG9iYWwpIHByb21pc2UgaGFzIHJlc29sdmVkLCB0aGVuIGdldCBBbmFseXRpY3MgZnJvbSB0aGUgaW5qZWN0b3IuXG4gICAgaXNTdXBwb3J0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGFuYWx5dGljcyA9IGluamVjdG9yLmdldChBbmFseXRpY3MpO1xuICAgICAgaWYgKGFuYWx5dGljcykge1xuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzID0gW1xuICAgICAgICAgIC8vIFRPRE8gYWRkIGNyZWRlbnRpYWwgdHJhY2tpbmcgYmFjayBpblxuICAgICAgICAgIGF1dGhTdGF0ZShhdXRoKS5zdWJzY3JpYmUodXNlciA9PiB7XG4gICAgICAgICAgICBzZXRVc2VySWQoYW5hbHl0aWNzLCB1c2VyPy51aWQpO1xuICAgICAgICAgICAgcmVzb2x2ZUluaXRpYWxpemVkKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMuZm9yRWFjaChpdCA9PiBpdC51bnN1YnNjcmliZSgpKTtcbiAgfVxufVxuIl19
|