UNPKG

@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
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZHJhZ2dhYmxlL2Ytbm9kZS1tb3ZlL2NyZWF0ZS1tb3ZlLW5vZGVzLWRyYWctbW9kZWwtZnJvbS1zZWxlY3Rpb24vY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0csT0FBTyxFQUNMLHdDQUF3QyxFQUN6QyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsb0NBQW9DLEVBQ3BDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDdEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBdUIsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQU0zRSxJQUFNLDhDQUE4QyxHQUFwRCxNQUFNLDhDQUE4QztJQUd4QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdkMsTUFBTSxDQUFDLE9BQXFEO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUUvRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUU1SCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUMxRCxDQUFDO1FBRUYsT0FBTyxJQUFJLDJCQUEyQixDQUNwQyxJQUFJLENBQUMsU0FBUyxFQUNkLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLHlCQUFxQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWE7YUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxXQUFxQztRQUNyRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sK0JBQStCLENBQUMsYUFBMEI7UUFDaEUsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBbUIsRUFBRSxDQUFZLEVBQUUsRUFBRTtZQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBbUIsRUFBRSxZQUF5QixFQUFFLGFBQTBCO1FBQ3BHLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFjLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzlGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWdCLEVBQUUsWUFBeUIsRUFBRSxhQUEwQjtRQUNoRyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUM1QixJQUFJLDhCQUE4QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQ2xHLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsWUFBeUIsRUFBRSxhQUEwQjtRQUNoRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFVLElBQUksMkJBQTJCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDdkcsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQVc7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBYyxJQUFJLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQW9DO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQzVCLElBQUksb0NBQW9DLENBQUMsTUFBTSxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBbUI7UUFDMUMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBZ0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQzFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBbUI7UUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBZ0I7UUFDdkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQ3pFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFrQjtRQUMvQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sOEJBQThCLENBQ3BDLFFBQWdDLEVBQUUsU0FBbUIsRUFBRSxRQUFrQjtRQUV6RSxNQUFNLG1CQUFtQixHQUFnQyxFQUFFLENBQUM7UUFDNUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUkseUNBQXlDLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDcEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSx3Q0FBd0MsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxNQUFtQjtRQUN0RCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQVEsSUFBSSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO3dHQXBIVSw4Q0FBOEM7NEdBQTlDLDhDQUE4Qzs7QUFBOUMsOENBQThDO0lBRDFELGtCQUFrQixDQUFDLDRDQUE0QyxDQUFDO0dBQ3BELDhDQUE4QyxDQXFIMUQ7OzRGQXJIWSw4Q0FBOEM7a0JBRjFELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVNb3ZlTm9kZXNEcmFnTW9kZWxGcm9tU2VsZWN0aW9uUmVxdWVzdCB9IGZyb20gJy4vY3JlYXRlLW1vdmUtbm9kZXMtZHJhZy1tb2RlbC1mcm9tLXNlbGVjdGlvbi5yZXF1ZXN0JztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgRk1lZGlhdG9yLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEZEcmFnZ2FibGVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL2YtZHJhZ2dhYmxlLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBGTm9kZU1vdmVEcmFnSGFuZGxlciB9IGZyb20gJy4uL2Ytbm9kZS1tb3ZlLmRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBGTm9kZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9mLW5vZGUnO1xuaW1wb3J0IHsgQ2FsY3VsYXRlTm9kZU1vdmVMaW1pdHNSZXF1ZXN0IH0gZnJvbSAnLi9kb21haW4vY2FsY3VsYXRlLW5vZGUtbW92ZS1saW1pdHMnO1xuaW1wb3J0IHsgUHV0T3V0cHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QgfSBmcm9tICcuL2RvbWFpbi9wdXQtb3V0cHV0LWNvbm5lY3Rpb24taGFuZGxlcnMtdG8tYXJyYXknO1xuaW1wb3J0IHtcbiAgUHV0SW5wdXRDb25uZWN0aW9uSGFuZGxlcnNUb0FycmF5UmVxdWVzdFxufSBmcm9tICcuL2RvbWFpbi9wdXQtaW5wdXQtY29ubmVjdGlvbi1oYW5kbGVycy10by1hcnJheSc7XG5pbXBvcnQgeyBJc0FycmF5SGFzUGFyZW50Tm9kZVJlcXVlc3QgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHtcbiAgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0LFxuICBHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0LFxuICBHZXRQYXJlbnROb2Rlc1JlcXVlc3Rcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IGZsYXRNYXAgfSBmcm9tICdAZm9ibGV4L3V0aWxzJztcbmltcG9ydCB7IENhbGN1bGF0ZUNvbW1vbk5vZGVNb3ZlTGltaXRzUmVxdWVzdCB9IGZyb20gJy4vZG9tYWluL2NhbGN1bGF0ZS1jb21tb24tbm9kZS1tb3ZlLWxpbWl0cyc7XG5pbXBvcnQgeyBJTWluTWF4UG9pbnQsIElSZWN0LCBSZWN0RXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlciB9IGZyb20gJy4uL2Nvbm5lY3Rpb24tZHJhZy1oYW5kbGVycyc7XG5pbXBvcnQgeyBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi9mLXN1bW1hcnktbm9kZS1tb3ZlLmRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBJTm9kZU1vdmVMaW1pdHNBbmRQb3NpdGlvbiB9IGZyb20gJy4vaS1ub2RlLW1vdmUtbGltaXRzLWFuZC1wb3NpdGlvbic7XG5pbXBvcnQgeyBJTm9kZU1vdmVMaW1pdHMgfSBmcm9tICcuL2ktbm9kZS1tb3ZlLWxpbWl0cyc7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QpXG5leHBvcnQgY2xhc3MgQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvbkV4ZWN1dGlvblxuICBpbXBsZW1lbnRzIElFeGVjdXRpb248Q3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QsIEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcj4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZNZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mQ29tcG9uZW50c1N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mRHJhZ2dhYmxlRGF0YUNvbnRleHQgPSBpbmplY3QoRkRyYWdnYWJsZURhdGFDb250ZXh0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHB1YmxpYyBoYW5kbGUocmVxdWVzdDogQ3JlYXRlTW92ZU5vZGVzRHJhZ01vZGVsRnJvbVNlbGVjdGlvblJlcXVlc3QpOiBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIge1xuICAgIGNvbnN0IGZEcmFnZ2VkTm9kZXMgPSB0aGlzLl9nZXREcmFnZ2VkTm9kZXMocmVxdWVzdC5ub2RlV2l0aERpc2FibGVkU2VsZWN0aW9uKTtcblxuICAgIGNvbnN0IGZOb2Rlc1RvRHJhZyA9IHRoaXMuX2dldE5vZGVzVG9EcmFnV2l0aENvbW1vbkxpbWl0cyhmRHJhZ2dlZE5vZGVzKTtcblxuICAgIGNvbnN0IGZEcmFnSGFuZGxlcnMgPSB0aGlzLl9tYXBUb05vZGVEcmFnSGFuZGxlcnMoZk5vZGVzVG9EcmFnKTtcblxuICAgIHRoaXMuX3NldENvbm5lY3Rpb25zSGFuZGxlcnNUb05vZGVzKGZEcmFnSGFuZGxlcnMsIHRoaXMuX2dldEFsbE91dHB1dElkcyhmTm9kZXNUb0RyYWcpLCB0aGlzLl9nZXRBbGxJbnB1dElkcyhmTm9kZXNUb0RyYWcpKTtcblxuICAgIGNvbnN0IGNvbW1vbkxpbWl0cyA9IHRoaXMuX2NhbGN1bGF0ZUNvbW1vbkxpbWl0cyhcbiAgICAgIHRoaXMuX2dldE5vZGVzTW92ZUxpbWl0cyhmTm9kZXNUb0RyYWcsIFtdLCBmRHJhZ2dlZE5vZGVzKVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcihcbiAgICAgIHRoaXMuX2luamVjdG9yLFxuICAgICAgY29tbW9uTGltaXRzLCBmRHJhZ0hhbmRsZXJzLCB0aGlzLl9nZXREcmFnZ2VkTm9kZXNCb3VuZGluZ1JlY3QoZk5vZGVzVG9EcmFnKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREcmFnZ2VkTm9kZXMobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbj86IEZOb2RlQmFzZSk6IEZOb2RlQmFzZVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9nZXROb2Rlc0Zyb21TZWxlY3Rpb24oKTtcbiAgICBpZiAobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbikge1xuICAgICAgcmVzdWx0LnB1c2gobm9kZVdpdGhEaXNhYmxlZFNlbGVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb2Rlc0Zyb21TZWxlY3Rpb24oKTogRk5vZGVCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQuc2VsZWN0ZWRJdGVtc1xuICAgICAgLm1hcCgoeCkgPT4gdGhpcy5fZmluZE5vZGUoeC5ob3N0RWxlbWVudCkpXG4gICAgICAuZmlsdGVyKCh4KTogeCBpcyBGTm9kZUJhc2UgPT4gISF4KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmROb2RlKGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQpOiBGTm9kZUJhc2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZOb2Rlc1xuICAgICAgLmZpbmQobiA9PiBuLmlzQ29udGFpbnMoaG9zdEVsZW1lbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVzVG9EcmFnV2l0aENvbW1vbkxpbWl0cyhmRHJhZ2dlZE5vZGVzOiBGTm9kZUJhc2VbXSk6IEZOb2RlQmFzZVtdIHtcbiAgICByZXR1cm4gZkRyYWdnZWROb2Rlcy5yZWR1Y2UoKHJlc3VsdDogRk5vZGVCYXNlW10sIHg6IEZOb2RlQmFzZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goeCk7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdCh0aGlzLl9nZXRDaGlsZHJlbk5vZGVzKHguZklkKSk7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZXNNb3ZlTGltaXRzKGZOb2RlczogRk5vZGVCYXNlW10sIGZQYXJlbnROb2RlczogRk5vZGVCYXNlW10sIGZEcmFnZ2VkTm9kZXM6IEZOb2RlQmFzZVtdKTogSU5vZGVNb3ZlTGltaXRzQW5kUG9zaXRpb25bXSB7XG4gICAgcmV0dXJuIGZEcmFnZ2VkTm9kZXMubWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCBmUGFyZW50Tm9kZXMgPSB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxGTm9kZUJhc2VbXT4obmV3IEdldFBhcmVudE5vZGVzUmVxdWVzdCh4KSk7XG4gICAgICByZXR1cm4geyBwb3NpdGlvbjogeC5wb3NpdGlvbiwgLi4udGhpcy5fZ2V0Tm9kZU1vdmVMaW1pdHMoeCwgZlBhcmVudE5vZGVzLCBmRHJhZ2dlZE5vZGVzKSB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZU1vdmVMaW1pdHMoZk5vZGU6IEZOb2RlQmFzZSwgZlBhcmVudE5vZGVzOiBGTm9kZUJhc2VbXSwgZkRyYWdnZWROb2RlczogRk5vZGVCYXNlW10pOiBJTm9kZU1vdmVMaW1pdHMge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJTWluTWF4UG9pbnQ+KFxuICAgICAgbmV3IENhbGN1bGF0ZU5vZGVNb3ZlTGltaXRzUmVxdWVzdChmTm9kZSwgdGhpcy5faXNQYXJlbnROb2RlSW5BcnJheShmUGFyZW50Tm9kZXMsIGZEcmFnZ2VkTm9kZXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9pc1BhcmVudE5vZGVJbkFycmF5KGZQYXJlbnROb2RlczogRk5vZGVCYXNlW10sIGZEcmFnZ2VkTm9kZXM6IEZOb2RlQmFzZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPGJvb2xlYW4+KG5ldyBJc0FycmF5SGFzUGFyZW50Tm9kZVJlcXVlc3QoZlBhcmVudE5vZGVzLCBmRHJhZ2dlZE5vZGVzKSlcbiAgfVxuXG4gIHByaXZhdGUgX2dldENoaWxkcmVuTm9kZXMoZklkOiBzdHJpbmcpOiBGTm9kZUJhc2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPEZOb2RlQmFzZVtdPihuZXcgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0KGZJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQ29tbW9uTGltaXRzKGxpbWl0czogSU5vZGVNb3ZlTGltaXRzQW5kUG9zaXRpb25bXSk6IElNaW5NYXhQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPElNaW5NYXhQb2ludD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlQ29tbW9uTm9kZU1vdmVMaW1pdHNSZXF1ZXN0KGxpbWl0cylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWxsT3V0cHV0SWRzKGZOb2RlczogRk5vZGVCYXNlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAoZk5vZGVzLCAoZk5vZGUpID0+IHRoaXMuX2dldE5vZGVPdXRwdXRJZHMoZk5vZGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVPdXRwdXRJZHMoZk5vZGU6IEZOb2RlQmFzZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mT3V0cHV0cy5maWx0ZXIoKHgpID0+IGZOb2RlLmZJZCA9PT0geC5mTm9kZUlkKVxuICAgICAgLm1hcCgoeCkgPT4geC5mSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWxsSW5wdXRJZHMoZk5vZGVzOiBGTm9kZUJhc2VbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZmxhdE1hcChmTm9kZXMsIChmTm9kZSkgPT4gdGhpcy5fZ2V0Tm9kZUlucHV0SWRzKGZOb2RlKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb2RlSW5wdXRJZHMoZk5vZGU6IEZOb2RlQmFzZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mSW5wdXRzLmZpbHRlcigoeCkgPT4gZk5vZGUuZklkID09PSB4LmZOb2RlSWQpXG4gICAgICAubWFwKCh4KSA9PiB4LmZJZCk7XG4gIH1cblxuICBwcml2YXRlIF9tYXBUb05vZGVEcmFnSGFuZGxlcnMoaXRlbXM6IEZOb2RlQmFzZVtdKTogRk5vZGVNb3ZlRHJhZ0hhbmRsZXJbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoeCkgPT4gbmV3IEZOb2RlTW92ZURyYWdIYW5kbGVyKHgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldENvbm5lY3Rpb25zSGFuZGxlcnNUb05vZGVzKFxuICAgIGhhbmRsZXJzOiBGTm9kZU1vdmVEcmFnSGFuZGxlcltdLCBvdXRwdXRJZHM6IHN0cmluZ1tdLCBpbnB1dElkczogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZkNvbm5lY3Rpb25IYW5kbGVyczogQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlcltdID0gW107XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoZk5vZGVIYW5kbGVyKSA9PiB7XG4gICAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShuZXcgUHV0T3V0cHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QoZk5vZGVIYW5kbGVyLCBpbnB1dElkcywgZkNvbm5lY3Rpb25IYW5kbGVycykpO1xuICAgICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IFB1dElucHV0Q29ubmVjdGlvbkhhbmRsZXJzVG9BcnJheVJlcXVlc3QoZk5vZGVIYW5kbGVyLCBvdXRwdXRJZHMsIGZDb25uZWN0aW9uSGFuZGxlcnMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERyYWdnZWROb2Rlc0JvdW5kaW5nUmVjdChmTm9kZXM6IEZOb2RlQmFzZVtdKTogSVJlY3Qge1xuICAgIHJldHVybiBSZWN0RXh0ZW5zaW9ucy51bmlvbihmTm9kZXMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGU8SVJlY3Q+KG5ldyBHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0KHguaG9zdEVsZW1lbnQpKTtcbiAgICB9KSkgfHwgUmVjdEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSgpO1xuICB9XG59XG4iXX0=