occam-languages 0.0.98 → 0.0.101

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/lib/index.js CHANGED
@@ -56,6 +56,9 @@ _export(exports, {
56
56
  },
57
57
  get releaseContextUtilities () {
58
58
  return _releaseContext.default;
59
+ },
60
+ get verificationUtilities () {
61
+ return _verification.default;
59
62
  }
60
63
  });
61
64
  var _log = /*#__PURE__*/ _interop_require_default(require("./log"));
@@ -72,6 +75,7 @@ var _equivalence = /*#__PURE__*/ _interop_require_default(require("./pass/equiva
72
75
  var _node = /*#__PURE__*/ _interop_require_default(require("./utilities/node"));
73
76
  var _query = /*#__PURE__*/ _interop_require_default(require("./utilities/query"));
74
77
  var _fileContext = /*#__PURE__*/ _interop_require_default(require("./utilities/fileContext"));
78
+ var _verification = /*#__PURE__*/ _interop_require_default(require("./utilities/verification"));
75
79
  var _asynchronous = /*#__PURE__*/ _interop_require_default(require("./utilities/asynchronous"));
76
80
  var _releaseContext = /*#__PURE__*/ _interop_require_default(require("./utilities/releaseContext"));
77
81
  function _interop_require_default(obj) {
@@ -80,4 +84,4 @@ function _interop_require_default(obj) {
80
84
  };
81
85
  }
82
86
 
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2cgfSBmcm9tIFwiLi9sb2dcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L2ZpbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVsZWFzZUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L3JlbGVhc2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9uVGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmlwUGFzcyB9IGZyb20gXCIuL3Bhc3MvemlwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFzeW5jUGFzcyB9IGZyb20gXCIuL3Bhc3MvYXN5bmNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2ltcGxlUGFzcyB9IGZyb20gXCIuL3Bhc3Mvc2ltcGxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvcndhcmRQYXNzIH0gZnJvbSBcIi4vcGFzcy9mb3J3YXJkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVxdWl2YWxlbmNlUGFzcyB9IGZyb20gXCIuL3Bhc3MvZXF1aXZhbGVuY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBub2RlVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmlsZUNvbnRleHRVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZmlsZUNvbnRleHRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZWxlYXNlQ29udGV4dFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9yZWxlYXNlQ29udGV4dFwiO1xuIl0sIm5hbWVzIjpbIkFzeW5jUGFzcyIsIkNvbnRleHQiLCJFbGVtZW50IiwiRXF1aXZhbGVuY2VQYXNzIiwiRmlsZUNvbnRleHQiLCJGb3J3YXJkUGFzcyIsIkxvZyIsIk5vblRlcm1pbmFsTm9kZSIsIlJlbGVhc2VDb250ZXh0IiwiU2ltcGxlUGFzcyIsIlppcFBhc3MiLCJhc3luY2hyb25vdXNVdGlsaXRpZXMiLCJmaWxlQ29udGV4dFV0aWxpdGllcyIsIm5vZGVVdGlsaXRpZXMiLCJxdWVyeVV0aWxpdGllcyIsInJlbGVhc2VDb250ZXh0VXRpbGl0aWVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFVb0JBO2VBQUFBLGNBQVM7O1FBTlRDO2VBQUFBLGdCQUFPOztRQURQQztlQUFBQSxnQkFBTzs7UUFVUEM7ZUFBQUEsb0JBQWU7O1FBUmZDO2VBQUFBLGFBQVc7O1FBT1hDO2VBQUFBLGdCQUFXOztRQVZYQztlQUFBQSxZQUFHOztRQUtIQztlQUFBQSx3QkFBZTs7UUFEZkM7ZUFBQUEsZ0JBQWM7O1FBS2RDO2VBQUFBLGVBQVU7O1FBRlZDO2VBQUFBLFlBQU87O1FBU1BDO2VBQUFBLHFCQUFxQjs7UUFEckJDO2VBQUFBLG9CQUFvQjs7UUFGcEJDO2VBQUFBLGFBQWE7O1FBQ2JDO2VBQUFBLGNBQWM7O1FBR2RDO2VBQUFBLHVCQUF1Qjs7OzBEQWpCWjs4REFDSTs4REFDQTsyREFDSTs4REFDRztzRUFDQzswREFFUjs0REFDRTs2REFDQzs4REFDQztrRUFDSTsyREFFRjs0REFDQztrRUFDTTttRUFDQztxRUFDRSJ9
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2cgfSBmcm9tIFwiLi9sb2dcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L2ZpbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVsZWFzZUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L3JlbGVhc2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9uVGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmlwUGFzcyB9IGZyb20gXCIuL3Bhc3MvemlwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFzeW5jUGFzcyB9IGZyb20gXCIuL3Bhc3MvYXN5bmNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2ltcGxlUGFzcyB9IGZyb20gXCIuL3Bhc3Mvc2ltcGxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvcndhcmRQYXNzIH0gZnJvbSBcIi4vcGFzcy9mb3J3YXJkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVxdWl2YWxlbmNlUGFzcyB9IGZyb20gXCIuL3Bhc3MvZXF1aXZhbGVuY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBub2RlVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmlsZUNvbnRleHRVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZmlsZUNvbnRleHRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVyaWZpY2F0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcmlmaWNhdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlbGVhc2VDb250ZXh0VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3JlbGVhc2VDb250ZXh0XCI7XG4iXSwibmFtZXMiOlsiQXN5bmNQYXNzIiwiQ29udGV4dCIsIkVsZW1lbnQiLCJFcXVpdmFsZW5jZVBhc3MiLCJGaWxlQ29udGV4dCIsIkZvcndhcmRQYXNzIiwiTG9nIiwiTm9uVGVybWluYWxOb2RlIiwiUmVsZWFzZUNvbnRleHQiLCJTaW1wbGVQYXNzIiwiWmlwUGFzcyIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImZpbGVDb250ZXh0VXRpbGl0aWVzIiwibm9kZVV0aWxpdGllcyIsInF1ZXJ5VXRpbGl0aWVzIiwicmVsZWFzZUNvbnRleHRVdGlsaXRpZXMiLCJ2ZXJpZmljYXRpb25VdGlsaXRpZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVVvQkE7ZUFBQUEsY0FBUzs7UUFOVEM7ZUFBQUEsZ0JBQU87O1FBRFBDO2VBQUFBLGdCQUFPOztRQVVQQztlQUFBQSxvQkFBZTs7UUFSZkM7ZUFBQUEsYUFBVzs7UUFPWEM7ZUFBQUEsZ0JBQVc7O1FBVlhDO2VBQUFBLFlBQUc7O1FBS0hDO2VBQUFBLHdCQUFlOztRQURmQztlQUFBQSxnQkFBYzs7UUFLZEM7ZUFBQUEsZUFBVTs7UUFGVkM7ZUFBQUEsWUFBTzs7UUFVUEM7ZUFBQUEscUJBQXFCOztRQUZyQkM7ZUFBQUEsb0JBQW9COztRQUZwQkM7ZUFBQUEsYUFBYTs7UUFDYkM7ZUFBQUEsY0FBYzs7UUFJZEM7ZUFBQUEsdUJBQXVCOztRQUZ2QkM7ZUFBQUEscUJBQXFCOzs7MERBaEJWOzhEQUNJOzhEQUNBOzJEQUNJOzhEQUNHO3NFQUNDOzBEQUVSOzREQUNFOzZEQUNDOzhEQUNDO2tFQUNJOzJEQUVGOzREQUNDO2tFQUNNO21FQUNDO21FQUNBO3FFQUNFIn0=
@@ -9,339 +9,28 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get createReleaseContext () {
13
- return createReleaseContext;
14
- },
15
12
  get default () {
16
13
  return _default;
17
14
  },
18
- get initialiseReleaseContext () {
19
- return initialiseReleaseContext;
20
- },
21
15
  get releaseContextFromJSON () {
22
16
  return releaseContextFromJSON;
23
17
  },
18
+ get releaseContextFromPelease () {
19
+ return releaseContextFromPelease;
20
+ },
24
21
  get releaseContextFromProject () {
25
22
  return releaseContextFromProject;
26
- },
27
- get verifyReleaseContext () {
28
- return verifyReleaseContext;
29
23
  }
30
24
  });
