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

114 lines 17.7 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 } from "@angular/core"; import { takeUntil } from "rxjs/operators"; import { EventBus, } from "@nova-ui/bits"; import { DataSourceAdapter } from "./data-source-adapter"; import { PizzagnaService } from "../../pizzagna/services/pizzagna.service"; import { DRILLDOWN, REFRESH } from "../../services/types"; import { DATA_SOURCE, PizzagnaLayer, PIZZAGNA_EVENT_BUS, } from "../../types"; let DrilldownDataSourceAdapter = class DrilldownDataSourceAdapter extends DataSourceAdapter { constructor(eventBus, dataSource, pizzagnaService) { super(eventBus, dataSource, pizzagnaService); this.dataSource = dataSource; this.drillstate = []; this.eventBus .getStream(DRILLDOWN) .pipe(takeUntil(this.destroy$)) .subscribe((event) => { if (this.dataSource.busy?.value) { return; } this.onDrilldown(event); }); this.registerFilters(); } updateAdapterProperties(properties) { this.dataPath = properties.dataPath; this.drillstate = properties.drillstate || this.drillstate; this.groupBy = properties.groupBy; this.componentsConfig = properties.componentsConfig; this.navigationBarId = properties.navigationBarId; } updateOutput(output) { const widgetInput = this.getWidgetInput(output, this.drillstate.length !== this.groupBy.length); const widgetPath = `${PizzagnaLayer.Data}.${this.componentId}.properties`; this.pizzagnaService.setProperty(widgetPath, widgetInput); // update navBar label if (this.navigationBarId) { const navBarPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.label`; const navBarIsRootPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.isRoot`; const navBarBackPath = `${PizzagnaLayer.Data}.${this.navigationBarId}.properties.navBarConfig.buttons.back.disabled`; this.pizzagnaService.setProperty(navBarPath, this.drillstate[this.drillstate.length - 1]); this.pizzagnaService.setProperty(navBarBackPath, !!this.drillstate.length); this.pizzagnaService.setProperty(navBarIsRootPath, !this.drillstate.length); } } getWidgetInput(data, group) { const configuration = this.componentsConfig[group ? "group" : "leaf"]; return { [this.dataPath]: data, configuration, }; } onDrilldown(event) { const { payload } = event; if (payload.reset) { this.drillstate = []; this.eventBus.next(REFRESH, {}); return; } if (payload.back) { this.drillstate.length = this.drillstate.length - 1; this.eventBus.next(REFRESH, {}); return; } this.drillstate.push(payload.id); this.eventBus.next(REFRESH, {}); } registerFilters() { this.dataSource.registerComponent({ group: { componentInstance: { getFilters: () => ({ // type: "group", value: this.groupBy, }), }, }, drillstate: { componentInstance: { getFilters: () => ({ // type: "drillstate", value: this.drillstate, }), }, }, }); } }; DrilldownDataSourceAdapter = __decorate([ __param(0, Inject(PIZZAGNA_EVENT_BUS)), __param(1, Inject(DATA_SOURCE)), __metadata("design:paramtypes", [EventBus, Object, PizzagnaService]) ], DrilldownDataSourceAdapter); export { DrilldownDataSourceAdapter }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpbGxkb3duLWRhdGEtc291cmNlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcHJvdmlkZXJzL2RyaWxsZG93bi1kYXRhLXNvdXJjZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjs7QUFFakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNILFFBQVEsR0FJWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsV0FBVyxFQUVYLGFBQWEsRUFDYixrQkFBa0IsR0FDckIsTUFBTSxhQUFhLENBQUM7QUFFckIsSUFBYSwwQkFBMEIsR0FBdkMsTUFBYSwwQkFBMkIsU0FBUSxpQkFBaUI7SUFPN0QsWUFDZ0MsUUFBMEIsRUFDakMsVUFBdUMsRUFDNUQsZUFBZ0M7UUFFaEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFIakIs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b0h0QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7XG4gICAgRXZlbnRCdXMsXG4gICAgSURhdGFTb3VyY2VEcmlsbGRvd24sXG4gICAgSUV2ZW50LFxuICAgIElGaWx0ZXJpbmdPdXRwdXRzLFxufSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBEYXRhU291cmNlQWRhcHRlciB9IGZyb20gXCIuL2RhdGEtc291cmNlLWFkYXB0ZXJcIjtcbmltcG9ydCB7XG4gICAgSURyaWxsZG93bkNvbXBvbmVudENvbmZpZ3VyYXRpb24sXG4gICAgSURyaWxsZG93bkNvbXBvbmVudHNDb25maWd1cmF0aW9uLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUGl6emFnbmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3BpenphZ25hL3NlcnZpY2VzL3BpenphZ25hLnNlcnZpY2VcIjtcbmltcG9ydCB7IERSSUxMRE9XTiwgUkVGUkVTSCB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBEQVRBX1NPVVJDRSxcbiAgICBJUHJvcGVydGllcyxcbiAgICBQaXp6YWduYUxheWVyLFxuICAgIFBJWlpBR05BX0VWRU5UX0JVUyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBEcmlsbGRvd25EYXRhU291cmNlQWRhcHRlciBleHRlbmRzIERhdGFTb3VyY2VBZGFwdGVyIHtcbiAgICBwcm90ZWN0ZWQgZGF0YVBhdGg6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgbmF2aWdhdGlvbkJhcklkOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGRyaWxsc3RhdGU6IHN0cmluZ1tdID0gW107XG4gICAgcHJvdGVjdGVkIGdyb3VwQnk6IHN0cmluZ1tdO1xuICAgIHByb3RlY3RlZCBjb21wb25lbnRzQ29uZmlnOiBJRHJpbGxkb3duQ29tcG9uZW50c0NvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChQSVpaQUdOQV9FVkVOVF9CVVMpIGV2ZW50QnVzOiBFdmVudEJ1czxJRXZlbnQ+LFxuICAgICAgICBASW5qZWN0KERBVEFfU09VUkNFKSBwdWJsaWMgZGF0YVNvdXJjZTogSURhdGFTb3VyY2VEcmlsbGRvd24sXG4gICAgICAgIHBpenphZ25hU2VydmljZTogUGl6emFnbmFTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGV2ZW50QnVzLCBkYXRhU291cmNlLCBwaXp6YWduYVNlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRCdXNcbiAgICAgICAgICAgIC5nZXRTdHJlYW0oRFJJTExET1dOKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UuYnVzeT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9uRHJpbGxkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFkYXB0ZXJQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IElQcm9wZXJ0aWVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YVBhdGggPSBwcm9wZXJ0aWVzLmRhdGFQYXRoO1xuICAgICAgICB0aGlzLmRyaWxsc3RhdGUgPSBwcm9wZXJ0aWVzLmRyaWxsc3RhdGUgfHwgdGhpcy5kcmlsbHN0YXRlO1xuICAgICAgICB0aGlzLmdyb3VwQnkgPSBwcm9wZXJ0aWVzLmdyb3VwQnk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50c0NvbmZpZyA9IHByb3BlcnRpZXMuY29tcG9uZW50c0NvbmZpZztcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQmFySWQgPSBwcm9wZXJ0aWVzLm5hdmlnYXRpb25CYXJJZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlT3V0cHV0KG91dHB1dDogSUZpbHRlcmluZ091dHB1dHMgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SW5wdXQgPSB0aGlzLmdldFdpZGdldElucHV0KFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgdGhpcy5kcmlsbHN0YXRlLmxlbmd0aCAhPT0gdGhpcy5ncm91cEJ5Lmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB3aWRnZXRQYXRoID0gYCR7UGl6emFnbmFMYXllci5EYXRhfS4ke3RoaXMuY29tcG9uZW50SWR9LnByb3BlcnRpZXNgO1xuICAgICAgICB0aGlzLnBpenphZ25hU2VydmljZS5zZXRQcm9wZXJ0eSh3aWRnZXRQYXRoLCB3aWRnZXRJbnB1dCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG5hdkJhciBsYWJlbFxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uQmFySWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hdkJhclBhdGggPSBgJHtQaXp6YWduYUxheWVyLkRhdGF9LiR7dGhpcy5uYXZpZ2F0aW9uQmFySWR9LnByb3BlcnRpZXMubmF2QmFyQ29uZmlnLmxhYmVsYDtcbiAgICAgICAgICAgIGNvbnN0IG5hdkJhcklzUm9vdFBhdGggPSBgJHtQaXp6YWduYUxheWVyLkRhdGF9LiR7dGhpcy5uYXZpZ2F0aW9uQmFySWR9LnByb3BlcnRpZXMubmF2QmFyQ29uZmlnLmlzUm9vdGA7XG4gICAgICAgICAgICBjb25zdCBuYXZCYXJCYWNrUGF0aCA9IGAke1BpenphZ25hTGF5ZXIuRGF0YX0uJHt0aGlzLm5hdmlnYXRpb25CYXJJZH0ucHJvcGVydGllcy5uYXZCYXJDb25maWcuYnV0dG9ucy5iYWNrLmRpc2FibGVkYDtcbiAgICAgICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgIG5hdkJhclBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5kcmlsbHN0YXRlW3RoaXMuZHJpbGxzdGF0ZS5sZW5ndGggLSAxXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgIG5hdkJhckJhY2tQYXRoLFxuICAgICAgICAgICAgICAgICEhdGhpcy5kcmlsbHN0YXRlLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgIG5hdkJhcklzUm9vdFBhdGgsXG4gICAgICAgICAgICAgICAgIXRoaXMuZHJpbGxzdGF0ZS5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0V2lkZ2V0SW5wdXQoXG4gICAgICAgIGRhdGE6IGFueSxcbiAgICAgICAgZ3JvdXA6IGJvb2xlYW5cbiAgICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYge1xuICAgICAgICBjb25maWd1cmF0aW9uOiBJRHJpbGxkb3duQ29tcG9uZW50Q29uZmlndXJhdGlvbjtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuY29tcG9uZW50c0NvbmZpZ1tncm91cCA/IFwiZ3JvdXBcIiA6IFwibGVhZlwiXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMuZGF0YVBhdGhdOiBkYXRhLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EcmlsbGRvd24oZXZlbnQ6IElFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmIChwYXlsb2FkLnJlc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmRyaWxsc3RhdGUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMubmV4dChSRUZSRVNILCB7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bG9hZC5iYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRyaWxsc3RhdGUubGVuZ3RoID0gdGhpcy5kcmlsbHN0YXRlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLm5leHQoUkVGUkVTSCwge30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmlsbHN0YXRlLnB1c2gocGF5bG9hZC5pZCk7XG4gICAgICAgIHRoaXMuZXZlbnRCdXMubmV4dChSRUZSRVNILCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZWdpc3RlckNvbXBvbmVudCh7XG4gICAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGdldEZpbHRlcnM6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlOiBcImdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5ncm91cEJ5LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRyaWxsc3RhdGU6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZToge1xuICAgICAgICAgICAgICAgICAgICBnZXRGaWx0ZXJzOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZTogXCJkcmlsbHN0YXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5kcmlsbHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19