@linid-dm/directory-manager-client-core
Version:
Core package by providing a set of angular components for the Directory Manager app.
219 lines • 26.4 kB
JavaScript
import { __decorate } from "tslib";
/**
* Copyright (C) 2020-2024 Linagora
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version, provided you comply with the Additional Terms applicable for
* LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU
* Affero General Public License, subsections (b), (c), and (e), pursuant to
* which these Appropriate Legal Notices must notably (i) retain the display of
* the "LinID™" trademark/logo at the top of the interface window, the display
* of the “You are using the Open Source and free version of LinID™, powered by
* Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise
* offer!” infobox and in the e-mails sent with the Program, notice appended to
* any type of outbound messages (e.g. e-mail and meeting requests) as well as
* in the LinID Directory Manager user interface, (ii) retain all hypertext
* links between LinID Directory Manager and https://linid.org/, as well as
* between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA
* intellectual property rights over its trademarks and commercial brands. Other
* Additional Terms apply, see <http://www.linagora.com/licenses/> for more
* details.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License and
* its applicable Additional Terms for LinID Directory Manager along with this
* program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero
* General Public License version 3 and <http://www.linagora.com/licenses/> for
* the Additional Terms applicable to the LinID Directory Manager software.
*/
import { Injectable } from '@angular/core';
import { Action, Selector, State } from '@ngxs/store';
import { getUserInterfaceRoutesRegexp } from '../../helpers/configs.helper';
import { emptyJsTable, toJsTable } from '../../helpers/jstable.helper';
import * as Data from '../data/data.actions';
import * as Routing from './routing.actions';
import * as i0 from "@angular/core";
import * as i1 from "@ngxs/store";
let RoutingState = class RoutingState {
constructor(_store$) {
this._store$ = _store$;
}
static getCurrentRouteUrl(state) {
return state.routingHistory[state.currentRouteIndex].url;
}
static geCurrentRouteIndex(state) {
return state.currentRouteIndex;
}
static getRoutingHistory(state) {
return state.routingHistory;
}
static getIsRedirectAllowed(state) {
return state.isRedirectAllowed;
}
static getAvailableRoutes(state) {
return state.availableRoutes;
}
static getAvailableRoutesAllIds(state) {
return state.availableRoutes.allIds;
}
static getAvailableRoutesById(state) {
return state.availableRoutes.byId;
}
addCurrentRoute(ctx, action) {
ctx.setState({
...ctx.getState(),
routingHistory: [
...ctx
.getState()
.routingHistory.slice(0, ctx.getState().currentRouteIndex + 1),
action.payload.route,
],
currentRouteIndex: ctx.getState().routingHistory.length,
});
}
restoreRoute(ctx, action) {
ctx.setState({
...ctx.getState(),
routingHistory: [
...ctx.getState().routingHistory.map((route, index) => index === action.payload.newRouteIndex
? Object.assign({}, route, {
navigationIds: [
...route.navigationIds,
action.payload.newNavigationId,
],
})
: route),
],
currentRouteIndex: action.payload.newRouteIndex,
});
const extrasIds = ctx.getState().routingHistory[action.payload.newRouteIndex].extras;
if (extrasIds !== null) {
this._store$.dispatch([
new Data.SetSelectedEntryIds({ ids: extrasIds.ids }),
new Data.SetSelectedEntryParentIds({ ids: extrasIds.parentIds }),
]);
}
}
removeLastRoute(ctx) {
ctx.getState().routingHistory.pop();
ctx.setState({
...ctx.getState(),
routingHistory: [...ctx.getState().routingHistory],
currentRouteIndex: ctx.getState().currentRouteIndex - 1,
});
}
setIsRedirectAllowed(ctx, action) {
ctx.setState({
...ctx.getState(),
isRedirectAllowed: action.payload,
});
}
setAvailableRoutes(ctx, action) {
ctx.setState({
...ctx.getState(),
availableRoutes: toJsTable(getUserInterfaceRoutesRegexp(action.payload.resourcesTypes, action.payload.configs)),
});
}
updateSelectedEntryRoute(ctx, action) {
const updatedRouteExtras = action.payload.route.extras;
ctx.setState({
...ctx.getState(),
routingHistory: ctx
.getState()
.routingHistory.map((route) => {
if (route.extras.ids?.id === updatedRouteExtras.ids.id) {
route.extras = updatedRouteExtras;
route.url = action.payload.route.url;
}
return route;
}),
});
}
updateSelectedEntryChildrenRoutes(ctx, action) {
ctx.setState({
...ctx.getState(),
routingHistory: [...action.payload.routingHistory],
});
}
updateCurrentUrl(ctx, action) {
ctx.setState({
...ctx.getState(),
routingHistory: [
...ctx.getState().routingHistory.map((route, index) => index === ctx.getState().currentRouteIndex
? Object.assign({}, route, {
url: action.payload.newUrl,
})
: route),
],
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: RoutingState, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: RoutingState }); }
};
__decorate([
Action(Routing.AddCurrentRoute)
], RoutingState.prototype, "addCurrentRoute", null);
__decorate([
Action(Routing.RestoreRoute)
], RoutingState.prototype, "restoreRoute", null);
__decorate([
Action(Routing.RemoveLastRoute)
], RoutingState.prototype, "removeLastRoute", null);
__decorate([
Action(Routing.SetIsRedirectAllowed)
], RoutingState.prototype, "setIsRedirectAllowed", null);
__decorate([
Action(Routing.SetAvailableRoutes)
], RoutingState.prototype, "setAvailableRoutes", null);
__decorate([
Action(Routing.UpdateSelectedEntryRoute)
], RoutingState.prototype, "updateSelectedEntryRoute", null);
__decorate([
Action(Routing.UpdateSelectedEntryChildrenRoutes)
], RoutingState.prototype, "updateSelectedEntryChildrenRoutes", null);
__decorate([
Action(Routing.UpdateCurrentUrl)
], RoutingState.prototype, "updateCurrentUrl", null);
__decorate([
Selector()
], RoutingState, "getCurrentRouteUrl", null);
__decorate([
Selector()
], RoutingState, "geCurrentRouteIndex", null);
__decorate([
Selector()
], RoutingState, "getRoutingHistory", null);
__decorate([
Selector()
], RoutingState, "getIsRedirectAllowed", null);
__decorate([
Selector()
], RoutingState, "getAvailableRoutes", null);
__decorate([
Selector()
], RoutingState, "getAvailableRoutesAllIds", null);
__decorate([
Selector()
], RoutingState, "getAvailableRoutesById", null);
RoutingState = __decorate([
State({
name: 'routing',
defaults: {
routingHistory: [],
currentRouteIndex: null,
isRedirectAllowed: false,
availableRoutes: emptyJsTable(),
},
})
], RoutingState);
export { RoutingState };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: RoutingState, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.Store }], propDecorators: { addCurrentRoute: [], restoreRoute: [], removeLastRoute: [], setIsRedirectAllowed: [], setAvailableRoutes: [], updateSelectedEntryRoute: [], updateSelectedEntryChildrenRoutes: [], updateCurrentUrl: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvc3RhdGVzL3JvdXRpbmcvcm91dGluZy5zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXVCLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBVyxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFNaEYsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDOzs7QUFtQnRDLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQVk7SUFDdkIsWUFBb0IsT0FBYztRQUFkLFlBQU8sR0FBUCxPQUFPLENBQU87SUFBRyxDQUFDO0lBRS9CLEFBQVAsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQXdCO1FBQ2hELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDM0QsQ0FBQztJQUdNLEFBQVAsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQXdCO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ2pDLENBQUM7SUFHTSxBQUFQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUF3QjtRQUMvQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQztJQUdNLEFBQVAsTUFBTSxDQUFDLG9C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QUFHRDtJQURDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0RBaUJoQztBQTNLTTtJQUROLFFBQVEsRUFBRTs0Q0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzZDQUdWO0FBR007SUFETixRQUFRLEVBQUU7MkNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTs4Q0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzRDQUtWO0FBR007SUFETixRQUFRLEVBQUU7a0RBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTtnREFLVjtBQXZDVSxZQUFZO0lBVnhCLEtBQUssQ0FBb0I7UUFDeEIsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUU7WUFDUixjQUFjLEVBQUUsRUFBRTtZQUNsQixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsZUFBZSxFQUFFLFlBQVksRUFBNkI7U0FDM0Q7S0FDRixDQUFDO0dBRVcsWUFBWSxDQStLeEI7OzJGQS9LWSxZQUFZO2tCQUR4QixVQUFVOzBFQTJDVCxlQUFlLE1BaUJmLFlBQVksTUErQlosZUFBZSxNQVVmLG9CQUFvQixNQVdwQixrQkFBa0IsTUFnQmxCLHdCQUF3QixNQW9CeEIsaUNBQWlDLE1BV2pDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjQgTGluYWdvcmFcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlclxuICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueVxuICogbGF0ZXIgdmVyc2lvbiwgcHJvdmlkZWQgeW91IGNvbXBseSB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgZm9yXG4gKiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZSBieSBMSU5BR09SQSBwdXJzdWFudCB0byBTZWN0aW9uIDcgb2YgdGhlIEdOVVxuICogQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1YnNlY3Rpb25zIChiKSwgKGMpLCBhbmQgKGUpLCBwdXJzdWFudCB0b1xuICogd2hpY2ggdGhlc2UgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBtdXN0IG5vdGFibHkgKGkpIHJldGFpbiB0aGUgZGlzcGxheSBvZlxuICogdGhlIFwiTGluSUTihKJcIiB0cmFkZW1hcmsvbG9nbyBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcmZhY2Ugd2luZG93LCB0aGUgZGlzcGxheVxuICogb2YgdGhlIOKAnFlvdSBhcmUgdXNpbmcgdGhlIE9wZW4gU291cmNlIGFuZCBmcmVlIHZlcnNpb24gb2YgTGluSUTihKIsIHBvd2VyZWQgYnlcbiAqIExpbmFnb3JhIMKpIDIwMDnigJMyMDEzLiBDb250cmlidXRlIHRvIExpbklEIFImRCBieSBzdWJzY3JpYmluZyB0byBhbiBFbnRlcnByaXNlXG4gKiBvZmZlciHigJ0gaW5mb2JveCBhbmQgaW4gdGhlIGUtbWFpbHMgc2VudCB3aXRoIHRoZSBQcm9ncmFtLCBub3RpY2UgYXBwZW5kZWQgdG9cbiAqIGFueSB0eXBlIG9mIG91dGJvdW5kIG1lc3NhZ2VzIChlLmcuIGUtbWFpbCBhbmQgbWVldGluZyByZXF1ZXN0cykgYXMgd2VsbCBhc1xuICogaW4gdGhlIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIHVzZXIgaW50ZXJmYWNlLCAoaWkpIHJldGFpbiBhbGwgaHlwZXJ0ZXh0XG4gKiBsaW5rcyBiZXR3ZWVuIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFuZCBodHRwczovL2xpbmlkLm9yZy8sIGFzIHdlbGwgYXNcbiAqIGJldHdlZW4gTElOQUdPUkEgYW5kIExJTkFHT1JBLmNvbSwgYW5kIChpaWkpIHJlZnJhaW4gZnJvbSBpbmZyaW5naW5nIExJTkFHT1JBXG4gKiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgaXRzIHRyYWRlbWFya3MgYW5kIGNvbW1lcmNpYWwgYnJhbmRzLiBPdGhlclxuICogQWRkaXRpb25hbCBUZXJtcyBhcHBseSwgc2VlIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1NcbiAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZFxuICogaXRzIGFwcGxpY2FibGUgQWRkaXRpb25hbCBUZXJtcyBmb3IgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgYWxvbmcgd2l0aCB0aGlzXG4gKiBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4gZm9yIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBhbmQgPGh0dHA6Ly93d3cubGluYWdvcmEuY29tL2xpY2Vuc2VzLz4gZm9yXG4gKiB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGdldFVzZXJJbnRlcmZhY2VSb3V0ZXNSZWdleHAgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvbmZpZ3MuaGVscGVyJztcbmltcG9ydCB7IEpzVGFibGUsIGVtcHR5SnNUYWJsZSwgdG9Kc1RhYmxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9qc3RhYmxlLmhlbHBlcic7XG5pbXBvcnQge1xuICBJUmVzb3VyY2VUeXBlUm91dGVzUmVnRXhwLFxuICBJUm91dGVEZXRhaWwsXG4gIElSb3V0ZURldGFpbEV4dHJhcyxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yb3V0aW5nLmludGVyZmFjZSc7XG5pbXBvcnQgKiBhcyBEYXRhIGZyb20gJy4uL2RhdGEvZGF0YS5hY3Rpb25zJztcbmltcG9ydCAqIGFzIFJvdXRpbmcgZnJvbSAnLi9yb3V0aW5nLmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRpbmdTdGF0ZU1vZGVsIHtcbiAgcm91dGluZ0hpc3Rvcnk6IElSb3V0ZURldGFpbFtdO1xuICBjdXJyZW50Um91dGVJbmRleDogbnVtYmVyO1xuICBpc1JlZGlyZWN0QWxsb3dlZDogYm9vbGVhbjtcbiAgYXZhaWxhYmxlUm91dGVzOiBKc1RhYmxlPElSZXNvdXJjZVR5cGVSb3V0ZXNSZWdFeHA+O1xufVxuXG5AU3RhdGU8Um91dGluZ1N0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRpbmcnLFxuICBkZWZhdWx0czoge1xuICAgIHJvdXRpbmdIaXN0b3J5OiBbXSxcbiAgICBjdXJyZW50Um91dGVJbmRleDogbnVsbCxcbiAgICBpc1JlZGlyZWN0QWxsb3dlZDogZmFsc2UsXG4gICAgYXZhaWxhYmxlUm91dGVzOiBlbXB0eUpzVGFibGU8SVJlc291cmNlVHlwZVJvdXRlc1JlZ0V4cD4oKSxcbiAgfSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm91dGluZ1N0YXRlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmUkOiBTdG9yZSkge31cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldEN1cnJlbnRSb3V0ZVVybChzdGF0ZTogUm91dGluZ1N0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5yb3V0aW5nSGlzdG9yeVtzdGF0ZS5jdXJyZW50Um91dGVJbmRleF0udXJsO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdlQ3VycmVudFJvdXRlSW5kZXgoc3RhdGU6IFJvdXRpbmdTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuY3VycmVudFJvdXRlSW5kZXg7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0Um91dGluZ0hpc3Rvcnkoc3RhdGU6IFJvdXRpbmdTdGF0ZU1vZGVsKTogSVJvdXRlRGV0YWlsW10ge1xuICAgIHJldHVybiBzdGF0ZS5yb3V0aW5nSGlzdG9yeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRJc1JlZGlyZWN0QWxsb3dlZChzdGF0ZTogUm91dGluZ1N0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuaXNSZWRpcmVjdEFsbG93ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0QXZhaWxhYmxlUm91dGVzKFxuICAgIHN0YXRlOiBSb3V0aW5nU3RhdGVNb2RlbFxuICApOiBKc1RhYmxlPElSZXNvdXJjZVR5cGVSb3V0ZXNSZWdFeHA+IHtcbiAgICByZXR1cm4gc3RhdGUuYXZhaWxhYmxlUm91dGVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldEF2YWlsYWJsZVJvdXRlc0FsbElkcyhzdGF0ZTogUm91dGluZ1N0YXRlTW9kZWwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHN0YXRlLmF2YWlsYWJsZVJvdXRlcy5hbGxJZHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0QXZhaWxhYmxlUm91dGVzQnlJZChzdGF0ZTogUm91dGluZ1N0YXRlTW9kZWwpOiB7XG4gICAgW3Jlc291cmNlVHlwZUlkOiBzdHJpbmddOiBJUmVzb3VyY2VUeXBlUm91dGVzUmVnRXhwO1xuICB9IHtcbiAgICByZXR1cm4gc3RhdGUuYXZhaWxhYmxlUm91dGVzLmJ5SWQ7XG4gIH1cblxuICBAQWN0aW9uKFJvdXRpbmcuQWRkQ3VycmVudFJvdXRlKVxuICBhZGRDdXJyZW50Um91dGUoXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGluZ1N0YXRlTW9kZWw+LFxuICAgIGFjdGlvbjogUm91dGluZy5BZGRDdXJyZW50Um91dGVcbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgcm91dGluZ0hpc3Rvcnk6IFtcbiAgICAgICAgLi4uY3R4XG4gICAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgICAucm91dGluZ0hpc3Rvcnkuc2xpY2UoMCwgY3R4LmdldFN0YXRlKCkuY3VycmVudFJvdXRlSW5kZXggKyAxKSxcbiAgICAgICAgYWN0aW9uLnBheWxvYWQucm91dGUsXG4gICAgICBdLFxuICAgICAgY3VycmVudFJvdXRlSW5kZXg6IGN0eC5nZXRTdGF0ZSgpLnJvdXRpbmdIaXN0b3J5Lmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUm91dGluZy5SZXN0b3JlUm91dGUpXG4gIHJlc3RvcmVSb3V0ZShcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxSb3V0aW5nU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0aW5nLlJlc3RvcmVSb3V0ZVxuICApOiB2b2lkIHtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICByb3V0aW5nSGlzdG9yeTogW1xuICAgICAgICAuLi5jdHguZ2V0U3RhdGUoKS5yb3V0aW5nSGlzdG9yeS5tYXAoKHJvdXRlLCBpbmRleCkgPT5cbiAgICAgICAgICBpbmRleCA9PT0gYWN0aW9uLnBheWxvYWQubmV3Um91dGVJbmRleFxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSwge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JZHM6IFtcbiAgICAgICAgICAgICAgICAgIC4uLnJvdXRlLm5hdmlnYXRpb25JZHMsXG4gICAgICAgICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5uZXdOYXZpZ2F0aW9uSWQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogcm91dGVcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICBjdXJyZW50Um91dGVJbmRleDogYWN0aW9uLnBheWxvYWQubmV3Um91dGVJbmRleCxcbiAgICB9KTtcbiAgICBjb25zdCBleHRyYXNJZHM6IElSb3V0ZURldGFpbEV4dHJhcyA9XG4gICAgICBjdHguZ2V0U3RhdGUoKS5yb3V0aW5nSGlzdG9yeVthY3Rpb24ucGF5bG9hZC5uZXdSb3V0ZUluZGV4XS5leHRyYXM7XG4gICAgaWYgKGV4dHJhc0lkcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc3RvcmUkLmRpc3BhdGNoKFtcbiAgICAgICAgbmV3IERhdGEuU2V0U2VsZWN0ZWRFbnRyeUlkcyh7IGlkczogZXh0cmFzSWRzLmlkcyB9KSxcbiAgICAgICAgbmV3IERhdGEuU2V0U2VsZWN0ZWRFbnRyeVBhcmVudElkcyh7IGlkczogZXh0cmFzSWRzLnBhcmVudElkcyB9KSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oUm91dGluZy5SZW1vdmVMYXN0Um91dGUpXG4gIHJlbW92ZUxhc3RSb3V0ZShjdHg6IFN0YXRlQ29udGV4dDxSb3V0aW5nU3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICBjdHguZ2V0U3RhdGUoKS5yb3V0aW5nSGlzdG9yeS5wb3AoKTtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICByb3V0aW5nSGlzdG9yeTogWy4uLmN0eC5nZXRTdGF0ZSgpLnJvdXRpbmdIaXN0b3J5XSxcbiAgICAgIGN1cnJlbnRSb3V0ZUluZGV4OiBjdHguZ2V0U3RhdGUoKS5jdXJyZW50Um91dGVJbmRleCAtIDEsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFJvdXRpbmcuU2V0SXNSZWRpcmVjdEFsbG93ZWQpXG4gIHNldElzUmVkaXJlY3RBbGxvd2VkKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFJvdXRpbmdTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFJvdXRpbmcuU2V0SXNSZWRpcmVjdEFsbG93ZWRcbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgaXNSZWRpcmVjdEFsbG93ZWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihSb3V0aW5nLlNldEF2YWlsYWJsZVJvdXRlcylcbiAgc2V0QXZhaWxhYmxlUm91dGVzKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFJvdXRpbmdTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFJvdXRpbmcuU2V0QXZhaWxhYmxlUm91dGVzXG4gICk6IHZvaWQge1xuICAgIGN0eC5zZXRTdGF0ZSh7XG4gICAgICAuLi5jdHguZ2V0U3RhdGUoKSxcbiAgICAgIGF2YWlsYWJsZVJvdXRlczogdG9Kc1RhYmxlPElSZXNvdXJjZVR5cGVSb3V0ZXNSZWdFeHA+KFxuICAgICAgICBnZXRVc2VySW50ZXJmYWNlUm91dGVzUmVnZXhwKFxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLnJlc291cmNlc1R5cGVzLFxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmNvbmZpZ3NcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUm91dGluZy5VcGRhdGVTZWxlY3RlZEVudHJ5Um91dGUpXG4gIHVwZGF0ZVNlbGVjdGVkRW50cnlSb3V0ZShcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxSb3V0aW5nU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0aW5nLlVwZGF0ZVNlbGVjdGVkRW50cnlSb3V0ZVxuICApOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkUm91dGVFeHRyYXM6IElSb3V0ZURldGFpbEV4dHJhcyA9IGFjdGlvbi5wYXlsb2FkLnJvdXRlLmV4dHJhcztcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICByb3V0aW5nSGlzdG9yeTogY3R4XG4gICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgIC5yb3V0aW5nSGlzdG9yeS5tYXAoKHJvdXRlOiBJUm91dGVEZXRhaWwpID0+IHtcbiAgICAgICAgICBpZiAocm91dGUuZXh0cmFzLmlkcz8uaWQgPT09IHVwZGF0ZWRSb3V0ZUV4dHJhcy5pZHMuaWQpIHtcbiAgICAgICAgICAgIHJvdXRlLmV4dHJhcyA9IHVwZGF0ZWRSb3V0ZUV4dHJhcztcbiAgICAgICAgICAgIHJvdXRlLnVybCA9IGFjdGlvbi5wYXlsb2FkLnJvdXRlLnVybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUm91dGluZy5VcGRhdGVTZWxlY3RlZEVudHJ5Q2hpbGRyZW5Sb3V0ZXMpXG4gIHVwZGF0ZVNlbGVjdGVkRW50cnlDaGlsZHJlblJvdXRlcyhcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxSb3V0aW5nU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0aW5nLlVwZGF0ZVNlbGVjdGVkRW50cnlDaGlsZHJlblJvdXRlc1xuICApOiB2b2lkIHtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICByb3V0aW5nSGlzdG9yeTogWy4uLmFjdGlvbi5wYXlsb2FkLnJvdXRpbmdIaXN0b3J5XSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oUm91dGluZy5VcGRhdGVDdXJyZW50VXJsKVxuICB1cGRhdGVDdXJyZW50VXJsKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PFJvdXRpbmdTdGF0ZU1vZGVsPixcbiAgICBhY3Rpb246IFJvdXRpbmcuVXBkYXRlQ3VycmVudFVybFxuICApOiB2b2lkIHtcbiAgICBjdHguc2V0U3RhdGUoe1xuICAgICAgLi4uY3R4LmdldFN0YXRlKCksXG4gICAgICByb3V0aW5nSGlzdG9yeTogW1xuICAgICAgICAuLi5jdHguZ2V0U3RhdGUoKS5yb3V0aW5nSGlzdG9yeS5tYXAoKHJvdXRlLCBpbmRleCkgPT5cbiAgICAgICAgICBpbmRleCA9PT0gY3R4LmdldFN0YXRlKCkuY3VycmVudFJvdXRlSW5kZXhcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUsIHtcbiAgICAgICAgICAgICAgICB1cmw6IGFjdGlvbi5wYXlsb2FkLm5ld1VybCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogcm91dGVcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==