UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

90 lines 16.1 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { __decorate, __metadata, __param } from "tslib"; import { Inject, Optional } from "@angular/core"; // eslint-disable-next-line import/no-deprecated import { merge, zip } from "rxjs"; import { debounceTime, map, startWith, // eslint-disable-next-line import/no-deprecated switchMap, takeUntil, tap, } from "rxjs/operators"; import { EventBus, VirtualViewportManager, } from "@nova-ui/bits"; import { DataSourceAdapter } from "./data-source-adapter"; import { PizzagnaService } from "../../pizzagna/services/pizzagna.service"; import { REFRESH, SCROLL_NEXT_PAGE, SET_NEXT_PAGE, WIDGET_READY, } from "../../services/types"; import { DATA_SOURCE, PizzagnaLayer, PIZZAGNA_EVENT_BUS, } from "../../types"; let TableDataSourceAdapter = class TableDataSourceAdapter extends DataSourceAdapter { constructor(eventBus, dataSource, pizzagnaService, virtualViewport) { super(eventBus, dataSource, pizzagnaService); this.virtualViewport = virtualViewport; } setupRefreshListener() { // Note: We should wait until TableWidget is ready to be able to proceed with reset event // We can also listen after SCROLL_NEXT_PAGE instead of WIDGET_READY because right now // they are executed simultaneously but we don't know how things will change in the future const refresh$ = zip(this.eventBus.getStream(WIDGET_READY), this.eventBus.getStream(REFRESH)).pipe( // Note: Using startWith() to re-trigger the REFRESH stream that was triggered at least on time before WIDGET_READY // eslint-disable-next-line import/no-deprecated switchMap(() => // eslint-disable-next-line import/no-deprecated this.eventBus.getStream(REFRESH).pipe(startWith(undefined))), tap(() => this.virtualViewport.reset({ emitFirstPage: false })), map(() => { })); // eslint-disable-next-line import/no-deprecated merge(refresh$, this.eventBus.getStream(SCROLL_NEXT_PAGE), this.eventBus.getStream(SET_NEXT_PAGE)) .pipe( // Note: While SCROLL_NEXT_PAGE is triggered on TableWidget initialization aka WIDGET_READY // we might encounter REFRESH and SCROLL_NEXT_PAGE triggered at the same time. // Setting a small debounceTime will help us manage simultaneous requests debounceTime(10), tap(() => this.handleRefresh()), takeUntil(this.destroy$)) .subscribe(); } updateAdapterProperties(properties) { this.dataPath = properties.dataPath; this.dataFieldsPath = properties.dataFieldsPath; this.totalItemsPath = properties.totalItemsPath; } updateOutput(output) { const total = output?.paginator?.total; const items = output?.repeat?.itemsSource; const dataFields = output?.dataFields; this.pizzagnaService.setProperty({ pizzagnaKey: PizzagnaLayer.Data, componentId: this.componentId, propertyPath: [this.totalItemsPath], }, total); this.pizzagnaService.setProperty({ pizzagnaKey: PizzagnaLayer.Data, componentId: this.componentId, propertyPath: [this.dataPath], }, items); this.pizzagnaService.setProperty({ pizzagnaKey: PizzagnaLayer.Data, componentId: this.componentId, propertyPath: [this.dataFieldsPath], }, dataFields); } }; TableDataSourceAdapter = __decorate([ __param(0, Inject(PIZZAGNA_EVENT_BUS)), __param(1, Inject(DATA_SOURCE)), __param(3, Optional()), __metadata("design:paramtypes", [EventBus, Object, PizzagnaService, VirtualViewportManager]) ], TableDataSourceAdapter); export { TableDataSourceAdapter }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1zb3VyY2UtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wcm92aWRlcnMvdGFibGUtZGF0YS1zb3VyY2UtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7O0FBRWpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELGdEQUFnRDtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQ0gsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTO0FBQ1QsZ0RBQWdEO0FBQ2hELFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNILFFBQVEsRUFJUixzQkFBc0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFDSCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixZQUFZLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0gsV0FBVyxFQUVYLGFBQWEsRUFDYixrQkFBa0IsR0FD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QVksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDdEMsRUFDRCxVQUFVLENBQ2IsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFBO0FBckZZLHNCQUFzQjtJQVExQixXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQzFCLFdBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRW5CLFdBQUEsUUFBUSxFQUFFLENBQUE7cUNBSDJCLFFBQVEsVUFFN0IsZUFBZTtRQUNPLHNCQUFzQjtHQVh4RCxzQkFBc0IsQ0FxRmxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEluamVjdCwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1kZXByZWNhdGVkXG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgemlwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIG1hcCxcbiAgICBzdGFydFdpdGgsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1kZXByZWNhdGVkXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2VVbnRpbCxcbiAgICB0YXAsXG59IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQge1xuICAgIEV2ZW50QnVzLFxuICAgIElEYXRhU291cmNlLFxuICAgIElFdmVudCxcbiAgICBJRmlsdGVyaW5nT3V0cHV0cyxcbiAgICBWaXJ0dWFsVmlld3BvcnRNYW5hZ2VyLFxufSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBEYXRhU291cmNlQWRhcHRlciB9IGZyb20gXCIuL2RhdGEtc291cmNlLWFkYXB0ZXJcIjtcbmltcG9ydCB7IFBpenphZ25hU2VydmljZSB9IGZyb20gXCIuLi8uLi9waXp6YWduYS9zZXJ2aWNlcy9waXp6YWduYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIFJFRlJFU0gsXG4gICAgU0NST0xMX05FWFRfUEFHRSxcbiAgICBTRVRfTkVYVF9QQUdFLFxuICAgIFdJREdFVF9SRUFEWSxcbn0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3R5cGVzXCI7XG5pbXBvcnQge1xuICAgIERBVEFfU09VUkNFLFxuICAgIElQcm9wZXJ0aWVzLFxuICAgIFBpenphZ25hTGF5ZXIsXG4gICAgUElaWkFHTkFfRVZFTlRfQlVTLFxufSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGF0YVNvdXJjZUFkYXB0ZXI8XG4gICAgVCBleHRlbmRzIElGaWx0ZXJpbmdPdXRwdXRzXG4+IGV4dGVuZHMgRGF0YVNvdXJjZUFkYXB0ZXI8VD4ge1xuICAgIHByaXZhdGUgZGF0YVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIGRhdGFGaWVsZHNQYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB0b3RhbEl0ZW1zUGF0aDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUElaWkFHTkFfRVZFTlRfQlVTKSBldmVudEJ1czogRXZlbnRCdXM8SUV2ZW50PixcbiAgICAgICAgQEluamVjdChEQVRBX1NPVVJDRSkgZGF0YVNvdXJjZTogSURhdGFTb3VyY2UsXG4gICAgICAgIHBpenphZ25hU2VydmljZTogUGl6emFnbmFTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgdmlydHVhbFZpZXdwb3J0OiBWaXJ0dWFsVmlld3BvcnRNYW5hZ2VyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGV2ZW50QnVzLCBkYXRhU291cmNlLCBwaXp6YWduYVNlcnZpY2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXR1cFJlZnJlc2hMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgLy8gTm90ZTogV2Ugc2hvdWxkIHdhaXQgdW50aWwgVGFibGVXaWRnZXQgaXMgcmVhZHkgdG8gYmUgYWJsZSB0byBwcm9jZWVkIHdpdGggcmVzZXQgZXZlbnRcbiAgICAgICAgLy8gV2UgY2FuIGFsc28gbGlzdGVuIGFmdGVyIFNDUk9MTF9ORVhUX1BBR0UgaW5zdGVhZCBvZiBXSURHRVRfUkVBRFkgYmVjYXVzZSByaWdodCBub3dcbiAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0ZWQgc2ltdWx0YW5lb3VzbHkgYnV0IHdlIGRvbid0IGtub3cgaG93IHRoaW5ncyB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGNvbnN0IHJlZnJlc2gkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gemlwKFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5nZXRTdHJlYW0oV0lER0VUX1JFQURZKSxcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZ2V0U3RyZWFtKFJFRlJFU0gpXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICAgIC8vIE5vdGU6IFVzaW5nIHN0YXJ0V2l0aCgpIHRvIHJlLXRyaWdnZXIgdGhlIFJFRlJFU0ggc3RyZWFtIHRoYXQgd2FzIHRyaWdnZXJlZCBhdCBsZWFzdCBvbiB0aW1lIGJlZm9yZSBXSURHRVRfUkVBRFlcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZGVwcmVjYXRlZFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1kZXByZWNhdGVkXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5nZXRTdHJlYW0oUkVGUkVTSCkucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy52aXJ0dWFsVmlld3BvcnQucmVzZXQoeyBlbWl0Rmlyc3RQYWdlOiBmYWxzZSB9KSksXG4gICAgICAgICAgICBtYXAoKCkgPT4ge30pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1kZXByZWNhdGVkXG4gICAgICAgIG1lcmdlKHJlZnJlc2gkLCB0aGlzLmV2ZW50QnVzLmdldFN0cmVhbShTQ1JPTExfTkVYVF9QQUdFKSwgdGhpcy5ldmVudEJ1cy5nZXRTdHJlYW0oU0VUX05FWFRfUEFHRSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiBXaGlsZSBTQ1JPTExfTkVYVF9QQUdFIGlzIHRyaWdnZXJlZCBvbiBUYWJsZVdpZGdldCBpbml0aWFsaXphdGlvbiBha2EgV0lER0VUX1JFQURZXG4gICAgICAgICAgICAgICAgLy8gd2UgbWlnaHQgZW5jb3VudGVyIFJFRlJFU0ggYW5kIFNDUk9MTF9ORVhUX1BBR0UgdHJpZ2dlcmVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAgICAgLy8gU2V0dGluZyBhIHNtYWxsIGRlYm91bmNlVGltZSB3aWxsIGhlbHAgdXMgbWFuYWdlIHNpbXVsdGFuZW91cyByZXF1ZXN0c1xuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuaGFuZGxlUmVmcmVzaCgpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRlclByb3BlcnRpZXMocHJvcGVydGllczogSVByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhUGF0aCA9IHByb3BlcnRpZXMuZGF0YVBhdGg7XG4gICAgICAgIHRoaXMuZGF0YUZpZWxkc1BhdGggPSBwcm9wZXJ0aWVzLmRhdGFGaWVsZHNQYXRoO1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXNQYXRoID0gcHJvcGVydGllcy50b3RhbEl0ZW1zUGF0aDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlT3V0cHV0KG91dHB1dDogSUZpbHRlcmluZ091dHB1dHMgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBvdXRwdXQ/LnBhZ2luYXRvcj8udG90YWw7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gb3V0cHV0Py5yZXBlYXQ/Lml0ZW1zU291cmNlO1xuICAgICAgICBjb25zdCBkYXRhRmllbGRzID0gb3V0cHV0Py5kYXRhRmllbGRzO1xuXG4gICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBpenphZ25hS2V5OiBQaXp6YWduYUxheWVyLkRhdGEsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMuY29tcG9uZW50SWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlQYXRoOiBbdGhpcy50b3RhbEl0ZW1zUGF0aF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnBpenphZ25hU2VydmljZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwaXp6YWduYUtleTogUGl6emFnbmFMYXllci5EYXRhLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudElkOiB0aGlzLmNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5UGF0aDogW3RoaXMuZGF0YVBhdGhdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5waXp6YWduYVNlcnZpY2Uuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGl6emFnbmFLZXk6IFBpenphZ25hTGF5ZXIuRGF0YSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJZDogdGhpcy5jb21wb25lbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVBhdGg6IFt0aGlzLmRhdGFGaWVsZHNQYXRoXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhRmllbGRzXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19