UNPKG

air-lib

Version:

This is Air's angular component library

184 lines 15.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { PagingService } from './../../services/paging.service'; import { Component } from '@angular/core'; import { Router } from '@angular/router'; import { HttpService } from '../../services/http.service'; import { PagingEvent } from '../../entities/paging-event'; export class BaseMasterComponent { /** * @param {?} router * @param {?} httpService */ constructor(router, httpService) { this.router = router; this.httpService = httpService; } /** * @return {?} */ ngOnInit() { this.setData(); } /** * @protected * @return {?} */ setData() { /** @type {?} */ const self = this; self.httpService.get(self.apiCall.url) .subscribe((data) => { /** @type {?} */ const body = (/** @type {?} */ (data.body)); /** @type {?} */ const hash = data.headers.get(BaseMasterComponent.CACHED_HEADER); if (hash === null) { return; } /** @type {?} */ const pageNo = this.getPageNo(self.apiCall.url); /** @type {?} */ const itemsOnPage = this.getPageEntries(self.apiCall.url); this.setHash(hash, pageNo, itemsOnPage); this.initialize(body); return body; }, err => { throw Error(err); }); } /** * @param {?} url * @return {?} */ getPageNo(url) { /** @type {?} */ let result = -1; /** @type {?} */ const regexp = /page=[0-9]+/gm; /** @type {?} */ const matches = url.match(regexp); if (matches && matches.length > 0) { result = +matches[0].replace('page=', ''); } if (result === -1) { return 1; } return result; } /** * @param {?} url * @return {?} */ getPageEntries(url) { /** @type {?} */ let result = -1; /** @type {?} */ const regexp = /pageentries=[0-9]+/gm; /** @type {?} */ const matches = url.match(regexp); if (matches && matches.length > 0) { result = +matches[0].replace('pageentries=', ''); } if (result === -1) { return 50; } return result; } /** * @protected * @param {?} response * @return {?} */ initialize(response) { } /** * @param {?} data * @param {?} apiCall * @return {?} */ parseHttpHeader(data, apiCall) { this.apiCall = apiCall; /** @type {?} */ const hash = data.headers.get(BaseMasterComponent.CACHED_HEADER); /** @type {?} */ const pageNo = this.getPageNo(apiCall.url); /** @type {?} */ const itemsOnPage = this.getPageEntries(apiCall.url); if (hash !== null) { this.setHash(hash, pageNo, itemsOnPage); } } /** * @protected * @param {?} id * @param {?} hash * @param {?} i * @param {?} apiCall * @param {?} total * @param {?=} itemsOnPage * @return {?} */ openDetails(id, hash, i, apiCall, total, itemsOnPage = 50) { /** @type {?} */ const pagingEvent = new PagingEvent(hash); pagingEvent.startIndex = 0; /** @type {?} */ const index = (this.getPageNo(apiCall.url) - 1) * itemsOnPage + i; pagingEvent.currentIndex = index; pagingEvent.total = total; pagingEvent.itemsOnPage = itemsOnPage; pagingEvent.backUrl = encodeURIComponent(this.router.url); pagingEvent.detailsUrl = this.detailsUrl; pagingEvent.currentId = id; pagingEvent.targetUrl = PagingService.buildRedirectUrl(pagingEvent); pagingEvent.apiCall = apiCall; PagingService.saveToLocalStorage(pagingEvent); this.router.navigateByUrl(pagingEvent.targetUrl); } /** * @param {?} hashFromHeader * @param {?} currentPage * @param {?} itemsOnPage * @return {?} */ setHash(hashFromHeader, currentPage, itemsOnPage) { this.hash = hashFromHeader; PagingService.fireHashChangedEvent(hashFromHeader, this.context, currentPage, itemsOnPage); } } BaseMasterComponent.CACHED_HEADER = 'SearchResultsHash'; BaseMasterComponent.decorators = [ { type: Component, args: [{ template: '', providers: [PagingService] }] } ]; BaseMasterComponent.ctorParameters = () => [ { type: Router }, { type: HttpService } ]; if (false) { /** @type {?} */ BaseMasterComponent.CACHED_HEADER; /** @type {?} */ BaseMasterComponent.prototype.apiCall; /** @type {?} */ BaseMasterComponent.prototype.detailsUrl; /** @type {?} */ BaseMasterComponent.prototype.hash; /** @type {?} */ BaseMasterComponent.prototype.data; /** @type {?} */ BaseMasterComponent.prototype.context; /** * @type {?} * @protected */ BaseMasterComponent.prototype.router; /** * @type {?} * @protected */ BaseMasterComponent.prototype.httpService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tYXN0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2Jhc2UtbWFzdGVyL2Jhc2UtbWFzdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFPMUQsTUFBTTs7Ozs7SUFTSixZQUFzQixNQUFjLEVBQVksV0FBd0I7UUFBbEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBRXhFLENBQUM7Ozs7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7Ozs7O0lBRVMsT0FBTzs7Y0FDVCxJQUFJLEdBQUcsSUFBSTtRQUVqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQzthQUNuQyxTQUFTLENBQ1IsQ0FBQyxJQUEwQixFQUFFLEVBQUU7O2tCQUV2QixJQUFJLEdBQUcsbUJBQUEsSUFBSSxDQUFDLElBQUksRUFBTzs7a0JBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7WUFDaEUsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUNqQixPQUFPO2FBQ1I7O2tCQUNLLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDOztrQkFDekMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDN0IsQ0FBQztJQUNOLENBQUM7Ozs7O0lBRU0sU0FBUyxDQUFDLEdBQVc7O1lBQ3RCLE1BQU0sR0FBRyxDQUFDLENBQUM7O2NBQ1QsTUFBTSxHQUFHLGVBQWU7O2NBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7OztJQUVNLGNBQWMsQ0FBQyxHQUFXOztZQUMzQixNQUFNLEdBQUcsQ0FBQyxDQUFDOztjQUNULE1BQU0sR0FBRyxzQkFBc0I7O2NBQy9CLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFFUyxVQUFVLENBQUMsUUFBYSxJQUFJLENBQUM7Ozs7OztJQUVoQyxlQUFlLENBQUMsSUFBMEIsRUFBRSxPQUFvQjtRQUNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7Y0FDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQzs7Y0FDMUQsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Y0FDcEMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNwRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQzs7Ozs7Ozs7Ozs7SUFFUyxXQUFXLENBQUMsRUFBVSxFQUFFLElBQVksRUFBRSxDQUFTLEVBQUUsT0FBb0IsRUFBRSxLQUFhLEVBQUUsY0FBc0IsRUFBRTs7Y0FFaEgsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztRQUV6QyxXQUFXLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzs7Y0FDckIsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUM7UUFDakUsV0FBVyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDakMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDMUIsV0FBVyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDdEMsV0FBVyxDQUFDLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUMzQixXQUFXLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxXQUFXLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUM5QixhQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRW5ELENBQUM7Ozs7Ozs7SUFFTSxPQUFPLENBQUMsY0FBc0IsRUFBRSxXQUFtQixFQUFFLFdBQW1CO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBQzNCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0YsQ0FBQzs7QUFuR2EsaUNBQWEsR0FBRyxtQkFBbUIsQ0FBQzs7WUFQbkQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQzthQUMzQjs7O1lBUFEsTUFBTTtZQUNOLFdBQVc7Ozs7SUFVbEIsa0NBQWtEOztJQUNsRCxzQ0FBNEI7O0lBQzVCLHlDQUEwQjs7SUFDMUIsbUNBQW9COztJQUNwQixtQ0FBaUI7O0lBQ2pCLHNDQUF1Qjs7Ozs7SUFFWCxxQ0FBd0I7Ozs7O0lBQUUsMENBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpQ2FsbEluZm8gfSBmcm9tICcuLy4uLy4uL2VudGl0aWVzL2FwaS1jYWxsLWluZm8nO1xyXG5pbXBvcnQgeyBQYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wYWdpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmdFdmVudCB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3BhZ2luZy1ldmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgcHJvdmlkZXJzOiBbUGFnaW5nU2VydmljZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlTWFzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBDQUNIRURfSEVBREVSID0gJ1NlYXJjaFJlc3VsdHNIYXNoJztcclxuICBwdWJsaWMgYXBpQ2FsbDogQXBpQ2FsbEluZm87XHJcbiAgcHVibGljIGRldGFpbHNVcmw6IHN0cmluZztcclxuICBwdWJsaWMgaGFzaDogc3RyaW5nO1xyXG4gIHB1YmxpYyBkYXRhOiBhbnk7XHJcbiAgcHVibGljIGNvbnRleHQ6IHN0cmluZztcclxuICBcclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByb3RlY3RlZCBodHRwU2VydmljZTogSHR0cFNlcnZpY2UpIHtcclxuICBcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0RGF0YSgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHNlbGYuaHR0cFNlcnZpY2UuZ2V0KHNlbGYuYXBpQ2FsbC51cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGE6IEh0dHBSZXNwb25zZTxPYmplY3Q+KSA9PiB7XHJcblxyXG4gICAgICAgICAgY29uc3QgYm9keSA9IGRhdGEuYm9keSBhcyBhbnk7XHJcbiAgICAgICAgICBjb25zdCBoYXNoID0gZGF0YS5oZWFkZXJzLmdldChCYXNlTWFzdGVyQ29tcG9uZW50LkNBQ0hFRF9IRUFERVIpO1xyXG4gICAgICAgICAgaWYgKGhhc2ggPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcGFnZU5vID0gdGhpcy5nZXRQYWdlTm8oc2VsZi5hcGlDYWxsLnVybCk7XHJcbiAgICAgICAgICBjb25zdCBpdGVtc09uUGFnZSA9IHRoaXMuZ2V0UGFnZUVudHJpZXMoc2VsZi5hcGlDYWxsLnVybCk7XHJcbiAgICAgICAgICB0aGlzLnNldEhhc2goaGFzaCwgcGFnZU5vLCBpdGVtc09uUGFnZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplKGJvZHkpO1xyXG4gICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnIgPT4geyB0aHJvdyBFcnJvcihlcnIpOyB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZU5vKHVybDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCByZXN1bHQgPSAtMTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IC9wYWdlPVswLTldKy9nbTtcclxuICAgIGNvbnN0IG1hdGNoZXMgPSB1cmwubWF0Y2gocmVnZXhwKTtcclxuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXN1bHQgPSArbWF0Y2hlc1swXS5yZXBsYWNlKCdwYWdlPScsICcnKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQgPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYWdlRW50cmllcyh1cmw6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgcmVzdWx0ID0gLTE7XHJcbiAgICBjb25zdCByZWdleHAgPSAvcGFnZWVudHJpZXM9WzAtOV0rL2dtO1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaChyZWdleHApO1xyXG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJlc3VsdCA9ICttYXRjaGVzWzBdLnJlcGxhY2UoJ3BhZ2VlbnRyaWVzPScsICcnKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQgPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiA1MDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZShyZXNwb25zZTogYW55KSB7IH1cclxuXHJcbiAgcHVibGljIHBhcnNlSHR0cEhlYWRlcihkYXRhOiBIdHRwUmVzcG9uc2U8T2JqZWN0PiwgYXBpQ2FsbDogQXBpQ2FsbEluZm8pIHtcclxuICAgIHRoaXMuYXBpQ2FsbCA9IGFwaUNhbGw7XHJcbiAgICBjb25zdCBoYXNoID0gZGF0YS5oZWFkZXJzLmdldChCYXNlTWFzdGVyQ29tcG9uZW50LkNBQ0hFRF9IRUFERVIpO1xyXG4gICAgY29uc3QgcGFnZU5vID0gdGhpcy5nZXRQYWdlTm8oYXBpQ2FsbC51cmwpO1xyXG4gICAgY29uc3QgaXRlbXNPblBhZ2UgPSB0aGlzLmdldFBhZ2VFbnRyaWVzKGFwaUNhbGwudXJsKTtcclxuICAgIGlmIChoYXNoICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0SGFzaChoYXNoLCBwYWdlTm8sIGl0ZW1zT25QYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvcGVuRGV0YWlscyhpZDogc3RyaW5nLCBoYXNoOiBzdHJpbmcsIGk6IG51bWJlciwgYXBpQ2FsbDogQXBpQ2FsbEluZm8sIHRvdGFsOiBudW1iZXIsIGl0ZW1zT25QYWdlOiBudW1iZXIgPSA1MCkge1xyXG5cclxuICAgIGNvbnN0IHBhZ2luZ0V2ZW50ID0gbmV3IFBhZ2luZ0V2ZW50KGhhc2gpO1xyXG4gICAgXHJcbiAgICBwYWdpbmdFdmVudC5zdGFydEluZGV4ID0gMDtcclxuICAgIGNvbnN0IGluZGV4ID0gKHRoaXMuZ2V0UGFnZU5vKGFwaUNhbGwudXJsKSAtIDEpICogaXRlbXNPblBhZ2UgKyBpO1xyXG4gICAgcGFnaW5nRXZlbnQuY3VycmVudEluZGV4ID0gaW5kZXg7XHJcbiAgICBwYWdpbmdFdmVudC50b3RhbCA9IHRvdGFsO1xyXG4gICAgcGFnaW5nRXZlbnQuaXRlbXNPblBhZ2UgPSBpdGVtc09uUGFnZTtcclxuICAgIHBhZ2luZ0V2ZW50LmJhY2tVcmwgPSBlbmNvZGVVUklDb21wb25lbnQodGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIHBhZ2luZ0V2ZW50LmRldGFpbHNVcmwgPSB0aGlzLmRldGFpbHNVcmw7XHJcbiAgICBwYWdpbmdFdmVudC5jdXJyZW50SWQgPSBpZDtcclxuICAgIHBhZ2luZ0V2ZW50LnRhcmdldFVybCA9IFBhZ2luZ1NlcnZpY2UuYnVpbGRSZWRpcmVjdFVybChwYWdpbmdFdmVudCk7XHJcbiAgICBwYWdpbmdFdmVudC5hcGlDYWxsID0gYXBpQ2FsbDtcclxuICAgIFBhZ2luZ1NlcnZpY2Uuc2F2ZVRvTG9jYWxTdG9yYWdlKHBhZ2luZ0V2ZW50KTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhZ2luZ0V2ZW50LnRhcmdldFVybCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEhhc2goaGFzaEZyb21IZWFkZXI6IHN0cmluZywgY3VycmVudFBhZ2U6IG51bWJlciwgaXRlbXNPblBhZ2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5oYXNoID0gaGFzaEZyb21IZWFkZXI7XHJcbiAgICBQYWdpbmdTZXJ2aWNlLmZpcmVIYXNoQ2hhbmdlZEV2ZW50KGhhc2hGcm9tSGVhZGVyLCB0aGlzLmNvbnRleHQsIGN1cnJlbnRQYWdlLCBpdGVtc09uUGFnZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==