| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 |
1
1
1
1
46
46
6
40
40
1
1
124
124
22
22
10
102
95
95
95
1
1
31
31
14
14
17
8
1
1
51
51
12
12
12
39
39
76
76
8
63
1
18
1
18
1
27
1
1
20
20
20
3
3
17
16
16
1
15
15
15
3
24
1
| /**
* This is a straight rip-off of the React.js ReactPropTypes.js proptype validators,
* modified to make it possible to validate Immutable.js data.
* ImmutableTypes.listOf is patterned after React.PropTypes.arrayOf, but for Immutable.List
* ImmutableTypes.shape is based on React.PropTypes.shape, but for any Immutable.Iterable
*/
"use strict";
var Immutable = require("immutable");
var ANONYMOUS = "<<anonymous>>";
var ImmutablePropTypes = {
listOf: createListOfTypeChecker,
mapOf: createMapOfTypeChecker,
iterableOf: createIterableOfTypeChecker,
shape: createShapeTypeChecker,
// Primitive Types
list: createImmutableTypeChecker("List", Immutable.List.isList),
map: createImmutableTypeChecker("Map", Immutable.Map.isMap),
orderedMap: createImmutableTypeChecker("OrderedMap", Immutable.OrderedMap.isOrderedMap),
set: createImmutableTypeChecker("Set", Immutable.Set.isSet),
orderedSet: createImmutableTypeChecker("OrderedSet", Immutable.OrderedSet.isOrderedSet),
stack: createImmutableTypeChecker("Stack", Immutable.Stack.isStack),
seq: createImmutableTypeChecker("Seq", Immutable.Seq.isSeq),
iterable: createImmutableTypeChecker("Iterable", Immutable.Iterable.isIterable)
};
function getPropType(propValue) {
var propType = typeof propValue;
if (Array.isArray(propValue)) {
return "array";
}
Iif (propValue instanceof RegExp) {
// Old webkits (at least until Android 4.0) return 'function' rather than
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
// passes PropTypes.object.
return "object";
}
return propType;
}
function createChainableTypeChecker(validate) {
function checkType(isRequired, props, propName, componentName, location) {
componentName = componentName || ANONYMOUS;
if (props[propName] == null) {
var locationName = location;
if (isRequired) {
return new Error("Required " + locationName + " `" + propName + "` was not specified in " + ("`" + componentName + "`."));
}
} else {
return validate(props, propName, componentName, location);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
function createImmutableTypeChecker(immutableClassName, immutableClassTypeValidator) {
function validate(props, propName, componentName, location) {
var propValue = props[propName];
if (!immutableClassTypeValidator(propValue)) {
var propType = getPropType(propValue);
return new Error("Invalid " + location + " `" + propName + "` of type `" + propType + "` " + ("supplied to `" + componentName + "`, expected `" + immutableClassName + "`."));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createIterableTypeChecker(typeChecker, immutableClassName, immutableClassTypeValidator) {
function validate(props, propName, componentName, location) {
var propValue = props[propName];
if (!immutableClassTypeValidator(propValue)) {
var locationName = location;
var propType = getPropType(propValue);
return new Error("Invalid " + locationName + " `" + propName + "` of type " + ("`" + propType + "` supplied to `" + componentName + "`, expected an Immutable.js " + immutableClassName + "."));
}
var propValues = propValue.toArray();
for (var i = 0, len = propValues.length; i < len; i++) {
var error = typeChecker(propValues, i, componentName, location);
if (error instanceof Error) {
return error;
}
}
}
return createChainableTypeChecker(validate);
}
function createListOfTypeChecker(typeChecker) {
return createIterableTypeChecker(typeChecker, "List", Immutable.List.isList);
}
function createMapOfTypeChecker(typeChecker) {
return createIterableTypeChecker(typeChecker, "Map", Immutable.Map.isMap);
}
function createIterableOfTypeChecker(typeChecker) {
return createIterableTypeChecker(typeChecker, "Iterable", Immutable.Iterable.isIterable);
}
// there is some irony in the fact that shapeTypes is a standard hash and not an immutable collection
function createShapeTypeChecker(shapeTypes) {
function validate(props, propName, componentName, location) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (!Immutable.Iterable.isIterable(propValue)) {
var locationName = location;
return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` " + ("supplied to `" + componentName + "`, expected an Immutable.js Iterable."));
}
for (var key in shapeTypes) {
var checker = shapeTypes[key];
if (!checker) {
continue;
}
var mutablePropValue = propValue.toObject();
var error = checker(mutablePropValue, key, componentName, location);
if (error) {
return error;
}
}
}
return createChainableTypeChecker(validate);
}
module.exports = ImmutablePropTypes;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9qdGJ1cm5ldHQvU2l0ZXMvcmVhY3QtaW1tdXRhYmxlLXByb3B0eXBlcy9zcmMvSW1tdXRhYmxlUHJvcFR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBTUEsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztBQUVyQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUM7O0FBRWhDLElBQUksa0JBQWtCLEdBQUc7QUFDdkIsUUFBTSxFQUFFLHVCQUF1QjtBQUMvQixPQUFLLEVBQUcsc0JBQXNCO0FBQzlCLFlBQVUsRUFBRSwyQkFBMkI7QUFDdkMsT0FBSyxFQUFHLHNCQUFzQjs7QUFFOUIsTUFBSSxFQUFRLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNyRSxLQUFHLEVBQVMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ2xFLFlBQVUsRUFBRSwwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7QUFDdkYsS0FBRyxFQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNsRSxZQUFVLEVBQUUsMEJBQTBCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQ3ZGLE9BQUssRUFBTywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDeEUsS0FBRyxFQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNsRSxVQUFRLEVBQUksMEJBQTBCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO0NBQ2xGLENBQUM7O0FBRUYsU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFO0FBQzlCLE1BQUksUUFBUSxHQUFHLE9BQU8sU0FBUyxDQUFDO0FBQ2hDLE1BQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM1QixXQUFPLE9BQU8sQ0FBQztHQUNoQjtBQUNELE1BQUksU0FBUyxZQUFZLE1BQU0sRUFBRTs7OztBQUkvQixXQUFPLFFBQVEsQ0FBQztHQUNqQjtBQUNELFNBQU8sUUFBUSxDQUFDO0NBQ2pCOztBQUVELFNBQVMsMEJBQTBCLENBQUMsUUFBUSxFQUFFO0FBQzVDLFdBQVMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUU7QUFDdkUsaUJBQWEsR0FBRyxhQUFhLElBQUksU0FBUyxDQUFDO0FBQzNDLFFBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMzQixVQUFJLFlBQVksR0FBRyxRQUFRLENBQUM7QUFDNUIsVUFBSSxVQUFVLEVBQUU7QUFDZCxlQUFPLElBQUksS0FBSyxDQUNkLGNBQVksWUFBWSxVQUFNLFFBQVEsc0NBQ2pDLGFBQWEsUUFBSyxDQUN4QixDQUFDO09BQ0g7S0FDRixNQUFNO0FBQ0wsYUFBTyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDM0Q7R0FDRjs7QUFFRCxNQUFJLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25ELGtCQUFnQixDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFekQsU0FBTyxnQkFBZ0IsQ0FBQztDQUN6Qjs7QUFFRCxTQUFTLDBCQUEwQixDQUFDLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFO0FBQ25GLFdBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRTtBQUMxRCxRQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsUUFBRyxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzFDLFVBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxhQUFPLElBQUksS0FBSyxDQUNkLGFBQVcsUUFBUSxVQUFNLFFBQVEsbUJBQWdCLFFBQVEsNkJBQ3hDLGFBQWEscUJBQWtCLGtCQUFrQixRQUFLLENBQ3hFLENBQUM7S0FDSDtBQUNELFdBQU8sSUFBSSxDQUFDO0dBQ2I7QUFDRCxTQUFPLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQzdDOztBQUVELFNBQVMseUJBQXlCLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFO0FBQy9GLFdBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRTtBQUMxRCxRQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsUUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzNDLFVBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM1QixVQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEMsYUFBTyxJQUFJLEtBQUssQ0FDZCxhQUFXLFlBQVksVUFBTSxRQUFRLHlCQUNoQyxRQUFRLHVCQUFvQixhQUFhLG9DQUFnQyxrQkFBa0IsT0FBRyxDQUNwRyxDQUFDO0tBQ0g7QUFDRCxRQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDckMsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCxVQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEUsVUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO0FBQzFCLGVBQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjtHQUNGO0FBQ0QsU0FBTywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUM3Qzs7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFdBQVcsRUFBRTtBQUM1QyxTQUFPLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM5RTs7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFdBQVcsRUFBRTtBQUMzQyxTQUFPLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzRTs7QUFFRCxTQUFTLDJCQUEyQixDQUFDLFdBQVcsRUFBRTtBQUNoRCxTQUFPLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUMxRjs7O0FBR0QsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUU7QUFDMUMsV0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFO0FBQzFELFFBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxRQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzdDLFVBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM1QixhQUFPLElBQUksS0FBSyxDQUNkLGFBQVcsWUFBWSxVQUFNLFFBQVEsbUJBQWdCLFFBQVEsNkJBQzVDLGFBQWEsMkNBQXdDLENBQ3ZFLENBQUM7S0FDSDtBQUNELFNBQUssSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFO0FBQzFCLFVBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixVQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osaUJBQVM7T0FDVjtBQUNELFVBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVDLFVBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BFLFVBQUksS0FBSyxFQUFFO0FBQ1QsZUFBTyxLQUFLLENBQUM7T0FDZDtLQUNGO0dBQ0Y7QUFDRCxTQUFPLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQzdDOztBQUdELE1BQU0sQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMiLCJmaWxlIjoiL1VzZXJzL2p0YnVybmV0dC9TaXRlcy9yZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzL3NyYy9JbW11dGFibGVQcm9wVHlwZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgaXMgYSBzdHJhaWdodCByaXAtb2ZmIG9mIHRoZSBSZWFjdC5qcyBSZWFjdFByb3BUeXBlcy5qcyBwcm9wdHlwZSB2YWxpZGF0b3JzLFxuICogbW9kaWZpZWQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byB2YWxpZGF0ZSBJbW11dGFibGUuanMgZGF0YS5cbiAqICAgICBJbW11dGFibGVUeXBlcy5saXN0T2YgaXMgcGF0dGVybmVkIGFmdGVyIFJlYWN0LlByb3BUeXBlcy5hcnJheU9mLCBidXQgZm9yIEltbXV0YWJsZS5MaXN0XG4gKiAgICAgSW1tdXRhYmxlVHlwZXMuc2hhcGUgIGlzIGJhc2VkIG9uIFJlYWN0LlByb3BUeXBlcy5zaGFwZSwgYnV0IGZvciBhbnkgSW1tdXRhYmxlLkl0ZXJhYmxlXG4gKi9cbnZhciBJbW11dGFibGUgPSByZXF1aXJlKCdpbW11dGFibGUnKTtcblxudmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxudmFyIEltbXV0YWJsZVByb3BUeXBlcyA9IHtcbiAgbGlzdE9mOiBjcmVhdGVMaXN0T2ZUeXBlQ2hlY2tlcixcbiAgbWFwT2Y6ICBjcmVhdGVNYXBPZlR5cGVDaGVja2VyLFxuICBpdGVyYWJsZU9mOiBjcmVhdGVJdGVyYWJsZU9mVHlwZUNoZWNrZXIsXG4gIHNoYXBlOiAgY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgLy8gUHJpbWl0aXZlIFR5cGVzXG4gIGxpc3Q6ICAgICAgIGNyZWF0ZUltbXV0YWJsZVR5cGVDaGVja2VyKCdMaXN0JywgSW1tdXRhYmxlLkxpc3QuaXNMaXN0KSxcbiAgbWFwOiAgICAgICAgY3JlYXRlSW1tdXRhYmxlVHlwZUNoZWNrZXIoJ01hcCcsIEltbXV0YWJsZS5NYXAuaXNNYXApLFxuICBvcmRlcmVkTWFwOiBjcmVhdGVJbW11dGFibGVUeXBlQ2hlY2tlcignT3JkZXJlZE1hcCcsIEltbXV0YWJsZS5PcmRlcmVkTWFwLmlzT3JkZXJlZE1hcCksXG4gIHNldDogICAgICAgIGNyZWF0ZUltbXV0YWJsZVR5cGVDaGVja2VyKCdTZXQnLCBJbW11dGFibGUuU2V0LmlzU2V0KSxcbiAgb3JkZXJlZFNldDogY3JlYXRlSW1tdXRhYmxlVHlwZUNoZWNrZXIoJ09yZGVyZWRTZXQnLCBJbW11dGFibGUuT3JkZXJlZFNldC5pc09yZGVyZWRTZXQpLFxuICBzdGFjazogICAgICBjcmVhdGVJbW11dGFibGVUeXBlQ2hlY2tlcignU3RhY2snLCBJbW11dGFibGUuU3RhY2suaXNTdGFjayksXG4gIHNlcTogICAgICAgIGNyZWF0ZUltbXV0YWJsZVR5cGVDaGVja2VyKCdTZXEnLCBJbW11dGFibGUuU2VxLmlzU2VxKSxcbiAgaXRlcmFibGU6ICAgY3JlYXRlSW1tdXRhYmxlVHlwZUNoZWNrZXIoJ0l0ZXJhYmxlJywgSW1tdXRhYmxlLkl0ZXJhYmxlLmlzSXRlcmFibGUpXG59O1xuXG5mdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG4gIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgcmV0dXJuICdvYmplY3QnO1xuICB9XG4gIHJldHVybiBwcm9wVHlwZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gbG9jYXRpb247XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgIGBSZXF1aXJlZCAke2xvY2F0aW9uTmFtZX0gXFxgJHtwcm9wTmFtZX1cXGAgd2FzIG5vdCBzcGVjaWZpZWQgaW4gYCArXG4gICAgICAgICAgYFxcYCR7Y29tcG9uZW50TmFtZX1cXGAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVUeXBlQ2hlY2tlcihpbW11dGFibGVDbGFzc05hbWUsIGltbXV0YWJsZUNsYXNzVHlwZVZhbGlkYXRvcikge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICBpZighaW1tdXRhYmxlQ2xhc3NUeXBlVmFsaWRhdG9yKHByb3BWYWx1ZSkpIHtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCAke2xvY2F0aW9ufSBcXGAke3Byb3BOYW1lfVxcYCBvZiB0eXBlIFxcYCR7cHJvcFR5cGV9XFxgIGAgK1xuICAgICAgICBgc3VwcGxpZWQgdG8gXFxgJHtjb21wb25lbnROYW1lfVxcYCwgZXhwZWN0ZWQgXFxgJHtpbW11dGFibGVDbGFzc05hbWV9XFxgLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhYmxlVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIsIGltbXV0YWJsZUNsYXNzTmFtZSwgaW1tdXRhYmxlQ2xhc3NUeXBlVmFsaWRhdG9yKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGlmICghaW1tdXRhYmxlQ2xhc3NUeXBlVmFsaWRhdG9yKHByb3BWYWx1ZSkpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBsb2NhdGlvbjtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCAke2xvY2F0aW9uTmFtZX0gXFxgJHtwcm9wTmFtZX1cXGAgb2YgdHlwZSBgICtcbiAgICAgICAgYFxcYCR7cHJvcFR5cGV9XFxgIHN1cHBsaWVkIHRvIFxcYCR7Y29tcG9uZW50TmFtZX1cXGAsIGV4cGVjdGVkIGFuIEltbXV0YWJsZS5qcyAke2ltbXV0YWJsZUNsYXNzTmFtZX0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHByb3BWYWx1ZXMgPSBwcm9wVmFsdWUudG9BcnJheSgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwcm9wVmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWVzLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIHJldHVybiBjcmVhdGVJdGVyYWJsZVR5cGVDaGVja2VyKHR5cGVDaGVja2VyLCAnTGlzdCcsIEltbXV0YWJsZS5MaXN0LmlzTGlzdCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJhYmxlVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIsICdNYXAnLCBJbW11dGFibGUuTWFwLmlzTWFwKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSXRlcmFibGVPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIHJldHVybiBjcmVhdGVJdGVyYWJsZVR5cGVDaGVja2VyKHR5cGVDaGVja2VyLCAnSXRlcmFibGUnLCBJbW11dGFibGUuSXRlcmFibGUuaXNJdGVyYWJsZSk7XG59XG5cbi8vIHRoZXJlIGlzIHNvbWUgaXJvbnkgaW4gdGhlIGZhY3QgdGhhdCBzaGFwZVR5cGVzIGlzIGEgc3RhbmRhcmQgaGFzaCBhbmQgbm90IGFuIGltbXV0YWJsZSBjb2xsZWN0aW9uXG5mdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAoIUltbXV0YWJsZS5JdGVyYWJsZS5pc0l0ZXJhYmxlKHByb3BWYWx1ZSkpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBsb2NhdGlvbjtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkICR7bG9jYXRpb25OYW1lfSBcXGAke3Byb3BOYW1lfVxcYCBvZiB0eXBlIFxcYCR7cHJvcFR5cGV9XFxgIGAgK1xuICAgICAgICBgc3VwcGxpZWQgdG8gXFxgJHtjb21wb25lbnROYW1lfVxcYCwgZXhwZWN0ZWQgYW4gSW1tdXRhYmxlLmpzIEl0ZXJhYmxlLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBtdXRhYmxlUHJvcFZhbHVlID0gcHJvcFZhbHVlLnRvT2JqZWN0KCk7XG4gICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKG11dGFibGVQcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IEltbXV0YWJsZVByb3BUeXBlczsiXX0= |