@alauda-fe/common
Version:
Alauda frontend team common codes.
214 lines (213 loc) • 18.3 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
import dayjs from 'dayjs';
import { map } from 'rxjs';
import { ContextChartService } from '../../chart.service';
import { Orientation } from '../../types';
import { ScaleType, reduceTicks } from '../../utils';
import * as i0 from "@angular/core";
import * as i1 from "../../chart.service";
import * as i2 from "@angular/common";
import * as i3 from "../../../translate/translate.pipe";
const _c0 = ["aclXAxisTicks", ""];
function XAxisTicksComponent_ng_container_0__svg_g_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(0, "g")(1, "text", 4);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelement(4, "line", 5);
i0.ɵɵelementEnd();
} if (rf & 2) {
const tick_r1 = ctx.$implicit;
const i_r2 = ctx.index;
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵattribute("x", i_r2 === ctx_r2.ticks.length - 1 && tick_r1.x >= (ctx_r2.context.chartView == null ? null : ctx_r2.context.chartView.height) ? tick_r1.x - 5 : tick_r1.x)("y", tick_r1.y + 16)("text-anchor", ctx_r2.textAnchor);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", ctx_r2.translation ? i0.ɵɵpipeBind1(3, 8, tick_r1.value) : tick_r1.value, " ");
i0.ɵɵadvance(2);
i0.ɵɵattribute("x1", tick_r1.x)("x2", tick_r1.x)("y1", tick_r1.y)("y2", tick_r1.y + 6);
} }
function XAxisTicksComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, XAxisTicksComponent_ng_container_0__svg_g_1_Template, 5, 10, "g", 2);
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(2, "g");
i0.ɵɵelement(3, "path", 3);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", ctx_r2.ticks);
i0.ɵɵadvance(2);
i0.ɵɵattribute("d", ctx_r2.xAxisLine);
} }
function XAxisTicksComponent_ng_template_1__svg_g_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(0, "g")(1, "text", 6);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵpipe(4, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const tick_r4 = ctx.$implicit;
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵattribute("y", tick_r4.x);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", ctx_r2.translation ? i0.ɵɵpipeBind1(4, 4, i0.ɵɵpipeBind1(3, 2, tick_r4.value)) : tick_r4.value, " ");
} }
function XAxisTicksComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, XAxisTicksComponent_ng_template_1__svg_g_0_Template, 5, 6, "g", 2);
i0.ɵɵnamespaceSVG();
i0.ɵɵelementStart(1, "g");
i0.ɵɵelement(2, "path", 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵproperty("ngForOf", ctx_r2.ticks);
i0.ɵɵadvance(2);
i0.ɵɵattribute("d", ctx_r2.yAxisLine);
} }
export class XAxisTicksComponent {
get context() {
return this.contextService;
}
get yAxisLine() {
return `M${0} ${0}L${0} ${this.context.chartView.height}Z`;
}
get xAxisLine() {
const { width } = this.contextService.chartView;
return `M0 0L${width} 0Z`;
}
getTicks() {
let ticks;
if (this.context.scaleType === ScaleType.ORDINAL) {
const maxTicks = this.getMaxTicks(20);
ticks = reduceTicks(this.context.x.domain(), maxTicks).map(this.handleTicksData);
}
else {
ticks = this.context.x
.ticks(this.getMaxTicks(100))
.map(this.handleTicksData);
}
return ticks;
}
getMaxTicks(tickWidth) {
const width = this.context.horizontal
? this.context.chartView.height
: this.context.chartView.width;
return Math.floor(width / tickWidth);
}
constructor(contextService, cdr) {
this.contextService = contextService;
this.cdr = cdr;
this.textAnchor = 'middle';
this.orientation = Orientation;
this.handleTicksData = (value) => {
const bandwidth = this.context.barOptions.isBand
? this.context.x.bandwidth() * 0.5
: 0;
return {
value: this.format(value),
x: this.context.x(value) + bandwidth,
y: 0,
};
};
}
ngOnInit() {
this.contextService.seriesData$
.pipe(map(() => this.getTicks()))
.subscribe(res => {
this.ticks = res;
this.cdr.detectChanges();
});
}
format(value) {
return this.contextService.scaleType === ScaleType.TIME
? dayjs(value).format(this.dateFormat)
: value;
}
static { this.ɵfac = function XAxisTicksComponent_Factory(t) { return new (t || XAxisTicksComponent)(i0.ɵɵdirectiveInject(i1.ContextChartService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: XAxisTicksComponent, selectors: [["g", "aclXAxisTicks", ""]], inputs: { dateFormat: "dateFormat", translation: "translation" }, attrs: _c0, decls: 3, vars: 2, consts: [["elseTemplate", ""], [4, "ngIf", "ngIfElse"], [4, "ngFor", "ngForOf"], ["stroke", "#ccd6eb", "fill", "none"], ["fill", "#666", "font-size", "11"], ["stroke-width", "1", "stroke", "#ccd6eb"], ["x", "-8", "fill", "#666", "text-anchor", "end", "font-size", "11", "alignment-baseline", "middle"]], template: function XAxisTicksComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, XAxisTicksComponent_ng_container_0_Template, 4, 2, "ng-container", 1)(1, XAxisTicksComponent_ng_template_1_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const elseTemplate_r5 = i0.ɵɵreference(2);
i0.ɵɵproperty("ngIf", ctx.context.barOptions.orientation === ctx.orientation.VERTICAL)("ngIfElse", elseTemplate_r5);
} }, dependencies: [i2.NgForOf, i2.NgIf, i3.TranslatePipe], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(XAxisTicksComponent, [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'g[aclXAxisTicks]',
template: `
<ng-container
*ngIf="
context.barOptions.orientation === orientation.VERTICAL;
else elseTemplate
"
>
<svg:g *ngFor="let tick of ticks; let i = index">
<text
[attr.x]="
i === ticks.length - 1 && tick.x >= context.chartView?.height
? tick.x - 5
: tick.x
"
[attr.y]="tick.y + 16"
fill="#666"
[attr.text-anchor]="textAnchor"
font-size="11"
>
{{ translation ? (tick.value | translate) : tick.value }}
</text>
<line
[attr.x1]="tick.x"
[attr.x2]="tick.x"
[attr.y1]="tick.y"
[attr.y2]="tick.y + 6"
stroke-width="1"
stroke="#ccd6eb"
></line>
</svg:g>
<svg:g>
<path
[attr.d]="xAxisLine"
stroke="#ccd6eb"
fill="none"
/>
</svg:g>
</ng-container>
<ng-template #elseTemplate>
<svg:g *ngFor="let tick of ticks; let i = index">
<text
x="-8"
[attr.y]="tick.x"
fill="#666"
text-anchor="end"
font-size="11"
alignment-baseline="middle"
>
{{ translation ? (tick.value | translate | translate) : tick.value }}
</text>
</svg:g>
<svg:g>
<path
[attr.d]="yAxisLine"
stroke="#ccd6eb"
fill="none"
/>
</svg:g>
</ng-template>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], () => [{ type: i1.ContextChartService }, { type: i0.ChangeDetectorRef }], { dateFormat: [{
type: Input
}], translation: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(XAxisTicksComponent, { className: "XAxisTicksComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieC1heGlzLXRpY2tzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jaGFydC9jb21tb24vYXhpcy94LWF4aXMtdGlja3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7O0lBYTdDLEFBREYseUJBQWlELGNBVzlDO0lBQ0MsWUFDRjs7SUFBQSxpQkFBTztJQUNQLDBCQU9RO0lBQ1YsaUJBQVE7Ozs7O0lBcEJKLGNBSUM7O0lBTUQsY0FDRjtJQURFLHlHQUNGO0lBRUUsZUFBa0I7Ozs7SUFyQnhCLDZCQUtDO0lBQ0MscUZBQWlEOztJQXVCakQseUJBQU87SUFDTCwwQkFJRTtJQUNKLGlCQUFROzs7O0lBN0JnQixjQUFVO0lBQVYsc0NBQVU7SUF5QjlCLGVBQW9COzs7OztJQVN0QixBQURGLHlCQUFpRCxjQVE5QztJQUNDLFlBQ0Y7OztJQUNGLEFBREUsaUJBQU8sRUFDRDs7OztJQVJKLGNBQWlCOztJQU1qQixjQUNGO0lBREUsK0hBQ0Y7OztJQVZGLG1GQUFpRDs7SUFZakQseUJBQU87SUFDTCwwQkFJRTtJQUNKLGlCQUFROzs7SUFsQmdCLHNDQUFVO0lBYzlCLGVBQW9COzs7QUFTOUIsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixJ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QUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDO29GQXhFVSxtQkFBbUI7b0VBQW5CLG1CQUFtQjtZQXhCNUIsQUF0Q0Esc0ZBS0Msd0dBaUMwQjs7O1lBbkNkLEFBRlYsc0ZBRVUsNkJBRWpCOzs7aUZBeURhLG1CQUFtQjtjQWxFL0IsU0FBUztlQUFDO2dCQUNULDhEQUE4RDtnQkFDOUQsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RFQ7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0ZBRVUsVUFBVTtrQkFBbEIsS0FBSztZQUVHLFdBQVc7a0JBQW5CLEtBQUs7O2tGQUhLLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjYWxlUG9pbnQsIFNjYWxlVGltZSB9IGZyb20gJ2QzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29udGV4dENoYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZW50YXRpb24sIFRpY2ssIFRpY2tWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNjYWxlVHlwZSwgcmVkdWNlVGlja3MgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2dbYWNsWEF4aXNUaWNrc10nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGNvbnRleHQuYmFyT3B0aW9ucy5vcmllbnRhdGlvbiA9PT0gb3JpZW50YXRpb24uVkVSVElDQUw7XG4gICAgICAgIGVsc2UgZWxzZVRlbXBsYXRlXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxzdmc6ZyAqbmdGb3I9XCJsZXQgdGljayBvZiB0aWNrczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiXG4gICAgICAgICAgICBpID09PSB0aWNrcy5sZW5ndGggLSAxICYmIHRpY2sueCA+PSBjb250ZXh0LmNoYXJ0Vmlldz8uaGVpZ2h0XG4gICAgICAgICAgICAgID8gdGljay54IC0gNVxuICAgICAgICAgICAgICA6IHRpY2sueFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIueV09XCJ0aWNrLnkgKyAxNlwiXG4gICAgICAgICAgZmlsbD1cIiM2NjZcIlxuICAgICAgICAgIFthdHRyLnRleHQtYW5jaG9yXT1cInRleHRBbmNob3JcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjExXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRyYW5zbGF0aW9uID8gKHRpY2sudmFsdWUgfCB0cmFuc2xhdGUpIDogdGljay52YWx1ZSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJ0aWNrLnhcIlxuICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgW2F0dHIueTJdPVwidGljay55ICsgNlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI2NjZDZlYlwiXG4gICAgICAgID48L2xpbmU+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgPHN2ZzpnPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIFthdHRyLmRdPVwieEF4aXNMaW5lXCJcbiAgICAgICAgICBzdHJva2U9XCIjY2NkNmViXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICA8c3ZnOmcgKm5nRm9yPVwibGV0IHRpY2sgb2YgdGlja3M7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiLThcIlxuICAgICAgICAgIFthdHRyLnldPVwidGljay54XCJcbiAgICAgICAgICBmaWxsPVwiIzY2NlwiXG4gICAgICAgICAgdGV4dC1hbmNob3I9XCJlbmRcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjExXCJcbiAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdHJhbnNsYXRpb24gPyAodGljay52YWx1ZSB8IHRyYW5zbGF0ZSB8IHRyYW5zbGF0ZSkgOiB0aWNrLnZhbHVlIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvc3ZnOmc+XG4gICAgICA8c3ZnOmc+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgW2F0dHIuZF09XCJ5QXhpc0xpbmVcIlxuICAgICAgICAgIHN0cm9rZT1cIiNjY2Q2ZWJcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnOmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFhBeGlzVGlja3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgdGV4dEFuY2hvciA9ICdtaWRkbGUnO1xuICBvcmllbnRhdGlvbiA9IE9yaWVudGF0aW9uO1xuICBnZXQgY29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZTtcbiAgfVxuXG4gIHRpY2tzOiBUaWNrW107XG4gIGdldCB5QXhpc0xpbmUoKSB7XG4gICAgcmV0dXJuIGBNJHswfSAkezB9TCR7MH0gJHt0aGlzLmNvbnRleHQuY2hhcnRWaWV3LmhlaWdodH1aYDtcbiAgfVxuXG4gIGdldCB4QXhpc0xpbmUoKSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gdGhpcy5jb250ZXh0U2VydmljZS5jaGFydFZpZXc7XG4gICAgcmV0dXJuIGBNMCAwTCR7d2lkdGh9IDBaYDtcbiAgfVxuXG4gIGdldFRpY2tzKCkge1xuICAgIGxldCB0aWNrczogVGlja1tdO1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NhbGVUeXBlID09PSBTY2FsZVR5cGUuT1JESU5BTCkge1xuICAgICAgY29uc3QgbWF4VGlja3MgPSB0aGlzLmdldE1heFRpY2tzKDIwKTtcbiAgICAgIHRpY2tzID0gcmVkdWNlVGlja3ModGhpcy5jb250ZXh0LnguZG9tYWluKCksIG1heFRpY2tzKS5tYXAoXG4gICAgICAgIHRoaXMuaGFuZGxlVGlja3NEYXRhLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGlja3MgPSAodGhpcy5jb250ZXh0LnggYXMgU2NhbGVUaW1lPG51bWJlciwgbnVtYmVyPilcbiAgICAgICAgLnRpY2tzKHRoaXMuZ2V0TWF4VGlja3MoMTAwKSlcbiAgICAgICAgLm1hcCh0aGlzLmhhbmRsZVRpY2tzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aWNrcztcbiAgfVxuXG4gIGhhbmRsZVRpY2tzRGF0YSA9ICh2YWx1ZTogVGlja1ZhbHVlKTogVGljayA9PiB7XG4gICAgY29uc3QgYmFuZHdpZHRoID0gdGhpcy5jb250ZXh0LmJhck9wdGlvbnMuaXNCYW5kXG4gICAgICA/ICh0aGlzLmNvbnRleHQueCBhcyBTY2FsZVBvaW50PHN0cmluZz4pLmJhbmR3aWR0aCgpICogMC41XG4gICAgICA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1hdCh2YWx1ZSksXG4gICAgICB4OiB0aGlzLmNvbnRleHQueCh2YWx1ZSkgKyBiYW5kd2lkdGgsXG4gICAgICB5OiAwLFxuICAgIH0gYXMgVGljaztcbiAgfTtcblxuICBnZXRNYXhUaWNrcyh0aWNrV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbnRleHQuaG9yaXpvbnRhbFxuICAgICAgPyB0aGlzLmNvbnRleHQuY2hhcnRWaWV3LmhlaWdodFxuICAgICAgOiB0aGlzLmNvbnRleHQuY2hhcnRWaWV3LndpZHRoO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHdpZHRoIC8gdGlja1dpZHRoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dFNlcnZpY2U6IENvbnRleHRDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5zZXJpZXNEYXRhJFxuICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0VGlja3MoKSkpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudGlja3MgPSByZXM7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2Uuc2NhbGVUeXBlID09PSBTY2FsZVR5cGUuVElNRVxuICAgICAgPyBkYXlqcyh2YWx1ZSkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdClcbiAgICAgIDogdmFsdWU7XG4gIH1cbn1cbiJdfQ==