@versatiledatakit/shared
Version:
Versatile Data Kit Shared library enables reusability of shared features like: NgRx Redux, Error Handlers, Utils, Generic Components, etc.
215 lines • 17.8 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable @typescript-eslint/no-explicit-any */
import { extractTaskFromIdentifier, RequestFilterImpl, RequestPageImpl } from '../../../common';
import { ComponentStateImpl, FAILED, IDLE, LOADED, LOADING } from './state';
import { ComponentModelComparable } from './component-model.comparable';
import { AbstractComponentModel } from './component.model.interface';
/**
* ** Generic Model for all Components.
*/
export class ComponentModel extends AbstractComponentModel {
/**
* ** Constructor.
*/
constructor(_componentState, _routerState) {
super();
this._componentState = _componentState;
this._routerState = _routerState;
}
/**
* ** Factory method.
*/
static of(componentState, routerState) {
return new ComponentModel(componentState, routerState);
}
/**
* @inheritDoc
*/
get routerState() {
return this._routerState;
}
/**
* @inheritDoc
*/
get status() {
return this.getComponentState().status;
}
/**
* @inheritDoc
*/
get routePath() {
return this.getComponentState().routePath || this.routerState.state.routeSegments.routePath;
}
/**
* @inheritDoc
*/
getComponentState() {
return this._componentState;
}
/**
* @inheritDoc
*/
withSearch(search) {
this.updateComponentState({
search
});
return this;
}
/**
* @inheritDoc
*/
withPage(page, size) {
this.updateComponentState({
page: RequestPageImpl.of(page, size)
});
return this;
}
/**
* @inheritDoc
*/
withFilter(filterPredicates) {
this.updateComponentState({
filter: RequestFilterImpl.of(...filterPredicates)
});
return this;
}
/**
* @inheritDoc
*/
withRequestParam(key, value) {
this.getComponentState().requestParams.set(key, value);
return this;
}
/**
* @inheritDoc
*/
withData(key, data) {
this.getComponentState().data.set(key, data);
return this;
}
/**
* @inheritDoc
*/
withTask(taskIdentifier) {
this.updateComponentState({ task: taskIdentifier });
return this;
}
/**
* @inheritDoc
*/
clearTask() {
this.updateComponentState({ task: null });
return this;
}
/**
* @inheritDoc
*/
getTask() {
return extractTaskFromIdentifier(this.getComponentState().task);
}
/**
* @inheritDoc
*/
getTaskUniqueIdentifier() {
return this.getComponentState().task;
}
/**
* @inheritDoc
*/
withError(errorRecord) {
this.getComponentState().errors.record(errorRecord);
return this;
}
/**
* @inheritDoc
*/
clearErrors() {
this.getComponentState().errors.clear();
return this;
}
/**
* @inheritDoc
*/
removeErrorCode(...errorCodes) {
this.getComponentState().errors.removeCode(...errorCodes);
return this;
}
/**
* @inheritDoc
*/
removeErrorCodePatterns(...errorCodePatterns) {
this.getComponentState().errors.removeCodePattern(...errorCodePatterns);
return this;
}
/**
* @inheritDoc
*/
withUiState(key, value) {
this.getComponentState().uiState.set(key, value);
return this;
}
/**
* @inheritDoc
*/
getUiState(key) {
return this.getComponentState().uiState.get(key);
}
/**
* @inheritDoc
*/
withStatusIdle() {
this.updateComponentState({ status: IDLE });
return this;
}
/**
* @inheritDoc
*/
withStatusLoading() {
this.updateComponentState({ status: LOADING });
return this;
}
/**
* @inheritDoc
*/
withStatusLoaded() {
this.updateComponentState({ status: LOADED });
return this;
}
/**
* @inheritDoc
*/
withStatusFailed() {
this.updateComponentState({ status: FAILED });
return this;
}
/**
* @inheritDoc
*/
updateComponentState(patchState) {
this._componentState = ComponentStateImpl.of({
...this.getComponentState(),
...patchState
});
return this;
}
/**
* @inheritDoc
*/
prepareForDestroy() {
this.withStatusIdle();
this.updateComponentState({
errors: null
});
return this;
}
/**
* @inheritDoc
*/
isModified(model) {
return ComponentModelComparable.of(this).notEqual(ComponentModelComparable.of(model));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29yZS9jb21wb25lbnQvbW9kZWwvY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQTZCLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNILE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFjLE1BQU0sU0FBUyxDQUFDO0FBRXhHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxzQkFBc0I7SUFDdEQ7O09BRUc7SUFDSCxZQUNjLGVBQStCLEVBQy9CLFlBQXlCO1FBRW5DLEtBQUssRUFBRSxDQUFDO1FBSEUsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFhO0lBR3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBOEIsRUFBRSxXQUF3QjtRQUM5RCxPQUFPLElBQUksY0FBYyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFB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O1lBQ3pDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLEdBQUcsVUFBVTtTQUNoQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDYixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RCLE1BQU0sRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEtBQXFCO1FBQzVCLE9BQU8sd0JBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbmltcG9ydCB7IEFwaVByZWRpY2F0ZSwgRXJyb3JSZWNvcmQsIGV4dHJhY3RUYXNrRnJvbUlkZW50aWZpZXIsIFJlcXVlc3RGaWx0ZXJJbXBsLCBSZXF1ZXN0UGFnZUltcGwgfSBmcm9tICcuLi8uLi8uLi9jb21tb24nO1xuXG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3JvdXRlcic7XG5cbmltcG9ydCB7IENvbXBvbmVudFN0YXRlLCBDb21wb25lbnRTdGF0ZUltcGwsIEZBSUxFRCwgSURMRSwgTE9BREVELCBMT0FESU5HLCBTdGF0dXNUeXBlIH0gZnJvbSAnLi9zdGF0ZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQ29tcGFyYWJsZSB9IGZyb20gJy4vY29tcG9uZW50LW1vZGVsLmNvbXBhcmFibGUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi9jb21wb25lbnQubW9kZWwuaW50ZXJmYWNlJztcblxuLyoqXG4gKiAqKiBHZW5lcmljIE1vZGVsIGZvciBhbGwgQ29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnRNb2RlbCB7XG4gICAgLyoqXG4gICAgICogKiogQ29uc3RydWN0b3IuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY29tcG9uZW50U3RhdGU6IENvbXBvbmVudFN0YXRlLFxuICAgICAgICBwcm90ZWN0ZWQgX3JvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIEZhY3RvcnkgbWV0aG9kLlxuICAgICAqL1xuICAgIHN0YXRpYyBvZihjb21wb25lbnRTdGF0ZTogQ29tcG9uZW50U3RhdGUsIHJvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudE1vZGVsKGNvbXBvbmVudFN0YXRlLCByb3V0ZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXQgcm91dGVyU3RhdGUoKTogUm91dGVyU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXQgc3RhdHVzKCk6IFN0YXR1c1R5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLnN0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldCByb3V0ZVBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5yb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXJTdGF0ZS5zdGF0ZS5yb3V0ZVNlZ21lbnRzLnJvdXRlUGF0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBSZWZlcmVuY2UgdG8gcHJldmlvdXMgbW9kZWwgZm9yIGNvbXBhcmlzb24gb25seS5cbiAgICAgKi9cbiAgICByZWFkb25seSBwcmV2aW91c01vZGVsOiBSZWFkb25seTxDb21wb25lbnRNb2RlbD47XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldENvbXBvbmVudFN0YXRlKCk6IENvbXBvbmVudFN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aFNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0YXRlKHtcbiAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhQYWdlKHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgcGFnZTogUmVxdWVzdFBhZ2VJbXBsLm9mKHBhZ2UsIHNpemUpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aEZpbHRlcihmaWx0ZXJQcmVkaWNhdGVzOiBBcGlQcmVkaWNhdGVbXSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0YXRlKHtcbiAgICAgICAgICAgIGZpbHRlcjogUmVxdWVzdEZpbHRlckltcGwub2YoLi4uZmlsdGVyUHJlZGljYXRlcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoUmVxdWVzdFBhcmFtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5yZXF1ZXN0UGFyYW1zLnNldChrZXksIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhEYXRhKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmRhdGEuc2V0KGtleSwgZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoVGFzayh0YXNrSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyB0YXNrOiB0YXNrSWRlbnRpZmllciB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGNsZWFyVGFzaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdGF0ZSh7IHRhc2s6IG51bGwgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXRUYXNrKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBleHRyYWN0VGFza0Zyb21JZGVudGlmaWVyKHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS50YXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldFRhc2tVbmlxdWVJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudGFzaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhFcnJvcihlcnJvclJlY29yZDogRXJyb3JSZWNvcmQpIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmVycm9ycy5yZWNvcmQoZXJyb3JSZWNvcmQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5lcnJvcnMuY2xlYXIoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHJlbW92ZUVycm9yQ29kZSguLi5lcnJvckNvZGVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkuZXJyb3JzLnJlbW92ZUNvZGUoLi4uZXJyb3JDb2Rlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICByZW1vdmVFcnJvckNvZGVQYXR0ZXJucyguLi5lcnJvckNvZGVQYXR0ZXJuczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmVycm9ycy5yZW1vdmVDb2RlUGF0dGVybiguLi5lcnJvckNvZGVQYXR0ZXJucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoVWlTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudWlTdGF0ZS5zZXQoa2V5LCB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXRVaVN0YXRlPFQ+KGtleTogc3RyaW5nKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudWlTdGF0ZS5nZXQoa2V5KSBhcyBUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aFN0YXR1c0lkbGUoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IElETEUgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoU3RhdHVzTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdGF0ZSh7IHN0YXR1czogTE9BRElORyB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhTdGF0dXNMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IExPQURFRCB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhTdGF0dXNGYWlsZWQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IEZBSUxFRCB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudFN0YXRlKHBhdGNoU3RhdGU6IFBhcnRpYWw8Q29tcG9uZW50U3RhdGU+KSB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFN0YXRlID0gQ29tcG9uZW50U3RhdGVJbXBsLm9mKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKSxcbiAgICAgICAgICAgIC4uLnBhdGNoU3RhdGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBwcmVwYXJlRm9yRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy53aXRoU3RhdHVzSWRsZSgpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3JzOiBudWxsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgaXNNb2RpZmllZChtb2RlbDogQ29tcG9uZW50TW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudE1vZGVsQ29tcGFyYWJsZS5vZih0aGlzKS5ub3RFcXVhbChDb21wb25lbnRNb2RlbENvbXBhcmFibGUub2YobW9kZWwpKTtcbiAgICB9XG59XG4iXX0=