@reveldigital/player-client 0.0.13 → 0.0.15
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/esm2020/lib/player-client.module.mjs +21 -3
- package/esm2020/lib/player-client.service.mjs +32 -10
- package/fesm2015/reveldigital-player-client.mjs +52 -12
- package/fesm2015/reveldigital-player-client.mjs.map +1 -1
- package/fesm2020/reveldigital-player-client.mjs +51 -12
- package/fesm2020/reveldigital-player-client.mjs.map +1 -1
- package/lib/player-client.module.d.ts +0 -1
- package/lib/player-client.service.d.ts +13 -4
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/reveldigital-player-client.d.ts +0 -1
- package/lib/player-client.module.d.ts.map +0 -1
- package/lib/player-client.service.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
- package/reveldigital-player-client.d.ts.map +0 -1
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
1
|
+
import { APP_INITIALIZER, NgModule } from '@angular/core';
|
|
2
|
+
import { PlayerClientService } from './player-client.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export class PlayerClientModule {
|
|
4
5
|
}
|
|
5
6
|
PlayerClientModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
7
|
PlayerClientModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule });
|
|
7
|
-
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule,
|
|
8
|
+
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, providers: [{
|
|
9
|
+
provide: APP_INITIALIZER,
|
|
10
|
+
useFactory: () => initializeApp,
|
|
11
|
+
deps: [PlayerClientService],
|
|
12
|
+
multi: true
|
|
13
|
+
}], imports: [[]] });
|
|
8
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, decorators: [{
|
|
9
15
|
type: NgModule,
|
|
10
16
|
args: [{
|
|
11
17
|
imports: [],
|
|
18
|
+
providers: [{
|
|
19
|
+
provide: APP_INITIALIZER,
|
|
20
|
+
useFactory: () => initializeApp,
|
|
21
|
+
deps: [PlayerClientService],
|
|
22
|
+
multi: true
|
|
23
|
+
}]
|
|
12
24
|
}]
|
|
13
25
|
}] });
|
|
14
|
-
|
|
26
|
+
function initializeApp() {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
PlayerClientService.init({});
|
|
29
|
+
resolve(true);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXZlbGRpZ2l0YWwvcGxheWVyLWNsaWVudC9zcmMvbGliL3BsYXllci1jbGllbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWE5RCxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0I7aUhBQWxCLGtCQUFrQixhQVBsQixDQUFDO1lBQ1YsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWE7WUFDL0IsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDM0IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLFlBUE8sRUFDUjs0RkFRVSxrQkFBa0I7a0JBVjlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQ1I7b0JBQ0QsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhOzRCQUMvQixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs0QkFDM0IsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztpQkFDSDs7QUFHRCxTQUFTLGFBQWE7SUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXllckNsaWVudFNlcnZpY2UgfSBmcm9tICcuL3BsYXllci1jbGllbnQuc2VydmljZSc7XG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICBdLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGluaXRpYWxpemVBcHAsXG4gICAgZGVwczogW1BsYXllckNsaWVudFNlcnZpY2VdLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudE1vZHVsZSB7IH1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcCgpOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIFBsYXllckNsaWVudFNlcnZpY2UuaW5pdCh7fSk7XG4gICAgcmVzb2x2ZSh0cnVlKTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,26 +1,50 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, fromEvent, Subject } from 'rxjs';
|
|
3
|
+
import { map, share, tap } from 'rxjs/operators';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export class PlayerClientService {
|
|
5
|
-
constructor() {
|
|
6
|
+
constructor(zone) {
|
|
6
7
|
this.onCommand$ = new Subject();
|
|
8
|
+
this.onReady$ = new BehaviorSubject(false);
|
|
7
9
|
this.onStart$ = new Subject();
|
|
8
10
|
this.onStop$ = new Subject();
|
|
11
|
+
this.onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(share(), tap(this.onStart$));
|
|
12
|
+
this.onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(share(), tap(this.onStop$));
|
|
13
|
+
this.onCommandEvt$ = fromEvent(document, 'RevelDigital.Command').pipe(map((e) => { return { name: e.detail.name, arg: e.detail.arg }; }), share(), tap(this.onCommand$));
|
|
9
14
|
let self = this;
|
|
10
15
|
window.RevelDigital = {
|
|
11
16
|
Controller: {
|
|
12
17
|
onCommand: function (name, arg) {
|
|
13
|
-
|
|
18
|
+
zone.run(() => {
|
|
19
|
+
self.onCommand$.next({ name: name, arg: arg });
|
|
20
|
+
});
|
|
14
21
|
},
|
|
15
22
|
onStart: function () {
|
|
16
|
-
|
|
23
|
+
zone.run(() => {
|
|
24
|
+
self.onStart$.next();
|
|
25
|
+
});
|
|
17
26
|
},
|
|
18
27
|
onStop: function () {
|
|
19
|
-
|
|
28
|
+
zone.run(() => {
|
|
29
|
+
self.onStop$.next();
|
|
30
|
+
});
|
|
20
31
|
}
|
|
21
32
|
}
|
|
22
33
|
};
|
|
34
|
+
this.onStartSub = this.onStartEvt$.subscribe(() => { });
|
|
35
|
+
this.onStopSub = this.onStopEvt$.subscribe(() => { });
|
|
36
|
+
this.onCommandSub = this.onCommandEvt$.subscribe(() => { });
|
|
23
37
|
this.clientPromise = null;
|
|
38
|
+
this.onReady$.next(true);
|
|
39
|
+
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
this.onStartSub?.unsubscribe();
|
|
42
|
+
this.onStopSub?.unsubscribe();
|
|
43
|
+
this.onCommandSub?.unsubscribe();
|
|
44
|
+
this.onReady$.next(false);
|
|
45
|
+
}
|
|
46
|
+
static init(data) {
|
|
47
|
+
console.log("init()");
|
|
24
48
|
}
|
|
25
49
|
callback(...args) {
|
|
26
50
|
this.getClient().then((client) => {
|
|
@@ -120,8 +144,6 @@ export class PlayerClientService {
|
|
|
120
144
|
// ---
|
|
121
145
|
// PRIVATE METHODS.
|
|
122
146
|
// ---
|
|
123
|
-
// I return a Promise that resolves with a Tracker API (which may be the 3rd-party
|
|
124
|
-
// library or a mock API representation).
|
|
125
147
|
getClient() {
|
|
126
148
|
if (this.clientPromise) {
|
|
127
149
|
return (this.clientPromise);
|
|
@@ -155,14 +177,14 @@ export class PlayerClientService {
|
|
|
155
177
|
return (this.clientPromise);
|
|
156
178
|
}
|
|
157
179
|
}
|
|
158
|
-
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
180
|
+
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
159
181
|
PlayerClientService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, providedIn: 'root' });
|
|
160
182
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, decorators: [{
|
|
161
183
|
type: Injectable,
|
|
162
184
|
args: [{
|
|
163
185
|
providedIn: 'root'
|
|
164
186
|
}]
|
|
165
|
-
}], ctorParameters: function () { return []; } });
|
|
187
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
166
188
|
// ----------------------------------------------------------------------------------- //
|
|
167
189
|
// ----------------------------------------------------------------------------------- //
|
|
168
190
|
// I provide a mock API for the 3rd-party script. This just allows the consuming code to
|
|
@@ -215,4 +237,4 @@ class NoopClient {
|
|
|
215
237
|
return Promise.resolve('{}');
|
|
216
238
|
}
|
|
217
239
|
}
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQXNEL0IsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QjtRQUpPLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNmLE1BQWMsQ0FBQyxZQUFZLEdBQUc7WUFDN0IsVUFBVSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxVQUFVLElBQVksRUFBRSxHQUFXO29CQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2pELENBQUM7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLENBQUM7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7YUFDRjtTQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU0sUUFBUSxDQUFDLEdBQUcsSUFBVztRQUU1QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNuQixLQUFLLENBQUM7b0JBQ0osTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVc7UUFFcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBRWhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRDLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUI7UUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QjtRQUVsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxPQUFPLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUUxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxPQUFPLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUUxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQUMsVUFBb0IsRUFBRSxJQUFZLEVBQUUsR0FBVztRQUV0RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQWlCLEVBQUUsVUFBNEI7UUFFMUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FB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O0lBRU0sZUFBZSxDQUFDLEVBQVc7UUFFaEMsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWTtRQUV2QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBRXhCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxyXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2VcclxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3NcclxuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgdmFyIENsaWVudDogQ2xpZW50O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudCB7XHJcblxyXG4gIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz47XHJcblxyXG4gIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPjtcclxuXHJcbiAgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuICBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFdmVudFByb3BlcnRpZXMge1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYXJnOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGNsaWVudFByb21pc2U6IFByb21pc2U8Q2xpZW50PiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBvbkNvbW1hbmQkID0gbmV3IFN1YmplY3Q8Q29tbWFuZD4oKTtcclxuICBwdWJsaWMgb25TdGFydCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBvblN0b3AkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlJldmVsRGlnaXRhbCA9IHtcclxuICAgICAgQ29udHJvbGxlcjoge1xyXG4gICAgICAgIG9uQ29tbWFuZDogZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcclxuICAgICAgICAgIHNlbGYub25Db21tYW5kJC5uZXh0KHsgbmFtZTogbmFtZSwgYXJnOiBhcmcgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvblN0YXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBzZWxmLm9uU3RhcnQkLm5leHQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uU3RvcDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBzZWxmLm9uU3RvcCQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsbGJhY2soLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG5cclxuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKGFyZ3NbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKGFyZ3NbMV0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKGFyZ3NbMl0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKGFyZ3NbM10pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKGFyZ3NbNF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICBpZiAoZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZShkYXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZU5hbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lSUQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXRMYW5ndWFnZUNvZGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlS2V5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC5zZW5kQ29tbWFuZChuYW1lLCBhcmcpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC50aW1lRXZlbnQoZXZlbnROYW1lKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xpZW50Lm5ld0V2ZW50U2Vzc2lvbihpZCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldFJldmVsUm9vdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENvbW1hbmRNYXAoKTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGNsaWVudC5nZXRDb21tYW5kTWFwKCkpO1xyXG5cclxuICAgIC8vIGxldCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG5cclxuICAgIC8vIGxldCBvYmogPSBKU09OLnBhcnNlKGF3YWl0IGNsaWVudC5nZXRDb21tYW5kTWFwKCkpO1xyXG4gICAgLy8gZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgLy8gICBtYXAuc2V0KGtleSwgb2JqW2tleV0pO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG1hcDtcclxuICB9XHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIFBSSVZBVEUgTUVUSE9EUy5cclxuICAvLyAtLS1cclxuXHJcbiAgLy8gSSByZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIFRyYWNrZXIgQVBJICh3aGljaCBtYXkgYmUgdGhlIDNyZC1wYXJ0eVxyXG4gIC8vIGxpYnJhcnkgb3IgYSBtb2NrIEFQSSByZXByZXNlbnRhdGlvbikuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUHJvbWlzZTxDbGllbnQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5jbGllbnRQcm9taXNlKSB7XHJcblxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5DbGllbnQpIHtcclxuXHJcbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5DbGllbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBIFwiY29tcGxldGVcIiBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIFwibG9hZFwiIGV2ZW50IGhhcyBiZWVuIGZpcmVkIG9uIHRoZVxyXG4gICAgLy8gd2luZG93OyBhbmQsIHRoYXQgYWxsIHN1Yi1yZXNvdXJjZXMgc3VjaCBhcyBTY3JpcHRzLCBJbWFnZXMsIGFuZCBGcmFtZXMgaGF2ZVxyXG4gICAgLy8gYmVlbiBsb2FkZWQuXHJcbiAgICBpZiAod2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xyXG5cclxuICAgICAgLy8gSWYgdGhpcyBldmVudCBoYXMgZmlyZWQgQU5EIHRoZSAzcmQtcGFydHkgc2NyaXB0IGlzbid0IGF2YWlsYWJsZSAoc2VlIElGLVxyXG4gICAgICAvLyBjb25kaXRpb24gQkVGT1JFIHRoaXMgb25lKSwgaXQgbWVhbnMgdGhhdCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBlaXRoZXJcclxuICAgICAgLy8gZmFpbGVkIG9uIHRoZSBuZXR3b3JrIG9yIHdhcyBCTE9DS0VEIGJ5IGFuIGFkLWJsb2NrZXIuIEFzIHN1Y2gsIHdlIGhhdmUgdG9cclxuICAgICAgLy8gZmFsbC1iYWNrIHRvIHVzaW5nIGEgbW9jayBBUEkuXHJcbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG5ldyBOb29wQ2xpZW50KCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBU1NFUlQ6IElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIHRoZSBkb2N1bWVudCBoYXMgbm90IGNvbXBsZXRlZCBsb2FkaW5nIChidXQgaXRcclxuICAgIC8vIG1heSBiZSBpbiBhbiBcImludGVyYWN0aXZlXCIgc3RhdGUgd2hpY2ggaXMgd2hlbiBJIGJlbGlldmUgdGhhdCB0aGUgQW5ndWxhciBhcHBcclxuICAgIC8vIGdldHMgYm9vdHN0cmFwcGVkKS4gQXMgc3VjaCwgd2UgbmVlZCBiaW5kIHRvIHRoZSBMT0FEIGV2ZW50IHRvIHdhaXQgZm9yIG91clxyXG4gICAgLy8gdGhpcmQtcGFydHkgc2NyaXB0cyB0byBsb2FkIChvciBmYWlsIHRvIGxvYWQsIG9yIGJlIGJsb2NrZWQpLlxyXG4gICAgdGhpcy5jbGllbnRQcm9taXNlID0gbmV3IFByb21pc2U8Q2xpZW50PihcclxuICAgICAgKHJlc29sdmUpID0+IHtcclxuXHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICBcImxvYWRcIixcclxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0xvYWQoKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgM3JkLXBhcnR5IGxpYnJhcnkgaXMgZWl0aGVyIGF2YWlsYWJsZSBvclxyXG4gICAgICAgICAgICAvLyBpdCdzIG5vdCAtIHRoZXJlJ3Mgbm8gZnVydGhlciBsb2FkaW5nIHRvIGRvLiBJZiBpdCdzIG5vdFxyXG4gICAgICAgICAgICAvLyBwcmVzZW50IG9uIHRoZSBnbG9iYWwgc2NvcGUsIHdlJ3JlIGdvaW5nIHRvIGZhbGwtYmFjayB0byB1c2luZ1xyXG4gICAgICAgICAgICAvLyBhIG1vY2sgQVBJLlxyXG4gICAgICAgICAgICByZXNvbHZlKHdpbmRvdy5DbGllbnQgfHwgbmV3IE5vb3BDbGllbnQoKSk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG4vLyBJIHByb3ZpZGUgYSBtb2NrIEFQSSBmb3IgdGhlIDNyZC1wYXJ0eSBzY3JpcHQuIFRoaXMganVzdCBhbGxvd3MgdGhlIGNvbnN1bWluZyBjb2RlIHRvXHJcbi8vIGFjdCBhcyB0aG91Z2ggdGhlIGxpYnJhcnkgaXMgYXZhaWxhYmxlIGV2ZW4gaWYgaXQgZmFpbGVkIHRvIGxvYWQgKGV4YW1wbGUsIGl0IHdhc1xyXG4vLyBibG9ja2VkIGJ5IGFuIGFkLWJsb2NrZXIpLlxyXG5jbGFzcyBOb29wQ2xpZW50IGltcGxlbWVudHMgQ2xpZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgY29uc29sZS53YXJuKFwiQ2xpZW50IEFQSSBub3QgYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gbW9jayBBUEkuXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lSUQoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRMYW5ndWFnZUNvZGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKSB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENvbW1hbmRNYXAoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCd7fScpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFzRGpELE1BQU0sT0FBTyxtQkFBbUI7SUFnQzlCLFlBQVksSUFBWTtRQTVCakIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBU3ZCLGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FDbEUsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDbkIsQ0FBQztRQUVNLGVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUNoRSxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNsQixDQUFDO1FBRU0sa0JBQWEsR0FBRyxTQUFTLENBQVUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJ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LENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUUxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQUMsVUFBb0IsRUFBRSxJQUFZLEVBQUUsR0FBVztRQUV0RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQWlCLEVBQUUsVUFBNEI7UUFFMUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTSxTQUFTLENBQUMsU0FBaUI7UUFFaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0sZUFBZSxDQUFDLEVBQVc7UUFFaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLElBQUksRUFBRSxLQUFLLFNBQVMs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QUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCO1FBRWxDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWU7UUFFMUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWTtRQUV2QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUUxQyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFVBQW9CLEVBQUUsSUFBWSxFQUFFLEdBQVc7UUFFdEUsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBaUIsRUFBRSxVQUFtQjtRQUVqRCxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxTQUFpQjtRQUVoQyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxFQUFXO1FBRWhDLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFFdkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUV4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxyXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2VcclxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3NcclxuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgdmFyIENsaWVudDogQ2xpZW50O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudCB7XHJcblxyXG4gIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz47XHJcblxyXG4gIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPjtcclxuXHJcbiAgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuICBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFdmVudFByb3BlcnRpZXMge1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYXJnOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIGNsaWVudFByb21pc2U6IFByb21pc2U8Q2xpZW50PiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBvbkNvbW1hbmQkID0gbmV3IFN1YmplY3Q8Q29tbWFuZD4oKTtcclxuICBwdWJsaWMgb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwdWJsaWMgb25TdGFydCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBvblN0b3AkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLy9cclxuICAvLyBUd28gbWV0aG9kcyBhdmFpbGFibGUgZm9yIGNhbGxpbmcgaW50byB0aGUgbGlicmFyeTpcclxuICAvL1xyXG4gIC8vIDEpIFVzaW5nIGRpc3BhdGNoRXZlbnQoKSB3aXRoIHRoZSBmb2xsb3dpbmcgY3VzdG9tIGV2ZW50c1xyXG4gIC8vIDIpIFVzaW5nIHRoZSB3aW5kb3cgc2NvcGVkIFJldmVsRGlnaXRhbCBvYmplY3QgYXMgZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0b3JcclxuICAvL1xyXG4gIHByaXZhdGUgb25TdGFydFN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgb25TdGFydEV2dCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdSZXZlbERpZ2l0YWwuU3RhcnQnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RhcnQkKVxyXG4gICk7XHJcbiAgcHJpdmF0ZSBvblN0b3BTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIG9uU3RvcEV2dCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdSZXZlbERpZ2l0YWwuU3RvcCcpLnBpcGUoXHJcbiAgICBzaGFyZSgpLFxyXG4gICAgdGFwKHRoaXMub25TdG9wJClcclxuICApO1xyXG4gIHByaXZhdGUgb25Db21tYW5kU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBvbkNvbW1hbmRFdnQkID0gZnJvbUV2ZW50PENvbW1hbmQ+KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLkNvbW1hbmQnKS5waXBlKFxyXG4gICAgbWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZS5kZXRhaWwubmFtZSwgYXJnOiBlLmRldGFpbC5hcmcgfSBhcyBDb21tYW5kIH0pLFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uQ29tbWFuZCQpXHJcbiAgKTtcclxuXHJcbiAgY29uc3RydWN0b3Ioem9uZTogTmdab25lKSB7XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlJldmVsRGlnaXRhbCA9IHtcclxuICAgICAgQ29udHJvbGxlcjoge1xyXG4gICAgICAgIG9uQ29tbWFuZDogZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcclxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5vbkNvbW1hbmQkLm5leHQoeyBuYW1lOiBuYW1lLCBhcmc6IGFyZyB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25TdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RhcnQkLm5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25TdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYub25TdG9wJC5uZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uU3RhcnRTdWIgPSB0aGlzLm9uU3RhcnRFdnQkLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG4gICAgdGhpcy5vblN0b3BTdWIgPSB0aGlzLm9uU3RvcEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgICB0aGlzLm9uQ29tbWFuZFN1YiA9IHRoaXMub25Db21tYW5kRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcclxuXHJcbiAgICB0aGlzLmNsaWVudFByb21pc2UgPSBudWxsO1xyXG5cclxuICAgIHRoaXMub25SZWFkeSQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMub25TdGFydFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMub25TdG9wU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5vbkNvbW1hbmRTdWI/LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImluaXQoKVwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcblxyXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIGlmIChkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKGRhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lSUQoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVJRCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lT2Zmc2V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXMsIG5hbWUsIGFyZyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IEV2ZW50UHJvcGVydGllcyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC50cmFjayhldmVudE5hbWUsIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnRpbWVFdmVudChldmVudE5hbWUpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XHJcblxyXG4gICAgLy8gbGV0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcblxyXG4gICAgLy8gbGV0IG9iaiA9IEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XHJcbiAgICAvLyBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAvLyAgIG1hcC5zZXQoa2V5LCBvYmpba2V5XSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gbWFwO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gUFJJVkFURSBNRVRIT0RTLlxyXG4gIC8vIC0tLVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBQcm9taXNlPENsaWVudD4ge1xyXG5cclxuICAgIGlmICh0aGlzLmNsaWVudFByb21pc2UpIHtcclxuXHJcbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkNsaWVudCkge1xyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUod2luZG93LkNsaWVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEEgXCJjb21wbGV0ZVwiIHN0YXR1cyBpbmRpY2F0ZXMgdGhhdCB0aGUgXCJsb2FkXCIgZXZlbnQgaGFzIGJlZW4gZmlyZWQgb24gdGhlXHJcbiAgICAvLyB3aW5kb3c7IGFuZCwgdGhhdCBhbGwgc3ViLXJlc291cmNlcyBzdWNoIGFzIFNjcmlwdHMsIEltYWdlcywgYW5kIEZyYW1lcyBoYXZlXHJcbiAgICAvLyBiZWVuIGxvYWRlZC5cclxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XHJcblxyXG4gICAgICAvLyBJZiB0aGlzIGV2ZW50IGhhcyBmaXJlZCBBTkQgdGhlIDNyZC1wYXJ0eSBzY3JpcHQgaXNuJ3QgYXZhaWxhYmxlIChzZWUgSUYtXHJcbiAgICAgIC8vIGNvbmRpdGlvbiBCRUZPUkUgdGhpcyBvbmUpLCBpdCBtZWFucyB0aGF0IHRoZSAzcmQtcGFydHkgc2NyaXB0IGVpdGhlclxyXG4gICAgICAvLyBmYWlsZWQgb24gdGhlIG5ldHdvcmsgb3Igd2FzIEJMT0NLRUQgYnkgYW4gYWQtYmxvY2tlci4gQXMgc3VjaCwgd2UgaGF2ZSB0b1xyXG4gICAgICAvLyBmYWxsLWJhY2sgdG8gdXNpbmcgYSBtb2NrIEFQSS5cclxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobmV3IE5vb3BDbGllbnQoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFTU0VSVDogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgdGhlIGRvY3VtZW50IGhhcyBub3QgY29tcGxldGVkIGxvYWRpbmcgKGJ1dCBpdFxyXG4gICAgLy8gbWF5IGJlIGluIGFuIFwiaW50ZXJhY3RpdmVcIiBzdGF0ZSB3aGljaCBpcyB3aGVuIEkgYmVsaWV2ZSB0aGF0IHRoZSBBbmd1bGFyIGFwcFxyXG4gICAgLy8gZ2V0cyBib290c3RyYXBwZWQpLiBBcyBzdWNoLCB3ZSBuZWVkIGJpbmQgdG8gdGhlIExPQUQgZXZlbnQgdG8gd2FpdCBmb3Igb3VyXHJcbiAgICAvLyB0aGlyZC1wYXJ0eSBzY3JpcHRzIHRvIGxvYWQgKG9yIGZhaWwgdG8gbG9hZCwgb3IgYmUgYmxvY2tlZCkuXHJcbiAgICB0aGlzLmNsaWVudFByb21pc2UgPSBuZXcgUHJvbWlzZTxDbGllbnQ+KFxyXG4gICAgICAocmVzb2x2ZSkgPT4ge1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgIFwibG9hZFwiLFxyXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93TG9hZCgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSAzcmQtcGFydHkgbGlicmFyeSBpcyBlaXRoZXIgYXZhaWxhYmxlIG9yXHJcbiAgICAgICAgICAgIC8vIGl0J3Mgbm90IC0gdGhlcmUncyBubyBmdXJ0aGVyIGxvYWRpbmcgdG8gZG8uIElmIGl0J3Mgbm90XHJcbiAgICAgICAgICAgIC8vIHByZXNlbnQgb24gdGhlIGdsb2JhbCBzY29wZSwgd2UncmUgZ29pbmcgdG8gZmFsbC1iYWNrIHRvIHVzaW5nXHJcbiAgICAgICAgICAgIC8vIGEgbW9jayBBUEkuXHJcbiAgICAgICAgICAgIHJlc29sdmUod2luZG93LkNsaWVudCB8fCBuZXcgTm9vcENsaWVudCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuLy8gSSBwcm92aWRlIGEgbW9jayBBUEkgZm9yIHRoZSAzcmQtcGFydHkgc2NyaXB0LiBUaGlzIGp1c3QgYWxsb3dzIHRoZSBjb25zdW1pbmcgY29kZSB0b1xyXG4vLyBhY3QgYXMgdGhvdWdoIHRoZSBsaWJyYXJ5IGlzIGF2YWlsYWJsZSBldmVuIGlmIGl0IGZhaWxlZCB0byBsb2FkIChleGFtcGxlLCBpdCB3YXNcclxuLy8gYmxvY2tlZCBieSBhbiBhZC1ibG9ja2VyKS5cclxuY2xhc3MgTm9vcENsaWVudCBpbXBsZW1lbnRzIENsaWVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIGNvbnNvbGUud2FybihcIkNsaWVudCBBUEkgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIG1vY2sgQVBJLlwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgne30nKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,28 +1,53 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
3
|
+
import { Injectable, APP_INITIALIZER, NgModule } from '@angular/core';
|
|
4
|
+
import { Subject, BehaviorSubject, fromEvent } from 'rxjs';
|
|
5
|
+
import { share, tap, map } from 'rxjs/operators';
|
|
5
6
|
|
|
6
7
|
class PlayerClientService {
|
|
7
|
-
constructor() {
|
|
8
|
+
constructor(zone) {
|
|
8
9
|
this.onCommand$ = new Subject();
|
|
10
|
+
this.onReady$ = new BehaviorSubject(false);
|
|
9
11
|
this.onStart$ = new Subject();
|
|
10
12
|
this.onStop$ = new Subject();
|
|
13
|
+
this.onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(share(), tap(this.onStart$));
|
|
14
|
+
this.onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(share(), tap(this.onStop$));
|
|
15
|
+
this.onCommandEvt$ = fromEvent(document, 'RevelDigital.Command').pipe(map((e) => { return { name: e.detail.name, arg: e.detail.arg }; }), share(), tap(this.onCommand$));
|
|
11
16
|
let self = this;
|
|
12
17
|
window.RevelDigital = {
|
|
13
18
|
Controller: {
|
|
14
19
|
onCommand: function (name, arg) {
|
|
15
|
-
|
|
20
|
+
zone.run(() => {
|
|
21
|
+
self.onCommand$.next({ name: name, arg: arg });
|
|
22
|
+
});
|
|
16
23
|
},
|
|
17
24
|
onStart: function () {
|
|
18
|
-
|
|
25
|
+
zone.run(() => {
|
|
26
|
+
self.onStart$.next();
|
|
27
|
+
});
|
|
19
28
|
},
|
|
20
29
|
onStop: function () {
|
|
21
|
-
|
|
30
|
+
zone.run(() => {
|
|
31
|
+
self.onStop$.next();
|
|
32
|
+
});
|
|
22
33
|
}
|
|
23
34
|
}
|
|
24
35
|
};
|
|
36
|
+
this.onStartSub = this.onStartEvt$.subscribe(() => { });
|
|
37
|
+
this.onStopSub = this.onStopEvt$.subscribe(() => { });
|
|
38
|
+
this.onCommandSub = this.onCommandEvt$.subscribe(() => { });
|
|
25
39
|
this.clientPromise = null;
|
|
40
|
+
this.onReady$.next(true);
|
|
41
|
+
}
|
|
42
|
+
ngOnDestroy() {
|
|
43
|
+
var _a, _b, _c;
|
|
44
|
+
(_a = this.onStartSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
45
|
+
(_b = this.onStopSub) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
46
|
+
(_c = this.onCommandSub) === null || _c === void 0 ? void 0 : _c.unsubscribe();
|
|
47
|
+
this.onReady$.next(false);
|
|
48
|
+
}
|
|
49
|
+
static init(data) {
|
|
50
|
+
console.log("init()");
|
|
26
51
|
}
|
|
27
52
|
callback(...args) {
|
|
28
53
|
this.getClient().then((client) => {
|
|
@@ -138,8 +163,6 @@ class PlayerClientService {
|
|
|
138
163
|
// ---
|
|
139
164
|
// PRIVATE METHODS.
|
|
140
165
|
// ---
|
|
141
|
-
// I return a Promise that resolves with a Tracker API (which may be the 3rd-party
|
|
142
|
-
// library or a mock API representation).
|
|
143
166
|
getClient() {
|
|
144
167
|
if (this.clientPromise) {
|
|
145
168
|
return (this.clientPromise);
|
|
@@ -173,14 +196,14 @@ class PlayerClientService {
|
|
|
173
196
|
return (this.clientPromise);
|
|
174
197
|
}
|
|
175
198
|
}
|
|
176
|
-
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
199
|
+
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
177
200
|
PlayerClientService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, providedIn: 'root' });
|
|
178
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, decorators: [{
|
|
179
202
|
type: Injectable,
|
|
180
203
|
args: [{
|
|
181
204
|
providedIn: 'root'
|
|
182
205
|
}]
|
|
183
|
-
}], ctorParameters: function () { return []; } });
|
|
206
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
184
207
|
// ----------------------------------------------------------------------------------- //
|
|
185
208
|
// ----------------------------------------------------------------------------------- //
|
|
186
209
|
// I provide a mock API for the 3rd-party script. This just allows the consuming code to
|
|
@@ -252,13 +275,30 @@ class PlayerClientModule {
|
|
|
252
275
|
}
|
|
253
276
|
PlayerClientModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
254
277
|
PlayerClientModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule });
|
|
255
|
-
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule,
|
|
278
|
+
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, providers: [{
|
|
279
|
+
provide: APP_INITIALIZER,
|
|
280
|
+
useFactory: () => initializeApp,
|
|
281
|
+
deps: [PlayerClientService],
|
|
282
|
+
multi: true
|
|
283
|
+
}], imports: [[]] });
|
|
256
284
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, decorators: [{
|
|
257
285
|
type: NgModule,
|
|
258
286
|
args: [{
|
|
259
287
|
imports: [],
|
|
288
|
+
providers: [{
|
|
289
|
+
provide: APP_INITIALIZER,
|
|
290
|
+
useFactory: () => initializeApp,
|
|
291
|
+
deps: [PlayerClientService],
|
|
292
|
+
multi: true
|
|
293
|
+
}]
|
|
260
294
|
}]
|
|
261
|
-
}] });
|
|
295
|
+
}] });
|
|
296
|
+
function initializeApp() {
|
|
297
|
+
return new Promise((resolve, reject) => {
|
|
298
|
+
PlayerClientService.init({});
|
|
299
|
+
resolve(true);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
262
302
|
|
|
263
303
|
/*
|
|
264
304
|
* Public API Surface of player-client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\ndeclare global {\r\n var Client: Client;\r\n}\r\n\r\nexport interface Client {\r\n\r\n callback(...args: any[]): void;\r\n\r\n getDeviceTime(date?: Date): Promise<string>;\r\n\r\n getDeviceTimeZoneName(): Promise<string>;\r\n\r\n getDeviceTimeZoneID(): Promise<string>;\r\n\r\n getDeviceTimeZoneOffset(): Promise<number>;\r\n\r\n getLanguageCode(): Promise<string>;\r\n\r\n getDeviceKey(): Promise<string>;\r\n\r\n sendCommand(name: string, arg: string): void;\r\n\r\n sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void;\r\n\r\n track(eventName: string, properties?: string): void;\r\n\r\n timeEvent(eventName: string): void;\r\n\r\n newEventSession(id?: string): void;\r\n\r\n getRevelRoot(): Promise<string>;\r\n\r\n getCommandMap(): Promise<string>;\r\n}\r\n\r\nexport interface EventProperties {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Command {\r\n name: string;\r\n arg: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService {\r\n\r\n private clientPromise: Promise<Client> | null;\r\n\r\n public onCommand$ = new Subject<Command>();\r\n public onStart$ = new Subject();\r\n public onStop$ = new Subject();\r\n\r\n constructor() {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n },\r\n onStart: function () {\r\n self.onStart$.next();\r\n },\r\n onStop: function() {\r\n self.onStop$.next();\r\n }\r\n }\r\n }\r\n\r\n this.clientPromise = null;\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n public track(eventName: string, properties?: EventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n\r\n // let map = new Map<string, any>();\r\n\r\n // let obj = JSON.parse(await client.getCommandMap());\r\n // for (let key in obj) {\r\n // map.set(key, obj[key]);\r\n // }\r\n // return map;\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n\r\n // I return a Promise that resolves with a Tracker API (which may be the 3rd-party\r\n // library or a mock API representation).\r\n private getClient(): Promise<Client> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<Client>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\nclass NoopClient implements Client {\r\n\r\n constructor() {\r\n\r\n console.warn(\"Client API not available, falling back to mock API.\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\n\n\n@NgModule({\n imports: [\n ],\n})\nexport class PlayerClientModule { }\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\ndeclare global {\r\n var Client: Client;\r\n}\r\n\r\nexport interface Client {\r\n\r\n callback(...args: any[]): void;\r\n\r\n getDeviceTime(date?: Date): Promise<string>;\r\n\r\n getDeviceTimeZoneName(): Promise<string>;\r\n\r\n getDeviceTimeZoneID(): Promise<string>;\r\n\r\n getDeviceTimeZoneOffset(): Promise<number>;\r\n\r\n getLanguageCode(): Promise<string>;\r\n\r\n getDeviceKey(): Promise<string>;\r\n\r\n sendCommand(name: string, arg: string): void;\r\n\r\n sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void;\r\n\r\n track(eventName: string, properties?: string): void;\r\n\r\n timeEvent(eventName: string): void;\r\n\r\n newEventSession(id?: string): void;\r\n\r\n getRevelRoot(): Promise<string>;\r\n\r\n getCommandMap(): Promise<string>;\r\n}\r\n\r\nexport interface EventProperties {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Command {\r\n name: string;\r\n arg: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n private clientPromise: Promise<Client> | null;\r\n\r\n public onCommand$ = new Subject<Command>();\r\n public onReady$ = new BehaviorSubject(false);\r\n public onStart$ = new Subject();\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n private onStartSub: Subscription;\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n private onStopSub: Subscription;\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n private onCommandSub: Subscription;\r\n private onCommandEvt$ = fromEvent<Command>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as Command }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next();\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next();\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n public static init(data: any) {\r\n\r\n console.log(\"init()\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n public track(eventName: string, properties?: EventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n\r\n // let map = new Map<string, any>();\r\n\r\n // let obj = JSON.parse(await client.getCommandMap());\r\n // for (let key in obj) {\r\n // map.set(key, obj[key]);\r\n // }\r\n // return map;\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n\r\n private getClient(): Promise<Client> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<Client>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\nclass NoopClient implements Client {\r\n\r\n constructor() {\r\n\r\n console.warn(\"Client API not available, falling back to mock API.\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n}\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\n\n\n@NgModule({\n imports: [\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: () => initializeApp,\n deps: [PlayerClientService],\n multi: true\n }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(): Promise<any> {\n return new Promise((resolve, reject) => {\n PlayerClientService.init({});\n resolve(true);\n });\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,51 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
2
|
+
import { Injectable, APP_INITIALIZER, NgModule } from '@angular/core';
|
|
3
|
+
import { Subject, BehaviorSubject, fromEvent } from 'rxjs';
|
|
4
|
+
import { share, tap, map } from 'rxjs/operators';
|
|
4
5
|
|
|
5
6
|
class PlayerClientService {
|
|
6
|
-
constructor() {
|
|
7
|
+
constructor(zone) {
|
|
7
8
|
this.onCommand$ = new Subject();
|
|
9
|
+
this.onReady$ = new BehaviorSubject(false);
|
|
8
10
|
this.onStart$ = new Subject();
|
|
9
11
|
this.onStop$ = new Subject();
|
|
12
|
+
this.onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(share(), tap(this.onStart$));
|
|
13
|
+
this.onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(share(), tap(this.onStop$));
|
|
14
|
+
this.onCommandEvt$ = fromEvent(document, 'RevelDigital.Command').pipe(map((e) => { return { name: e.detail.name, arg: e.detail.arg }; }), share(), tap(this.onCommand$));
|
|
10
15
|
let self = this;
|
|
11
16
|
window.RevelDigital = {
|
|
12
17
|
Controller: {
|
|
13
18
|
onCommand: function (name, arg) {
|
|
14
|
-
|
|
19
|
+
zone.run(() => {
|
|
20
|
+
self.onCommand$.next({ name: name, arg: arg });
|
|
21
|
+
});
|
|
15
22
|
},
|
|
16
23
|
onStart: function () {
|
|
17
|
-
|
|
24
|
+
zone.run(() => {
|
|
25
|
+
self.onStart$.next();
|
|
26
|
+
});
|
|
18
27
|
},
|
|
19
28
|
onStop: function () {
|
|
20
|
-
|
|
29
|
+
zone.run(() => {
|
|
30
|
+
self.onStop$.next();
|
|
31
|
+
});
|
|
21
32
|
}
|
|
22
33
|
}
|
|
23
34
|
};
|
|
35
|
+
this.onStartSub = this.onStartEvt$.subscribe(() => { });
|
|
36
|
+
this.onStopSub = this.onStopEvt$.subscribe(() => { });
|
|
37
|
+
this.onCommandSub = this.onCommandEvt$.subscribe(() => { });
|
|
24
38
|
this.clientPromise = null;
|
|
39
|
+
this.onReady$.next(true);
|
|
40
|
+
}
|
|
41
|
+
ngOnDestroy() {
|
|
42
|
+
this.onStartSub?.unsubscribe();
|
|
43
|
+
this.onStopSub?.unsubscribe();
|
|
44
|
+
this.onCommandSub?.unsubscribe();
|
|
45
|
+
this.onReady$.next(false);
|
|
46
|
+
}
|
|
47
|
+
static init(data) {
|
|
48
|
+
console.log("init()");
|
|
25
49
|
}
|
|
26
50
|
callback(...args) {
|
|
27
51
|
this.getClient().then((client) => {
|
|
@@ -121,8 +145,6 @@ class PlayerClientService {
|
|
|
121
145
|
// ---
|
|
122
146
|
// PRIVATE METHODS.
|
|
123
147
|
// ---
|
|
124
|
-
// I return a Promise that resolves with a Tracker API (which may be the 3rd-party
|
|
125
|
-
// library or a mock API representation).
|
|
126
148
|
getClient() {
|
|
127
149
|
if (this.clientPromise) {
|
|
128
150
|
return (this.clientPromise);
|
|
@@ -156,14 +178,14 @@ class PlayerClientService {
|
|
|
156
178
|
return (this.clientPromise);
|
|
157
179
|
}
|
|
158
180
|
}
|
|
159
|
-
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
181
|
+
PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
160
182
|
PlayerClientService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, providedIn: 'root' });
|
|
161
183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, decorators: [{
|
|
162
184
|
type: Injectable,
|
|
163
185
|
args: [{
|
|
164
186
|
providedIn: 'root'
|
|
165
187
|
}]
|
|
166
|
-
}], ctorParameters: function () { return []; } });
|
|
188
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
167
189
|
// ----------------------------------------------------------------------------------- //
|
|
168
190
|
// ----------------------------------------------------------------------------------- //
|
|
169
191
|
// I provide a mock API for the 3rd-party script. This just allows the consuming code to
|
|
@@ -221,13 +243,30 @@ class PlayerClientModule {
|
|
|
221
243
|
}
|
|
222
244
|
PlayerClientModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
223
245
|
PlayerClientModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule });
|
|
224
|
-
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule,
|
|
246
|
+
PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, providers: [{
|
|
247
|
+
provide: APP_INITIALIZER,
|
|
248
|
+
useFactory: () => initializeApp,
|
|
249
|
+
deps: [PlayerClientService],
|
|
250
|
+
multi: true
|
|
251
|
+
}], imports: [[]] });
|
|
225
252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, decorators: [{
|
|
226
253
|
type: NgModule,
|
|
227
254
|
args: [{
|
|
228
255
|
imports: [],
|
|
256
|
+
providers: [{
|
|
257
|
+
provide: APP_INITIALIZER,
|
|
258
|
+
useFactory: () => initializeApp,
|
|
259
|
+
deps: [PlayerClientService],
|
|
260
|
+
multi: true
|
|
261
|
+
}]
|
|
229
262
|
}]
|
|
230
|
-
}] });
|
|
263
|
+
}] });
|
|
264
|
+
function initializeApp() {
|
|
265
|
+
return new Promise((resolve, reject) => {
|
|
266
|
+
PlayerClientService.init({});
|
|
267
|
+
resolve(true);
|
|
268
|
+
});
|
|
269
|
+
}
|
|
231
270
|
|
|
232
271
|
/*
|
|
233
272
|
* Public API Surface of player-client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\ndeclare global {\r\n var Client: Client;\r\n}\r\n\r\nexport interface Client {\r\n\r\n callback(...args: any[]): void;\r\n\r\n getDeviceTime(date?: Date): Promise<string>;\r\n\r\n getDeviceTimeZoneName(): Promise<string>;\r\n\r\n getDeviceTimeZoneID(): Promise<string>;\r\n\r\n getDeviceTimeZoneOffset(): Promise<number>;\r\n\r\n getLanguageCode(): Promise<string>;\r\n\r\n getDeviceKey(): Promise<string>;\r\n\r\n sendCommand(name: string, arg: string): void;\r\n\r\n sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void;\r\n\r\n track(eventName: string, properties?: string): void;\r\n\r\n timeEvent(eventName: string): void;\r\n\r\n newEventSession(id?: string): void;\r\n\r\n getRevelRoot(): Promise<string>;\r\n\r\n getCommandMap(): Promise<string>;\r\n}\r\n\r\nexport interface EventProperties {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Command {\r\n name: string;\r\n arg: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService {\r\n\r\n private clientPromise: Promise<Client> | null;\r\n\r\n public onCommand$ = new Subject<Command>();\r\n public onStart$ = new Subject();\r\n public onStop$ = new Subject();\r\n\r\n constructor() {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n },\r\n onStart: function () {\r\n self.onStart$.next();\r\n },\r\n onStop: function() {\r\n self.onStop$.next();\r\n }\r\n }\r\n }\r\n\r\n this.clientPromise = null;\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n public track(eventName: string, properties?: EventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n\r\n // let map = new Map<string, any>();\r\n\r\n // let obj = JSON.parse(await client.getCommandMap());\r\n // for (let key in obj) {\r\n // map.set(key, obj[key]);\r\n // }\r\n // return map;\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n\r\n // I return a Promise that resolves with a Tracker API (which may be the 3rd-party\r\n // library or a mock API representation).\r\n private getClient(): Promise<Client> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<Client>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\nclass NoopClient implements Client {\r\n\r\n constructor() {\r\n\r\n console.warn(\"Client API not available, falling back to mock API.\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\n\n\n@NgModule({\n imports: [\n ],\n})\nexport class PlayerClientModule { }\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\ndeclare global {\r\n var Client: Client;\r\n}\r\n\r\nexport interface Client {\r\n\r\n callback(...args: any[]): void;\r\n\r\n getDeviceTime(date?: Date): Promise<string>;\r\n\r\n getDeviceTimeZoneName(): Promise<string>;\r\n\r\n getDeviceTimeZoneID(): Promise<string>;\r\n\r\n getDeviceTimeZoneOffset(): Promise<number>;\r\n\r\n getLanguageCode(): Promise<string>;\r\n\r\n getDeviceKey(): Promise<string>;\r\n\r\n sendCommand(name: string, arg: string): void;\r\n\r\n sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void;\r\n\r\n track(eventName: string, properties?: string): void;\r\n\r\n timeEvent(eventName: string): void;\r\n\r\n newEventSession(id?: string): void;\r\n\r\n getRevelRoot(): Promise<string>;\r\n\r\n getCommandMap(): Promise<string>;\r\n}\r\n\r\nexport interface EventProperties {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Command {\r\n name: string;\r\n arg: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n private clientPromise: Promise<Client> | null;\r\n\r\n public onCommand$ = new Subject<Command>();\r\n public onReady$ = new BehaviorSubject(false);\r\n public onStart$ = new Subject();\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n private onStartSub: Subscription;\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n private onStopSub: Subscription;\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n private onCommandSub: Subscription;\r\n private onCommandEvt$ = fromEvent<Command>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as Command }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next();\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next();\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n public static init(data: any) {\r\n\r\n console.log(\"init()\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n public track(eventName: string, properties?: EventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n\r\n // let map = new Map<string, any>();\r\n\r\n // let obj = JSON.parse(await client.getCommandMap());\r\n // for (let key in obj) {\r\n // map.set(key, obj[key]);\r\n // }\r\n // return map;\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n\r\n private getClient(): Promise<Client> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<Client>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\nclass NoopClient implements Client {\r\n\r\n constructor() {\r\n\r\n console.warn(\"Client API not available, falling back to mock API.\");\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n}\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\n\n\n@NgModule({\n imports: [\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: () => initializeApp,\n deps: [PlayerClientService],\n multi: true\n }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(): Promise<any> {\n return new Promise((resolve, reject) => {\n PlayerClientService.init({});\n resolve(true);\n });\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NgZone, OnDestroy } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
declare global {
|
|
4
5
|
var Client: Client;
|
|
@@ -26,12 +27,21 @@ export interface Command {
|
|
|
26
27
|
name: string;
|
|
27
28
|
arg: string;
|
|
28
29
|
}
|
|
29
|
-
export declare class PlayerClientService {
|
|
30
|
+
export declare class PlayerClientService implements OnDestroy {
|
|
30
31
|
private clientPromise;
|
|
31
32
|
onCommand$: Subject<Command>;
|
|
33
|
+
onReady$: BehaviorSubject<boolean>;
|
|
32
34
|
onStart$: Subject<unknown>;
|
|
33
35
|
onStop$: Subject<unknown>;
|
|
34
|
-
|
|
36
|
+
private onStartSub;
|
|
37
|
+
private onStartEvt$;
|
|
38
|
+
private onStopSub;
|
|
39
|
+
private onStopEvt$;
|
|
40
|
+
private onCommandSub;
|
|
41
|
+
private onCommandEvt$;
|
|
42
|
+
constructor(zone: NgZone);
|
|
43
|
+
ngOnDestroy(): void;
|
|
44
|
+
static init(data: any): void;
|
|
35
45
|
callback(...args: any[]): void;
|
|
36
46
|
getDeviceTime(date?: Date): Promise<string>;
|
|
37
47
|
getDeviceTimeZoneName(): Promise<string>;
|
|
@@ -50,4 +60,3 @@ export declare class PlayerClientService {
|
|
|
50
60
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlayerClientService, never>;
|
|
51
61
|
static ɵprov: i0.ɵɵInjectableDeclaration<PlayerClientService>;
|
|
52
62
|
}
|
|
53
|
-
//# sourceMappingURL=player-client.service.d.ts.map
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"player-client.module.d.ts","sourceRoot":"","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts"],"names":[],"mappings":";AAGA,qBAIa,kBAAkB;yCAAlB,kBAAkB;0CAAlB,kBAAkB;0CAAlB,kBAAkB;CAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"player-client.service.d.ts","sourceRoot":"","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;;AAO/B,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,MAAM,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IAErB,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE/B,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,eAAe,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAGa,mBAAmB;IAE9B,OAAO,CAAC,aAAa,CAAyB;IAEvC,UAAU,mBAA0B;IACpC,QAAQ,mBAAiB;IACzB,OAAO,mBAAiB;;IAsBxB,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IA2BxB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAU3C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOxC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOtC,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAO1C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAOlC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAOrC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAO5C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAOxE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI;IAO5D,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOlC,eAAe,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAO/B,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAqB1C,OAAO,CAAC,SAAS;yCAvKN,mBAAmB;6CAAnB,mBAAmB;CAyN/B"}
|
package/public-api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/reveldigital/player-client/src/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reveldigital-player-client.d.ts","sourceRoot":"","sources":["../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"}
|