@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.29 → 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 +770 -200
- 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 +14 -16
- 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 -41
- package/esm2022/lib/components/approval/approval.component.mjs +0 -19
- package/esm2022/lib/components/approve-view/approve-view.component.mjs +0 -64
- package/esm2022/lib/components/categories-preview/categories-preview.component.mjs +0 -44
- package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +0 -55
- package/esm2022/lib/components/conforamtion-popup/conforamtion-popup.component.mjs +0 -74
- package/esm2022/lib/components/connector/connector.component.mjs +0 -59
- package/esm2022/lib/components/create-categories/create-categories.component.mjs +0 -83
- package/esm2022/lib/components/create-term/create-term.component.mjs +0 -847
- package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +0 -824
- package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +0 -223
- package/esm2022/lib/components/pending-approval/pending-approval.component.mjs +0 -64
- package/esm2022/lib/components/term-card/term-card.component.mjs +0 -340
- package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +0 -354
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +0 -826
- 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 -92
- package/esm2022/lib/containers/dashboard/dashboard.component.mjs +0 -14
- 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 -35
- package/esm2022/lib/services/approval.service.mjs +0 -47
- package/esm2022/lib/services/connection.service.mjs +0 -3
- package/esm2022/lib/services/connector.service.mjs +0 -286
- package/esm2022/lib/services/framework.service.mjs +0 -525
- package/esm2022/lib/services/local-connection.service.mjs +0 -75
- package/esm2022/lib/services/odcs.service.mjs +0 -23
- package/esm2022/lib/tree-hierarchy-routing.module.mjs +0 -43
- package/esm2022/lib/tree-hierarchy.component.mjs +0 -24
- package/esm2022/lib/tree-hierarchy.module.mjs +0 -145
- package/esm2022/lib/tree-hierarchy.service.mjs +0 -57
- package/esm2022/material.module.mjs +0 -199
- 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 -53
- 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 -56
- 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 -102
- 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 -21
- 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,286 +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
|
-
export 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
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectorService, decorators: [{
|
|
284
|
-
type: Injectable
|
|
285
|
-
}], ctorParameters: function () { return []; } });
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9zZXJ2aWNlcy9jb25uZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQzs7QUFrQnpCLE1BQU0sT0FBTyxnQkFBZ0I7SUFLM0I7UUFKQSxpQkFBWSxHQUF5QixFQUFFLENBQUM7UUFFeEMsc0JBQWlCLEdBQUcsb0JBQW9CLENBQUM7SUFHekMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLFVBQWUsYUFBYSxFQUFFLG9CQUF5QixTQUFTLEVBQUUsb0JBQXlCLFNBQVM7UUFDdEksTUFBTSxRQUFRLEdBQVEsRUFBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFDO1FBQ3JELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLElBQUksYUFBYSxHQUFtQixFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVELGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQ2pCLE1BQU0sRUFBRSxPQUFPO29CQUNmLElBQUksRUFBRSxRQUFRO2lCQUNmLENBQUMsQ0FBQztnQkFFSCxJQUFHLGlCQUFpQixFQUFFO29CQUNw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OlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcgfSBmcm9tICcuLi9jb25zdGFudHMvYXBwLWNvbnN0YW50JztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcblxuaW50ZXJmYWNlIENvbm5lY3RlZERvdCB7XG4gIHRhcmdldDogYW55O1xuICBsaW5lOiBhbnk7XG59XG5cbmludGVyZmFjZSBEM0xpbmUge1xuICBzb3VyY2U6IGFueTtcbiAgdGFyZ2V0OiBhbnk7XG4gIHBhdGg6IGFueTtcbiAgc3ZnOiBhbnk7XG4gIHBvc2l0aW9uOiAoKSA9PiB2b2lkO1xuICBzaG93OiAoYW5pbWF0aW9uPzogc3RyaW5nKSA9PiB2b2lkO1xuICByZW1vdmU6ICgpID0+IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25uZWN0b3JTZXJ2aWNlIHtcbiAgY29ubmVjdG9yTWFwOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICBlbG1XcmFwcGVyOiBhbnk7XG4gIGNvbnRhaW5lclNlbGVjdG9yID0gJyN0cmVlVmlld0NvbnRhaW5lcic7IC8vIFlvdSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGlzIHNlbGVjdG9yXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cblxuICBfZHJhd0xpbmUoc291cmNlOiBhbnksIHRhcmdldDogYW55LCBvcHRpb25zOiBhbnkgPSBkZWZhdWx0Q29uZmlnLCBzb3VyY2VDb250YWluZXJJZDogYW55ID0gdW5kZWZpbmVkLCB0YXJnZXRDb250YWluZXJJZDogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBjb25zdCBfb3B0aW9ucyA9IDxhbnk+ey4uLmRlZmF1bHRDb25maWcsIC4uLm9wdGlvbnN9O1xuICAgIF9vcHRpb25zWydkYXNoZWQnXSA9IHRydWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICBsZXQgY29ubmVjdGVkRG90czogQ29ubmVjdGVkRG90W10gPSBbXTtcbiAgICAgIHRhcmdldC5mb3JFYWNoKChfdGFyZ2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBMaW5lID0gdGhpcy5yZW5kZXJMaW5lKHNvdXJjZSwgX3RhcmdldCwgX29wdGlvbnMpO1xuICAgICAgICBjb25uZWN0ZWREb3RzLnB1c2goe1xuICAgICAgICAgIHRhcmdldDogX3RhcmdldCxcbiAgICAgICAgICBsaW5lOiB0ZW1wTGluZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGlmKHNvdXJjZUNvbnRhaW5lcklkKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihzb3VyY2VDb250YWluZXJJZCk7XG4gICAgICAgICAgaWYgKHNvdXJjZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgc291cmNlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0ZW1wTGluZSAmJiB0ZW1wTGluZS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0YXJnZXRDb250YWluZXJJZCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0Q29udGFpbmVySWQpO1xuICAgICAgICAgIGlmICh0YXJnZXRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGVtcExpbmUgJiYgdGVtcExpbmUucG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb25uZWN0ZWREb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaW5lKHNvdXJjZSwgdGFyZ2V0LCBfb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMaW5lKHNvdXJjZTogYW55LCB0YXJnZXQ6IGFueSwgb3B0aW9uczogYW55KTogRDNMaW5lIHtcbiAgICAvLyBGaW5kIG9yIGNyZWF0ZSB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICBjb25zdCB0cmVlVmlld0NvbXBvbmVudDogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRhaW5lclNlbGVjdG9yKTtcbiAgICBpZiAoIXRyZWVWaWV3Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgc3ZnOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogKCkgPT4ge30sXG4gICAgICAgIHNob3c6ICgpID0+IHt9LFxuICAgICAgICByZW1vdmU6ICgpID0+IHt9XG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgb3IgZ2V0IGNvbnRhaW5lciBmb3IgdGhlIFNWR1xuICAgIGxldCBjb250YWluZXI6IGFueSA9IHRyZWVWaWV3Q29tcG9uZW50LnF1ZXJ5U2VsZWN0b3IoJyNsZWFkZXItbGluZS1jb250YWluZXInKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBjb250YWluZXIgdG8gY29udHJvbCB0aGUgb3ZlcmZsb3cgYXQgdGhlIHRvcFxuICAgICAgbGV0IG92ZXJmbG93V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgb3ZlcmZsb3dXcmFwcGVyLmlkID0gJ2xlYWRlci1saW5lLW92ZXJmbG93LXdyYXBwZXInO1xuICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIG92ZXJmbG93V3JhcHBlci5zdHlsZS50b3AgPSAnODBweCc7IC8vIFNhbWUgdG9wIHBvc2l0aW9uXG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUuYm90dG9tID0gJzAnO1xuICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgICBvdmVyZmxvd1dyYXBwZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsgLy8gSGlkZSBhbnl0aGluZyBhYm92ZSB0aGlzIGNvbnRhaW5lclxuICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7IC8vIEFsbG93IGNsaWNrcyB0byBwYXNzIHRocm91Z2hcbiAgICAgIFxuICAgICAgLy8gT3JpZ2luYWwgY29udGFpbmVyIHJlbWFpbnMgdGhlIHNhbWUgYnV0IHBvc2l0aW9uZWQgYXQgdG9wOjAgd2l0aGluIHRoZSB3cmFwcGVyXG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5pZCA9ICdsZWFkZXItbGluZS1jb250YWluZXInO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAnMCc7IC8vIENoYW5nZWQgdG8gMCBhcyBpdCdzIG5vdyByZWxhdGl2ZSB0byB3cmFwcGVyXG4gICAgICBjb250YWluZXIuc3R5bGUuYm90dG9tID0gJzAnO1xuICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgICBjb250YWluZXIuc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgXG4gICAgICAvLyBBZGQgcmVzaXplIG9ic2VydmVyIHRvIGR5bmFtaWNhbGx5IGFkanVzdCBjb250YWluZXIgd2lkdGhcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0ID09PSB0cmVlVmlld0NvbXBvbmVudCkge1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7ZW50cnkuY29udGVudFJlY3Qud2lkdGh9cHhgO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZXBvc2l0aW9uIGFsbCBsaW5lcyB3aGVuIGNvbnRhaW5lciByZXNpemVzXG4gICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0b3JNYXApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbm5lY3Rvck1hcCkuZm9yRWFjaCgoY29ubmVjdG9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci5saW5lcykge1xuICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLmxpbmVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5saW5lICYmIHR5cGVvZiBpdGVtLmxpbmUucG9zaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpbmUucG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBTdGFydCBvYnNlcnZpbmcgdGhlIHRyZWVWaWV3Q29tcG9uZW50XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRyZWVWaWV3Q29tcG9uZW50KTtcbiAgICAgIFxuICAgICAgLy8gQWxzbyBsaXN0ZW4gZm9yIHNjcm9sbCBldmVudHMgdG8gcmVwb3NpdGlvbiBsaW5lc1xuICAgICAgdHJlZVZpZXdDb21wb25lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgY29udGFpbmVyIGRpbWVuc2lvbnMgYmFzZWQgb24gdmlzaWJsZSBhcmVhXG4gICAgICAgIG92ZXJmbG93V3JhcHBlci5zdHlsZS53aWR0aCA9IGAke3RyZWVWaWV3Q29tcG9uZW50LnNjcm9sbFdpZHRofXB4YDtcbiAgICAgICAgb3ZlcmZsb3dXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGAke3RyZWVWaWV3Q29tcG9uZW50LnNjcm9sbEhlaWdodH1weGA7XG4gICAgICAgIFxuICAgICAgICAvLyBSZXBvc2l0aW9uIGFsbCBhY3RpdmUgbGluZXNcbiAgICAgICAgdGhpcy5yZXBvc2l0aW9uQWxsTGluZXMoKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBvdmVyZmxvd1dyYXBwZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgIHRyZWVWaWV3Q29tcG9uZW50LmFwcGVuZENoaWxkKG92ZXJmbG93V3JhcHBlcik7XG4gICAgfVxuICAgIFxuICAgIC8vIFN0b3JlIGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGFjY2VzcyBpbiBvdGhlciBtZXRob2RzXG4gICAgdGhpcy5lbG1XcmFwcGVyID0gY29udGFpbmVyO1xuICAgIFxuICAgIC8vIEdldCB0aGUgc291cmNlIGFuZCB0YXJnZXQgZWxlbWVudHNcbiAgICBsZXQgc291cmNlRWxlbWVudCA9IHNvdXJjZTtcbiAgICBsZXQgdGFyZ2V0RWxlbWVudDogYW55O1xuICAgIFxuICAgIGlmICh0YXJnZXQudGFyZ2V0VHlwZSA9PT0gJ2lkJykge1xuICAgICAgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldC50YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0LnRhcmdldDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGJvdGggZWxlbWVudHMgZXhpc3RcbiAgICBpZiAoIXNvdXJjZUVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICBwYXRoOiBudWxsLFxuICAgICAgICBzdmc6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiAoKSA9PiB7fSxcbiAgICAgICAgc2hvdzogKCkgPT4ge30sXG4gICAgICAgIHJlbW92ZTogKCkgPT4ge31cbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBJRCBmb3IgdGhlIFNWR1xuICAgIGNvbnN0IHN2Z0lkID0gJ2QzLWxpbmUtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgICBcbiAgICAvLyBDcmVhdGUgU1ZHIGVsZW1lbnRcbiAgICBjb25zdCBzdmcgPSBkMy5zZWxlY3QoY29udGFpbmVyKVxuICAgICAgLmFwcGVuZCgnc3ZnJylcbiAgICAgIC5hdHRyKCdpZCcsIHN2Z0lkKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xlYWRlci1saW5lJylcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxuICAgICAgLnN0eWxlKCd0b3AnLCAnMCcpXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLnN0eWxlKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKVxuICAgICAgLnN0eWxlKCdvdmVyZmxvdycsICd2aXNpYmxlJyk7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uc1xuICAgIGNvbnN0IHNvdXJjZVJlY3QgPSBzb3VyY2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgXG4gICAgLy8gRGV0ZXJtaW5lIGVkZ2UgY29ubmVjdGlvbiBwb2ludHMgLSBhbHdheXMgcmlnaHQgdG8gbGVmdFxuICAgIGxldCBzb3VyY2VYLCBzb3VyY2VZLCB0YXJnZXRYLCB0YXJnZXRZO1xuXG4gICAgLy8gU291cmNlIC0gYWx3YXlzIGNvbm5lY3QgZnJvbSB0aGUgcmlnaHQgZWRnZVxuICAgIHNvdXJjZVggPSBzb3VyY2VSZWN0LnJpZ2h0IC0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICAgIHNvdXJjZVkgPSBzb3VyY2VSZWN0LnRvcCArIChzb3VyY2VSZWN0LmhlaWdodCAvIDIpIC0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgICAvLyBUYXJnZXQgLSBhbHdheXMgY29ubmVjdCB0byB0aGUgbGVmdCBlZGdlXG4gICAgdGFyZ2V0WCA9IHRhcmdldFJlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdDtcbiAgICB0YXJnZXRZID0gdGFyZ2V0UmVjdC50b3AgKyAodGFyZ2V0UmVjdC5oZWlnaHQgLyAyKSAtIGNvbnRhaW5lclJlY3QudG9wO1xuICAgIFxuICAgIC8vIENyZWF0ZSBsaW5lIHdpdGggaW5pdGlhbCBvcGFjaXR5IDEgKHZpc2libGUgaW1tZWRpYXRlbHkpXG4gICAgLy8gSW5zdGVhZCBvZiBhIHN0cmFpZ2h0IGxpbmUsIGNyZWF0ZSBhIGdyaWQgbGluZSB3aXRoIHJpZ2h0IGFuZ2xlc1xuICAgIGNvbnN0IHBhdGg6IGFueSA9IHN2Zy5hcHBlbmQoJ3BhdGgnKVxuICAgICAgLmF0dHIoJ2QnLCBjcmVhdGVHcmlkUGF0aChzb3VyY2VYLCBzb3VyY2VZLCB0YXJnZXRYLCB0YXJnZXRZKSlcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJyMwMDAnKSAvLyBEYXJrZXIgY29sb3IgZm9yIGJldHRlciB2aXNpYmlsaXR5XG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIG9wdGlvbnMuc2l6ZSB8fCAyKVxuICAgICAgLnN0eWxlKCdmaWxsJywgJ25vbmUnKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSkgLy8gU3RhcnQgdmlzaWJsZVxuICAgICAgLnN0eWxlKCdzdHJva2UtbGluZWpvaW4nLCAncm91bmQnKSAvLyBSb3VuZCBjb3JuZXJzIGZvciBhIHNtb290aGVyIGxvb2tcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsIG9wdGlvbnMuZGFzaGVkID8gJzUsNScgOiAnbm9uZScpOyAvLyBBZGQgZGFzaGVkIHN0eWxlIGlmIHNwZWNpZmllZFxuICAgIFxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBncmlkIHBhdGhcbiAgICBmdW5jdGlvbiBjcmVhdGVHcmlkUGF0aCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIG1pZHBvaW50IG9uIHRoZSB4LWF4aXNcbiAgICAgIGNvbnN0IG1pZFggPSB4MSArICh4MiAtIHgxKSAvIDI7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBhIHBhdGggd2l0aCAzIHNlZ21lbnRzIChob3Jpem9udGFsLCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbClcbiAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfSBMICR7bWlkWH0gJHt5MX0gTCAke21pZFh9ICR7eTJ9IEwgJHt4Mn0gJHt5Mn1gO1xuICAgIH1cbiAgXG4gICAgLy8gRGVmaW5lIG1hcmtlcnMgKGRpc2sgYXQgc3RhcnQgYW5kIGFycm93IGF0IGVuZClcbiAgICBjb25zdCBkZWZzID0gc3ZnLmFwcGVuZCgnZGVmcycpO1xuICAgIFxuICAgIC8vIEFkZCBzdGFydCBtYXJrZXIgKGRpc2svY2lyY2xlKVxuICAgIGlmIChvcHRpb25zLnN0YXJ0UGx1ZyA9PT0gJ2Rpc2MnIHx8IG9wdGlvbnMuc3RhcnRQbHVnICE9PSBmYWxzZSkge1xuICAgICAgZGVmcy5hcHBlbmQoJ21hcmtlcicpXG4gICAgICAgIC5hdHRyKCdpZCcsIGBzdGFydC1jaXJjbGUtJHtzdmdJZH1gKVxuICAgICAgICAuYXR0cigndmlld0JveCcsICcwIDAgMTAgMTAnKVxuICAgICAgICAuYXR0cigncmVmWCcsIDUpXG4gICAgICAgIC5hdHRyKCdyZWZZJywgNSlcbiAgICAgICAgLmF0dHIoJ21hcmtlcldpZHRoJywgOClcbiAgICAgICAgLmF0dHIoJ21hcmtlckhlaWdodCcsIDgpXG4gICAgICAgIC5hdHRyKCdvcmllbnQnLCAnYXV0bycpXG4gICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgIC5hdHRyKCdjeCcsIDUpXG4gICAgICAgIC5hdHRyKCdjeScsIDUpXG4gICAgICAgIC5hdHRyKCdyJywgNC41KVxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBvcHRpb25zLmNvbG9yIHx8ICcjMzMzJyk7XG4gICAgICBcbiAgICAgIHBhdGguYXR0cignbWFya2VyLXN0YXJ0JywgYHVybCgjc3RhcnQtY2lyY2xlLSR7c3ZnSWR9KWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgZW5kIG1hcmtlciAoYXJyb3cpXG4gICAgaWYgKG9wdGlvbnMuZW5kUGx1ZyA9PT0gJ2Fycm93JyB8fCBvcHRpb25zLmVuZFBsdWcgIT09IGZhbHNlKSB7XG4gICAgICBkZWZzLmFwcGVuZCgnbWFya2VyJylcbiAgICAgICAgLmF0dHIoJ2lkJywgYGFycm93aGVhZC0ke3N2Z0lkfWApXG4gICAgICAgIC5hdHRyKCd2aWV3Qm94JywgJzAgMCAxMCAxMCcpXG4gICAgICAgIC5hdHRyKCdyZWZYJywgOCkgIFxuICAgICAgICAuYXR0cigncmVmWScsIDUpXG4gICAgICAgIC5hdHRyKCdtYXJrZXJXaWR0aCcsIDkpXG4gICAgICAgIC5hdHRyKCdtYXJrZXJIZWlnaHQnLCA5KVxuICAgICAgICAuYXR0cignb3JpZW50JywgJ2F1dG8nKVxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2QnLCAnTSAwIDAgTCAxMCA1IEwgMCAxMCB6JylcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgb3B0aW9ucy5jb2xvciB8fCAnIzMzMycpO1xuICAgICAgXG4gICAgICBwYXRoLmF0dHIoJ21hcmtlci1lbmQnLCBgdXJsKCNhcnJvd2hlYWQtJHtzdmdJZH0pYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSB0aGUgRDNMaW5lIG9iamVjdCB3aXRoIEFQSSBzaW1pbGFyIHRvIExlYWRlckxpbmVcbiAgICBjb25zdCBkM0xpbmU6IEQzTGluZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlRWxlbWVudCxcbiAgICAgIHRhcmdldDogdGFyZ2V0RWxlbWVudCxcbiAgICAgIHBhdGg6IHBhdGgsXG4gICAgICBzdmc6IHN2ZyxcbiAgICAgIFxuICAgICAgLy8gUG9zaXRpb24gbWV0aG9kIHRvIHVwZGF0ZSBsaW5lIGNvb3JkaW5hdGVzXG4gICAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIEdldCB1cGRhdGVkIHBvc2l0aW9uc1xuICAgICAgICBjb25zdCB1cGRhdGVkU291cmNlUmVjdCA9IHNvdXJjZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRUYXJnZXRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTb3VyY2UgLSBhbHdheXMgY29ubmVjdCBmcm9tIHRoZSByaWdodCBlZGdlXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTb3VyY2VYID0gdXBkYXRlZFNvdXJjZVJlY3QucmlnaHQgLSB1cGRhdGVkQ29udGFpbmVyUmVjdC5sZWZ0O1xuICAgICAgICBjb25zdCB1cGRhdGVkU291cmNlWSA9IHVwZGF0ZWRTb3VyY2VSZWN0LnRvcCArICh1cGRhdGVkU291cmNlUmVjdC5oZWlnaHQgLyAyKSAtIHVwZGF0ZWRDb250YWluZXJSZWN0LnRvcDtcbiAgICAgICAgXG4gICAgICAgIC8vIFRhcmdldCAtIGFsd2F5cyBjb25uZWN0IHRvIHRoZSBsZWZ0IGVkZ2VcbiAgICAgICAgY29uc3QgdXBkYXRlZFRhcmdldFggPSB1cGRhdGVkVGFyZ2V0UmVjdC5sZWZ0IC0gdXBkYXRlZENvbnRhaW5lclJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgdXBkYXRlZFRhcmdldFkgPSB1cGRhdGVkVGFyZ2V0UmVjdC50b3AgKyAodXBkYXRlZFRhcmdldFJlY3QuaGVpZ2h0IC8gMikgLSB1cGRhdGVkQ29udGFpbmVyUmVjdC50b3A7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgcGF0aCB3aXRoIGdyaWQgcGF0aFxuICAgICAgICBjb25zdCBtaWRYID0gdXBkYXRlZFNvdXJjZVggKyAodXBkYXRlZFRhcmdldFggLSB1cGRhdGVkU291cmNlWCkgLyAyO1xuICAgICAgICBwYXRoLmF0dHIoJ2QnLCBgTSAke3VwZGF0ZWRTb3VyY2VYfSAke3VwZGF0ZWRTb3VyY2VZfSBMICR7bWlkWH0gJHt1cGRhdGVkU291cmNlWX0gTCAke21pZFh9ICR7dXBkYXRlZFRhcmdldFl9IEwgJHt1cGRhdGVkVGFyZ2V0WH0gJHt1cGRhdGVkVGFyZ2V0WX1gKVxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5Jywgb3B0aW9ucy5kYXNoZWQgPyAnNSw1JyA6ICdub25lJylcbiAgICAgICAgICAgIC8vIEVuc3VyZSBtYXJrZXJzIGFyZSBwcmVzZXJ2ZWQgZHVyaW5nIHJlcG9zaXRpb25pbmdcbiAgICAgICAgICAgIC5hdHRyKCdtYXJrZXItc3RhcnQnLCBvcHRpb25zLnN0YXJ0UGx1ZyAhPT0gZmFsc2UgPyBgdXJsKCNzdGFydC1jaXJjbGUtJHtzdmdJZH0pYCA6IG51bGwpXG4gICAgICAgICAgICAuYXR0cignbWFya2VyLWVuZCcsIG9wdGlvbnMuZW5kUGx1ZyAhPT0gZmFsc2UgPyBgdXJsKCNhcnJvd2hlYWQtJHtzdmdJZH0pYCA6IG51bGwpO1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gU2hvdyBtZXRob2Qgd2l0aCBhbmltYXRpb24gb3B0aW9uXG4gICAgICBzaG93OiBmdW5jdGlvbihhbmltYXRpb24gPSAnJykge1xuICAgICAgICBpZiAoYW5pbWF0aW9uID09PSAnZHJhdycpIHtcbiAgICAgICAgICAvLyBFbnN1cmUgdGhlIHBhdGggaGFzIGEgbm9kZSBiZWZvcmUgY2FsY3VsYXRpbmcgdG90YWwgbGVuZ3RoXG4gICAgICAgICAgY29uc3QgcGF0aE5vZGUgPSBwYXRoLm5vZGUoKTtcbiAgICAgICAgICBpZiAoIXBhdGhOb2RlKSByZXR1cm47XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdG90YWxMZW5ndGggPSBwYXRoTm9kZS5nZXRUb3RhbExlbmd0aCgpO1xuICAgICAgICAgIFxuICAgICAgICAgIHBhdGguc3R5bGUoJ29wYWNpdHknLCAxKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCB0b3RhbExlbmd0aClcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaG9mZnNldCcsIHRvdGFsTGVuZ3RoKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKG9wdGlvbnMuYW5pbU9wdGlvbnM/LmR1cmF0aW9uIHx8IDIwMDApXG4gICAgICAgICAgICAuZWFzZShkMy5lYXNlTGluZWFyKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNob2Zmc2V0JywgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aC5zdHlsZSgnb3BhY2l0eScsIDEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBSZW1vdmUgbWV0aG9kXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzdmcucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBJbW1lZGlhdGVseSBjYWxsIHNob3cgdG8gbWFrZSB0aGUgbGluZSB2aXNpYmxlXG4gICAgZDNMaW5lLnNob3cob3B0aW9ucy5hbmltYXRpb24pO1xuICAgIFxuICAgIHJldHVybiBkM0xpbmU7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0b3JzTWFwKG1hcDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0b3JNYXAgPSBtYXA7XG4gIH1cblxuICBwb3NpdGlvbihsaW5lOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWxpbmUgfHwgIWxpbmUucG9zaXRpb24pIHJldHVybjtcbiAgICBcbiAgICB0aGlzLmVsbVdyYXBwZXIuc3R5bGUudHJhbnNmb3JtID0gJ25vbmUnO1xuICAgIHZhciByZWN0V3JhcHBlciA9IHRoaXMuZWxtV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAvLyBNb3ZlIHRvIHRoZSBvcmlnaW4gb2YgY29vcmRpbmF0ZXMgYXMgdGhlIGRvY3VtZW50XG4gICAgdGhpcy5lbG1XcmFwcGVyLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoJyArXG4gICAgICAoKHJlY3RXcmFwcGVyLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpICogLTEpICsgJ3B4LCAnICtcbiAgICAgICgocmVjdFdyYXBwZXIudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0KSAqIC0xKSArICdweCknO1xuICAgIFxuICAgIGxpbmUucG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlbW92ZUFsbExpbmVzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuY29ubmVjdG9yTWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbm5lY3Rvck1hcCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIG4tMSBsaW5lcyBhbmQga2VlcCBvbmx5IGN1cnJlbnQgc2VsZWN0aW9uLCBhbHNvIGNsZWFyIG4rMSBsaW5lc1xuICAgICAgICBpZih0aGlzLmNvbm5lY3Rvck1hcFtrZXldICYmIHRoaXMuY29ubmVjdG9yTWFwW2tleV0ubGluZXMgJiYgdGhpcy5jb25uZWN0b3JNYXBba2V5XS5saW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSB0aGlzLmNvbm5lY3Rvck1hcFtrZXldLmxpbmVzO1xuICAgICAgICAgIGxpbmVzLmZvckVhY2goYXN5bmMgKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBlbGVtZW50LmxpbmUgJiYgZWxlbWVudC5saW5lLnJlbW92ZSgpO1xuICAgICAgICAgICAgICBsaW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY29ubmVjdG9yTWFwW2tleV0ubGluZXMgPSBsaW5lcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB0byByZXNldCBjb25uZWN0b3IgbWFwIGFmdGVyIGNsZWFyaW5nIGFsbCB0aGUgbGluZXNcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3RvcnNNYXAoe30pO1xuICB9XG5cbiAgcmVwb3NpdGlvbkFsbExpbmVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rvck1hcCkge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbm5lY3Rvck1hcCkuZm9yRWFjaCgoY29ubmVjdG9yOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbm5lY3RvciAmJiBjb25uZWN0b3IubGluZXMpIHtcbiAgICAgICAgICBjb25uZWN0b3IubGluZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5saW5lICYmIHR5cGVvZiBpdGVtLmxpbmUucG9zaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgaXRlbS5saW5lLnBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSJdfQ==
|