UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

328 lines 23.7 kB
/** * @fileoverview added by tsickle * Generated from: directives/amap-marker-clusterer/amap-marker-clusterer.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, Input, Output, EventEmitter, ContentChildren, QueryList, NgZone, } from '@angular/core'; import { zip, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; import { AmapMarkerClustererService } from './amap-marker-clusterer.service'; import { LoggerService } from '../../shared/logger/logger.service'; import { EventBinderService } from '../../shared/event-binder.service'; import { getOptions, ChangeFilter } from '../../utils'; import { PixelService } from '../../shared/pixel.service'; import { SizeService } from '../../shared/size.service'; import { AmapMarkerDirective } from '../amap-marker/amap-marker.directive'; import { AMapService } from '../../shared/amap.service'; /** @type {?} */ var TAG = 'amap-marker-clusterer'; /** @type {?} */ var MarkerClusterOptions = [ 'gridSize', 'minClusterSize', 'maxZoom', 'averageCenter', 'styles', 'renderClusterMarker', 'zoomOnClick', ]; var AmapMarkerClustererDirective = /** @class */ (function () { function AmapMarkerClustererDirective(os, binder, amaps, pixels, sizes, logger, ngZone) { this.os = os; this.binder = binder; this.amaps = amaps; this.pixels = pixels; this.sizes = sizes; this.logger = logger; this.ngZone = ngZone; // ---- Events ---- this.naReady = new EventEmitter(); // amap-marker directives: this.markerList = new QueryList(); this.inited = false; /** @type {?} */ var target = this.os.get(); this.naClick = this.binder.bindEvent(target, 'click'); } /** * @return {?} */ AmapMarkerClustererDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.os.destroy(); }; /** * @return {?} */ AmapMarkerClustererDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.amaps.get().subscribe((/** * @return {?} */ function () { _this.logger.d(TAG, 'initializing ...'); /** @type {?} */ var options = getOptions(_this, MarkerClusterOptions); if (options.styles) { options.styles = options.styles.map((/** * @param {?} style * @return {?} */ function (style) { if (style.size) { style.size = (/** @type {?} */ (_this.sizes.create(style.size))); } if (style.offset) { style.offset = _this.pixels.create(style.offset); } if (style.imageOffset) { style.imageOffset = _this.pixels.create(style.imageOffset); } return style; })); } _this.logger.d(TAG, 'options:', options); _this.os.create(options).subscribe(); _this.inited = true; })); }; /** * @param {?} changes * @return {?} */ AmapMarkerClustererDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (!this.inited) { return; } /** @type {?} */ var filter = ChangeFilter.of(changes); /** @type {?} */ var cluster = this.get(); zip(filter.notEmpty('gridSize'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], c = _b[1]; return c.setGridSize(v); })); zip(filter.notEmpty('minClusterSize'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], c = _b[1]; return c.setMinClusterSize(v); })); zip(filter.has('maxZoom'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], c = _b[1]; return c.setMaxZoom(v); })); zip(filter.has('averageCenter'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], c = _b[1]; return c.setAverageCenter(v); })); zip(filter.has('styles'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], c = _b[1]; return c.setStyles(v); })); }; /** * @return {?} */ AmapMarkerClustererDirective.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; this.updateMarkers().subscribe((/** * @param {?} c * @return {?} */ function (c) { _this.ngZone.run((/** * @return {?} */ function () { return _this.naReady.emit(c); })); _this.logger.d(TAG, 'markerClusterer is ready.'); })); this.markerList.changes.subscribe((/** * @return {?} */ function () { return _this.updateMarkers().subscribe(); })); }; /** * @private * @return {?} */ AmapMarkerClustererDirective.prototype.updateMarkers = /** * @private * @return {?} */ function () { return zip(combineLatest(this.markerList.map((/** * @param {?} d * @return {?} */ function (d) { return d.get(); }))), this.get()).pipe(map((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), markers = _b[0], cluster = _b[1]; cluster.setMarkers(markers); return cluster; }))); }; /** * 获取已创建的 AMap.MarkerClusterer 对象 */ /** * 获取已创建的 AMap.MarkerClusterer 对象 * @return {?} */ AmapMarkerClustererDirective.prototype.get = /** * 获取已创建的 AMap.MarkerClusterer 对象 * @return {?} */ function () { return this.os.get(); }; AmapMarkerClustererDirective.decorators = [ { type: Directive, args: [{ selector: 'amap-marker-clusterer', exportAs: 'marker-clusterer', providers: [AmapMarkerClustererService], },] } ]; /** @nocollapse */ AmapMarkerClustererDirective.ctorParameters = function () { return [ { type: AmapMarkerClustererService }, { type: EventBinderService }, { type: AMapService }, { type: PixelService }, { type: SizeService }, { type: LoggerService }, { type: NgZone } ]; }; AmapMarkerClustererDirective.propDecorators = { gridSize: [{ type: Input }], minClusterSize: [{ type: Input }], maxZoom: [{ type: Input }], averageCenter: [{ type: Input }], styles: [{ type: Input }], renderClusterMarker: [{ type: Input }], zoomOnClick: [{ type: Input }], naReady: [{ type: Output }], naClick: [{ type: Output }], markerList: [{ type: ContentChildren, args: [AmapMarkerDirective,] }] }; return AmapMarkerClustererDirective; }()); export { AmapMarkerClustererDirective }; if (false) { /** * 聚合计算时网格的像素大小,默认60 * @type {?} */ AmapMarkerClustererDirective.prototype.gridSize; /** * 聚合的最小数量。默认值为2,即小于2个点则不能成为一个聚合 * @type {?} */ AmapMarkerClustererDirective.prototype.minClusterSize; /** * 最大的聚合级别,大于该级别就不进行相应的聚合。默认值为18 * @type {?} */ AmapMarkerClustererDirective.prototype.maxZoom; /** * 聚合点的图标位置是否是所有聚合内点的中心点。默认为否 * @type {?} */ AmapMarkerClustererDirective.prototype.averageCenter; /** * 指定聚合后的点标记的图标样式,可缺省,缺省时为默认样式 * @type {?} */ AmapMarkerClustererDirective.prototype.styles; /** * 该方法用来实现聚合点的自定义绘制 * @type {?} */ AmapMarkerClustererDirective.prototype.renderClusterMarker; /** * 点击聚合点时,是否散开,默认值为:true * @type {?} */ AmapMarkerClustererDirective.prototype.zoomOnClick; /** @type {?} */ AmapMarkerClustererDirective.prototype.naReady; /** @type {?} */ AmapMarkerClustererDirective.prototype.naClick; /** @type {?} */ AmapMarkerClustererDirective.prototype.markerList; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.inited; /** * @type {?} * @protected */ AmapMarkerClustererDirective.prototype.os; /** * @type {?} * @protected */ AmapMarkerClustererDirective.prototype.binder; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.amaps; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.pixels; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.sizes; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.logger; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9hbWFwLW1hcmtlci1jbHVzdGVyZXIvYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUdaLGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsMEJBQTBCLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztJQUVsRCxHQUFHLEdBQUcsdUJBQXVCOztJQUM3QixvQkFBb0IsR0FBRztJQUMzQixVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxlQUFlO0lBQ2YsUUFBUTtJQUNSLHFCQUFxQjtJQUNyQixhQUFhO0NBQ2Q7QUFFRDtJQWtERSxzQ0FDWSxFQUE4QixF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O2dCQUpYLGFBQWE7Z0JBTHBCLE1BQU07OzsyQkFtQ0wsS0FBSztpQ0FJTCxLQUFLOzBCQUlMLEtBQUs7Z0NBSUwsS0FBSzt5QkFJTCxLQUFLO3NDQUlMLEtBQUs7OEJBUUwsS0FBSzswQkFHTCxNQUFNOzBCQUNOLE1BQU07NkJBR04sZUFBZSxTQUFDLG1CQUFtQjs7SUFxRnRDLG1DQUFDO0NBQUEsQUFuSUQsSUFtSUM7U0E5SFksNEJBQTRCOzs7Ozs7SUFNdkMsZ0RBQTBCOzs7OztJQUkxQixzREFBZ0M7Ozs7O0lBSWhDLCtDQUF5Qjs7Ozs7SUFJekIscURBQWdDOzs7OztJQUloQyw4Q0FBbUQ7Ozs7O0lBSW5ELDJEQUlXOzs7OztJQUlYLG1EQUE4Qjs7SUFHOUIsK0NBQXVDOztJQUN2QywrQ0FBcUM7O0lBR3JDLGtEQUF3Rjs7Ozs7SUFFeEYsOENBQXVCOzs7OztJQUdyQiwwQ0FBd0M7Ozs7O0lBQ3hDLDhDQUFvQzs7Ozs7SUFDcEMsNkNBQTBCOzs7OztJQUMxQiw4Q0FBNEI7Ozs7O0lBQzVCLDZDQUEwQjs7Ozs7SUFDMUIsOENBQTZCOzs7OztJQUM3Qiw4Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIE5nWm9uZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB6aXAsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFtYXBNYXJrZXJDbHVzdGVyZXJTZXJ2aWNlLCBBTWFwTWFya2VyQ2x1c3RlcmVyIH0gZnJvbSAnLi9hbWFwLW1hcmtlci1jbHVzdGVyZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudEJpbmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXZlbnQtYmluZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0T3B0aW9ucywgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGl4ZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpeGVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2l6ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2l6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFtYXBNYXJrZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9hbWFwLW1hcmtlci9hbWFwLW1hcmtlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQU1hcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC5zZXJ2aWNlJztcblxuY29uc3QgVEFHID0gJ2FtYXAtbWFya2VyLWNsdXN0ZXJlcic7XG5jb25zdCBNYXJrZXJDbHVzdGVyT3B0aW9ucyA9IFtcbiAgJ2dyaWRTaXplJyxcbiAgJ21pbkNsdXN0ZXJTaXplJyxcbiAgJ21heFpvb20nLFxuICAnYXZlcmFnZUNlbnRlcicsXG4gICdzdHlsZXMnLFxuICAncmVuZGVyQ2x1c3Rlck1hcmtlcicsXG4gICd6b29tT25DbGljaycsXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdhbWFwLW1hcmtlci1jbHVzdGVyZXInLFxuICBleHBvcnRBczogJ21hcmtlci1jbHVzdGVyZXInLFxuICBwcm92aWRlcnM6IFtBbWFwTWFya2VyQ2x1c3RlcmVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFtYXBNYXJrZXJDbHVzdGVyZXJEaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgLy8gLS0tLSBPcHRpb25zIC0tLS1cbiAgLyoqXG4gICAqIOiBmuWQiOiuoeeul+aXtue9keagvOeahOWDj+e0oOWkp+Wwj++8jOm7mOiupDYwXG4gICAqL1xuICBASW5wdXQoKSBncmlkU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICog6IGa5ZCI55qE5pyA5bCP5pWw6YeP44CC6buY6K6k5YC85Li6Mu+8jOWNs+Wwj+S6jjLkuKrngrnliJnkuI3og73miJDkuLrkuIDkuKrogZrlkIhcbiAgICovXG4gIEBJbnB1dCgpIG1pbkNsdXN0ZXJTaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiDmnIDlpKfnmoTogZrlkIjnuqfliKvvvIzlpKfkuo7or6XnuqfliKvlsLHkuI3ov5vooYznm7jlupTnmoTogZrlkIjjgILpu5jorqTlgLzkuLoxOFxuICAgKi9cbiAgQElucHV0KCkgbWF4Wm9vbTogbnVtYmVyO1xuICAvKipcbiAgICog6IGa5ZCI54K555qE5Zu+5qCH5L2N572u5piv5ZCm5piv5omA5pyJ6IGa5ZCI5YaF54K555qE5Lit5b+D54K544CC6buY6K6k5Li65ZCmXG4gICAqL1xuICBASW5wdXQoKSBhdmVyYWdlQ2VudGVyOiBib29sZWFuO1xuICAvKipcbiAgICog5oyH5a6a6IGa5ZCI5ZCO55qE54K55qCH6K6w55qE5Zu+5qCH5qC35byP77yM5Y+v57y655yB77yM57y655yB5pe25Li66buY6K6k5qC35byPXG4gICAqL1xuICBASW5wdXQoKSBzdHlsZXM6IEFNYXBNYXJrZXJDbHVzdGVyZXIuU3R5bGVPYmplY3RbXTtcbiAgLyoqXG4gICAqIOivpeaWueazleeUqOadpeWunueOsOiBmuWQiOeCueeahOiHquWumuS5iee7mOWItlxuICAgKi9cbiAgQElucHV0KCkgcmVuZGVyQ2x1c3Rlck1hcmtlcjogKG9iajoge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgbWFya2VyczogQU1hcC5NYXJrZXI8YW55PltdO1xuICAgIG1hcmtlcjogQU1hcC5NYXJrZXI8YW55PjtcbiAgfSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIOeCueWHu+iBmuWQiOeCueaXtu+8jOaYr+WQpuaVo+W8gO+8jOm7mOiupOWAvOS4uu+8mnRydWVcbiAgICovXG4gIEBJbnB1dCgpIHpvb21PbkNsaWNrOiBib29sZWFuO1xuXG4gIC8vIC0tLS0gRXZlbnRzIC0tLS1cbiAgQE91dHB1dCgpIG5hUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuYUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAvLyBhbWFwLW1hcmtlciBkaXJlY3RpdmVzOlxuICBAQ29udGVudENoaWxkcmVuKEFtYXBNYXJrZXJEaXJlY3RpdmUpIG1hcmtlckxpc3QgPSBuZXcgUXVlcnlMaXN0PEFtYXBNYXJrZXJEaXJlY3RpdmU+KCk7XG5cbiAgcHJpdmF0ZSBpbml0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3M6IEFtYXBNYXJrZXJDbHVzdGVyZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBiaW5kZXI6IEV2ZW50QmluZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGFtYXBzOiBBTWFwU2VydmljZSxcbiAgICBwcml2YXRlIHBpeGVsczogUGl4ZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2l6ZXM6IFNpemVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMub3MuZ2V0KCk7XG4gICAgdGhpcy5uYUNsaWNrID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2NsaWNrJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9zLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYW1hcHMuZ2V0KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnaW5pdGlhbGl6aW5nIC4uLicpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnM8QU1hcE1hcmtlckNsdXN0ZXJlci5PcHRpb25zPih0aGlzLCBNYXJrZXJDbHVzdGVyT3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgb3B0aW9ucy5zdHlsZXMgPSBvcHRpb25zLnN0eWxlcy5tYXAoc3R5bGUgPT4ge1xuICAgICAgICAgIGlmIChzdHlsZS5zaXplKSB7XG4gICAgICAgICAgICBzdHlsZS5zaXplID0gdGhpcy5zaXplcy5jcmVhdGUoc3R5bGUuc2l6ZSkgYXMgQU1hcC5TaXplO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3R5bGUub2Zmc2V0KSB7XG4gICAgICAgICAgICBzdHlsZS5vZmZzZXQgPSB0aGlzLnBpeGVscy5jcmVhdGUoc3R5bGUub2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0eWxlLmltYWdlT2Zmc2V0KSB7XG4gICAgICAgICAgICBzdHlsZS5pbWFnZU9mZnNldCA9IHRoaXMucGl4ZWxzLmNyZWF0ZShzdHlsZS5pbWFnZU9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4gICAgICB0aGlzLm9zLmNyZWF0ZShvcHRpb25zKS5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcbiAgICBjb25zdCBjbHVzdGVyID0gdGhpcy5nZXQoKTtcbiAgICB6aXAoZmlsdGVyLm5vdEVtcHR5PG51bWJlcj4oJ2dyaWRTaXplJyksIGNsdXN0ZXIpLnN1YnNjcmliZSgoW3YsIGNdKSA9PiBjLnNldEdyaWRTaXplKHYpKTtcbiAgICB6aXAoZmlsdGVyLm5vdEVtcHR5PG51bWJlcj4oJ21pbkNsdXN0ZXJTaXplJyksIGNsdXN0ZXIpLnN1YnNjcmliZSgoW3YsIGNdKSA9PlxuICAgICAgYy5zZXRNaW5DbHVzdGVyU2l6ZSh2KSxcbiAgICApO1xuICAgIHppcChmaWx0ZXIuaGFzPG51bWJlcj4oJ21heFpvb20nKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+IGMuc2V0TWF4Wm9vbSh2KSk7XG4gICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2F2ZXJhZ2VDZW50ZXInKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+IGMuc2V0QXZlcmFnZUNlbnRlcih2KSk7XG4gICAgemlwKGZpbHRlci5oYXM8QU1hcE1hcmtlckNsdXN0ZXJlci5TdHlsZU9iamVjdFtdPignc3R5bGVzJyksIGNsdXN0ZXIpLnN1YnNjcmliZSgoW3YsIGNdKSA9PlxuICAgICAgYy5zZXRTdHlsZXModiksXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZU1hcmtlcnMoKS5zdWJzY3JpYmUoYyA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5uYVJlYWR5LmVtaXQoYykpO1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdtYXJrZXJDbHVzdGVyZXIgaXMgcmVhZHkuJyk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrZXJMaXN0LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlTWFya2VycygpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFya2VycygpIHtcbiAgICByZXR1cm4gemlwKGNvbWJpbmVMYXRlc3QodGhpcy5tYXJrZXJMaXN0Lm1hcChkID0+IGQuZ2V0KCkpKSwgdGhpcy5nZXQoKSkucGlwZShcbiAgICAgIG1hcCgoW21hcmtlcnMsIGNsdXN0ZXJdKSA9PiB7XG4gICAgICAgIGNsdXN0ZXIuc2V0TWFya2VycyhtYXJrZXJzKTtcbiAgICAgICAgcmV0dXJuIGNsdXN0ZXI7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW3suWIm+W7uueahCBBTWFwLk1hcmtlckNsdXN0ZXJlciDlr7nosaFcbiAgICovXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcy5nZXQoKTtcbiAgfVxufVxuIl19