@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
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} */
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBvd2VyYmkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5pYm8tYWkvbmd4LXBvd2VyYmkvIiwic291cmNlcyI6WyJsaWIvbmd4LXBvd2VyYmkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRTFELE1BQWtCLFNBQVM7SUFDekIsR0FBRyxPQUFRO0lBQ1gsS0FBSyxTQUFVO0VBQ2hCOzs7QUFFRCxNQUFrQixVQUFVO0lBQzFCLFNBQVMsYUFBYztJQUN2QixNQUFNLFVBQVc7SUFDakIsSUFBSSxRQUFTO0VBQ2Q7O0FBT0QsTUFBTSxPQUFPLG1CQUFtQjs7OztJQWdCOUIsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFQOUMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFROUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztJQUMxQyxDQUFDOzs7O0lBRUQsZUFBZTtRQUNiLDJFQUEyRTtRQUMzRSxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUNqQztZQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7Ozs7O0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsT0FBTztTQUNS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Ozs7SUFDN0IsNkNBQTBDOzs7OztJQUU5QixnREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBwYmkgZnJvbSAncG93ZXJiaS1jbGllbnQnO1xyXG5pbXBvcnQgKiBhcyBtb2RlbHMgZnJvbSAncG93ZXJiaS1tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgTmd4UG93ZXJCaVNlcnZpY2UgfSBmcm9tICcuL25neC1wb3dlcmJpLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gVG9rZW5UeXBlIHtcclxuICBBYWQgPSAnQWFkJyxcclxuICBFbWJlZCA9ICdFbWJlZCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gUmVwb3J0VHlwZSB7XHJcbiAgRGFzaGJvYXJkID0gJ0Rhc2hib2FyZCcsXHJcbiAgUmVwb3J0ID0gJ1JlcG9ydCcsXHJcbiAgVGlsZSA9ICdUaWxlJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1wb3dlcmJpLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGU6ICc8ZGl2ICNuZ3hQb3dlckJpSUZyYW1lIHN0eWxlPVwiaGVpZ2h0OjEwMCU7IHdpZHRoOiAxMDAlO1wiPjwvZGl2PicsXHJcbiAgc3R5bGVzOiBbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UG93ZXJCaUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9rZW5UeXBlOiBUb2tlblR5cGU7XHJcbiAgQElucHV0KCkgZW1iZWRVcmw6IHN0cmluZztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFJlcG9ydFR5cGU7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG1vZGVscy5JU2V0dGluZ3M7XHJcbiAgQE91dHB1dCgpIGVtYmVkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQFZpZXdDaGlsZCgnbmd4UG93ZXJCaUlGcmFtZScsIHtzdGF0aWM6IHRydWV9KSBuZ3hQb3dlckJpSUZyYW1lUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBQcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgY29tcG9uZW50OiBwYmkuRW1iZWQ7XHJcbiAgcHJpdmF0ZSBwb3dlckJpU2VydmljZTogTmd4UG93ZXJCaVNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmd4UG93ZXJCaVNlcnZpY2U6IE5neFBvd2VyQmlTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlID0gbmd4UG93ZXJCaVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBFbWJlZCB0aGUgcmVwb3J0IGluc2lkZSB0aGUgdmlldyBjaGlsZCB0aGF0IHdlIGhhdmUgZmV0Y2hlZCBmcm9tIHRoZSBET01cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lbWJlZCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRDb25maWcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIXRoaXMubmd4UG93ZXJCaUlGcmFtZVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGUsXHJcbiAgICAgIGVtYmVkVXJsLFxyXG4gICAgICBpZCxcclxuICAgICAgdHlwZSxcclxuICAgICAgbmFtZSxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgLy8gVE9ETzogVmFsaWRhdGUgdGhlc2UgY29uZGl0aW9uc1xyXG4gICAgLyppZiAoXHJcbiAgICAgIChhY2Nlc3NUb2tlbi5wcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgYWNjZXNzVG9rZW4ucHJldmlvdXNWYWx1ZSA9PT0gYWNjZXNzVG9rZW4uY3VycmVudFZhbHVlKSAmJlxyXG4gICAgICBlbWJlZFVybC5wcmV2aW91c1ZhbHVlID09PSBlbWJlZFVybC5jdXJyZW50VmFsdWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9Ki9cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVJlcXVpcmVkQXR0cmlidXRlcygpKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuICYmIGFjY2Vzc1Rva2VuLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICB0b2tlblR5cGUgJiYgdG9rZW5UeXBlLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBlbWJlZFVybCAmJiBlbWJlZFVybC5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgaWQgJiYgaWQuY3VycmVudFZhbHVlLFxyXG4gICAgICAgIHR5cGUgJiYgdHlwZS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgbmFtZSAmJiBuYW1lLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuY3VycmVudFZhbHVlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZW1iZWQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucmVzZXQodGhpcy5uZ3hQb3dlckJpSUZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5yZXNldCh0aGlzLm5neFBvd2VyQmlJRnJhbWVSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbnN1cmUgcmVxdWlyZWQgYXR0cmlidXRlcyAoZW1iZWRVcmwgYW5kIGFjY2Vzc1Rva2VuIGFyZSB2YWxpZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbWJlZClcclxuICAgKi9cclxuICBwcml2YXRlIHZhbGlkYXRlUmVxdWlyZWRBdHRyaWJ1dGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZW9mIHRoaXMuZW1iZWRVcmwgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgIHRoaXMuZW1iZWRVcmwubGVuZ3RoID4gMCAmJlxyXG4gICAgICAodHlwZW9mIHRoaXMuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnICYmIHRoaXMuYWNjZXNzVG9rZW4ubGVuZ3RoID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG1vZGVsIGNsYXNzIGNvbXBhdGlibGUgdG9rZW4gZW51bSBmcm9tIG91ciB0b2tlbiB0eXBlIGVudW1cclxuICAgKiBAcGFyYW0gdG9rZW5UeXBlIC0gVG9rZW4gdHlwZSBpbiBvdXIgY3VzdG9tIGVudW0gZm9ybWF0XHJcbiAgICogQHJldHVybnMgVG9rZW4gdHlwZSBpbiBwb3dlcmJpLW1vZGVscy5Ub2tlblR5cGUgZW51bSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIGdldFRva2VuVHlwZSh0b2tlblR5cGU6IFRva2VuVHlwZSk6IG1vZGVscy5Ub2tlblR5cGUge1xyXG4gICAgaWYgKHRva2VuVHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHRva2VuVHlwZSkge1xyXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkFhZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgICAgICBjYXNlIFRva2VuVHlwZS5FbWJlZDpcclxuICAgICAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkVtYmVkO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gbW9kZWxzLlRva2VuVHlwZS5BYWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGRlZmF1bHQgaXMgQUFEXHJcbiAgICAgIHJldHVybiBtb2RlbHMuVG9rZW5UeXBlLkFhZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gZW1iZWQgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuIHJlcXVpcmVkIHRvIGVtYmVkIGEgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIHRva2VuVHlwZSAtIHR5cGUgb2YgYWNjZXNzVG9rZW46IEFhZCBvciBFbWJlZFxyXG4gICAqIEBwYXJhbSBlbWJlZFVybCAtIEVtYmVkIFVSTCBvYnRhaW5lZCB0aHJvdWdoIFBvd2VyIEJJIFJFU1QgQVBJIG9yIFBvcnRhbFxyXG4gICAqIEBwYXJhbSBpZCAtIGNvbXBvbmVudC9lbGVtZW50IEdVSURcclxuICAgKiBAcGFyYW0gdHlwZSAtIHR5cGUgb2YgZW1iZWRkZWQgY29tcG9uZW50IGUuZy4gJ2Rhc2hib2FyZCwgcmVwb3J0IG9yIHRpbGUnXHJcbiAgICogQHBhcmFtIG5hbWUgLSBuYW1lIG9mIHRoZSBlbWJlZGRlZCBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEVtYmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIEVtYmVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb25maWcoXHJcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyxcclxuICAgIHRva2VuVHlwZT86IFRva2VuVHlwZSxcclxuICAgIGVtYmVkVXJsPzogc3RyaW5nLFxyXG4gICAgaWQ/OiBzdHJpbmcsXHJcbiAgICB0eXBlPzogUmVwb3J0VHlwZSxcclxuICAgIG5hbWU/OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzogbW9kZWxzLklTZXR0aW5nc1xyXG4gICk6IHBiaS5JRW1iZWRDb25maWd1cmF0aW9uIHtcclxuICAgIC8vIEZvciBudWxsIGFyZ3VtZW50cyAtIHVzZSB0aGUgaW5pdGlhbCB2YWx1ZVxyXG4gICAgLy8gRm9yIHNwZWNpZmllZCBhcmd1bWVudHMgLSB1c2UgdGhlIGN1cnJlbnQgdmFsdWVcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IHR5cGUgPyB0eXBlIDogdGhpcy50eXBlID8gdGhpcy50eXBlIDogUmVwb3J0VHlwZS5SZXBvcnQsXHJcbiAgICAgIGVtYmVkVXJsOiBlbWJlZFVybCA/IGVtYmVkVXJsIDogdGhpcy5lbWJlZFVybCxcclxuICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4gOiB0aGlzLmFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGU6IHRva2VuVHlwZVxyXG4gICAgICAgID8gdGhpcy5nZXRUb2tlblR5cGUodG9rZW5UeXBlKVxyXG4gICAgICAgIDogdGhpcy5nZXRUb2tlblR5cGUodGhpcy50b2tlblR5cGUpLFxyXG4gICAgICBpZDogaWQgPyBpZCA6IHRoaXMuaWQsXHJcbiAgICAgIHVuaXF1ZUlkOiBuYW1lID8gbmFtZSA6IHRoaXMubmFtZSxcclxuICAgICAgc2V0dGluZ3M6IG9wdGlvbnMgPyBvcHRpb25zIDogdGhpcy5vcHRpb25zXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gYW4gSFRNTEVsZW1lbnQsIGNvbnN0cnVjdCBhbiBlbWJlZCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGF0dHJpYnV0ZXMgYW5kIHBhc3MgdG8gc2VydmljZS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRpbmcgbmVlZHMgdG8gYmUgZG9uZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBjb25maWd1cmF0aW9uIHRvIGJlIGVtYmVkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbWJlZChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBwYmkuSUVtYmVkQ29uZmlndXJhdGlvbikge1xyXG4gICAgLyppZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHsgY29uZmlnLCAuLi50aGlzLm9wdGlvbnMgfTtcclxuICAgIH0qL1xyXG5cclxuICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy5wb3dlckJpU2VydmljZS5lbWJlZChlbGVtZW50LCBjb25maWcpO1xyXG4gICAgdGhpcy5lbWJlZGRlZC5lbWl0KHRoaXMuY29tcG9uZW50IGFzIGFueSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgY29tcG9uZW50IHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIERPTS5cclxuICAgKiBAcGFyYW0gZWxlbWVudCAtIG5hdGl2ZSBlbGVtZW50IHdoZXJlIHRoZSBlbWJlZGRlZCB3YXMgbWFkZVxyXG4gICAqL1xyXG4gIHJlc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnBvd2VyQmlTZXJ2aWNlLnJlc2V0KGVsZW1lbnQpO1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=