UNPKG

@007.surajit2023/agm-markerclusterer

Version:

Angular Google Maps (AGM) extension for markerclusterer support

170 lines 22.1 kB
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==