31
- var _necessary = require("necessary");
32
25
  var _occammodel = require("occam-model");
33
26
  var _release = /*#__PURE__*/ _interop_require_default(require("../context/release"));
34
- var _dependency = require("../utilities/dependency");
35
27
  var _customGrammar = require("../utilities/customGrammar");
36
- function _array_like_to_array(arr, len) {
37
- if (len == null || len > arr.length) len = arr.length;
38
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
39
- return arr2;
40
- }
41
- function _array_without_holes(arr) {
42
- if (Array.isArray(arr)) return _array_like_to_array(arr);
43
- }
44
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
45
- try {
46
- var info = gen[key](arg);
47
- var value = info.value;
48
- } catch (error) {
49
- reject(error);
50
- return;
51
- }
52
- if (info.done) {
53
- resolve(value);
54
- } else {
55
- Promise.resolve(value).then(_next, _throw);
56
- }
57
- }
58
- function _async_to_generator(fn) {
59
- return function() {
60
- var self = this, args = arguments;
61
- return new Promise(function(resolve, reject) {
62
- var gen = fn.apply(self, args);
63
- function _next(value) {
64
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
65
- }
66
- function _throw(err) {
67
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
68
- }
69
- _next(undefined);
70
- });
71
- };
72
- }
73
28
  function _interop_require_default(obj) {
74
29
  return obj && obj.__esModule ? obj : {
75
30
  default: obj
76
31
  };
77
32
  }
