occam-directed-graphs 3.0.37 → 3.0.41
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/README.md +34 -49
- package/lib/cycle.js +31 -14
- package/lib/directedGraph.js +215 -201
- package/lib/index.js +9 -1
- package/lib/utilities/index.js +40 -0
- package/lib/utilities/search.js +91 -0
- package/lib/utilities/vertex.js +11 -50
- package/lib/vertex.js +88 -251
- package/package.json +6 -7
- package/src/cycle.js +8 -28
- package/src/directedGraph.js +277 -198
- package/src/index.js +2 -0
- package/src/utilities/index.js +25 -0
- package/src/utilities/search.js +69 -0
- package/src/utilities/vertex.js +6 -61
- package/src/vertex.js +92 -261
- package/test/cirectedGraph.js +589 -0
- package/bin/main.js +0 -15
- package/lib/directedAcyclicGraph.js +0 -364
- package/lib/example.js +0 -21
- package/lib/partialCycle.js +0 -102
- package/lib/utilities/edge.js +0 -65
- package/src/directedAcyclicGraph.js +0 -422
- package/src/example.js +0 -22
- package/src/partialCycle.js +0 -69
- package/src/utilities/edge.js +0 -58
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DirectedAcyclicGraph;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _necessary = require("necessary");
|
|
12
|
-
var _edge = /*#__PURE__*/ _interop_require_default(require("./edge"));
|
|
13
|
-
var _vertex = /*#__PURE__*/ _interop_require_default(require("./vertex"));
|
|
14
|
-
var _vertex1 = require("./utilities/vertex");
|
|
15
|
-
function _class_call_check(instance, Constructor) {
|
|
16
|
-
if (!(instance instanceof Constructor)) {
|
|
17
|
-
throw new TypeError("Cannot call a class as a function");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function _defineProperties(target, props) {
|
|
21
|
-
for(var i = 0; i < props.length; i++){
|
|
22
|
-
var descriptor = props[i];
|
|
23
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
24
|
-
descriptor.configurable = true;
|
|
25
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
26
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
30
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
31
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
32
|
-
return Constructor;
|
|
33
|
-
}
|
|
34
|
-
function _interop_require_default(obj) {
|
|
35
|
-
return obj && obj.__esModule ? obj : {
|
|
36
|
-
default: obj
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
var last = _necessary.arrayUtilities.last;
|
|
40
|
-
var DirectedAcyclicGraph = /*#__PURE__*/ function() {
|
|
41
|
-
function DirectedAcyclicGraph(vertexMap) {
|
|
42
|
-
_class_call_check(this, DirectedAcyclicGraph);
|
|
43
|
-
this.vertexMap = vertexMap;
|
|
44
|
-
}
|
|
45
|
-
_create_class(DirectedAcyclicGraph, [
|
|
46
|
-
{
|
|
47
|
-
key: "isEmpty",
|
|
48
|
-
value: function isEmpty() {
|
|
49
|
-
var vertices = this.getVertices(), verticesLength = vertices.length, empty = verticesLength === 0;
|
|
50
|
-
return empty;
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
key: "getVertices",
|
|
55
|
-
value: function getVertices() {
|
|
56
|
-
var vertexMapValues = Object.values(this.vertexMap), vertices = vertexMapValues; ///
|
|
57
|
-
return vertices;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
key: "getVertexNames",
|
|
62
|
-
value: function getVertexNames() {
|
|
63
|
-
var vertexMapKeys = Object.keys(this.vertexMap), vertexNames = vertexMapKeys; ///
|
|
64
|
-
return vertexNames;
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
key: "getVertexByVertexName",
|
|
69
|
-
value: function getVertexByVertexName(vertexName) {
|
|
70
|
-
var vertexPresent = this.isVertexPresentByVertexName(vertexName), vertex = vertexPresent ? this.vertexMap[vertexName] : null;
|
|
71
|
-
return vertex;
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
key: "getImmediatePredecessorVertexNamesByVertexName",
|
|
76
|
-
value: function getImmediatePredecessorVertexNamesByVertexName(vertexName) {
|
|
77
|
-
var vertex = this.getVertexByVertexName(vertexName), immediatePredecessorVertexNames = vertex.getImmediatePredecessorVertexNames();
|
|
78
|
-
return immediatePredecessorVertexNames;
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
key: "getImmediateSuccessorVertexNamesByVertexName",
|
|
83
|
-
value: function getImmediateSuccessorVertexNamesByVertexName(vertexName) {
|
|
84
|
-
var vertex = this.getVertexByVertexName(vertexName), immediateSuccessorVertexNames = vertex.getImmediateSuccessorVertexNames();
|
|
85
|
-
return immediateSuccessorVertexNames;
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
key: "getPredecessorVertexNamesByVertexName",
|
|
90
|
-
value: function getPredecessorVertexNamesByVertexName(vertexName) {
|
|
91
|
-
var vertex = this.getVertexByVertexName(vertexName), predecessorVertexNames = vertex.getPredecessorVertexNames();
|
|
92
|
-
return predecessorVertexNames;
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
key: "getSuccessorVertexNamesByVertexName",
|
|
97
|
-
value: function getSuccessorVertexNamesByVertexName(vertexName) {
|
|
98
|
-
var vertex = this.getVertexByVertexName(vertexName), successorVertexNames = vertex.getSuccessorVertexNames();
|
|
99
|
-
return successorVertexNames;
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
key: "getEdgesByTargetVertexName",
|
|
104
|
-
value: function getEdgesByTargetVertexName(targetVertexName) {
|
|
105
|
-
var edges = [], targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
106
|
-
if (targetVertex !== null) {
|
|
107
|
-
var immediatePredecessorVertexNames = targetVertex.getImmediatePredecessorVertexNames(), sourceVertexNames = immediatePredecessorVertexNames; ///
|
|
108
|
-
sourceVertexNames.forEach(function(sourceVertexName) {
|
|
109
|
-
var edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
110
|
-
edges.push(edge);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return edges;
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
key: "getEdgesBySourceVertexName",
|
|
118
|
-
value: function getEdgesBySourceVertexName(sourceVertexName) {
|
|
119
|
-
var edges = [], sourceVertex = this.getVertexByVertexName(sourceVertexName);
|
|
120
|
-
if (sourceVertex !== null) {
|
|
121
|
-
var immediateSuccessorVertexNames = sourceVertex.getImmediateSuccessorVertexNames(), targetVertexNames = immediateSuccessorVertexNames; ///
|
|
122
|
-
targetVertexNames.forEach(function(targetVertexName) {
|
|
123
|
-
var edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
124
|
-
edges.push(edge);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
return edges;
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
key: "setVertexByVertexName",
|
|
132
|
-
value: function setVertexByVertexName(vertexName, vertex) {
|
|
133
|
-
this.vertexMap[vertexName] = vertex;
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
key: "deleteVertexByVertexName",
|
|
138
|
-
value: function deleteVertexByVertexName(vertexName) {
|
|
139
|
-
delete this.vertexMap[vertexName];
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
key: "isEdgePresent",
|
|
144
|
-
value: function isEdgePresent(edge) {
|
|
145
|
-
var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), edgePresent = this.isEdgePresentByVertexNames(sourceVertexName, targetVertexName);
|
|
146
|
-
return edgePresent;
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
key: "isEdgePresentByVertexNames",
|
|
151
|
-
value: function isEdgePresentByVertexNames(sourceVertexName, targetVertexName) {
|
|
152
|
-
var edgePresent = false;
|
|
153
|
-
var sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName), sourceVertexAndTargetVertexPresent = sourceVertex !== null && targetVertex !== null;
|
|
154
|
-
if (sourceVertexAndTargetVertexPresent) {
|
|
155
|
-
edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
|
|
156
|
-
}
|
|
157
|
-
return edgePresent;
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
key: "isVertexPresentByVertexName",
|
|
162
|
-
value: function isVertexPresentByVertexName(vertexName) {
|
|
163
|
-
var vertexNames = this.getVertexNames(), vertexNamesIncludesVertexName = vertexNames.includes(vertexName), vertexPresent = vertexNamesIncludesVertexName; ///
|
|
164
|
-
return vertexPresent;
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
key: "getOrderedVertexNames",
|
|
169
|
-
value: function getOrderedVertexNames() {
|
|
170
|
-
var vertices = this.getVertices();
|
|
171
|
-
(0, _vertex1.orderVertices)(vertices);
|
|
172
|
-
var orderedVertices = vertices, orderedVertexNames = (0, _vertex1.vertexNamesFromVertices)(orderedVertices);
|
|
173
|
-
return orderedVertexNames;
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
key: "addEdge",
|
|
178
|
-
value: function addEdge(edge) {
|
|
179
|
-
var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), success = this.addEdgeByVertexNames(sourceVertexName, targetVertexName);
|
|
180
|
-
return success;
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
key: "removeEdge",
|
|
185
|
-
value: function removeEdge(edge) {
|
|
186
|
-
var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName();
|
|
187
|
-
this.removeEdgeByVertexNames(sourceVertexName, targetVertexName);
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
key: "addEdgeByVertexNames",
|
|
192
|
-
value: function addEdgeByVertexNames(sourceVertexName, targetVertexName) {
|
|
193
|
-
var success = false;
|
|
194
|
-
if (sourceVertexName !== targetVertexName) {
|
|
195
|
-
var sourceVertex = this.addVertexByVertexName(sourceVertexName), targetVertex = this.addVertexByVertexName(targetVertexName), edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
|
|
196
|
-
if (edgePresent) {
|
|
197
|
-
success = true;
|
|
198
|
-
} else {
|
|
199
|
-
var sourceVertexIndex = sourceVertex.getIndex(), targetVertexIndex = targetVertex.getIndex(), invalidatingEdge = sourceVertexIndex > targetVertexIndex;
|
|
200
|
-
success = invalidatingEdge ? addInvalidatingEdgeByVertices(sourceVertex, targetVertex) : true;
|
|
201
|
-
if (success) {
|
|
202
|
-
var immediatePredecessorVertex = sourceVertex, immediateSuccessorVertex = targetVertex; ///
|
|
203
|
-
immediatePredecessorVertex.addImmediateSuccessorVertex(immediateSuccessorVertex);
|
|
204
|
-
immediateSuccessorVertex.addImmediatePredecessorVertex(immediatePredecessorVertex);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return success;
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
key: "removeEdgeByVertexNames",
|
|
213
|
-
value: function removeEdgeByVertexNames(sourceVertexName, targetVertexName) {
|
|
214
|
-
var edgePresent = this.isEdgePresentByVertexNames(sourceVertexName, targetVertexName);
|
|
215
|
-
if (edgePresent) {
|
|
216
|
-
var sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
217
|
-
sourceVertex.removeImmediateSuccessorVertex(targetVertex);
|
|
218
|
-
targetVertex.removeImmediatePredecessorVertex(sourceVertex);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
key: "removeEdgesBySourceVertexName",
|
|
224
|
-
value: function removeEdgesBySourceVertexName(sourceVertexName) {
|
|
225
|
-
var sourceVertexPresent = this.isVertexPresentByVertexName(sourceVertexName);
|
|
226
|
-
if (sourceVertexPresent) {
|
|
227
|
-
var sourceVertex = this.getVertexByVertexName(sourceVertexName);
|
|
228
|
-
sourceVertex.removeOutgoingEdges();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
key: "removeEdgesByTargetVertexName",
|
|
234
|
-
value: function removeEdgesByTargetVertexName(targetVertexName) {
|
|
235
|
-
var targetVertexPresent = this.isVertexPresentByVertexName(targetVertexName);
|
|
236
|
-
if (targetVertexPresent) {
|
|
237
|
-
var targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
238
|
-
targetVertex.removeIncomingEdges();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
key: "addVertexByVertexName",
|
|
244
|
-
value: function addVertexByVertexName(vertexName) {
|
|
245
|
-
var vertexPresent = this.isVertexPresentByVertexName(vertexName);
|
|
246
|
-
if (!vertexPresent) {
|
|
247
|
-
var vertexNames = this.getVertexNames(), vertexNamesLength = vertexNames.length, name = vertexName, index = vertexNamesLength, vertex = _vertex.default.fromNameAndIndex(name, index);
|
|
248
|
-
this.setVertexByVertexName(vertexName, vertex);
|
|
249
|
-
}
|
|
250
|
-
var vertex1 = this.getVertexByVertexName(vertexName);
|
|
251
|
-
return vertex1;
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
key: "removeVertexByVertexName",
|
|
256
|
-
value: function removeVertexByVertexName(vertexName) {
|
|
257
|
-
var removedEdges = null;
|
|
258
|
-
var vertexPresent = this.isVertexPresentByVertexName(vertexName);
|
|
259
|
-
if (vertexPresent) {
|
|
260
|
-
removedEdges = [];
|
|
261
|
-
var vertex = this.getVertexByVertexName(vertexName);
|
|
262
|
-
vertex.forEachImmediateSuccessorVertex(function(immediateSuccessVertex) {
|
|
263
|
-
var immediatePredecessorVertex = vertex, immediatePredecessorVertexName = immediatePredecessorVertex.getName(), immediateSuccessVertexName = immediateSuccessVertex.getName(), removedEdgeSourceVertexName = immediatePredecessorVertexName, removedEdgeTargetVertexName = immediateSuccessVertexName, removedEdge = new _edge.default(removedEdgeSourceVertexName, removedEdgeTargetVertexName);
|
|
264
|
-
removedEdges.push(removedEdge);
|
|
265
|
-
immediateSuccessVertex.removeImmediatePredecessorVertex(immediatePredecessorVertex);
|
|
266
|
-
});
|
|
267
|
-
vertex.forEachImmediatePredecessorVertex(function(immediatePredecessorVertex) {
|
|
268
|
-
var immediateSuccessVertex = vertex, immediatePredecessorVertexName = immediatePredecessorVertex.getName(), immediateSuccessVertexName = immediateSuccessVertex.getName(), removedEdgeSourceVertexName = immediatePredecessorVertexName, removedEdgeTargetVertexName = immediateSuccessVertexName, removedEdge = new _edge.default(removedEdgeSourceVertexName, removedEdgeTargetVertexName);
|
|
269
|
-
removedEdges.push(removedEdge);
|
|
270
|
-
immediatePredecessorVertex.removeImmediateSuccessorVertex(immediateSuccessVertex);
|
|
271
|
-
});
|
|
272
|
-
this.deleteVertexByVertexName(vertexName);
|
|
273
|
-
var deletedVertex = vertex, deletedVertexIndex = deletedVertex.getIndex(), vertices = this.getVertices(), affectedVertices = vertices.reduce(function(affectedVertices, vertex) {
|
|
274
|
-
var vertexIndex = vertex.getIndex(), vertexAffected = vertexIndex > deletedVertexIndex;
|
|
275
|
-
if (vertexAffected) {
|
|
276
|
-
var affectedVertex = vertex; ///
|
|
277
|
-
affectedVertices.push(affectedVertex);
|
|
278
|
-
}
|
|
279
|
-
return affectedVertices;
|
|
280
|
-
}, []);
|
|
281
|
-
affectedVertices.forEach(function(affectedVertex) {
|
|
282
|
-
return affectedVertex.decrementIndex();
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
return removedEdges;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
], [
|
|
289
|
-
{
|
|
290
|
-
key: "fromNothing",
|
|
291
|
-
value: function fromNothing() {
|
|
292
|
-
var vertexMap = {}, directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
|
|
293
|
-
return directedAcyclicGraph;
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
key: "fromVertexNames",
|
|
298
|
-
value: function fromVertexNames(vertexNames) {
|
|
299
|
-
var vertexMap = vertexMapFromVertexNames(vertexNames);
|
|
300
|
-
var directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
|
|
301
|
-
return directedAcyclicGraph;
|
|
302
|
-
}
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
key: "fromOrderedVertices",
|
|
306
|
-
value: function fromOrderedVertices(orderedVertices) {
|
|
307
|
-
var vertexMap = vertexMapFromOrderedVertices(orderedVertices);
|
|
308
|
-
addEdgesToVertices(orderedVertices, vertexMap);
|
|
309
|
-
var directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
|
|
310
|
-
return directedAcyclicGraph;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
]);
|
|
314
|
-
return DirectedAcyclicGraph;
|
|
315
|
-
}();
|
|
316
|
-
function addInvalidatingEdgeByVertices(sourceVertex, targetVertex) {
|
|
317
|
-
var success = false;
|
|
318
|
-
var forwardsAffectedVertices = targetVertex.retrieveForwardsAffectedVertices(sourceVertex), lastForwardsAffectedVertex = last(forwardsAffectedVertices), resultsInCycle = lastForwardsAffectedVertex === sourceVertex;
|
|
319
|
-
if (!resultsInCycle) {
|
|
320
|
-
var backwardsAffectedVertices = sourceVertex.retrieveBackwardsAffectedVertices();
|
|
321
|
-
(0, _vertex1.orderVertices)(backwardsAffectedVertices);
|
|
322
|
-
(0, _vertex1.orderVertices)(forwardsAffectedVertices);
|
|
323
|
-
var affectedVertices = [].concat(backwardsAffectedVertices).concat(forwardsAffectedVertices), affectedVertexIndices = affectedVertices.map(function(affectedVertex) {
|
|
324
|
-
var affectedVertexIndex = affectedVertex.getIndex();
|
|
325
|
-
return affectedVertexIndex;
|
|
326
|
-
});
|
|
327
|
-
affectedVertexIndices.sort(function(indexA, indexB) {
|
|
328
|
-
return indexA - indexB;
|
|
329
|
-
});
|
|
330
|
-
affectedVertices.forEach(function(affectedVertex, index) {
|
|
331
|
-
var affectedVertexIndex = affectedVertexIndices[index];
|
|
332
|
-
affectedVertex.setIndex(affectedVertexIndex);
|
|
333
|
-
});
|
|
334
|
-
success = true;
|
|
335
|
-
}
|
|
336
|
-
return success;
|
|
337
|
-
}
|
|
338
|
-
function vertexMapFromVertexNames(vertexNames) {
|
|
339
|
-
var vertexMap = {};
|
|
340
|
-
vertexNames.forEach(function(vertexName, index) {
|
|
341
|
-
var name = vertexName, vertex = _vertex.default.fromNameAndIndex(name, index);
|
|
342
|
-
vertexMap[vertexName] = vertex;
|
|
343
|
-
});
|
|
344
|
-
return vertexMap;
|
|
345
|
-
}
|
|
346
|
-
function vertexMapFromOrderedVertices(orderedVertices) {
|
|
347
|
-
var vertexMap = {};
|
|
348
|
-
orderedVertices.forEach(function(orderedVertex, index) {
|
|
349
|
-
var name = orderedVertex.getName(), vertex = _vertex.default.fromNameAndIndex(name, index), vertexName = name; ///
|
|
350
|
-
vertexMap[vertexName] = vertex;
|
|
351
|
-
});
|
|
352
|
-
return vertexMap;
|
|
353
|
-
}
|
|
354
|
-
function addEdgesToVertices(orderedVertices, vertexMap) {
|
|
355
|
-
orderedVertices.forEach(function(orderedVertex) {
|
|
356
|
-
orderedVertex.forEachOutgoingEdge(function(outgoingEdge) {
|
|
357
|
-
var sourceVertexName = outgoingEdge.getSourceVertexName(), targetVertexName = outgoingEdge.getTargetVertexName(), immediatePredecessorVertexName = sourceVertexName, immediateSuccessorVertexName = targetVertexName, immediatePredecessorVertex = vertexMap[immediatePredecessorVertexName], immediateSuccessorVertex = vertexMap[immediateSuccessorVertexName]; ///
|
|
358
|
-
immediatePredecessorVertex.addImmediateSuccessorVertex(immediateSuccessorVertex);
|
|
359
|
-
immediateSuccessorVertex.addImmediatePredecessorVertex(immediatePredecessorVertex);
|
|
360
|
-
});
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RlZEFjeWNsaWNHcmFwaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFZGdlIGZyb20gXCIuL2VkZ2VcIjtcbmltcG9ydCBWZXJ0ZXggZnJvbSBcIi4vdmVydGV4XCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRpY2VzLCBvcmRlclZlcnRpY2VzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RlZEFjeWNsaWNHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKHZlcnRleE1hcCkge1xuICAgIHRoaXMudmVydGV4TWFwID0gdmVydGV4TWFwO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IHRoaXMuZ2V0VmVydGljZXMoKSxcbiAgICAgICAgICB2ZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9ICh2ZXJ0aWNlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBnZXRWZXJ0aWNlcygpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXBWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHRoaXMudmVydGV4TWFwKSxcbiAgICAgICAgICB2ZXJ0aWNlcyA9IHZlcnRleE1hcFZhbHVlczsgLy8vXG5cbiAgICByZXR1cm4gdmVydGljZXM7XG4gIH1cblxuICBnZXRWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXBLZXlzID0gT2JqZWN0LmtleXModGhpcy52ZXJ0ZXhNYXApLFxuICAgICAgICAgIHZlcnRleE5hbWVzID0gdmVydGV4TWFwS2V5czsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgdmVydGV4ID0gdmVydGV4UHJlc2VudCA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA6XG4gICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICByZXR1cm4gdmVydGV4O1xuICB9XG5cbiAgZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzKCk7XG5cbiAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpO1xuXG4gICAgcmV0dXJuIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzKCk7XG5cbiAgICByZXR1cm4gcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldFN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3NvclZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0RWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW10sXG4gICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVydGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzID0gdGFyZ2V0VmVydGV4LmdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMoKSxcbiAgICAgICAgICAgIHNvdXJjZVZlcnRleE5hbWVzID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICBzb3VyY2VWZXJ0ZXhOYW1lcy5mb3JFYWNoKChzb3VyY2VWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgZ2V0RWRnZXNCeVNvdXJjZVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW10sXG4gICAgICAgICAgc291cmNlVmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSk7XG5cbiAgICBpZiAoc291cmNlVmVydGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHNvdXJjZVZlcnRleC5nZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZXMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICB0YXJnZXRWZXJ0ZXhOYW1lcy5mb3JFYWNoKCh0YXJnZXRWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCkge1xuICAgIHRoaXMudmVydGV4TWFwW3ZlcnRleE5hbWVdID0gdmVydGV4O1xuICB9XG5cbiAgZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy52ZXJ0ZXhNYXBbdmVydGV4TmFtZV07XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50KGVkZ2UpIHtcbiAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGVkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGhpcy5pc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICBcbiAgICByZXR1cm4gZWRnZVByZXNlbnQ7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgbGV0IGVkZ2VQcmVzZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBzb3VyY2VWZXJ0ZXhBbmRUYXJnZXRWZXJ0ZXhQcmVzZW50ID0gKHNvdXJjZVZlcnRleCAhPT0gbnVsbCkgJiYgKHRhcmdldFZlcnRleCAhPT0gbnVsbCk7XG5cbiAgICBpZiAoc291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4UHJlc2VudCkge1xuICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXguaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4KHRhcmdldFZlcnRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhOYW1lcyA9IHRoaXMuZ2V0VmVydGV4TmFtZXMoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZSA9IHZlcnRleE5hbWVzLmluY2x1ZGVzKHZlcnRleE5hbWUpLFxuICAgICAgICAgIHZlcnRleFByZXNlbnQgPSB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRleFByZXNlbnQ7XG4gIH1cblxuICBnZXRPcmRlcmVkVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgdmVydGljZXMgPSB0aGlzLmdldFZlcnRpY2VzKCk7XG5cbiAgICBvcmRlclZlcnRpY2VzKHZlcnRpY2VzKTtcblxuICAgIGNvbnN0IG9yZGVyZWRWZXJ0aWNlcyA9IHZlcnRpY2VzLCAvLy9cbiAgICAgICAgICBvcmRlcmVkVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyhvcmRlcmVkVmVydGljZXMpO1xuXG4gICAgcmV0dXJuIG9yZGVyZWRWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGFkZEVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgc3VjY2VzcyA9IHRoaXMuYWRkRWRnZUJ5VmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHJlbW92ZUVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCk7XG5cbiAgICB0aGlzLnJlbW92ZUVkZ2VCeVZlcnRleE5hbWVzKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuICB9XG5cbiAgYWRkRWRnZUJ5VmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBpZiAoc291cmNlVmVydGV4TmFtZSAhPT0gdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgICAgY29uc3Qgc291cmNlVmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmFkZFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGVkZ2VQcmVzZW50ID0gc291cmNlVmVydGV4LmlzRWRnZVByZXNlbnRCeVRhcmdldFZlcnRleCh0YXJnZXRWZXJ0ZXgpO1xuICAgICAgXG4gICAgICBpZiAoZWRnZVByZXNlbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhJbmRleCA9IHNvdXJjZVZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhJbmRleCA9IHRhcmdldFZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgICBpbnZhbGlkYXRpbmdFZGdlID0gKHNvdXJjZVZlcnRleEluZGV4ID4gdGFyZ2V0VmVydGV4SW5kZXgpO1xuXG4gICAgICAgIHN1Y2Nlc3MgPSBpbnZhbGlkYXRpbmdFZGdlID9cbiAgICAgICAgICAgICAgICAgICAgYWRkSW52YWxpZGF0aW5nRWRnZUJ5VmVydGljZXMoc291cmNlVmVydGV4LCB0YXJnZXRWZXJ0ZXgpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSBzb3VyY2VWZXJ0ZXgsIC8vL1xuICAgICAgICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCA9IHRhcmdldFZlcnRleDsgLy8vXG5cbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KTtcblxuICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICByZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgZWRnZVByZXNlbnQgPSB0aGlzLmlzRWRnZVByZXNlbnRCeVZlcnRleE5hbWVzKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgaWYgKGVkZ2VQcmVzZW50KSB7XG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIHRhcmdldFZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgICBzb3VyY2VWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KHRhcmdldFZlcnRleCk7XG4gICAgICB0YXJnZXRWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoc291cmNlVmVydGV4KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVFZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4UHJlc2VudCA9IHRoaXMuaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKHNvdXJjZVZlcnRleFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgICBzb3VyY2VWZXJ0ZXgucmVtb3ZlT3V0Z29pbmdFZGdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB0YXJnZXRWZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVydGV4UHJlc2VudCkge1xuICAgICAgY29uc3QgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICAgIHRhcmdldFZlcnRleC5yZW1vdmVJbmNvbWluZ0VkZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAoIXZlcnRleFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZlcnRleE5hbWVzID0gdGhpcy5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgICAgdmVydGV4TmFtZXNMZW5ndGggPSB2ZXJ0ZXhOYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICBuYW1lID0gdmVydGV4TmFtZSwgIC8vL1xuICAgICAgICAgICAgaW5kZXggPSB2ZXJ0ZXhOYW1lc0xlbmd0aCwgLy8vXG4gICAgICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXguZnJvbU5hbWVBbmRJbmRleChuYW1lLCBpbmRleCk7XG5cbiAgICAgIHRoaXMuc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gdmVydGV4O1xuICB9XG5cbiAgcmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBsZXQgcmVtb3ZlZEVkZ2VzID0gbnVsbDtcblxuICAgIGNvbnN0IHZlcnRleFByZXNlbnQgPSB0aGlzLmlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIGlmICh2ZXJ0ZXhQcmVzZW50KSB7XG4gICAgICByZW1vdmVkRWRnZXMgPSBbXTtcblxuICAgICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICAgIHZlcnRleC5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzVmVydGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdmVydGV4LCAgLy8vXG4gICAgICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZSA9IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUgPSBpbW1lZGlhdGVTdWNjZXNzVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lLCAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUsIC8vL1xuICAgICAgICAgICAgICByZW1vdmVkRWRnZSA9IG5ldyBFZGdlKHJlbW92ZWRFZGdlU291cmNlVmVydGV4TmFtZSwgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICByZW1vdmVkRWRnZXMucHVzaChyZW1vdmVkRWRnZSk7XG5cbiAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleC5yZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgICB9KTtcblxuICAgICAgdmVydGV4LmZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleCA9IHZlcnRleCwgIC8vL1xuICAgICAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUgPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleC5nZXROYW1lKCksICAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lLCAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUsIC8vL1xuICAgICAgICAgICAgICByZW1vdmVkRWRnZSA9IG5ldyBFZGdlKHJlbW92ZWRFZGdlU291cmNlVmVydGV4TmFtZSwgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICByZW1vdmVkRWRnZXMucHVzaChyZW1vdmVkRWRnZSk7XG5cbiAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgICBjb25zdCBkZWxldGVkVmVydGV4ID0gdmVydGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZWRWZXJ0ZXhJbmRleCA9IGRlbGV0ZWRWZXJ0ZXguZ2V0SW5kZXgoKSxcbiAgICAgICAgICAgIHZlcnRpY2VzID0gdGhpcy5nZXRWZXJ0aWNlcygpLFxuICAgICAgICAgICAgYWZmZWN0ZWRWZXJ0aWNlcyA9IHZlcnRpY2VzLnJlZHVjZSgoYWZmZWN0ZWRWZXJ0aWNlcywgdmVydGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRleEluZGV4ID0gdmVydGV4LmdldEluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleEFmZmVjdGVkID0gKHZlcnRleEluZGV4ID4gZGVsZXRlZFZlcnRleEluZGV4KTtcblxuICAgICAgICAgICAgICBpZiAodmVydGV4QWZmZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZmZlY3RlZFZlcnRleCA9IHZlcnRleDsgIC8vL1xuXG4gICAgICAgICAgICAgICAgYWZmZWN0ZWRWZXJ0aWNlcy5wdXNoKGFmZmVjdGVkVmVydGV4KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBhZmZlY3RlZFZlcnRpY2VzO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICBhZmZlY3RlZFZlcnRpY2VzLmZvckVhY2goKGFmZmVjdGVkVmVydGV4KSA9PiBhZmZlY3RlZFZlcnRleC5kZWNyZW1lbnRJbmRleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlZEVkZ2VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHZlcnRleE1hcCA9IHt9LFxuICAgICAgICAgIGRpcmVjdGVkQWN5Y2xpY0dyYXBoID0gbmV3IERpcmVjdGVkQWN5Y2xpY0dyYXBoKHZlcnRleE1hcCk7XG5cbiAgICByZXR1cm4gZGlyZWN0ZWRBY3ljbGljR3JhcGg7XG4gIH1cbiAgXG4gIHN0YXRpYyBmcm9tVmVydGV4TmFtZXModmVydGV4TmFtZXMpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXAgPSB2ZXJ0ZXhNYXBGcm9tVmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgY29uc3QgZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBuZXcgRGlyZWN0ZWRBY3ljbGljR3JhcGgodmVydGV4TWFwKTtcblxuICAgIHJldHVybiBkaXJlY3RlZEFjeWNsaWNHcmFwaDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT3JkZXJlZFZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcykge1xuICAgIGNvbnN0IHZlcnRleE1hcCA9IHZlcnRleE1hcEZyb21PcmRlcmVkVmVydGljZXMob3JkZXJlZFZlcnRpY2VzKTtcbiAgICBcbiAgICBhZGRFZGdlc1RvVmVydGljZXMob3JkZXJlZFZlcnRpY2VzLCB2ZXJ0ZXhNYXApO1xuICAgIFxuICAgIGNvbnN0IGRpcmVjdGVkQWN5Y2xpY0dyYXBoID0gbmV3IERpcmVjdGVkQWN5Y2xpY0dyYXBoKHZlcnRleE1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGRpcmVjdGVkQWN5Y2xpY0dyYXBoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEludmFsaWRhdGluZ0VkZ2VCeVZlcnRpY2VzKHNvdXJjZVZlcnRleCwgdGFyZ2V0VmVydGV4KSB7XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgY29uc3QgZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzID0gdGFyZ2V0VmVydGV4LnJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzKHNvdXJjZVZlcnRleCksXG4gICAgICAgIGxhc3RGb3J3YXJkc0FmZmVjdGVkVmVydGV4ID0gbGFzdChmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMpLFxuICAgICAgICByZXN1bHRzSW5DeWNsZSA9IChsYXN0Rm9yd2FyZHNBZmZlY3RlZFZlcnRleCA9PT0gc291cmNlVmVydGV4KTtcblxuICBpZiAoIXJlc3VsdHNJbkN5Y2xlKSB7XG4gICAgY29uc3QgYmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyA9IHNvdXJjZVZlcnRleC5yZXRyaWV2ZUJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMoKTtcblxuICAgIG9yZGVyVmVydGljZXMoYmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyk7XG5cbiAgICBvcmRlclZlcnRpY2VzKGZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyk7XG5cbiAgICBjb25zdCBhZmZlY3RlZFZlcnRpY2VzID0gW10uY29uY2F0KGJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMpLmNvbmNhdChmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMpLFxuICAgICAgICAgIGFmZmVjdGVkVmVydGV4SW5kaWNlcyA9IGFmZmVjdGVkVmVydGljZXMubWFwKChhZmZlY3RlZFZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWZmZWN0ZWRWZXJ0ZXhJbmRleCA9IGFmZmVjdGVkVmVydGV4LmdldEluZGV4KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBhZmZlY3RlZFZlcnRleEluZGV4O1xuICAgICAgICAgIH0pO1xuXG4gICAgYWZmZWN0ZWRWZXJ0ZXhJbmRpY2VzLnNvcnQoKGluZGV4QSwgaW5kZXhCKSA9PiAoaW5kZXhBIC0gaW5kZXhCKSk7XG5cbiAgICBhZmZlY3RlZFZlcnRpY2VzLmZvckVhY2goKGFmZmVjdGVkVmVydGV4LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYWZmZWN0ZWRWZXJ0ZXhJbmRleCA9IGFmZmVjdGVkVmVydGV4SW5kaWNlc1tpbmRleF07XG5cbiAgICAgIGFmZmVjdGVkVmVydGV4LnNldEluZGV4KGFmZmVjdGVkVmVydGV4SW5kZXgpO1xuICAgIH0pO1xuXG4gICAgc3VjY2VzcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3VjY2Vzcztcbn1cblxuZnVuY3Rpb24gdmVydGV4TWFwRnJvbVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKSB7XG4gIGNvbnN0IHZlcnRleE1hcCA9IHt9O1xuICBcbiAgdmVydGV4TmFtZXMuZm9yRWFjaCgodmVydGV4TmFtZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBuYW1lID0gdmVydGV4TmFtZSwgIC8vL1xuICAgICAgICAgIHZlcnRleCA9IFZlcnRleC5mcm9tTmFtZUFuZEluZGV4KG5hbWUsIGluZGV4KTtcblxuICAgIHZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA9IHZlcnRleDtcbiAgfSk7XG4gIFxuICByZXR1cm4gdmVydGV4TWFwO1xufVxuXG5mdW5jdGlvbiB2ZXJ0ZXhNYXBGcm9tT3JkZXJlZFZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcykge1xuICBjb25zdCB2ZXJ0ZXhNYXAgPSB7fTtcbiAgXG4gIG9yZGVyZWRWZXJ0aWNlcy5mb3JFYWNoKChvcmRlcmVkVmVydGV4LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBvcmRlcmVkVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXguZnJvbU5hbWVBbmRJbmRleChuYW1lLCBpbmRleCksXG4gICAgICAgICAgdmVydGV4TmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIHZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA9IHZlcnRleDtcbiAgfSk7XG5cbiAgcmV0dXJuIHZlcnRleE1hcDtcbn1cblxuZnVuY3Rpb24gYWRkRWRnZXNUb1ZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcywgdmVydGV4TWFwKSB7XG4gIG9yZGVyZWRWZXJ0aWNlcy5mb3JFYWNoKChvcmRlcmVkVmVydGV4KSA9PiB7XG4gICAgb3JkZXJlZFZlcnRleC5mb3JFYWNoT3V0Z29pbmdFZGdlKChvdXRnb2luZ0VkZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBvdXRnb2luZ0VkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IG91dGdvaW5nRWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUgPSBzb3VyY2VWZXJ0ZXhOYW1lLCAgLy8vXG4gICAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lID0gdGFyZ2V0VmVydGV4TmFtZSxcbiAgICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdmVydGV4TWFwW2ltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZV0sIC8vL1xuICAgICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ID0gdmVydGV4TWFwW2ltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVdOyAvLy9cblxuICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXguYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCk7XG5cbiAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIkRpcmVjdGVkQWN5Y2xpY0dyYXBoIiwibGFzdCIsImFycmF5VXRpbGl0aWVzIiwidmVydGV4TWFwIiwiaXNFbXB0eSIsInZlcnRpY2VzIiwiZ2V0VmVydGljZXMiLCJ2ZXJ0aWNlc0xlbmd0aCIsImxlbmd0aCIsImVtcHR5IiwidmVydGV4TWFwVmFsdWVzIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0VmVydGV4TmFtZXMiLCJ2ZXJ0ZXhNYXBLZXlzIiwia2V5cyIsInZlcnRleE5hbWVzIiwiZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lIiwidmVydGV4TmFtZSIsInZlcnRleFByZXNlbnQiLCJpc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUiLCJ2ZXJ0ZXgiLCJnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwicHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldFByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsInN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiZ2V0U3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSIsInRhcmdldFZlcnRleE5hbWUiLCJlZGdlcyIsInRhcmdldFZlcnRleCIsInNvdXJjZVZlcnRleE5hbWVzIiwiZm9yRWFjaCIsInNvdXJjZVZlcnRleE5hbWUiLCJlZGdlIiwiRWRnZSIsImZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZSIsInB1c2giLCJnZXRFZGdlc0J5U291cmNlVmVydGV4TmFtZSIsInNvdXJjZVZlcnRleCIsInRhcmdldFZlcnRleE5hbWVzIiwic2V0VmVydGV4QnlWZXJ0ZXhOYW1lIiwiZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lIiwiaXNFZGdlUHJlc2VudCIsImdldFNvdXJjZVZlcnRleE5hbWUiLCJnZXRUYXJnZXRWZXJ0ZXhOYW1lIiwiZWRnZVByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyIsInNvdXJjZVZlcnRleEFuZFRhcmdldFZlcnRleFByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgiLCJ2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZSIsImluY2x1ZGVzIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwib3JkZXJWZXJ0aWNlcyIsIm9yZGVyZWRWZXJ0aWNlcyIsIm9yZGVyZWRWZXJ0ZXhOYW1lcyIsInZlcnRleE5hbWVzRnJvbVZlcnRpY2VzIiwiYWRkRWRnZSIsInN1Y2Nlc3MiLCJhZGRFZGdlQnlWZXJ0ZXhOYW1lcyIsInJlbW92ZUVkZ2UiLCJyZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyIsImFkZFZlcnRleEJ5VmVydGV4TmFtZSIsInNvdXJjZVZlcnRleEluZGV4IiwiZ2V0SW5kZXgiLCJ0YXJnZXRWZXJ0ZXhJbmRleCIsImludmFsaWRhdGluZ0VkZ2UiLCJhZGRJbnZhbGlkYXRpbmdFZGdlQnlWZXJ0aWNlcyIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiYWRkSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJyZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJyZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsInJlbW92ZUVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lIiwic291cmNlVmVydGV4UHJlc2VudCIsInJlbW92ZU91dGdvaW5nRWRnZXMiLCJyZW1vdmVFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSIsInRhcmdldFZlcnRleFByZXNlbnQiLCJyZW1vdmVJbmNvbWluZ0VkZ2VzIiwidmVydGV4TmFtZXNMZW5ndGgiLCJuYW1lIiwiaW5kZXgiLCJWZXJ0ZXgiLCJmcm9tTmFtZUFuZEluZGV4IiwicmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lIiwicmVtb3ZlZEVkZ2VzIiwiZm9yRWFjaEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsImltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXgiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUiLCJnZXROYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZVNvdXJjZVZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZVRhcmdldFZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZSIsImZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImRlbGV0ZWRWZXJ0ZXgiLCJkZWxldGVkVmVydGV4SW5kZXgiLCJhZmZlY3RlZFZlcnRpY2VzIiwicmVkdWNlIiwidmVydGV4SW5kZXgiLCJ2ZXJ0ZXhBZmZlY3RlZCIsImFmZmVjdGVkVmVydGV4IiwiZGVjcmVtZW50SW5kZXgiLCJmcm9tTm90aGluZyIsImRpcmVjdGVkQWN5Y2xpY0dyYXBoIiwiZnJvbVZlcnRleE5hbWVzIiwidmVydGV4TWFwRnJvbVZlcnRleE5hbWVzIiwiZnJvbU9yZGVyZWRWZXJ0aWNlcyIsInZlcnRleE1hcEZyb21PcmRlcmVkVmVydGljZXMiLCJhZGRFZGdlc1RvVmVydGljZXMiLCJmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMiLCJyZXRyaWV2ZUZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyIsImxhc3RGb3J3YXJkc0FmZmVjdGVkVmVydGV4IiwicmVzdWx0c0luQ3ljbGUiLCJiYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwicmV0cmlldmVCYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwiY29uY2F0IiwiYWZmZWN0ZWRWZXJ0ZXhJbmRpY2VzIiwibWFwIiwiYWZmZWN0ZWRWZXJ0ZXhJbmRleCIsInNvcnQiLCJpbmRleEEiLCJpbmRleEIiLCJzZXRJbmRleCIsIm9yZGVyZWRWZXJ0ZXgiLCJmb3JFYWNoT3V0Z29pbmdFZGdlIiwib3V0Z29pbmdFZGdlIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFXcUJBOzs7eUJBVFU7MkRBRWQ7NkRBQ0U7dUJBRW9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZELElBQU0sQUFBRUMsT0FBU0MsMEJBQVREO0FBRU8sSUFBQSxBQUFNRCxxQ0E2VWxCLEFBN1VZO2FBQU1BLHFCQUNQRyxTQUFTO2dDQURGSDtRQUVqQixJQUFJLENBQUNHLFlBQVlBOztrQkFGQUg7O1lBS25CSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsV0FBVyxJQUFJLENBQUNDLGVBQ2hCQyxpQkFBaUJGLFNBQVNHLFFBQzFCQyxRQUFTRixtQkFBbUI7Z0JBRWxDLE9BQU9FO1lBQ1Q7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
|
package/lib/example.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
var _index = require("./index");
|
|
6
|
-
var directedGraph = _index.DirectedGraph.fromNothing();
|
|
7
|
-
directedGraph.addVerticesByVertexNames([
|
|
8
|
-
"./easy-layout",
|
|
9
|
-
"./easy-with-style",
|
|
10
|
-
"./occam-lexers",
|
|
11
|
-
"./with-style"
|
|
12
|
-
]);
|
|
13
|
-
directedGraph.addEdgeByVertexNames("./easy-with-style", "./easy-layout");
|
|
14
|
-
directedGraph.addEdgeByVertexNames("./with-style", "./easy-with-style");
|
|
15
|
-
directedGraph.addEdgeByVertexNames("./easy-layout", "./occam-lexers");
|
|
16
|
-
directedGraph.addEdgeByVertexNames("./easy-with-style", "./easy-layout");
|
|
17
|
-
directedGraph.addEdgeByVertexNames("./occam-lexers", "./with-style");
|
|
18
|
-
directedGraph.removeVertexByVertexName("./occam-lexers");
|
|
19
|
-
debugger;
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leGFtcGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcIi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBkaXJlY3RlZEdyYXBoID0gRGlyZWN0ZWRHcmFwaC5mcm9tTm90aGluZygpO1xuXG5kaXJlY3RlZEdyYXBoLmFkZFZlcnRpY2VzQnlWZXJ0ZXhOYW1lcyhbXG4gIFwiLi9lYXN5LWxheW91dFwiLFxuICBcIi4vZWFzeS13aXRoLXN0eWxlXCIsXG4gIFwiLi9vY2NhbS1sZXhlcnNcIixcbiAgXCIuL3dpdGgtc3R5bGVcIlxuXSk7XG5cbmRpcmVjdGVkR3JhcGguYWRkRWRnZUJ5VmVydGV4TmFtZXMoXCIuL2Vhc3ktd2l0aC1zdHlsZVwiLCBcIi4vZWFzeS1sYXlvdXRcIik7XG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVZlcnRleE5hbWVzKFwiLi93aXRoLXN0eWxlXCIsIFwiLi9lYXN5LXdpdGgtc3R5bGVcIik7XG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVZlcnRleE5hbWVzKFwiLi9lYXN5LWxheW91dFwiLCBcIi4vb2NjYW0tbGV4ZXJzXCIpO1xuZGlyZWN0ZWRHcmFwaC5hZGRFZGdlQnlWZXJ0ZXhOYW1lcyhcIi4vZWFzeS13aXRoLXN0eWxlXCIsIFwiLi9lYXN5LWxheW91dFwiKTtcbmRpcmVjdGVkR3JhcGguYWRkRWRnZUJ5VmVydGV4TmFtZXMoXCIuL29jY2FtLWxleGVyc1wiLCBcIi4vd2l0aC1zdHlsZVwiKTtcblxuZGlyZWN0ZWRHcmFwaC5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUoXCIuL29jY2FtLWxleGVyc1wiKTtcblxuZGVidWdnZXJcbiJdLCJuYW1lcyI6WyJkaXJlY3RlZEdyYXBoIiwiRGlyZWN0ZWRHcmFwaCIsImZyb21Ob3RoaW5nIiwiYWRkVmVydGljZXNCeVZlcnRleE5hbWVzIiwiYWRkRWRnZUJ5VmVydGV4TmFtZXMiLCJyZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7O3FCQUU4QjtBQUU5QixJQUFNQSxnQkFBZ0JDLHFCQUFjQztBQUVwQ0YsY0FBY0cseUJBQXlCO0lBQ3JDO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFREgsY0FBY0kscUJBQXFCLHFCQUFxQjtBQUN4REosY0FBY0kscUJBQXFCLGdCQUFnQjtBQUNuREosY0FBY0kscUJBQXFCLGlCQUFpQjtBQUNwREosY0FBY0kscUJBQXFCLHFCQUFxQjtBQUN4REosY0FBY0kscUJBQXFCLGtCQUFrQjtBQUVyREosY0FBY0sseUJBQXlCO0FBRXZDLFFBQVEifQ==
|
package/lib/partialCycle.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return PartialCycle;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _necessary = require("necessary");
|
|
12
|
-
function _class_call_check(instance, Constructor) {
|
|
13
|
-
if (!(instance instanceof Constructor)) {
|
|
14
|
-
throw new TypeError("Cannot call a class as a function");
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function _defineProperties(target, props) {
|
|
18
|
-
for(var i = 0; i < props.length; i++){
|
|
19
|
-
var descriptor = props[i];
|
|
20
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
21
|
-
descriptor.configurable = true;
|
|
22
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
23
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
27
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
28
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
|
-
return Constructor;
|
|
30
|
-
}
|
|
31
|
-
var first = _necessary.arrayUtilities.first;
|
|
32
|
-
var PartialCycle = /*#__PURE__*/ function() {
|
|
33
|
-
function PartialCycle(predecessorVertices, cyclicEdge) {
|
|
34
|
-
_class_call_check(this, PartialCycle);
|
|
35
|
-
this.predecessorVertices = predecessorVertices;
|
|
36
|
-
this.cyclicEdge = cyclicEdge;
|
|
37
|
-
}
|
|
38
|
-
_create_class(PartialCycle, [
|
|
39
|
-
{
|
|
40
|
-
key: "getPredecessorVertices",
|
|
41
|
-
value: function getPredecessorVertices() {
|
|
42
|
-
return this.predecessorVertices;
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
key: "getCyclicEdge",
|
|
47
|
-
value: function getCyclicEdge() {
|
|
48
|
-
return this.cyclicEdge;
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
key: "getTargetVertexName",
|
|
53
|
-
value: function getTargetVertexName() {
|
|
54
|
-
var cyclicEdgeTargetVertexName = this.cyclicEdge.getTargetVertexName(), targetVertexName = cyclicEdgeTargetVertexName; ///
|
|
55
|
-
return targetVertexName;
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
key: "getPredecessorVertexNames",
|
|
60
|
-
value: function getPredecessorVertexNames() {
|
|
61
|
-
var predecessorVertexNames = this.predecessorVertices.map(function(predecessorVertex) {
|
|
62
|
-
var predecessorVertexName = predecessorVertex.getName();
|
|
63
|
-
return predecessorVertexName;
|
|
64
|
-
});
|
|
65
|
-
return predecessorVertexNames;
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
key: "getCyclicEdgeSourceVertexName",
|
|
70
|
-
value: function getCyclicEdgeSourceVertexName() {
|
|
71
|
-
var cyclicEdgeSourceVertexName = this.cyclicEdge.getSourceVertexName();
|
|
72
|
-
return cyclicEdgeSourceVertexName;
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
key: "getCyclicEdgeTargetVertexName",
|
|
77
|
-
value: function getCyclicEdgeTargetVertexName() {
|
|
78
|
-
var cyclicEdgeTargetVertexName = this.cyclicEdge.getTargetVertexName();
|
|
79
|
-
return cyclicEdgeTargetVertexName;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
], [
|
|
83
|
-
{
|
|
84
|
-
key: "fromCyclicEdgeAndPredecessorVertices",
|
|
85
|
-
value: function fromCyclicEdgeAndPredecessorVertices(cyclicEdge, predecessorVertices) {
|
|
86
|
-
predecessorVertices = predecessorVertices.slice(); ///
|
|
87
|
-
var predecessorVerticesLength = predecessorVertices.length;
|
|
88
|
-
if (predecessorVerticesLength > 0) {
|
|
89
|
-
var firstPredecessorVertex = first(predecessorVertices), firstPredecessorVertexName = firstPredecessorVertex.getName(), cyclicEdgeTargetVertexName = cyclicEdge.getTargetVertexName();
|
|
90
|
-
if (firstPredecessorVertexName === cyclicEdgeTargetVertexName) {
|
|
91
|
-
predecessorVertices.shift();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
var partialCycle = new PartialCycle(predecessorVertices, cyclicEdge);
|
|
95
|
-
return partialCycle;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
]);
|
|
99
|
-
return PartialCycle;
|
|
100
|
-
}();
|
|
101
|
-
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsQ3ljbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydGlhbEN5Y2xlIHtcbiAgY29uc3RydWN0b3IocHJlZGVjZXNzb3JWZXJ0aWNlcywgY3ljbGljRWRnZSkge1xuICAgIHRoaXMucHJlZGVjZXNzb3JWZXJ0aWNlcyA9IHByZWRlY2Vzc29yVmVydGljZXM7XG4gICAgdGhpcy5jeWNsaWNFZGdlID0gY3ljbGljRWRnZTtcbiAgfVxuICBcbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVkZWNlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0Q3ljbGljRWRnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jeWNsaWNFZGdlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0VmVydGV4TmFtZSgpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IHRoaXMuY3ljbGljRWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lOyAgLy8vXG4gICAgXG4gICAgcmV0dXJuIHRhcmdldFZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIGdldFByZWRlY2Vzc29yVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMucHJlZGVjZXNzb3JWZXJ0aWNlcy5tYXAoKHByZWRlY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRleE5hbWUgPSBwcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCk7XG5cbiAgICAgIHJldHVybiBwcmVkZWNlc3NvclZlcnRleE5hbWU7XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cbiAgXG4gIGdldEN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lKCkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gdGhpcy5jeWNsaWNFZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gY3ljbGljRWRnZVNvdXJjZVZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIGdldEN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lKCkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gdGhpcy5jeWNsaWNFZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIHN0YXRpYyBmcm9tQ3ljbGljRWRnZUFuZFByZWRlY2Vzc29yVmVydGljZXMoY3ljbGljRWRnZSwgcHJlZGVjZXNzb3JWZXJ0aWNlcykge1xuICAgIHByZWRlY2Vzc29yVmVydGljZXMgPSBwcmVkZWNlc3NvclZlcnRpY2VzLnNsaWNlKCk7ICAvLy9cbiAgICBcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoID0gcHJlZGVjZXNzb3JWZXJ0aWNlcy5sZW5ndGg7XG5cbiAgICBpZiAocHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXggPSBmaXJzdChwcmVkZWNlc3NvclZlcnRpY2VzKSxcbiAgICAgICAgICAgIGZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gZmlyc3RQcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpO1xuXG4gICAgICBpZiAoZmlyc3RQcmVkZWNlc3NvclZlcnRleE5hbWUgPT09IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgICAgIHByZWRlY2Vzc29yVmVydGljZXMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWFsQ3ljbGUgPSBuZXcgUGFydGlhbEN5Y2xlKHByZWRlY2Vzc29yVmVydGljZXMsIGN5Y2xpY0VkZ2UpO1xuICAgIFxuICAgIHJldHVybiBwYXJ0aWFsQ3ljbGU7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUGFydGlhbEN5Y2xlIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsInByZWRlY2Vzc29yVmVydGljZXMiLCJjeWNsaWNFZGdlIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcyIsImdldEN5Y2xpY0VkZ2UiLCJnZXRUYXJnZXRWZXJ0ZXhOYW1lIiwiY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWUiLCJ0YXJnZXRWZXJ0ZXhOYW1lIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsInByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJtYXAiLCJwcmVkZWNlc3NvclZlcnRleCIsInByZWRlY2Vzc29yVmVydGV4TmFtZSIsImdldE5hbWUiLCJnZXRDeWNsaWNFZGdlU291cmNlVmVydGV4TmFtZSIsImN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lIiwiZ2V0U291cmNlVmVydGV4TmFtZSIsImdldEN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lIiwiZnJvbUN5Y2xpY0VkZ2VBbmRQcmVkZWNlc3NvclZlcnRpY2VzIiwic2xpY2UiLCJwcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQcmVkZWNlc3NvclZlcnRleCIsImZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lIiwic2hpZnQiLCJwYXJ0aWFsQ3ljbGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3lCQUpVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQixJQUFNLEFBQUVDLFFBQVVDLDBCQUFWRDtBQUVPLElBQUEsQUFBTUQsNkJBQU47YUFBTUEsYUFDUEcsbUJBQW1CLEVBQUVDLFVBQVU7Z0NBRHhCSjtRQUVqQixJQUFJLENBQUNHLHNCQUFzQkE7UUFDM0IsSUFBSSxDQUFDQyxhQUFhQTs7a0JBSERKOztZQU1uQkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRjtZQUNkOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRjtZQUNkOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLDZCQUE2QixJQUFJLENBQUNKLFdBQVdHLHVCQUM3Q0UsbUJBQW1CRCw0QkFBNkIsR0FBRztnQkFFekQsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyx5QkFBeUIsSUFBSSxDQUFDUixvQkFBb0JTLElBQUksU0FBQ0M7b0JBQzNELElBQU1DLHdCQUF3QkQsa0JBQWtCRTtvQkFFaEQsT0FBT0Q7Z0JBQ1Q7Z0JBRUEsT0FBT0g7WUFDVDs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyw2QkFBNkIsSUFBSSxDQUFDYixXQUFXYztnQkFFbkQsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNWCw2QkFBNkIsSUFBSSxDQUFDSixXQUFXRztnQkFFbkQsT0FBT0M7WUFDVDs7OztZQUVPWSxLQUFBQTttQkFBUCxTQUFPQSxxQ0FBcUNoQixVQUFVLEVBQUVELG1CQUFtQjtnQkFDekVBLHNCQUFzQkEsb0JBQW9Ca0IsU0FBVSxHQUFHO2dCQUV2RCxJQUFNQyw0QkFBNEJuQixvQkFBb0JvQjtnQkFFdEQsSUFBSUQsNEJBQTRCLEdBQUc7b0JBQ2pDLElBQU1FLHlCQUF5QnZCLE1BQU1FLHNCQUMvQnNCLDZCQUE2QkQsdUJBQXVCVCxXQUNwRFAsNkJBQTZCSixXQUFXRztvQkFFOUMsSUFBSWtCLCtCQUErQmpCLDRCQUE0Qjt3QkFDN0RMLG9CQUFvQnVCO29CQUN0QjtnQkFDRjtnQkFFQSxJQUFNQyxlQUFlLElBMURKM0IsYUEwRHFCRyxxQkFBcUJDO2dCQUUzRCxPQUFPdUI7WUFDVDs7O1dBN0RtQjNCIn0=
|
package/lib/utilities/edge.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
checkEdgesIncludesEdge: function() {
|
|
13
|
-
return checkEdgesIncludesEdge;
|
|
14
|
-
},
|
|
15
|
-
removeEdgeFromEdges: function() {
|
|
16
|
-
return removeEdgeFromEdges;
|
|
17
|
-
},
|
|
18
|
-
edgesBySourceVertexName: function() {
|
|
19
|
-
return edgesBySourceVertexName;
|
|
20
|
-
},
|
|
21
|
-
edgesByTargetVertexName: function() {
|
|
22
|
-
return edgesByTargetVertexName;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
var _necessary = require("necessary");
|
|
26
|
-
var prune = _necessary.arrayUtilities.prune;
|
|
27
|
-
var remove = prune; ///
|
|
28
|
-
function checkEdgesIncludesEdge(edge, edges) {
|
|
29
|
-
var edge1 = edge, edgesIncludesEdge = edges.some(function(edge) {
|
|
30
|
-
var edge2 = edge, matches = edge1.match(edge2);
|
|
31
|
-
if (matches) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return edgesIncludesEdge;
|
|
36
|
-
}
|
|
37
|
-
function removeEdgeFromEdges(edge, edges) {
|
|
38
|
-
var edge1 = edge; ///
|
|
39
|
-
remove(edges, function(edge) {
|
|
40
|
-
var edge2 = edge, matches = edge1.match(edge2);
|
|
41
|
-
if (!matches) {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function edgesBySourceVertexName(sourceVertexName, edges) {
|
|
47
|
-
edges = edges.filter(function(edge) {
|
|
48
|
-
var matches = edge.matchSourceVertexName(sourceVertexName);
|
|
49
|
-
if (matches) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
return edges;
|
|
54
|
-
}
|
|
55
|
-
function edgesByTargetVertexName(targetVertexName, edges) {
|
|
56
|
-
edges = edges.filter(function(edge) {
|
|
57
|
-
var matches = edge.matchTargetVertexName(targetVertexName);
|
|
58
|
-
if (matches) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return edges;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWRnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgcHJ1bmUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jb25zdCByZW1vdmUgPSBwcnVuZTsgIC8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tFZGdlc0luY2x1ZGVzRWRnZShlZGdlLCBlZGdlcykge1xuICBjb25zdCBlZGdlMSA9IGVkZ2UsIC8vL1xuICAgICAgICBlZGdlc0luY2x1ZGVzRWRnZSA9IGVkZ2VzLnNvbWUoKGVkZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGdlMiA9IGVkZ2UsIC8vL1xuICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBlZGdlMS5tYXRjaChlZGdlMik7XG5cbiAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gZWRnZXNJbmNsdWRlc0VkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFZGdlRnJvbUVkZ2VzKGVkZ2UsIGVkZ2VzKSB7XG4gIGNvbnN0IGVkZ2UxID0gZWRnZTsgLy8vXG5cbiAgcmVtb3ZlKGVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgIGNvbnN0IGVkZ2UyID0gZWRnZSwgLy8vXG4gICAgICAgICAgbWF0Y2hlcyA9IGVkZ2UxLm1hdGNoKGVkZ2UyKTtcblxuICAgIGlmICghbWF0Y2hlcykgeyAvLy9cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCBlZGdlcykge1xuICBlZGdlcyA9IGVkZ2VzLmZpbHRlcigoZWRnZSkgPT4geyAgLy8vXG4gICAgY29uc3QgbWF0Y2hlcyA9IGVkZ2UubWF0Y2hTb3VyY2VWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSwgZWRnZXMpIHtcbiAgZWRnZXMgPSBlZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHsgIC8vL1xuICAgIGNvbnN0IG1hdGNoZXMgPSBlZGdlLm1hdGNoVGFyZ2V0VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlZGdlcztcbn1cbiJdLCJuYW1lcyI6WyJjaGVja0VkZ2VzSW5jbHVkZXNFZGdlIiwicmVtb3ZlRWRnZUZyb21FZGdlcyIsImVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lIiwiZWRnZXNCeVRhcmdldFZlcnRleE5hbWUiLCJwcnVuZSIsImFycmF5VXRpbGl0aWVzIiwicmVtb3ZlIiwiZWRnZSIsImVkZ2VzIiwiZWRnZTEiLCJlZGdlc0luY2x1ZGVzRWRnZSIsInNvbWUiLCJlZGdlMiIsIm1hdGNoZXMiLCJtYXRjaCIsInNvdXJjZVZlcnRleE5hbWUiLCJmaWx0ZXIiLCJtYXRjaFNvdXJjZVZlcnRleE5hbWUiLCJ0YXJnZXRWZXJ0ZXhOYW1lIiwibWF0Y2hUYXJnZXRWZXJ0ZXhOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFRZ0JBLHNCQUFzQjtlQUF0QkE7O0lBY0FDLG1CQUFtQjtlQUFuQkE7O0lBYUFDLHVCQUF1QjtlQUF2QkE7O0lBWUFDLHVCQUF1QjtlQUF2QkE7Ozt5QkE3Q2U7QUFFL0IsSUFBTSxBQUFFQyxRQUFVQywwQkFBVkQ7QUFFUixJQUFNRSxTQUFTRixPQUFRLEdBQUc7QUFFbkIsU0FBU0osdUJBQXVCTyxJQUFJLEVBQUVDLEtBQUs7SUFDaEQsSUFBTUMsUUFBUUYsTUFDUkcsb0JBQW9CRixNQUFNRyxLQUFLLFNBQUNKO1FBQzlCLElBQU1LLFFBQVFMLE1BQ1JNLFVBQVVKLE1BQU1LLE1BQU1GO1FBRTVCLElBQUlDLFNBQVM7WUFDWCxPQUFPO1FBQ1Q7SUFDRjtJQUVOLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTVCxvQkFBb0JNLElBQUksRUFBRUMsS0FBSztJQUM3QyxJQUFNQyxRQUFRRixNQUFNLEdBQUc7SUFFdkJELE9BQU9FLE9BQU8sU0FBQ0Q7UUFDYixJQUFNSyxRQUFRTCxNQUNSTSxVQUFVSixNQUFNSyxNQUFNRjtRQUU1QixJQUFJLENBQUNDLFNBQVM7WUFDWixPQUFPO1FBQ1Q7SUFDRjtBQUNGO0FBRU8sU0FBU1gsd0JBQXdCYSxnQkFBZ0IsRUFBRVAsS0FBSztJQUM3REEsUUFBUUEsTUFBTVEsT0FBTyxTQUFDVDtRQUNwQixJQUFNTSxVQUFVTixLQUFLVSxzQkFBc0JGO1FBRTNDLElBQUlGLFNBQVM7WUFDWCxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFTyxTQUFTTCx3QkFBd0JlLGdCQUFnQixFQUFFVixLQUFLO0lBQzdEQSxRQUFRQSxNQUFNUSxPQUFPLFNBQUNUO1FBQ3BCLElBQU1NLFVBQVVOLEtBQUtZLHNCQUFzQkQ7UUFFM0MsSUFBSUwsU0FBUztZQUNYLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0w7QUFDVCJ9
|