UNPKG

@nibo-ai/ngx-powerbi

Version:

TypeScript library for embedding Power BI assets (reports/dashboards/tiles) in your application. This TypeScript library is built on top of the official powerbi-client library provided by Microsoft.

213 lines 20.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-powerbi.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core'; import * as models from 'powerbi-models'; import { NgxPowerBiService } from './ngx-powerbi.service'; /** @enum {string} */ const TokenType = { Aad: "Aad", Embed: "Embed", }; export { TokenType }; /** @enum {string} */ const ReportType = { Dashboard: "Dashboard", Report: "Report", Tile: "Tile", }; export { ReportType }; export class NgxPowerBiComponent { /** * @param {?} ngxPowerBiService */ constructor(ngxPowerBiService) { this.ngxPowerBiService = ngxPowerBiService; this.embedded = new EventEmitter(); this.powerBiService = ngxPowerBiService; } /** * @return {?} */ ngAfterViewInit() { // Embed the report inside the view child that we have fetched from the DOM if (this.ngxPowerBiIFrameRef.nativeElement && this.validateRequiredAttributes()) { this.embed(this.ngxPowerBiIFrameRef.nativeElement, this.getConfig()); } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (!this.ngxPowerBiIFrameRef) { return; } const { accessToken, tokenType, embedUrl, id, type, name, options } = changes; // TODO: Validate these conditions /*if ( (accessToken.previousValue !== undefined || accessToken.previousValue === accessToken.currentValue) && embedUrl.previousValue === embedUrl.currentValue ) { return; }*/ if (this.validateRequiredAttributes()) { /** @type {?} */ const config = this.getConfig(accessToken && accessToken.currentValue, tokenType && tokenType.currentValue, embedUrl && embedUrl.currentValue, id && id.currentValue, type && type.currentValue, name && name.currentValue, options && options.currentValue); this.embed(this.ngxPowerBiIFrameRef.nativeElement, config); } else if (this.component) { this.reset(this.ngxPowerBiIFrameRef.nativeElement); } } /** * @return {?} */ ngOnDestroy() { if (this.component) { this.reset(this.ngxPowerBiIFrameRef.nativeElement); } } /** * Ensure required attributes (embedUrl and accessToken are valid before attempting to embed) * @private * @return {?} */ validateRequiredAttributes() { return (typeof this.embedUrl === 'string' && this.embedUrl.length > 0 && (typeof this.accessToken === 'string' && this.accessToken.length > 0)); } /** * Get the model class compatible token enum from our token type enum * @private * @param {?} tokenType - Token type in our custom enum format * @return {?} Token type in powerbi-models.TokenType enum format */ getTokenType(tokenType) { if (tokenType) { switch (tokenType) { case "Aad" /* Aad */: return models.TokenType.Aad; case "Embed" /* Embed */: return models.TokenType.Embed; default: return models.TokenType.Aad; } } else { // default is AAD return models.TokenType.Aad; } } /** * Returns an embed configuration object. * @private * @param {?=} accessToken - Access token required to embed a component * @param {?=} tokenType - type of accessToken: Aad or Embed * @param {?=} embedUrl - Embed URL obtained through Power BI REST API or Portal * @param {?=} id - component/element GUID * @param {?=} type - type of embedded component e.g. 'dashboard, report or tile' * @param {?=} name - name of the embedded component * @param {?=} options - Embed configuration options * @return {?} Embed configuration object */ getConfig(accessToken, tokenType, embedUrl, id, type, name, options) { // For null arguments - use the initial value // For specified arguments - use the current value return { type: type ? type : this.type ? this.type : "Report" /* Report */, embedUrl: embedUrl ? embedUrl : this.embedUrl, accessToken: accessToken ? accessToken : this.accessToken, tokenType: tokenType ? this.getTokenType(tokenType) : this.getTokenType(this.tokenType), id: id ? id : this.id, uniqueId: name ? name : this.name, settings: options ? options : this.options }; } /** * Given an HTMLElement, construct an embed configuration based on attributes and pass to service. * @private * @param {?} element - native element where the embedding needs to be done * @param {?} config - configuration to be embedded * @return {?} */ embed(element, config) { /*if (this.options) { const newConfig = { config, ...this.options }; }*/ this.component = this.powerBiService.embed(element, config); this.embedded.emit((/** @type {?} */ (this.component))); } /** * Reset the component that has been removed from DOM. * @param {?} element - native element where the embedded was made * @return {?} */ reset(element) { this.powerBiService.reset(element); this.component = null; } } NgxPowerBiComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-powerbi-component', template: '<div #ngxPowerBiIFrame style="height:100%; width: 100%;"></div>' }] } ]; /** @nocollapse */ NgxPowerBiComponent.ctorParameters = () => [ { type: NgxPowerBiService } ]; NgxPowerBiComponent.propDecorators = { accessToken: [{ type: Input }], tokenType: [{ type: Input }], embedUrl: [{ type: Input }], id: [{ type: Input }], type: [{ type: Input }], name: [{ type: Input }], options: [{ type: Input }], embedded: [{ type: Output }], ngxPowerBiIFrameRef: [{ type: ViewChild, args: ['ngxPowerBiIFrame', { static: true },] }] }; if (false) { /** @type {?} */ NgxPowerBiComponent.prototype.accessToken; /** @type {?} */ NgxPowerBiComponent.prototype.tokenType; /** @type {?} */ NgxPowerBiComponent.prototype.embedUrl; /** @type {?} */ NgxPowerBiComponent.prototype.id; /** @type {?} */ NgxPowerBiComponent.prototype.type; /** @type {?} */ NgxPowerBiComponent.prototype.name; /** @type {?} */ NgxPowerBiComponent.prototype.options; /** @type {?} */ NgxPowerBiComponent.prototype.embedded; /** @type {?} */ NgxPowerBiComponent.prototype.ngxPowerBiIFrameRef; /** * @type {?} * @private */ NgxPowerBiComponent.prototype.component; /** * @type {?} * @private */ NgxPowerBiComponent.prototype.powerBiService; /** * @type {?} * @private */ NgxPowerBiComponent.prototype.ngxPowerBiService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBvd2VyYmkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5pYm8tYWkvbmd4LXBvd2VyYmkvIiwic291cmNlcyI6WyJsaWIvbmd4LXBvd2VyYmkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRTFELE1BQWtCLFNBQVM7SUFDekIsR0FBRyxPQUFRO0lBQ1gsS0FBSyxTQUFVO0VBQ2hCOzs7QUFFRCxNQUFrQixVQUFVO0lBQzFCLFNBQVMsYUFBYztJQUN2QixNQUFNLFVBQVc7SUFDakIsSUFBSSxRQUFTO0VBQ2Q7O0FBT0QsTUFBTSxPQUFPLG1CQUFtQjs7OztJQWdCOUIsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFQOUMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFROUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztJQUMxQyxDQUFDOzs7O0lBRUQsZUFBZTtRQUNiLDJFQUEyRTtRQUMzRSxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUNqQztZQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7Ozs7O0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsT0FBTztTQUNSO2NBQ0ssRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULFFBQVEsRUFDUixFQUFFLEVBQ0YsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEVBQ1IsR0FBRyxPQUFPO1FBRVgsa0NBQWtDO1FBQ2xDOzs7OztXQUtHO1FBRUgsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRTs7a0JBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUMzQixXQUFXLElBQUksV0FBVyxDQUFDLFlBQVksRUFDdkMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQ25DLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUNqQyxFQUFFLElBQUksRUFBRSxDQUFDLFlBQVksRUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQ3pCLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLFlBQVksQ0FDaEM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDNUQ7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7Ozs7OztJQUtPLDBCQUEwQjtRQUNoQyxPQUFPLENBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN4QixDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDOzs7Ozs7O0lBT08sWUFBWSxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksU0FBUyxFQUFFO1lBQ2IsUUFBUSxTQUFTLEVBQUU7Z0JBQ2pCO29CQUNFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQzlCO29CQUNFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDO29CQUNFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDL0I7U0FDRjthQUFNO1lBQ0wsaUJBQWlCO1lBQ2pCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7U0FDN0I7SUFDSCxDQUFDOzs7Ozs7Ozs7Ozs7O0lBYU8sU0FBUyxDQUNmLFdBQW9CLEVBQ3BCLFNBQXFCLEVBQ3JCLFFBQWlCLEVBQ2pCLEVBQVcsRUFDWCxJQUFpQixFQUNqQixJQUFhLEVBQ2IsT0FBMEI7UUFFMUIsNkNBQTZDO1FBQzdDLGtEQUFrRDtRQUNsRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQWtCO1lBQzdELFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDN0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUN6RCxTQUFTLEVBQUUsU0FBUztnQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3JDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNqQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO1NBQzNDLENBQUM7SUFDSixDQUFDOzs7Ozs7OztJQU9PLEtBQUssQ0FBQyxPQUFvQixFQUFFLE1BQStCO1FBQ2pFOztXQUVHO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQUEsSUFBSSxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7Ozs7O0lBTUQsS0FBSyxDQUFDLE9BQW9CO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7OztZQXZLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsUUFBUSxFQUFFLGlFQUFpRTthQUU1RTs7OztZQWpCUSxpQkFBaUI7OzswQkFvQnZCLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLO2lCQUNMLEtBQUs7bUJBQ0wsS0FBSzttQkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsTUFBTTtrQ0FDTixTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOzs7O0lBUjdDLDBDQUE2Qjs7SUFDN0Isd0NBQThCOztJQUM5Qix1Q0FBMEI7O0lBQzFCLGlDQUFvQjs7SUFDcEIsbUNBQTBCOztJQUMxQixtQ0FBc0I7O0lBQ3RCLHNDQUFtQzs7SUFDbkMsdUNBQWdEOztJQUNoRCxrREFBK0U7Ozs7O0lBRy9FLHdDQUE2Qjs7Ozs7SUFDN0IsNkNBQTBDOzs7OztJQUU5QixnREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBwYmkgZnJvbSAncG93ZXJiaS1jbGllbnQnO1xyXG5pbXBvcnQgKiBhcyBtb2RlbHMgZnJvbSAncG93ZXJiaS1tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgTmd4UG93ZXJCaVNlcnZpY2UgfSBmcm9tICcuL25neC1wb3dlcmJpLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gVG9rZW5UeXBlIHtcclxuICBBYWQgPSAnQWFkJyxcclxuICBFbWJlZCA9ICdFbWJlZCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gUmVwb3J0VHlwZSB7XHJcbiAgRGFzaGJvYXJkID0gJ0Rhc2hib2FyZCcsXHJcbiAgUmVwb3J0ID0gJ1JlcG9ydCcsXHJcbiAgVGlsZSA9ICdUaWxlJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1wb3dlcmJpLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGU6ICc8ZGl2ICNuZ3hQb3dlckJpSUZyYW1lIHN0eWxlPVwiaGVpZ2h0OjEwMCU7IHdpZHRoOiAxMDAlO1wiPjwvZGl2PicsXHJcbiAgc3R5bGVzOiBbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UG93ZXJCaUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9rZW5UeXBlOiBUb2tlblR5cGU7XHJcbiAgQElucHV0KCkgZW1iZWRVcmw6IHN0cmluZztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFJlcG9ydFR5cGU7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG1vZGVscy5JU2V0dGluZ3M7XHJcbiAgQE91dHB1dCgpIGVtYmVkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQFZpZXdDaGlsZCgnbmd4UG93ZXJCaUlGcmFtZScsIHtzdGF0aWM6IHRydWV9KSBuZ3hQb3dlckJpSUZyYW1lUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBQcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgY29tcG9uZW50OiBwYmkuRW1iZWQ7XHJcbiAgcHJpdmF0ZSBwb3dlckJpU2VydmljZTogTmd4UG93ZXJCaVNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmd4UG93ZXJCaVNlcnZpY2U6IE5neFBvd2VyQmlTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlID0gbmd4UG93ZXJCaVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBFbWJlZCB0aGUgcmVwb3J0IGluc2lkZSB0aGUgdmlldyBjaGlsZCB0aGF0IHdlIGhhdmUgZmV0Y2hlZCBmcm9tIHRoZSBET01cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lbWJlZCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRDb25maWcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIXRoaXMubmd4UG93ZXJCaUlGcmFtZVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGUsXHJcbiAgICAgIGVtYmVkVXJsLFxyXG4gICAgICBpZCxcclxuICAgICAgdHlwZSxcclxuICAgICAgbmFtZSxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgLy8gVE9ETzogVmFsaWRhdGUgdGhlc2UgY29uZGl0aW9uc1xyXG4gICAgLyppZiAoXHJcbiAgICAgIChhY2Nlc3NUb2tlbi5wcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgYWNjZXNzVG9rZW4ucHJldmlvdXNWYWx1ZSA9PT0gYWNjZXNzVG9rZW4uY3VycmVudFZhbHVlKSAmJlxyXG4gICAgICBlbWJlZFVybC5wcmV2aW91c1ZhbHVlID09PSBlbWJlZFVybC5jdXJyZW50VmFsdWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9Ki9cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuICYmIGFjY2Vzc1Rva2VuLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICB0b2tlblR5cGUgJiYgdG9rZW5UeXBlLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBlbWJlZFVybCAmJiBlbWJlZFVybC5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgaWQgJiYgaWQuY3VycmVudFZhbHVlLFxyXG4gICAgICAgIHR5cGUgJiYgdHlwZS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgbmFtZSAmJiBuYW1lLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuY3VycmVudFZhbHVlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZW1iZWQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucmVzZXQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5yZXNldCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnN1cmUgcmVxdWlyZWQgYXR0cmlidXRlcyAoZW1iZWRVcmwgYW5kIGFjY2Vzc1Rva2VuIGFyZSB2YWxpZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbWJlZClcclxuICAgKi9cclxuICBwcml2YXRlIHZhbGlkYXRlUmVxdWlyZWRBdHRyaWJ1dGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZW9mIHRoaXMuZW1iZWRVcmwgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgIHRoaXMuZW1iZWRVcmwubGVuZ3RoID4gMCAmJlxyXG4gICAgICAodHlwZW9mIHRoaXMuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnICYmIHRoaXMuYWNjZXNzVG9rZW4ubGVuZ3RoID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG1vZGVsIGNsYXNzIGNvbXBhdGlibGUgdG9rZW4gZW51bSBmcm9tIG91ciB0b2tlbiB0eXBlIGVudW1cclxuICAgKiBAcGFyYW0gdG9rZW5UeXBlIC0gVG9rZW4gdHlwZSBpbiBvdXIgY3VzdG9tIGVudW0gZm9ybWF0XHJcbiAgICogQHJldHVybnMgVG9rZW4gdHlwZSBpbiBwb3dlcmJpLW1vZGVscy5Ub2tlblR5cGUgZW51bSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIGdldFRva2VuVHlwZSh0b2tlblR5cGU6IFRva2VuVHlwZSk6IG1vZGVscy5Ub2tlblR5cGUge1xyXG4gICAgaWYgKHRva2VuVHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHRva2VuVHlwZSkge1xyXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkFhZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgICAgICBjYXNlIFRva2VuVHlwZS5FbWJlZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkVtYmVkO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gbW9kZWxzLlRva2VuVHlwZS5BYWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGRlZmF1bHQgaXMgQUFEXHJcbiAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gZW1iZWQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuIHJlcXVpcmVkIHRvIGVtYmVkIGEgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIHRva2VuVHlwZSAtIHR5cGUgb2YgYWNjZXNzVG9rZW46IEFhZCBvciBFbWJlZFxyXG4gICAqIEBwYXJhbSBlbWJlZFVybCAtIEVtYmVkIFVSTCBvYnRhaW5lZCB0aHJvdWdoIFBvd2VyIEJJIFJFU1QgQVBJIG9yIFBvcnRhbFxyXG4gICAqIEBwYXJhbSBpZCAtIGNvbXBvbmVudC9lbGVtZW50IEdVSURcclxuICAgKiBAcGFyYW0gdHlwZSAtIHR5cGUgb2YgZW1iZWRkZWQgY29tcG9uZW50IGUuZy4gJ2Rhc2hib2FyZCwgcmVwb3J0IG9yIHRpbGUnXHJcbiAgICogQHBhcmFtIG5hbWUgLSBuYW1lIG9mIHRoZSBlbWJlZGRlZCBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEVtYmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIEVtYmVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb25maWcoXHJcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyxcclxuICAgIHRva2VuVHlwZT86IFRva2VuVHlwZSxcclxuICAgIGVtYmVkVXJsPzogc3RyaW5nLFxyXG4gICAgaWQ/OiBzdHJpbmcsXHJcbiAgICB0eXBlPzogUmVwb3J0VHlwZSxcclxuICAgIG5hbWU/OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzogbW9kZWxzLklTZXR0aW5nc1xyXG4gICk6IHBiaS5JRW1iZWRDb25maWd1cmF0aW9uIHtcclxuICAgIC8vIEZvciBudWxsIGFyZ3VtZW50cyAtIHVzZSB0aGUgaW5pdGlhbCB2YWx1ZVxyXG4gICAgLy8gRm9yIHNwZWNpZmllZCBhcmd1bWVudHMgLSB1c2UgdGhlIGN1cnJlbnQgdmFsdWVcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IHR5cGUgPyB0eXBlIDogdGhpcy50eXBlID8gdGhpcy50eXBlIDogUmVwb3J0VHlwZS5SZXBvcnQsXHJcbiAgICAgIGVtYmVkVXJsOiBlbWJlZFVybCA/IGVtYmVkVXJsIDogdGhpcy5lbWJlZFVybCxcclxuICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4gOiB0aGlzLmFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGU6IHRva2VuVHlwZVxyXG4gICAgICAgID8gdGhpcy5nZXRUb2tlblR5cGUodG9rZW5UeXBlKVxyXG4gICAgICAgIDogdGhpcy5nZXRUb2tlblR5cGUodGhpcy50b2tlblR5cGUpLFxyXG4gICAgICBpZDogaWQgPyBpZCA6IHRoaXMuaWQsXHJcbiAgICAgIHVuaXF1ZUlkOiBuYW1lID8gbmFtZSA6IHRoaXMubmFtZSxcclxuICAgICAgc2V0dGluZ3M6IG9wdGlvbnMgPyBvcHRpb25zIDogdGhpcy5vcHRpb25zXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gYW4gSFRNTEVsZW1lbnQsIGNvbnN0cnVjdCBhbiBlbWJlZCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGF0dHJpYnV0ZXMgYW5kIHBhc3MgdG8gc2VydmljZS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRpbmcgbmVlZHMgdG8gYmUgZG9uZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBjb25maWd1cmF0aW9uIHRvIGJlIGVtYmVkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbWJlZChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBwYmkuSUVtYmVkQ29uZmlndXJhdGlvbikge1xyXG4gICAgLyppZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHsgY29uZmlnLCAuLi50aGlzLm9wdGlvbnMgfTtcclxuICAgIH0qL1xyXG5cclxuICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy5wb3dlckJpU2VydmljZS5lbWJlZChlbGVtZW50LCBjb25maWcpO1xyXG4gICAgdGhpcy5lbWJlZGRlZC5lbWl0KHRoaXMuY29tcG9uZW50IGFzIGFueSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgY29tcG9uZW50IHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRlZCB3YXMgbWFkZVxyXG4gICAqL1xyXG4gIHJlc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlLnJlc2V0KGVsZW1lbnQpO1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=