@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.
285 lines • 24.6 kB
JavaScript
/**
* @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} */
var TokenType = {
Aad: "Aad",
Embed: "Embed",
};
export { TokenType };
/** @enum {string} */
var ReportType = {
Dashboard: "Dashboard",
Report: "Report",
Tile: "Tile",
};
export { ReportType };
var NgxPowerBiComponent = /** @class */ (function () {
function NgxPowerBiComponent(ngxPowerBiService) {
this.ngxPowerBiService = ngxPowerBiService;
this.embedded = new EventEmitter();
this.powerBiService = ngxPowerBiService;
}
/**
* @return {?}
*/
NgxPowerBiComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
// 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 {?}
*/
NgxPowerBiComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (!this.ngxPowerBiIFrameRef) {
return;
}
var accessToken = changes.accessToken, tokenType = changes.tokenType, embedUrl = changes.embedUrl, id = changes.id, type = changes.type, name = changes.name, options = changes.options;
// TODO: Validate these conditions
/*if (
(accessToken.previousValue !== undefined || accessToken.previousValue === accessToken.currentValue) &&
embedUrl.previousValue === embedUrl.currentValue
) {
return;
}*/
if (this.validateRequiredAttributes()) {
/** @type {?} */
var 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 {?}
*/
NgxPowerBiComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.component) {
this.reset(this.ngxPowerBiIFrameRef.nativeElement);
}
};
/**
* Ensure required attributes (embedUrl and accessToken are valid before attempting to embed)
*/
/**
* Ensure required attributes (embedUrl and accessToken are valid before attempting to embed)
* @private
* @return {?}
*/
NgxPowerBiComponent.prototype.validateRequiredAttributes = /**
* Ensure required attributes (embedUrl and accessToken are valid before attempting to embed)
* @private
* @return {?}
*/
function () {
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
* @param tokenType - Token type in our custom enum format
* @returns Token type in powerbi-models.TokenType enum format
*/
/**
* 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
*/
NgxPowerBiComponent.prototype.getTokenType = /**
* 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
*/
function (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.
* @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
* @returns Embed configuration object
*/
/**
* 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
*/
NgxPowerBiComponent.prototype.getConfig = /**
* 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
*/
function (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.
* @param element - native element where the embedding needs to be done
* @param config - configuration to be embedded
*/
/**
* 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 {?}
*/
NgxPowerBiComponent.prototype.embed = /**
* 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 {?}
*/
function (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
*/
/**
* Reset the component that has been removed from DOM.
* @param {?} element - native element where the embedded was made
* @return {?}
*/
NgxPowerBiComponent.prototype.reset = /**
* Reset the component that has been removed from DOM.
* @param {?} element - native element where the embedded was made
* @return {?}
*/
function (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 = function () { return [
{ 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 },] }]
};
return NgxPowerBiComponent;
}());
export { NgxPowerBiComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBvd2VyYmkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5pYm8tYWkvbmd4LXBvd2VyYmkvIiwic291cmNlcyI6WyJsaWIvbmd4LXBvd2VyYmkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRTFELElBQWtCLFNBQVM7SUFDekIsR0FBRyxPQUFRO0lBQ1gsS0FBSyxTQUFVO0VBQ2hCOzs7QUFFRCxJQUFrQixVQUFVO0lBQzFCLFNBQVMsYUFBYztJQUN2QixNQUFNLFVBQVc7SUFDakIsSUFBSSxRQUFTO0VBQ2Q7O0FBRUQ7SUFxQkUsNkJBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBUDlDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBUTlDLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7SUFDMUMsQ0FBQzs7OztJQUVELDZDQUFlOzs7SUFBZjtRQUNFLDJFQUEyRTtRQUMzRSxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUNqQztZQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7Ozs7O0lBRUQseUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsT0FBTztTQUNSO1FB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LEFBeEtELElBd0tDO1NBbktZLG1CQUFtQjs7O0lBRTlCLDBDQUE2Qjs7SUFDN0Isd0NBQThCOztJQUM5Qix1Q0FBMEI7O0lBQzFCLGlDQUFvQjs7SUFDcEIsbUNBQTBCOztJQUMxQixtQ0FBc0I7O0lBQ3RCLHNDQUFtQzs7SUFDbkMsdUNBQWdEOztJQUNoRCxrREFBK0U7Ozs7O0lBRy9FLHdDQUE2Qjs7Ozs7SUFDN0IsNkNBQTBDOzs7OztJQUU5QixnREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBwYmkgZnJvbSAncG93ZXJiaS1jbGllbnQnO1xyXG5pbXBvcnQgKiBhcyBtb2RlbHMgZnJvbSAncG93ZXJiaS1tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgTmd4UG93ZXJCaVNlcnZpY2UgfSBmcm9tICcuL25neC1wb3dlcmJpLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gVG9rZW5UeXBlIHtcclxuICBBYWQgPSAnQWFkJyxcclxuICBFbWJlZCA9ICdFbWJlZCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gUmVwb3J0VHlwZSB7XHJcbiAgRGFzaGJvYXJkID0gJ0Rhc2hib2FyZCcsXHJcbiAgUmVwb3J0ID0gJ1JlcG9ydCcsXHJcbiAgVGlsZSA9ICdUaWxlJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1wb3dlcmJpLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGU6ICc8ZGl2ICNuZ3hQb3dlckJpSUZyYW1lIHN0eWxlPVwiaGVpZ2h0OjEwMCU7IHdpZHRoOiAxMDAlO1wiPjwvZGl2PicsXHJcbiAgc3R5bGVzOiBbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UG93ZXJCaUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9rZW5UeXBlOiBUb2tlblR5cGU7XHJcbiAgQElucHV0KCkgZW1iZWRVcmw6IHN0cmluZztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFJlcG9ydFR5cGU7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG1vZGVscy5JU2V0dGluZ3M7XHJcbiAgQE91dHB1dCgpIGVtYmVkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQFZpZXdDaGlsZCgnbmd4UG93ZXJCaUlGcmFtZScsIHtzdGF0aWM6IHRydWV9KSBuZ3hQb3dlckJpSUZyYW1lUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBQcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgY29tcG9uZW50OiBwYmkuRW1iZWQ7XHJcbiAgcHJpdmF0ZSBwb3dlckJpU2VydmljZTogTmd4UG93ZXJCaVNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmd4UG93ZXJCaVNlcnZpY2U6IE5neFBvd2VyQmlTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlID0gbmd4UG93ZXJCaVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBFbWJlZCB0aGUgcmVwb3J0IGluc2lkZSB0aGUgdmlldyBjaGlsZCB0aGF0IHdlIGhhdmUgZmV0Y2hlZCBmcm9tIHRoZSBET01cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lbWJlZCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRDb25maWcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIXRoaXMubmd4UG93ZXJCaUlGcmFtZVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGUsXHJcbiAgICAgIGVtYmVkVXJsLFxyXG4gICAgICBpZCxcclxuICAgICAgdHlwZSxcclxuICAgICAgbmFtZSxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgLy8gVE9ETzogVmFsaWRhdGUgdGhlc2UgY29uZGl0aW9uc1xyXG4gICAgLyppZiAoXHJcbiAgICAgIChhY2Nlc3NUb2tlbi5wcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgYWNjZXNzVG9rZW4ucHJldmlvdXNWYWx1ZSA9PT0gYWNjZXNzVG9rZW4uY3VycmVudFZhbHVlKSAmJlxyXG4gICAgICBlbWJlZFVybC5wcmV2aW91c1ZhbHVlID09PSBlbWJlZFVybC5jdXJyZW50VmFsdWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9Ki9cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuICYmIGFjY2Vzc1Rva2VuLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICB0b2tlblR5cGUgJiYgdG9rZW5UeXBlLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBlbWJlZFVybCAmJiBlbWJlZFVybC5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgaWQgJiYgaWQuY3VycmVudFZhbHVlLFxyXG4gICAgICAgIHR5cGUgJiYgdHlwZS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgbmFtZSAmJiBuYW1lLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuY3VycmVudFZhbHVlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZW1iZWQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucmVzZXQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5yZXNldCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnN1cmUgcmVxdWlyZWQgYXR0cmlidXRlcyAoZW1iZWRVcmwgYW5kIGFjY2Vzc1Rva2VuIGFyZSB2YWxpZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbWJlZClcclxuICAgKi9cclxuICBwcml2YXRlIHZhbGlkYXRlUmVxdWlyZWRBdHRyaWJ1dGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZW9mIHRoaXMuZW1iZWRVcmwgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgIHRoaXMuZW1iZWRVcmwubGVuZ3RoID4gMCAmJlxyXG4gICAgICAodHlwZW9mIHRoaXMuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnICYmIHRoaXMuYWNjZXNzVG9rZW4ubGVuZ3RoID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG1vZGVsIGNsYXNzIGNvbXBhdGlibGUgdG9rZW4gZW51bSBmcm9tIG91ciB0b2tlbiB0eXBlIGVudW1cclxuICAgKiBAcGFyYW0gdG9rZW5UeXBlIC0gVG9rZW4gdHlwZSBpbiBvdXIgY3VzdG9tIGVudW0gZm9ybWF0XHJcbiAgICogQHJldHVybnMgVG9rZW4gdHlwZSBpbiBwb3dlcmJpLW1vZGVscy5Ub2tlblR5cGUgZW51bSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIGdldFRva2VuVHlwZSh0b2tlblR5cGU6IFRva2VuVHlwZSk6IG1vZGVscy5Ub2tlblR5cGUge1xyXG4gICAgaWYgKHRva2VuVHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHRva2VuVHlwZSkge1xyXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkFhZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgICAgICBjYXNlIFRva2VuVHlwZS5FbWJlZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkVtYmVkO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gbW9kZWxzLlRva2VuVHlwZS5BYWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGRlZmF1bHQgaXMgQUFEXHJcbiAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gZW1iZWQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuIHJlcXVpcmVkIHRvIGVtYmVkIGEgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIHRva2VuVHlwZSAtIHR5cGUgb2YgYWNjZXNzVG9rZW46IEFhZCBvciBFbWJlZFxyXG4gICAqIEBwYXJhbSBlbWJlZFVybCAtIEVtYmVkIFVSTCBvYnRhaW5lZCB0aHJvdWdoIFBvd2VyIEJJIFJFU1QgQVBJIG9yIFBvcnRhbFxyXG4gICAqIEBwYXJhbSBpZCAtIGNvbXBvbmVudC9lbGVtZW50IEdVSURcclxuICAgKiBAcGFyYW0gdHlwZSAtIHR5cGUgb2YgZW1iZWRkZWQgY29tcG9uZW50IGUuZy4gJ2Rhc2hib2FyZCwgcmVwb3J0IG9yIHRpbGUnXHJcbiAgICogQHBhcmFtIG5hbWUgLSBuYW1lIG9mIHRoZSBlbWJlZGRlZCBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEVtYmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIEVtYmVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb25maWcoXHJcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyxcclxuICAgIHRva2VuVHlwZT86IFRva2VuVHlwZSxcclxuICAgIGVtYmVkVXJsPzogc3RyaW5nLFxyXG4gICAgaWQ/OiBzdHJpbmcsXHJcbiAgICB0eXBlPzogUmVwb3J0VHlwZSxcclxuICAgIG5hbWU/OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzogbW9kZWxzLklTZXR0aW5nc1xyXG4gICk6IHBiaS5JRW1iZWRDb25maWd1cmF0aW9uIHtcclxuICAgIC8vIEZvciBudWxsIGFyZ3VtZW50cyAtIHVzZSB0aGUgaW5pdGlhbCB2YWx1ZVxyXG4gICAgLy8gRm9yIHNwZWNpZmllZCBhcmd1bWVudHMgLSB1c2UgdGhlIGN1cnJlbnQgdmFsdWVcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IHR5cGUgPyB0eXBlIDogdGhpcy50eXBlID8gdGhpcy50eXBlIDogUmVwb3J0VHlwZS5SZXBvcnQsXHJcbiAgICAgIGVtYmVkVXJsOiBlbWJlZFVybCA/IGVtYmVkVXJsIDogdGhpcy5lbWJlZFVybCxcclxuICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4gOiB0aGlzLmFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGU6IHRva2VuVHlwZVxyXG4gICAgICAgID8gdGhpcy5nZXRUb2tlblR5cGUodG9rZW5UeXBlKVxyXG4gICAgICAgIDogdGhpcy5nZXRUb2tlblR5cGUodGhpcy50b2tlblR5cGUpLFxyXG4gICAgICBpZDogaWQgPyBpZCA6IHRoaXMuaWQsXHJcbiAgICAgIHVuaXF1ZUlkOiBuYW1lID8gbmFtZSA6IHRoaXMubmFtZSxcclxuICAgICAgc2V0dGluZ3M6IG9wdGlvbnMgPyBvcHRpb25zIDogdGhpcy5vcHRpb25zXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gYW4gSFRNTEVsZW1lbnQsIGNvbnN0cnVjdCBhbiBlbWJlZCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGF0dHJpYnV0ZXMgYW5kIHBhc3MgdG8gc2VydmljZS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRpbmcgbmVlZHMgdG8gYmUgZG9uZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBjb25maWd1cmF0aW9uIHRvIGJlIGVtYmVkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbWJlZChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBwYmkuSUVtYmVkQ29uZmlndXJhdGlvbikge1xyXG4gICAgLyppZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHsgY29uZmlnLCAuLi50aGlzLm9wdGlvbnMgfTtcclxuICAgIH0qL1xyXG5cclxuICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy5wb3dlckJpU2VydmljZS5lbWJlZChlbGVtZW50LCBjb25maWcpO1xyXG4gICAgdGhpcy5lbWJlZGRlZC5lbWl0KHRoaXMuY29tcG9uZW50IGFzIGFueSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgY29tcG9uZW50IHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRlZCB3YXMgbWFkZVxyXG4gICAqL1xyXG4gIHJlc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlLnJlc2V0KGVsZW1lbnQpO1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=