UNPKG

@boldadmin/angular-google-maps

Version:
268 lines 21.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { EventPublisher } from '@boldadmin/event-publisher'; import { Coordinates } from '../value-object/coordinates'; import { Location } from '../value-object/location'; import { AngularGoogleMapsGeocoder } from './angular-google-maps-geocoder.service'; import { GoogleMapsFactory } from './google-maps-factory.service'; export class AngularGoogleMapsBuilder { /** * @param {?} googleMapsFactory * @param {?} geocoder * @param {?} eventPublisher */ constructor(googleMapsFactory, geocoder, eventPublisher) { this.googleMapsFactory = googleMapsFactory; this.geocoder = geocoder; this.eventPublisher = eventPublisher; } /** * @template THIS * @this {THIS} * @param {?} mapOptions * @return {THIS} */ createMap(mapOptions) { (/** @type {?} */ (this)).map = (/** @type {?} */ (this)).googleMapsFactory.createMap(mapOptions); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @param {?} markerOptions * @return {THIS} */ addCenterMarker(markerOptions) { (/** @type {?} */ (this)).marker = (/** @type {?} */ (this)).googleMapsFactory.createMarker(markerOptions); (/** @type {?} */ (this)).marker.setPosition((/** @type {?} */ (this)).map.getCenter()); (/** @type {?} */ (this)).marker.setMap((/** @type {?} */ (this)).map); (/** @type {?} */ (this)).addMarkerListeners(); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @param {?} circleOptions * @return {THIS} */ addCircle(circleOptions) { (/** @type {?} */ (this)).circle = (/** @type {?} */ (this)).googleMapsFactory.createCircle(circleOptions); (/** @type {?} */ (this)).circle.setMap((/** @type {?} */ (this)).map); (/** @type {?} */ (this)).circle.addListener('radius_changed', (/** * @return {?} */ () => (/** @type {?} */ (this)).notifyLocationChange())); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @param {?} polylineOptions * @return {THIS} */ addPolyline(polylineOptions) { /** @type {?} */ const polyline = (/** @type {?} */ (this)).googleMapsFactory.createPolyline(polylineOptions); polyline.setMap((/** @type {?} */ (this)).map); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @param {?} markerOptions * @return {THIS} */ addMarker(markerOptions) { /** @type {?} */ const marker = (/** @type {?} */ (this)).googleMapsFactory.createMarker(markerOptions); marker.setMap((/** @type {?} */ (this)).map); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ bindCircleToMarker() { (/** @type {?} */ (this)).circle.bindTo('center', (/** @type {?} */ (this)).marker, 'position'); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ hideMarker() { (/** @type {?} */ (this)).marker.setMap(null); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ hideCircle() { (/** @type {?} */ (this)).circle.setMap(null); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ addSearchBox() { /** @type {?} */ const box = (/** @type {?} */ (this)).googleMapsFactory.createSearchBox(); box.addListener('places_changed', (/** * @return {?} */ () => { /** @type {?} */ const places = box.getPlaces(); if (places[0]) { (/** @type {?} */ (this)).changeMapLocationAndZoom(places[0].geometry.location); (/** @type {?} */ (this)).changeMarkerLocation(places[0].geometry.location); /** @type {?} */ const loc = places[0].geometry.location; /** @type {?} */ const coordinates = new Coordinates(loc.lat(), loc.lng()); (/** @type {?} */ (this)).eventPublisher.notify('locationChanged', new Location(coordinates, (/** @type {?} */ (this)).circle.getRadius())); } })); return (/** @type {?} */ (this)); } /** * @private * @return {?} */ addMarkerListeners() { this.marker.addListener('dragend', (/** * @return {?} */ () => this.notifyLocationChange())); this.marker.addListener('dragend', (/** * @param {?} mouseEvent * @return {?} */ mouseEvent => this.reverseGeocode(mouseEvent))); this.map.addListener('click', (/** * @param {?} mouseEvent * @return {?} */ mouseEvent => this.changeMarkerLocation(mouseEvent.latLng))); this.map.addListener('click', (/** * @return {?} */ () => this.notifyLocationChange())); this.map.addListener('click', (/** * @param {?} mouseEvent * @return {?} */ mouseEvent => this.reverseGeocode(mouseEvent))); } /** * @private * @return {?} */ notifyLocationChange() { this.eventPublisher.notify('locationChanged', new Location(this.getCoordinates(), this.getRadius())); } /** * @private * @return {?} */ getRadius() { /** @type {?} */ let radiusInMeters = 0; if (this.circle !== undefined) radiusInMeters = this.circle.getRadius(); return radiusInMeters; } /** * @private * @return {?} */ getCoordinates() { /** @type {?} */ let coordinates = new Coordinates(0, 0); if (this.marker !== undefined) coordinates = new Coordinates(this.marker.getPosition().lat(), this.marker.getPosition().lng()); return coordinates; } /** * @private * @param {?} location * @return {?} */ changeMapLocationAndZoom(location) { this.map.panTo(location); this.map.setZoom(16); } /** * @private * @param {?} location * @return {?} */ changeMarkerLocation(location) { this.circle.setMap(this.map); this.marker.setMap(this.map); this.marker.setPosition(location); } /** * @private * @param {?} e * @return {?} */ reverseGeocode(e) { this.geocoder.reverseGeocode(new Coordinates(e.latLng.lat(), e.latLng.lng()), (/** * @param {?} address * @return {?} */ (address) => this.eventPublisher.notify('addressReverseGeocoded', address))); } } AngularGoogleMapsBuilder.decorators = [ { type: Injectable } ]; /** @nocollapse */ AngularGoogleMapsBuilder.ctorParameters = () => [ { type: GoogleMapsFactory }, { type: AngularGoogleMapsGeocoder }, { type: EventPublisher } ]; if (false) { /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.map; /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.marker; /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.circle; /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.googleMapsFactory; /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.geocoder; /** * @type {?} * @private */ AngularGoogleMapsBuilder.prototype.eventPublisher; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1nb29nbGUtbWFwcy1idWlsZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYm9sZGFkbWluL2FuZ3VsYXItZ29vZ2xlLW1hcHMvIiwic291cmNlcyI6WyJzZXJ2aWNlL2FuZ3VsYXItZ29vZ2xlLW1hcHMtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBYWpFLE1BQU0sT0FBTyx3QkFBd0I7Ozs7OztJQU1qQyxZQUFvQixpQkFBb0MsRUFDcEMsUUFBbUMsRUFDbkMsY0FBOEI7UUFGOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUEyQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDL0MsQ0FBQzs7Ozs7OztJQUVKLFNBQVMsQ0FBQyxVQUFzQjtRQUM1QixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxHQUFHLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRXZELE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsZUFBZSxDQUFDLGFBQTRCO1FBQ3hDLG1CQUFBLElBQUksRUFBQSxDQUFDLE1BQU0sR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMs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QUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQyxDQUFDOzs7Ozs7SUFDTyxjQUFjLENBQUMsQ0FBYTtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7Ozs7UUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQzlGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxFQUNoRSxDQUFBO0lBQ0wsQ0FBQzs7O1lBdEhKLFVBQVU7Ozs7WUFaRixpQkFBaUI7WUFEakIseUJBQXlCO1lBSHpCLGNBQWM7Ozs7Ozs7SUFtQm5CLHVDQUFnQjs7Ozs7SUFDaEIsMENBQXNCOzs7OztJQUN0QiwwQ0FBc0I7Ozs7O0lBRVYscURBQTRDOzs7OztJQUM1Qyw0Q0FBMkM7Ozs7O0lBQzNDLGtEQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRXZlbnRQdWJsaXNoZXIgfSBmcm9tICdAYm9sZGFkbWluL2V2ZW50LXB1Ymxpc2hlcidcbmltcG9ydCB7IENvb3JkaW5hdGVzIH0gZnJvbSAnLi4vdmFsdWUtb2JqZWN0L2Nvb3JkaW5hdGVzJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICcuLi92YWx1ZS1vYmplY3QvbG9jYXRpb24nXG5pbXBvcnQgeyBBbmd1bGFyR29vZ2xlTWFwc0dlb2NvZGVyIH0gZnJvbSAnLi9hbmd1bGFyLWdvb2dsZS1tYXBzLWdlb2NvZGVyLnNlcnZpY2UnXG5pbXBvcnQgeyBHb29nbGVNYXBzRmFjdG9yeSB9IGZyb20gJy4vZ29vZ2xlLW1hcHMtZmFjdG9yeS5zZXJ2aWNlJ1xuaW1wb3J0IENpcmNsZSA9IGdvb2dsZS5tYXBzLkNpcmNsZVxuaW1wb3J0IENpcmNsZU9wdGlvbnMgPSBnb29nbGUubWFwcy5DaXJjbGVPcHRpb25zXG5pbXBvcnQgTGF0TG5nID0gZ29vZ2xlLm1hcHMuTGF0TG5nXG5pbXBvcnQgTWFwID0gZ29vZ2xlLm1hcHMuTWFwXG5pbXBvcnQgTWFwT3B0aW9ucyA9IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnNcbmltcG9ydCBNYXJrZXIgPSBnb29nbGUubWFwcy5NYXJrZXJcbmltcG9ydCBNYXJrZXJPcHRpb25zID0gZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9uc1xuaW1wb3J0IE1vdXNlRXZlbnQgPSBnb29nbGUubWFwcy5Nb3VzZUV2ZW50XG5pbXBvcnQgUG9seWxpbmVPcHRpb25zID0gZ29vZ2xlLm1hcHMuUG9seWxpbmVPcHRpb25zXG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJHb29nbGVNYXBzQnVpbGRlciB7XG5cbiAgICBwcml2YXRlIG1hcDogTWFwXG4gICAgcHJpdmF0ZSBtYXJrZXI6IE1hcmtlclxuICAgIHByaXZhdGUgY2lyY2xlOiBDaXJjbGVcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ29vZ2xlTWFwc0ZhY3Rvcnk6IEdvb2dsZU1hcHNGYWN0b3J5LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ2VvY29kZXI6IEFuZ3VsYXJHb29nbGVNYXBzR2VvY29kZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXJcbiAgICApIHt9XG5cbiAgICBjcmVhdGVNYXAobWFwT3B0aW9uczogTWFwT3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hcCA9IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuY3JlYXRlTWFwKG1hcE9wdGlvbnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBhZGRDZW50ZXJNYXJrZXIobWFya2VyT3B0aW9uczogTWFya2VyT3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hcmtlciA9IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuY3JlYXRlTWFya2VyKG1hcmtlck9wdGlvbnMpXG4gICAgICAgIHRoaXMubWFya2VyLnNldFBvc2l0aW9uKHRoaXMubWFwLmdldENlbnRlcigpKVxuICAgICAgICB0aGlzLm1hcmtlci5zZXRNYXAodGhpcy5tYXApXG4gICAgICAgIHRoaXMuYWRkTWFya2VyTGlzdGVuZXJzKClcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBhZGRDaXJjbGUoY2lyY2xlT3B0aW9uczogQ2lyY2xlT3B0aW9ucykge1xuICAgICAgICB0aGlzLmNpcmNsZSA9IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuY3JlYXRlQ2lyY2xlKGNpcmNsZU9wdGlvbnMpXG4gICAgICAgIHRoaXMuY2lyY2xlLnNldE1hcCh0aGlzLm1hcClcbiAgICAgICAgdGhpcy5jaXJjbGUuYWRkTGlzdGVuZXIoJ3JhZGl1c19jaGFuZ2VkJywgKCkgPT4gdGhpcy5ub3RpZnlMb2NhdGlvbkNoYW5nZSgpKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGFkZFBvbHlsaW5lKHBvbHlsaW5lT3B0aW9uczogUG9seWxpbmVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBvbHlsaW5lID0gdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5jcmVhdGVQb2x5bGluZShwb2x5bGluZU9wdGlvbnMpXG4gICAgICAgIHBvbHlsaW5lLnNldE1hcCh0aGlzLm1hcClcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBhZGRNYXJrZXIobWFya2VyT3B0aW9uczogTWFya2VyT3B0aW9ucykge1xuICAgICAgICBjb25zdCBtYXJrZXIgPSB0aGlzLmdvb2dsZU1hcHNGYWN0b3J5LmNyZWF0ZU1hcmtlcihtYXJrZXJPcHRpb25zKVxuICAgICAgICBtYXJrZXIuc2V0TWFwKHRoaXMubWFwKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGJpbmRDaXJjbGVUb01hcmtlcigpIHtcbiAgICAgICAgdGhpcy5jaXJjbGUuYmluZFRvKCdjZW50ZXInLCB0aGlzLm1hcmtlciwgJ3Bvc2l0aW9uJylcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBoaWRlTWFya2VyKCkge1xuICAgICAgICB0aGlzLm1hcmtlci5zZXRNYXAobnVsbClcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBoaWRlQ2lyY2xlKCkge1xuICAgICAgICB0aGlzLmNpcmNsZS5zZXRNYXAobnVsbClcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBhZGRTZWFyY2hCb3goKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuY3JlYXRlU2VhcmNoQm94KClcblxuICAgICAgICBib3guYWRkTGlzdGVuZXIoJ3BsYWNlc19jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VzID0gYm94LmdldFBsYWNlcygpXG4gICAgICAgICAgICBpZiAocGxhY2VzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VNYXBMb2NhdGlvbkFuZFpvb20ocGxhY2VzWzBdLmdlb21ldHJ5LmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTWFya2VyTG9jYXRpb24ocGxhY2VzWzBdLmdlb21ldHJ5LmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGNvbnN0IGxvYyA9IHBsYWNlc1swXS5nZW9tZXRyeS5sb2NhdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gbmV3IENvb3JkaW5hdGVzKGxvYy5sYXQoKSwgbG9jLmxuZygpKVxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRQdWJsaXNoZXIubm90aWZ5KCdsb2NhdGlvbkNoYW5nZWQnLCBuZXcgTG9jYXRpb24oY29vcmRpbmF0ZXMsIHRoaXMuY2lyY2xlLmdldFJhZGl1cygpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1hcmtlckxpc3RlbmVycygpIHtcbiAgICAgICAgdGhpcy5tYXJrZXIuYWRkTGlzdGVuZXIoJ2RyYWdlbmQnLCAoKSA9PiB0aGlzLm5vdGlmeUxvY2F0aW9uQ2hhbmdlKCkpXG4gICAgICAgIHRoaXMubWFya2VyLmFkZExpc3RlbmVyKCdkcmFnZW5kJywgbW91c2VFdmVudCA9PiB0aGlzLnJldmVyc2VHZW9jb2RlKG1vdXNlRXZlbnQpKVxuICAgICAgICB0aGlzLm1hcC5hZGRMaXN0ZW5lcignY2xpY2snLCBtb3VzZUV2ZW50ID0+IHRoaXMuY2hhbmdlTWFya2VyTG9jYXRpb24obW91c2VFdmVudC5sYXRMbmcpKVxuICAgICAgICB0aGlzLm1hcC5hZGRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLm5vdGlmeUxvY2F0aW9uQ2hhbmdlKCkpXG4gICAgICAgIHRoaXMubWFwLmFkZExpc3RlbmVyKCdjbGljaycsIG1vdXNlRXZlbnQgPT4gdGhpcy5yZXZlcnNlR2VvY29kZShtb3VzZUV2ZW50KSlcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUxvY2F0aW9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmV2ZW50UHVibGlzaGVyLm5vdGlmeSgnbG9jYXRpb25DaGFuZ2VkJywgbmV3IExvY2F0aW9uKHRoaXMuZ2V0Q29vcmRpbmF0ZXMoKSwgdGhpcy5nZXRSYWRpdXMoKSkpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSYWRpdXMoKSB7XG4gICAgICAgIGxldCByYWRpdXNJbk1ldGVycyA9IDBcbiAgICAgICAgaWYgKHRoaXMuY2lyY2xlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByYWRpdXNJbk1ldGVycyA9IHRoaXMuY2lyY2xlLmdldFJhZGl1cygpXG5cbiAgICAgICAgcmV0dXJuIHJhZGl1c0luTWV0ZXJzXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb29yZGluYXRlcygpIHtcbiAgICAgICAgbGV0IGNvb3JkaW5hdGVzID0gbmV3IENvb3JkaW5hdGVzKDAsIDApXG4gICAgICAgIGlmICh0aGlzLm1hcmtlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBuZXcgQ29vcmRpbmF0ZXModGhpcy5tYXJrZXIuZ2V0UG9zaXRpb24oKS5sYXQoKSwgdGhpcy5tYXJrZXIuZ2V0UG9zaXRpb24oKS5sbmcoKSlcblxuICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXNcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZU1hcExvY2F0aW9uQW5kWm9vbShsb2NhdGlvbjogTGF0TG5nKSB7XG4gICAgICAgIHRoaXMubWFwLnBhblRvKGxvY2F0aW9uKVxuICAgICAgICB0aGlzLm1hcC5zZXRab29tKDE2KVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlTWFya2VyTG9jYXRpb24obG9jYXRpb246IExhdExuZykge1xuICAgICAgICB0aGlzLmNpcmNsZS5zZXRNYXAodGhpcy5tYXApXG4gICAgICAgIHRoaXMubWFya2VyLnNldE1hcCh0aGlzLm1hcClcbiAgICAgICAgdGhpcy5tYXJrZXIuc2V0UG9zaXRpb24obG9jYXRpb24pXG4gICAgfVxuICAgIHByaXZhdGUgcmV2ZXJzZUdlb2NvZGUoZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdlb2NvZGVyLnJldmVyc2VHZW9jb2RlKG5ldyBDb29yZGluYXRlcyhlLmxhdExuZy5sYXQoKSwgZS5sYXRMbmcubG5nKCkpLCAoYWRkcmVzczogc3RyaW5nKSA9PlxuICAgICAgICAgICAgdGhpcy5ldmVudFB1Ymxpc2hlci5ub3RpZnkoJ2FkZHJlc3NSZXZlcnNlR2VvY29kZWQnLCBhZGRyZXNzKVxuICAgICAgICApXG4gICAgfVxufVxuIl19