UNPKG

@project-sunbird/sunbird-epub-player-v9

Version:

The Epub player library is powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms _(mobile app, web portal, offline desktop app)_ to drive reusability and maintainability, hence reducing the redundant development

147 lines 19.6 kB
import { Injectable, EventEmitter } from '@angular/core'; import { telemetryType } from '../../sunbird-epub.constant'; import * as i0 from "@angular/core"; import * as i1 from "../utilService/util.service"; import * as i2 from "../../sunbird-epub-player.service"; import * as i3 from "@angular/common/http"; export class ViwerService { constructor(utilService, epubPlayerService, http) { this.utilService = utilService; this.epubPlayerService = epubPlayerService; this.http = http; this.currentIndex = 0; this.totalNumberOfPages = 0; this.endPageSeen = false; this.timeSpent = '0:0'; this.version = '1.0'; this.playerEvent = new EventEmitter(); this.isAvailableLocally = false; this.isEndEventRaised = false; } initialize({ context, config, metadata }) { this.epubPlayerStartTime = this.epubLastPageTime = new Date().getTime(); this.totalNumberOfPages = 0; this.currentIndex = 0; this.contentName = metadata.name; this.identifier = metadata.identifier; this.artifactUrl = metadata.artifactUrl; this.isAvailableLocally = metadata.isAvailableLocally; if (this.isAvailableLocally) { const basePath = (metadata.streamingUrl) ? (metadata.streamingUrl) : (metadata.basePath || metadata.baseDir); this.src = `${basePath}/${metadata.artifactUrl}`; } else { this.src = metadata.streamingUrl || metadata.artifactUrl; } if (context.userData) { const { userData: { firstName, lastName } } = context; this.userName = firstName === lastName ? firstName : `${firstName} ${lastName}`; } this.metaData = { pagesVisited: [], totalPages: 0, duration: [], zoom: [], rotation: [] }; this.showDownloadPopup = false; this.endPageSeen = false; } raiseStartEvent(event) { this.currentIndex = event.items[0].index; const duration = new Date().getTime() - this.epubPlayerStartTime; const startEvent = { eid: 'START', ver: this.version, edata: { type: 'START', currentPage: this.currentIndex, duration }, metaData: this.metaData }; this.playerEvent.emit(startEvent); this.epubLastPageTime = this.epubPlayerStartTime = new Date().getTime(); this.epubPlayerService.start(duration); } raiseHeartBeatEvent(event, teleType) { if (event.data) { this.currentIndex = event.data.index; } const eventType = event.type ? event.type : event; const heartBeatEvent = { eid: 'HEARTBEAT', ver: this.version, edata: { type: eventType, currentPage: this.currentIndex }, metaData: this.metaData }; this.playerEvent.emit(heartBeatEvent); if (telemetryType.IMPRESSION === teleType) { this.epubPlayerService.impression(this.currentIndex); } if (telemetryType.INTERACT === teleType) { this.epubPlayerService.interact(eventType.toLowerCase(), this.currentIndex); } } raiseEndEvent(event) { if (!this.isEndEventRaised) { this.currentIndex = event.data.index; const percentage = event.data.percentage || 0; if (event.data.percentage) { this.endPageSeen = true; } const duration = new Date().getTime() - this.epubPlayerStartTime; this.metaData.duration = duration; this.metaData.totalPages = this.totalNumberOfPages; const endEvent = { eid: 'END', ver: this.version, edata: { type: 'END', currentPage: event.data.index, totalPages: this.totalNumberOfPages, duration }, metaData: this.metaData }; this.playerEvent.emit(endEvent); const visitedlength = this.currentIndex; this.timeSpent = this.utilService.getTimeSpentText(this.epubPlayerStartTime); this.epubPlayerService.end(duration, percentage, this.currentIndex, this.endPageSeen); } } raiseExceptionLog(errorCode, pageIndex, errorType, traceId, stacktrace) { const exceptionLogEvent = { eid: 'ERROR', edata: { err: errorCode, errtype: errorType, requestid: traceId || '', stacktrace } }; this.playerEvent.emit(exceptionLogEvent); this.epubPlayerService.error(errorCode, errorType, pageIndex, stacktrace); } isValidEpubSrc(src) { return new Promise(async (resolve, reject) => { this.http.get(src, { responseType: 'blob' }).toPromise().then((res) => { resolve(res); }).catch((error) => { reject(error); }); }); } /** @nocollapse */ static { this.ɵfac = function ViwerService_Factory(t) { return new (t || ViwerService)(i0.ɵɵinject(i1.UtilService), i0.ɵɵinject(i2.EpubPlayerService), i0.ɵɵinject(i3.HttpClient)); }; } /** @nocollapse */ static { this.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: ViwerService, factory: ViwerService.ɵfac, providedIn: 'root' }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViwerService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], () => [{ type: i1.UtilService }, { type: i2.EpubPlayerService }, { type: i3.HttpClient }], null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml3ZXItc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1bmJpcmQtZXB1Yi1wbGF5ZXIvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXJTZXJ2aWNlL3Zpd2VyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQU01RCxNQUFNLE9BQU8sWUFBWTtJQW9CdkIsWUFDVSxXQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsSUFBZ0I7UUFGaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBckJuQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQix1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFHdkIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQVN0Qyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBSzVCLENBQUM7SUFFTCxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBZ0I7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdB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QUUsU0FBUyxFQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBRztRQUNoQixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUcsTUFBTSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Z0dBbkpVLFlBQVk7c0dBQVosWUFBWSxXQUFaLFlBQVksbUJBRlgsTUFBTTs7aUZBRVAsWUFBWTtjQUh4QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXllckNvbmZpZyB9IGZyb20gJy4uLy4uL3N1bmJpcmQtZXB1Yi1wbGF5ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVwdWJQbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3VuYmlyZC1lcHViLXBsYXllci5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbFNlcnZpY2UvdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IHRlbGVtZXRyeVR5cGUgfSBmcm9tICcuLi8uLi9zdW5iaXJkLWVwdWIuY29uc3RhbnQnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVml3ZXJTZXJ2aWNlIHtcblxuICBwdWJsaWMgY3VycmVudEluZGV4ID0gMDtcbiAgcHVibGljIHRvdGFsTnVtYmVyT2ZQYWdlcyA9IDA7XG4gIHB1YmxpYyBlcHViUGxheWVyU3RhcnRUaW1lOiBudW1iZXI7XG4gIHB1YmxpYyBlcHViTGFzdFBhZ2VUaW1lOiBudW1iZXI7XG4gIHB1YmxpYyBlbmRQYWdlU2VlbiA9IGZhbHNlO1xuICBwdWJsaWMgdGltZVNwZW50ID0gJzA6MCc7XG4gIHByaXZhdGUgdmVyc2lvbiA9ICcxLjAnO1xuICBwdWJsaWMgcGxheWVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIGNvbnRlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBsb2FkaW5nUHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHVibGljIHNob3dEb3dubG9hZFBvcHVwOiBib29sZWFuO1xuICBwdWJsaWMgc3JjOiBzdHJpbmc7XG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbWV0YURhdGE6IGFueTtcbiAgcHVibGljIGlkZW50aWZpZXI6IGFueTtcbiAgcHVibGljIGFydGlmYWN0VXJsOiBhbnk7XG4gIHB1YmxpYyBpc0F2YWlsYWJsZUxvY2FsbHkgPSBmYWxzZTtcbiAgcHVibGljIGlzRW5kRXZlbnRSYWlzZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcHViUGxheWVyU2VydmljZTogRXB1YlBsYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGNvbmZpZywgbWV0YWRhdGEgfTogUGxheWVyQ29uZmlnKSB7XG4gICAgdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lID0gdGhpcy5lcHViTGFzdFBhZ2VUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy50b3RhbE51bWJlck9mUGFnZXMgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLmNvbnRlbnROYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBtZXRhZGF0YS5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXJ0aWZhY3RVcmwgPSBtZXRhZGF0YS5hcnRpZmFjdFVybDtcbiAgICB0aGlzLmlzQXZhaWxhYmxlTG9jYWxseSA9IG1ldGFkYXRhLmlzQXZhaWxhYmxlTG9jYWxseTtcbiAgICBpZiAodGhpcy5pc0F2YWlsYWJsZUxvY2FsbHkpIHtcbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gKG1ldGFkYXRhLnN0cmVhbWluZ1VybCkgPyAobWV0YWRhdGEuc3RyZWFtaW5nVXJsKSA6IChtZXRhZGF0YS5iYXNlUGF0aCB8fCBtZXRhZGF0YS5iYXNlRGlyKTtcbiAgICAgIHRoaXMuc3JjID0gYCR7YmFzZVBhdGh9LyR7bWV0YWRhdGEuYXJ0aWZhY3RVcmx9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcmMgPSBtZXRhZGF0YS5zdHJlYW1pbmdVcmwgfHwgbWV0YWRhdGEuYXJ0aWZhY3RVcmw7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnVzZXJEYXRhKSB7XG4gICAgICBjb25zdCB7IHVzZXJEYXRhOiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfSB9ID0gY29udGV4dDtcbiAgICAgIHRoaXMudXNlck5hbWUgPSBmaXJzdE5hbWUgPT09IGxhc3ROYW1lID8gZmlyc3ROYW1lIDogYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWA7XG4gICAgfVxuICAgIHRoaXMubWV0YURhdGEgPSB7XG4gICAgICBwYWdlc1Zpc2l0ZWQ6IFtdLFxuICAgICAgdG90YWxQYWdlczogMCxcbiAgICAgIGR1cmF0aW9uOiBbXSxcbiAgICAgIHpvb206IFtdLFxuICAgICAgcm90YXRpb246IFtdXG4gICAgfTtcbiAgICB0aGlzLnNob3dEb3dubG9hZFBvcHVwID0gZmFsc2U7XG4gICAgdGhpcy5lbmRQYWdlU2VlbiA9IGZhbHNlO1xuICB9XG5cbiAgcmFpc2VTdGFydEV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBldmVudC5pdGVtc1swXS5pbmRleDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lO1xuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSB7XG4gICAgICBlaWQ6ICdTVEFSVCcsXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcbiAgICAgIGVkYXRhOiB7XG4gICAgICAgIHR5cGU6ICdTVEFSVCcsXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleCxcbiAgICAgICAgZHVyYXRpb25cbiAgICAgIH0sXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxuICAgIH07XG4gICAgdGhpcy5wbGF5ZXJFdmVudC5lbWl0KHN0YXJ0RXZlbnQpO1xuICAgIHRoaXMuZXB1Ykxhc3RQYWdlVGltZSA9IHRoaXMuZXB1YlBsYXllclN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMuZXB1YlBsYXllclNlcnZpY2Uuc3RhcnQoZHVyYXRpb24pO1xuICB9XG5cbiAgcmFpc2VIZWFydEJlYXRFdmVudChldmVudCwgdGVsZVR5cGU/KSB7XG4gICAgaWYgKGV2ZW50LmRhdGEpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuZGF0YS5pbmRleDtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICBjb25zdCBoZWFydEJlYXRFdmVudCA9IHtcbiAgICAgIGVpZDogJ0hFQVJUQkVBVCcsXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcbiAgICAgIGVkYXRhOiB7XG4gICAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuY3VycmVudEluZGV4XG4gICAgICB9LFxuICAgICAgbWV0YURhdGE6IHRoaXMubWV0YURhdGFcbiAgICB9O1xuICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChoZWFydEJlYXRFdmVudCk7XG4gICAgaWYgKHRlbGVtZXRyeVR5cGUuSU1QUkVTU0lPTiA9PT0gdGVsZVR5cGUpIHtcbiAgICAgIHRoaXMuZXB1YlBsYXllclNlcnZpY2UuaW1wcmVzc2lvbih0aGlzLmN1cnJlbnRJbmRleCk7XG4gICAgfVxuICAgIGlmICh0ZWxlbWV0cnlUeXBlLklOVEVSQUNUID09PSB0ZWxlVHlwZSkge1xuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5pbnRlcmFjdChldmVudFR5cGUudG9Mb3dlckNhc2UoKSwgdGhpcy5jdXJyZW50SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJhaXNlRW5kRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNFbmRFdmVudFJhaXNlZCkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBldmVudC5kYXRhLmluZGV4O1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IGV2ZW50LmRhdGEucGVyY2VudGFnZSB8fCAwO1xuICAgICAgaWYgKGV2ZW50LmRhdGEucGVyY2VudGFnZSkge1xuICAgICAgICB0aGlzLmVuZFBhZ2VTZWVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlzLmVwdWJQbGF5ZXJTdGFydFRpbWU7XG4gICAgICB0aGlzLm1ldGFEYXRhLmR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgICB0aGlzLm1ldGFEYXRhLnRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcztcbiAgICAgIGNvbnN0IGVuZEV2ZW50ID0ge1xuICAgICAgICBlaWQ6ICdFTkQnLFxuICAgICAgICB2ZXI6IHRoaXMudmVyc2lvbixcbiAgICAgICAgZWRhdGE6IHtcbiAgICAgICAgICB0eXBlOiAnRU5EJyxcbiAgICAgICAgICBjdXJyZW50UGFnZTogZXZlbnQuZGF0YS5pbmRleCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyxcbiAgICAgICAgICBkdXJhdGlvblxuICAgICAgICB9LFxuICAgICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxuICAgICAgfTtcbiAgICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChlbmRFdmVudCk7XG4gICAgICBjb25zdCB2aXNpdGVkbGVuZ3RoID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICB0aGlzLnRpbWVTcGVudCA9IHRoaXMudXRpbFNlcnZpY2UuZ2V0VGltZVNwZW50VGV4dCh0aGlzLmVwdWJQbGF5ZXJTdGFydFRpbWUpO1xuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5lbmQoZHVyYXRpb24sIHBlcmNlbnRhZ2UsIHRoaXMuY3VycmVudEluZGV4LCB0aGlzLmVuZFBhZ2VTZWVuKTtcbiAgICB9XG4gIH1cblxuXG4gIHJhaXNlRXhjZXB0aW9uTG9nKGVycm9yQ29kZTogc3RyaW5nICwgcGFnZUluZGV4LCBlcnJvclR5cGU6IHN0cmluZyAsIHRyYWNlSWQgLCBzdGFja3RyYWNlOiBFcnJvciApIHtcbiAgICBjb25zdCBleGNlcHRpb25Mb2dFdmVudCA9IHtcbiAgICAgIGVpZDogJ0VSUk9SJyxcbiAgICAgIGVkYXRhOiB7XG4gICAgICAgICAgZXJyOiBlcnJvckNvZGUsXG4gICAgICAgICAgZXJydHlwZTogZXJyb3JUeXBlLFxuICAgICAgICAgIHJlcXVlc3RpZDogdHJhY2VJZCB8fCAnJyxcbiAgICAgICAgICBzdGFja3RyYWNlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnBsYXllckV2ZW50LmVtaXQoZXhjZXB0aW9uTG9nRXZlbnQpO1xuICAgIHRoaXMuZXB1YlBsYXllclNlcnZpY2UuZXJyb3IoZXJyb3JDb2RlICwgZXJyb3JUeXBlLCBwYWdlSW5kZXggLCBzdGFja3RyYWNlKTtcbiAgfVxuXG4gIGlzVmFsaWRFcHViU3JjKHNyYyk6IFByb21pc2U8QmxvYj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSAsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5odHRwLmdldChzcmMsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkudG9Qcm9taXNlKCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==