verben-workflow-ui 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/designer/models/types.mjs +1 -1
- package/esm2022/lib/components/designer/services/wf-mapper.service.mjs +3 -3
- package/esm2022/lib/components/workflow-designer/conditions-popup/conditions-popup.component.mjs +76 -0
- package/esm2022/lib/components/workflow-designer/decision-popup/decision-popup.component.mjs +65 -0
- package/esm2022/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +245 -17
- package/esm2022/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.mjs +26 -14
- package/esm2022/lib/components/workflow-designer/services/connection.service.mjs +220 -0
- package/esm2022/lib/components/workflow-designer/services/node-management.service.mjs +288 -0
- package/esm2022/lib/components/workflow-designer/services/popup.service.mjs +235 -0
- package/esm2022/lib/components/workflow-designer/services/swimlane.service.mjs +145 -0
- package/esm2022/lib/components/workflow-designer/services/transformer.service.mjs +260 -0
- package/esm2022/lib/components/workflow-designer/stage-dialog/stage-dialog.component.mjs +67 -11
- package/esm2022/lib/components/workflow-designer/stage-node/stage-node.component.mjs +9 -18
- package/esm2022/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +30 -24
- package/esm2022/lib/components/workflow-designer/workflow-data.service.mjs +2 -2
- package/esm2022/lib/components/workflow-designer/workflow-designer.component.mjs +138 -96
- package/esm2022/lib/components/workflow-designer/workflow-designer.module.mjs +27 -3
- package/esm2022/lib/components/workflow-designer/workflow-designer.state.mjs +243 -205
- package/esm2022/lib/components/workflow-designer/workflow-designer.types.mjs +1 -1
- package/esm2022/lib/models/SwimLane.mjs +1 -1
- package/esm2022/lib/models/Workflow.mjs +1 -1
- package/esm2022/lib/models/WorkflowStage.mjs +1 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-workflow-ui.mjs +2644 -1005
- package/fesm2022/verben-workflow-ui.mjs.map +1 -1
- package/lib/components/designer/models/types.d.ts +1 -1
- package/lib/components/workflow-designer/conditions-popup/conditions-popup.component.d.ts +34 -0
- package/lib/components/workflow-designer/decision-popup/decision-popup.component.d.ts +26 -0
- package/lib/components/workflow-designer/designer-canvas/designer-canvas.component.d.ts +35 -1
- package/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.d.ts +14 -3
- package/lib/components/workflow-designer/services/connection.service.d.ts +85 -0
- package/lib/components/workflow-designer/services/node-management.service.d.ts +52 -0
- package/lib/components/workflow-designer/services/popup.service.d.ts +139 -0
- package/lib/components/workflow-designer/services/swimlane.service.d.ts +51 -0
- package/lib/components/workflow-designer/services/transformer.service.d.ts +36 -0
- package/lib/components/workflow-designer/stage-dialog/stage-dialog.component.d.ts +17 -2
- package/lib/components/workflow-designer/stage-node/stage-node.component.d.ts +2 -2
- package/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.d.ts +7 -1
- package/lib/components/workflow-designer/workflow-designer.component.d.ts +2 -1
- package/lib/components/workflow-designer/workflow-designer.module.d.ts +6 -4
- package/lib/components/workflow-designer/workflow-designer.state.d.ts +17 -1
- package/lib/components/workflow-designer/workflow-designer.types.d.ts +2 -0
- package/lib/models/SwimLane.d.ts +1 -0
- package/lib/models/Workflow.d.ts +1 -0
- package/lib/models/WorkflowStage.d.ts +1 -1
- package/package.json +1 -1
- package/styles/styles.css +23 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../workflow-designer.state";
|
|
4
|
+
export class SwimlaneService {
|
|
5
|
+
state;
|
|
6
|
+
swimlaneHeight = 263;
|
|
7
|
+
constructor(state) {
|
|
8
|
+
this.state = state;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Add a new swimlane
|
|
12
|
+
*/
|
|
13
|
+
addSwimlane(name, tags) {
|
|
14
|
+
const newSwimlane = {
|
|
15
|
+
order: this.state.swimlanes.length,
|
|
16
|
+
label: name,
|
|
17
|
+
tags,
|
|
18
|
+
nodes: [],
|
|
19
|
+
};
|
|
20
|
+
this.state.swimlanes.push(newSwimlane);
|
|
21
|
+
return newSwimlane;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update an existing swimlane
|
|
25
|
+
*/
|
|
26
|
+
updateSwimlane(index, name, tags) {
|
|
27
|
+
if (index < 0 || index >= this.state.swimlanes.length) {
|
|
28
|
+
console.error('Invalid swimlane index:', index);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
this.state.swimlanes[index] = {
|
|
32
|
+
...this.state.swimlanes[index],
|
|
33
|
+
label: name,
|
|
34
|
+
tags: tags,
|
|
35
|
+
};
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Reorder swimlanes (move a swimlane up or down in the list)
|
|
40
|
+
*/
|
|
41
|
+
reorderSwimlane(fromIndex, toIndex) {
|
|
42
|
+
if (fromIndex < 0 ||
|
|
43
|
+
fromIndex >= this.state.swimlanes.length ||
|
|
44
|
+
toIndex < 0 ||
|
|
45
|
+
toIndex >= this.state.swimlanes.length) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// Remove the swimlane from its current position
|
|
49
|
+
const [swimlane] = this.state.swimlanes.splice(fromIndex, 1);
|
|
50
|
+
// Insert it at the new position
|
|
51
|
+
this.state.swimlanes.splice(toIndex, 0, swimlane);
|
|
52
|
+
// Update order properties for all swimlanes
|
|
53
|
+
this.state.swimlanes.forEach((lane, idx) => {
|
|
54
|
+
lane.order = idx;
|
|
55
|
+
});
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Delete a swimlane by index
|
|
60
|
+
*/
|
|
61
|
+
deleteSwimlane(index) {
|
|
62
|
+
if (index < 0 || index >= this.state.swimlanes.length) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Check if the swimlane has nodes
|
|
66
|
+
if (this.state.swimlanes[index].nodes?.length) {
|
|
67
|
+
console.error('Cannot delete swimlane with nodes');
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
// Remove the swimlane
|
|
71
|
+
this.state.swimlanes.splice(index, 1);
|
|
72
|
+
// Update order properties for all swimlanes
|
|
73
|
+
this.state.swimlanes.forEach((lane, idx) => {
|
|
74
|
+
lane.order = idx;
|
|
75
|
+
});
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get all swimlanes
|
|
80
|
+
*/
|
|
81
|
+
getSwimlanes() {
|
|
82
|
+
return this.state.swimlanes;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get swimlane by index
|
|
86
|
+
*/
|
|
87
|
+
getSwimlane(index) {
|
|
88
|
+
if (index < 0 || index >= this.state.swimlanes.length) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return this.state.swimlanes[index];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Calculate total canvas height needed for all swimlanes
|
|
95
|
+
*/
|
|
96
|
+
calculateCanvasHeight(minHeight = 2000) {
|
|
97
|
+
const requiredHeight = (this.state.swimlanes.length + 1) * this.swimlaneHeight;
|
|
98
|
+
return Math.max(minHeight, requiredHeight);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a Y position is within any swimlane
|
|
102
|
+
*/
|
|
103
|
+
isPositionInsideSwimlane(y) {
|
|
104
|
+
// Check if y position is within any swimlane
|
|
105
|
+
const swimlaneCount = this.state.swimlanes.length;
|
|
106
|
+
if (swimlaneCount === 0)
|
|
107
|
+
return false;
|
|
108
|
+
// Each swimlane has a height of 263px
|
|
109
|
+
const totalSwimlaneHeight = swimlaneCount * this.swimlaneHeight;
|
|
110
|
+
// Check if y is within the total height of all swimlanes
|
|
111
|
+
return y >= 0 && y < totalSwimlaneHeight;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Calculate swimlane index from Y position
|
|
115
|
+
*/
|
|
116
|
+
getSwimlaneIndexFromPosition(y) {
|
|
117
|
+
if (!this.isPositionInsideSwimlane(y))
|
|
118
|
+
return -1;
|
|
119
|
+
return Math.floor(y / this.swimlaneHeight);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Find swimlane index by Lane ID
|
|
123
|
+
*/
|
|
124
|
+
findSwimlaneIndexByLaneId(laneId) {
|
|
125
|
+
// In a real implementation, you would maintain a mapping between API lane IDs and UI swimlane indices
|
|
126
|
+
// For now we'll just return the index based on position
|
|
127
|
+
const parts = laneId.split('-');
|
|
128
|
+
if (parts.length > 1) {
|
|
129
|
+
const index = parseInt(parts[1]);
|
|
130
|
+
if (!isNaN(index) && index < this.state.swimlanes.length) {
|
|
131
|
+
return index;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return -1;
|
|
135
|
+
}
|
|
136
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwimlaneService, deps: [{ token: i1.WorkflowDesignerState }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
137
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwimlaneService, providedIn: 'root' });
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwimlaneService, decorators: [{
|
|
140
|
+
type: Injectable,
|
|
141
|
+
args: [{
|
|
142
|
+
providedIn: 'root',
|
|
143
|
+
}]
|
|
144
|
+
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }] });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpbWxhbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc2VydmljZXMvc3dpbWxhbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLGVBQWU7SUFHTjtJQUZYLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFFOUIsWUFBb0IsS0FBNEI7UUFBNUIsVUFBSyxHQUFMLEtBQUssQ0FBdUI7SUFBRyxDQUFDO0lBRXBEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFXO1FBQ25DLE1BQU0sV0FBVyxHQUFpQjtZQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUNsQyxLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUk7WUFDSixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsSUFBVztRQUNyRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFD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ZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3dpbWxhbmVJdGVtIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1RhZyc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTd2ltbGFuZVNlcnZpY2Uge1xuICByZWFkb25seSBzd2ltbGFuZUhlaWdodCA9IDI2MztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUpIHt9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzd2ltbGFuZVxuICAgKi9cbiAgYWRkU3dpbWxhbmUobmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSk6IFN3aW1sYW5lSXRlbSB7XG4gICAgY29uc3QgbmV3U3dpbWxhbmU6IFN3aW1sYW5lSXRlbSA9IHtcbiAgICAgIG9yZGVyOiB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgsXG4gICAgICBsYWJlbDogbmFtZSxcbiAgICAgIHRhZ3MsXG4gICAgICBub2RlczogW10sXG4gICAgfTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzLnB1c2gobmV3U3dpbWxhbmUpO1xuICAgIHJldHVybiBuZXdTd2ltbGFuZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gZXhpc3Rpbmcgc3dpbWxhbmVcbiAgICovXG4gIHVwZGF0ZVN3aW1sYW5lKGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZywgdGFnczogVGFnW10pOiBib29sZWFuIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzd2ltbGFuZSBpbmRleDonLCBpbmRleCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXNbaW5kZXhdID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZS5zd2ltbGFuZXNbaW5kZXhdLFxuICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICB0YWdzOiB0YWdzLFxuICAgIH07XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW9yZGVyIHN3aW1sYW5lcyAobW92ZSBhIHN3aW1sYW5lIHVwIG9yIGRvd24gaW4gdGhlIGxpc3QpXG4gICAqL1xuICByZW9yZGVyU3dpbWxhbmUoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIGZyb21JbmRleCA8IDAgfHxcbiAgICAgIGZyb21JbmRleCA+PSB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGggfHxcbiAgICAgIHRvSW5kZXggPCAwIHx8XG4gICAgICB0b0luZGV4ID49IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgc3dpbWxhbmUgZnJvbSBpdHMgY3VycmVudCBwb3NpdGlvblxuICAgIGNvbnN0IFtzd2ltbGFuZV0gPSB0aGlzLnN0YXRlLnN3aW1sYW5lcy5zcGxpY2UoZnJvbUluZGV4LCAxKTtcblxuICAgIC8vIEluc2VydCBpdCBhdCB0aGUgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXMuc3BsaWNlKHRvSW5kZXgsIDAsIHN3aW1sYW5lKTtcblxuICAgIC8vIFVwZGF0ZSBvcmRlciBwcm9wZXJ0aWVzIGZvciBhbGwgc3dpbWxhbmVzXG4gICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXMuZm9yRWFjaCgobGFuZSwgaWR4KSA9PiB7XG4gICAgICBsYW5lLm9yZGVyID0gaWR4O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgc3dpbWxhbmUgYnkgaW5kZXhcbiAgICovXG4gIGRlbGV0ZVN3aW1sYW5lKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBzd2ltbGFuZSBoYXMgbm9kZXNcbiAgICBpZiAodGhpcy5zdGF0ZS5zd2ltbGFuZXNbaW5kZXhdLm5vZGVzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBkZWxldGUgc3dpbWxhbmUgd2l0aCBub2RlcycpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgc3dpbWxhbmVcbiAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gVXBkYXRlIG9yZGVyIHByb3BlcnRpZXMgZm9yIGFsbCBzd2ltbGFuZXNcbiAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcy5mb3JFYWNoKChsYW5lLCBpZHgpID0+IHtcbiAgICAgIGxhbmUub3JkZXIgPSBpZHg7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHN3aW1sYW5lc1xuICAgKi9cbiAgZ2V0U3dpbWxhbmVzKCk6IFN3aW1sYW5lSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zd2ltbGFuZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN3aW1sYW5lIGJ5IGluZGV4XG4gICAqL1xuICBnZXRTd2ltbGFuZShpbmRleDogbnVtYmVyKTogU3dpbWxhbmVJdGVtIHwgbnVsbCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zd2ltbGFuZXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0b3RhbCBjYW52YXMgaGVpZ2h0IG5lZWRlZCBmb3IgYWxsIHN3aW1sYW5lc1xuICAgKi9cbiAgY2FsY3VsYXRlQ2FudmFzSGVpZ2h0KG1pbkhlaWdodDogbnVtYmVyID0gMjAwMCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVxdWlyZWRIZWlnaHQgPVxuICAgICAgKHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCArIDEpICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICByZXR1cm4gTWF0aC5tYXgobWluSGVpZ2h0LCByZXF1aXJlZEhlaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBZIHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICovXG4gIGlzUG9zaXRpb25JbnNpZGVTd2ltbGFuZSh5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB5IHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICBjb25zdCBzd2ltbGFuZUNvdW50ID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoO1xuICAgIGlmIChzd2ltbGFuZUNvdW50ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBFYWNoIHN3aW1sYW5lIGhhcyBhIGhlaWdodCBvZiAyNjNweFxuICAgIGNvbnN0IHRvdGFsU3dpbWxhbmVIZWlnaHQgPSBzd2ltbGFuZUNvdW50ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgIC8vIENoZWNrIGlmIHkgaXMgd2l0aGluIHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIHN3aW1sYW5lc1xuICAgIHJldHVybiB5ID49IDAgJiYgeSA8IHRvdGFsU3dpbWxhbmVIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHN3aW1sYW5lIGluZGV4IGZyb20gWSBwb3NpdGlvblxuICAgKi9cbiAgZ2V0U3dpbWxhbmVJbmRleEZyb21Qb3NpdGlvbih5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Bvc2l0aW9uSW5zaWRlU3dpbWxhbmUoeSkpIHJldHVybiAtMTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih5IC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBzd2ltbGFuZSBpbmRleCBieSBMYW5lIElEXG4gICAqL1xuICBmaW5kU3dpbWxhbmVJbmRleEJ5TGFuZUlkKGxhbmVJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHlvdSB3b3VsZCBtYWludGFpbiBhIG1hcHBpbmcgYmV0d2VlbiBBUEkgbGFuZSBJRHMgYW5kIFVJIHN3aW1sYW5lIGluZGljZXNcbiAgICAvLyBGb3Igbm93IHdlJ2xsIGp1c3QgcmV0dXJuIHRoZSBpbmRleCBiYXNlZCBvbiBwb3NpdGlvblxuICAgIGNvbnN0IHBhcnRzID0gbGFuZUlkLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQocGFydHNbMV0pO1xuICAgICAgaWYgKCFpc05hTihpbmRleCkgJiYgaW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ObjectState } from '../../../models/object-state';
|
|
3
|
+
import { Status } from '../../../models/status';
|
|
4
|
+
import { TaskAssignmentType } from '../../../models/TaskAssignmentType';
|
|
5
|
+
import { StageActorRule } from '../../../models/StageActorRule';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../workflow-designer.state";
|
|
8
|
+
import * as i2 from "./swimlane.service";
|
|
9
|
+
import * as i3 from "./node-management.service";
|
|
10
|
+
import * as i4 from "./connection.service";
|
|
11
|
+
export class TransformerService {
|
|
12
|
+
state;
|
|
13
|
+
swimlaneService;
|
|
14
|
+
nodeService;
|
|
15
|
+
connectionService;
|
|
16
|
+
// Map to track loaded objects
|
|
17
|
+
loadedObjectIds = {}; // Format: { id: code }
|
|
18
|
+
constructor(state, swimlaneService, nodeService, connectionService) {
|
|
19
|
+
this.state = state;
|
|
20
|
+
this.swimlaneService = swimlaneService;
|
|
21
|
+
this.nodeService = nodeService;
|
|
22
|
+
this.connectionService = connectionService;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Transform the UI model to a Workflow API model
|
|
26
|
+
*/
|
|
27
|
+
transformToWorkflowModel() {
|
|
28
|
+
// Create base workflow object
|
|
29
|
+
const workflow = {
|
|
30
|
+
// BaseModel properties
|
|
31
|
+
Id: this.wasLoadedFromApi(this.state.workflowId || '')
|
|
32
|
+
? this.state.workflowId || ''
|
|
33
|
+
: '',
|
|
34
|
+
Code: this.getCodeForObject(this.state.workflowId || ''),
|
|
35
|
+
TenantId: '',
|
|
36
|
+
id: this.wasLoadedFromApi(this.state.workflowId || '')
|
|
37
|
+
? this.state.workflowId || ''
|
|
38
|
+
: '',
|
|
39
|
+
ServiceName: '',
|
|
40
|
+
CreatedAt: new Date(),
|
|
41
|
+
UpdatedAt: new Date(),
|
|
42
|
+
DataState: this.wasLoadedFromApi(this.state.workflowId || '')
|
|
43
|
+
? ObjectState.Changed
|
|
44
|
+
: ObjectState.New,
|
|
45
|
+
// Workflow specific properties
|
|
46
|
+
Name: 'New Workflow', // Default name
|
|
47
|
+
Description: '', // Default description
|
|
48
|
+
StageEntryRule: '',
|
|
49
|
+
Form: this.state.workflowFormId || undefined,
|
|
50
|
+
AssignmentType: TaskAssignmentType.AutoRoute,
|
|
51
|
+
Operation: '',
|
|
52
|
+
Status: Status.Active,
|
|
53
|
+
Actions: [],
|
|
54
|
+
Lanes: [],
|
|
55
|
+
Stages: [],
|
|
56
|
+
};
|
|
57
|
+
// Transform swimlanes to SwimLane[]
|
|
58
|
+
workflow.Lanes = this.state.swimlanes.map((swimlane, index) => {
|
|
59
|
+
const laneId = `lane-${index}`;
|
|
60
|
+
return {
|
|
61
|
+
// BaseModel properties
|
|
62
|
+
Id: '',
|
|
63
|
+
Code: '',
|
|
64
|
+
TenantId: '',
|
|
65
|
+
id: laneId,
|
|
66
|
+
ServiceName: '',
|
|
67
|
+
CreatedAt: new Date(),
|
|
68
|
+
UpdatedAt: new Date(),
|
|
69
|
+
DataState: ObjectState.New,
|
|
70
|
+
// SwimLane specific properties
|
|
71
|
+
Workflow: workflow.Id,
|
|
72
|
+
Tags: swimlane.tags || [],
|
|
73
|
+
Position: swimlane.order,
|
|
74
|
+
Coordinates: { X: 0, Y: swimlane.order * 263 },
|
|
75
|
+
Size: { Width: 3000, Height: 263 },
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
// Transform nodes to WorkflowStage[]
|
|
79
|
+
const stages = [];
|
|
80
|
+
this.state.swimlanes.forEach((swimlane, swimlaneIndex) => {
|
|
81
|
+
swimlane.nodes?.forEach((node) => {
|
|
82
|
+
if (node.type === 'stage') {
|
|
83
|
+
// Create a stage from the node
|
|
84
|
+
const stage = {
|
|
85
|
+
// BaseModel properties
|
|
86
|
+
Id: node.id,
|
|
87
|
+
Code: this.getCodeForObject(node.id),
|
|
88
|
+
TenantId: '',
|
|
89
|
+
id: node.id,
|
|
90
|
+
ServiceName: '',
|
|
91
|
+
CreatedAt: new Date(),
|
|
92
|
+
UpdatedAt: new Date(),
|
|
93
|
+
DataState: this.wasLoadedFromApi(node.id)
|
|
94
|
+
? ObjectState.Changed
|
|
95
|
+
: ObjectState.New,
|
|
96
|
+
// WorkflowStage specific properties
|
|
97
|
+
Workflow: workflow.Id,
|
|
98
|
+
Name: node.stageData?.Name || 'Unnamed Stage',
|
|
99
|
+
Description: node.stageData?.Description || '',
|
|
100
|
+
Duration: node.stageData?.Duration || 0,
|
|
101
|
+
PassOnRule: node.stageData?.PassOnRule || '',
|
|
102
|
+
ActorRule: node.stageData?.ActorRule || StageActorRule.None,
|
|
103
|
+
MinNoOfActor: node.stageData?.MinNoOfActor || 0,
|
|
104
|
+
IsParallel: node.stageData?.IsParallel || false,
|
|
105
|
+
IsEntryPoint: node.isStartNode,
|
|
106
|
+
IsExitPoint: false, // Will be updated below
|
|
107
|
+
Tags: node.stageData?.Tags || [],
|
|
108
|
+
Form: node.stageData?.formId ? node.stageData.formId : '',
|
|
109
|
+
AllowMultiSubProcess: false,
|
|
110
|
+
AssignmentType: TaskAssignmentType.AutoRoute,
|
|
111
|
+
SubWorkFlow: '',
|
|
112
|
+
SwimLane: workflow.Lanes[swimlaneIndex].Id,
|
|
113
|
+
Coordinates: { X: node.x, Y: node.y },
|
|
114
|
+
IsSubProcess: false,
|
|
115
|
+
Key: node.stageData?.Key || undefined,
|
|
116
|
+
};
|
|
117
|
+
stages.push(stage);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
// Determine which stages are exit points (no outgoing connections)
|
|
122
|
+
stages.forEach((stage) => {
|
|
123
|
+
const hasOutgoingConnections = this.state.connections.some((conn) => conn.sourceNodeId === stage.Id);
|
|
124
|
+
if (!hasOutgoingConnections) {
|
|
125
|
+
stage.IsExitPoint = true;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// Transform connections to WorkflowAction[]
|
|
129
|
+
workflow.Actions = this.state.connections.map((conn) => {
|
|
130
|
+
const sourceNode = this.nodeService.findNodeById(conn.sourceNodeId)?.node;
|
|
131
|
+
const targetNode = this.nodeService.findNodeById(conn.targetNodeId)?.node;
|
|
132
|
+
return {
|
|
133
|
+
// BaseModel properties
|
|
134
|
+
Id: conn.id,
|
|
135
|
+
Code: this.getCodeForObject(conn.id),
|
|
136
|
+
TenantId: '',
|
|
137
|
+
id: conn.id,
|
|
138
|
+
ServiceName: '',
|
|
139
|
+
CreatedAt: new Date(),
|
|
140
|
+
UpdatedAt: new Date(),
|
|
141
|
+
DataState: this.wasLoadedFromApi(conn.id)
|
|
142
|
+
? ObjectState.Changed
|
|
143
|
+
: ObjectState.New,
|
|
144
|
+
// WorkflowAction specific properties
|
|
145
|
+
Workflow: workflow.Id,
|
|
146
|
+
Name: `Action from ${sourceNode?.stageData?.Name || 'Unknown'} to ${targetNode?.stageData?.Name || 'Unknown'}`,
|
|
147
|
+
FromStage: conn.sourceNodeId,
|
|
148
|
+
ToStage: conn.targetNodeId,
|
|
149
|
+
IsParallel: sourceNode?.stageData?.hasParallel || false,
|
|
150
|
+
PassOnRule: '', // Optional property
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
workflow.Stages = stages;
|
|
154
|
+
return workflow;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Parse API workflow model and convert to UI model
|
|
158
|
+
*/
|
|
159
|
+
parseWorkflowData(workflow) {
|
|
160
|
+
// Clear existing state
|
|
161
|
+
this.state.swimlanes = [];
|
|
162
|
+
this.state.connections = [];
|
|
163
|
+
// Set workflow form if exists
|
|
164
|
+
if (workflow.Form) {
|
|
165
|
+
this.state.setWorkflowForm(workflow.Form, workflow.FormName || 'Workflow Form');
|
|
166
|
+
}
|
|
167
|
+
// Store the workflow ID
|
|
168
|
+
this.state.setWorkflowId(workflow.Id);
|
|
169
|
+
// Register the workflow itself
|
|
170
|
+
this.registerLoadedObject(workflow.Id, workflow.Code);
|
|
171
|
+
// Process swimlanes first
|
|
172
|
+
if (workflow.Lanes && workflow.Lanes.length) {
|
|
173
|
+
workflow.Lanes.sort((a, b) => a.Position - b.Position).forEach((lane) => {
|
|
174
|
+
this.swimlaneService.addSwimlane(lane.Name || `Lane ${lane.Position}`, lane.Tags || []);
|
|
175
|
+
// Register loaded lane
|
|
176
|
+
this.registerLoadedObject(lane.Id, lane.Code);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// Process stages
|
|
180
|
+
if (workflow.Stages && workflow.Stages.length) {
|
|
181
|
+
workflow.Stages.forEach((stage) => {
|
|
182
|
+
// Find swimlane index
|
|
183
|
+
const swimlaneIndex = this.swimlaneService.findSwimlaneIndexByLaneId(stage.SwimLane);
|
|
184
|
+
if (swimlaneIndex !== -1) {
|
|
185
|
+
const x = stage.Coordinates?.X || 100;
|
|
186
|
+
const y = stage.Coordinates?.Y || 50;
|
|
187
|
+
this.nodeService.addNode(swimlaneIndex, 'stage', x, y, {
|
|
188
|
+
Name: stage.Name,
|
|
189
|
+
Description: stage.Description,
|
|
190
|
+
Duration: stage.Duration,
|
|
191
|
+
PassOnRule: stage.PassOnRule,
|
|
192
|
+
ActorRule: stage.ActorRule,
|
|
193
|
+
MinNoOfActor: stage.MinNoOfActor,
|
|
194
|
+
Tags: stage.Tags || [],
|
|
195
|
+
IsParallel: stage.IsParallel,
|
|
196
|
+
IsEntryPoint: stage.IsEntryPoint,
|
|
197
|
+
IsExitPoint: stage.IsExitPoint,
|
|
198
|
+
Id: stage.Id,
|
|
199
|
+
});
|
|
200
|
+
// Register loaded stage
|
|
201
|
+
this.registerLoadedObject(stage.Id, stage.Code);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// Process connections/actions
|
|
206
|
+
if (workflow.Actions && workflow.Actions.length) {
|
|
207
|
+
workflow.Actions.forEach((action) => {
|
|
208
|
+
// Find source and target nodes
|
|
209
|
+
const sourceNodeInfo = this.nodeService.findNodeById(action.FromStage);
|
|
210
|
+
const targetNodeInfo = this.nodeService.findNodeById(action.ToStage);
|
|
211
|
+
if (sourceNodeInfo && targetNodeInfo) {
|
|
212
|
+
// Find suitable connection points
|
|
213
|
+
const sourcePoint = sourceNodeInfo.node.connectionPoints?.[0];
|
|
214
|
+
const targetPoint = targetNodeInfo.node.connectionPoints?.[0];
|
|
215
|
+
if (sourcePoint && targetPoint) {
|
|
216
|
+
const connection = {
|
|
217
|
+
id: action.Id,
|
|
218
|
+
sourceNodeId: action.FromStage,
|
|
219
|
+
targetNodeId: action.ToStage,
|
|
220
|
+
sourcePointId: sourcePoint.id,
|
|
221
|
+
targetPointId: targetPoint.id,
|
|
222
|
+
sourceSwimlaneIndex: sourceNodeInfo.swimlaneIndex,
|
|
223
|
+
targetSwimlaneIndex: targetNodeInfo.swimlaneIndex,
|
|
224
|
+
};
|
|
225
|
+
this.state.connections.push(connection);
|
|
226
|
+
// Register loaded action
|
|
227
|
+
this.registerLoadedObject(action.Id, action.Code);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Register a loaded object from the API
|
|
235
|
+
*/
|
|
236
|
+
registerLoadedObject(id, code) {
|
|
237
|
+
this.loadedObjectIds[id] = code;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Check if an object was loaded from API
|
|
241
|
+
*/
|
|
242
|
+
wasLoadedFromApi(id) {
|
|
243
|
+
return id in this.loadedObjectIds;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the code for a loaded object
|
|
247
|
+
*/
|
|
248
|
+
getCodeForObject(id) {
|
|
249
|
+
return this.loadedObjectIds[id] || '';
|
|
250
|
+
}
|
|
251
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TransformerService, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.SwimlaneService }, { token: i3.NodeManagementService }, { token: i4.ConnectionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
252
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TransformerService, providedIn: 'root' });
|
|
253
|
+
}
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TransformerService, decorators: [{
|
|
255
|
+
type: Injectable,
|
|
256
|
+
args: [{
|
|
257
|
+
providedIn: 'root',
|
|
258
|
+
}]
|
|
259
|
+
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.SwimlaneService }, { type: i3.NodeManagementService }, { type: i4.ConnectionService }] });
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc2VydmljZXMvdHJhbnNmb3JtZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7QUFRaEUsTUFBTSxPQUFPLGtCQUFrQjtJQUtuQjtJQUNBO0lBQ0E7SUFDQTtJQVBWLDhCQUE4QjtJQUN0QixlQUFlLEdBQThCLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtJQUVoRixZQUNVLEtBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLFdBQWtDLEVBQ2xDLGlCQUFvQztRQUhwQyxVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDM0MsQ0FBQztJQUVKOztPQUVHO0lBQ0gsd0JBQXdCO1FBQ3RCLDhCQUE4QjtRQUM5QixNQUFNLFFBQVEsR0FBYTtZQUN6Qix1QkFBdUI7WUFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUs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QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBRXhDLHlCQUF5Qjt3QkFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsSUFBWTtRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7d0dBelJVLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBXb3JrZmxvdyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9Xb3JrZmxvdyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N0YWdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1dvcmtmbG93U3RhZ2UnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0dXMnO1xuaW1wb3J0IHsgVGFza0Fzc2lnbm1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1Rhc2tBc3NpZ25tZW50VHlwZSc7XG5pbXBvcnQgeyBTdGFnZUFjdG9yUnVsZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TdGFnZUFjdG9yUnVsZSc7XG5pbXBvcnQgeyBTd2ltbGFuZVNlcnZpY2UgfSBmcm9tICcuL3N3aW1sYW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9ub2RlLW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4vY29ubmVjdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybWVyU2VydmljZSB7XG4gIC8vIE1hcCB0byB0cmFjayBsb2FkZWQgb2JqZWN0c1xuICBwcml2YXRlIGxvYWRlZE9iamVjdElkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9OyAvLyBGb3JtYXQ6IHsgaWQ6IGNvZGUgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIHN3aW1sYW5lU2VydmljZTogU3dpbWxhbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IE5vZGVNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbm5lY3Rpb25TZXJ2aWNlOiBDb25uZWN0aW9uU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGUgVUkgbW9kZWwgdG8gYSBXb3JrZmxvdyBBUEkgbW9kZWxcbiAgICovXG4gIHRyYW5zZm9ybVRvV29ya2Zsb3dNb2RlbCgpOiBXb3JrZmxvdyB7XG4gICAgLy8gQ3JlYXRlIGJhc2Ugd29ya2Zsb3cgb2JqZWN0XG4gICAgY29uc3Qgd29ya2Zsb3c6IFdvcmtmbG93ID0ge1xuICAgICAgLy8gQmFzZU1vZGVsIHByb3BlcnRpZXNcbiAgICAgIElkOiB0aGlzLndhc0xvYWRlZEZyb21BcGkodGhpcy5zdGF0ZS53b3JrZmxvd0lkIHx8ICcnKVxuICAgICAgICA/IHRoaXMuc3RhdGUud29ya2Zsb3dJZCB8fCAnJ1xuICAgICAgICA6ICcnLFxuICAgICAgQ29kZTogdGhpcy5nZXRDb2RlRm9yT2JqZWN0KHRoaXMuc3RhdGUud29ya2Zsb3dJZCB8fCAnJyksXG4gICAgICBUZW5hbnRJZDogJycsXG4gICAgICBpZDogdGhpcy53YXNMb2FkZWRGcm9tQXBpKHRoaXMuc3RhdGUud29ya2Zsb3dJZCB8fCAnJylcbiAgICAgICAgPyB0aGlzLnN0YXRlLndvcmtmbG93SWQgfHwgJydcbiAgICAgICAgOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogdGhpcy53YXNMb2FkZWRGcm9tQXBpKHRoaXMuc3RhdGUud29ya2Zsb3dJZCB8fCAnJylcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkXG4gICAgICAgIDogT2JqZWN0U3RhdGUuTmV3LFxuXG4gICAgICAvLyBXb3JrZmxvdyBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgICBOYW1lOiAnTmV3IFdvcmtmbG93JywgLy8gRGVmYXVsdCBuYW1lXG4gICAgICBEZXNjcmlwdGlvbjogJycsIC8vIERlZmF1bHQgZGVzY3JpcHRpb25cbiAgICAgIFN0YWdlRW50cnlSdWxlOiAnJyxcbiAgICAgIEZvcm06IHRoaXMuc3RhdGUud29ya2Zsb3dGb3JtSWQgfHwgdW5kZWZpbmVkLFxuICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICBPcGVyYXRpb246ICcnLFxuICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgQWN0aW9uczogW10sXG4gICAgICBMYW5lczogW10sXG4gICAgICBTdGFnZXM6IFtdLFxuICAgIH07XG5cbiAgICAvLyBUcmFuc2Zvcm0gc3dpbWxhbmVzIHRvIFN3aW1MYW5lW11cbiAgICB3b3JrZmxvdy5MYW5lcyA9IHRoaXMuc3RhdGUuc3dpbWxhbmVzLm1hcCgoc3dpbWxhbmUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBsYW5lSWQgPSBgbGFuZS0ke2luZGV4fWA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIEJhc2VNb2RlbCBwcm9wZXJ0aWVzXG4gICAgICAgIElkOiAnJyxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgaWQ6IGxhbmVJZCxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG5cbiAgICAgICAgLy8gU3dpbUxhbmUgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICBXb3JrZmxvdzogd29ya2Zsb3cuSWQsXG4gICAgICAgIFRhZ3M6IHN3aW1sYW5lLnRhZ3MgfHwgW10sXG4gICAgICAgIFBvc2l0aW9uOiBzd2ltbGFuZS5vcmRlcixcbiAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gbm9kZXMgdG8gV29ya2Zsb3dTdGFnZVtdXG4gICAgY29uc3Qgc3RhZ2VzOiBXb3JrZmxvd1N0YWdlW10gPSBbXTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzLmZvckVhY2goKHN3aW1sYW5lLCBzd2ltbGFuZUluZGV4KSA9PiB7XG4gICAgICBzd2ltbGFuZS5ub2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgc3RhZ2UgZnJvbSB0aGUgbm9kZVxuICAgICAgICAgIGNvbnN0IHN0YWdlOiBXb3JrZmxvd1N0YWdlID0ge1xuICAgICAgICAgICAgLy8gQmFzZU1vZGVsIHByb3BlcnRpZXNcbiAgICAgICAgICAgIElkOiBub2RlLmlkLFxuICAgICAgICAgICAgQ29kZTogdGhpcy5nZXRDb2RlRm9yT2JqZWN0KG5vZGUuaWQpLFxuICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IHRoaXMud2FzTG9hZGVkRnJvbUFwaShub2RlLmlkKVxuICAgICAgICAgICAgICA/IE9iamVjdFN0YXRlLkNoYW5nZWRcbiAgICAgICAgICAgICAgOiBPYmplY3RTdGF0ZS5OZXcsXG5cbiAgICAgICAgICAgIC8vIFdvcmtmbG93U3RhZ2Ugc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LklkLFxuICAgICAgICAgICAgTmFtZTogbm9kZS5zdGFnZURhdGE/Lk5hbWUgfHwgJ1VubmFtZWQgU3RhZ2UnLFxuICAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIER1cmF0aW9uOiBub2RlLnN0YWdlRGF0YT8uRHVyYXRpb24gfHwgMCxcbiAgICAgICAgICAgIFBhc3NPblJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgICAgICBNaW5Ob09mQWN0b3I6IG5vZGUuc3RhZ2VEYXRhPy5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgICAgICAgICAgIElzUGFyYWxsZWw6IG5vZGUuc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBub2RlLmlzU3RhcnROb2RlLFxuICAgICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLCAvLyBXaWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgICAgICAgICAgIFRhZ3M6IG5vZGUuc3RhZ2VEYXRhPy5UYWdzIHx8IFtdLFxuICAgICAgICAgICAgRm9ybTogbm9kZS5zdGFnZURhdGE/LmZvcm1JZCA/IG5vZGUuc3RhZ2VEYXRhLmZvcm1JZCA6ICcnLFxuICAgICAgICAgICAgQWxsb3dNdWx0aVN1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgICBTd2ltTGFuZTogd29ya2Zsb3cuTGFuZXNbc3dpbWxhbmVJbmRleF0uSWQsXG4gICAgICAgICAgICBDb29yZGluYXRlczogeyBYOiBub2RlLngsIFk6IG5vZGUueSB9LFxuICAgICAgICAgICAgSXNTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIEtleTogbm9kZS5zdGFnZURhdGE/LktleSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHN0YWdlcy5wdXNoKHN0YWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc3RhZ2VzIGFyZSBleGl0IHBvaW50cyAobm8gb3V0Z29pbmcgY29ubmVjdGlvbnMpXG4gICAgc3RhZ2VzLmZvckVhY2goKHN0YWdlKSA9PiB7XG4gICAgICBjb25zdCBoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5zb21lKFxuICAgICAgICAoY29ubikgPT4gY29ubi5zb3VyY2VOb2RlSWQgPT09IHN0YWdlLklkXG4gICAgICApO1xuICAgICAgaWYgKCFoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zKSB7XG4gICAgICAgIHN0YWdlLklzRXhpdFBvaW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBjb25uZWN0aW9ucyB0byBXb3JrZmxvd0FjdGlvbltdXG4gICAgd29ya2Zsb3cuQWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMubWFwKChjb25uKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5ub2RlU2VydmljZS5maW5kTm9kZUJ5SWQoY29ubi5zb3VyY2VOb2RlSWQpPy5ub2RlO1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMubm9kZVNlcnZpY2UuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKT8ubm9kZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gQmFzZU1vZGVsIHByb3BlcnRpZXNcbiAgICAgICAgSWQ6IGNvbm4uaWQsXG4gICAgICAgIENvZGU6IHRoaXMuZ2V0Q29kZUZvck9iamVjdChjb25uLmlkKSxcbiAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICBpZDogY29ubi5pZCxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiB0aGlzLndhc0xvYWRlZEZyb21BcGkoY29ubi5pZClcbiAgICAgICAgICA/IE9iamVjdFN0YXRlLkNoYW5nZWRcbiAgICAgICAgICA6IE9iamVjdFN0YXRlLk5ldyxcblxuICAgICAgICAvLyBXb3JrZmxvd0FjdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgICAgICAgTmFtZTogYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHtcbiAgICAgICAgICB0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gICAgICAgIH1gLFxuICAgICAgICBGcm9tU3RhZ2U6IGNvbm4uc291cmNlTm9kZUlkLFxuICAgICAgICBUb1N0YWdlOiBjb25uLnRhcmdldE5vZGVJZCxcbiAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5oYXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgICAgUGFzc09uUnVsZTogJycsIC8vIE9wdGlvbmFsIHByb3BlcnR5XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIEFQSSB3b3JrZmxvdyBtb2RlbCBhbmQgY29udmVydCB0byBVSSBtb2RlbFxuICAgKi9cbiAgcGFyc2VXb3JrZmxvd0RhdGEod29ya2Zsb3c6IFdvcmtmbG93KTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3Rpbmcgc3RhdGVcbiAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcyA9IFtdO1xuICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMgPSBbXTtcblxuICAgIC8vIFNldCB3b3JrZmxvdyBmb3JtIGlmIGV4aXN0c1xuICAgIGlmICh3b3JrZmxvdy5Gb3JtKSB7XG4gICAgICB0aGlzLnN0YXRlLnNldFdvcmtmbG93Rm9ybShcbiAgICAgICAgd29ya2Zsb3cuRm9ybSxcbiAgICAgICAgd29ya2Zsb3cuRm9ybU5hbWUgfHwgJ1dvcmtmbG93IEZvcm0nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIHRoZSB3b3JrZmxvdyBJRFxuICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dJZCh3b3JrZmxvdy5JZCk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgd29ya2Zsb3cgaXRzZWxmXG4gICAgdGhpcy5yZWdpc3RlckxvYWRlZE9iamVjdCh3b3JrZmxvdy5JZCwgd29ya2Zsb3cuQ29kZSk7XG5cbiAgICAvLyBQcm9jZXNzIHN3aW1sYW5lcyBmaXJzdFxuICAgIGlmICh3b3JrZmxvdy5MYW5lcyAmJiB3b3JrZmxvdy5MYW5lcy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LkxhbmVzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLlBvc2l0aW9uIC0gYi5Qb3NpdGlvbikuZm9yRWFjaChcbiAgICAgICAgKGxhbmU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3dpbWxhbmVTZXJ2aWNlLmFkZFN3aW1sYW5lKFxuICAgICAgICAgICAgbGFuZS5OYW1lIHx8IGBMYW5lICR7bGFuZS5Qb3NpdGlvbn1gLFxuICAgICAgICAgICAgbGFuZS5UYWdzIHx8IFtdXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGxvYWRlZCBsYW5lXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckxvYWRlZE9iamVjdChsYW5lLklkLCBsYW5lLkNvZGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RhZ2VzXG4gICAgaWYgKHdvcmtmbG93LlN0YWdlcyAmJiB3b3JrZmxvdy5TdGFnZXMubGVuZ3RoKSB7XG4gICAgICB3b3JrZmxvdy5TdGFnZXMuZm9yRWFjaCgoc3RhZ2U6IGFueSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHN3aW1sYW5lIGluZGV4XG4gICAgICAgIGNvbnN0IHN3aW1sYW5lSW5kZXggPSB0aGlzLnN3aW1sYW5lU2VydmljZS5maW5kU3dpbWxhbmVJbmRleEJ5TGFuZUlkKFxuICAgICAgICAgIHN0YWdlLlN3aW1MYW5lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzd2ltbGFuZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGNvbnN0IHggPSBzdGFnZS5Db29yZGluYXRlcz8uWCB8fCAxMDA7XG4gICAgICAgICAgY29uc3QgeSA9IHN0YWdlLkNvb3JkaW5hdGVzPy5ZIHx8IDUwO1xuXG4gICAgICAgICAgdGhpcy5ub2RlU2VydmljZS5hZGROb2RlKHN3aW1sYW5lSW5kZXgsICdzdGFnZScsIHgsIHksIHtcbiAgICAgICAgICAgIE5hbWU6IHN0YWdlLk5hbWUsXG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogc3RhZ2UuRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBEdXJhdGlvbjogc3RhZ2UuRHVyYXRpb24sXG4gICAgICAgICAgICBQYXNzT25SdWxlOiBzdGFnZS5QYXNzT25SdWxlLFxuICAgICAgICAgICAgQWN0b3JSdWxlOiBzdGFnZS5BY3RvclJ1bGUsXG4gICAgICAgICAgICBNaW5Ob09mQWN0b3I6IHN0YWdlLk1pbk5vT2ZBY3RvcixcbiAgICAgICAgICAgIFRhZ3M6IHN0YWdlLlRhZ3MgfHwgW10sXG4gICAgICAgICAgICBJc1BhcmFsbGVsOiBzdGFnZS5Jc1BhcmFsbGVsLFxuICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBzdGFnZS5Jc0VudHJ5UG9pbnQsXG4gICAgICAgICAgICBJc0V4aXRQb2ludDogc3RhZ2UuSXNFeGl0UG9pbnQsXG4gICAgICAgICAgICBJZDogc3RhZ2UuSWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBSZWdpc3RlciBsb2FkZWQgc3RhZ2VcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTG9hZGVkT2JqZWN0KHN0YWdlLklkLCBzdGFnZS5Db2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBjb25uZWN0aW9ucy9hY3Rpb25zXG4gICAgaWYgKHdvcmtmbG93LkFjdGlvbnMgJiYgd29ya2Zsb3cuQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LkFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gRmluZCBzb3VyY2UgYW5kIHRhcmdldCBub2Rlc1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMubm9kZVNlcnZpY2UuZmluZE5vZGVCeUlkKGFjdGlvbi5Gcm9tU3RhZ2UpO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMubm9kZVNlcnZpY2UuZmluZE5vZGVCeUlkKGFjdGlvbi5Ub1N0YWdlKTtcblxuICAgICAgICBpZiAoc291cmNlTm9kZUluZm8gJiYgdGFyZ2V0Tm9kZUluZm8pIHtcbiAgICAgICAgICAvLyBGaW5kIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlSW5mby5ub2RlLmNvbm5lY3Rpb25Qb2ludHM/LlswXTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldE5vZGVJbmZvLm5vZGUuY29ubmVjdGlvblBvaW50cz8uWzBdO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZVBvaW50ICYmIHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICBpZDogYWN0aW9uLklkLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IGFjdGlvbi5Gcm9tU3RhZ2UsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogYWN0aW9uLlRvU3RhZ2UsXG4gICAgICAgICAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgICAgICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlTm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0Tm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGxvYWRlZCBhY3Rpb25cbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJMb2FkZWRPYmplY3QoYWN0aW9uLklkLCBhY3Rpb24uQ29kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsb2FkZWQgb2JqZWN0IGZyb20gdGhlIEFQSVxuICAgKi9cbiAgcmVnaXN0ZXJMb2FkZWRPYmplY3QoaWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkZWRPYmplY3RJZHNbaWRdID0gY29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3Qgd2FzIGxvYWRlZCBmcm9tIEFQSVxuICAgKi9cbiAgd2FzTG9hZGVkRnJvbUFwaShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlkIGluIHRoaXMubG9hZGVkT2JqZWN0SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29kZSBmb3IgYSBsb2FkZWQgb2JqZWN0XG4gICAqL1xuICBnZXRDb2RlRm9yT2JqZWN0KGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvYWRlZE9iamVjdElkc1tpZF0gfHwgJyc7XG4gIH1cbn1cbiJdfQ==
|