@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.32 → 0.0.2-ang-17-20
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/fesm2022/sunbird-cb-tree-hierarchy.mjs +710 -189
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
- package/index.d.ts +1052 -3
- package/index.d.ts.map +1 -0
- package/package.json +13 -15
- package/sunbird-cb-tree-hierarchy-0.0.2-ang-17-20.tgz +0 -0
- package/esm2022/lib/components/action-bar/action-bar.component.mjs +0 -42
- package/esm2022/lib/components/approval/approval.component.mjs +0 -20
- package/esm2022/lib/components/approve-view/approve-view.component.mjs +0 -65
- package/esm2022/lib/components/categories-preview/categories-preview.component.mjs +0 -45
- package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +0 -56
- package/esm2022/lib/components/conforamtion-popup/conforamtion-popup.component.mjs +0 -75
- package/esm2022/lib/components/connector/connector.component.mjs +0 -60
- package/esm2022/lib/components/create-categories/create-categories.component.mjs +0 -84
- package/esm2022/lib/components/create-term/create-term.component.mjs +0 -848
- package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +0 -825
- package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +0 -224
- package/esm2022/lib/components/pending-approval/pending-approval.component.mjs +0 -65
- package/esm2022/lib/components/term-card/term-card.component.mjs +0 -343
- package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +0 -357
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +0 -862
- package/esm2022/lib/constants/app-constant.mjs +0 -40
- package/esm2022/lib/constants/data.mjs +0 -6972
- package/esm2022/lib/containers/config-framework/config-framework.component.mjs +0 -93
- package/esm2022/lib/containers/dashboard/dashboard.component.mjs +0 -15
- package/esm2022/lib/labels/strings.mjs +0 -40
- package/esm2022/lib/models/approval.model.mjs +0 -2
- package/esm2022/lib/models/connection-type.model.mjs +0 -2
- package/esm2022/lib/models/connection.model.mjs +0 -2
- package/esm2022/lib/models/framework.model.mjs +0 -2
- package/esm2022/lib/models/variable-type.model.mjs +0 -2
- package/esm2022/lib/pipes/order-by.pipe.mjs +0 -36
- package/esm2022/lib/services/approval.service.mjs +0 -48
- package/esm2022/lib/services/connection.service.mjs +0 -3
- package/esm2022/lib/services/connector.service.mjs +0 -287
- package/esm2022/lib/services/framework.service.mjs +0 -532
- package/esm2022/lib/services/local-connection.service.mjs +0 -76
- package/esm2022/lib/services/odcs.service.mjs +0 -24
- package/esm2022/lib/tree-hierarchy-routing.module.mjs +0 -44
- package/esm2022/lib/tree-hierarchy.component.mjs +0 -25
- package/esm2022/lib/tree-hierarchy.module.mjs +0 -146
- package/esm2022/lib/tree-hierarchy.service.mjs +0 -62
- package/esm2022/material.module.mjs +0 -200
- package/esm2022/public-api.mjs +0 -9
- package/esm2022/sunbird-cb-tree-hierarchy.mjs +0 -2
- package/lib/components/action-bar/action-bar.component.d.ts +0 -17
- package/lib/components/action-bar/action-bar.component.d.ts.map +0 -1
- package/lib/components/approval/approval.component.d.ts +0 -10
- package/lib/components/approval/approval.component.d.ts.map +0 -1
- package/lib/components/approve-view/approve-view.component.d.ts +0 -27
- package/lib/components/approve-view/approve-view.component.d.ts.map +0 -1
- package/lib/components/categories-preview/categories-preview.component.d.ts +0 -14
- package/lib/components/categories-preview/categories-preview.component.d.ts.map +0 -1
- package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts +0 -18
- package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts.map +0 -1
- package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts +0 -20
- package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts.map +0 -1
- package/lib/components/connector/connector.component.d.ts +0 -23
- package/lib/components/connector/connector.component.d.ts.map +0 -1
- package/lib/components/create-categories/create-categories.component.d.ts +0 -26
- package/lib/components/create-categories/create-categories.component.d.ts.map +0 -1
- package/lib/components/create-term/create-term.component.d.ts +0 -148
- package/lib/components/create-term/create-term.component.d.ts.map +0 -1
- package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts +0 -105
- package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts.map +0 -1
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +0 -46
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +0 -1
- package/lib/components/pending-approval/pending-approval.component.d.ts +0 -21
- package/lib/components/pending-approval/pending-approval.component.d.ts.map +0 -1
- package/lib/components/term-card/term-card.component.d.ts +0 -54
- package/lib/components/term-card/term-card.component.d.ts.map +0 -1
- package/lib/components/tree-column-view/tree-column-view.component.d.ts +0 -57
- package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +0 -1
- package/lib/components/tree-view/tree-view.component.d.ts +0 -103
- package/lib/components/tree-view/tree-view.component.d.ts.map +0 -1
- package/lib/constants/app-constant.d.ts +0 -44
- package/lib/constants/app-constant.d.ts.map +0 -1
- package/lib/constants/data.d.ts +0 -117
- package/lib/constants/data.d.ts.map +0 -1
- package/lib/containers/config-framework/config-framework.component.d.ts +0 -32
- package/lib/containers/config-framework/config-framework.component.d.ts.map +0 -1
- package/lib/containers/dashboard/dashboard.component.d.ts +0 -9
- package/lib/containers/dashboard/dashboard.component.d.ts.map +0 -1
- package/lib/labels/strings.d.ts +0 -40
- package/lib/labels/strings.d.ts.map +0 -1
- package/lib/models/approval.model.d.ts +0 -11
- package/lib/models/approval.model.d.ts.map +0 -1
- package/lib/models/connection-type.model.d.ts +0 -6
- package/lib/models/connection-type.model.d.ts.map +0 -1
- package/lib/models/connection.model.d.ts +0 -7
- package/lib/models/connection.model.d.ts.map +0 -1
- package/lib/models/framework.model.d.ts +0 -89
- package/lib/models/framework.model.d.ts.map +0 -1
- package/lib/models/variable-type.model.d.ts +0 -46
- package/lib/models/variable-type.model.d.ts.map +0 -1
- package/lib/pipes/order-by.pipe.d.ts +0 -10
- package/lib/pipes/order-by.pipe.d.ts.map +0 -1
- package/lib/services/approval.service.d.ts +0 -21
- package/lib/services/approval.service.d.ts.map +0 -1
- package/lib/services/connection.service.d.ts +0 -4
- package/lib/services/connection.service.d.ts.map +0 -1
- package/lib/services/connector.service.d.ts +0 -18
- package/lib/services/connector.service.d.ts.map +0 -1
- package/lib/services/framework.service.d.ts +0 -89
- package/lib/services/framework.service.d.ts.map +0 -1
- package/lib/services/local-connection.service.d.ts +0 -18
- package/lib/services/local-connection.service.d.ts.map +0 -1
- package/lib/services/odcs.service.d.ts +0 -11
- package/lib/services/odcs.service.d.ts.map +0 -1
- package/lib/tree-hierarchy-routing.module.d.ts +0 -8
- package/lib/tree-hierarchy-routing.module.d.ts.map +0 -1
- package/lib/tree-hierarchy.component.d.ts +0 -13
- package/lib/tree-hierarchy.component.d.ts.map +0 -1
- package/lib/tree-hierarchy.module.d.ts +0 -33
- package/lib/tree-hierarchy.module.d.ts.map +0 -1
- package/lib/tree-hierarchy.service.d.ts +0 -22
- package/lib/tree-hierarchy.service.d.ts.map +0 -1
- package/material.module.d.ts +0 -52
- package/material.module.d.ts.map +0 -1
- package/public-api.d.ts +0 -9
- package/public-api.d.ts.map +0 -1
- package/sunbird-cb-tree-hierarchy.d.ts.map +0 -1
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { defaultConfig } from '../constants/app-constant';
|
|
3
|
-
import * as d3 from 'd3';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
class ConnectorService {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.connectorMap = {};
|
|
8
|
-
this.containerSelector = '#treeViewContainer';
|
|
9
|
-
}
|
|
10
|
-
_drawLine(source, target, options = defaultConfig, sourceContainerId = undefined, targetContainerId = undefined) {
|
|
11
|
-
const _options = { ...defaultConfig, ...options };
|
|
12
|
-
_options['dashed'] = true;
|
|
13
|
-
if (Array.isArray(target)) {
|
|
14
|
-
let connectedDots = [];
|
|
15
|
-
target.forEach((_target) => {
|
|
16
|
-
const tempLine = this.renderLine(source, _target, _options);
|
|
17
|
-
connectedDots.push({
|
|
18
|
-
target: _target,
|
|
19
|
-
line: tempLine
|
|
20
|
-
});
|
|
21
|
-
if (sourceContainerId) {
|
|
22
|
-
const sourceContainer = document.querySelector(sourceContainerId);
|
|
23
|
-
if (sourceContainer) {
|
|
24
|
-
sourceContainer.addEventListener('scroll', () => {
|
|
25
|
-
try {
|
|
26
|
-
tempLine && tempLine.position();
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
}
|
|
30
|
-
}, true);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (targetContainerId) {
|
|
34
|
-
const targetContainer = document.querySelector(targetContainerId);
|
|
35
|
-
if (targetContainer) {
|
|
36
|
-
targetContainer.addEventListener('scroll', () => {
|
|
37
|
-
try {
|
|
38
|
-
tempLine && tempLine.position();
|
|
39
|
-
}
|
|
40
|
-
catch (e) {
|
|
41
|
-
}
|
|
42
|
-
}, true);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
return connectedDots;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
return this.renderLine(source, target, _options);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
renderLine(source, target, options) {
|
|
53
|
-
const treeViewComponent = document.querySelector(this.containerSelector);
|
|
54
|
-
if (!treeViewComponent) {
|
|
55
|
-
return {
|
|
56
|
-
source: null,
|
|
57
|
-
target: null,
|
|
58
|
-
path: null,
|
|
59
|
-
svg: null,
|
|
60
|
-
position: () => { },
|
|
61
|
-
show: () => { },
|
|
62
|
-
remove: () => { }
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
let container = treeViewComponent.querySelector('#leader-line-container');
|
|
66
|
-
if (!container) {
|
|
67
|
-
let overflowWrapper = document.createElement('div');
|
|
68
|
-
overflowWrapper.id = 'leader-line-overflow-wrapper';
|
|
69
|
-
overflowWrapper.style.position = 'absolute';
|
|
70
|
-
overflowWrapper.style.top = '80px';
|
|
71
|
-
overflowWrapper.style.bottom = '0';
|
|
72
|
-
overflowWrapper.style.left = '0';
|
|
73
|
-
overflowWrapper.style.right = '0';
|
|
74
|
-
overflowWrapper.style.overflow = 'hidden';
|
|
75
|
-
overflowWrapper.style.pointerEvents = 'none';
|
|
76
|
-
container = document.createElement('div');
|
|
77
|
-
container.id = 'leader-line-container';
|
|
78
|
-
container.style.position = 'absolute';
|
|
79
|
-
container.style.top = '0';
|
|
80
|
-
container.style.bottom = '0';
|
|
81
|
-
container.style.left = '0';
|
|
82
|
-
container.style.right = '0';
|
|
83
|
-
container.style.width = '100%';
|
|
84
|
-
container.style.height = '100%';
|
|
85
|
-
const resizeObserver = new ResizeObserver(entries => {
|
|
86
|
-
for (const entry of entries) {
|
|
87
|
-
if (entry.target === treeViewComponent) {
|
|
88
|
-
container.style.width = `${entry.contentRect.width}px`;
|
|
89
|
-
if (this.connectorMap) {
|
|
90
|
-
Object.values(this.connectorMap).forEach((connector) => {
|
|
91
|
-
if (connector && connector.lines) {
|
|
92
|
-
connector.lines.forEach((item) => {
|
|
93
|
-
if (item.line && typeof item.line.position === 'function') {
|
|
94
|
-
item.line.position();
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
resizeObserver.observe(treeViewComponent);
|
|
104
|
-
treeViewComponent.addEventListener('scroll', () => {
|
|
105
|
-
overflowWrapper.style.width = `${treeViewComponent.scrollWidth}px`;
|
|
106
|
-
overflowWrapper.style.height = `${treeViewComponent.scrollHeight}px`;
|
|
107
|
-
this.repositionAllLines();
|
|
108
|
-
});
|
|
109
|
-
overflowWrapper.appendChild(container);
|
|
110
|
-
treeViewComponent.appendChild(overflowWrapper);
|
|
111
|
-
}
|
|
112
|
-
this.elmWrapper = container;
|
|
113
|
-
let sourceElement = source;
|
|
114
|
-
let targetElement;
|
|
115
|
-
if (target.targetType === 'id') {
|
|
116
|
-
targetElement = document.getElementById(target.target);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
targetElement = target.target;
|
|
120
|
-
}
|
|
121
|
-
if (!sourceElement || !targetElement) {
|
|
122
|
-
return {
|
|
123
|
-
source: null,
|
|
124
|
-
target: null,
|
|
125
|
-
path: null,
|
|
126
|
-
svg: null,
|
|
127
|
-
position: () => { },
|
|
128
|
-
show: () => { },
|
|
129
|
-
remove: () => { }
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
const svgId = 'd3-line-' + Math.random().toString(36).substr(2, 9);
|
|
133
|
-
const svg = d3.select(container)
|
|
134
|
-
.append('svg')
|
|
135
|
-
.attr('id', svgId)
|
|
136
|
-
.attr('class', 'leader-line')
|
|
137
|
-
.style('position', 'absolute')
|
|
138
|
-
.style('top', '0')
|
|
139
|
-
.style('left', '0')
|
|
140
|
-
.style('width', '100%')
|
|
141
|
-
.style('height', '100%')
|
|
142
|
-
.style('pointer-events', 'none')
|
|
143
|
-
.style('overflow', 'visible');
|
|
144
|
-
const sourceRect = sourceElement.getBoundingClientRect();
|
|
145
|
-
const targetRect = targetElement.getBoundingClientRect();
|
|
146
|
-
const containerRect = container.getBoundingClientRect();
|
|
147
|
-
let sourceX, sourceY, targetX, targetY;
|
|
148
|
-
sourceX = sourceRect.right - containerRect.left;
|
|
149
|
-
sourceY = sourceRect.top + (sourceRect.height / 2) - containerRect.top;
|
|
150
|
-
targetX = targetRect.left - containerRect.left;
|
|
151
|
-
targetY = targetRect.top + (targetRect.height / 2) - containerRect.top;
|
|
152
|
-
const path = svg.append('path')
|
|
153
|
-
.attr('d', createGridPath(sourceX, sourceY, targetX, targetY))
|
|
154
|
-
.style('stroke', '#000')
|
|
155
|
-
.style('stroke-width', options.size || 2)
|
|
156
|
-
.style('fill', 'none')
|
|
157
|
-
.style('opacity', 1)
|
|
158
|
-
.style('stroke-linejoin', 'round')
|
|
159
|
-
.style('stroke-dasharray', options.dashed ? '5,5' : 'none');
|
|
160
|
-
function createGridPath(x1, y1, x2, y2) {
|
|
161
|
-
const midX = x1 + (x2 - x1) / 2;
|
|
162
|
-
return `M ${x1} ${y1} L ${midX} ${y1} L ${midX} ${y2} L ${x2} ${y2}`;
|
|
163
|
-
}
|
|
164
|
-
const defs = svg.append('defs');
|
|
165
|
-
if (options.startPlug === 'disc' || options.startPlug !== false) {
|
|
166
|
-
defs.append('marker')
|
|
167
|
-
.attr('id', `start-circle-${svgId}`)
|
|
168
|
-
.attr('viewBox', '0 0 10 10')
|
|
169
|
-
.attr('refX', 5)
|
|
170
|
-
.attr('refY', 5)
|
|
171
|
-
.attr('markerWidth', 8)
|
|
172
|
-
.attr('markerHeight', 8)
|
|
173
|
-
.attr('orient', 'auto')
|
|
174
|
-
.append('circle')
|
|
175
|
-
.attr('cx', 5)
|
|
176
|
-
.attr('cy', 5)
|
|
177
|
-
.attr('r', 4.5)
|
|
178
|
-
.style('fill', options.color || '#333');
|
|
179
|
-
path.attr('marker-start', `url(#start-circle-${svgId})`);
|
|
180
|
-
}
|
|
181
|
-
if (options.endPlug === 'arrow' || options.endPlug !== false) {
|
|
182
|
-
defs.append('marker')
|
|
183
|
-
.attr('id', `arrowhead-${svgId}`)
|
|
184
|
-
.attr('viewBox', '0 0 10 10')
|
|
185
|
-
.attr('refX', 8)
|
|
186
|
-
.attr('refY', 5)
|
|
187
|
-
.attr('markerWidth', 9)
|
|
188
|
-
.attr('markerHeight', 9)
|
|
189
|
-
.attr('orient', 'auto')
|
|
190
|
-
.append('path')
|
|
191
|
-
.attr('d', 'M 0 0 L 10 5 L 0 10 z')
|
|
192
|
-
.style('fill', options.color || '#333');
|
|
193
|
-
path.attr('marker-end', `url(#arrowhead-${svgId})`);
|
|
194
|
-
}
|
|
195
|
-
const d3Line = {
|
|
196
|
-
source: sourceElement,
|
|
197
|
-
target: targetElement,
|
|
198
|
-
path: path,
|
|
199
|
-
svg: svg,
|
|
200
|
-
position: function () {
|
|
201
|
-
const updatedSourceRect = sourceElement.getBoundingClientRect();
|
|
202
|
-
const updatedTargetRect = targetElement.getBoundingClientRect();
|
|
203
|
-
const updatedContainerRect = container.getBoundingClientRect();
|
|
204
|
-
const updatedSourceX = updatedSourceRect.right - updatedContainerRect.left;
|
|
205
|
-
const updatedSourceY = updatedSourceRect.top + (updatedSourceRect.height / 2) - updatedContainerRect.top;
|
|
206
|
-
const updatedTargetX = updatedTargetRect.left - updatedContainerRect.left;
|
|
207
|
-
const updatedTargetY = updatedTargetRect.top + (updatedTargetRect.height / 2) - updatedContainerRect.top;
|
|
208
|
-
const midX = updatedSourceX + (updatedTargetX - updatedSourceX) / 2;
|
|
209
|
-
path.attr('d', `M ${updatedSourceX} ${updatedSourceY} L ${midX} ${updatedSourceY} L ${midX} ${updatedTargetY} L ${updatedTargetX} ${updatedTargetY}`)
|
|
210
|
-
.style('stroke-dasharray', options.dashed ? '5,5' : 'none')
|
|
211
|
-
.attr('marker-start', options.startPlug !== false ? `url(#start-circle-${svgId})` : null)
|
|
212
|
-
.attr('marker-end', options.endPlug !== false ? `url(#arrowhead-${svgId})` : null);
|
|
213
|
-
},
|
|
214
|
-
show: function (animation = '') {
|
|
215
|
-
if (animation === 'draw') {
|
|
216
|
-
const pathNode = path.node();
|
|
217
|
-
if (!pathNode)
|
|
218
|
-
return;
|
|
219
|
-
const totalLength = pathNode.getTotalLength();
|
|
220
|
-
path.style('opacity', 1)
|
|
221
|
-
.attr('stroke-dasharray', totalLength)
|
|
222
|
-
.attr('stroke-dashoffset', totalLength)
|
|
223
|
-
.transition()
|
|
224
|
-
.duration(options.animOptions?.duration || 2000)
|
|
225
|
-
.ease(d3.easeLinear)
|
|
226
|
-
.attr('stroke-dashoffset', 0);
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
path.style('opacity', 1);
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
remove: function () {
|
|
233
|
-
svg.remove();
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
d3Line.show(options.animation);
|
|
237
|
-
return d3Line;
|
|
238
|
-
}
|
|
239
|
-
updateConnectorsMap(map) {
|
|
240
|
-
this.connectorMap = map;
|
|
241
|
-
}
|
|
242
|
-
position(line) {
|
|
243
|
-
if (!line || !line.position)
|
|
244
|
-
return;
|
|
245
|
-
this.elmWrapper.style.transform = 'none';
|
|
246
|
-
var rectWrapper = this.elmWrapper.getBoundingClientRect();
|
|
247
|
-
this.elmWrapper.style.transform = 'translate(' +
|
|
248
|
-
((rectWrapper.left + window.pageXOffset) * -1) + 'px, ' +
|
|
249
|
-
((rectWrapper.top + window.pageYOffset) * -1) + 'px)';
|
|
250
|
-
line.position();
|
|
251
|
-
}
|
|
252
|
-
removeAllLines() {
|
|
253
|
-
if (this.connectorMap) {
|
|
254
|
-
for (const key in this.connectorMap) {
|
|
255
|
-
if (this.connectorMap[key] && this.connectorMap[key].lines && this.connectorMap[key].lines.length > 0) {
|
|
256
|
-
const lines = this.connectorMap[key].lines;
|
|
257
|
-
lines.forEach(async (element, index) => {
|
|
258
|
-
await element.line && element.line.remove();
|
|
259
|
-
lines.splice(index, 1);
|
|
260
|
-
});
|
|
261
|
-
this.connectorMap[key].lines = lines;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
this.updateConnectorsMap({});
|
|
266
|
-
}
|
|
267
|
-
repositionAllLines() {
|
|
268
|
-
if (this.connectorMap) {
|
|
269
|
-
Object.values(this.connectorMap).forEach((connector) => {
|
|
270
|
-
if (connector && connector.lines) {
|
|
271
|
-
connector.lines.forEach((item) => {
|
|
272
|
-
if (item.line && typeof item.line.position === 'function') {
|
|
273
|
-
item.line.position();
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
281
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectorService }); }
|
|
282
|
-
}
|
|
283
|
-
export { ConnectorService };
|
|
284
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectorService, decorators: [{
|
|
285
|
-
type: Injectable
|
|
286
|
-
}], ctorParameters: function () { return []; } });
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9zZXJ2aWNlcy9jb25uZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQzs7QUFpQnpCLE1BQ2EsZ0JBQWdCO0lBSzNCO1FBSkEsaUJBQVksR0FBeUIsRUFBRSxDQUFDO1FBRXhDLHNCQUFpQixHQUFHLG9CQUFvQixDQUFDO0lBR3pDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBVyxFQUFFLE1BQVcsRUFBRSxVQUFlLGFBQWEsRUFBRSxvQkFBeUIsU0FBUyxFQUFFLG9CQUF5QixTQUFTO1FBQ3RJLE1BQU0sUUFBUSxHQUFRLEVBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQztRQUNyRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixJQUFJLGFBQWEsR0FBbUIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RCxhQUFhLENBQUMsSUFBSSxDQUFDO29CQUNqQixNQUFNLEVBQUUsT0FBTztvQkFDZixJQUFJLEVBQUUsUUFBUTtpQkFDZixDQUFDLENBQUM7Z0JBRUgsSUFBRyxpQkFBaUIsRUFBRTtvQkFDcEIsTUFB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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmYXVsdENvbmZpZyB9IGZyb20gJy4uL2NvbnN0YW50cy9hcHAtY29uc3RhbnQnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5pbnRlcmZhY2UgQ29ubmVjdGVkRG90IHtcbiAgdGFyZ2V0OiBhbnk7XG4gIGxpbmU6IGFueTtcbn1cblxuaW50ZXJmYWNlIEQzTGluZSB7XG4gIHNvdXJjZTogYW55O1xuICB0YXJnZXQ6IGFueTtcbiAgcGF0aDogYW55O1xuICBzdmc6IGFueTtcbiAgcG9zaXRpb246ICgpID0+IHZvaWQ7XG4gIHNob3c6IChhbmltYXRpb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlbW92ZTogKCkgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbm5lY3RvclNlcnZpY2Uge1xuICBjb25uZWN0b3JNYXA6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG4gIGVsbVdyYXBwZXI6IGFueTtcbiAgY29udGFpbmVyU2VsZWN0b3IgPSAnI3RyZWVWaWV3Q29udGFpbmVyJzsgLy8gWW91IG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoaXMgc2VsZWN0b3JcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIF9kcmF3TGluZShzb3VyY2U6IGFueSwgdGFyZ2V0OiBhbnksIG9wdGlvbnM6IGFueSA9IGRlZmF1bHRDb25maWcsIHNvdXJjZUNvbnRhaW5lcklkOiBhbnkgPSB1bmRlZmluZWQsIHRhcmdldENvbnRhaW5lcklkOiBhbnkgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIGNvbnN0IF9vcHRpb25zID0gPGFueT57Li4uZGVmYXVsdENvbmZpZywgLi4ub3B0aW9uc307XG4gICAgX29wdGlvbnNbJ2Rhc2hlZCddID0gdHJ1ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgIGxldCBjb25uZWN0ZWREb3RzOiBDb25uZWN0ZWREb3RbXSA9IFtdO1xuICAgICAgdGFyZ2V0LmZvckVhY2goKF90YXJnZXQpID0+IHtcbiAgICAgICAgY29uc3QgdGVtcExpbmUgPSB0aGlzLnJlbmRlckxpbmUoc291cmNlLCBfdGFyZ2V0LCBfb3B0aW9ucyk7XG4gICAgICAgIGNvbm5lY3RlZERvdHMucHVzaCh7XG4gICAgICAgICAgdGFyZ2V0OiBfdGFyZ2V0LFxuICAgICAgICAgIGxpbmU6IHRlbXBMaW5lXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYoc291cmNlQ29udGFpbmVySWQpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNvdXJjZUNvbnRhaW5lcklkKTtcbiAgICAgICAgICBpZiAoc291cmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBzb3VyY2VDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRlbXBMaW5lICYmIHRlbXBMaW5lLnBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHRhcmdldENvbnRhaW5lcklkKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRDb250YWluZXJJZCk7XG4gICAgICAgICAgaWYgKHRhcmdldENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0ZW1wTGluZSAmJiB0ZW1wTGluZS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbm5lY3RlZERvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpbmUoc291cmNlLCB0YXJnZXQsIF9vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckxpbmUoc291cmNlOiBhbnksIHRhcmdldDogYW55LCBvcHRpb25zOiBhbnkpOiBEM0xpbmUge1xuICAgIC8vIEZpbmQgb3IgY3JlYXRlIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgIGNvbnN0IHRyZWVWaWV3Q29tcG9uZW50OiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpO1xuICAgIGlmICghdHJlZVZpZXdDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICBwYXRoOiBudWxsLFxuICAgICAgICBzdmc6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiAoKSA9PiB7fSxcbiAgICAgICAgc2hvdzogKCkgPT4ge30sXG4gICAgICAgIHJlbW92ZTogKCkgPT4ge31cbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBvciBnZXQgY29udGFpbmVyIGZvciB0aGUgU1ZHXG4gICAgbGV0IGNvbnRhaW5lcjogYW55ID0gdHJlZVZpZXdDb21wb25lbnQucXVlcnlTZWxlY3RvcignI2xlYWRlci1saW5lLWNvbnRhaW5lcicpO1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIGNvbnRhaW5lciB0byBjb250cm9sIHRoZSBvdmVyZmxvdyBhdCB0aGUgdG9wXG4gICAgICBsZXQgb3ZlcmZsb3dXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBvdmVyZmxvd1dyYXBwZXIuaWQgPSAnbGVhZGVyLWxpbmUtb3ZlcmZsb3ctd3JhcHBlcic7XG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLnRvcCA9ICc4MHB4JzsgLy8gU2FtZSB0b3AgcG9zaXRpb25cbiAgICAgIG92ZXJmbG93V3JhcHBlci5zdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICAgIG92ZXJmbG93V3JhcHBlci5zdHlsZS5yaWdodCA9ICcwJztcbiAgICAgIG92ZXJmbG93V3JhcHBlci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOyAvLyBIaWRlIGFueXRoaW5nIGFib3ZlIHRoaXMgY29udGFpbmVyXG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJzsgLy8gQWxsb3cgY2xpY2tzIHRvIHBhc3MgdGhyb3VnaFxuICAgICAgXG4gICAgICAvLyBPcmlnaW5hbCBjb250YWluZXIgcmVtYWlucyB0aGUgc2FtZSBidXQgcG9zaXRpb25lZCBhdCB0b3A6MCB3aXRoaW4gdGhlIHdyYXBwZXJcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgY29udGFpbmVyLmlkID0gJ2xlYWRlci1saW5lLWNvbnRhaW5lcic7XG4gICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICcwJzsgLy8gQ2hhbmdlZCB0byAwIGFzIGl0J3Mgbm93IHJlbGF0aXZlIHRvIHdyYXBwZXJcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5yaWdodCA9ICcwJztcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICBcbiAgICAgIC8vIEFkZCByZXNpemUgb2JzZXJ2ZXIgdG8gZHluYW1pY2FsbHkgYWRqdXN0IGNvbnRhaW5lciB3aWR0aFxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQgPT09IHRyZWVWaWV3Q29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBgJHtlbnRyeS5jb250ZW50UmVjdC53aWR0aH1weGA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFJlcG9zaXRpb24gYWxsIGxpbmVzIHdoZW4gY29udGFpbmVyIHJlc2l6ZXNcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbm5lY3Rvck1hcCkge1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY29ubmVjdG9yTWFwKS5mb3JFYWNoKChjb25uZWN0b3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25uZWN0b3IgJiYgY29ubmVjdG9yLmxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25uZWN0b3IubGluZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmxpbmUgJiYgdHlwZW9mIGl0ZW0ubGluZS5wb3NpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubGluZS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFN0YXJ0IG9ic2VydmluZyB0aGUgdHJlZVZpZXdDb21wb25lbnRcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodHJlZVZpZXdDb21wb25lbnQpO1xuICAgICAgXG4gICAgICAvLyBBbHNvIGxpc3RlbiBmb3Igc2Nyb2xsIGV2ZW50cyB0byByZXBvc2l0aW9uIGxpbmVzXG4gICAgICB0cmVlVmlld0NvbXBvbmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIC8vIFVwZGF0ZSBjb250YWluZXIgZGltZW5zaW9ucyBiYXNlZCBvbiB2aXNpYmxlIGFyZWFcbiAgICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLndpZHRoID0gYCR7dHJlZVZpZXdDb21wb25lbnQuc2Nyb2xsV2lkdGh9cHhgO1xuICAgICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dHJlZVZpZXdDb21wb25lbnQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlcG9zaXRpb24gYWxsIGFjdGl2ZSBsaW5lc1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25BbGxMaW5lcygpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG92ZXJmbG93V3JhcHBlci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgdHJlZVZpZXdDb21wb25lbnQuYXBwZW5kQ2hpbGQob3ZlcmZsb3dXcmFwcGVyKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RvcmUgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgYWNjZXNzIGluIG90aGVyIG1ldGhvZHNcbiAgICB0aGlzLmVsbVdyYXBwZXIgPSBjb250YWluZXI7XG4gICAgXG4gICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCBlbGVtZW50c1xuICAgIGxldCBzb3VyY2VFbGVtZW50ID0gc291cmNlO1xuICAgIGxldCB0YXJnZXRFbGVtZW50OiBhbnk7XG4gICAgXG4gICAgaWYgKHRhcmdldC50YXJnZXRUeXBlID09PSAnaWQnKSB7XG4gICAgICB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0LnRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXQudGFyZ2V0O1xuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgYm90aCBlbGVtZW50cyBleGlzdFxuICAgIGlmICghc291cmNlRWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHBhdGg6IG51bGwsXG4gICAgICAgIHN2ZzogbnVsbCxcbiAgICAgICAgcG9zaXRpb246ICgpID0+IHt9LFxuICAgICAgICBzaG93OiAoKSA9PiB7fSxcbiAgICAgICAgcmVtb3ZlOiAoKSA9PiB7fVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIGEgdW5pcXVlIElEIGZvciB0aGUgU1ZHXG4gICAgY29uc3Qgc3ZnSWQgPSAnZDMtbGluZS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICAgIFxuICAgIC8vIENyZWF0ZSBTVkcgZWxlbWVudFxuICAgIGNvbnN0IHN2ZyA9IGQzLnNlbGVjdChjb250YWluZXIpXG4gICAgICAuYXBwZW5kKCdzdmcnKVxuICAgICAgLmF0dHIoJ2lkJywgc3ZnSWQpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGVhZGVyLWxpbmUnKVxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAuc3R5bGUoJ3RvcCcsICcwJylcbiAgICAgIC5zdHlsZSgnbGVmdCcsICcwJylcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXG4gICAgICAuc3R5bGUoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpXG4gICAgICAuc3R5bGUoJ292ZXJmbG93JywgJ3Zpc2libGUnKTtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb25zXG4gICAgY29uc3Qgc291cmNlUmVjdCA9IHNvdXJjZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgZWRnZSBjb25uZWN0aW9uIHBvaW50cyAtIGFsd2F5cyByaWdodCB0byBsZWZ0XG4gICAgbGV0IHNvdXJjZVgsIHNvdXJjZVksIHRhcmdldFgsIHRhcmdldFk7XG5cbiAgICAvLyBTb3VyY2UgLSBhbHdheXMgY29ubmVjdCBmcm9tIHRoZSByaWdodCBlZGdlXG4gICAgc291cmNlWCA9IHNvdXJjZVJlY3QucmlnaHQgLSBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgc291cmNlWSA9IHNvdXJjZVJlY3QudG9wICsgKHNvdXJjZVJlY3QuaGVpZ2h0IC8gMikgLSBjb250YWluZXJSZWN0LnRvcDtcblxuICAgIC8vIFRhcmdldCAtIGFsd2F5cyBjb25uZWN0IHRvIHRoZSBsZWZ0IGVkZ2VcbiAgICB0YXJnZXRYID0gdGFyZ2V0UmVjdC5sZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICAgIHRhcmdldFkgPSB0YXJnZXRSZWN0LnRvcCArICh0YXJnZXRSZWN0LmhlaWdodCAvIDIpIC0gY29udGFpbmVyUmVjdC50b3A7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGxpbmUgd2l0aCBpbml0aWFsIG9wYWNpdHkgMSAodmlzaWJsZSBpbW1lZGlhdGVseSlcbiAgICAvLyBJbnN0ZWFkIG9mIGEgc3RyYWlnaHQgbGluZSwgY3JlYXRlIGEgZ3JpZCBsaW5lIHdpdGggcmlnaHQgYW5nbGVzXG4gICAgY29uc3QgcGF0aDogYW55ID0gc3ZnLmFwcGVuZCgncGF0aCcpXG4gICAgICAuYXR0cignZCcsIGNyZWF0ZUdyaWRQYXRoKHNvdXJjZVgsIHNvdXJjZVksIHRhcmdldFgsIHRhcmdldFkpKVxuICAgICAgLnN0eWxlKCdzdHJva2UnLCAnIzAwMCcpIC8vIERhcmtlciBjb2xvciBmb3IgYmV0dGVyIHZpc2liaWxpdHlcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgb3B0aW9ucy5zaXplIHx8IDIpXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKSAvLyBTdGFydCB2aXNpYmxlXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1saW5lam9pbicsICdyb3VuZCcpIC8vIFJvdW5kIGNvcm5lcnMgZm9yIGEgc21vb3RoZXIgbG9va1xuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5Jywgb3B0aW9ucy5kYXNoZWQgPyAnNSw1JyA6ICdub25lJyk7IC8vIEFkZCBkYXNoZWQgc3R5bGUgaWYgc3BlY2lmaWVkXG4gICAgXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGdyaWQgcGF0aFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUdyaWRQYXRoKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbWlkcG9pbnQgb24gdGhlIHgtYXhpc1xuICAgICAgY29uc3QgbWlkWCA9IHgxICsgKHgyIC0geDEpIC8gMjtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aXRoIDMgc2VnbWVudHMgKGhvcml6b250YWwsIHZlcnRpY2FsLCBob3Jpem9udGFsKVxuICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9IEwgJHttaWRYfSAke3kxfSBMICR7bWlkWH0gJHt5Mn0gTCAke3gyfSAke3kyfWA7XG4gICAgfVxuICBcbiAgICAvLyBEZWZpbmUgbWFya2VycyAoZGlzayBhdCBzdGFydCBhbmQgYXJyb3cgYXQgZW5kKVxuICAgIGNvbnN0IGRlZnMgPSBzdmcuYXBwZW5kKCdkZWZzJyk7XG4gICAgXG4gICAgLy8gQWRkIHN0YXJ0IG1hcmtlciAoZGlzay9jaXJjbGUpXG4gICAgaWYgKG9wdGlvbnMuc3RhcnRQbHVnID09PSAnZGlzYycgfHwgb3B0aW9ucy5zdGFydFBsdWcgIT09IGZhbHNlKSB7XG4gICAgICBkZWZzLmFwcGVuZCgnbWFya2VyJylcbiAgICAgICAgLmF0dHIoJ2lkJywgYHN0YXJ0LWNpcmNsZS0ke3N2Z0lkfWApXG4gICAgICAgIC5hdHRyKCd2aWV3Qm94JywgJzAgMCAxMCAxMCcpXG4gICAgICAgIC5hdHRyKCdyZWZYJywgNSlcbiAgICAgICAgLmF0dHIoJ3JlZlknLCA1KVxuICAgICAgICAuYXR0cignbWFya2VyV2lkdGgnLCA4KVxuICAgICAgICAuYXR0cignbWFya2VySGVpZ2h0JywgOClcbiAgICAgICAgLmF0dHIoJ29yaWVudCcsICdhdXRvJylcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgLmF0dHIoJ2N4JywgNSlcbiAgICAgICAgLmF0dHIoJ2N5JywgNSlcbiAgICAgICAgLmF0dHIoJ3InLCA0LjUpXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIG9wdGlvbnMuY29sb3IgfHwgJyMzMzMnKTtcbiAgICAgIFxuICAgICAgcGF0aC5hdHRyKCdtYXJrZXItc3RhcnQnLCBgdXJsKCNzdGFydC1jaXJjbGUtJHtzdmdJZH0pYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBlbmQgbWFya2VyIChhcnJvdylcbiAgICBpZiAob3B0aW9ucy5lbmRQbHVnID09PSAnYXJyb3cnIHx8IG9wdGlvbnMuZW5kUGx1ZyAhPT0gZmFsc2UpIHtcbiAgICAgIGRlZnMuYXBwZW5kKCdtYXJrZXInKVxuICAgICAgICAuYXR0cignaWQnLCBgYXJyb3doZWFkLSR7c3ZnSWR9YClcbiAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAwIDEwIDEwJylcbiAgICAgICAgLmF0dHIoJ3JlZlgnLCA4KSAgXG4gICAgICAgIC5hdHRyKCdyZWZZJywgNSlcbiAgICAgICAgLmF0dHIoJ21hcmtlcldpZHRoJywgOSlcbiAgICAgICAgLmF0dHIoJ21hcmtlckhlaWdodCcsIDkpXG4gICAgICAgIC5hdHRyKCdvcmllbnQnLCAnYXV0bycpXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignZCcsICdNIDAgMCBMIDEwIDUgTCAwIDEwIHonKVxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBvcHRpb25zLmNvbG9yIHx8ICcjMzMzJyk7XG4gICAgICBcbiAgICAgIHBhdGguYXR0cignbWFya2VyLWVuZCcsIGB1cmwoI2Fycm93aGVhZC0ke3N2Z0lkfSlgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIHRoZSBEM0xpbmUgb2JqZWN0IHdpdGggQVBJIHNpbWlsYXIgdG8gTGVhZGVyTGluZVxuICAgIGNvbnN0IGQzTGluZTogRDNMaW5lID0ge1xuICAgICAgc291cmNlOiBzb3VyY2VFbGVtZW50LFxuICAgICAgdGFyZ2V0OiB0YXJnZXRFbGVtZW50LFxuICAgICAgcGF0aDogcGF0aCxcbiAgICAgIHN2Zzogc3ZnLFxuICAgICAgXG4gICAgICAvLyBQb3NpdGlvbiBtZXRob2QgdG8gdXBkYXRlIGxpbmUgY29vcmRpbmF0ZXNcbiAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gR2V0IHVwZGF0ZWQgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTb3VyY2VSZWN0ID0gc291cmNlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFRhcmdldFJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB1cGRhdGVkQ29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNvdXJjZSAtIGFsd2F5cyBjb25uZWN0IGZyb20gdGhlIHJpZ2h0IGVkZ2VcbiAgICAgICAgY29uc3QgdXBkYXRlZFNvdXJjZVggPSB1cGRhdGVkU291cmNlUmVjdC5yaWdodCAtIHVwZGF0ZWRDb250YWluZXJSZWN0LmxlZnQ7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTb3VyY2VZID0gdXBkYXRlZFNvdXJjZVJlY3QudG9wICsgKHVwZGF0ZWRTb3VyY2VSZWN0LmhlaWdodCAvIDIpIC0gdXBkYXRlZENvbnRhaW5lclJlY3QudG9wO1xuICAgICAgICBcbiAgICAgICAgLy8gVGFyZ2V0IC0gYWx3YXlzIGNvbm5lY3QgdG8gdGhlIGxlZnQgZWRnZVxuICAgICAgICBjb25zdCB1cGRhdGVkVGFyZ2V0WCA9IHVwZGF0ZWRUYXJnZXRSZWN0LmxlZnQgLSB1cGRhdGVkQ29udGFpbmVyUmVjdC5sZWZ0O1xuICAgICAgICBjb25zdCB1cGRhdGVkVGFyZ2V0WSA9IHVwZGF0ZWRUYXJnZXRSZWN0LnRvcCArICh1cGRhdGVkVGFyZ2V0UmVjdC5oZWlnaHQgLyAyKSAtIHVwZGF0ZWRDb250YWluZXJSZWN0LnRvcDtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBwYXRoIHdpdGggZ3JpZCBwYXRoXG4gICAgICAgIGNvbnN0IG1pZFggPSB1cGRhdGVkU291cmNlWCArICh1cGRhdGVkVGFyZ2V0WCAtIHVwZGF0ZWRTb3VyY2VYKSAvIDI7XG4gICAgICAgIHBhdGguYXR0cignZCcsIGBNICR7dXBkYXRlZFNvdXJjZVh9ICR7dXBkYXRlZFNvdXJjZVl9IEwgJHttaWRYfSAke3VwZGF0ZWRTb3VyY2VZfSBMICR7bWlkWH0gJHt1cGRhdGVkVGFyZ2V0WX0gTCAke3VwZGF0ZWRUYXJnZXRYfSAke3VwZGF0ZWRUYXJnZXRZfWApXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCBvcHRpb25zLmRhc2hlZCA/ICc1LDUnIDogJ25vbmUnKVxuICAgICAgICAgICAgLy8gRW5zdXJlIG1hcmtlcnMgYXJlIHByZXNlcnZlZCBkdXJpbmcgcmVwb3NpdGlvbmluZ1xuICAgICAgICAgICAgLmF0dHIoJ21hcmtlci1zdGFydCcsIG9wdGlvbnMuc3RhcnRQbHVnICE9PSBmYWxzZSA/IGB1cmwoI3N0YXJ0LWNpcmNsZS0ke3N2Z0lkfSlgIDogbnVsbClcbiAgICAgICAgICAgIC5hdHRyKCdtYXJrZXItZW5kJywgb3B0aW9ucy5lbmRQbHVnICE9PSBmYWxzZSA/IGB1cmwoI2Fycm93aGVhZC0ke3N2Z0lkfSlgIDogbnVsbCk7XG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBTaG93IG1ldGhvZCB3aXRoIGFuaW1hdGlvbiBvcHRpb25cbiAgICAgIHNob3c6IGZ1bmN0aW9uKGFuaW1hdGlvbiA9ICcnKSB7XG4gICAgICAgIGlmIChhbmltYXRpb24gPT09ICdkcmF3Jykge1xuICAgICAgICAgIC8vIEVuc3VyZSB0aGUgcGF0aCBoYXMgYSBub2RlIGJlZm9yZSBjYWxjdWxhdGluZyB0b3RhbCBsZW5ndGhcbiAgICAgICAgICBjb25zdCBwYXRoTm9kZSA9IHBhdGgubm9kZSgpO1xuICAgICAgICAgIGlmICghcGF0aE5vZGUpIHJldHVybjtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCB0b3RhbExlbmd0aCA9IHBhdGhOb2RlLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcGF0aC5zdHlsZSgnb3BhY2l0eScsIDEpXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIHRvdGFsTGVuZ3RoKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNob2Zmc2V0JywgdG90YWxMZW5ndGgpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24ob3B0aW9ucy5hbmltT3B0aW9ucz8uZHVyYXRpb24gfHwgMjAwMClcbiAgICAgICAgICAgIC5lYXNlKGQzLmVhc2VMaW5lYXIpXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hvZmZzZXQnLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXRoLnN0eWxlKCdvcGFjaXR5JywgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBtZXRob2RcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHN2Zy5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIC8vIEltbWVkaWF0ZWx5IGNhbGwgc2hvdyB0byBtYWtlIHRoZSBsaW5lIHZpc2libGVcbiAgICBkM0xpbmUuc2hvdyhvcHRpb25zLmFuaW1hdGlvbik7XG4gICAgXG4gICAgcmV0dXJuIGQzTGluZTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3RvcnNNYXAobWFwOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rvck1hcCA9IG1hcDtcbiAgfVxuXG4gIHBvc2l0aW9uKGxpbmU6IGFueSk6IHZvaWQge1xuICAgIGlmICghbGluZSB8fCAhbGluZS5wb3NpdGlvbikgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuZWxtV3JhcHBlci5zdHlsZS50cmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgdmFyIHJlY3RXcmFwcGVyID0gdGhpcy5lbG1XcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vIE1vdmUgdG8gdGhlIG9yaWdpbiBvZiBjb29yZGluYXRlcyBhcyB0aGUgZG9jdW1lbnRcbiAgICB0aGlzLmVsbVdyYXBwZXIuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgnICtcbiAgICAgICgocmVjdFdyYXBwZXIubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCkgKiAtMSkgKyAncHgsICcgK1xuICAgICAgKChyZWN0V3JhcHBlci50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpICogLTEpICsgJ3B4KSc7XG4gICAgXG4gICAgbGluZS5wb3NpdGlvbigpO1xuICB9XG5cbiAgcmVtb3ZlQWxsTGluZXMoKTogdm9pZCB7XG4gICAgaWYodGhpcy5jb25uZWN0b3JNYXApIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29ubmVjdG9yTWFwKSB7XG4gICAgICAgIC8vIFJlbW92ZSBhbGwgbi0xIGxpbmVzIGFuZCBrZWVwIG9ubHkgY3VycmVudCBzZWxlY3Rpb24sIGFsc28gY2xlYXIgbisxIGxpbmVzXG4gICAgICAgIGlmKHRoaXMuY29ubmVjdG9yTWFwW2tleV0gJiYgdGhpcy5jb25uZWN0b3JNYXBba2V5XS5saW5lcyAmJiB0aGlzLmNvbm5lY3Rvck1hcFtrZXldLmxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMuY29ubmVjdG9yTWFwW2tleV0ubGluZXM7XG4gICAgICAgICAgbGluZXMuZm9yRWFjaChhc3luYyAoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IGVsZW1lbnQubGluZSAmJiBlbGVtZW50LmxpbmUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIGxpbmVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JNYXBba2V5XS5saW5lcyA9IGxpbmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHRvIHJlc2V0IGNvbm5lY3RvciBtYXAgYWZ0ZXIgY2xlYXJpbmcgYWxsIHRoZSBsaW5lc1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdG9yc01hcCh7fSk7XG4gIH1cblxuICByZXBvc2l0aW9uQWxsTGluZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29ubmVjdG9yTWFwKSB7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuY29ubmVjdG9yTWFwKS5mb3JFYWNoKChjb25uZWN0b3I6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci5saW5lcykge1xuICAgICAgICAgIGNvbm5lY3Rvci5saW5lcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmxpbmUgJiYgdHlwZW9mIGl0ZW0ubGluZS5wb3NpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBpdGVtLmxpbmUucG9zaXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59Il19
|