@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
172 lines • 25.9 kB
JavaScript
import { LoadingEmitter } from '../../../utility/loading-emitter';
import { forkJoin, of, Subject, timer } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
export class ProcessList {
_resources;
_log;
_loading$;
_processes;
_rolesIndex;
_selectedRoles;
constructor(_resources, _log) {
this._resources = _resources;
this._log = _log;
this._loading$ = new LoadingEmitter();
this._processes = [];
this._rolesIndex = {};
this._selectedRoles = new Set();
}
get loading() {
return this._loading$.getValue();
}
get loading$() {
return this._loading$.asObservable();
}
get processes() {
return this._processes;
}
get selectedRoles() {
return [...this._selectedRoles];
}
loadProcesses() {
if (this.loading) {
return;
}
const processes = new Subject();
this._loading$.on();
this._resources.getAll().pipe(catchError(err => {
this._log.error('Failed to load Petri nets', err);
return of([]);
}), map(p => Array.isArray(p) ? p : []), map(ps => ps.map(p => ({
...p,
roles: []
})))).subscribe(nets => {
const cache = {};
nets.forEach(net => {
if (cache[net.identifier]) {
cache[net.identifier].processes.push(net);
}
else {
cache[net.identifier] = {
identifier: net.identifier,
title: net.title,
initials: net.initials,
newestVersion: undefined,
processes: [net],
loading: true,
emptyRoles: true,
someRolesSelected: false
};
}
cache[net.identifier].processes.sort((a, b) => {
return b.version.localeCompare(a.version, undefined, { numeric: true });
});
cache[net.identifier].newestVersion = cache[net.identifier].processes[0].version;
});
this._processes = Object.values(cache).sort();
processes.next(this._processes);
this._loading$.off();
});
return processes.asObservable();
}
prepareToTryAgainToLoadRoles(item) {
if (!item || !item.emptyRoles) {
return;
}
item.loading = true;
}
selectRoles(roleIds) {
if (!roleIds) {
roleIds = new Set([]);
}
roleIds.forEach(role => {
this._selectedRoles.delete(role);
});
this._selectedRoles.forEach(role => {
if (this._rolesIndex[role]) {
this._rolesIndex[role].forEach(r => r.selected = false);
}
});
this._selectedRoles = roleIds;
this._selectedRoles.forEach(role => {
if (this._rolesIndex[role]) {
this._rolesIndex[role].forEach(r => r.selected = true);
}
});
this.updateSelectedRolesFlag(Object.keys(this._rolesIndex)
.filter(r => this._selectedRoles.has(r))
.map(r => this._rolesIndex[r].length !== 0 ? this._rolesIndex[r][0].processIdentifier : null));
}
updateSelectedRoles(role) {
role.selected ? this._selectedRoles.add(role.stringId) : this._selectedRoles.delete(role.stringId);
this._rolesIndex[role.stringId].forEach(r => r.selected = role.selected);
}
loadProcessItemRoles(item) {
if (!item || !item.emptyRoles) {
return;
}
item.loading = true;
forkJoin(item.processes.map(p => this.loadNetRoles(p))).subscribe(roles => {
let isEmpty = true;
roles.forEach((rs, i) => {
item.processes[i].roles = rs;
isEmpty = isEmpty && rs.length === 0;
});
item.emptyRoles = isEmpty;
item.loading = false;
});
}
loadNetRoles(net) {
if (net.roles && net.roles.length !== 0) {
return of(net.roles);
}
return this._resources.getPetriNetRoles(net.stringId).pipe(catchError(err => {
this._log.error('Failed to load roles for Petri net [' + net.stringId + '] ' + net.title, err);
return of([]);
}), map((roles) => roles.processRoles.map(role => ({
...role,
selected: false,
processIdentifier: net.identifier,
toggle() {
this.selected = !this.selected;
}
}))), tap(roles => roles.forEach(role => {
if (!this._rolesIndex[role.stringId]) {
this._rolesIndex[role.stringId] = [role];
}
else {
this._rolesIndex[role.stringId].push(role);
}
if (this._selectedRoles.has(role.stringId)) {
role.selected = true;
}
})));
}
updateSelectedRolesFlag(identifiers) {
if (!identifiers) {
return;
}
timer(0).subscribe(_ => {
if (identifiers.length === 0) {
this._processes.forEach(process => {
process.someRolesSelected = false;
});
}
identifiers.forEach(identifier => {
if (!identifier) {
return;
}
const requested = this._processes.find(process => process.identifier === identifier);
if (requested) {
requested.someRolesSelected = requested.processes.some(version => version.roles.length !== 0);
}
});
this._processes.forEach(process => {
if (!identifiers.find(i => process.identifier === i)) {
process.someRolesSelected = false;
}
});
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc0xpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2FkbWluL3JvbGUtYXNzaWdubWVudC9zZXJ2aWNlcy9Qcm9jZXNzTGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFJaEUsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQTBCcEQsTUFBTSxPQUFPLFdBQVc7SUFNQTtJQUE2QztJQUx6RCxTQUFTLENBQWlCO0lBQzFCLFVBQVUsQ0FBeUI7SUFDMUIsV0FBVyxDQUE4QztJQUNsRSxjQUFjLENBQWM7SUFFcEMsWUFBb0IsVUFBbUMsRUFBVSxJQUFtQjtRQUFoRSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUFVLFNBQUksR0FBSixJQUFJLENBQWU7UUFDaEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixPQUFPLElB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QUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQ3JGLElBQUksU0FBUyxFQUFFO29CQUNYLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNqRztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDbEQsT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztpQkFDckM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2FkaW5nRW1pdHRlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9sb2FkaW5nLWVtaXR0ZXInO1xuaW1wb3J0IHtQZXRyaU5ldFJlZmVyZW5jZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wZXRyaS1uZXQtcmVmZXJlbmNlJztcbmltcG9ydCB7UGV0cmlOZXRSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvcGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBOZXRSb2xlIGZyb20gJy4uLy4uLy4uL3Byb2Nlc3MvbmV0Um9sZSc7XG5pbXBvcnQgUm9sZXNBbmRQZXJtaXNzaW9ucyBmcm9tICcuLi8uLi8uLi9wcm9jZXNzL3JvbGVzQW5kUGVybWlzc2lvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkUHJvY2Vzc1JvbGUgZXh0ZW5kcyBOZXRSb2xlIHtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9jZXNzSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgdG9nZ2xlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1ZlcnNpb24gZXh0ZW5kcyBQZXRyaU5ldFJlZmVyZW5jZSB7XG4gICAgcm9sZXM6IEFycmF5PEV4dGVuZGVkUHJvY2Vzc1JvbGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NMaXN0SXRlbSB7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgaW5pdGlhbHM6IHN0cmluZztcbiAgICBuZXdlc3RWZXJzaW9uOiBzdHJpbmc7XG4gICAgcHJvY2Vzc2VzOiBBcnJheTxQcm9jZXNzVmVyc2lvbj47XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlbXB0eVJvbGVzOiBib29sZWFuO1xuICAgIHNvbWVSb2xlc1NlbGVjdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0xpc3Qge1xuICAgIHByaXZhdGUgX2xvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBwcml2YXRlIF9wcm9jZXNzZXM6IEFycmF5PFByb2Nlc3NMaXN0SXRlbT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcm9sZXNJbmRleDogeyBbazogc3RyaW5nXTogQXJyYXk8RXh0ZW5kZWRQcm9jZXNzUm9sZT4gfTtcbiAgICBwcml2YXRlIF9zZWxlY3RlZFJvbGVzOiBTZXQ8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3Jlc291cmNlczogUGV0cmlOZXRSZXNvdXJjZVNlcnZpY2UsIHByaXZhdGUgX2xvZzogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcm9sZXNJbmRleCA9IHt9O1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9jZXNzZXMoKTogQXJyYXk8UHJvY2Vzc0xpc3RJdGVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFJvbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX3NlbGVjdGVkUm9sZXNdO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUHJvY2Vzc2VzKCk6IE9ic2VydmFibGU8QXJyYXk8UHJvY2Vzc0xpc3RJdGVtPj4ge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvY2Vzc2VzID0gbmV3IFN1YmplY3Q8QXJyYXk8UHJvY2Vzc0xpc3RJdGVtPj4oKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VzLmdldEFsbCgpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBQZXRyaSBuZXRzJywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10gYXMgQXJyYXk8UHJvY2Vzc1ZlcnNpb24+KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHAgPT4gQXJyYXkuaXNBcnJheShwKSA/IHAgOiBbXSBhcyBBcnJheTxQcm9jZXNzVmVyc2lvbj4pLFxuICAgICAgICAgICAgbWFwKHBzID0+IHBzLm1hcChwID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgICAgICByb2xlczogW11cbiAgICAgICAgICAgIH0pIGFzIFByb2Nlc3NWZXJzaW9uKSlcbiAgICAgICAgKS5zdWJzY3JpYmUobmV0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZTogeyBbazogc3RyaW5nXTogUHJvY2Vzc0xpc3RJdGVtIH0gPSB7fTtcbiAgICAgICAgICAgIG5ldHMuZm9yRWFjaChuZXQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZVtuZXQuaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVbbmV0LmlkZW50aWZpZXJdLnByb2Nlc3Nlcy5wdXNoKG5ldCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVbbmV0LmlkZW50aWZpZXJdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogbmV0LmlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbmV0LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbHM6IG5ldC5pbml0aWFscyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld2VzdFZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlczogW25ldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSb2xlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVSb2xlc1NlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWNoZVtuZXQuaWRlbnRpZmllcl0ucHJvY2Vzc2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIudmVyc2lvbi5sb2NhbGVDb21wYXJlKGEudmVyc2lvbiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY2FjaGVbbmV0LmlkZW50aWZpZXJdLm5ld2VzdFZlcnNpb24gPSBjYWNoZVtuZXQuaWRlbnRpZmllcl0ucHJvY2Vzc2VzWzBdLnZlcnNpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlcyA9IE9iamVjdC52YWx1ZXMoY2FjaGUpLnNvcnQoKTtcbiAgICAgICAgICAgIHByb2Nlc3Nlcy5uZXh0KHRoaXMuX3Byb2Nlc3Nlcyk7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZXMuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVUb1RyeUFnYWluVG9Mb2FkUm9sZXMoaXRlbTogUHJvY2Vzc0xpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5lbXB0eVJvbGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5sb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Um9sZXMocm9sZUlkczogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFyb2xlSWRzKSB7XG4gICAgICAgICAgICByb2xlSWRzID0gbmV3IFNldDxzdHJpbmc+KFtdKTtcbiAgICAgICAgfVxuICAgICAgICByb2xlSWRzLmZvckVhY2gocm9sZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvbGVzLmRlbGV0ZShyb2xlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm9sZXMuZm9yRWFjaChyb2xlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yb2xlc0luZGV4W3JvbGVdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm9sZXNJbmRleFtyb2xlXS5mb3JFYWNoKHIgPT4gci5zZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm9sZXMgPSByb2xlSWRzO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvbGVzLmZvckVhY2gocm9sZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcm9sZXNJbmRleFtyb2xlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JvbGVzSW5kZXhbcm9sZV0uZm9yRWFjaChyID0+IHIuc2VsZWN0ZWQgPSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRSb2xlc0ZsYWcoT2JqZWN0LmtleXModGhpcy5fcm9sZXNJbmRleClcbiAgICAgICAgICAgIC5maWx0ZXIociA9PiB0aGlzLl9zZWxlY3RlZFJvbGVzLmhhcyhyKSlcbiAgICAgICAgICAgIC5tYXAociA9PiB0aGlzLl9yb2xlc0luZGV4W3JdLmxlbmd0aCAhPT0gMCA/IHRoaXMuX3JvbGVzSW5kZXhbcl1bMF0ucHJvY2Vzc0lkZW50aWZpZXIgOiBudWxsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNlbGVjdGVkUm9sZXMocm9sZTogRXh0ZW5kZWRQcm9jZXNzUm9sZSk6IHZvaWQge1xuICAgICAgICByb2xlLnNlbGVjdGVkID8gdGhpcy5fc2VsZWN0ZWRSb2xlcy5hZGQocm9sZS5zdHJpbmdJZCkgOiB0aGlzLl9zZWxlY3RlZFJvbGVzLmRlbGV0ZShyb2xlLnN0cmluZ0lkKTtcbiAgICAgICAgdGhpcy5fcm9sZXNJbmRleFtyb2xlLnN0cmluZ0lkXS5mb3JFYWNoKHIgPT4gci5zZWxlY3RlZCA9IHJvbGUuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUHJvY2Vzc0l0ZW1Sb2xlcyhpdGVtOiBQcm9jZXNzTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmVtcHR5Um9sZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVtLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBmb3JrSm9pbihpdGVtLnByb2Nlc3Nlcy5tYXAocCA9PiB0aGlzLmxvYWROZXRSb2xlcyhwKSkpLnN1YnNjcmliZShyb2xlcyA9PiB7XG4gICAgICAgICAgICBsZXQgaXNFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByb2xlcy5mb3JFYWNoKChycywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc2VzW2ldLnJvbGVzID0gcnM7XG4gICAgICAgICAgICAgICAgaXNFbXB0eSA9IGlzRW1wdHkgJiYgcnMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdGVtLmVtcHR5Um9sZXMgPSBpc0VtcHR5O1xuICAgICAgICAgICAgaXRlbS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE5ldFJvbGVzKG5ldDogUHJvY2Vzc1ZlcnNpb24pOiBPYnNlcnZhYmxlPEFycmF5PEV4dGVuZGVkUHJvY2Vzc1JvbGU+PiB7XG4gICAgICAgIGlmIChuZXQucm9sZXMgJiYgbmV0LnJvbGVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldC5yb2xlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlcy5nZXRQZXRyaU5ldFJvbGVzKG5ldC5zdHJpbmdJZCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJvbGVzIGZvciBQZXRyaSBuZXQgWycgKyBuZXQuc3RyaW5nSWQgKyAnXSAnICsgbmV0LnRpdGxlLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSBhcyBBcnJheTxFeHRlbmRlZFByb2Nlc3NSb2xlPik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgocm9sZXM6IFJvbGVzQW5kUGVybWlzc2lvbnMpID0+IHJvbGVzLnByb2Nlc3NSb2xlcy5tYXAocm9sZSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJvbGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudGlmaWVyOiBuZXQuaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICB0b2dnbGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSBhcyBFeHRlbmRlZFByb2Nlc3NSb2xlKSksXG4gICAgICAgICAgICB0YXAocm9sZXMgPT4gcm9sZXMuZm9yRWFjaChyb2xlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JvbGVzSW5kZXhbcm9sZS5zdHJpbmdJZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9sZXNJbmRleFtyb2xlLnN0cmluZ0lkXSA9IFtyb2xlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb2xlc0luZGV4W3JvbGUuc3RyaW5nSWRdLnB1c2gocm9sZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFJvbGVzLmhhcyhyb2xlLnN0cmluZ0lkKSkge1xuICAgICAgICAgICAgICAgICAgICByb2xlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkUm9sZXNGbGFnKGlkZW50aWZpZXJzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmICghaWRlbnRpZmllcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICBpZiAoaWRlbnRpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VzLmZvckVhY2gocHJvY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc29tZVJvbGVzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWRlbnRpZmllciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gdGhpcy5fcHJvY2Vzc2VzLmZpbmQocHJvY2VzcyA9PiBwcm9jZXNzLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkLnNvbWVSb2xlc1NlbGVjdGVkID0gcmVxdWVzdGVkLnByb2Nlc3Nlcy5zb21lKHZlcnNpb24gPT4gdmVyc2lvbi5yb2xlcy5sZW5ndGggIT09IDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VzLmZvckVhY2gocHJvY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpZGVudGlmaWVycy5maW5kKGkgPT4gcHJvY2Vzcy5pZGVudGlmaWVyID09PSBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnNvbWVSb2xlc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==