@versatiledatakit/shared
Version:
Versatile Data Kit Shared library enables reusability of shared features like: NgRx Redux, Error Handlers, Utils, Generic Components, etc.
94 lines • 16.5 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable arrow-body-style,prefer-arrow/prefer-arrow-functions */
import { ROUTER_NAVIGATION } from '@ngrx/router-store';
import { CollectionsUtil } from '../../../../utils';
import { RouteSegments } from '../../../router';
import { ComponentsStateHelper, FAILED, IDLE, INITIALIZED, LOADED, LOADING } from '../../model';
import { COMPONENT_CLEAR_DATA, COMPONENT_FAILED, COMPONENT_IDLE, COMPONENT_INIT, COMPONENT_LOADED, COMPONENT_LOADING, COMPONENT_UPDATE, ComponentIdle, ComponentLoaded } from '../actions';
const stateHelper = new ComponentsStateHelper();
/**
* ** Reducer for Components Actions.
*/
export function componentReducer(state = stateHelper.getState(), action = { type: null, payload: null }) {
let actionComponentState;
let actionLiteralComponentState;
let storeLiteralComponentState;
stateHelper.setState(state);
switch (action.type) {
case COMPONENT_INIT:
actionComponentState = action.payload;
stateHelper.updateLiteralComponentState({
...actionComponentState.toLiteralCloneDeep(),
status: INITIALIZED
});
return stateHelper.getState();
case COMPONENT_IDLE:
case COMPONENT_LOADING:
actionComponentState = action.payload;
storeLiteralComponentState = stateHelper.getLiteralComponentState(actionComponentState.id, actionComponentState.routePathSegments);
actionLiteralComponentState = actionComponentState.toLiteralCloneDeep();
stateHelper.updateLiteralComponentState({
...storeLiteralComponentState,
...actionLiteralComponentState,
status: action instanceof ComponentIdle ? IDLE : LOADING
});
return stateHelper.getState();
case COMPONENT_UPDATE:
case COMPONENT_LOADED:
actionComponentState = action.payload;
storeLiteralComponentState = stateHelper.getLiteralComponentState(actionComponentState.id, actionComponentState.routePathSegments);
actionLiteralComponentState = actionComponentState.toLiteralCloneDeep();
stateHelper.updateLiteralComponentState({
...storeLiteralComponentState,
...actionLiteralComponentState,
status: action instanceof ComponentLoaded ? LOADED : actionComponentState.status,
data: getComponentStateData(actionLiteralComponentState, storeLiteralComponentState)
});
return stateHelper.getState();
case COMPONENT_FAILED:
actionComponentState = action.payload;
storeLiteralComponentState = stateHelper.getLiteralComponentState(actionComponentState.id, actionComponentState.routePathSegments);
actionLiteralComponentState = actionComponentState.toLiteralCloneDeep();
stateHelper.updateLiteralComponentState({
...storeLiteralComponentState,
...actionLiteralComponentState,
data: getComponentStateData(actionLiteralComponentState, storeLiteralComponentState),
status: FAILED
});
return stateHelper.getState();
case COMPONENT_CLEAR_DATA:
actionComponentState = action.payload;
storeLiteralComponentState = stateHelper.getLiteralComponentState(actionComponentState.id, actionComponentState.routePathSegments);
stateHelper.updateLiteralComponentState({
...storeLiteralComponentState,
...actionComponentState.toLiteralCloneDeep(),
data: {},
status: LOADING
});
return stateHelper.getState();
case ROUTER_NAVIGATION:
const routeSegments = action.payload.routerState.routeSegments;
if (!(routeSegments instanceof RouteSegments)) {
return state;
}
stateHelper.resetComponentStates(routeSegments.routePathSegments);
return stateHelper.getState();
default:
return state;
}
}
const getComponentStateData = (actionComponentState,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
storeLiteralComponentState) => {
if (CollectionsUtil.isLiteralObjectWithProperties(actionComponentState.data)) {
return actionComponentState.data;
}
if (CollectionsUtil.isDefined(storeLiteralComponentState)) {
return storeLiteralComponentState.data;
}
return {};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LnJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb3JlL2NvbXBvbmVudC9zdGF0ZS9yZWR1Y2Vycy9jb21wb25lbnQucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCx5RUFBeUU7QUFFekUsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxPQUFPLEVBQXFCLGFBQWEsRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQXlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkksT0FBTyxFQUNILG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsZUFBZSxFQUdsQixNQUFNLFlBQVksQ0FBQztBQUVwQixNQUFNLFdBQVcsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQzlCLFNBQStDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO0lBRTVFLElBQUksb0JBQW9DLENBQUM7SUFDekMsSUFBSSwyQkFBa0QsQ0FBQztJQUN2RCxJQUFJLDBCQUFpRCxDQUFDO0lBRXRELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ2pC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O1lBQ2xCLE1BQU0sYUFBYSxHQUFJLE1BQTZDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7WUFFdkcsSUFBSSxDQUFDLENBQUMsYUFBYSxZQUFZLGFBQWEsQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVsRSxPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQztZQUNJLE9BQU8sS0FBSyxDQUFDO0tBQ3BCO0FBQ0wsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUcsQ0FDMUIsb0JBQTJDO0FBQzNDLDhEQUE4RDtBQUM5RCwwQkFBaUQsRUFDM0IsRUFBRTtJQUN4QixJQUFJLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxRSxPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQztLQUNwQztJQUVELElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO1FBQ3ZELE9BQU8sMEJBQTBCLENBQUMsSUFBSSxDQUFDO0tBQzFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1ib2R5LXN0eWxlLHByZWZlci1hcnJvdy9wcmVmZXItYXJyb3ctZnVuY3Rpb25zICovXG5cbmltcG9ydCB7IFJPVVRFUl9OQVZJR0FUSU9OLCBSb3V0ZXJOYXZpZ2F0aW9uQWN0aW9uIH0gZnJvbSAnQG5ncngvcm91dGVyLXN0b3JlJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbnNVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQWN0aW9ucywgUm91dGVTZWdtZW50cywgUm91dGVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3JvdXRlcic7XG5cbmltcG9ydCB7IENvbXBvbmVudHNTdGF0ZUhlbHBlciwgQ29tcG9uZW50U3RhdGUsIEZBSUxFRCwgSURMRSwgSU5JVElBTElaRUQsIExpdGVyYWxDb21wb25lbnRTdGF0ZSwgTE9BREVELCBMT0FESU5HIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuXG5pbXBvcnQge1xuICAgIENPTVBPTkVOVF9DTEVBUl9EQVRBLFxuICAgIENPTVBPTkVOVF9GQUlMRUQsXG4gICAgQ09NUE9ORU5UX0lETEUsXG4gICAgQ09NUE9ORU5UX0lOSVQsXG4gICAgQ09NUE9ORU5UX0xPQURFRCxcbiAgICBDT01QT05FTlRfTE9BRElORyxcbiAgICBDT01QT05FTlRfVVBEQVRFLFxuICAgIENvbXBvbmVudEFjdGlvbnMsXG4gICAgQ29tcG9uZW50Q2xlYXJEYXRhLFxuICAgIENvbXBvbmVudElkbGUsXG4gICAgQ29tcG9uZW50SW5pdCxcbiAgICBDb21wb25lbnRMb2FkZWQsXG4gICAgQ29tcG9uZW50TG9hZGluZyxcbiAgICBDb21wb25lbnRVcGRhdGVcbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5cbmNvbnN0IHN0YXRlSGVscGVyID0gbmV3IENvbXBvbmVudHNTdGF0ZUhlbHBlcigpO1xuXG4vKipcbiAqICoqIFJlZHVjZXIgZm9yIENvbXBvbmVudHMgQWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvbmVudFJlZHVjZXIoXG4gICAgc3RhdGUgPSBzdGF0ZUhlbHBlci5nZXRTdGF0ZSgpLFxuICAgIGFjdGlvbjogQ29tcG9uZW50QWN0aW9ucyB8IE5hdmlnYXRpb25BY3Rpb25zID0geyB0eXBlOiBudWxsLCBwYXlsb2FkOiBudWxsIH1cbikge1xuICAgIGxldCBhY3Rpb25Db21wb25lbnRTdGF0ZTogQ29tcG9uZW50U3RhdGU7XG4gICAgbGV0IGFjdGlvbkxpdGVyYWxDb21wb25lbnRTdGF0ZTogTGl0ZXJhbENvbXBvbmVudFN0YXRlO1xuICAgIGxldCBzdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZTogTGl0ZXJhbENvbXBvbmVudFN0YXRlO1xuXG4gICAgc3RhdGVIZWxwZXIuc2V0U3RhdGUoc3RhdGUpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIENPTVBPTkVOVF9JTklUOlxuICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUgPSAoYWN0aW9uIGFzIENvbXBvbmVudEluaXQpLnBheWxvYWQ7XG5cbiAgICAgICAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUxpdGVyYWxDb21wb25lbnRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4uYWN0aW9uQ29tcG9uZW50U3RhdGUudG9MaXRlcmFsQ2xvbmVEZWVwKCksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBJTklUSUFMSVpFRFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZUhlbHBlci5nZXRTdGF0ZSgpO1xuICAgICAgICBjYXNlIENPTVBPTkVOVF9JRExFOlxuICAgICAgICBjYXNlIENPTVBPTkVOVF9MT0FESU5HOlxuICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUgPSAoYWN0aW9uIGFzIENvbXBvbmVudElkbGUgfCBDb21wb25lbnRMb2FkaW5nKS5wYXlsb2FkO1xuICAgICAgICAgICAgc3RvcmVMaXRlcmFsQ29tcG9uZW50U3RhdGUgPSBzdGF0ZUhlbHBlci5nZXRMaXRlcmFsQ29tcG9uZW50U3RhdGUoXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUuaWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUucm91dGVQYXRoU2VnbWVudHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFjdGlvbkxpdGVyYWxDb21wb25lbnRTdGF0ZSA9IGFjdGlvbkNvbXBvbmVudFN0YXRlLnRvTGl0ZXJhbENsb25lRGVlcCgpO1xuXG4gICAgICAgICAgICBzdGF0ZUhlbHBlci51cGRhdGVMaXRlcmFsQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLnN0b3JlTGl0ZXJhbENvbXBvbmVudFN0YXRlLFxuICAgICAgICAgICAgICAgIC4uLmFjdGlvbkxpdGVyYWxDb21wb25lbnRTdGF0ZSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGFjdGlvbiBpbnN0YW5jZW9mIENvbXBvbmVudElkbGUgPyBJRExFIDogTE9BRElOR1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZUhlbHBlci5nZXRTdGF0ZSgpO1xuICAgICAgICBjYXNlIENPTVBPTkVOVF9VUERBVEU6XG4gICAgICAgIGNhc2UgQ09NUE9ORU5UX0xPQURFRDpcbiAgICAgICAgICAgIGFjdGlvbkNvbXBvbmVudFN0YXRlID0gKGFjdGlvbiBhcyBDb21wb25lbnRMb2FkZWQgfCBDb21wb25lbnRVcGRhdGUpLnBheWxvYWQ7XG4gICAgICAgICAgICBzdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZSA9IHN0YXRlSGVscGVyLmdldExpdGVyYWxDb21wb25lbnRTdGF0ZShcbiAgICAgICAgICAgICAgICBhY3Rpb25Db21wb25lbnRTdGF0ZS5pZCxcbiAgICAgICAgICAgICAgICBhY3Rpb25Db21wb25lbnRTdGF0ZS5yb3V0ZVBhdGhTZWdtZW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYWN0aW9uTGl0ZXJhbENvbXBvbmVudFN0YXRlID0gYWN0aW9uQ29tcG9uZW50U3RhdGUudG9MaXRlcmFsQ2xvbmVEZWVwKCk7XG5cbiAgICAgICAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUxpdGVyYWxDb21wb25lbnRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4uc3RvcmVMaXRlcmFsQ29tcG9uZW50U3RhdGUsXG4gICAgICAgICAgICAgICAgLi4uYWN0aW9uTGl0ZXJhbENvbXBvbmVudFN0YXRlLFxuICAgICAgICAgICAgICAgIHN0YXR1czogYWN0aW9uIGluc3RhbmNlb2YgQ29tcG9uZW50TG9hZGVkID8gTE9BREVEIDogYWN0aW9uQ29tcG9uZW50U3RhdGUuc3RhdHVzLFxuICAgICAgICAgICAgICAgIGRhdGE6IGdldENvbXBvbmVudFN0YXRlRGF0YShhY3Rpb25MaXRlcmFsQ29tcG9uZW50U3RhdGUsIHN0b3JlTGl0ZXJhbENvbXBvbmVudFN0YXRlKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZUhlbHBlci5nZXRTdGF0ZSgpO1xuICAgICAgICBjYXNlIENPTVBPTkVOVF9GQUlMRUQ6XG4gICAgICAgICAgICBhY3Rpb25Db21wb25lbnRTdGF0ZSA9IChhY3Rpb24gYXMgQ29tcG9uZW50TG9hZGVkIHwgQ29tcG9uZW50VXBkYXRlKS5wYXlsb2FkO1xuICAgICAgICAgICAgc3RvcmVMaXRlcmFsQ29tcG9uZW50U3RhdGUgPSBzdGF0ZUhlbHBlci5nZXRMaXRlcmFsQ29tcG9uZW50U3RhdGUoXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUuaWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50U3RhdGUucm91dGVQYXRoU2VnbWVudHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFjdGlvbkxpdGVyYWxDb21wb25lbnRTdGF0ZSA9IGFjdGlvbkNvbXBvbmVudFN0YXRlLnRvTGl0ZXJhbENsb25lRGVlcCgpO1xuXG4gICAgICAgICAgICBzdGF0ZUhlbHBlci51cGRhdGVMaXRlcmFsQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLnN0b3JlTGl0ZXJhbENvbXBvbmVudFN0YXRlLFxuICAgICAgICAgICAgICAgIC4uLmFjdGlvbkxpdGVyYWxDb21wb25lbnRTdGF0ZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBnZXRDb21wb25lbnRTdGF0ZURhdGEoYWN0aW9uTGl0ZXJhbENvbXBvbmVudFN0YXRlLCBzdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZSksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBGQUlMRURcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVIZWxwZXIuZ2V0U3RhdGUoKTtcbiAgICAgICAgY2FzZSBDT01QT05FTlRfQ0xFQVJfREFUQTpcbiAgICAgICAgICAgIGFjdGlvbkNvbXBvbmVudFN0YXRlID0gKGFjdGlvbiBhcyBDb21wb25lbnRDbGVhckRhdGEpLnBheWxvYWQ7XG4gICAgICAgICAgICBzdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZSA9IHN0YXRlSGVscGVyLmdldExpdGVyYWxDb21wb25lbnRTdGF0ZShcbiAgICAgICAgICAgICAgICBhY3Rpb25Db21wb25lbnRTdGF0ZS5pZCxcbiAgICAgICAgICAgICAgICBhY3Rpb25Db21wb25lbnRTdGF0ZS5yb3V0ZVBhdGhTZWdtZW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc3RhdGVIZWxwZXIudXBkYXRlTGl0ZXJhbENvbXBvbmVudFN0YXRlKHtcbiAgICAgICAgICAgICAgICAuLi5zdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZSxcbiAgICAgICAgICAgICAgICAuLi5hY3Rpb25Db21wb25lbnRTdGF0ZS50b0xpdGVyYWxDbG9uZURlZXAoKSxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IExPQURJTkdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVIZWxwZXIuZ2V0U3RhdGUoKTtcbiAgICAgICAgY2FzZSBST1VURVJfTkFWSUdBVElPTjpcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlU2VnbWVudHMgPSAoYWN0aW9uIGFzIFJvdXRlck5hdmlnYXRpb25BY3Rpb248Um91dGVTdGF0ZT4pLnBheWxvYWQucm91dGVyU3RhdGUucm91dGVTZWdtZW50cztcblxuICAgICAgICAgICAgaWYgKCEocm91dGVTZWdtZW50cyBpbnN0YW5jZW9mIFJvdXRlU2VnbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZUhlbHBlci5yZXNldENvbXBvbmVudFN0YXRlcyhyb3V0ZVNlZ21lbnRzLnJvdXRlUGF0aFNlZ21lbnRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlSGVscGVyLmdldFN0YXRlKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxufVxuXG5jb25zdCBnZXRDb21wb25lbnRTdGF0ZURhdGEgPSAoXG4gICAgYWN0aW9uQ29tcG9uZW50U3RhdGU6IExpdGVyYWxDb21wb25lbnRTdGF0ZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0b3JlTGl0ZXJhbENvbXBvbmVudFN0YXRlOiBMaXRlcmFsQ29tcG9uZW50U3RhdGVcbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPT4ge1xuICAgIGlmIChDb2xsZWN0aW9uc1V0aWwuaXNMaXRlcmFsT2JqZWN0V2l0aFByb3BlcnRpZXMoYWN0aW9uQ29tcG9uZW50U3RhdGUuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbkNvbXBvbmVudFN0YXRlLmRhdGE7XG4gICAgfVxuXG4gICAgaWYgKENvbGxlY3Rpb25zVXRpbC5pc0RlZmluZWQoc3RvcmVMaXRlcmFsQ29tcG9uZW50U3RhdGUpKSB7XG4gICAgICAgIHJldHVybiBzdG9yZUxpdGVyYWxDb21wb25lbnRTdGF0ZS5kYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbn07XG4iXX0=