@007.surajit2023/agm-markerclusterer
Version:
Angular Google Maps (AGM) extension for markerclusterer support
170 lines • 22.1 kB
JavaScript
import { MarkerManager } from '@007.surajit2023/agm-core';
import { Injectable } from '@angular/core';
import MarkerClusterer from '@google/markerclustererplus';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@007.surajit2023/agm-core";
export class ClusterManager extends MarkerManager {
constructor(_mapsWrapper, _zone) {
super(_mapsWrapper, _zone);
this._mapsWrapper = _mapsWrapper;
this._zone = _zone;
this._clustererInstance = new Promise((resolver) => {
this._resolver = resolver;
});
}
init(options) {
this._mapsWrapper.getNativeMap().then(map => {
const clusterer = new MarkerClusterer(map, [], options);
this._resolver(clusterer);
});
}
getClustererInstance() {
return this._clustererInstance;
}
addMarker(markerDirective) {
const clusterPromise = this.getClustererInstance();
const markerPromise = this._mapsWrapper
.createMarker({
position: {
lat: markerDirective.latitude,
lng: markerDirective.longitude,
},
label: markerDirective.label,
draggable: markerDirective.draggable,
icon: markerDirective.iconUrl,
opacity: markerDirective.opacity,
visible: markerDirective.visible,
zIndex: markerDirective.zIndex,
title: markerDirective.title,
clickable: markerDirective.clickable,
}, false);
Promise
.all([clusterPromise, markerPromise])
.then(([cluster, marker]) => cluster.addMarker(marker));
this._markers.set(markerDirective, markerPromise);
}
deleteMarker(marker) {
const markerPromise = this._markers.get(marker);
if (markerPromise == null) {
// marker already deleted
return Promise.resolve();
}
return markerPromise.then((m) => {
this._zone.run(() => {
m.setMap(null);
this.getClustererInstance().then(cluster => {
cluster.removeMarker(m);
this._markers.delete(marker);
});
});
});
}
clearMarkers() {
return this.getClustererInstance().then(cluster => {
cluster.clearMarkers();
});
}
setGridSize(c) {
this.getClustererInstance().then(cluster => {
cluster.setGridSize(c.gridSize);
});
}
setMaxZoom(c) {
this.getClustererInstance().then(cluster => {
cluster.setMaxZoom(c.maxZoom);
});
}
setStyles(c) {
this.getClustererInstance().then(cluster => {
cluster.setStyles(c.styles);
});
}
setZoomOnClick(c) {
this.getClustererInstance().then(cluster => {
if (c.zoomOnClick !== undefined) {
cluster.setZoomOnClick(c.zoomOnClick);
}
});
}
setAverageCenter(c) {
this.getClustererInstance().then(cluster => {
if (c.averageCenter !== undefined) {
cluster.setAverageCenter(c.averageCenter);
}
});
}
setImagePath(c) {
this.getClustererInstance().then(cluster => {
if (c.imagePath !== undefined) {
cluster.setImagePath(c.imagePath);
}
});
}
setMinimumClusterSize(c) {
this.getClustererInstance().then(cluster => {
if (c.minimumClusterSize !== undefined) {
cluster.setMinimumClusterSize(c.minimumClusterSize);
}
});
}
setImageExtension(c) {
this.getClustererInstance().then(cluster => {
if (c.imageExtension !== undefined) {
cluster.setImageExtension(c.imageExtension);
}
});
}
createClusterEventObservable(eventName) {
return new Observable((subscriber) => {
this._zone.runOutsideAngular(() => {
this._clustererInstance.then((m) => {
m.addListener(eventName, (e) => this._zone.run(() => subscriber.next(e)));
});
});
});
}
setCalculator(c) {
this.getClustererInstance().then(cluster => {
if (typeof c.calculator === 'function') {
cluster.setCalculator(c.calculator);
}
});
}
async setClusterClass(c) {
if (typeof c.clusterClass !== 'undefined') {
const instance = await this.getClustererInstance();
instance.setClusterClass(c.clusterClass);
}
}
async setEnableRetinaIcons(c) {
if (typeof c.enableRetinaIcons !== 'undefined') {
const instance = await this.getClustererInstance();
instance.setEnableRetinaIcons(c.enableRetinaIcons);
}
}
async setIgnoreHidden(c) {
if (typeof c.ignoreHidden !== 'undefined') {
const instance = await this.getClustererInstance();
instance.setIgnoreHidden(c.ignoreHidden);
}
}
async setImageSizes(c) {
if (typeof c.imageSizes !== 'undefined') {
const instance = await this.getClustererInstance();
instance.setImageSizes(c.imageSizes);
}
}
async setTitle(c) {
if (typeof c.title !== 'undefined') {
const instance = await this.getClustererInstance();
instance.setTitle(c.title);
}
}
}
ClusterManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterManager, deps: [{ token: i1.GoogleMapsAPIWrapper }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
ClusterManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterManager });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ClusterManager, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.GoogleMapsAPIWrapper }, { type: i0.NgZone }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWFya2VyY2x1c3RlcmVyL3NyYy9saWIvc2VydmljZXMvbWFuYWdlcnMvY2x1c3Rlci1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUMsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLGVBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7QUFJOUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBSS9DLFlBQXNCLFlBQWtDLEVBQVksS0FBYTtRQUMvRSxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRFAsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQVksVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUUvRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQStCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7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QUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7NEdBbExVLGNBQWM7Z0hBQWQsY0FBYzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWdtTWFya2VyLCBHb29nbGVNYXBzQVBJV3JhcHBlciwgTWFya2VyTWFuYWdlciB9IGZyb20gJ0AwMDcuc3VyYWppdDIwMjMvYWdtLWNvcmUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWFya2VyQ2x1c3RlcmVyT3B0aW9ucyB9IGZyb20gJ0Bnb29nbGUvbWFya2VyY2x1c3RlcmVycGx1cyc7XHJcbmltcG9ydCBNYXJrZXJDbHVzdGVyZXIgZnJvbSAnQGdvb2dsZS9tYXJrZXJjbHVzdGVyZXJwbHVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZ21NYXJrZXJDbHVzdGVyIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXJrZXItY2x1c3Rlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDbHVzdGVyTWFuYWdlciBleHRlbmRzIE1hcmtlck1hbmFnZXIge1xyXG4gIHByaXZhdGUgX2NsdXN0ZXJlckluc3RhbmNlOiBQcm9taXNlPE1hcmtlckNsdXN0ZXJlcj47XHJcbiAgcHJpdmF0ZSBfcmVzb2x2ZXI6IChjbHVzdGVyOiBNYXJrZXJDbHVzdGVyZXIpID0+IHZvaWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbWFwc1dyYXBwZXI6IEdvb2dsZU1hcHNBUElXcmFwcGVyLCBwcm90ZWN0ZWQgX3pvbmU6IE5nWm9uZSkge1xyXG4gICAgc3VwZXIoX21hcHNXcmFwcGVyLCBfem9uZSk7XHJcbiAgICB0aGlzLl9jbHVzdGVyZXJJbnN0YW5jZSA9IG5ldyBQcm9taXNlPE1hcmtlckNsdXN0ZXJlcj4oKHJlc29sdmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuX3Jlc29sdmVyID0gcmVzb2x2ZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXQob3B0aW9uczogTWFya2VyQ2x1c3RlcmVyT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWFwc1dyYXBwZXIuZ2V0TmF0aXZlTWFwKCkudGhlbihtYXAgPT4ge1xyXG4gICAgICBjb25zdCBjbHVzdGVyZXIgPSBuZXcgTWFya2VyQ2x1c3RlcmVyKG1hcCwgW10sIG9wdGlvbnMpO1xyXG4gICAgICB0aGlzLl9yZXNvbHZlcihjbHVzdGVyZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbHVzdGVyZXJJbnN0YW5jZSgpOiBQcm9taXNlPE1hcmtlckNsdXN0ZXJlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsdXN0ZXJlckluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgYWRkTWFya2VyKG1hcmtlckRpcmVjdGl2ZTogQWdtTWFya2VyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjbHVzdGVyUHJvbWlzZTogUHJvbWlzZTxNYXJrZXJDbHVzdGVyZXI+ID0gdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpO1xyXG4gICAgY29uc3QgbWFya2VyUHJvbWlzZSA9IHRoaXMuX21hcHNXcmFwcGVyXHJcbiAgICAgIC5jcmVhdGVNYXJrZXIoe1xyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBsYXQ6IG1hcmtlckRpcmVjdGl2ZS5sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogbWFya2VyRGlyZWN0aXZlLmxvbmdpdHVkZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxhYmVsOiBtYXJrZXJEaXJlY3RpdmUubGFiZWwsXHJcbiAgICAgICAgZHJhZ2dhYmxlOiBtYXJrZXJEaXJlY3RpdmUuZHJhZ2dhYmxlLFxyXG4gICAgICAgIGljb246IG1hcmtlckRpcmVjdGl2ZS5pY29uVXJsLFxyXG4gICAgICAgIG9wYWNpdHk6IG1hcmtlckRpcmVjdGl2ZS5vcGFjaXR5LFxyXG4gICAgICAgIHZpc2libGU6IG1hcmtlckRpcmVjdGl2ZS52aXNpYmxlLFxyXG4gICAgICAgIHpJbmRleDogbWFya2VyRGlyZWN0aXZlLnpJbmRleCxcclxuICAgICAgICB0aXRsZTogbWFya2VyRGlyZWN0aXZlLnRpdGxlLFxyXG4gICAgICAgIGNsaWNrYWJsZTogbWFya2VyRGlyZWN0aXZlLmNsaWNrYWJsZSxcclxuICAgICAgfSwgZmFsc2UpO1xyXG5cclxuICAgIFByb21pc2VcclxuICAgICAgLmFsbChbY2x1c3RlclByb21pc2UsIG1hcmtlclByb21pc2VdKVxyXG4gICAgICAudGhlbigoW2NsdXN0ZXIsIG1hcmtlcl0pID0+IGNsdXN0ZXIuYWRkTWFya2VyKG1hcmtlcikpO1xyXG4gICAgdGhpcy5fbWFya2Vycy5zZXQobWFya2VyRGlyZWN0aXZlLCBtYXJrZXJQcm9taXNlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZU1hcmtlcihtYXJrZXI6IEFnbU1hcmtlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbWFya2VyUHJvbWlzZSA9IHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcik7XHJcbiAgICBpZiAobWFya2VyUHJvbWlzZSA9PSBudWxsKSB7XHJcbiAgICAgIC8vIG1hcmtlciBhbHJlYWR5IGRlbGV0ZWRcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hcmtlclByb21pc2UudGhlbigobTogZ29vZ2xlLm1hcHMuTWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBtLnNldE1hcChudWxsKTtcclxuICAgICAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcclxuICAgICAgICAgIGNsdXN0ZXIucmVtb3ZlTWFya2VyKG0pO1xyXG4gICAgICAgICAgdGhpcy5fbWFya2Vycy5kZWxldGUobWFya2VyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyTWFya2VycygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcclxuICAgICAgY2x1c3Rlci5jbGVhck1hcmtlcnMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JpZFNpemUoYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGNsdXN0ZXIuc2V0R3JpZFNpemUoYy5ncmlkU2l6ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldE1heFpvb20oYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGNsdXN0ZXIuc2V0TWF4Wm9vbShjLm1heFpvb20pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZXMoYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGNsdXN0ZXIuc2V0U3R5bGVzKGMuc3R5bGVzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Wm9vbU9uQ2xpY2soYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGlmIChjLnpvb21PbkNsaWNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjbHVzdGVyLnNldFpvb21PbkNsaWNrKGMuem9vbU9uQ2xpY2spO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEF2ZXJhZ2VDZW50ZXIoYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGlmIChjLmF2ZXJhZ2VDZW50ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsdXN0ZXIuc2V0QXZlcmFnZUNlbnRlcihjLmF2ZXJhZ2VDZW50ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEltYWdlUGF0aChjOiBBZ21NYXJrZXJDbHVzdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcclxuICAgICAgaWYgKGMuaW1hZ2VQYXRoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjbHVzdGVyLnNldEltYWdlUGF0aChjLmltYWdlUGF0aCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TWluaW11bUNsdXN0ZXJTaXplKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKS50aGVuKGNsdXN0ZXIgPT4ge1xyXG4gICAgICBpZiAoYy5taW5pbXVtQ2x1c3RlclNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsdXN0ZXIuc2V0TWluaW11bUNsdXN0ZXJTaXplKGMubWluaW11bUNsdXN0ZXJTaXplKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbWFnZUV4dGVuc2lvbihjOiBBZ21NYXJrZXJDbHVzdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcclxuICAgICAgaWYgKGMuaW1hZ2VFeHRlbnNpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsdXN0ZXIuc2V0SW1hZ2VFeHRlbnNpb24oYy5pbWFnZUV4dGVuc2lvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ2x1c3RlckV2ZW50T2JzZXJ2YWJsZTxUPihldmVudE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFQ+KSA9PiB7XHJcbiAgICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NsdXN0ZXJlckluc3RhbmNlLnRoZW4oKG06IE1hcmtlckNsdXN0ZXJlcikgPT4ge1xyXG4gICAgICAgICAgbS5hZGRMaXN0ZW5lcihldmVudE5hbWUsIChlOiBUKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiBzdWJzY3JpYmVyLm5leHQoZSkpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldENhbGN1bGF0b3IoYzogQWdtTWFya2VyQ2x1c3Rlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgYy5jYWxjdWxhdG9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY2x1c3Rlci5zZXRDYWxjdWxhdG9yKGMuY2FsY3VsYXRvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0Q2x1c3RlckNsYXNzKGM6IEFnbU1hcmtlckNsdXN0ZXIpIHtcclxuICAgIGlmICh0eXBlb2YgYy5jbHVzdGVyQ2xhc3MgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpO1xyXG4gICAgICBpbnN0YW5jZS5zZXRDbHVzdGVyQ2xhc3MoYy5jbHVzdGVyQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0RW5hYmxlUmV0aW5hSWNvbnMoYzogQWdtTWFya2VyQ2x1c3Rlcikge1xyXG4gICAgaWYgKHR5cGVvZiBjLmVuYWJsZVJldGluYUljb25zICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKTtcclxuICAgICAgaW5zdGFuY2Uuc2V0RW5hYmxlUmV0aW5hSWNvbnMoYy5lbmFibGVSZXRpbmFJY29ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRJZ25vcmVIaWRkZW4oYzogQWdtTWFya2VyQ2x1c3Rlcikge1xyXG4gICAgaWYgKHR5cGVvZiBjLmlnbm9yZUhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCk7XHJcbiAgICAgIGluc3RhbmNlLnNldElnbm9yZUhpZGRlbihjLmlnbm9yZUhpZGRlbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRJbWFnZVNpemVzKGM6IEFnbU1hcmtlckNsdXN0ZXIpIHtcclxuICAgIGlmICh0eXBlb2YgYy5pbWFnZVNpemVzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKTtcclxuICAgICAgaW5zdGFuY2Uuc2V0SW1hZ2VTaXplcyhjLmltYWdlU2l6ZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VGl0bGUoYzogQWdtTWFya2VyQ2x1c3Rlcikge1xyXG4gICAgaWYgKHR5cGVvZiBjLnRpdGxlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKTtcclxuICAgICAgaW5zdGFuY2Uuc2V0VGl0bGUoYy50aXRsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==