78
- function _iterable_to_array(iter) {
79
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
80
- }
81
- function _non_iterable_spread() {
82
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
83
- }
84
- function _to_consumable_array(arr) {
85
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
86
- }
87
- function _unsupported_iterable_to_array(o, minLen) {
88
- if (!o) return;
89
- if (typeof o === "string") return _array_like_to_array(o, minLen);
90
- var n = Object.prototype.toString.call(o).slice(8, -1);
91
- if (n === "Object" && o.constructor) n = o.constructor.name;
92
- if (n === "Map" || n === "Set") return Array.from(n);
93
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
94
- }
95
- function _ts_generator(thisArg, body) {
96
- var f, y, t, _ = {
97
- label: 0,
98
- sent: function() {
99
- if (t[0] & 1) throw t[1];
100
- return t[1];
101
- },
102
- trys: [],
103
- ops: []
104
- }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
105
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
106
- return this;
107
- }), g;
108
- function verb(n) {
109
- return function(v) {
110
- return step([
111
- n,
112
- v
113
- ]);
114
- };
115
- }
116
- function step(op) {
117
- if (f) throw new TypeError("Generator is already executing.");
118
- while(g && (g = 0, op[0] && (_ = 0)), _)try {
119
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
120
- if (y = 0, t) op = [
121
- op[0] & 2,
122
- t.value
123
- ];
124
- switch(op[0]){
125
- case 0:
126
- case 1:
127
- t = op;
128
- break;
129
- case 4:
130
- _.label++;
131
- return {
132
- value: op[1],
133
- done: false
134
- };
135
- case 5:
136
- _.label++;
137
- y = op[1];
138
- op = [
139
- 0
140
- ];
141
- continue;
142
- case 7:
143
- op = _.ops.pop();
144
- _.trys.pop();
145
- continue;
146
- default:
147
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
148
- _ = 0;
149
- continue;
150
- }
151
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
152
- _.label = op[1];
153
- break;
154
- }
155
- if (op[0] === 6 && _.label < t[1]) {
156
- _.label = t[1];
157
- t = op;
158
- break;
159
- }
160
- if (t && _.label < t[2]) {
161
- _.label = t[2];
162
- _.ops.push(op);
163
- break;
164
- }
165
- if (t[2]) _.ops.pop();
166
- _.trys.pop();
167
- continue;
168
- }
169
- op = body.call(thisArg, _);
170
- } catch (e) {
171
- op = [
172
- 6,
173
- e
174
- ];
175
- y = 0;
176
- } finally{
177
- f = t = 0;
178
- }
179
- if (op[0] & 5) throw op[1];
180
- return {
181
- value: op[0] ? op[1] : void 0,
182
- done: true
183
- };
184
- }
185
- }
186
- var last = _necessary.arrayUtilities.last, isMetaJSONFileValid = _occammodel.metaJSONUtilities.isMetaJSONFileValid;
187
- function createReleaseContext(dependency, dependentNames, context) {
188
- return _async_to_generator(function() {
189
- var success, releaseContextMap, dependencyName, releaseName, releaseContext, log, releaseMatchesDependency, log1, dependencyString, dependentNamesLength, lastDependentName, dependentName, releaseContextFromDependency, releaseContext1, releaseContextCreated, releaseMatchesDependency1;
190
- return _ts_generator(this, function(_state) {
191
- switch(_state.label){
192
- case 0:
193
- success = false;
194
- releaseContextMap = context.releaseContextMap, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
195
- if (!(releaseContext !== null)) return [
196
- 3,
197
- 1
198
- ];
199
- log = context.log, releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
200
- if (releaseMatchesDependency) {
201
- log.debug("The '".concat(releaseName, "' context has already been created."));
202
- success = true;
203
- }
204
- return [
205
- 3,
206
- 5
207
- ];
208
- case 1:
209
- log1 = context.log, dependencyString = dependency.asString(), dependentNamesLength = dependentNames.length;
210
- if (dependentNamesLength === 0) {
211
- log1.info("Creating the '".concat(releaseName, "' context..."));
212
- } else {
213
- lastDependentName = last(dependentNames), dependentName = lastDependentName; ///
214
- log1.info("Creating the '".concat(releaseName, "' context given the '").concat(dependentName, "' dependant's '").concat(dependencyString, "' dependency..."));
215
- }
216
- releaseContextFromDependency = context.releaseContextFromDependency;
217
- return [
218
- 4,
219
- releaseContextFromDependency(dependency, context)
220
- ];
221
- case 2:
222
- releaseContext1 = _state.sent(), releaseContextCreated = checkReleaseContextCreated(releaseContext1, dependency, context);
223
- if (!releaseContextCreated) return [
224
- 3,
225
- 4
226
- ];
227
- releaseMatchesDependency1 = checkReleaseMatchesDependency(releaseContext1, dependency, dependentNames, context);
228
- if (!releaseMatchesDependency1) return [
229
- 3,
230
- 4
231
- ];
232
- releaseContextMap[releaseName] = releaseContext1;
233
- return [
234
- 4,
235
- createDependencyReleaseContexts(dependency, releaseContext1, dependentNames, context)
236
- ];
237
- case 3:
238
- success = _state.sent();
239
- _state.label = 4;
240
- case 4:
241
- success ? log1.debug("...created the '".concat(releaseName, "' context.")) : log1.warning("...unable to create the '".concat(releaseName, "' context."));
242
- _state.label = 5;
243
- case 5:
244
- return [
245
- 2,
246
- success
247
- ];
248
- }
249
- });
250
- })();
251
- }
252
- function verifyReleaseContext(releaseName, dependentName, dependentReleased, releaseContextMap) {
253
- return _async_to_generator(function() {
254
- var releaseVerifies, releaseContext, released, _$dependentName, _$dependentReleased, dependencyReleaseContextsVerify, releaseContextVerified, releaseContextVerifies;
255
- return _ts_generator(this, function(_state) {
256
- switch(_state.label){
257
- case 0:
258
- releaseVerifies = false;
259
- releaseContext = releaseContextMap[releaseName];
260
- if (!(releaseContext !== null)) return [
261
- 3,
262
- 6
263
- ];
264
- released = releaseContext.isReleased();
265
- if (!released) return [
266
- 3,
267
- 1
268
- ];
269
- releaseVerifies = true;
270
- return [
271
- 3,
272
- 6
273
- ];
274
- case 1:
275
- if (!dependentReleased) return [
276
- 3,
277
- 2
278
- ];
279
- releaseContext.warning("The '".concat(releaseName, "' project cannot be verifies because its '").concat(dependentName, "' dependent is a package."));
280
- return [
281
- 3,
282
- 6
283
- ];
284
- case 2:
285
- _$dependentName = releaseName, _$dependentReleased = released;
286
- return [
287
- 4,
288
- verifyDependencyReleaseContexts(releaseContext, _$dependentName, _$dependentReleased, releaseContextMap)
289
- ];
290
- case 3:
291
- dependencyReleaseContextsVerify = _state.sent();
292
- if (!dependencyReleaseContextsVerify) return [
293
- 3,
294
- 6
295
- ];
296
- releaseContextVerified = releaseContext.hasVerified();
297
- if (!releaseContextVerified) return [
298
- 3,
299
- 4
300
- ];
301
- releaseVerifies = true;
302
- return [
303
- 3,
304
- 6
305
- ];
306
- case 4:
307
- releaseContext.info("Verifying the '".concat(releaseName, "' project..."));
308
- return [
309
- 4,
310
- releaseContext.verify()
311
- ];
312
- case 5:
313
- releaseContextVerifies = _state.sent();
314
- if (releaseContextVerifies) {
315
- releaseContext.info("...verified the '".concat(releaseName, "' project."));
316
- releaseVerifies = true;
317
- }
318
- _state.label = 6;
319
- case 6:
320
- return [
321
- 2,
322
- releaseVerifies
323
- ];
324
- }
325
- });
326
- })();
327
- }
328
- function initialiseReleaseContext(dependency, context) {
329
- var releaseContextMap = context.releaseContextMap, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
330
- if (releaseContext === null) {
331
- var log = context.log;
332
- log.warning("Unable to initialise the '".concat(dependencyName, "' context because it has not been created."));
333
- } else {
334
- var releaseContextInitialised = releaseContext.isInitialised();
335
- if (!releaseContextInitialised) {
336
- initialiseDependencyReleaseContexts(dependency, releaseContext, context);
337
- var log1 = context.log, releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
338
- log1.info("Initialising the '".concat(dependencyName, "' context..."));
339
- var FileContextFromFilePath = context.FileContextFromFilePath;
340
- releaseContext.initialise(releaseContexts, FileContextFromFilePath);
341
- log1.debug("...initialised the '".concat(dependencyName, "' context."));
342
- }
343
- }
344
- }
33
+ var isMetaJSONFileValid = _occammodel.metaJSONUtilities.isMetaJSONFileValid;
345
34
  function releaseContextFromJSON(json, context) {
346
35
  var log = context.log, callback = context.callback, name = json.name;
347
36
  context = json.context; ///
@@ -365,166 +54,14 @@ function releaseContextFromProject(project, context) {
365
54
  }
366
55
  return releaseContext;
367
56
  }
57
+ function releaseContextFromPelease(release, context) {
58
+ var log = context.log, callback = context.callback, name = release.getName(), json = null, entries = release.getEntries(), customGrammar = (0, _customGrammar.customGrammarFromNameAndEntries)(name, entries), releaseContext = _release.default.fromLogNameJSONEntriesCallbackAndCustomGrammar(log, name, json, entries, callback, customGrammar);
59
+ return releaseContext;
60
+ }
368
61
  var _default = {
369
- createReleaseContext: createReleaseContext,
370
- verifyReleaseContext: verifyReleaseContext,
371
62
  releaseContextFromJSON: releaseContextFromJSON,
372
- initialiseReleaseContext: initialiseReleaseContext,
373
- releaseContextFromProject: releaseContextFromProject
63
+ releaseContextFromProject: releaseContextFromProject,
64
+ releaseContextFromPelease: releaseContextFromPelease
374
65
  };
