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

126 lines 21 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 { Injectable } from "@angular/core"; import { barAccessors, barGrid, BarRenderer, barScales, BarSeriesHighlightStrategy, PieRenderer, radial, RadialAccessors, radialGrid, RadialRenderer, radialScales, } from "@nova-ui/charts"; import { ProportionalWidgetChartTypes } from "../components/proportional-widget/types"; import * as i0 from "@angular/core"; export class CategoryChartUtilService { /** * Combines each of IDataSeries with accessors, renderer and scales provided * * @param data * @param accessors * @param renderer * @param scales * * @returns resulting set of IChartAssistSeries */ static buildChartSeries(data, accessors, renderer, scales) { const result = (data || []).map((s) => ({ ...s, accessors, renderer, scales, })); return result; } static getChartAttributes(chartType, colors, markers) { const t = CategoryChartUtilService.getChartTools(chartType); const result = { grid: t.gridFunction(), accessors: t.accessorFunction(colors, markers), renderer: t.rendererFunction(), scales: t.scaleFunction(), }; if (t.preprocessor) { result.preprocessor = t.preprocessor; } return result; } static getChartTools(chartType) { const radialChartAccessors = (colors) => { const accessors = new RadialAccessors(colors); accessors.series.color = (seriesId, series) => series.color ?? colors.get(seriesId); return accessors; }; function barChartAccessors(colors, markers) { // TODO: Refactor to accept config reference from arguments not from outer context // @ts-ignore: TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.; // An outer value of 'this' is shadowed by this container. const accessors = barAccessors(this.config, colors, markers); accessors.series.color = (seriesId, series) => series.color ?? colors?.get(seriesId); // TODO: Remove custom accessor after fixing NUI-3688 in charts accessors.data.value = (d) => Number.isFinite(d) ? d : d.value; return accessors; } const chartTools = { [ProportionalWidgetChartTypes.DonutChart]: { preprocessor: radial, gridFunction: radialGrid, rendererFunction: () => new RadialRenderer(), // TODO: replace with correct type accessorFunction: radialChartAccessors, scaleFunction: radialScales, }, [ProportionalWidgetChartTypes.PieChart]: { preprocessor: radial, gridFunction: radialGrid, rendererFunction: () => new PieRenderer(), // TODO: replace with correct type accessorFunction: radialChartAccessors, scaleFunction: radialScales, }, [ProportionalWidgetChartTypes.HorizontalBarChart]: { config: { horizontal: true }, gridFunction() { return barGrid(this.config); }, rendererFunction: () => new BarRenderer({ highlightStrategy: new BarSeriesHighlightStrategy("y"), }), accessorFunction: barChartAccessors, scaleFunction() { return barScales(this.config); }, }, [ProportionalWidgetChartTypes.VerticalBarChart]: { config: { horizontal: false }, gridFunction() { return barGrid(this.config); }, rendererFunction: () => new BarRenderer({ highlightStrategy: new BarSeriesHighlightStrategy("x"), }), accessorFunction: barChartAccessors, scaleFunction() { return barScales(this.config); }, }, }; return chartTools[chartType]; } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CategoryChartUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CategoryChartUtilService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CategoryChartUtilService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktY2hhcnQtdXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jYXRlZ29yeS1jaGFydC11dGlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUNILFlBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLFNBQVMsRUFDVCwwQkFBMEIsRUFVMUIsV0FBVyxFQUNYLE1BQU0sRUFDTixlQUFlLEVBQ2YsVUFBVSxFQUNWLGNBQWMsRUFDZCxZQUFZLEdBR2YsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUE0QnZGLE1BQU0sT0FBTyx3QkFBd0I7SUFDakM7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUMxQixJQUErQixFQUMvQixTQUFxQixFQUNyQixRQUE4QixFQUM5QixNQUFjO1FBRWQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQztZQUNKLFNBQVM7WUFDVCxRQUFRO1lBQ1IsTUFBTTtTQUNULENBQUMsQ0FBQyxD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Z0JBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQ25CLElBQUksV0FBVyxDQUFDO29CQUNaLGlCQUFpQixFQUFFLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDO2lCQUN6RCxDQUFDO2dCQUNOLGdCQUFnQixFQUFFLGlCQUFpQjtnQkFDbkMsYUFBYTtvQkFDVCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7YUFDSjtZQUNELENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDN0MsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtnQkFDN0IsWUFBWTtvQkFDUixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQ25CLElBQUksV0FBVyxDQUFDO29CQUNaLGlCQUFpQixFQUFFLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDO2lCQUN6RCxDQUFDO2dCQUNOLGdCQUFnQixFQUFFLGlCQUFpQjtnQkFDbkMsYUFBYTtvQkFDVCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7YUFDSjtTQUNKLENBQUM7UUFFRixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO2tJQXBJUSx3QkFBd0I7c0lBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHtcbiAgICBiYXJBY2Nlc3NvcnMsXG4gICAgYmFyR3JpZCxcbiAgICBCYXJSZW5kZXJlcixcbiAgICBiYXJTY2FsZXMsXG4gICAgQmFyU2VyaWVzSGlnaGxpZ2h0U3RyYXRlZ3ksXG4gICAgQ2hhcnRBc3Npc3QsXG4gICAgSUFjY2Vzc29ycyxcbiAgICBJQmFyQ2hhcnRDb25maWcsXG4gICAgSUNoYXJ0QXNzaXN0U2VyaWVzLFxuICAgIElDaGFydE1hcmtlcixcbiAgICBJRGF0YVNlcmllcyxcbiAgICBJR3JpZCxcbiAgICBJUmFkaWFsQWNjZXNzb3JzLFxuICAgIElWYWx1ZVByb3ZpZGVyLFxuICAgIFBpZVJlbmRlcmVyLFxuICAgIHJhZGlhbCxcbiAgICBSYWRpYWxBY2Nlc3NvcnMsXG4gICAgcmFkaWFsR3JpZCxcbiAgICBSYWRpYWxSZW5kZXJlcixcbiAgICByYWRpYWxTY2FsZXMsXG4gICAgUmVuZGVyZXIsXG4gICAgU2NhbGVzLFxufSBmcm9tIFwiQG5vdmEtdWkvY2hhcnRzXCI7XG5cbmltcG9ydCB7IFByb3BvcnRpb25hbFdpZGdldENoYXJ0VHlwZXMgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9wcm9wb3J0aW9uYWwtd2lkZ2V0L3R5cGVzXCI7XG5cbnR5cGUgUHJlcHJvY2Vzc29yVHlwZTxUIGV4dGVuZHMgSUFjY2Vzc29ycz4gPSAoXG4gICAgdGhpczogQ2hhcnRBc3Npc3QsXG4gICAgc2VyaWVzOiBJQ2hhcnRBc3Npc3RTZXJpZXM8VD5bXVxuKSA9PiBJQ2hhcnRBc3Npc3RTZXJpZXM8VD5bXTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2hhcnRBdHRyaWJ1dGVzPFQgZXh0ZW5kcyBJQWNjZXNzb3JzID0gSUFjY2Vzc29ycz4ge1xuICAgIGdyaWQ6IElHcmlkO1xuICAgIGFjY2Vzc29yczogSUFjY2Vzc29ycztcbiAgICByZW5kZXJlcjogUmVuZGVyZXI8SUFjY2Vzc29ycz47XG4gICAgc2NhbGVzOiBTY2FsZXM7XG4gICAgcHJlcHJvY2Vzc29yPzogUHJlcHJvY2Vzc29yVHlwZTxUPjtcbn1cblxuaW50ZXJmYWNlIElDaGFydFRvb2xzPFQgZXh0ZW5kcyBJQWNjZXNzb3JzID0gSUFjY2Vzc29ycz4ge1xuICAgIGNvbmZpZz86IElCYXJDaGFydENvbmZpZztcbiAgICBwcmVwcm9jZXNzb3I/OiBQcmVwcm9jZXNzb3JUeXBlPFQ+O1xuICAgIGdyaWRGdW5jdGlvbjogKCkgPT4gSUdyaWQ7XG4gICAgcmVuZGVyZXJGdW5jdGlvbjogKCkgPT4gUmVuZGVyZXI8SUFjY2Vzc29ycz47XG4gICAgYWNjZXNzb3JGdW5jdGlvbjogKFxuICAgICAgICBjb2xvcnM/OiBJVmFsdWVQcm92aWRlcjxzdHJpbmc+LFxuICAgICAgICBtYXJrZXJzPzogSVZhbHVlUHJvdmlkZXI8SUNoYXJ0TWFya2VyPlxuICAgICkgPT4gSUFjY2Vzc29ycztcbiAgICBzY2FsZUZ1bmN0aW9uOiAoKSA9PiBTY2FsZXM7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXRlZ29yeUNoYXJ0VXRpbFNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqICBDb21iaW5lcyBlYWNoIG9mIElEYXRhU2VyaWVzIHdpdGggYWNjZXNzb3JzLCByZW5kZXJlciBhbmQgc2NhbGVzIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBhY2Nlc3NvcnNcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gc2NhbGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyByZXN1bHRpbmcgc2V0IG9mIElDaGFydEFzc2lzdFNlcmllc1xuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGRDaGFydFNlcmllcyhcbiAgICAgICAgZGF0YTogSURhdGFTZXJpZXM8SUFjY2Vzc29ycz5bXSxcbiAgICAgICAgYWNjZXNzb3JzOiBJQWNjZXNzb3JzLFxuICAgICAgICByZW5kZXJlcjogUmVuZGVyZXI8SUFjY2Vzc29ycz4sXG4gICAgICAgIHNjYWxlczogU2NhbGVzXG4gICAgKTogSUNoYXJ0QXNzaXN0U2VyaWVzPElBY2Nlc3NvcnM+W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoZGF0YSB8fCBbXSkubWFwKChzKSA9PiAoe1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIGFjY2Vzc29ycyxcbiAgICAgICAgICAgIHJlbmRlcmVyLFxuICAgICAgICAgICAgc2NhbGVzLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRDaGFydEF0dHJpYnV0ZXMoXG4gICAgICAgIGNoYXJ0VHlwZTogUHJvcG9ydGlvbmFsV2lkZ2V0Q2hhcnRUeXBlcyxcbiAgICAgICAgY29sb3JzPzogSVZhbHVlUHJvdmlkZXI8c3RyaW5nPixcbiAgICAgICAgbWFya2Vycz86IElWYWx1ZVByb3ZpZGVyPElDaGFydE1hcmtlcj5cbiAgICApOiBJQ2hhcnRBdHRyaWJ1dGVzIHwgSUNoYXJ0QXR0cmlidXRlczxJUmFkaWFsQWNjZXNzb3JzPiB7XG4gICAgICAgIGNvbnN0IHQ6IElDaGFydFRvb2xzIHwgSUNoYXJ0VG9vbHM8SVJhZGlhbEFjY2Vzc29ycz4gPVxuICAgICAgICAgICAgQ2F0ZWdvcnlDaGFydFV0aWxTZXJ2aWNlLmdldENoYXJ0VG9vbHMoY2hhcnRUeXBlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJQ2hhcnRBdHRyaWJ1dGVzIHwgSUNoYXJ0QXR0cmlidXRlczxJUmFkaWFsQWNjZXNzb3JzPiA9IHtcbiAgICAgICAgICAgIGdyaWQ6IHQuZ3JpZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICBhY2Nlc3NvcnM6IHQuYWNjZXNzb3JGdW5jdGlvbihjb2xvcnMsIG1hcmtlcnMpLFxuICAgICAgICAgICAgcmVuZGVyZXI6IHQucmVuZGVyZXJGdW5jdGlvbigpLFxuICAgICAgICAgICAgc2NhbGVzOiB0LnNjYWxlRnVuY3Rpb24oKSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodC5wcmVwcm9jZXNzb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wcmVwcm9jZXNzb3IgPVxuICAgICAgICAgICAgICAgIHQucHJlcHJvY2Vzc29yIGFzIFByZXByb2Nlc3NvclR5cGU8SVJhZGlhbEFjY2Vzc29ycz47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDaGFydFRvb2xzKFxuICAgICAgICBjaGFydFR5cGU6IFByb3BvcnRpb25hbFdpZGdldENoYXJ0VHlwZXNcbiAgICApOiBJQ2hhcnRUb29scyB8IElDaGFydFRvb2xzPElSYWRpYWxBY2Nlc3NvcnM+IHtcbiAgICAgICAgY29uc3QgcmFkaWFsQ2hhcnRBY2Nlc3NvcnMgPSAoY29sb3JzOiBJVmFsdWVQcm92aWRlcjxzdHJpbmc+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NvcnMgPSBuZXcgUmFkaWFsQWNjZXNzb3JzKGNvbG9ycyk7XG4gICAgICAgICAgICBhY2Nlc3NvcnMuc2VyaWVzLmNvbG9yID0gKHNlcmllc0lkOiBhbnksIHNlcmllczogYW55KSA9PlxuICAgICAgICAgICAgICAgIHNlcmllcy5jb2xvciA/PyBjb2xvcnMuZ2V0KHNlcmllc0lkKTtcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NvcnM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gYmFyQ2hhcnRBY2Nlc3NvcnMoXG4gICAgICAgICAgICBjb2xvcnM/OiBJVmFsdWVQcm92aWRlcjxzdHJpbmc+LFxuICAgICAgICAgICAgbWFya2Vycz86IElWYWx1ZVByb3ZpZGVyPElDaGFydE1hcmtlcj5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZWZhY3RvciB0byBhY2NlcHQgY29uZmlnIHJlZmVyZW5jZSBmcm9tIGFyZ3VtZW50cyBub3QgZnJvbSBvdXRlciBjb250ZXh0XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBUUzI2ODM6ICd0aGlzJyBpbXBsaWNpdGx5IGhhcyB0eXBlICdhbnknIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIHR5cGUgYW5ub3RhdGlvbi47XG4gICAgICAgICAgICAvLyBBbiBvdXRlciB2YWx1ZSBvZiAndGhpcycgaXMgc2hhZG93ZWQgYnkgdGhpcyBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NvcnMgPSBiYXJBY2Nlc3NvcnModGhpcy5jb25maWcsIGNvbG9ycywgbWFya2Vycyk7XG4gICAgICAgICAgICBhY2Nlc3NvcnMuc2VyaWVzLmNvbG9yID0gKFxuICAgICAgICAgICAgICAgIHNlcmllc0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgc2VyaWVzOiBJRGF0YVNlcmllczxJQWNjZXNzb3JzPlxuICAgICAgICAgICAgKSA9PiBzZXJpZXMuY29sb3IgPz8gY29sb3JzPy5nZXQoc2VyaWVzSWQpO1xuICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGN1c3RvbSBhY2Nlc3NvciBhZnRlciBmaXhpbmcgTlVJLTM2ODggaW4gY2hhcnRzXG4gICAgICAgICAgICBhY2Nlc3NvcnMuZGF0YS52YWx1ZSA9IChkOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGQpID8gZCA6IGQudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzb3JzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hhcnRUb29sczogUmVjb3JkPFxuICAgICAgICAgICAgUHJvcG9ydGlvbmFsV2lkZ2V0Q2hhcnRUeXBlcyxcbiAgICAgICAgICAgIElDaGFydFRvb2xzPElSYWRpYWxBY2Nlc3NvcnM+IHwgSUNoYXJ0VG9vbHNcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIFtQcm9wb3J0aW9uYWxXaWRnZXRDaGFydFR5cGVzLkRvbnV0Q2hhcnRdOiB7XG4gICAgICAgICAgICAgICAgcHJlcHJvY2Vzc29yOiByYWRpYWwsXG4gICAgICAgICAgICAgICAgZ3JpZEZ1bmN0aW9uOiByYWRpYWxHcmlkLFxuICAgICAgICAgICAgICAgIHJlbmRlcmVyRnVuY3Rpb246ICgpID0+IG5ldyBSYWRpYWxSZW5kZXJlcigpLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBjb3JyZWN0IHR5cGVcbiAgICAgICAgICAgICAgICBhY2Nlc3NvckZ1bmN0aW9uOiByYWRpYWxDaGFydEFjY2Vzc29ycyBhcyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbG9ycz86IElWYWx1ZVByb3ZpZGVyPHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlcnM/OiBJVmFsdWVQcm92aWRlcjxJQ2hhcnRNYXJrZXI+XG4gICAgICAgICAgICAgICAgKSA9PiBJQWNjZXNzb3JzLFxuICAgICAgICAgICAgICAgIHNjYWxlRnVuY3Rpb246IHJhZGlhbFNjYWxlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbUHJvcG9ydGlvbmFsV2lkZ2V0Q2hhcnRUeXBlcy5QaWVDaGFydF06IHtcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzb3I6IHJhZGlhbCxcbiAgICAgICAgICAgICAgICBncmlkRnVuY3Rpb246IHJhZGlhbEdyaWQsXG4gICAgICAgICAgICAgICAgcmVuZGVyZXJGdW5jdGlvbjogKCkgPT4gbmV3IFBpZVJlbmRlcmVyKCksXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIGNvcnJlY3QgdHlwZVxuICAgICAgICAgICAgICAgIGFjY2Vzc29yRnVuY3Rpb246IHJhZGlhbENoYXJ0QWNjZXNzb3JzIGFzIChcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzPzogSVZhbHVlUHJvdmlkZXI8c3RyaW5nPixcbiAgICAgICAgICAgICAgICAgICAgbWFya2Vycz86IElWYWx1ZVByb3ZpZGVyPElDaGFydE1hcmtlcj5cbiAgICAgICAgICAgICAgICApID0+IElBY2Nlc3NvcnMsXG4gICAgICAgICAgICAgICAgc2NhbGVGdW5jdGlvbjogcmFkaWFsU2NhbGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtQcm9wb3J0aW9uYWxXaWRnZXRDaGFydFR5cGVzLkhvcml6b250YWxCYXJDaGFydF06IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IHsgaG9yaXpvbnRhbDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIGdyaWRGdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhckdyaWQodGhpcy5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVuZGVyZXJGdW5jdGlvbjogKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IEJhclJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFN0cmF0ZWd5OiBuZXcgQmFyU2VyaWVzSGlnaGxpZ2h0U3RyYXRlZ3koXCJ5XCIpLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhY2Nlc3NvckZ1bmN0aW9uOiBiYXJDaGFydEFjY2Vzc29ycyxcbiAgICAgICAgICAgICAgICBzY2FsZUZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFyU2NhbGVzKHRoaXMuY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtQcm9wb3J0aW9uYWxXaWRnZXRDaGFydFR5cGVzLlZlcnRpY2FsQmFyQ2hhcnRdOiB7XG4gICAgICAgICAgICAgICAgY29uZmlnOiB7IGhvcml6b250YWw6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgZ3JpZEZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFyR3JpZCh0aGlzLmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW5kZXJlckZ1bmN0aW9uOiAoKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgQmFyUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0U3RyYXRlZ3k6IG5ldyBCYXJTZXJpZXNIaWdobGlnaHRTdHJhdGVneShcInhcIiksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGFjY2Vzc29yRnVuY3Rpb246IGJhckNoYXJ0QWNjZXNzb3JzLFxuICAgICAgICAgICAgICAgIHNjYWxlRnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJTY2FsZXModGhpcy5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBjaGFydFRvb2xzW2NoYXJ0VHlwZV07XG4gICAgfVxufVxuIl19