@lxlib/chart
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.
296 lines • 21.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: tag-cloud.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __assign, __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, ViewEncapsulation, } from '@angular/core';
import DataSet from '@antv/data-set';
import { Chart, registerShape, Util } from '@antv/g2';
import { InputNumber } from '@lxlib/util';
import { fromEvent } from 'rxjs';
import { debounceTime, filter } from 'rxjs/operators';
/**
* @record
*/
export function G2TagCloudData() { }
if (false) {
/** @type {?|undefined} */
G2TagCloudData.prototype.x;
/** @type {?|undefined} */
G2TagCloudData.prototype.value;
/** @type {?|undefined} */
G2TagCloudData.prototype.category;
/* Skipping unhandled member: [key: string]: any;*/
}
var G2TagCloudComponent = /** @class */ (function () {
// #endregion
function G2TagCloudComponent(el, ngZone) {
this.el = el;
this.ngZone = ngZone;
// #region fields
this.delay = 0;
this.height = 100;
this.padding = 0;
this.data = [];
}
/**
* @private
* @return {?}
*/
G2TagCloudComponent.prototype.initTagCloud = /**
* @private
* @return {?}
*/
function () {
// 给point注册一个词云的shape
registerShape('point', 'cloud', {
draw: /**
* @param {?} cfg
* @param {?} container
* @return {?}
*/
function (cfg, container) {
/** @type {?} */
var data = (/** @type {?} */ (cfg.data));
/** @type {?} */
var textShape = container.addShape('text', {
attrs: __assign(__assign(__assign({}, cfg.defaultStyle), cfg.style), { fontSize: data.size, text: data.text, textAlign: 'center', fontFamily: data.font, fill: cfg.color, textBaseline: 'Alphabetic', x: cfg.x, y: cfg.y }),
});
if (data.rotate) {
Util.rotate(textShape, (data.rotate * Math.PI) / 180);
}
return textShape;
},
});
};
/**
* @private
* @return {?}
*/
G2TagCloudComponent.prototype.install = /**
* @private
* @return {?}
*/
function () {
var _a = this, el = _a.el, padding = _a.padding, height = _a.height;
/** @type {?} */
var chart = (this.chart = new Chart({
container: el.nativeElement,
padding: padding,
height: height,
}));
chart.legend(false);
chart.axis(false);
chart.tooltip({
showTitle: false,
showMarkers: false,
});
chart.coordinate().reflect('x');
chart.point().position('x*y').color('category').shape('cloud').tooltip('value*category');
chart.interaction('element-active');
this.attachChart();
};
/**
* @private
* @return {?}
*/
G2TagCloudComponent.prototype.attachChart = /**
* @private
* @return {?}
*/
function () {
var _a = this, chart = _a.chart, height = _a.height, padding = _a.padding, data = _a.data;
if (!chart || !data || data.length <= 0)
return;
chart.height = height;
chart.padding = padding;
chart.forceFit();
/** @type {?} */
var dv = new DataSet.View().source(data);
/** @type {?} */
var range = dv.range('value');
/** @type {?} */
var min = range[0];
/** @type {?} */
var max = range[1];
dv.transform((/** @type {?} */ ({
type: 'tag-cloud',
fields: ['x', 'value'],
size: [chart.width, chart.height],
padding: typeof padding === 'number' ? padding : undefined,
timeInterval: 5000,
// max execute time
rotate: (/**
* @return {?}
*/
function () {
/** @type {?} */
var random = ~~(Math.random() * 4) % 4;
if (random === 2) {
random = 0;
}
return random * 90; // 0, 90, 270
}),
fontSize: /**
* @param {?} d
* @return {?}
*/
function (d) {
if (d.value) {
return ((d.value - min) / (max - min)) * (80 - 24) + 24;
}
return 0;
},
})));
chart.scale({
x: { nice: false },
y: { nice: false },
});
chart.changeData(dv.rows);
chart.render();
};
/**
* @private
* @return {?}
*/
G2TagCloudComponent.prototype._attachChart = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () { return _this.attachChart(); }));
};
/**
* @private
* @return {?}
*/
G2TagCloudComponent.prototype.installResizeEvent = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.resize$ = fromEvent(window, 'resize')
.pipe(filter((/**
* @return {?}
*/
function () { return !!_this.chart; })), debounceTime(200))
.subscribe((/**
* @return {?}
*/
function () { return _this._attachChart(); }));
};
/**
* @return {?}
*/
G2TagCloudComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.initTagCloud();
this.installResizeEvent();
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () { return setTimeout((/**
* @return {?}
*/
function () { return _this.install(); }), _this.delay); }));
};
/**
* @return {?}
*/
G2TagCloudComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this._attachChart();
};
/**
* @return {?}
*/
G2TagCloudComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
var _this = this;
this.resize$.unsubscribe();
if (this.chart) {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () { return _this.chart.destroy(); }));
}
};
G2TagCloudComponent.decorators = [
{ type: Component, args: [{
selector: 'g2-tag-cloud',
exportAs: 'g2TagCloud',
template: "",
host: {
'[style.height.px]': 'height',
},
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
G2TagCloudComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: NgZone }
]; };
G2TagCloudComponent.propDecorators = {
delay: [{ type: Input }],
height: [{ type: Input }],
padding: [{ type: Input }],
data: [{ type: Input }]
};
__decorate([
InputNumber(),
__metadata("design:type", Object)
], G2TagCloudComponent.prototype, "delay", void 0);
__decorate([
InputNumber(),
__metadata("design:type", Object)
], G2TagCloudComponent.prototype, "height", void 0);
return G2TagCloudComponent;
}());
export { G2TagCloudComponent };
if (false) {
/**
* @type {?}
* @private
*/
G2TagCloudComponent.prototype.resize$;
/**
* @type {?}
* @private
*/
G2TagCloudComponent.prototype.chart;
/** @type {?} */
G2TagCloudComponent.prototype.delay;
/** @type {?} */
G2TagCloudComponent.prototype.height;
/** @type {?} */
G2TagCloudComponent.prototype.padding;
/** @type {?} */
G2TagCloudComponent.prototype.data;
/**
* @type {?}
* @private
*/
G2TagCloudComponent.prototype.el;
/**
* @type {?}
* @private
*/
G2TagCloudComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BseGxpYi9jaGFydC90YWctY2xvdWQvIiwic291cmNlcyI6WyJ0YWctY2xvdWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUlOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXRELG9DQUtDOzs7SUFKQywyQkFBVzs7SUFDWCwrQkFBZTs7SUFDZixrQ0FBZTs7O0FBSWpCO0lBc0JFLGFBQWE7SUFFYiw2QkFBb0IsRUFBYyxFQUFVLE1BQWM7UUFBdEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7O1FBUGxDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLFlBQU8sR0FBK0IsQ0FBQyxDQUFDO1FBQ3hDLFNBQUksR0FBcUIsRUFBRSxDQUFDO0lBSXdCLENBQUM7Ozs7O0lBRXRELDBDQUFZOzs7O0lBQXBCO1FBQ0UscUJBQXFCO1FBQ3JCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQzlCLElBQUk7Ozs7O1lBQUosVUFBSyxHQUFHLEVBQUUsU0FBb0I7O29CQUN0QixJQUFJLEdBQUcsbUJBQUEsR0FBRyxDQUFDLElBQUks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LEVBQUU7b0JBQ1osSUFBSSxFQUFFO3dCQUNKLG1CQUFtQixFQUFFLFFBQVE7cUJBQzlCO29CQUNELG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Ozs7Z0JBaENDLFVBQVU7Z0JBRVYsTUFBTTs7O3dCQXFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLOztJQUhrQjtRQUFkLFdBQVcsRUFBRTs7c0RBQVc7SUFDVjtRQUFkLFdBQVcsRUFBRTs7dURBQWM7SUFnSXZDLDBCQUFDO0NBQUEsQUFsSkQsSUFrSkM7U0F2SVksbUJBQW1COzs7Ozs7SUFDOUIsc0NBQThCOzs7OztJQUM5QixvQ0FBcUI7O0lBSXJCLG9DQUFrQzs7SUFDbEMscUNBQXFDOztJQUNyQyxzQ0FBaUQ7O0lBQ2pELG1DQUFxQzs7Ozs7SUFJekIsaUNBQXNCOzs7OztJQUFFLHFDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBEYXRhU2V0IGZyb20gJ0BhbnR2L2RhdGEtc2V0JztcbmltcG9ydCB7IENoYXJ0LCByZWdpc3RlclNoYXBlLCBVdGlsIH0gZnJvbSAnQGFudHYvZzInO1xuaW1wb3J0IHsgSW5wdXROdW1iZXIgfSBmcm9tICdAbHhsaWIvdXRpbCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEcyVGFnQ2xvdWREYXRhIHtcbiAgeD86IHN0cmluZztcbiAgdmFsdWU/OiBudW1iZXI7XG4gIGNhdGVnb3J5PzogYW55O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2cyLXRhZy1jbG91ZCcsXG4gIGV4cG9ydEFzOiAnZzJUYWdDbG91ZCcsXG4gIHRlbXBsYXRlOiBgYCxcbiAgaG9zdDoge1xuICAgICdbc3R5bGUuaGVpZ2h0LnB4XSc6ICdoZWlnaHQnLFxuICB9LFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEcyVGFnQ2xvdWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgcHJpdmF0ZSByZXNpemUkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY2hhcnQ6IENoYXJ0O1xuXG4gIC8vICNyZWdpb24gZmllbGRzXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZGVsYXkgPSAwO1xuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWlnaHQgPSAxMDA7XG4gIEBJbnB1dCgpIHBhZGRpbmc6IG51bWJlciB8IG51bWJlcltdIHwgJ2F1dG8nID0gMDtcbiAgQElucHV0KCkgZGF0YTogRzJUYWdDbG91ZERhdGFbXSA9IFtdO1xuXG4gIC8vICNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIHByaXZhdGUgaW5pdFRhZ0Nsb3VkKCkge1xuICAgIC8vIOe7mXBvaW505rOo5YaM5LiA5Liq6K+N5LqR55qEc2hhcGVcbiAgICByZWdpc3RlclNoYXBlKCdwb2ludCcsICdjbG91ZCcsIHtcbiAgICAgIGRyYXcoY2ZnLCBjb250YWluZXI6IE56U2FmZUFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gY2ZnLmRhdGEgYXMgTnpTYWZlQW55O1xuICAgICAgICBjb25zdCB0ZXh0U2hhcGUgPSBjb250YWluZXIuYWRkU2hhcGUoJ3RleHQnLCB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIC4uLmNmZy5kZWZhdWx0U3R5bGUsXG4gICAgICAgICAgICAuLi5jZmcuc3R5bGUsXG4gICAgICAgICAgICBmb250U2l6ZTogZGF0YS5zaXplLFxuICAgICAgICAgICAgdGV4dDogZGF0YS50ZXh0LFxuICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGRhdGEuZm9udCxcbiAgICAgICAgICAgIGZpbGw6IGNmZy5jb2xvciwgLy8gfHwgY2ZnLmRlZmF1bHRTdHlsZSEuc3Ryb2tlLFxuICAgICAgICAgICAgdGV4dEJhc2VsaW5lOiAnQWxwaGFiZXRpYycsXG4gICAgICAgICAgICB4OiBjZmcueCxcbiAgICAgICAgICAgIHk6IGNmZy55LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5yb3RhdGUpIHtcbiAgICAgICAgICBVdGlsLnJvdGF0ZSh0ZXh0U2hhcGUsIChkYXRhLnJvdGF0ZSAqIE1hdGguUEkpIC8gMTgwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dFNoYXBlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbCgpIHtcbiAgICBjb25zdCB7IGVsLCBwYWRkaW5nLCBoZWlnaHQgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBjaGFydCA9ICh0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHtcbiAgICAgIGNvbnRhaW5lcjogZWwubmF0aXZlRWxlbWVudCxcbiAgICAgIHBhZGRpbmcsXG4gICAgICBoZWlnaHQsXG4gICAgfSkpO1xuICAgIGNoYXJ0LmxlZ2VuZChmYWxzZSk7XG4gICAgY2hhcnQuYXhpcyhmYWxzZSk7XG4gICAgY2hhcnQudG9vbHRpcCh7XG4gICAgICBzaG93VGl0bGU6IGZhbHNlLFxuICAgICAgc2hvd01hcmtlcnM6IGZhbHNlLFxuICAgIH0pO1xuICAgIGNoYXJ0LmNvb3JkaW5hdGUoKS5yZWZsZWN0KCd4Jyk7XG4gICAgY2hhcnQucG9pbnQoKS5wb3NpdGlvbigneCp5JykuY29sb3IoJ2NhdGVnb3J5Jykuc2hhcGUoJ2Nsb3VkJykudG9vbHRpcCgndmFsdWUqY2F0ZWdvcnknKTtcbiAgICBjaGFydC5pbnRlcmFjdGlvbignZWxlbWVudC1hY3RpdmUnKTtcblxuICAgIHRoaXMuYXR0YWNoQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoQ2hhcnQoKSB7XG4gICAgY29uc3QgeyBjaGFydCwgaGVpZ2h0LCBwYWRkaW5nLCBkYXRhIH0gPSB0aGlzO1xuICAgIGlmICghY2hhcnQgfHwgIWRhdGEgfHwgZGF0YS5sZW5ndGggPD0gMCkgcmV0dXJuO1xuXG4gICAgY2hhcnQuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNoYXJ0LnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIGNoYXJ0LmZvcmNlRml0KCk7XG5cbiAgICBjb25zdCBkdiA9IG5ldyBEYXRhU2V0LlZpZXcoKS5zb3VyY2UoZGF0YSk7XG4gICAgY29uc3QgcmFuZ2UgPSBkdi5yYW5nZSgndmFsdWUnKTtcbiAgICBjb25zdCBtaW4gPSByYW5nZVswXTtcbiAgICBjb25zdCBtYXggPSByYW5nZVsxXTtcblxuICAgIGR2LnRyYW5zZm9ybSh7XG4gICAgICB0eXBlOiAndGFnLWNsb3VkJyxcbiAgICAgIGZpZWxkczogWyd4JywgJ3ZhbHVlJ10sXG4gICAgICBzaXplOiBbY2hhcnQud2lkdGgsIGNoYXJ0LmhlaWdodF0sXG4gICAgICBwYWRkaW5nOiB0eXBlb2YgcGFkZGluZyA9PT0gJ251bWJlcicgPyBwYWRkaW5nIDogdW5kZWZpbmVkLFxuICAgICAgdGltZUludGVydmFsOiA1MDAwLCAvLyBtYXggZXhlY3V0ZSB0aW1lXG4gICAgICByb3RhdGU6ICgpID0+IHtcbiAgICAgICAgbGV0IHJhbmRvbSA9IH5+KE1hdGgucmFuZG9tKCkgKiA0KSAlIDQ7XG4gICAgICAgIGlmIChyYW5kb20gPT09IDIpIHtcbiAgICAgICAgICByYW5kb20gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYW5kb20gKiA5MDsgLy8gMCwgOTAsIDI3MFxuICAgICAgfSxcbiAgICAgIGZvbnRTaXplKGQ6IE56U2FmZUFueSkge1xuICAgICAgICBpZiAoZC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiAoKGQudmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKDgwIC0gMjQpICsgMjQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9LFxuICAgIH0gYXMgTnpTYWZlQW55KTtcblxuICAgIGNoYXJ0LnNjYWxlKHtcbiAgICAgIHg6IHsgbmljZTogZmFsc2UgfSxcbiAgICAgIHk6IHsgbmljZTogZmFsc2UgfSxcbiAgICB9KTtcblxuICAgIGNoYXJ0LmNoYW5nZURhdGEoZHYucm93cyk7XG4gICAgY2hhcnQucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hDaGFydCgpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmF0dGFjaENoYXJ0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsUmVzaXplRXZlbnQoKSB7XG4gICAgdGhpcy5yZXNpemUkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jaGFydCksXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9hdHRhY2hDaGFydCgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRhZ0Nsb3VkKCk7XG4gICAgdGhpcy5pbnN0YWxsUmVzaXplRXZlbnQoKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5zdGFsbCgpLCB0aGlzLmRlbGF5KSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9hdHRhY2hDaGFydCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUkLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnQuZGVzdHJveSgpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==