375
- function createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context) {
376
- return _async_to_generator(function() {
377
- var success, dependencyName, dependencies;
378
- return _ts_generator(this, function(_state) {
379
- switch(_state.label){
380
- case 0:
381
- dependencyName = dependency.getName(), dependencies = releaseContext.getDependencies();
382
- dependentNames = _to_consumable_array(dependentNames).concat([
383
- dependencyName
384
- ]); ///
385
- return [
386
- 4,
387
- (0, _dependency.asyncEveryDependency)(dependencies, function(dependency) {
388
- return _async_to_generator(function() {
389
- var success, cyclicDependencyExists;
390
- return _ts_generator(this, function(_state) {
391
- switch(_state.label){
392
- case 0:
393
- success = false;
394
- cyclicDependencyExists = checkCyclicDependencyExists(dependency, dependentNames, context);
395
- if (!!cyclicDependencyExists) return [
396
- 3,
397
- 2
398
- ];
399
- return [
400
- 4,
401
- createReleaseContext(dependency, dependentNames, context)
402
- ];
403
- case 1:
404
- success = _state.sent();
405
- _state.label = 2;
406
- case 2:
407
- return [
408
- 2,
409
- success
410
- ];
411
- }
412
- });
413
- })();
414
- })
415
- ];
416
- case 1:
417
- success = _state.sent();
418
- return [
419
- 2,
420
- success
421
- ];
422
- }
423
- });
424
- })();
425
- }
426
- function verifyDependencyReleaseContexts(releaseContext, dependentName, dependentReleased, releaseContextMap) {
427
- return _async_to_generator(function() {
428
- var dependencies, dependencyReleaseContextsVerify;
429
- return _ts_generator(this, function(_state) {
430
- switch(_state.label){
431
- case 0:
432
- dependencies = releaseContext.getDependencies();
433
- return [
434
- 4,
435
- (0, _dependency.asyncEveryDependency)(dependencies, function(dependency) {
436
- return _async_to_generator(function() {
437
- var name, releaseName, releaseContextVerifies;
438
- return _ts_generator(this, function(_state) {
439
- switch(_state.label){
440
- case 0:
441
- name = dependency.getName(), releaseName = name;
442
- return [
443
- 4,
444
- verifyReleaseContext(releaseName, dependentName, dependentReleased, releaseContextMap)
445
- ];
446
- case 1:
447
- releaseContextVerifies = _state.sent();
448
- if (releaseContextVerifies) {
449
- return [
450
- 2,
451
- true
452
- ];
453
- }
454
- return [
455
- 2
456
- ];
457
- }
458
- });
459
- })();
460
- })
461
- ];
462
- case 1:
463
- dependencyReleaseContextsVerify = _state.sent();
464
- return [
465
- 2,
466
- dependencyReleaseContextsVerify
467
- ];
468
- }
469
- });
470
- })();
471
- }
472
- function retrieveReleaseContexts(releaseContext, releaseContextMap) {
473
- var releaseContexts = [], remainingReleaseContext = releaseContext, remainingReleaseContexts = [
474
- remainingReleaseContext
475
- ];
476
- var remainingReleaseContextsLength = remainingReleaseContexts.length;
477
- while(remainingReleaseContextsLength > 0){
478
- var remainingReleaseContext1 = remainingReleaseContexts.shift(), _$releaseContext = remainingReleaseContext1; ///
479
- releaseContexts.push(_$releaseContext);
480
- var dependencies = _$releaseContext.getDependencies();
481
- dependencies.forEachDependency(function(dependency) {
482
- var dependencyName = dependency.getName(), releaseName = dependencyName, _$releaseContext = releaseContextMap[releaseName], releaseContextsIncludesReleaseContext = releaseContexts.includes(_$releaseContext), remainingReleaseContextsIncludesReleaseContext = remainingReleaseContexts.includes(_$releaseContext);
483
- if (!releaseContextsIncludesReleaseContext && !remainingReleaseContextsIncludesReleaseContext) {
484
- var remainingReleaseContext = _$releaseContext; ///
485
- remainingReleaseContexts.push(remainingReleaseContext);
486
- }
487
- });
488
- remainingReleaseContextsLength = remainingReleaseContexts.length;
489
- }
490
- return releaseContexts;
491
- }
492
- function checkReleaseContextCreated(releaseContext, dependency, context) {
493
- var releaseContextCreated = releaseContext !== null;
494
- if (!releaseContextCreated) {
495
- var log = context.log, dependencyName = dependency.getName(), releaseName = dependencyName; ///
496
- log.warning("The '".concat(releaseName, "' context could not be created. Perhaps the 'meta.json' file is missing or invalid. Or there could be a dependency mismatch."));
497
- }
498
- return releaseContextCreated;
499
- }
500
- function checkCyclicDependencyExists(dependency, dependentNames, context) {
501
- var dependencyName = dependency.getName(), dependentNamesIncludesDependencyName = dependentNames.includes(dependencyName), cyclicDependencyExists = dependentNamesIncludesDependencyName; ///
502
- if (cyclicDependencyExists) {
503
- var log = context.log, firstDependentName = first(dependentNames), dependencyNames = _to_consumable_array(dependentNames).concat([
504
- firstDependentName
505
- ]), dependencyNamesString = dependencyNames.join("' -> '");
506
- log.warning("There is a cyclic dependency, '".concat(dependencyNamesString, "'."));
507
- }
508
- return cyclicDependencyExists;
509
- }
510
- function checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context) {
511
- var releaseMatchesDependency = true;
512
- var shortenedVersion = dependency.getShortedVersion();
513
- if (shortenedVersion !== null) {
514
- var entriesMatchShortenedVersion = releaseContext.matchShortenedVersion(shortenedVersion);
515
- if (!entriesMatchShortenedVersion) {
516
- var log = context.log, version = releaseContext.getVersion(), lastDependentName = last(dependentNames), dependentName = lastDependentName, versionString = version.toString(), dependencyString = dependency.asString();
517
- log.warning("The '".concat(dependentName, "' dependent requires the '").concat(dependencyString, "' dependency but a context with version '").concat(versionString, "' was provided."));
518
- releaseMatchesDependency = false;
519
- }
520
- }
521
- return releaseMatchesDependency;
522
- }
523
- function initialiseDependencyReleaseContexts(dependency, releaseContext, context) {
524
- var dependencies = releaseContext.getDependencies();
525
- dependencies.forEachDependency(function(dependency) {
526
- initialiseReleaseContext(dependency, context);
527
- });
528
- }
529
66
 
