UNPKG

ng-apexcharts

Version:
225 lines 27.7 kB
import { Component, ElementRef, Input, Output, ViewChild, NgZone, ChangeDetectionStrategy, EventEmitter, } from "@angular/core"; import { asapScheduler } from "rxjs"; import ApexCharts from "apexcharts"; import * as i0 from "@angular/core"; export class ChartComponent { constructor(ngZone) { this.ngZone = ngZone; this.autoUpdateSeries = true; this.chartReady = new EventEmitter(); } ngOnChanges(changes) { asapScheduler.schedule(() => { if (this.autoUpdateSeries && Object.keys(changes).filter((c) => c !== "series").length === 0) { this.updateSeries(this.series, true); return; } this.createElement(); }); } ngOnDestroy() { if (this.chartObj) { this.chartObj.destroy(); } } createElement() { const options = {}; if (this.annotations) { options.annotations = this.annotations; } if (this.chart) { options.chart = this.chart; } if (this.colors) { options.colors = this.colors; } if (this.dataLabels) { options.dataLabels = this.dataLabels; } if (this.series) { options.series = this.series; } if (this.stroke) { options.stroke = this.stroke; } if (this.labels) { options.labels = this.labels; } if (this.legend) { options.legend = this.legend; } if (this.fill) { options.fill = this.fill; } if (this.tooltip) { options.tooltip = this.tooltip; } if (this.plotOptions) { options.plotOptions = this.plotOptions; } if (this.responsive) { options.responsive = this.responsive; } if (this.markers) { options.markers = this.markers; } if (this.noData) { options.noData = this.noData; } if (this.xaxis) { options.xaxis = this.xaxis; } if (this.yaxis) { options.yaxis = this.yaxis; } if (this.forecastDataPoints) { options.forecastDataPoints = this.forecastDataPoints; } if (this.grid) { options.grid = this.grid; } if (this.states) { options.states = this.states; } if (this.title) { options.title = this.title; } if (this.subtitle) { options.subtitle = this.subtitle; } if (this.theme) { options.theme = this.theme; } if (this.chartObj) { this.chartObj.destroy(); } this.ngZone.runOutsideAngular(() => { this.chartObj = new ApexCharts(this.chartElement.nativeElement, options); }); this.render(); this.chartReady.emit({ chartObj: this.chartObj }); } render() { return this.ngZone.runOutsideAngular(() => this.chartObj.render()); } updateOptions(options, redrawPaths, animate, updateSyncedCharts) { return this.ngZone.runOutsideAngular(() => this.chartObj.updateOptions(options, redrawPaths, animate, updateSyncedCharts)); } updateSeries(newSeries, animate) { return this.ngZone.runOutsideAngular(() => this.chartObj.updateSeries(newSeries, animate)); } appendSeries(newSeries, animate) { this.ngZone.runOutsideAngular(() => this.chartObj.appendSeries(newSeries, animate)); } appendData(newData) { this.ngZone.runOutsideAngular(() => this.chartObj.appendData(newData)); } toggleSeries(seriesName) { return this.ngZone.runOutsideAngular(() => this.chartObj.toggleSeries(seriesName)); } showSeries(seriesName) { this.ngZone.runOutsideAngular(() => this.chartObj.showSeries(seriesName)); } hideSeries(seriesName) { this.ngZone.runOutsideAngular(() => this.chartObj.hideSeries(seriesName)); } resetSeries() { this.ngZone.runOutsideAngular(() => this.chartObj.resetSeries()); } zoomX(min, max) { this.ngZone.runOutsideAngular(() => this.chartObj.zoomX(min, max)); } toggleDataPointSelection(seriesIndex, dataPointIndex) { this.ngZone.runOutsideAngular(() => this.chartObj.toggleDataPointSelection(seriesIndex, dataPointIndex)); } destroy() { this.chartObj.destroy(); } setLocale(localeName) { this.ngZone.runOutsideAngular(() => this.chartObj.setLocale(localeName)); } paper() { this.ngZone.runOutsideAngular(() => this.chartObj.paper()); } addXaxisAnnotation(options, pushToMemory, context) { this.ngZone.runOutsideAngular(() => this.chartObj.addXaxisAnnotation(options, pushToMemory, context)); } addYaxisAnnotation(options, pushToMemory, context) { this.ngZone.runOutsideAngular(() => this.chartObj.addYaxisAnnotation(options, pushToMemory, context)); } addPointAnnotation(options, pushToMemory, context) { this.ngZone.runOutsideAngular(() => this.chartObj.addPointAnnotation(options, pushToMemory, context)); } removeAnnotation(id, options) { this.ngZone.runOutsideAngular(() => this.chartObj.removeAnnotation(id, options)); } clearAnnotations(options) { this.ngZone.runOutsideAngular(() => this.chartObj.clearAnnotations(options)); } dataURI(options) { return this.chartObj.dataURI(options); } } /** @nocollapse */ ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ChartComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ChartComponent, selector: "apx-chart", inputs: { chart: "chart", annotations: "annotations", colors: "colors", dataLabels: "dataLabels", series: "series", stroke: "stroke", labels: "labels", legend: "legend", markers: "markers", noData: "noData", fill: "fill", tooltip: "tooltip", plotOptions: "plotOptions", responsive: "responsive", xaxis: "xaxis", yaxis: "yaxis", forecastDataPoints: "forecastDataPoints", grid: "grid", states: "states", title: "title", subtitle: "subtitle", theme: "theme", autoUpdateSeries: "autoUpdateSeries" }, outputs: { chartReady: "chartReady" }, viewQueries: [{ propertyName: "chartElement", first: true, predicate: ["chart"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `<div #chart></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ChartComponent, decorators: [{ type: Component, args: [{ selector: "apx-chart", template: `<div #chart></div>`, changeDetection: ChangeDetectionStrategy.OnPush }] }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { chart: [{ type: Input }], annotations: [{ type: Input }], colors: [{ type: Input }], dataLabels: [{ type: Input }], series: [{ type: Input }], stroke: [{ type: Input }], labels: [{ type: Input }], legend: [{ type: Input }], markers: [{ type: Input }], noData: [{ type: Input }], fill: [{ type: Input }], tooltip: [{ type: Input }], plotOptions: [{ type: Input }], responsive: [{ type: Input }], xaxis: [{ type: Input }], yaxis: [{ type: Input }], forecastDataPoints: [{ type: Input }], grid: [{ type: Input }], states: [{ type: Input }], title: [{ type: Input }], subtitle: [{ type: Input }], theme: [{ type: Input }], autoUpdateSeries: [{ type: Input }], chartReady: [{ type: Output }], chartElement: [{ type: ViewChild, args: ["chart", { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYXBleGNoYXJ0cy9zcmMvbGliL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUlOLFNBQVMsRUFDVCxNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQXVCdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7O0FBT3BDLE1BQU0sT0FBTyxjQUFjO0lBK0J6QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVB6QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFdkIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFPMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUNFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDL0Q7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxD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c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUV1QyxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIE5nWm9uZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEFwZXhBbm5vdGF0aW9ucyxcbiAgQXBleEF4aXNDaGFydFNlcmllcyxcbiAgQXBleENoYXJ0LFxuICBBcGV4RGF0YUxhYmVscyxcbiAgQXBleEZpbGwsXG4gIEFwZXhHcmlkLFxuICBBcGV4TGVnZW5kLFxuICBBcGV4Tm9uQXhpc0NoYXJ0U2VyaWVzLFxuICBBcGV4TWFya2VycyxcbiAgQXBleE5vRGF0YSxcbiAgQXBleFBsb3RPcHRpb25zLFxuICBBcGV4UmVzcG9uc2l2ZSxcbiAgQXBleFN0YXRlcyxcbiAgQXBleFN0cm9rZSxcbiAgQXBleFRoZW1lLFxuICBBcGV4VGl0bGVTdWJ0aXRsZSxcbiAgQXBleFRvb2x0aXAsXG4gIEFwZXhYQXhpcyxcbiAgQXBleFlBeGlzLFxuICBBcGV4Rm9yZWNhc3REYXRhUG9pbnRzLFxufSBmcm9tIFwiLi4vbW9kZWwvYXBleC10eXBlc1wiO1xuaW1wb3J0IHsgYXNhcFNjaGVkdWxlciB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCBBcGV4Q2hhcnRzIGZyb20gXCJhcGV4Y2hhcnRzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHgtY2hhcnRcIixcbiAgdGVtcGxhdGU6IGA8ZGl2ICNjaGFydD48L2Rpdj5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY2hhcnQ6IEFwZXhDaGFydDtcbiAgQElucHV0KCkgYW5ub3RhdGlvbnM6IEFwZXhBbm5vdGF0aW9ucztcbiAgQElucHV0KCkgY29sb3JzOiBhbnlbXTtcbiAgQElucHV0KCkgZGF0YUxhYmVsczogQXBleERhdGFMYWJlbHM7XG4gIEBJbnB1dCgpIHNlcmllczogQXBleEF4aXNDaGFydFNlcmllcyB8IEFwZXhOb25BeGlzQ2hhcnRTZXJpZXM7XG4gIEBJbnB1dCgpIHN0cm9rZTogQXBleFN0cm9rZTtcbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgbGVnZW5kOiBBcGV4TGVnZW5kO1xuICBASW5wdXQoKSBtYXJrZXJzOiBBcGV4TWFya2VycztcbiAgQElucHV0KCkgbm9EYXRhOiBBcGV4Tm9EYXRhO1xuICBASW5wdXQoKSBmaWxsOiBBcGV4RmlsbDtcbiAgQElucHV0KCkgdG9vbHRpcDogQXBleFRvb2x0aXA7XG4gIEBJbnB1dCgpIHBsb3RPcHRpb25zOiBBcGV4UGxvdE9wdGlvbnM7XG4gIEBJbnB1dCgpIHJlc3BvbnNpdmU6IEFwZXhSZXNwb25zaXZlW107XG4gIEBJbnB1dCgpIHhheGlzOiBBcGV4WEF4aXM7XG4gIEBJbnB1dCgpIHlheGlzOiBBcGV4WUF4aXMgfCBBcGV4WUF4aXNbXTtcbiAgQElucHV0KCkgZm9yZWNhc3REYXRhUG9pbnRzOiBBcGV4Rm9yZWNhc3REYXRhUG9pbnRzO1xuICBASW5wdXQoKSBncmlkOiBBcGV4R3JpZDtcbiAgQElucHV0KCkgc3RhdGVzOiBBcGV4U3RhdGVzO1xuICBASW5wdXQoKSB0aXRsZTogQXBleFRpdGxlU3VidGl0bGU7XG4gIEBJbnB1dCgpIHN1YnRpdGxlOiBBcGV4VGl0bGVTdWJ0aXRsZTtcbiAgQElucHV0KCkgdGhlbWU6IEFwZXhUaGVtZTtcblxuICBASW5wdXQoKSBhdXRvVXBkYXRlU2VyaWVzID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgY2hhcnRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKFwiY2hhcnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjaGFydEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2hhcnRPYmo6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBhc2FwU2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlU2VyaWVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLmZpbHRlcigoYykgPT4gYyAhPT0gXCJzZXJpZXNcIikubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZXJpZXModGhpcy5zZXJpZXMsIHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3JlYXRlRWxlbWVudCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhcnRPYmopIHtcbiAgICAgIHRoaXMuY2hhcnRPYmouZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWxlbWVudCgpIHtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7fTtcblxuICAgIGlmICh0aGlzLmFubm90YXRpb25zKSB7XG4gICAgICBvcHRpb25zLmFubm90YXRpb25zID0gdGhpcy5hbm5vdGF0aW9ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIG9wdGlvbnMuY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5jb2xvcnMpIHtcbiAgICAgIG9wdGlvbnMuY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFMYWJlbHMpIHtcbiAgICAgIG9wdGlvbnMuZGF0YUxhYmVscyA9IHRoaXMuZGF0YUxhYmVscztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VyaWVzKSB7XG4gICAgICBvcHRpb25zLnNlcmllcyA9IHRoaXMuc2VyaWVzO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJva2UpIHtcbiAgICAgIG9wdGlvbnMuc3Ryb2tlID0gdGhpcy5zdHJva2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmxhYmVscykge1xuICAgICAgb3B0aW9ucy5sYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICB9XG4gICAgaWYgKHRoaXMubGVnZW5kKSB7XG4gICAgICBvcHRpb25zLmxlZ2VuZCA9IHRoaXMubGVnZW5kO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWxsKSB7XG4gICAgICBvcHRpb25zLmZpbGwgPSB0aGlzLmZpbGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvb2x0aXApIHtcbiAgICAgIG9wdGlvbnMudG9vbHRpcCA9IHRoaXMudG9vbHRpcDtcbiAgICB9XG4gICAgaWYgKHRoaXMucGxvdE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMucGxvdE9wdGlvbnMgPSB0aGlzLnBsb3RPcHRpb25zO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNwb25zaXZlKSB7XG4gICAgICBvcHRpb25zLnJlc3BvbnNpdmUgPSB0aGlzLnJlc3BvbnNpdmU7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hcmtlcnMpIHtcbiAgICAgIG9wdGlvbnMubWFya2VycyA9IHRoaXMubWFya2VycztcbiAgICB9XG4gICAgaWYgKHRoaXMubm9EYXRhKSB7XG4gICAgICBvcHRpb25zLm5vRGF0YSA9IHRoaXMubm9EYXRhO1xuICAgIH1cbiAgICBpZiAodGhpcy54YXhpcykge1xuICAgICAgb3B0aW9ucy54YXhpcyA9IHRoaXMueGF4aXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnlheGlzKSB7XG4gICAgICBvcHRpb25zLnlheGlzID0gdGhpcy55YXhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9yZWNhc3REYXRhUG9pbnRzKSB7XG4gICAgICBvcHRpb25zLmZvcmVjYXN0RGF0YVBvaW50cyA9IHRoaXMuZm9yZWNhc3REYXRhUG9pbnRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncmlkKSB7XG4gICAgICBvcHRpb25zLmdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgb3B0aW9ucy5zdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICB9XG4gICAgaWYgKHRoaXMudGl0bGUpIHtcbiAgICAgIG9wdGlvbnMudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJ0aXRsZSkge1xuICAgICAgb3B0aW9ucy5zdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRoZW1lKSB7XG4gICAgICBvcHRpb25zLnRoZW1lID0gdGhpcy50aGVtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFydE9iaikge1xuICAgICAgdGhpcy5jaGFydE9iai5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5jaGFydE9iaiA9IG5ldyBBcGV4Q2hhcnRzKHRoaXMuY2hhcnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLmNoYXJ0UmVhZHkuZW1pdCh7Y2hhcnRPYmo6IHRoaXMuY2hhcnRPYmp9KVxuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydE9iai5yZW5kZXIoKSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3B0aW9ucyhcbiAgICBvcHRpb25zOiBhbnksXG4gICAgcmVkcmF3UGF0aHM/OiBib29sZWFuLFxuICAgIGFuaW1hdGU/OiBib29sZWFuLFxuICAgIHVwZGF0ZVN5bmNlZENoYXJ0cz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmoudXBkYXRlT3B0aW9ucyhcbiAgICAgIG9wdGlvbnMsXG4gICAgICByZWRyYXdQYXRocyxcbiAgICAgIGFuaW1hdGUsXG4gICAgICB1cGRhdGVTeW5jZWRDaGFydHNcbiAgICApKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZXJpZXMoXG4gICAgbmV3U2VyaWVzOiBBcGV4QXhpc0NoYXJ0U2VyaWVzIHwgQXBleE5vbkF4aXNDaGFydFNlcmllcyxcbiAgICBhbmltYXRlPzogYm9vbGVhblxuICApIHtcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydE9iai51cGRhdGVTZXJpZXMobmV3U2VyaWVzLCBhbmltYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kU2VyaWVzKFxuICAgIG5ld1NlcmllczogQXBleEF4aXNDaGFydFNlcmllcyB8IEFwZXhOb25BeGlzQ2hhcnRTZXJpZXMsXG4gICAgYW5pbWF0ZT86IGJvb2xlYW5cbiAgKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydE9iai5hcHBlbmRTZXJpZXMobmV3U2VyaWVzLCBhbmltYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kRGF0YShuZXdEYXRhOiBhbnlbXSkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmouYXBwZW5kRGF0YShuZXdEYXRhKSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VyaWVzKHNlcmllc05hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmoudG9nZ2xlU2VyaWVzKHNlcmllc05hbWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93U2VyaWVzKHNlcmllc05hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmouc2hvd1NlcmllcyhzZXJpZXNOYW1lKSk7XG4gIH1cblxuICBwdWJsaWMgaGlkZVNlcmllcyhzZXJpZXNOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLmhpZGVTZXJpZXMoc2VyaWVzTmFtZSkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0U2VyaWVzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmoucmVzZXRTZXJpZXMoKSk7XG4gIH1cblxuICBwdWJsaWMgem9vbVgobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydE9iai56b29tWChtaW4sIG1heCkpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURhdGFQb2ludFNlbGVjdGlvbihcbiAgICBzZXJpZXNJbmRleDogbnVtYmVyLFxuICAgIGRhdGFQb2ludEluZGV4PzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnRPYmoudG9nZ2xlRGF0YVBvaW50U2VsZWN0aW9uKHNlcmllc0luZGV4LCBkYXRhUG9pbnRJbmRleCkpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jaGFydE9iai5kZXN0cm95KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TG9jYWxlKGxvY2FsZU5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLnNldExvY2FsZShsb2NhbGVOYW1lKSk7XG4gIH1cblxuICBwdWJsaWMgcGFwZXIoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jaGFydE9iai5wYXBlcigpKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRYYXhpc0Fubm90YXRpb24oXG4gICAgb3B0aW9uczogYW55LFxuICAgIHB1c2hUb01lbW9yeT86IGJvb2xlYW4sXG4gICAgY29udGV4dD86IGFueVxuICApIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLmFkZFhheGlzQW5ub3RhdGlvbihvcHRpb25zLCBwdXNoVG9NZW1vcnksIGNvbnRleHQpKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRZYXhpc0Fubm90YXRpb24oXG4gICAgb3B0aW9uczogYW55LFxuICAgIHB1c2hUb01lbW9yeT86IGJvb2xlYW4sXG4gICAgY29udGV4dD86IGFueVxuICApIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLmFkZFlheGlzQW5ub3RhdGlvbihvcHRpb25zLCBwdXNoVG9NZW1vcnksIGNvbnRleHQpKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQb2ludEFubm90YXRpb24oXG4gICAgb3B0aW9uczogYW55LFxuICAgIHB1c2hUb01lbW9yeT86IGJvb2xlYW4sXG4gICAgY29udGV4dD86IGFueVxuICApIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLmFkZFBvaW50QW5ub3RhdGlvbihvcHRpb25zLCBwdXNoVG9NZW1vcnksIGNvbnRleHQpKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBbm5vdGF0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLnJlbW92ZUFubm90YXRpb24oaWQsIG9wdGlvbnMpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFubm90YXRpb25zKG9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNoYXJ0T2JqLmNsZWFyQW5ub3RhdGlvbnMob3B0aW9ucykpO1xuICB9XG5cbiAgcHVibGljIGRhdGFVUkkob3B0aW9ucz86IGFueSk6IFByb21pc2U8eyBpbWdVUkk6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnRPYmouZGF0YVVSSShvcHRpb25zKTtcbiAgfVxufVxuIl19