@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
110 lines • 21.4 kB
JavaScript
import { __decorate } from "tslib";
import { inject, Injectable, Injector } from '@angular/core';
import { CreateMoveNodesDragModelFromSelectionRequest } from './create-move-nodes-drag-model-from-selection.request';
import { FExecutionRegister, FMediator } from '@foblex/mediator';
import { FComponentsStore } from '../../../f-storage';
import { FDraggableDataContext } from '../../f-draggable-data-context';
import { FNodeMoveDragHandler } from '../f-node-move.drag-handler';
import { CalculateNodeMoveLimitsRequest } from './domain/calculate-node-move-limits';
import { PutOutputConnectionHandlersToArrayRequest } from './domain/put-output-connection-handlers-to-array';
import { PutInputConnectionHandlersToArrayRequest } from './domain/put-input-connection-handlers-to-array';
import { IsArrayHasParentNodeRequest } from '../../domain';
import { GetDeepChildrenNodesAndGroupsRequest, GetNormalizedElementRectRequest, GetParentNodesRequest } from '../../../domain';
import { flatMap } from '@foblex/utils';
import { CalculateCommonNodeMoveLimitsRequest } from './domain/calculate-common-node-move-limits';
import { RectExtensions } from '@foblex/2d';
import { FSummaryNodeMoveDragHandler } from '../f-summary-node-move.drag-handler';
import * as i0 from "@angular/core";
let CreateMoveNodesDragModelFromSelectionExecution = class CreateMoveNodesDragModelFromSelectionExecution {
_fMediator = inject(FMediator);
_fComponentsStore = inject(FComponentsStore);
_fDraggableDataContext = inject(FDraggableDataContext);
_injector = inject(Injector);
handle(request) {
const fDraggedNodes = this._getDraggedNodes(request.nodeWithDisabledSelection);
const fNodesToDrag = this._getNodesToDragWithCommonLimits(fDraggedNodes);
const fDragHandlers = this._mapToNodeDragHandlers(fNodesToDrag);
this._setConnectionsHandlersToNodes(fDragHandlers, this._getAllOutputIds(fNodesToDrag), this._getAllInputIds(fNodesToDrag));
const commonLimits = this._calculateCommonLimits(this._getNodesMoveLimits(fNodesToDrag, [], fDraggedNodes));
return new FSummaryNodeMoveDragHandler(this._injector, commonLimits, fDragHandlers, this._getDraggedNodesBoundingRect(fNodesToDrag));
}
_getDraggedNodes(nodeWithDisabledSelection) {
const result = this._getNodesFromSelection();
if (nodeWithDisabledSelection) {
result.push(nodeWithDisabledSelection);
}
return result;
}
_getNodesFromSelection() {
return this._fDraggableDataContext.selectedItems
.map((x) => this._findNode(x.hostElement))
.filter((x) => !!x);
}
_findNode(hostElement) {
return this._fComponentsStore.fNodes
.find(n => n.isContains(hostElement));
}
_getNodesToDragWithCommonLimits(fDraggedNodes) {
return fDraggedNodes.reduce((result, x) => {
result.push(x);
return result.concat(this._getChildrenNodes(x.fId));
}, []);
}
_getNodesMoveLimits(fNodes, fParentNodes, fDraggedNodes) {
return fDraggedNodes.map((x) => {
const fParentNodes = this._fMediator.execute(new GetParentNodesRequest(x));
return { position: x.position, ...this._getNodeMoveLimits(x, fParentNodes, fDraggedNodes) };
});
}
_getNodeMoveLimits(fNode, fParentNodes, fDraggedNodes) {
return this._fMediator.execute(new CalculateNodeMoveLimitsRequest(fNode, this._isParentNodeInArray(fParentNodes, fDraggedNodes)));
}
_isParentNodeInArray(fParentNodes, fDraggedNodes) {
return this._fMediator.execute(new IsArrayHasParentNodeRequest(fParentNodes, fDraggedNodes));
}
_getChildrenNodes(fId) {
return this._fMediator.execute(new GetDeepChildrenNodesAndGroupsRequest(fId));
}
_calculateCommonLimits(limits) {
return this._fMediator.execute(new CalculateCommonNodeMoveLimitsRequest(limits));
}
_getAllOutputIds(fNodes) {
return flatMap(fNodes, (fNode) => this._getNodeOutputIds(fNode));
}
_getNodeOutputIds(fNode) {
return this._fComponentsStore.fOutputs.filter((x) => fNode.fId === x.fNodeId)
.map((x) => x.fId);
}
_getAllInputIds(fNodes) {
return flatMap(fNodes, (fNode) => this._getNodeInputIds(fNode));
}
_getNodeInputIds(fNode) {
return this._fComponentsStore.fInputs.filter((x) => fNode.fId === x.fNodeId)
.map((x) => x.fId);
}
_mapToNodeDragHandlers(items) {
return items.map((x) => new FNodeMoveDragHandler(x));
}
_setConnectionsHandlersToNodes(handlers, outputIds, inputIds) {
const fConnectionHandlers = [];
handlers.forEach((fNodeHandler) => {
this._fMediator.execute(new PutOutputConnectionHandlersToArrayRequest(fNodeHandler, inputIds, fConnectionHandlers));
this._fMediator.execute(new PutInputConnectionHandlersToArrayRequest(fNodeHandler, outputIds, fConnectionHandlers));
});
}
_getDraggedNodesBoundingRect(fNodes) {
return RectExtensions.union(fNodes.map((x) => {
return this._fMediator.execute(new GetNormalizedElementRectRequest(x.hostElement));
})) || RectExtensions.initialize();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateMoveNodesDragModelFromSelectionExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateMoveNodesDragModelFromSelectionExecution });
};
CreateMoveNodesDragModelFromSelectionExecution = __decorate([
FExecutionRegister(CreateMoveNodesDragModelFromSelectionRequest)
], CreateMoveNodesDragModelFromSelectionExecution);
export { CreateMoveNodesDragModelFromSelectionExecution };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateMoveNodesDragModelFromSelectionExecution, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZHJhZ2dhYmxlL2Ytbm9kZS1tb3ZlL2NyZWF0ZS1tb3ZlLW5vZGVzLWRyYWctbW9kZWwtZnJvbS1zZWxlY3Rpb24vY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0csT0FBTyxFQUNMLHdDQUF3QyxFQUN6QyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsb0NBQW9DLEVBQ3BDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDdEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxv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QVUsQ0FBQyxPQUFPLENBQUMsSUFBSSx3Q0FBd0MsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxNQUFtQjtRQUN0RCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQVEsSUFBSSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO3dHQXBIVSw4Q0FBOEM7NEdBQTlDLDhDQUE4Qzs7QUFBOUMsOENBQThDO0lBRDFELGtCQUFrQixDQUFDLDRDQUE0QyxDQUFDO0dBQ3BELDhDQUE4QyxDQXFIMUQ7OzRGQXJIWSw4Q0FBOEM7a0JBRjFELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVNb3ZlTm9kZXNEcmFnTW9kZWxGcm9tU2VsZWN0aW9uUmVxdWVzdCB9IGZyb20gJy4vY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5yZXF1ZXN0JztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgRk1lZGlhdG9yLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEZEcmFnZ2FibGVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL2YtZHJhZ2dhYmxlLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBGTm9kZU1vdmVEcmFnSGFuZGxlciB9IGZyb20gJy4uL2Ytbm9kZS1tb3ZlLmRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBGTm9kZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9mLW5vZGUnO1xuaW1wb3J0IHsgQ2FsY3VsYXRlTm9kZU1vdmVMaW1pdHNSZXF1ZXN0IH0gZnJvbSAnLi9kb21haW4vY2FsY3VsYXRlLW5vZGUtbW92ZS1saW1pdHMnO1xuaW1wb3J0IHsgUHV0T3V0cHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QgfSBmcm9tICcuL2RvbWFpbi9wdXQtb3V0cHV0LWNvbm5lY3Rpb24taGFuZGxlcnMtdG8tYXJyYXknO1xuaW1wb3J0IHtcbiAgUHV0SW5wdXRDb25uZWN0aW9uSGFuZGxlcnNUb0FycmF5UmVxdWVzdFxufSBmcm9tICcuL2RvbWFpbi9wdXQtaW5wdXQtY29ubmVjdGlvbi1oYW5kbGVycy10by1hcnJheSc7XG5pbXBvcnQgeyBJc0FycmF5SGFzUGFyZW50Tm9kZVJlcXVlc3QgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHtcbiAgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0LFxuICBHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0LFxuICBHZXRQYXJlbnROb2Rlc1JlcXVlc3Rcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IGZsYXRNYXAgfSBmcm9tICdAZm9ibGV4L3V0aWxzJztcbmltcG9ydCB7IENhbGN1bGF0ZUNvbW1vbk5vZGVNb3ZlTGltaXRzUmVxdWVzdCB9IGZyb20gJy4vZG9tYWluL2NhbGN1bGF0ZS1jb21tb24tbm9kZS1tb3ZlLWxpbWl0cyc7XG5pbXBvcnQgeyBJTWluTWF4UG9pbnQsIElSZWN0LCBSZWN0RXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlciB9IGZyb20gJy4uL2Nvbm5lY3Rpb24tZHJhZy1oYW5kbGVycyc7XG5pbXBvcnQgeyBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi9mLXN1bW1hcnktbm9kZS1tb3ZlLmRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBJTm9kZU1vdmVMaW1pdHNBbmRQb3NpdGlvbiB9IGZyb20gJy4vaS1ub2RlLW1vdmUtbGltaXRzLWFuZC1wb3NpdGlvbic7XG5pbXBvcnQgeyBJTm9kZU1vdmVMaW1pdHMgfSBmcm9tICcuL2ktbm9kZS1tb3ZlLWxpbWl0cyc7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QpXG5leHBvcnQgY2xhc3MgQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvbkV4ZWN1dGlvblxuICBpbXBsZW1lbnRzIElFeGVjdXRpb248Q3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QsIEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcj4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZNZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mQ29tcG9uZW50c1N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mRHJhZ2dhYmxlRGF0YUNvbnRleHQgPSBpbmplY3QoRkRyYWdnYWJsZURhdGFDb250ZXh0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHB1YmxpYyBoYW5kbGUocmVxdWVzdDogQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QpOiBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIge1xuICAgIGNvbnN0IGZEcmFnZ2VkTm9kZXMgPSB0aGlzLl9nZXREcmFnZ2VkTm9kZXMocmVxdWVzdC5ub2RlV2l0aERpc2FibGVkU2VsZWN0aW9uKTtcblxuICAgIGNvbnN0IGZOb2Rlc1RvRHJhZyA9IHRoaXMuX2dldE5vZGVzVG9EcmFnV2l0aENvbW1vbkxpbWl0cyhmRHJhZ2dlZE5vZGVzKTtcblxuICAgIGNvbnN0IGZEcmFnSGFuZGxlcnMgPSB0aGlzLl9tYXBUb05vZGVEcmFnSGFuZGxlcnMoZk5vZGVzVG9EcmFnKTtcblxuICAgIHRoaXMuX3NldENvbm5lY3Rpb25zSGFuZGxlcnNUb05vZGVzKGZEcmFnSGFuZGxlcnMsIHRoaXMuX2dldEFsbE91dHB1dElkcyhmTm9kZXNUb0RyYWcpLCB0aGlzLl9nZXRBbGxJbnB1dElkcyhmTm9kZXNUb0RyYWcpKTtcblxuICAgIGNvbnN0IGNvbW1vbkxpbWl0cyA9IHRoaXMuX2NhbGN1bGF0ZUNvbW1vbkxpbWl0cyhcbiAgICAgIHRoaXMuX2dldE5vZGVzTW92ZUxpbWl0cyhmTm9kZXNUb0RyYWcsIFtdLCBmRHJhZ2dlZE5vZGVzKVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcihcbiAgICAgIHRoaXMuX2luamVjdG9yLFxuICAgICAgY29tbW9uTGltaXRzLCBmRHJhZ0hhbmRsZXJzLCB0aGlzLl9nZXREcmFnZ2VkTm9kZXNCb3VuZGluZ1JlY3QoZk5vZGVzVG9EcmFnKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREcmFnZ2VkTm9kZXMobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbj86IEZOb2RlQmFzZSk6IEZOb2RlQmFzZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9nZXROb2Rlc0Zyb21TZWxlY3Rpb24oKTtcbiAgICBpZiAobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbikge1xuICAgICAgcmVzdWx0LnB1c2gobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb2Rlc0Zyb21TZWxlY3Rpb24oKTogRk5vZGVCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQuc2VsZWN0ZWRJdGVtc1xuICAgICAgLm1hcCgoeCkgPT4gdGhpcy5fZmluZE5vZGUoeC5ob3N0RWxlbWVudCkpXG4gICAgICAuZmlsdGVyKCh4KTogeCBpcyBGTm9kZUJhc2UgPT4gISF4KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmROb2RlKGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQpOiBGTm9kZUJhc2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZOb2Rlc1xuICAgICAgLmZpbmQobiA9PiBuLmlzQ29udGFpbnMoaG9zdEVsZW1lbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVzVG9EcmFnV2l0aENvbW1vbkxpbWl0cyhmRHJhZ2dlZE5vZGVzOiBGTm9kZUJhc2VbXSk6IEZOb2RlQmFzZVtdIHtcbiAgICByZXR1cm4gZkRyYWdnZWROb2Rlcy5yZWR1Y2UoKHJlc3VsdDogRk5vZGVCYXNlW10sIHg6IEZOb2RlQmFzZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goeCk7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdCh0aGlzLl9nZXRDaGlsZHJlbk5vZGVzKHguZklkKSk7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZXNNb3ZlTGltaXRzKGZOb2RlczogRk5vZGVCYXNlW10sIGZQYXJlbnROb2RlczogRk5vZGVCYXNlW10sIGZEcmFnZ2VkTm9kZXM6IEZOb2RlQmFzZVtdKTogSU5vZGVNb3ZlTGltaXRzQW5kUG9zaXRpb25bXSB7XG4gICAgcmV0dXJuIGZEcmFnZ2VkTm9kZXMubWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCBmUGFyZW50Tm9kZXMgPSB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxGTm9kZUJhc2VbXT4obmV3IEdldFBhcmVudE5vZGVzUmVxdWVzdCh4KSk7XG4gICAgICByZXR1cm4geyBwb3NpdGlvbjogeC5wb3NpdGlvbiwgLi4udGhpcy5fZ2V0Tm9kZU1vdmVMaW1pdHMoeCwgZlBhcmVudE5vZGVzLCBmRHJhZ2dlZE5vZGVzKSB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZU1vdmVMaW1pdHMoZk5vZGU6IEZOb2RlQmFzZSwgZlBhcmVudE5vZGVzOiBGTm9kZUJhc2VbXSwgZkRyYWdnZWROb2RlczogRk5vZGVCYXNlW10pOiBJTm9kZU1vdmVMaW1pdHMge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJTWluTWF4UG9pbnQ+KFxuICAgICAgbmV3IENhbGN1bGF0ZU5vZGVNb3ZlTGltaXRzUmVxdWVzdChmTm9kZSwgdGhpcy5faXNQYXJlbnROb2RlSW5BcnJheShmUGFyZW50Tm9kZXMsIGZEcmFnZ2VkTm9kZXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9pc1BhcmVudE5vZGVJbkFycmF5KGZQYXJlbnROb2RlczogRk5vZGVCYXNlW10sIGZEcmFnZ2VkTm9kZXM6IEZOb2RlQmFzZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPGJvb2xlYW4+KG5ldyBJc0FycmF5SGFzUGFyZW50Tm9kZVJlcXVlc3QoZlBhcmVudE5vZGVzLCBmRHJhZ2dlZE5vZGVzKSlcbiAgfVxuXG4gIHByaXZhdGUgX2dldENoaWxkcmVuTm9kZXMoZklkOiBzdHJpbmcpOiBGTm9kZUJhc2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPEZOb2RlQmFzZVtdPihuZXcgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0KGZJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQ29tbW9uTGltaXRzKGxpbWl0czogSU5vZGVNb3ZlTGltaXRzQW5kUG9zaXRpb25bXSk6IElNaW5NYXhQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPElNaW5NYXhQb2ludD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlQ29tbW9uTm9kZU1vdmVMaW1pdHNSZXF1ZXN0KGxpbWl0cylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWxsT3V0cHV0SWRzKGZOb2RlczogRk5vZGVCYXNlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAoZk5vZGVzLCAoZk5vZGUpID0+IHRoaXMuX2dldE5vZGVPdXRwdXRJZHMoZk5vZGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVPdXRwdXRJZHMoZk5vZGU6IEZOb2RlQmFzZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mT3V0cHV0cy5maWx0ZXIoKHgpID0+IGZOb2RlLmZJZCA9PT0geC5mTm9kZUlkKVxuICAgICAgLm1hcCgoeCkgPT4geC5mSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWxsSW5wdXRJZHMoZk5vZGVzOiBGTm9kZUJhc2VbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZmxhdE1hcChmTm9kZXMsIChmTm9kZSkgPT4gdGhpcy5fZ2V0Tm9kZUlucHV0SWRzKGZOb2RlKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb2RlSW5wdXRJZHMoZk5vZGU6IEZOb2RlQmFzZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mSW5wdXRzLmZpbHRlcigoeCkgPT4gZk5vZGUuZklkID09PSB4LmZOb2RlSWQpXG4gICAgICAubWFwKCh4KSA9PiB4LmZJZCk7XG4gIH1cblxuICBwcml2YXRlIF9tYXBUb05vZGVEcmFnSGFuZGxlcnMoaXRlbXM6IEZOb2RlQmFzZVtdKTogRk5vZGVNb3ZlRHJhZ0hhbmRsZXJbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoeCkgPT4gbmV3IEZOb2RlTW92ZURyYWdIYW5kbGVyKHgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldENvbm5lY3Rpb25zSGFuZGxlcnNUb05vZGVzKFxuICAgIGhhbmRsZXJzOiBGTm9kZU1vdmVEcmFnSGFuZGxlcltdLCBvdXRwdXRJZHM6IHN0cmluZ1tdLCBpbnB1dElkczogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZkNvbm5lY3Rpb25IYW5kbGVyczogQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlcltdID0gW107XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoZk5vZGVIYW5kbGVyKSA9PiB7XG4gICAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShuZXcgUHV0T3V0cHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QoZk5vZGVIYW5kbGVyLCBpbnB1dElkcywgZkNvbm5lY3Rpb25IYW5kbGVycykpO1xuICAgICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IFB1dElucHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QoZk5vZGVIYW5kbGVyLCBvdXRwdXRJZHMsIGZDb25uZWN0aW9uSGFuZGxlcnMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERyYWdnZWROb2Rlc0JvdW5kaW5nUmVjdChmTm9kZXM6IEZOb2RlQmFzZVtdKTogSVJlY3Qge1xuICAgIHJldHVybiBSZWN0RXh0ZW5zaW9ucy51bmlvbihmTm9kZXMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGU8SVJlY3Q+KG5ldyBHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0KHguaG9zdEVsZW1lbnQpKTtcbiAgICB9KSkgfHwgUmVjdEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSgpO1xuICB9XG59XG4iXX0=