530
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVsZWFzZUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRW50cmllcywgbWV0YUpTT05VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbW9kZWxcIjtcblxuaW1wb3J0IFJlbGVhc2VDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3JlbGVhc2VcIjtcblxuaW1wb3J0IHsgYXN5bmNFdmVyeURlcGVuZGVuY3kgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RlcGVuZGVuY3lcIjtcbmltcG9ydCB7IGN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2N1c3RvbUdyYW1tYXJcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgaXNNZXRhSlNPTkZpbGVWYWxpZCB9ID0gbWV0YUpTT05VdGlsaXRpZXM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSB8fCBudWxsO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAocmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLmApO1xuXG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKSxcbiAgICAgICAgICBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aDtcblxuICAgIGlmIChkZXBlbmRlbnROYW1lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQuLi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZTsgIC8vL1xuXG4gICAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJlbGVhc2VDb250ZXh0ID0gYXdhaXQgcmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBjb250ZXh0KSxcbiAgICAgICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSBjaGVja1JlbGVhc2VDb250ZXh0Q3JlYXRlZChyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICBjb25zdCByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KSB7XG4gICAgICAgIHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSA9IHJlbGVhc2VDb250ZXh0O1xuXG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VjY2VzcyA/XG4gICAgICBsb2cuZGVidWcoYC4uLmNyZWF0ZWQgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dC5gKSA6XG4gICAgICAgIGxvZy53YXJuaW5nKGAuLi51bmFibGUgdG8gY3JlYXRlIHRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQuYCk7XG4gIH1cblxuICByZXR1cm4gc3VjY2Vzcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VOYW1lLCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApIHtcbiAgbGV0IHJlbGVhc2VWZXJpZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpO1xuXG4gICAgaWYgKHJlbGVhc2VkKSB7XG4gICAgICByZWxlYXNlVmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGVwZW5kZW50UmVsZWFzZWQpIHtcbiAgICAgICAgcmVsZWFzZUNvbnRleHQud2FybmluZyhgVGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdCBjYW5ub3QgYmUgdmVyaWZpZXMgYmVjYXVzZSBpdHMgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCBpcyBhIHBhY2thZ2UuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZXBlbmRlbnROYW1lID0gcmVsZWFzZU5hbWUsICAvLy9cbiAgICAgICAgICAgICAgZGVwZW5kZW50UmVsZWFzZWQgPSByZWxlYXNlZCwgLy8vXG4gICAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnkgPSBhd2FpdCB2ZXJpZnlEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApO1xuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzVmVyaWZ5KSB7XG4gICAgICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRWZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgICAgICAgICBpZiAocmVsZWFzZUNvbnRleHRWZXJpZmllZCkge1xuICAgICAgICAgICAgcmVsZWFzZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHQuaW5mbyhgVmVyaWZ5aW5nIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuLi5gKTtcblxuICAgICAgICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRWZXJpZmllcyA9IGF3YWl0IHJlbGVhc2VDb250ZXh0LnZlcmlmeSgpO1xuXG4gICAgICAgICAgICBpZiAocmVsZWFzZUNvbnRleHRWZXJpZmllcykge1xuICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dC5pbmZvKGAuLi52ZXJpZmllZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0LmApO1xuXG4gICAgICAgICAgICAgIHJlbGVhc2VWZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VWZXJpZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSB8fCBudWxsO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgbG9nLndhcm5pbmcoYFVuYWJsZSB0byBpbml0aWFsaXNlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGNvbnRleHQgYmVjYXVzZSBpdCBoYXMgbm90IGJlZW4gY3JlYXRlZC5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkID0gcmVsZWFzZUNvbnRleHQuaXNJbml0aWFsaXNlZCgpO1xuXG4gICAgaWYgKCFyZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkKSB7XG4gICAgICBpbml0aWFsaXNlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCByZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRzID0gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIHJlbGVhc2VDb250ZXh0TWFwKTtcblxuICAgICAgbG9nLmluZm8oYEluaXRpYWxpc2luZyB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBjb250ZXh0Li4uYCk7XG5cbiAgICAgIGNvbnN0IHsgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICAgIHJlbGVhc2VDb250ZXh0LmluaXRpYWxpc2UocmVsZWFzZUNvbnRleHRzLCBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgLi4uaW5pdGlhbGlzZWQgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2VDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZywgY2FsbGJhY2sgfSA9IGNvbnRleHQsXG4gICAgICAgIHsgbmFtZSB9ID0ganNvbjtcblxuICAoe2NvbnRleHR9ID0ganNvbik7IC8vL1xuXG4gIGxldCB7IGVudHJpZXMgfSA9IGpzb247XG5cbiAganNvbiA9IGVudHJpZXM7IC8vL1xuXG4gIGVudHJpZXMgPSBFbnRyaWVzLmZyb21KU09OKGpzb24pO1xuXG4gIGNvbnN0IGNvbnRleHRKU09OID0gY29udGV4dDsgIC8vL1xuXG4gIGpzb24gPSBjb250ZXh0SlNPTjsgLy8vXG5cbiAgY29uc3QgY3VzdG9tR3JhbW1hciA9IGN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gUmVsZWFzZUNvbnRleHQuZnJvbUxvZ05hbWVKU09ORW50cmllc0NhbGxiYWNrQW5kQ3VzdG9tR3JhbW1hcihsb2csIG5hbWUsIGpzb24sIGVudHJpZXMsIGNhbGxiYWNrLCBjdXN0b21HcmFtbWFyKTtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxlYXNlQ29udGV4dEZyb21Qcm9qZWN0KHByb2plY3QsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VDb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhSlNPTkZpbGUgPSBwcm9qZWN0LmdldE1ldGFKU09ORmlsZSgpO1xuXG4gIGlmIChtZXRhSlNPTkZpbGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhSlNPTkZpbGVWYWxpZCA9IGlzTWV0YUpTT05GaWxlVmFsaWQobWV0YUpTT05GaWxlKTtcblxuICAgIGlmIChtZXRhSlNPTkZpbGVWYWxpZCkge1xuICAgICAgY29uc3QgeyBsb2csIGNhbGxiYWNrIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZSA9IHByb2plY3QuZ2V0TmFtZSgpLFxuICAgICAgICAgICAganNvbiA9IG51bGwsXG4gICAgICAgICAgICBlbnRyaWVzID0gcHJvamVjdC5nZXRFbnRyaWVzKCksXG4gICAgICAgICAgICBjdXN0b21HcmFtbWFyID0gY3VzdG9tR3JhbW1hckZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcblxuICAgICAgcmVsZWFzZUNvbnRleHQgPSBSZWxlYXNlQ29udGV4dC5mcm9tTG9nTmFtZUpTT05FbnRyaWVzQ2FsbGJhY2tBbmRDdXN0b21HcmFtbWFyKGxvZywgbmFtZSwganNvbiwgZW50cmllcywgY2FsbGJhY2ssIGN1c3RvbUdyYW1tYXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVSZWxlYXNlQ29udGV4dCxcbiAgdmVyaWZ5UmVsZWFzZUNvbnRleHQsXG4gIHJlbGVhc2VDb250ZXh0RnJvbUpTT04sXG4gIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCxcbiAgcmVsZWFzZUNvbnRleHRGcm9tUHJvamVjdFxufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCByZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHN1Y2Nlc3M7XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgZGVwZW5kZW50TmFtZXMgPSBbIC4uLmRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbmN5TmFtZSBdOyAgLy8vXG5cbiAgc3VjY2VzcyA9IGF3YWl0IGFzeW5jRXZlcnlEZXBlbmRlbmN5KGRlcGVuZGVuY2llcywgYXN5bmMgKGRlcGVuZGVuY3kpID0+IHtcbiAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY3ljbGljRGVwZW5kZW5jeUV4aXN0cyA9IGNoZWNrQ3ljbGljRGVwZW5kZW5jeUV4aXN0cyhkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAoIWN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH0pO1xuXG4gIHJldHVybiBzdWNjZXNzO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApIHtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCksXG4gICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnkgPSBhd2FpdCBhc3luY0V2ZXJ5RGVwZW5kZW5jeShkZXBlbmRlbmNpZXMsIGFzeW5jIChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICAgIHJlbGVhc2VOYW1lID0gbmFtZSwgLy8vXG4gICAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRWZXJpZmllcyA9IGF3YWl0IHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VOYW1lLCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApO1xuXG4gICAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0VmVyaWZpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnk7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCByZWxlYXNlQ29udGV4dE1hcCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHMgPSBbXSxcbiAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dCwgIC8vL1xuICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMgPSBbXG4gICAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRcbiAgICAgICAgXTtcblxuICBsZXQgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmxlbmd0aDtcblxuICB3aGlsZSAocmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLnNoaWZ0KCksXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dDsgIC8vL1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdLFxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCksXG4gICAgICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICAgICAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ICYmICFyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gICAgICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5wdXNoKHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0xlbmd0aCA9IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHRzO1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VDb250ZXh0Q3JlYXRlZChyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSAocmVsZWFzZUNvbnRleHQgIT09IG51bGwpO1xuXG4gIGlmICghcmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lOyAvLy9cblxuICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7cmVsZWFzZU5hbWV9JyBjb250ZXh0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBQZXJoYXBzIHRoZSAnbWV0YS5qc29uJyBmaWxlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4gT3IgdGhlcmUgY291bGQgYmUgYSBkZXBlbmRlbmN5IG1pc21hdGNoLmApO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0Q3JlYXRlZDtcbn1cblxuZnVuY3Rpb24gY2hlY2tDeWNsaWNEZXBlbmRlbmN5RXhpc3RzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzSW5jbHVkZXNEZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVudE5hbWVzLmluY2x1ZGVzKGRlcGVuZGVuY3lOYW1lKSxcbiAgICAgICAgY3ljbGljRGVwZW5kZW5jeUV4aXN0cyA9IGRlcGVuZGVudE5hbWVzSW5jbHVkZXNEZXBlbmRlbmN5TmFtZTsgIC8vL1xuXG4gIGlmIChjeWNsaWNEZXBlbmRlbmN5RXhpc3RzKSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgZmlyc3REZXBlbmRlbnROYW1lID0gZmlyc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgIGRlcGVuZGVuY3lOYW1lcyA9IFsgIC8vL1xuICAgICAgICAgICAgLi4uZGVwZW5kZW50TmFtZXMsXG4gICAgICAgICAgICBmaXJzdERlcGVuZGVudE5hbWVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRlcGVuZGVuY3lOYW1lc1N0cmluZyA9IGRlcGVuZGVuY3lOYW1lcy5qb2luKGAnIC0+ICdgKTtcblxuICAgIGxvZy53YXJuaW5nKGBUaGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5LCAnJHtkZXBlbmRlbmN5TmFtZXNTdHJpbmd9Jy5gKTtcbiAgfVxuXG4gIHJldHVybiBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IHRydWU7XG5cbiAgY29uc3Qgc2hvcnRlbmVkVmVyc2lvbiA9IGRlcGVuZGVuY3kuZ2V0U2hvcnRlZFZlcnNpb24oKTtcblxuICBpZiAoc2hvcnRlbmVkVmVyc2lvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24gPSByZWxlYXNlQ29udGV4dC5tYXRjaFNob3J0ZW5lZFZlcnNpb24oc2hvcnRlbmVkVmVyc2lvbik7XG5cbiAgICBpZiAoIWVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24pIHtcbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgdmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0LmdldFZlcnNpb24oKSxcbiAgICAgICAgICAgIGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWUsICAvLy9cbiAgICAgICAgICAgIHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpO1xuXG4gICAgICBsb2cud2FybmluZyhgVGhlICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRlbnQgcmVxdWlyZXMgdGhlICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5IGJ1dCBhIGNvbnRleHQgd2l0aCB2ZXJzaW9uICcke3ZlcnNpb25TdHJpbmd9JyB3YXMgcHJvdmlkZWQuYCk7XG5cbiAgICAgIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3k7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpO1xuXG4gIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4geyAgLy8vXG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVSZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VDb250ZXh0RnJvbUpTT04iLCJyZWxlYXNlQ29udGV4dEZyb21Qcm9qZWN0IiwidmVyaWZ5UmVsZWFzZUNvbnRleHQiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJpc01ldGFKU09ORmlsZVZhbGlkIiwibWV0YUpTT05VdGlsaXRpZXMiLCJkZXBlbmRlbmN5IiwiZGVwZW5kZW50TmFtZXMiLCJjb250ZXh0Iiwic3VjY2VzcyIsInJlbGVhc2VDb250ZXh0TWFwIiwiZGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlTmFtZSIsInJlbGVhc2VDb250ZXh0IiwibG9nIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiZGVwZW5kZW5jeVN0cmluZyIsImRlcGVuZGVudE5hbWVzTGVuZ3RoIiwibGFzdERlcGVuZGVudE5hbWUiLCJkZXBlbmRlbnROYW1lIiwicmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeSIsInJlbGVhc2VDb250ZXh0Q3JlYXRlZCIsImdldE5hbWUiLCJjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsImRlYnVnIiwiYXNTdHJpbmciLCJsZW5ndGgiLCJpbmZvIiwiY2hlY2tSZWxlYXNlQ29udGV4dENyZWF0ZWQiLCJjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwid2FybmluZyIsImRlcGVuZGVudFJlbGVhc2VkIiwicmVsZWFzZVZlcmlmaWVzIiwicmVsZWFzZWQiLCJkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzVmVyaWZ5IiwicmVsZWFzZUNvbnRleHRWZXJpZmllZCIsInJlbGVhc2VDb250ZXh0VmVyaWZpZXMiLCJpc1JlbGVhc2VkIiwidmVyaWZ5RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsImhhc1ZlcmlmaWVkIiwidmVyaWZ5IiwicmVsZWFzZUNvbnRleHRJbml0aWFsaXNlZCIsImlzSW5pdGlhbGlzZWQiLCJpbml0aWFsaXNlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsInJlbGVhc2VDb250ZXh0cyIsInJldHJpZXZlUmVsZWFzZUNvbnRleHRzIiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwianNvbiIsImNhbGxiYWNrIiwibmFtZSIsImVudHJpZXMiLCJFbnRyaWVzIiwiZnJvbUpTT04iLCJjb250ZXh0SlNPTiIsImN1c3RvbUdyYW1tYXIiLCJjdXN0b21HcmFtbWFyRnJvbU5hbWVBbmRFbnRyaWVzIiwiUmVsZWFzZUNvbnRleHQiLCJmcm9tTG9nTmFtZUpTT05FbnRyaWVzQ2FsbGJhY2tBbmRDdXN0b21HcmFtbWFyIiwicHJvamVjdCIsIm1ldGFKU09ORmlsZSIsImdldE1ldGFKU09ORmlsZSIsIm1ldGFKU09ORmlsZVZhbGlkIiwiZ2V0RW50cmllcyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImFzeW5jRXZlcnlEZXBlbmRlbmN5IiwiY3ljbGljRGVwZW5kZW5jeUV4aXN0cyIsImNoZWNrQ3ljbGljRGVwZW5kZW5jeUV4aXN0cyIsInJlbWFpbmluZ1JlbGVhc2VDb250ZXh0IiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHRzIiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoIiwic2hpZnQiLCJwdXNoIiwiZm9yRWFjaERlcGVuZGVuY3kiLCJyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiaW5jbHVkZXMiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lIiwiZmlyc3REZXBlbmRlbnROYW1lIiwiZmlyc3QiLCJkZXBlbmRlbmN5TmFtZXMiLCJkZXBlbmRlbmN5TmFtZXNTdHJpbmciLCJqb2luIiwic2hvcnRlbmVkVmVyc2lvbiIsImdldFNob3J0ZWRWZXJzaW9uIiwiZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiIsIm1hdGNoU2hvcnRlbmVkVmVyc2lvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwidmVyc2lvblN0cmluZyIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFhc0JBO2VBQUFBOztRQXlLdEI7ZUFBQTs7UUExRWdCQztlQUFBQTs7UUE4QkFDO2VBQUFBOztRQXNC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
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVsZWFzZUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVudHJpZXMsIG1ldGFKU09OVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5cbmltcG9ydCBSZWxlYXNlQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9yZWxlYXNlXCI7XG5cbmltcG9ydCB7IGN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2N1c3RvbUdyYW1tYXJcIjtcblxuY29uc3QgeyBpc01ldGFKU09ORmlsZVZhbGlkIH0gPSBtZXRhSlNPTlV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2VDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZywgY2FsbGJhY2sgfSA9IGNvbnRleHQsXG4gICAgICAgIHsgbmFtZSB9ID0ganNvbjtcblxuICAoe2NvbnRleHR9ID0ganNvbik7IC8vL1xuXG4gIGxldCB7IGVudHJpZXMgfSA9IGpzb247XG5cbiAganNvbiA9IGVudHJpZXM7IC8vL1xuXG4gIGVudHJpZXMgPSBFbnRyaWVzLmZyb21KU09OKGpzb24pO1xuXG4gIGNvbnN0IGNvbnRleHRKU09OID0gY29udGV4dDsgIC8vL1xuXG4gIGpzb24gPSBjb250ZXh0SlNPTjsgLy8vXG5cbiAgY29uc3QgY3VzdG9tR3JhbW1hciA9IGN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gUmVsZWFzZUNvbnRleHQuZnJvbUxvZ05hbWVKU09ORW50cmllc0NhbGxiYWNrQW5kQ3VzdG9tR3JhbW1hcihsb2csIG5hbWUsIGpzb24sIGVudHJpZXMsIGNhbGxiYWNrLCBjdXN0b21HcmFtbWFyKTtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxlYXNlQ29udGV4dEZyb21Qcm9qZWN0KHByb2plY3QsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VDb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhSlNPTkZpbGUgPSBwcm9qZWN0LmdldE1ldGFKU09ORmlsZSgpO1xuXG4gIGlmIChtZXRhSlNPTkZpbGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhSlNPTkZpbGVWYWxpZCA9IGlzTWV0YUpTT05GaWxlVmFsaWQobWV0YUpTT05GaWxlKTtcblxuICAgIGlmIChtZXRhSlNPTkZpbGVWYWxpZCkge1xuICAgICAgY29uc3QgeyBsb2csIGNhbGxiYWNrIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZSA9IHByb2plY3QuZ2V0TmFtZSgpLFxuICAgICAgICAgICAganNvbiA9IG51bGwsXG4gICAgICAgICAgICBlbnRyaWVzID0gcHJvamVjdC5nZXRFbnRyaWVzKCksXG4gICAgICAgICAgICBjdXN0b21HcmFtbWFyID0gY3VzdG9tR3JhbW1hckZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcblxuICAgICAgcmVsZWFzZUNvbnRleHQgPSBSZWxlYXNlQ29udGV4dC5mcm9tTG9nTmFtZUpTT05FbnRyaWVzQ2FsbGJhY2tBbmRDdXN0b21HcmFtbWFyKGxvZywgbmFtZSwganNvbiwgZW50cmllcywgY2FsbGJhY2ssIGN1c3RvbUdyYW1tYXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2VDb250ZXh0RnJvbVBlbGVhc2UocmVsZWFzZSwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZywgY2FsbGJhY2sgfSA9IGNvbnRleHQsXG4gICAgICAgIG5hbWUgPSByZWxlYXNlLmdldE5hbWUoKSxcbiAgICAgICAganNvbiA9IG51bGwsXG4gICAgICAgIGVudHJpZXMgPSByZWxlYXNlLmdldEVudHJpZXMoKSxcbiAgICAgICAgY3VzdG9tR3JhbW1hciA9IGN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gUmVsZWFzZUNvbnRleHQuZnJvbUxvZ05hbWVKU09ORW50cmllc0NhbGxiYWNrQW5kQ3VzdG9tR3JhbW1hcihsb2csIG5hbWUsIGpzb24sIGVudHJpZXMsIGNhbGxiYWNrLCBjdXN0b21HcmFtbWFyKTtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVsZWFzZUNvbnRleHRGcm9tSlNPTixcbiAgcmVsZWFzZUNvbnRleHRGcm9tUHJvamVjdCxcbiAgcmVsZWFzZUNvbnRleHRGcm9tUGVsZWFzZVxufTtcbiJdLCJuYW1lcyI6WyJyZWxlYXNlQ29udGV4dEZyb21KU09OIiwicmVsZWFzZUNvbnRleHRGcm9tUGVsZWFzZSIsInJlbGVhc2VDb250ZXh0RnJvbVByb2plY3QiLCJpc01ldGFKU09ORmlsZVZhbGlkIiwibWV0YUpTT05VdGlsaXRpZXMiLCJqc29uIiwiY29udGV4dCIsImxvZyIsImNhbGxiYWNrIiwibmFtZSIsImVudHJpZXMiLCJFbnRyaWVzIiwiZnJvbUpTT04iLCJjb250ZXh0SlNPTiIsImN1c3RvbUdyYW1tYXIiLCJjdXN0b21HcmFtbWFyRnJvbU5hbWVBbmRFbnRyaWVzIiwicmVsZWFzZUNvbnRleHQiLCJSZWxlYXNlQ29udGV4dCIsImZyb21Mb2dOYW1lSlNPTkVudHJpZXNDYWxsYmFja0FuZEN1c3RvbUdyYW1tYXIiLCJwcm9qZWN0IiwibWV0YUpTT05GaWxlIiwiZ2V0TWV0YUpTT05GaWxlIiwibWV0YUpTT05GaWxlVmFsaWQiLCJnZXROYW1lIiwiZ2V0RW50cmllcyIsInJlbGVhc2UiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWlFQTtlQUFBOztRQXZEZ0JBO2VBQUFBOztRQTRDQUM7ZUFBQUE7O1FBdEJBQztlQUFBQTs7OzBCQTlCMkI7OERBRWhCOzZCQUVxQjs7Ozs7O0FBRWhELElBQU0sQUFBRUMsc0JBQXdCQyw2QkFBaUIsQ0FBekNEO0FBRUQsU0FBU0gsdUJBQXVCSyxJQUFJLEVBQUVDLE9BQU87SUFDbEQsSUFBUUMsTUFBa0JELFFBQWxCQyxLQUFLQyxXQUFhRixRQUFiRSxVQUNQLEFBQUVDLE9BQVNKLEtBQVRJO0lBRU5ILFVBQVdELEtBQVhDLFNBQWtCLEdBQUc7SUFFdkIsSUFBSSxBQUFFSSxVQUFZTCxLQUFaSztJQUVOTCxPQUFPSyxTQUFTLEdBQUc7SUFFbkJBLFVBQVVDLG1CQUFPLENBQUNDLFFBQVEsQ0FBQ1A7SUFFM0IsSUFBTVEsY0FBY1AsU0FBVSxHQUFHO0lBRWpDRCxPQUFPUSxhQUFhLEdBQUc7SUFFdkIsSUFBTUMsZ0JBQWdCQyxJQUFBQSw4Q0FBK0IsRUFBQ04sTUFBTUMsVUFDdERNLGlCQUFpQkMsZ0JBQWMsQ0FBQ0MsOENBQThDLENBQUNYLEtBQUtFLE1BQU1KLE1BQU1LLFNBQVNGLFVBQVVNO0lBRXpILE9BQU9FO0FBQ1Q7QUFFTyxTQUFTZCwwQkFBMEJpQixPQUFPLEVBQUViLE9BQU87SUFDeEQsSUFBSVUsaUJBQWlCO0lBRXJCLElBQU1JLGVBQWVELFFBQVFFLGVBQWU7SUFFNUMsSUFBSUQsaUJBQWlCLE1BQU07UUFDekIsSUFBTUUsb0JBQW9CbkIsb0JBQW9CaUI7UUFFOUMsSUFBSUUsbUJBQW1CO1lBQ3JCLElBQVFmLE1BQWtCRCxRQUFsQkMsS0FBS0MsV0FBYUYsUUFBYkUsVUFDUEMsT0FBT1UsUUFBUUksT0FBTyxJQUN0QmxCLE9BQU8sTUFDUEssVUFBVVMsUUFBUUssVUFBVSxJQUM1QlYsZ0JBQWdCQyxJQUFBQSw4Q0FBK0IsRUFBQ04sTUFBTUM7WUFFNURNLGlCQUFpQkMsZ0JBQWMsQ0FBQ0MsOENBQThDLENBQUNYLEtBQUtFLE1BQU1KLE1BQU1LLFNBQVNGLFVBQVVNO1FBQ3JIO0lBQ0Y7SUFFQSxPQUFPRTtBQUNUO0FBRU8sU0FBU2YsMEJBQTBCd0IsT0FBTyxFQUFFbkIsT0FBTztJQUN4RCxJQUFRQyxNQUFrQkQsUUFBbEJDLEtBQUtDLFdBQWFGLFFBQWJFLFVBQ1BDLE9BQU9nQixRQUFRRixPQUFPLElBQ3RCbEIsT0FBTyxNQUNQSyxVQUFVZSxRQUFRRCxVQUFVLElBQzVCVixnQkFBZ0JDLElBQUFBLDhDQUErQixFQUFDTixNQUFNQyxVQUN0RE0saUJBQWlCQyxnQkFBYyxDQUFDQyw4Q0FBOEMsQ0FBQ1gsS0FBS0UsTUFBTUosTUFBTUssU0FBU0YsVUFBVU07SUFFekgsT0FBT0U7QUFDVDtJQUVBLFdBQWU7SUFDYmhCLHdCQUFBQTtJQUNBRSwyQkFBQUE7SUFDQUQsMkJBQUFBO0FBQ0YifQ==