occam-verify-cli 0.0.368 → 0.0.370

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.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- const { ReleaseContext } = require("../../lib/index"), ///
4
- { fileSystemUtilities : occamFileSystemUtilities } = require("occam-file-system"),
3
+ const { DirectoryReleaseContext } = require("../../lib/index"), ///
4
+ { Entries, fileSystemUtilities : occamFileSystemUtilities } = require("occam-file-system"),
5
5
  { loggingUtilities, fileSystemUtilities : necessaryFileSystemUtilities } = require("necessary");
6
6
 
7
7
  const callbacks = require("../callbacks");
@@ -10,7 +10,7 @@ const { log } = loggingUtilities,
10
10
  { loadRelease } = occamFileSystemUtilities,
11
11
  { readFile, isEntryFile } = necessaryFileSystemUtilities;
12
12
 
13
- function releaseContextFromReleaseName(name, callback) {
13
+ function releaseContextFromReleaseName(name, context, callback) {
14
14
  const projectsDirectoryPath = process.cwd(), ///
15
15
  entryPath = `${projectsDirectoryPath}/${name}`,
16
16
  entryFile = isEntryFile(entryPath),
@@ -29,9 +29,16 @@ function releaseContextFromFile(name, projectsDirectoryPath) {
29
29
  let releaseContext = null;
30
30
 
31
31
  const filePath = `${projectsDirectoryPath}/${name}`,
32
- content = readFile(filePath);
32
+ content = readFile(filePath),
33
+ releaseJSONString = content, ///
34
+ releaseJSON = JSON.parse(releaseJSONString);
35
+
36
+ let { entries } = releaseJSON;
37
+
38
+ const json = entries; ///
39
+
40
+ entries = Entries.fromJSON(json);
33
41
 
34
- debugger
35
42
 
36
43
  return releaseContext;
37
44
  }
@@ -43,7 +50,9 @@ function releaseContextFromDirectory(name, projectsDirectoryPath) {
43
50
  release = loadRelease(topmostDirectoryName, projectsDirectoryPath);
44
51
 
45
52
  if (release !== null) {
46
- releaseContext = ReleaseContext.fromLogReleaseAndCallbacks(log, release, callbacks);
53
+ const directoryReleaseContext = DirectoryReleaseContext.fromLogReleaseAndCallbacks(log, release, callbacks);
54
+
55
+ releaseContext = directoryReleaseContext; ///
47
56
  }
48
57
 
49
58
  return releaseContext;
@@ -0,0 +1,314 @@
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 DirectoryReleaseContext;
9
+ }
10
+ });
11
+ var _release = /*#__PURE__*/ _interopRequireDefault(require("../../context/release"));
12
+ var _array = require("../../utilities/array");
13
+ var _customGrammar = require("../../utilities/customGrammar");
14
+ function _assertThisInitialized(self) {
15
+ if (self === void 0) {
16
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
17
+ }
18
+ return self;
19
+ }
20
+ function _classCallCheck(instance, Constructor) {
21
+ if (!(instance instanceof Constructor)) {
22
+ throw new TypeError("Cannot call a class as a function");
23
+ }
24
+ }
25
+ function _defineProperties(target, props) {
26
+ for(var i = 0; i < props.length; i++){
27
+ var descriptor = props[i];
28
+ descriptor.enumerable = descriptor.enumerable || false;
29
+ descriptor.configurable = true;
30
+ if ("value" in descriptor) descriptor.writable = true;
31
+ Object.defineProperty(target, descriptor.key, descriptor);
32
+ }
33
+ }
34
+ function _createClass(Constructor, protoProps, staticProps) {
35
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
36
+ if (staticProps) _defineProperties(Constructor, staticProps);
37
+ return Constructor;
38
+ }
39
+ function _getPrototypeOf(o) {
40
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
41
+ return o.__proto__ || Object.getPrototypeOf(o);
42
+ };
43
+ return _getPrototypeOf(o);
44
+ }
45
+ function _inherits(subClass, superClass) {
46
+ if (typeof superClass !== "function" && superClass !== null) {
47
+ throw new TypeError("Super expression must either be null or a function");
48
+ }
49
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
50
+ constructor: {
51
+ value: subClass,
52
+ writable: true,
53
+ configurable: true
54
+ }
55
+ });
56
+ if (superClass) _setPrototypeOf(subClass, superClass);
57
+ }
58
+ function _interopRequireDefault(obj) {
59
+ return obj && obj.__esModule ? obj : {
60
+ default: obj
61
+ };
62
+ }
63
+ function _possibleConstructorReturn(self, call) {
64
+ if (call && (_typeof(call) === "object" || typeof call === "function")) {
65
+ return call;
66
+ }
67
+ return _assertThisInitialized(self);
68
+ }
69
+ function _setPrototypeOf(o, p) {
70
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
71
+ o.__proto__ = p;
72
+ return o;
73
+ };
74
+ return _setPrototypeOf(o, p);
75
+ }
76
+ var _typeof = function(obj) {
77
+ "@swc/helpers - typeof";
78
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
79
+ };
80
+ function _isNativeReflectConstruct() {
81
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
82
+ if (Reflect.construct.sham) return false;
83
+ if (typeof Proxy === "function") return true;
84
+ try {
85
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
86
+ return true;
87
+ } catch (e) {
88
+ return false;
89
+ }
90
+ }
91
+ function _createSuper(Derived) {
92
+ var hasNativeReflectConstruct = _isNativeReflectConstruct();
93
+ return function _createSuperInternal() {
94
+ var Super = _getPrototypeOf(Derived), result;
95
+ if (hasNativeReflectConstruct) {
96
+ var NewTarget = _getPrototypeOf(this).constructor;
97
+ result = Reflect.construct(Super, arguments, NewTarget);
98
+ } else {
99
+ result = Super.apply(this, arguments);
100
+ }
101
+ return _possibleConstructorReturn(this, result);
102
+ };
103
+ }
104
+ var DirectoryReleaseContext = /*#__PURE__*/ function(ReleaseContext) {
105
+ _inherits(DirectoryReleaseContext, ReleaseContext);
106
+ var _super = _createSuper(DirectoryReleaseContext);
107
+ function DirectoryReleaseContext(log, verified, callbacks, customGrammar, florenceLexer, florenceParser, releaseContexts, fileContexts, release) {
108
+ _classCallCheck(this, DirectoryReleaseContext);
109
+ var _this;
110
+ _this = _super.call(this, log, verified, callbacks, customGrammar, florenceLexer, florenceParser, releaseContexts);
111
+ _this.fileContexts = fileContexts;
112
+ _this.release = release;
113
+ return _this;
114
+ }
115
+ _createClass(DirectoryReleaseContext, [
116
+ {
117
+ key: "getFileContexts",
118
+ value: function getFileContexts() {
119
+ return this.fileContexts;
120
+ }
121
+ },
122
+ {
123
+ key: "getRelease",
124
+ value: function getRelease() {
125
+ return this.release;
126
+ }
127
+ },
128
+ {
129
+ key: "getReleaseName",
130
+ value: function getReleaseName() {
131
+ var releaseName = this.release.getName();
132
+ return releaseName;
133
+ }
134
+ },
135
+ {
136
+ key: "getFile",
137
+ value: function getFile(filePath) {
138
+ return this.release.getFile(filePath);
139
+ }
140
+ },
141
+ {
142
+ key: "getVersion",
143
+ value: function getVersion() {
144
+ return this.release.getVersion();
145
+ }
146
+ },
147
+ {
148
+ key: "getFilePaths",
149
+ value: function getFilePaths() {
150
+ return this.release.getFilePaths();
151
+ }
152
+ },
153
+ {
154
+ key: "getDependencies",
155
+ value: function getDependencies() {
156
+ return this.release.getDependencies();
157
+ }
158
+ },
159
+ {
160
+ key: "matchShortenedVersion",
161
+ value: function matchShortenedVersion(shortenedVersion) {
162
+ return this.release.matchShortenedVersion(shortenedVersion);
163
+ }
164
+ },
165
+ {
166
+ key: "getRules",
167
+ value: function getRules() {
168
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
169
+ var rules = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
170
+ if (!releaseNamesIncludesReleaseName) {
171
+ releaseNames.push(releaseName);
172
+ var bubble = false;
173
+ this.fileContexts.forEach(function(fileContext) {
174
+ var fileContextRules = fileContext.getRules(bubble);
175
+ (0, _array.push)(rules, fileContextRules);
176
+ });
177
+ this.releaseContexts.forEach(function(releaseContext) {
178
+ var releaseContextRules = releaseContext.getRules(releaseNames);
179
+ (0, _array.push)(rules, releaseContextRules);
180
+ });
181
+ }
182
+ return rules;
183
+ }
184
+ },
185
+ {
186
+ key: "getTypes",
187
+ value: function getTypes() {
188
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
189
+ var types = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
190
+ if (!releaseNamesIncludesReleaseName) {
191
+ releaseNames.push(releaseName);
192
+ var bubble = false;
193
+ this.fileContexts.forEach(function(fileContext) {
194
+ var fileContextTypes = fileContext.getTypes(bubble);
195
+ (0, _array.push)(types, fileContextTypes);
196
+ });
197
+ this.releaseContexts.forEach(function(releaseContext) {
198
+ var releaseContextTypes = releaseContext.getTypes(releaseNames);
199
+ (0, _array.push)(types, releaseContextTypes);
200
+ });
201
+ }
202
+ return types;
203
+ }
204
+ },
205
+ {
206
+ key: "getAxioms",
207
+ value: function getAxioms() {
208
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
209
+ var axioms = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
210
+ if (!releaseNamesIncludesReleaseName) {
211
+ releaseNames.push(releaseName);
212
+ var bubble = false;
213
+ this.fileContexts.forEach(function(fileContext) {
214
+ var fileContextAxioms = fileContext.getAxioms(bubble);
215
+ (0, _array.push)(axioms, fileContextAxioms);
216
+ });
217
+ this.releaseContexts.forEach(function(releaseContext) {
218
+ var releaseContextAxioms = releaseContext.getAxioms(releaseNames);
219
+ (0, _array.push)(axioms, releaseContextAxioms);
220
+ });
221
+ }
222
+ return axioms;
223
+ }
224
+ },
225
+ {
226
+ key: "getLabels",
227
+ value: function getLabels() {
228
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
229
+ var labels = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
230
+ if (!releaseNamesIncludesReleaseName) {
231
+ releaseNames.push(releaseName);
232
+ var bubble = false;
233
+ this.fileContexts.forEach(function(fileContext) {
234
+ var fileContextLabels = fileContext.getLabels(bubble);
235
+ (0, _array.push)(labels, fileContextLabels);
236
+ });
237
+ this.releaseContexts.forEach(function(releaseContext) {
238
+ var releaseContextLabels = releaseContext.getLabels(releaseNames);
239
+ (0, _array.push)(labels, releaseContextLabels);
240
+ });
241
+ }
242
+ return labels;
243
+ }
244
+ },
245
+ {
246
+ key: "getCombinators",
247
+ value: function getCombinators() {
248
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
249
+ var combinators = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
250
+ if (!releaseNamesIncludesReleaseName) {
251
+ releaseNames.push(releaseName);
252
+ var bubble = false;
253
+ this.fileContexts.forEach(function(fileContext) {
254
+ var fileContextCombinators = fileContext.getCombinators(bubble);
255
+ (0, _array.push)(combinators, fileContextCombinators);
256
+ });
257
+ this.releaseContexts.forEach(function(releaseContext) {
258
+ var releaseContextCombinators = releaseContext.getCombinators(releaseNames);
259
+ (0, _array.push)(combinators, releaseContextCombinators);
260
+ });
261
+ }
262
+ return combinators;
263
+ }
264
+ },
265
+ {
266
+ key: "getConstructors",
267
+ value: function getConstructors() {
268
+ var releaseNames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
269
+ var constructors = [], releaseName = this.getReleaseName(), releaseNamesIncludesReleaseName = releaseNames.includes(releaseName);
270
+ if (!releaseNamesIncludesReleaseName) {
271
+ releaseNames.push(releaseName);
272
+ var bubble = false;
273
+ this.fileContexts.forEach(function(fileContext) {
274
+ var fileContextConstructors = fileContext.getConstructors(bubble);
275
+ (0, _array.push)(constructors, fileContextConstructors);
276
+ });
277
+ this.releaseContexts.forEach(function(releaseContext) {
278
+ var releaseContextConstructors = releaseContext.getConstructors(releaseNames);
279
+ (0, _array.push)(constructors, releaseContextConstructors);
280
+ });
281
+ }
282
+ return constructors;
283
+ }
284
+ },
285
+ {
286
+ key: "addFileContext",
287
+ value: function addFileContext(fileContext) {
288
+ this.fileContexts.push(fileContext);
289
+ }
290
+ },
291
+ {
292
+ key: "toJSON",
293
+ value: function toJSON() {
294
+ var json = [];
295
+ this.fileContexts.forEach(function(fileContext) {
296
+ var fileContextJSON = fileContext.toJSON();
297
+ (0, _array.push)(json, fileContextJSON);
298
+ });
299
+ return json;
300
+ }
301
+ }
302
+ ], [
303
+ {
304
+ key: "fromLogReleaseAndCallbacks",
305
+ value: function fromLogReleaseAndCallbacks(log, release, callbacks) {
306
+ var verified = false, customGrammar = (0, _customGrammar.customGrammarFromRelease)(release), florenceLexer = null, florenceParser = null, releaseContexts = null, fileContexts = [], releaseContext = new DirectoryReleaseContext(log, verified, callbacks, customGrammar, florenceLexer, florenceParser, releaseContexts, fileContexts, release);
307
+ return releaseContext;
308
+ }
309
+ }
310
+ ]);
311
+ return DirectoryReleaseContext;
312
+ }(_release.default);
313
+
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L3JlbGVhc2UvZGlyZWN0b3J5LmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVsZWFzZUNvbnRleHQgZnJvbSBcIi4uLy4uL2NvbnRleHQvcmVsZWFzZVwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY3VzdG9tR3JhbW1hckZyb21SZWxlYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jdXN0b21HcmFtbWFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdG9yeVJlbGVhc2VDb250ZXh0IGV4dGVuZHMgUmVsZWFzZUNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihsb2csIHZlcmlmaWVkLCBjYWxsYmFja3MsIGN1c3RvbUdyYW1tYXIsIGZsb3JlbmNlTGV4ZXIsIGZsb3JlbmNlUGFyc2VyLCByZWxlYXNlQ29udGV4dHMsIGZpbGVDb250ZXh0cywgcmVsZWFzZSkge1xuICAgIHN1cGVyKGxvZywgdmVyaWZpZWQsIGNhbGxiYWNrcywgY3VzdG9tR3JhbW1hciwgZmxvcmVuY2VMZXhlciwgZmxvcmVuY2VQYXJzZXIsIHJlbGVhc2VDb250ZXh0cyk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cyA9IGZpbGVDb250ZXh0cztcbiAgICB0aGlzLnJlbGVhc2UgPSByZWxlYXNlO1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHRzKCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0cztcbiAgfVxuXG4gIGdldFJlbGVhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsZWFzZTtcbiAgfVxuXG4gIGdldFJlbGVhc2VOYW1lKCkge1xuICAgIGNvbnN0IHJlbGVhc2VOYW1lID0gdGhpcy5yZWxlYXNlLmdldE5hbWUoKTtcblxuICAgIHJldHVybiByZWxlYXNlTmFtZTtcbiAgfVxuXG4gIGdldEZpbGUoZmlsZVBhdGgpIHsgcmV0dXJuIHRoaXMucmVsZWFzZS5nZXRGaWxlKGZpbGVQYXRoKTsgfVxuXG4gIGdldFZlcnNpb24oKSB7IHJldHVybiB0aGlzLnJlbGVhc2UuZ2V0VmVyc2lvbigpOyB9XG5cbiAgZ2V0RmlsZVBhdGhzKCkgeyByZXR1cm4gdGhpcy5yZWxlYXNlLmdldEZpbGVQYXRocygpOyB9XG5cbiAgZ2V0RGVwZW5kZW5jaWVzKCkgeyByZXR1cm4gdGhpcy5yZWxlYXNlLmdldERlcGVuZGVuY2llcygpOyB9XG5cbiAgbWF0Y2hTaG9ydGVuZWRWZXJzaW9uKHNob3J0ZW5lZFZlcnNpb24pIHsgcmV0dXJuIHRoaXMucmVsZWFzZS5tYXRjaFNob3J0ZW5lZFZlcnNpb24oc2hvcnRlbmVkVmVyc2lvbik7IH1cblxuICBnZXRSdWxlcyhyZWxlYXNlTmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IHJ1bGVzID0gW10sXG4gICAgICAgIHJlbGVhc2VOYW1lID0gdGhpcy5nZXRSZWxlYXNlTmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VOYW1lKTtcblxuICAgIGlmICghcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlTmFtZSkge1xuICAgICAgcmVsZWFzZU5hbWVzLnB1c2gocmVsZWFzZU5hbWUpO1xuXG4gICAgICBjb25zdCBidWJibGUgPSBmYWxzZTtcblxuICAgICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRleHRSdWxlcyA9IGZpbGVDb250ZXh0LmdldFJ1bGVzKGJ1YmJsZSk7XG5cbiAgICAgICAgcHVzaChydWxlcywgZmlsZUNvbnRleHRSdWxlcyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRSdWxlcyA9IHJlbGVhc2VDb250ZXh0LmdldFJ1bGVzKHJlbGVhc2VOYW1lcyk7XG5cbiAgICAgICAgcHVzaChydWxlcywgcmVsZWFzZUNvbnRleHRSdWxlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBnZXRUeXBlcyhyZWxlYXNlTmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgIHJlbGVhc2VOYW1lID0gdGhpcy5nZXRSZWxlYXNlTmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VOYW1lKTtcblxuICAgIGlmICghcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlTmFtZSkge1xuICAgICAgcmVsZWFzZU5hbWVzLnB1c2gocmVsZWFzZU5hbWUpO1xuXG4gICAgICBjb25zdCBidWJibGUgPSBmYWxzZTtcblxuICAgICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRleHRUeXBlcyA9IGZpbGVDb250ZXh0LmdldFR5cGVzKGJ1YmJsZSk7XG5cbiAgICAgICAgcHVzaCh0eXBlcywgZmlsZUNvbnRleHRUeXBlcyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRUeXBlcyA9IHJlbGVhc2VDb250ZXh0LmdldFR5cGVzKHJlbGVhc2VOYW1lcyk7XG5cbiAgICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRBeGlvbXMocmVsZWFzZU5hbWVzID0gW10pIHtcbiAgICBjb25zdCBheGlvbXMgPSBbXSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSB0aGlzLmdldFJlbGVhc2VOYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZU5hbWUgPSByZWxlYXNlTmFtZXMuaW5jbHVkZXMocmVsZWFzZU5hbWUpO1xuXG4gICAgaWYgKCFyZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VOYW1lKSB7XG4gICAgICByZWxlYXNlTmFtZXMucHVzaChyZWxlYXNlTmFtZSk7XG5cbiAgICAgIGNvbnN0IGJ1YmJsZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlQ29udGV4dEF4aW9tcyA9IGZpbGVDb250ZXh0LmdldEF4aW9tcyhidWJibGUpO1xuXG4gICAgICAgIHB1c2goYXhpb21zLCBmaWxlQ29udGV4dEF4aW9tcyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRBeGlvbXMgPSByZWxlYXNlQ29udGV4dC5nZXRBeGlvbXMocmVsZWFzZU5hbWVzKTtcblxuICAgICAgICBwdXNoKGF4aW9tcywgcmVsZWFzZUNvbnRleHRBeGlvbXMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExhYmVscyhyZWxlYXNlTmFtZXMgPSBbXSkge1xuICAgIGNvbnN0IGxhYmVscyA9IFtdLFxuICAgICAgICByZWxlYXNlTmFtZSA9IHRoaXMuZ2V0UmVsZWFzZU5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlTmFtZSA9IHJlbGVhc2VOYW1lcy5pbmNsdWRlcyhyZWxlYXNlTmFtZSk7XG5cbiAgICBpZiAoIXJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZU5hbWUpIHtcbiAgICAgIHJlbGVhc2VOYW1lcy5wdXNoKHJlbGVhc2VOYW1lKTtcblxuICAgICAgY29uc3QgYnViYmxlID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVDb250ZXh0TGFiZWxzID0gZmlsZUNvbnRleHQuZ2V0TGFiZWxzKGJ1YmJsZSk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGZpbGVDb250ZXh0TGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCByZWxlYXNlQ29udGV4dExhYmVscyA9IHJlbGVhc2VDb250ZXh0LmdldExhYmVscyhyZWxlYXNlTmFtZXMpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMocmVsZWFzZU5hbWVzID0gW10pIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IFtdLFxuICAgICAgICByZWxlYXNlTmFtZSA9IHRoaXMuZ2V0UmVsZWFzZU5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlTmFtZSA9IHJlbGVhc2VOYW1lcy5pbmNsdWRlcyhyZWxlYXNlTmFtZSk7XG5cbiAgICBpZiAoIXJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZU5hbWUpIHtcbiAgICAgIHJlbGVhc2VOYW1lcy5wdXNoKHJlbGVhc2VOYW1lKTtcblxuICAgICAgY29uc3QgYnViYmxlID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVDb250ZXh0Q29tYmluYXRvcnMgPSBmaWxlQ29udGV4dC5nZXRDb21iaW5hdG9ycyhidWJibGUpO1xuXG4gICAgICAgIHB1c2goY29tYmluYXRvcnMsIGZpbGVDb250ZXh0Q29tYmluYXRvcnMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5hdG9ycyhyZWxlYXNlTmFtZXMpO1xuXG4gICAgICAgIHB1c2goY29tYmluYXRvcnMsIHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKHJlbGVhc2VOYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW10sXG4gICAgICAgIHJlbGVhc2VOYW1lID0gdGhpcy5nZXRSZWxlYXNlTmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VOYW1lKTtcblxuICAgIGlmICghcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlTmFtZSkge1xuICAgICAgcmVsZWFzZU5hbWVzLnB1c2gocmVsZWFzZU5hbWUpO1xuXG4gICAgICBjb25zdCBidWJibGUgPSBmYWxzZTtcblxuICAgICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSBmaWxlQ29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoYnViYmxlKTtcblxuICAgICAgICBwdXNoKGNvbnN0cnVjdG9ycywgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q29uc3RydWN0b3JzID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKHJlbGVhc2VOYW1lcyk7XG5cbiAgICAgICAgcHVzaChjb25zdHJ1Y3RvcnMsIHJlbGVhc2VDb250ZXh0Q29uc3RydWN0b3JzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBhZGRGaWxlQ29udGV4dChmaWxlQ29udGV4dCkge1xuICAgIHRoaXMuZmlsZUNvbnRleHRzLnB1c2goZmlsZUNvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGpzb24gPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlQ29udGV4dEpTT04gPSBmaWxlQ29udGV4dC50b0pTT04oKTtcblxuICAgICAgcHVzaChqc29uLCBmaWxlQ29udGV4dEpTT04pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUxvZ1JlbGVhc2VBbmRDYWxsYmFja3MobG9nLCByZWxlYXNlLCBjYWxsYmFja3MpIHtcbiAgICBjb25zdCB2ZXJpZmllZCA9IGZhbHNlLFxuICAgICAgICAgIGN1c3RvbUdyYW1tYXIgPSBjdXN0b21HcmFtbWFyRnJvbVJlbGVhc2UocmVsZWFzZSksXG4gICAgICAgICAgZmxvcmVuY2VMZXhlciA9IG51bGwsXG4gICAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBudWxsLFxuICAgICAgICAgIHJlbGVhc2VDb250ZXh0cyA9IG51bGwsXG4gICAgICAgICAgZmlsZUNvbnRleHRzID0gW10sXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSBuZXcgRGlyZWN0b3J5UmVsZWFzZUNvbnRleHQobG9nLCB2ZXJpZmllZCwgY2FsbGJhY2tzLCBjdXN0b21HcmFtbWFyLCBmbG9yZW5jZUxleGVyLCBmbG9yZW5jZVBhcnNlciwgcmVsZWFzZUNvbnRleHRzLCBmaWxlQ29udGV4dHMsIHJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIHJlbGVhc2VDb250ZXh0O1xuICB9XG59XG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIkRpcmVjdG9yeVJlbGVhc2VDb250ZXh0IiwibG9nIiwidmVyaWZpZWQiLCJjYWxsYmFja3MiLCJjdXN0b21HcmFtbWFyIiwiZmxvcmVuY2VMZXhlciIsImZsb3JlbmNlUGFyc2VyIiwicmVsZWFzZUNvbnRleHRzIiwiZmlsZUNvbnRleHRzIiwicmVsZWFzZSIsImdldEZpbGVDb250ZXh0cyIsImdldFJlbGVhc2UiLCJnZXRSZWxlYXNlTmFtZSIsInJlbGVhc2VOYW1lIiwiZ2V0TmFtZSIsImdldEZpbGUiLCJmaWxlUGF0aCIsImdldFZlcnNpb24iLCJnZXRGaWxlUGF0aHMiLCJnZXREZXBlbmRlbmNpZXMiLCJtYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0UnVsZXMiLCJyZWxlYXNlTmFtZXMiLCJydWxlcyIsInJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZU5hbWUiLCJpbmNsdWRlcyIsInB1c2giLCJidWJibGUiLCJmb3JFYWNoIiwiZmlsZUNvbnRleHQiLCJmaWxlQ29udGV4dFJ1bGVzIiwicmVsZWFzZUNvbnRleHQiLCJyZWxlYXNlQ29udGV4dFJ1bGVzIiwiZ2V0VHlwZXMiLCJ0eXBlcyIsImZpbGVDb250ZXh0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0QXhpb21zIiwiYXhpb21zIiwiZmlsZUNvbnRleHRBeGlvbXMiLCJyZWxlYXNlQ29udGV4dEF4aW9tcyIsImdldExhYmVscyIsImxhYmVscyIsImZpbGVDb250ZXh0TGFiZWxzIiwicmVsZWFzZUNvbnRleHRMYWJlbHMiLCJnZXRDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZmlsZUNvbnRleHRDb21iaW5hdG9ycyIsInJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJmaWxlQ29udGV4dENvbnN0cnVjdG9ycyIsInJlbGVhc2VDb250ZXh0Q29uc3RydWN0b3JzIiwiYWRkRmlsZUNvbnRleHQiLCJ0b0pTT04iLCJqc29uIiwiZmlsZUNvbnRleHRKU09OIiwiZnJvbUxvZ1JlbGVhc2VBbmRDYWxsYmFja3MiLCJjdXN0b21HcmFtbWFyRnJvbVJlbGVhc2UiLCJSZWxlYXNlQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFPcUJBOzs7NERBTE07cUJBRU47NkJBQ29COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFCLElBQUEsQUFBTUEsd0NBQU47Y0FBTUE7OEJBQUFBO2FBQUFBLHdCQUNQQyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxlQUFlLEVBQUVDLFlBQVksRUFBRUMsT0FBTzs4QkFEdkdUOztrQ0FFWEMsS0FBS0MsVUFBVUMsV0FBV0MsZUFBZUMsZUFBZUMsZ0JBQWdCQztRQUU5RSxNQUFLQyxZQUFZLEdBQUdBO1FBQ3BCLE1BQUtDLE9BQU8sR0FBR0E7OztpQkFMRVQ7O1lBUW5CVSxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCO2dCQUNoQixPQUFPLElBQUksQ0FBQ0YsWUFBWTtZQUMxQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLE9BQU8sSUFBSSxDQUFDRixPQUFPO1lBQ3JCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLGlCQUFpQjtnQkFDZixJQUFNQyxjQUFjLElBQUksQ0FBQ0osT0FBTyxDQUFDSyxPQUFPO2dCQUV4QyxPQUFPRDtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVFDLFFBQVEsRUFBRTtnQkFBRSxP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