@c8y/ngx-components 1016.0.379 → 1016.0.383
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/NOTICES +1 -1
- package/core/range-display/range-display.component.d.ts +19 -1
- package/core/realtime/realtime-subject.service.d.ts +4 -0
- package/core/realtime/realtime.service.d.ts +10 -0
- package/device-protocols/device-protocols.factory.d.ts +14 -0
- package/device-protocols/device-protocols.guard.d.ts +12 -0
- package/device-protocols/device-protocols.module.d.ts +8 -0
- package/device-protocols/device-type-detail-edited.service.d.ts +8 -0
- package/device-protocols/device-type-detail.component.d.ts +12 -0
- package/device-protocols/device-type-detail.directive.d.ts +9 -0
- package/device-protocols/index.d.ts +6 -0
- package/esm2020/core/range-display/range-display.component.mjs +87 -4
- package/esm2020/core/realtime/realtime-subject.service.mjs +47 -4
- package/esm2020/core/realtime/realtime.service.mjs +15 -1
- package/esm2020/device-protocols/c8y-ngx-components-device-protocols.mjs +5 -0
- package/esm2020/device-protocols/device-protocols.factory.mjs +31 -0
- package/esm2020/device-protocols/device-protocols.guard.mjs +40 -0
- package/esm2020/device-protocols/device-protocols.module.mjs +38 -0
- package/esm2020/device-protocols/device-type-detail-edited.service.mjs +19 -0
- package/esm2020/device-protocols/device-type-detail.component.mjs +45 -0
- package/esm2020/device-protocols/device-type-detail.directive.mjs +19 -0
- package/esm2020/device-protocols/index.mjs +7 -0
- package/esm2020/ecosystem/application-properties/subscription-modal/subscription-modal.component.mjs +4 -1
- package/esm2020/upgrade/ng1/downgraded.services.mjs +6 -4
- package/esm2020/upgrade/ng1/index.mjs +6 -5
- package/esm2020/upgrade/upgrade.module.mjs +10 -10
- package/fesm2015/c8y-ngx-components-device-protocols.mjs +180 -0
- package/fesm2015/c8y-ngx-components-device-protocols.mjs.map +1 -0
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +3 -0
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-upgrade.mjs +91 -88
- package/fesm2015/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +144 -4
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-protocols.mjs +177 -0
- package/fesm2020/c8y-ngx-components-device-protocols.mjs.map +1 -0
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +3 -0
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-upgrade.mjs +90 -87
- package/fesm2020/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +142 -4
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +1 -1
- package/package.json +10 -2
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
package/NOTICES
CHANGED
|
@@ -2331,7 +2331,7 @@ SOFTWARE
|
|
|
2331
2331
|
|
|
2332
2332
|
-----
|
|
2333
2333
|
|
|
2334
|
-
The following software may be included in this product: @types/acorn, @types/babel__core, @types/babel__generator, @types/babel__template, @types/babel__traverse, @types/body-parser, @types/bonjour, @types/connect, @types/connect-history-api-fallback, @types/cron, @types/eslint, @types/eslint-scope, @types/estree, @types/express, @types/express-serve-static-core, @types/glob, @types/graceful-fs, @types/html-minifier-terser, @types/http-proxy, @types/istanbul-lib-coverage, @types/istanbul-reports, @types/jest, @types/jsdom, @types/json-schema, @types/mime, @types/minimatch, @types/node, @types/parse5, @types/prettier, @types/qs, @types/range-parser, @types/resolve, @types/semver, @types/serve-index, @types/serve-static, @types/sinonjs__fake-timers, @types/sizzle, @types/sockjs, @types/stack-utils, @types/tough-cookie, @types/webpack, @types/webpack-dev-server, @types/ws, @types/yargs, @types/yargs-parser, @types/yauzl. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/acorn), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__generator), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__template), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__traverse), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/bonjour), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect-history-api-fallback), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cron), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint-scope), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/estree), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/glob), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/graceful-fs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/html-minifier-terser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/http-proxy), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-lib-coverage), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-reports), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jest), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsdom), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/minimatch), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prettier), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resolve), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/semver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-index), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sinonjs__fake-timers), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sizzle), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sockjs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/stack-utils), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/tough-cookie), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webpack), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/ws), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yauzl). This software contains the following license and notice below:
|
|
2334
|
+
The following software may be included in this product: @types/acorn, @types/babel__core, @types/babel__generator, @types/babel__template, @types/babel__traverse, @types/body-parser, @types/bonjour, @types/cometd, @types/connect, @types/connect-history-api-fallback, @types/cron, @types/eslint, @types/eslint-scope, @types/estree, @types/express, @types/express-serve-static-core, @types/glob, @types/graceful-fs, @types/html-minifier-terser, @types/http-proxy, @types/istanbul-lib-coverage, @types/istanbul-reports, @types/jest, @types/jsdom, @types/json-schema, @types/mime, @types/minimatch, @types/node, @types/parse5, @types/prettier, @types/qs, @types/range-parser, @types/resolve, @types/semver, @types/serve-index, @types/serve-static, @types/sinonjs__fake-timers, @types/sizzle, @types/sockjs, @types/stack-utils, @types/tough-cookie, @types/webpack, @types/webpack-dev-server, @types/ws, @types/yargs, @types/yargs-parser, @types/yauzl. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/acorn), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__generator), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__template), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__traverse), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/bonjour), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cometd), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect-history-api-fallback), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cron), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint-scope), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/estree), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/glob), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/graceful-fs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/html-minifier-terser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/http-proxy), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-lib-coverage), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-reports), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jest), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsdom), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/minimatch), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prettier), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resolve), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/semver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-index), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sinonjs__fake-timers), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sizzle), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sockjs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/stack-utils), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/tough-cookie), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webpack), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/ws), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yauzl). This software contains the following license and notice below:
|
|
2335
2335
|
|
|
2336
2336
|
MIT License
|
|
2337
2337
|
|
|
@@ -1,18 +1,36 @@
|
|
|
1
|
+
import { AfterViewInit, OnChanges, OnDestroy } from '@angular/core';
|
|
1
2
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
2
3
|
import { RangeDisplay } from './range-display.model';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class RangeDisplayComponent {
|
|
5
|
+
export declare class RangeDisplayComponent implements AfterViewInit, OnDestroy, OnChanges {
|
|
5
6
|
private sanitizer;
|
|
6
7
|
config: RangeDisplay;
|
|
7
8
|
display: 'full' | 'compact' | 'inline';
|
|
9
|
+
private currentRangeWidthObserver;
|
|
10
|
+
private currentRangeWidthChanged;
|
|
11
|
+
private readonly CURRENT_RANGE_WIDTH_TRANSITION_TIME;
|
|
12
|
+
private readonly DEFAULT_TOOLTIP_SHIFT;
|
|
13
|
+
private readonly MIN_TOOLTIP_SHIFT;
|
|
14
|
+
private tooltipShift;
|
|
8
15
|
get inlineStyle(): import("@angular/platform-browser").SafeStyle;
|
|
16
|
+
private rangeDisplay;
|
|
17
|
+
private currentRangeElement;
|
|
18
|
+
private destroyed$;
|
|
9
19
|
constructor(sanitizer: DomSanitizer);
|
|
20
|
+
ngOnChanges(): void;
|
|
21
|
+
ngAfterViewInit(): void;
|
|
22
|
+
ngOnDestroy(): void;
|
|
10
23
|
checkTarget(): boolean;
|
|
11
24
|
rulerCalc(index: any): number;
|
|
12
25
|
trackByIndex(index: number): number;
|
|
13
26
|
isRedRangeDisplayed(): any;
|
|
14
27
|
isYellowRangeDisplayed(): any;
|
|
15
28
|
isRangeDisplayed(rangeMin: any, rangeMax: any): any;
|
|
29
|
+
private setupTooltipShifting;
|
|
30
|
+
private setTooltipShiftValue;
|
|
31
|
+
private setupTooltipShiftingIfPossible;
|
|
32
|
+
private getTooltipBackground;
|
|
33
|
+
private isValueInRange;
|
|
16
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<RangeDisplayComponent, never>;
|
|
17
35
|
static ɵcmp: i0.ɵɵComponentDeclaration<RangeDisplayComponent, "c8y-range-display", never, { "config": "config"; "display": "display"; }, {}, never, never, false>;
|
|
18
36
|
}
|
|
@@ -7,10 +7,14 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class RealtimeSubjectService {
|
|
9
9
|
protected realtime: Realtime;
|
|
10
|
+
reconnect$: Observable<void>;
|
|
11
|
+
connectionStatus$: Observable<'connected' | 'disconnected'>;
|
|
10
12
|
private subjects$;
|
|
11
13
|
constructor(realtime: Realtime);
|
|
12
14
|
getObservableForChannel<T>(channel: string): Observable<RealtimeMessage<T>>;
|
|
13
15
|
protected createObservableForChannel<T>(channel: string, realtime: Realtime): Observable<RealtimeMessage<T>>;
|
|
16
|
+
protected createObservableForReconnect(): Observable<void>;
|
|
17
|
+
protected createObservableForConnectionStatus(): Observable<"connected" | "disconnected">;
|
|
14
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<RealtimeSubjectService, never>;
|
|
15
19
|
static ɵprov: i0.ɵɵInjectableDeclaration<RealtimeSubjectService>;
|
|
16
20
|
}
|
|
@@ -11,6 +11,16 @@ export declare abstract class RealtimeService<T> {
|
|
|
11
11
|
* A flag displaying if realtime notifications are currently active.
|
|
12
12
|
*/
|
|
13
13
|
get active(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* An observable emitting a value in case the realtime connection has been interrupted.
|
|
16
|
+
* Can be used to reload data of e.g. a datapoint graph that wasn't received while realtime was interrupted.
|
|
17
|
+
*/
|
|
18
|
+
get reconnect$(): Observable<void>;
|
|
19
|
+
/**
|
|
20
|
+
* An observable emitting either `connected` or `disconnected` depending on the state of the realtime connection.
|
|
21
|
+
* Can be used to e.g. inform the user about the interrupted realtime connection.
|
|
22
|
+
*/
|
|
23
|
+
get connectionStatus$(): Observable<'connected' | 'disconnected'>;
|
|
14
24
|
private isActive;
|
|
15
25
|
constructor(realtimeSubject: RealtimeSubjectService);
|
|
16
26
|
/**
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Route } from '@angular/router';
|
|
2
|
+
import { ExtensionFactory } from '@c8y/ngx-components';
|
|
3
|
+
import { DeviceProtocolsGuard } from './device-protocols.guard';
|
|
4
|
+
import { DeviceTypeDetailComponent } from './device-type-detail.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class DeviceProtocolsRouteFactory implements ExtensionFactory<Route> {
|
|
7
|
+
get(): {
|
|
8
|
+
path: string;
|
|
9
|
+
component: typeof DeviceTypeDetailComponent;
|
|
10
|
+
canDeactivate: (typeof DeviceProtocolsGuard)[];
|
|
11
|
+
}[];
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceProtocolsRouteFactory, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DeviceProtocolsRouteFactory>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AlertService, ModalService } from '@c8y/ngx-components';
|
|
2
|
+
import { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DeviceProtocolsGuard {
|
|
5
|
+
private modal;
|
|
6
|
+
private alert;
|
|
7
|
+
private deviceTypeDetailEditedService;
|
|
8
|
+
constructor(modal: ModalService, alert: AlertService, deviceTypeDetailEditedService: DeviceTypeDetailEditedService);
|
|
9
|
+
canDeactivate(): Promise<boolean>;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceProtocolsGuard, never>;
|
|
11
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DeviceProtocolsGuard>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./device-type-detail.directive";
|
|
3
|
+
import * as i2 from "./device-type-detail.component";
|
|
4
|
+
export declare class DeviceProtocolsModule {
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceProtocolsModule, never>;
|
|
6
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DeviceProtocolsModule, [typeof i1.DeviceTypeDetail, typeof i2.DeviceTypeDetailComponent], never, [typeof i2.DeviceTypeDetailComponent]>;
|
|
7
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<DeviceProtocolsModule>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class DeviceTypeDetailEditedService {
|
|
3
|
+
isDetailEdited: boolean;
|
|
4
|
+
getIsDetailEdited(): boolean;
|
|
5
|
+
setIsDetailEdited(value: any): void;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetailEditedService, never>;
|
|
7
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DeviceTypeDetailEditedService>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Injector, OnInit } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare function rootScopeFactory($injector: Injector): any;
|
|
5
|
+
export declare class DeviceTypeDetailComponent implements OnInit {
|
|
6
|
+
private route;
|
|
7
|
+
deviceTypeId: string;
|
|
8
|
+
constructor(route: ActivatedRoute);
|
|
9
|
+
ngOnInit(): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetailComponent, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DeviceTypeDetailComponent, "c8y-device-type-detail", never, {}, {}, never, never, false>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ElementRef, Injector } from '@angular/core';
|
|
2
|
+
import { UpgradeComponent } from '@angular/upgrade/static';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DeviceTypeDetail extends UpgradeComponent {
|
|
5
|
+
id: string;
|
|
6
|
+
constructor(elementRef: ElementRef, injector: Injector);
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetail, never>;
|
|
8
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DeviceTypeDetail, "c8y-device-type-detail-directive", never, { "id": "id"; }, {}, never, never, false>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './device-protocols.factory';
|
|
2
|
+
export * from './device-protocols.guard';
|
|
3
|
+
export * from './device-protocols.module';
|
|
4
|
+
export * from './device-type-detail-edited.service';
|
|
5
|
+
export * from './device-type-detail.component';
|
|
6
|
+
export * from './device-type-detail.directive';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';
|
|
2
2
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, map, takeUntil } from 'rxjs/operators';
|
|
3
5
|
import * as i0 from "@angular/core";
|
|
4
6
|
import * as i1 from "@angular/platform-browser";
|
|
5
7
|
import * as i2 from "@angular/common";
|
|
@@ -10,6 +12,13 @@ export class RangeDisplayComponent {
|
|
|
10
12
|
this.sanitizer = sanitizer;
|
|
11
13
|
this.config = {};
|
|
12
14
|
this.display = 'full';
|
|
15
|
+
this.currentRangeWidthChanged = new Subject();
|
|
16
|
+
// width of current range is changing within 150ms, see style declaration for .range-display__range__current
|
|
17
|
+
this.CURRENT_RANGE_WIDTH_TRANSITION_TIME = 150;
|
|
18
|
+
this.DEFAULT_TOOLTIP_SHIFT = '50%';
|
|
19
|
+
this.MIN_TOOLTIP_SHIFT = 10;
|
|
20
|
+
this.tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;
|
|
21
|
+
this.destroyed$ = new Subject();
|
|
13
22
|
}
|
|
14
23
|
get inlineStyle() {
|
|
15
24
|
this.config = this.config || {};
|
|
@@ -25,6 +34,8 @@ export class RangeDisplayComponent {
|
|
|
25
34
|
return this.sanitizer.bypassSecurityTrustStyle(`
|
|
26
35
|
--range-min: ${this.config.min};
|
|
27
36
|
--range-max: ${this.config.max};
|
|
37
|
+
--range-display-tooltip-translate: translate(${this.tooltipShift}, -56px);
|
|
38
|
+
--range-display-tooltip-bg: ${this.getTooltipBackground()};
|
|
28
39
|
--full-range: ${this.config.max - this.config.min};
|
|
29
40
|
--measurement-target: ${((this.config.target - this.config.min) * 100) / (this.config.max - this.config.min)}%;
|
|
30
41
|
--measurement-current: ${((this.config.current - this.config.min) * 100) / (this.config.max - this.config.min)}%;
|
|
@@ -38,6 +49,20 @@ export class RangeDisplayComponent {
|
|
|
38
49
|
100}%;
|
|
39
50
|
`);
|
|
40
51
|
}
|
|
52
|
+
ngOnChanges() {
|
|
53
|
+
// It's necessary to handle tooltip shifting both in OnChanges and AfterViewInit. In case of Linear gauge widget, view is
|
|
54
|
+
// rendered first (so as elements needed for calculating shifting) and config orientation is set later on.
|
|
55
|
+
// In other cases it's possible that orientation is defined on initialization of class and view elements are rendered later.
|
|
56
|
+
this.setupTooltipShiftingIfPossible();
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
this.setupTooltipShiftingIfPossible();
|
|
60
|
+
}
|
|
61
|
+
ngOnDestroy() {
|
|
62
|
+
this.currentRangeWidthObserver?.disconnect();
|
|
63
|
+
this.destroyed$.next();
|
|
64
|
+
this.destroyed$.complete();
|
|
65
|
+
}
|
|
41
66
|
checkTarget() {
|
|
42
67
|
return (this.config.target !== undefined &&
|
|
43
68
|
this.config.target !== null &&
|
|
@@ -65,12 +90,64 @@ export class RangeDisplayComponent {
|
|
|
65
90
|
isRangeDisplayed(rangeMin, rangeMax) {
|
|
66
91
|
return rangeMin === 0 || rangeMax === 0 || (rangeMin && rangeMax);
|
|
67
92
|
}
|
|
93
|
+
setupTooltipShifting() {
|
|
94
|
+
this.currentRangeWidthObserver = new ResizeObserver(([val]) => {
|
|
95
|
+
if (getComputedStyle(val.target, null).display === 'block') {
|
|
96
|
+
this.currentRangeWidthChanged.next(val.target);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
this.currentRangeWidthObserver.observe(this.currentRangeElement.nativeElement);
|
|
100
|
+
this.currentRangeWidthChanged
|
|
101
|
+
.pipe(debounceTime(this.CURRENT_RANGE_WIDTH_TRANSITION_TIME), map((rangeElement) => parseInt(getComputedStyle(rangeElement, null).width)), distinctUntilChanged(), takeUntil(this.destroyed$))
|
|
102
|
+
.subscribe(rangeElementWidth => {
|
|
103
|
+
this.setTooltipShiftValue(rangeElementWidth);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
setTooltipShiftValue(rangeElementWidth) {
|
|
107
|
+
const tooltipWidth = parseInt(getComputedStyle(this.currentRangeElement.nativeElement, ':after').width);
|
|
108
|
+
const currentRangeWidth = rangeElementWidth;
|
|
109
|
+
const rangeDisplayWidth = parseInt(getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('width'));
|
|
110
|
+
const rangeDisplayPaddingLeft = parseInt(getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('padding-left'));
|
|
111
|
+
const tooltipOverflowsLeftEdge = tooltipWidth / 2 > rangeDisplayPaddingLeft + currentRangeWidth;
|
|
112
|
+
const tooltipOverflowsRightEdge = tooltipWidth / 2 > rangeDisplayWidth - rangeDisplayPaddingLeft - currentRangeWidth;
|
|
113
|
+
if (tooltipOverflowsLeftEdge) {
|
|
114
|
+
this.tooltipShift = `${tooltipWidth - this.MIN_TOOLTIP_SHIFT}px`;
|
|
115
|
+
}
|
|
116
|
+
else if (tooltipOverflowsRightEdge) {
|
|
117
|
+
this.tooltipShift = `${this.MIN_TOOLTIP_SHIFT}px`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
setupTooltipShiftingIfPossible() {
|
|
124
|
+
if (this.config?.orientation === 'horizontal' &&
|
|
125
|
+
!this.currentRangeWidthObserver &&
|
|
126
|
+
this.rangeDisplay &&
|
|
127
|
+
this.currentRangeElement) {
|
|
128
|
+
this.setupTooltipShifting();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
getTooltipBackground() {
|
|
132
|
+
const current = this.config.current;
|
|
133
|
+
switch (true) {
|
|
134
|
+
case this.isValueInRange(current, this.config.redRangeMin, this.config.redRangeMax):
|
|
135
|
+
return 'var(--input-validation-error, #E0000E)';
|
|
136
|
+
case this.isValueInRange(current, this.config.yellowRangeMin, this.config.yellowRangeMax):
|
|
137
|
+
return 'var(--input-validation-warning, #FF801F)';
|
|
138
|
+
default:
|
|
139
|
+
return 'var(--gray-3, #394852)';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
isValueInRange(value, min, max) {
|
|
143
|
+
return min != null && max != null && value >= min && value <= max;
|
|
144
|
+
}
|
|
68
145
|
}
|
|
69
146
|
RangeDisplayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RangeDisplayComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
-
RangeDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RangeDisplayComponent, selector: "c8y-range-display", inputs: { config: "config", display: "display" }, host: { properties: { "attr.style": "this.inlineStyle" } }, ngImport: i0, template: "<div
|
|
147
|
+
RangeDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RangeDisplayComponent, selector: "c8y-range-display", inputs: { config: "config", display: "display" }, host: { properties: { "attr.style": "this.inlineStyle" } }, viewQueries: [{ propertyName: "rangeDisplay", first: true, predicate: ["rangeDisplay"], descendants: true }, { propertyName: "currentRangeElement", first: true, predicate: ["currentRangeElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"{\n 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact': display === 'compact',\n 'range-display--inline': display === 'inline'\n }\"\n attr.data-label=\"{{ config.unit }}\"\n>\n <div\n class=\"range-display\"\n #rangeDisplay\n >\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div\n *ngIf=\"isYellowRangeDisplayed()\"\n class=\"range-display__range__min\"\n ></div>\n <div\n *ngIf=\"isRedRangeDisplayed()\"\n class=\"range-display__range__max\"\n ></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n [ngStyle]=\"{\n display:\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n ? 'block'\n : 'none'\n }\"\n #currentRangeElement\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} 
{{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div\n attr.data-label=\"{{ config.max || 100 | number }}\"\n class=\"range-display__tick\"\n ></div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "c8yDate" }] });
|
|
71
148
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RangeDisplayComponent, decorators: [{
|
|
72
149
|
type: Component,
|
|
73
|
-
args: [{ selector: 'c8y-range-display', template: "<div
|
|
150
|
+
args: [{ selector: 'c8y-range-display', template: "<div\n [ngClass]=\"{\n 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact': display === 'compact',\n 'range-display--inline': display === 'inline'\n }\"\n attr.data-label=\"{{ config.unit }}\"\n>\n <div\n class=\"range-display\"\n #rangeDisplay\n >\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div\n *ngIf=\"isYellowRangeDisplayed()\"\n class=\"range-display__range__min\"\n ></div>\n <div\n *ngIf=\"isRedRangeDisplayed()\"\n class=\"range-display__range__max\"\n ></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n [ngStyle]=\"{\n display:\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n ? 'block'\n : 'none'\n }\"\n #currentRangeElement\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} 
{{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div\n attr.data-label=\"{{ config.max || 100 | number }}\"\n class=\"range-display__tick\"\n ></div>\n </div>\n </div>\n</div>\n" }]
|
|
74
151
|
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { config: [{
|
|
75
152
|
type: Input
|
|
76
153
|
}], display: [{
|
|
@@ -78,5 +155,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
78
155
|
}], inlineStyle: [{
|
|
79
156
|
type: HostBinding,
|
|
80
157
|
args: ['attr.style']
|
|
158
|
+
}], rangeDisplay: [{
|
|
159
|
+
type: ViewChild,
|
|
160
|
+
args: ['rangeDisplay', { static: false }]
|
|
161
|
+
}], currentRangeElement: [{
|
|
162
|
+
type: ViewChild,
|
|
163
|
+
args: ['currentRangeElement', { static: false }]
|
|
81
164
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFPekQsTUFBTSxPQUFPLHFCQUFxQjtJQThDaEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQTdDbEMsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsWUFBTyxHQUFrQyxNQUFNLENBQUM7SUE0Q1gsQ0FBQztJQTNDL0MsSUFDSSxXQUFXO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FB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QUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQ2pDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O2tIQWpGVSxxQkFBcUI7c0dBQXJCLHFCQUFxQix1S0NSbEMscXFEQXlDQTsyRkRqQ2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjttR0FJcEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFRixXQUFXO3NCQURkLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJhbmdlRGlzcGxheSB9IGZyb20gJy4vcmFuZ2UtZGlzcGxheS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1yYW5nZS1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlRGlzcGxheUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUmFuZ2VEaXNwbGF5ID0ge307XG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdmdWxsJyB8ICdjb21wYWN0JyB8ICdpbmxpbmUnID0gJ2Z1bGwnO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3R5bGUnKVxuICBnZXQgaW5saW5lU3R5bGUoKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLm1pbikge1xuICAgICAgdGhpcy5jb25maWcubWluID0gMDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXgpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1heCA9IDEwMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jdXJyZW50ID0gcGFyc2VGbG9hdCh0aGlzLmNvbmZpZy5jdXJyZW50LnRvRml4ZWQodGhpcy5jb25maWcuZnJhY3Rpb25TaXplKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICBgXG4gICAgICAgICAgLS1yYW5nZS1taW46ICR7dGhpcy5jb25maWcubWlufTtcbiAgICAgICAgICAtLXJhbmdlLW1heDogJHt0aGlzLmNvbmZpZy5tYXh9O1xuICAgICAgICAgIC0tZnVsbC1yYW5nZTogJHt0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW59O1xuICAgICAgICAgIC0tbWVhc3VyZW1lbnQtdGFyZ2V0OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy50YXJnZXQgLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1tZWFzdXJlbWVudC1jdXJyZW50OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy5jdXJyZW50IC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2UteS1taW46ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnllbGxvd1JhbmdlTWluIC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgL1xuICAgICAgICAgICAgKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbilcbiAgICAgICAgICB9JTtcbiAgICAgICAgICAtLXJhbmdlLXktbWF4OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy55ZWxsb3dSYW5nZU1heCAtIHRoaXMuY29uZmlnLm1pbikgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKSkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1yYW5nZS1yLW1pbjogJHtcbiAgICAgICAgICAgICgodGhpcy5jb25maWcucmVkUmFuZ2VNaW4gLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvXG4gICAgICAgICAgICAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2Utci1tYXg6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnJlZFJhbmdlTWF4IC0gdGhpcy5jb25maWcubWluKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pKSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgICB9JTtcbiAgICAgICAgYFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIGNoZWNrVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5jb25maWcudGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgPj0gdGhpcy5jb25maWcubWluICYmXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgPD0gdGhpcy5jb25maWcubWF4XG4gICAgKTtcbiAgfVxuXG4gIHJ1bGVyQ2FsYyhpbmRleCkge1xuICAgIGNvbnN0IG51bTogbnVtYmVyID0gdGhpcy5jb25maWcubWluICsgKCh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pIC8gMTApICogaW5kZXg7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0udG9GaXhlZCh0aGlzLmNvbmZpZy5mcmFjdGlvblNpemUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGlzUmVkUmFuZ2VEaXNwbGF5ZWQoKSB7XG4gICAgY29uc3QgeyByZWRSYW5nZU1pbiwgcmVkUmFuZ2VNYXggfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLmlzUmFuZ2VEaXNwbGF5ZWQocmVkUmFuZ2VNaW4sIHJlZFJhbmdlTWF4KTtcbiAgfVxuXG4gIGlzWWVsbG93UmFuZ2VEaXNwbGF5ZWQoKSB7XG4gICAgY29uc3QgeyB5ZWxsb3dSYW5nZU1pbiwgeWVsbG93UmFuZ2VNYXggfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLmlzUmFuZ2VEaXNwbGF5ZWQoeWVsbG93UmFuZ2VNaW4sIHllbGxvd1JhbmdlTWF4KTtcbiAgfVxuXG4gIGlzUmFuZ2VEaXNwbGF5ZWQocmFuZ2VNaW4sIHJhbmdlTWF4KSB7XG4gICAgcmV0dXJuIHJhbmdlTWluID09PSAwIHx8IHJhbmdlTWF4ID09PSAwIHx8IChyYW5nZU1pbiAmJiByYW5nZU1heCk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwieyAncmFuZ2UtZGlzcGxheS0tdmVydGljYWwnOiBjb25maWcub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcsXG4gICdyYW5nZS1kaXNwbGF5LS1jb21wYWN0JyA6IGRpc3BsYXkgPT09J2NvbXBhY3QnLFxuICAncmFuZ2UtZGlzcGxheS0taW5saW5lJyA6IGRpc3BsYXkgPT09J2lubGluZScgfVwiIFxuICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcudW5pdCB9fVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJyYW5nZS1kaXNwbGF5XCI+XG4gICAgPGRpdiBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX3VuaXRcIj5cbiAgICAgICAge3sgY29uZmlnLnVuaXQgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzWWVsbG93UmFuZ2VEaXNwbGF5ZWQoKVwiIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21pblwiPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzUmVkUmFuZ2VEaXNwbGF5ZWQoKVwiIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21heFwiPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNoZWNrVGFyZ2V0KClcIlxuICAgICAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlX190YXJnZXRcIlxuICAgICAgICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcudGFyZ2V0IH19IHt7IGNvbmZpZy51bml0IH19XCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnVGFyZ2V0JyB8IHRyYW5zbGF0ZSB9fToge3sgY29uZmlnLnRhcmdldCB9fSB7eyBjb25maWcudW5pdCB9fVwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29uZmlnLmN1cnJlbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgY29uZmlnLmN1cnJlbnQgPj0gY29uZmlnLm1pbiAmJlxuICAgICAgICAgIGNvbmZpZy5jdXJyZW50IDw9IGNvbmZpZy5tYXhcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X19yYW5nZV9fY3VycmVudFwiXG4gICAgICAgIGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy5jdXJyZW50IH19IHt7IGNvbmZpZy51bml0IH19ICYjeGE7IHt7IGNvbmZpZy50aW1lIHwgYzh5RGF0ZSB9fVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0N1cnJlbnQnIHwgdHJhbnNsYXRlIH19OiB7eyBjb25maWcuY3VycmVudCB9fSB7eyBjb25maWcudW5pdCB9fSB8IHt7XG4gICAgICAgICAgY29uZmlnLnRpbWUgfCBjOHlEYXRlXG4gICAgICAgIH19XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcnVsZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHggb2YgW10uY29uc3RydWN0b3IoMTApOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgYXR0ci5kYXRhLWxhYmVsPVwie3sgcnVsZXJDYWxjKGluZGV4KSB9fVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fdGlja1wiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2IGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy5tYXggfHwgMTAwIHwgbnVtYmVyIH19XCIgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X190aWNrXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT3BGLE1BQU0sT0FBTyxxQkFBcUI7SUEyRGhDLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUExRGxDLFdBQU0sR0FBaUIsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0MsTUFBTSxDQUFDO1FBRWpELDZCQUF3QixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDMUQsNEdBQTRHO1FBQzNGLHdDQUFtQyxHQUFHLEdBQUcsQ0FBQztRQUMxQywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBaUQxQyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNLLENBQUM7SUFqRC9DLElBQ0ksV0FBVztRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElB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RUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSYW5nZURpc3BsYXkgfSBmcm9tICcuL3JhbmdlLWRpc3BsYXkubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcmFuZ2UtZGlzcGxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSYW5nZURpc3BsYXlDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUmFuZ2VEaXNwbGF5ID0ge307XG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdmdWxsJyB8ICdjb21wYWN0JyB8ICdpbmxpbmUnID0gJ2Z1bGwnO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZVdpZHRoT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZVdpZHRoQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PEVsZW1lbnQ+KCk7XG4gIC8vIHdpZHRoIG9mIGN1cnJlbnQgcmFuZ2UgaXMgY2hhbmdpbmcgd2l0aGluIDE1MG1zLCBzZWUgc3R5bGUgZGVjbGFyYXRpb24gZm9yIC5yYW5nZS1kaXNwbGF5X19yYW5nZV9fY3VycmVudFxuICBwcml2YXRlIHJlYWRvbmx5IENVUlJFTlRfUkFOR0VfV0lEVEhfVFJBTlNJVElPTl9USU1FID0gMTUwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfVE9PTFRJUF9TSElGVCA9ICc1MCUnO1xuICBwcml2YXRlIHJlYWRvbmx5IE1JTl9UT09MVElQX1NISUZUID0gMTA7XG4gIHByaXZhdGUgdG9vbHRpcFNoaWZ0ID0gdGhpcy5ERUZBVUxUX1RPT0xUSVBfU0hJRlQ7XG4gIEBIb3N0QmluZGluZygnYXR0ci5zdHlsZScpXG4gIGdldCBpbmxpbmVTdHlsZSgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlnIHx8IHt9O1xuICAgIGlmICghdGhpcy5jb25maWcubWluKSB7XG4gICAgICB0aGlzLmNvbmZpZy5taW4gPSAwO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnLm1heCkge1xuICAgICAgdGhpcy5jb25maWcubWF4ID0gMTAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuZnJhY3Rpb25TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnLmN1cnJlbnQgPSBwYXJzZUZsb2F0KHRoaXMuY29uZmlnLmN1cnJlbnQudG9GaXhlZCh0aGlzLmNvbmZpZy5mcmFjdGlvblNpemUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgIGBcbiAgICAgICAgICAtLXJhbmdlLW1pbjogJHt0aGlzLmNvbmZpZy5taW59O1xuICAgICAgICAgIC0tcmFuZ2UtbWF4OiAke3RoaXMuY29uZmlnLm1heH07XG4gICAgICAgICAgLS1yYW5nZS1kaXNwbGF5LXRvb2x0aXAtdHJhbnNsYXRlOiB0cmFuc2xhdGUoJHt0aGlzLnRvb2x0aXBTaGlmdH0sIC01NnB4KTtcbiAgICAgICAgICAtLXJhbmdlLWRpc3BsYXktdG9vbHRpcC1iZzogJHt0aGlzLmdldFRvb2x0aXBCYWNrZ3JvdW5kKCl9O1xuICAgICAgICAgIC0tZnVsbC1yYW5nZTogJHt0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW59O1xuICAgICAgICAgIC0tbWVhc3VyZW1lbnQtdGFyZ2V0OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy50YXJnZXQgLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1tZWFzdXJlbWVudC1jdXJyZW50OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy5jdXJyZW50IC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2UteS1taW46ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnllbGxvd1JhbmdlTWluIC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgL1xuICAgICAgICAgICAgKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbilcbiAgICAgICAgICB9JTtcbiAgICAgICAgICAtLXJhbmdlLXktbWF4OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy55ZWxsb3dSYW5nZU1heCAtIHRoaXMuY29uZmlnLm1pbikgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKSkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1yYW5nZS1yLW1pbjogJHtcbiAgICAgICAgICAgICgodGhpcy5jb25maWcucmVkUmFuZ2VNaW4gLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvXG4gICAgICAgICAgICAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2Utci1tYXg6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnJlZFJhbmdlTWF4IC0gdGhpcy5jb25maWcubWluKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pKSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgICB9JTtcbiAgICAgICAgYFxuICAgICk7XG4gIH1cbiAgQFZpZXdDaGlsZCgncmFuZ2VEaXNwbGF5JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgcmFuZ2VEaXNwbGF5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjdXJyZW50UmFuZ2VFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgY3VycmVudFJhbmdlRWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0byBoYW5kbGUgdG9vbHRpcCBzaGlmdGluZyBib3RoIGluIE9uQ2hhbmdlcyBhbmQgQWZ0ZXJWaWV3SW5pdC4gSW4gY2FzZSBvZiBMaW5lYXIgZ2F1Z2Ugd2lkZ2V0LCB2aWV3IGlzXG4gICAgLy8gcmVuZGVyZWQgZmlyc3QgKHNvIGFzIGVsZW1lbnRzIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgc2hpZnRpbmcpIGFuZCBjb25maWcgb3JpZW50YXRpb24gaXMgc2V0IGxhdGVyIG9uLlxuICAgIC8vIEluIG90aGVyIGNhc2VzIGl0J3MgcG9zc2libGUgdGhhdCBvcmllbnRhdGlvbiBpcyBkZWZpbmVkIG9uIGluaXRpYWxpemF0aW9uIG9mIGNsYXNzIGFuZCB2aWV3IGVsZW1lbnRzIGFyZSByZW5kZXJlZCBsYXRlci5cbiAgICB0aGlzLnNldHVwVG9vbHRpcFNoaWZ0aW5nSWZQb3NzaWJsZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc2V0dXBUb29sdGlwU2hpZnRpbmdJZlBvc3NpYmxlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmN1cnJlbnRSYW5nZVdpZHRoT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY2hlY2tUYXJnZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29uZmlnLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuY29uZmlnLnRhcmdldCA+PSB0aGlzLmNvbmZpZy5taW4gJiZcbiAgICAgIHRoaXMuY29uZmlnLnRhcmdldCA8PSB0aGlzLmNvbmZpZy5tYXhcbiAgICApO1xuICB9XG5cbiAgcnVsZXJDYWxjKGluZGV4KSB7XG4gICAgY29uc3QgbnVtOiBudW1iZXIgPSB0aGlzLmNvbmZpZy5taW4gKyAoKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbikgLyAxMCkgKiBpbmRleDtcbiAgICBpZiAodGhpcy5jb25maWcuZnJhY3Rpb25TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bS50b0ZpeGVkKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0udG9GaXhlZCgyKSk7XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgaXNSZWRSYW5nZURpc3BsYXllZCgpIHtcbiAgICBjb25zdCB7IHJlZFJhbmdlTWluLCByZWRSYW5nZU1heCB9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIHRoaXMuaXNSYW5nZURpc3BsYXllZChyZWRSYW5nZU1pbiwgcmVkUmFuZ2VNYXgpO1xuICB9XG5cbiAgaXNZZWxsb3dSYW5nZURpc3BsYXllZCgpIHtcbiAgICBjb25zdCB7IHllbGxvd1JhbmdlTWluLCB5ZWxsb3dSYW5nZU1heCB9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIHRoaXMuaXNSYW5nZURpc3BsYXllZCh5ZWxsb3dSYW5nZU1pbiwgeWVsbG93UmFuZ2VNYXgpO1xuICB9XG5cbiAgaXNSYW5nZURpc3BsYXllZChyYW5nZU1pbiwgcmFuZ2VNYXgpIHtcbiAgICByZXR1cm4gcmFuZ2VNaW4gPT09IDAgfHwgcmFuZ2VNYXggPT09IDAgfHwgKHJhbmdlTWluICYmIHJhbmdlTWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUb29sdGlwU2hpZnRpbmcoKSB7XG4gICAgdGhpcy5jdXJyZW50UmFuZ2VXaWR0aE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChbdmFsXSkgPT4ge1xuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUodmFsLnRhcmdldCwgbnVsbCkuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRSYW5nZVdpZHRoQ2hhbmdlZC5uZXh0KHZhbC50YXJnZXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UmFuZ2VXaWR0aE9ic2VydmVyLm9ic2VydmUodGhpcy5jdXJyZW50UmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5jdXJyZW50UmFuZ2VXaWR0aENoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5DVVJSRU5UX1JBTkdFX1dJRFRIX1RSQU5TSVRJT05fVElNRSksXG4gICAgICAgIG1hcCgocmFuZ2VFbGVtZW50OiBFbGVtZW50KSA9PiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHJhbmdlRWxlbWVudCwgbnVsbCkud2lkdGgpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmFuZ2VFbGVtZW50V2lkdGggPT4ge1xuICAgICAgICB0aGlzLnNldFRvb2x0aXBTaGlmdFZhbHVlKHJhbmdlRWxlbWVudFdpZHRoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb29sdGlwU2hpZnRWYWx1ZShyYW5nZUVsZW1lbnRXaWR0aDogbnVtYmVyKSB7XG4gICAgY29uc3QgdG9vbHRpcFdpZHRoID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKHRoaXMuY3VycmVudFJhbmdlRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnOmFmdGVyJykud2lkdGhcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRSYW5nZVdpZHRoID0gcmFuZ2VFbGVtZW50V2lkdGg7XG4gICAgY29uc3QgcmFuZ2VEaXNwbGF5V2lkdGggPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUodGhpcy5yYW5nZURpc3BsYXkubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKVxuICAgICk7XG4gICAgY29uc3QgcmFuZ2VEaXNwbGF5UGFkZGluZ0xlZnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUodGhpcy5yYW5nZURpc3BsYXkubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0JylcbiAgICApO1xuICAgIGNvbnN0IHRvb2x0aXBPdmVyZmxvd3NMZWZ0RWRnZSA9IHRvb2x0aXBXaWR0aCAvIDIgPiByYW5nZURpc3BsYXlQYWRkaW5nTGVmdCArIGN1cnJlbnRSYW5nZVdpZHRoO1xuICAgIGNvbnN0IHRvb2x0aXBPdmVyZmxvd3NSaWdodEVkZ2UgPVxuICAgICAgdG9vbHRpcFdpZHRoIC8gMiA+IHJhbmdlRGlzcGxheVdpZHRoIC0gcmFuZ2VEaXNwbGF5UGFkZGluZ0xlZnQgLSBjdXJyZW50UmFuZ2VXaWR0aDtcbiAgICBpZiAodG9vbHRpcE92ZXJmbG93c0xlZnRFZGdlKSB7XG4gICAgICB0aGlzLnRvb2x0aXBTaGlmdCA9IGAke3Rvb2x0aXBXaWR0aCAtIHRoaXMuTUlOX1RPT0xUSVBfU0hJRlR9cHhgO1xuICAgIH0gZWxzZSBpZiAodG9vbHRpcE92ZXJmbG93c1JpZ2h0RWRnZSkge1xuICAgICAgdGhpcy50b29sdGlwU2hpZnQgPSBgJHt0aGlzLk1JTl9UT09MVElQX1NISUZUfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b29sdGlwU2hpZnQgPSB0aGlzLkRFRkFVTFRfVE9PTFRJUF9TSElGVDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwVG9vbHRpcFNoaWZ0aW5nSWZQb3NzaWJsZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZz8ub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgIXRoaXMuY3VycmVudFJhbmdlV2lkdGhPYnNlcnZlciAmJlxuICAgICAgdGhpcy5yYW5nZURpc3BsYXkgJiZcbiAgICAgIHRoaXMuY3VycmVudFJhbmdlRWxlbWVudFxuICAgICkge1xuICAgICAgdGhpcy5zZXR1cFRvb2x0aXBTaGlmdGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9vbHRpcEJhY2tncm91bmQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jb25maWcuY3VycmVudDtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgdGhpcy5pc1ZhbHVlSW5SYW5nZShjdXJyZW50LCB0aGlzLmNvbmZpZy5yZWRSYW5nZU1pbiwgdGhpcy5jb25maWcucmVkUmFuZ2VNYXgpOlxuICAgICAgICByZXR1cm4gJ3ZhcigtLWlucHV0LXZhbGlkYXRpb24tZXJyb3IsICNFMDAwMEUpJztcbiAgICAgIGNhc2UgdGhpcy5pc1ZhbHVlSW5SYW5nZShjdXJyZW50LCB0aGlzLmNvbmZpZy55ZWxsb3dSYW5nZU1pbiwgdGhpcy5jb25maWcueWVsbG93UmFuZ2VNYXgpOlxuICAgICAgICByZXR1cm4gJ3ZhcigtLWlucHV0LXZhbGlkYXRpb24td2FybmluZywgI0ZGODAxRiknO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd2YXIoLS1ncmF5LTMsICMzOTQ4NTIpJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzVmFsdWVJblJhbmdlKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCAmJiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4O1xuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ0NsYXNzXT1cIntcbiAgICAncmFuZ2UtZGlzcGxheS0tdmVydGljYWwnOiBjb25maWcub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcsXG4gICAgJ3JhbmdlLWRpc3BsYXktLWNvbXBhY3QnOiBkaXNwbGF5ID09PSAnY29tcGFjdCcsXG4gICAgJ3JhbmdlLWRpc3BsYXktLWlubGluZSc6IGRpc3BsYXkgPT09ICdpbmxpbmUnXG4gIH1cIlxuICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcudW5pdCB9fVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlcIlxuICAgICNyYW5nZURpc3BsYXlcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X19yYW5nZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlX191bml0XCI+XG4gICAgICAgIHt7IGNvbmZpZy51bml0IH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpc1llbGxvd1JhbmdlRGlzcGxheWVkKClcIlxuICAgICAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlX19taW5cIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImlzUmVkUmFuZ2VEaXNwbGF5ZWQoKVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21heFwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY2hlY2tUYXJnZXQoKVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX3RhcmdldFwiXG4gICAgICAgIGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy50YXJnZXQgfX0ge3sgY29uZmlnLnVuaXQgfX1cIlxuICAgICAgICB0aXRsZT1cInt7ICdUYXJnZXQnIHwgdHJhbnNsYXRlIH19OiB7eyBjb25maWcudGFyZ2V0IH19IHt7IGNvbmZpZy51bml0IH19XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICBjb25maWcuY3VycmVudCAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5jdXJyZW50ID49IGNvbmZpZy5taW4gJiZcbiAgICAgICAgICAgIGNvbmZpZy5jdXJyZW50IDw9IGNvbmZpZy5tYXhcbiAgICAgICAgICAgICAgPyAnYmxvY2snXG4gICAgICAgICAgICAgIDogJ25vbmUnXG4gICAgICAgIH1cIlxuICAgICAgICAjY3VycmVudFJhbmdlRWxlbWVudFxuICAgICAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlX19jdXJyZW50XCJcbiAgICAgICAgYXR0ci5kYXRhLWxhYmVsPVwie3sgY29uZmlnLmN1cnJlbnQgfX0ge3sgY29uZmlnLnVuaXQgfX0gJiN4YTt7eyBjb25maWcudGltZSB8IGM4eURhdGUgfX1cIlxuICAgICAgICB0aXRsZT1cInt7ICdDdXJyZW50JyB8IHRyYW5zbGF0ZSB9fToge3sgY29uZmlnLmN1cnJlbnQgfX0ge3sgY29uZmlnLnVuaXQgfX0gfCB7e1xuICAgICAgICAgIGNvbmZpZy50aW1lIHwgYzh5RGF0ZVxuICAgICAgICB9fVwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3J1bGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCB4IG9mIFtdLmNvbnN0cnVjdG9yKDEwKTsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgIGF0dHIuZGF0YS1sYWJlbD1cInt7IHJ1bGVyQ2FsYyhpbmRleCkgfX1cIlxuICAgICAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3RpY2tcIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcubWF4IHx8IDEwMCB8IG51bWJlciB9fVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fdGlja1wiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { Realtime } from '@c8y/client';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
|
-
import { share } from 'rxjs/operators';
|
|
4
|
+
import { distinctUntilChanged, share, shareReplay } from 'rxjs/operators';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@c8y/client";
|
|
7
7
|
/**
|
|
@@ -11,6 +11,8 @@ export class RealtimeSubjectService {
|
|
|
11
11
|
constructor(realtime) {
|
|
12
12
|
this.realtime = realtime;
|
|
13
13
|
this.subjects$ = new Map();
|
|
14
|
+
this.reconnect$ = this.createObservableForReconnect().pipe(share());
|
|
15
|
+
this.connectionStatus$ = this.createObservableForConnectionStatus().pipe(distinctUntilChanged(), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
14
16
|
}
|
|
15
17
|
getObservableForChannel(channel) {
|
|
16
18
|
if (this.subjects$.has(channel)) {
|
|
@@ -23,7 +25,7 @@ export class RealtimeSubjectService {
|
|
|
23
25
|
}
|
|
24
26
|
createObservableForChannel(channel, realtime) {
|
|
25
27
|
return new Observable(observer => {
|
|
26
|
-
|
|
28
|
+
let realtimeSubscription = realtime.subscribe(channel, msg => {
|
|
27
29
|
const data = {
|
|
28
30
|
channel: msg.channel,
|
|
29
31
|
data: msg.data.data,
|
|
@@ -32,13 +34,54 @@ export class RealtimeSubjectService {
|
|
|
32
34
|
};
|
|
33
35
|
observer.next(data);
|
|
34
36
|
});
|
|
37
|
+
/**
|
|
38
|
+
* In (rare) case of a re-handshake, resubscribe valid subscriptions.
|
|
39
|
+
* @see https://docs.cometd.org/current/reference/#_javascript_subscribe_resubscribe
|
|
40
|
+
*/
|
|
41
|
+
const reconnectSubscription = this.reconnect$.subscribe(() => {
|
|
42
|
+
try {
|
|
43
|
+
realtimeSubscription = this.realtime.resubscribe(realtimeSubscription);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
console.warn(`Failed to resubscribe to channel: "${channel}" after reconnect.`, e);
|
|
47
|
+
observer.error(e);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
35
50
|
return {
|
|
36
|
-
unsubscribe() {
|
|
51
|
+
unsubscribe: () => {
|
|
52
|
+
reconnectSubscription.unsubscribe();
|
|
37
53
|
realtime.unsubscribe(realtimeSubscription);
|
|
38
54
|
}
|
|
39
55
|
};
|
|
40
56
|
});
|
|
41
57
|
}
|
|
58
|
+
createObservableForReconnect() {
|
|
59
|
+
return new Observable(observer => {
|
|
60
|
+
const handle = this.realtime.addHandshakeListener(msg => {
|
|
61
|
+
if (msg.successful && msg.reestablish) {
|
|
62
|
+
observer.next();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
unsubscribe: () => {
|
|
67
|
+
this.realtime.removeListener(handle);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
createObservableForConnectionStatus() {
|
|
73
|
+
return new Observable(observer => {
|
|
74
|
+
observer.next(!this.realtime.isDisconnected() ? 'connected' : 'disconnected');
|
|
75
|
+
const handle = this.realtime.addConnectListener(msg => {
|
|
76
|
+
observer.next(msg.successful ? 'connected' : 'disconnected');
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
unsubscribe: () => {
|
|
80
|
+
this.realtime.removeListener(handle);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
42
85
|
}
|
|
43
86
|
RealtimeSubjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RealtimeSubjectService, deps: [{ token: i1.Realtime }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
44
87
|
RealtimeSubjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RealtimeSubjectService, providedIn: 'root' });
|
|
@@ -46,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
46
89
|
type: Injectable,
|
|
47
90
|
args: [{ providedIn: 'root' }]
|
|
48
91
|
}], ctorParameters: function () { return [{ type: i1.Realtime }]; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc3ViamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9yZWFsdGltZS9yZWFsdGltZS1zdWJqZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzFFOztHQUVHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRmhDLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztRQUcxRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxJQUFJLENBQ3RFLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUksT0FBZTtRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFtQyxDQUFDO1NBQ3RFO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFJLE9BQU8sRUFB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QUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEF4RlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FEVCxNQUFNOzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhbHRpbWUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVhbHRpbWVNZXNzYWdlIH0gZnJvbSAnLi9yZWFsdGltZS5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSAocHJvdmlkZWRJbiByb290KSB0aGF0IGVuc3VyZXMgdG8gb25seSBjcmVhdGUgYSBzaW5nbGUgcmVhbHRpbWUgc3Vic2NyaXB0aW9uIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZWFsdGltZVN1YmplY3RTZXJ2aWNlIHtcbiAgcmVjb25uZWN0JDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgY29ubmVjdGlvblN0YXR1cyQ6IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz47XG4gIHByaXZhdGUgc3ViamVjdHMkID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UmVhbHRpbWVNZXNzYWdlPHVua25vd24+Pj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhbHRpbWU6IFJlYWx0aW1lKSB7XG4gICAgdGhpcy5yZWNvbm5lY3QkID0gdGhpcy5jcmVhdGVPYnNlcnZhYmxlRm9yUmVjb25uZWN0KCkucGlwZShzaGFyZSgpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkID0gdGhpcy5jcmVhdGVPYnNlcnZhYmxlRm9yQ29ubmVjdGlvblN0YXR1cygpLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG4gIH1cblxuICBnZXRPYnNlcnZhYmxlRm9yQ2hhbm5lbDxUPihjaGFubmVsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIGlmICh0aGlzLnN1YmplY3RzJC5oYXMoY2hhbm5lbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1YmplY3RzJC5nZXQoY2hhbm5lbCkgYXMgT2JzZXJ2YWJsZTxSZWFsdGltZU1lc3NhZ2U8VD4+O1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuY3JlYXRlT2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4oY2hhbm5lbCwgdGhpcy5yZWFsdGltZSk7XG4gICAgY29uc3Qgc2hhcmVkT2JzZXJ2YWJsZSQgPSBvYnNlcnZhYmxlJC5waXBlKHNoYXJlKCkpO1xuICAgIHRoaXMuc3ViamVjdHMkLnNldChjaGFubmVsLCBzaGFyZWRPYnNlcnZhYmxlJCk7XG5cbiAgICByZXR1cm4gc2hhcmVkT2JzZXJ2YWJsZSQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlT2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4oXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHJlYWx0aW1lOiBSZWFsdGltZVxuICApOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSZWFsdGltZU1lc3NhZ2U8VD4+KG9ic2VydmVyID0+IHtcbiAgICAgIGxldCByZWFsdGltZVN1YnNjcmlwdGlvbiA9IHJlYWx0aW1lLnN1YnNjcmliZShjaGFubmVsLCBtc2cgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBSZWFsdGltZU1lc3NhZ2U8VD4gPSB7XG4gICAgICAgICAgY2hhbm5lbDogbXNnLmNoYW5uZWwsXG4gICAgICAgICAgZGF0YTogbXNnLmRhdGEuZGF0YSxcbiAgICAgICAgICBpZDogbXNnLmlkLFxuICAgICAgICAgIHJlYWx0aW1lQWN0aW9uOiBtc2cuZGF0YS5yZWFsdGltZUFjdGlvblxuICAgICAgICB9O1xuICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogSW4gKHJhcmUpIGNhc2Ugb2YgYSByZS1oYW5kc2hha2UsIHJlc3Vic2NyaWJlIHZhbGlkIHN1YnNjcmlwdGlvbnMuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5jb21ldGQub3JnL2N1cnJlbnQvcmVmZXJlbmNlLyNfamF2YXNjcmlwdF9zdWJzY3JpYmVfcmVzdWJzY3JpYmVcbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVjb25uZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5yZWNvbm5lY3QkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVhbHRpbWVTdWJzY3JpcHRpb24gPSB0aGlzLnJlYWx0aW1lLnJlc3Vic2NyaWJlKHJlYWx0aW1lU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHJlc3Vic2NyaWJlIHRvIGNoYW5uZWw6IFwiJHtjaGFubmVsfVwiIGFmdGVyIHJlY29ubmVjdC5gLCBlKTtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgcmVjb25uZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVhbHRpbWUudW5zdWJzY3JpYmUocmVhbHRpbWVTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU9ic2VydmFibGVGb3JSZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMucmVhbHRpbWUuYWRkSGFuZHNoYWtlTGlzdGVuZXIobXNnID0+IHtcbiAgICAgICAgaWYgKG1zZy5zdWNjZXNzZnVsICYmIG1zZy5yZWVzdGFibGlzaCkge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVhbHRpbWUucmVtb3ZlTGlzdGVuZXIoaGFuZGxlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYnNlcnZhYmxlRm9yQ29ubmVjdGlvblN0YXR1cygpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCghdGhpcy5yZWFsdGltZS5pc0Rpc2Nvbm5lY3RlZCgpID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICBjb25zdCBoYW5kbGUgPSB0aGlzLnJlYWx0aW1lLmFkZENvbm5lY3RMaXN0ZW5lcihtc2cgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KG1zZy5zdWNjZXNzZnVsID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFsdGltZS5yZW1vdmVMaXN0ZW5lcihoYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -15,6 +15,20 @@ export class RealtimeService {
|
|
|
15
15
|
get active() {
|
|
16
16
|
return this.isActive.value;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* An observable emitting a value in case the realtime connection has been interrupted.
|
|
20
|
+
* Can be used to reload data of e.g. a datapoint graph that wasn't received while realtime was interrupted.
|
|
21
|
+
*/
|
|
22
|
+
get reconnect$() {
|
|
23
|
+
return this.realtimeSubject.reconnect$;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An observable emitting either `connected` or `disconnected` depending on the state of the realtime connection.
|
|
27
|
+
* Can be used to e.g. inform the user about the interrupted realtime connection.
|
|
28
|
+
*/
|
|
29
|
+
get connectionStatus$() {
|
|
30
|
+
return this.realtimeSubject.connectionStatus$;
|
|
31
|
+
}
|
|
18
32
|
/**
|
|
19
33
|
* Get an Observable of all realtime notifications.
|
|
20
34
|
*
|
|
@@ -86,4 +100,4 @@ export class RealtimeService {
|
|
|
86
100
|
return entityOrId ? this.channel().replace('*', this.getIdString(entityOrId)) : this.channel();
|
|
87
101
|
}
|
|
88
102
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcmVhbHRpbWUvcmVhbHRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZUFBZTtJQTBCbkMsWUFBc0IsZUFBdUM7UUFBdkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBRnJELGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUVVLENBQUM7SUF6QmpFOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hELENBQUM7SUFNRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsVUFBMEM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFOUYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxVQUEwQztRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFFBQVEsQ0FBQyxFQUM5QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBUyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFVBQTBDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLEVBQzlDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFTLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsVUFBMEM7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsRUFDOUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzNDLENBQUM7SUFDSixDQUFDO0lBRVMsV0FBVyxDQUFDLFNBQXdDO1FBQzVELElBQUksRUFBbUIsQ0FBQztRQUN4QixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUNoQjtRQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFUyxVQUFVLENBQUMsVUFBMEM7UUFDN0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pHLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlYWx0aW1lU3ViamVjdFNlcnZpY2UgfSBmcm9tICcuL3JlYWx0aW1lLXN1YmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZWFsdGltZU1lc3NhZ2UgfSBmcm9tICcuL3JlYWx0aW1lLm1vZGVsJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgaW4gUnhKUyBmYXNoaW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVhbHRpbWVTZXJ2aWNlPFQ+IHtcbiAgLyoqXG4gICAqIEEgZmxhZyBkaXNwbGF5aW5nIGlmIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBhY3RpdmUuXG4gICAqL1xuICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIG9ic2VydmFibGUgZW1pdHRpbmcgYSB2YWx1ZSBpbiBjYXNlIHRoZSByZWFsdGltZSBjb25uZWN0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkLlxuICAgKiBDYW4gYmUgdXNlZCB0byByZWxvYWQgZGF0YSBvZiBlLmcuIGEgZGF0YXBvaW50IGdyYXBoIHRoYXQgd2Fzbid0IHJlY2VpdmVkIHdoaWxlIHJlYWx0aW1lIHdhcyBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGdldCByZWNvbm5lY3QkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lU3ViamVjdC5yZWNvbm5lY3QkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIG9ic2VydmFibGUgZW1pdHRpbmcgZWl0aGVyIGBjb25uZWN0ZWRgIG9yIGBkaXNjb25uZWN0ZWRgIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHJlYWx0aW1lIGNvbm5lY3Rpb24uXG4gICAqIENhbiBiZSB1c2VkIHRvIGUuZy4gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHRoZSBpbnRlcnJ1cHRlZCByZWFsdGltZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0dXMkKCk6IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4ge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lU3ViamVjdC5jb25uZWN0aW9uU3RhdHVzJDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFsdGltZVN1YmplY3Q6IFJlYWx0aW1lU3ViamVjdFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIG9mIGFsbCByZWFsdGltZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkfSBlbnRpdHlPcklkIEVudGl0eSBvYmplY3Qgb3IgaWRcbiAgICpcbiAgICogQHJldHVybnMgQW4gW1tPYnNlcnZhYmxlXV0gb2Ygbm90aWZpY2F0aW9ucyB3cmFwcGVkIGFzIFtbUmVhbHRpbWVNZXNzYWdlXV1cbiAgICovXG4gIG9uQWxsJChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIGNvbnN0IHN1YmplY3QkID0gdGhpcy5yZWFsdGltZVN1YmplY3QuZ2V0T2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4odGhpcy5nZXRDaGFubmVsKGVudGl0eU9ySWQpKTtcblxuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlLnBpcGUoc3dpdGNoTWFwKGFjdGl2ZSA9PiAoYWN0aXZlID8gc3ViamVjdCQgOiBORVZFUikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIGFnYWluIGFsbCByZWFsdGltZSBjaGFubmVscyB3aXRoIGFjdGl2ZSBvYnNlcnZlcnMuXG4gICAqL1xuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICB0aGlzLmlzQWN0aXZlLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgYW5kIHVuc3Vic2NyaWJlcyBhbGwgcmVhbHRpbWUgY2hhbm5lbHMuXG4gICAqL1xuICBzdG9wKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5pc0FjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIE9ic2VydmFibGUgb2YgYWxsIENSRUFURSByZWFsdGltZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkfSBlbnRpdHlPcklkIEVudGl0eSBvYmplY3Qgb3IgaWRcbiAgICpcbiAgICogQHJldHVybnMgQW4gW1tPYnNlcnZhYmxlXV0gb2YgbmV3bHkgY3JlYXRlZCBlbnRpdHkgb2JqZWN0cy5cbiAgICovXG4gIG9uQ3JlYXRlJChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFsbCQoZW50aXR5T3JJZCkucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLnJlYWx0aW1lQWN0aW9uID09PSAnQ1JFQVRFJyksXG4gICAgICBtYXAobXNnID0+IG1zZy5kYXRhIGFzIFQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgVVBEQVRFIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWR9IGVudGl0eU9ySWQgRW50aXR5IG9iamVjdCBvciBpZFxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBbW09ic2VydmFibGVdXSBvZiB1cGRhdGVkIGVudGl0eSBvYmplY3RzLlxuICAgKi9cbiAgb25VcGRhdGUkKGVudGl0eU9ySWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZCk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLm9uQWxsJChlbnRpdHlPcklkKS5waXBlKFxuICAgICAgZmlsdGVyKG1zZyA9PiBtc2cucmVhbHRpbWVBY3Rpb24gPT09ICdVUERBVEUnKSxcbiAgICAgIG1hcChtc2cgPT4gbXNnLmRhdGEgYXMgVClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIG9mIGFsbCBERUxFVEUgcmVhbHRpbWUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZH0gZW50aXR5T3JJZCBFbnRpdHkgb2JqZWN0IG9yIGlkXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIFtbT2JzZXJ2YWJsZV1dIG9mIGRlbGV0ZWQgZW50aXR5IG9iamVjdHMuXG4gICAqL1xuICBvbkRlbGV0ZSQoZW50aXR5T3JJZD86IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFsbCQoZW50aXR5T3JJZCkucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLnJlYWx0aW1lQWN0aW9uID09PSAnREVMRVRFJyksXG4gICAgICBtYXAobXNnID0+IGNvZXJjZU51bWJlclByb3BlcnR5KG1zZy5kYXRhKSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldElkU3RyaW5nKHJlZmVyZW5jZTogbnVtYmVyIHwgc3RyaW5nIHwgSUlkZW50aWZpZWQpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWQgPSByZWZlcmVuY2UuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0gcmVmZXJlbmNlO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDaGFubmVsKGVudGl0eU9ySWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZCkge1xuICAgIHJldHVybiBlbnRpdHlPcklkID8gdGhpcy5jaGFubmVsKCkucmVwbGFjZSgnKicsIHRoaXMuZ2V0SWRTdHJpbmcoZW50aXR5T3JJZCkpIDogdGhpcy5jaGFubmVsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hhbm5lbCgpOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LW5neC1jb21wb25lbnRzLWRldmljZS1wcm90b2NvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZpY2UtcHJvdG9jb2xzL2M4eS1uZ3gtY29tcG9uZW50cy1kZXZpY2UtcHJvdG9jb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|