occam-file-system 5.0.204 → 5.0.205

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.
@@ -21,9 +21,6 @@ _export(exports, {
21
21
  saveFiles: function() {
22
22
  return saveFiles;
23
23
  },
24
- loadEntries: function() {
25
- return loadEntries;
26
- },
27
24
  loadRelease: function() {
28
25
  return loadRelease;
29
26
  },
@@ -63,7 +60,7 @@ function _interop_require_default(obj) {
63
60
  }
64
61
  var first = _necessary.arrayUtilities.first, readFile = _necessary.fileSystemUtilities.readFile, writeFile = _necessary.fileSystemUtilities.writeFile, isEntryFile = _necessary.fileSystemUtilities.isEntryFile, readDirectory = _necessary.fileSystemUtilities.readDirectory, isEntryDirectory = _necessary.fileSystemUtilities.isEntryDirectory, concatenatePaths = _necessary.pathUtilities.concatenatePaths, topmostDirectoryNameFromPath = _necessary.pathUtilities.topmostDirectoryNameFromPath, topmostDirectoryPathFromPath = _necessary.pathUtilities.topmostDirectoryPathFromPath;
65
62
  function loadFile(path, projectsDirectoryPath) {
66
- var file = null;
63
+ var file;
67
64
  try {
68
65
  var topmostDirectoryName = topmostDirectoryNameFromPath(path);
69
66
  if (topmostDirectoryName !== null) {
@@ -71,7 +68,7 @@ function loadFile(path, projectsDirectoryPath) {
71
68
  file = entryDirectory ? fileFromProject(path, projectsDirectoryPath) : fileFromRelease(path, projectsDirectoryPath);
72
69
  }
73
70
  } catch (error) {
74
- ///
71
+ file = null;
75
72
  }
76
73
  return file;
77
74
  }
@@ -81,7 +78,7 @@ function saveFile(file, projectsDirectoryPath) {
81
78
  writeFile(absolutePath, content);
82
79
  }
83
80
  function loadFiles(paths, projectsDirectoryPath) {
84
- var files = null;
81
+ var files;
85
82
  try {
86
83
  var pathsLength = paths.length;
87
84
  if (pathsLength > 0) {
@@ -92,7 +89,7 @@ function loadFiles(paths, projectsDirectoryPath) {
92
89
  }
93
90
  }
94
91
  } catch (error) {
95
- ///
92
+ files = null;
96
93
  }
97
94
  return files;
98
95
  }
@@ -101,13 +98,8 @@ function saveFiles(files, projectsDirectoryPath) {
101
98
  saveFile(file, projectsDirectoryPath);
102
99
  });
103
100
  }
104
- function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
105
- var entries = _entries.default.fromNothing(), relativeDirectoryPath = topmostDirectoryName; ///
106
- entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
107
- return entries;
108
- }
109
101
  function loadRelease(releaseName, projectsDirectoryPath) {
110
- var release = null;
102
+ var release;
111
103
  try {
112
104
  var name = releaseName, topmostFileName = releaseName, absolutePath = concatenatePaths(projectsDirectoryPath, topmostFileName), entryFile = isEntryFile(absolutePath);
113
105
  if (entryFile) {
@@ -120,49 +112,61 @@ function loadRelease(releaseName, projectsDirectoryPath) {
120
112
  release = _release.default.fromNameAndEntries(name, entries);
121
113
  }
122
114
  } catch (error) {
123
- ///
115
+ release = null;
124
116
  }
125
117
  return release;
126
118
  }
127
119
  function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
128
- var project = null;
120
+ var project;
129
121
  try {
130
122
  var name = projectName, topmostDirectoryName = projectName, entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
131
123
  project = _project.default.fromNameAndEntries(name, entries);
132
124
  } catch (error) {
133
- ///
125
+ project = null;
134
126
  }
135
127
  return project;
136
128
  }
137
129
  function loadReleases(projectsDirectoryPath) {
138
- var releases = _releases.default.fromNothing(), topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath), releaseNames = topmostFileNames; ///
139
- releaseNames.forEach(function(releaseName) {
140
- var release = loadRelease(releaseName, projectsDirectoryPath);
141
- if (release !== null) {
142
- releases.addRelease(release);
143
- }
144
- });
130
+ var releases;
131
+ try {
132
+ releases = _releases.default.fromNothing();
133
+ var topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath), releaseNames = topmostFileNames; ///
134
+ releaseNames.forEach(function(releaseName) {
135
+ var release = loadRelease(releaseName, projectsDirectoryPath);
136
+ if (release !== null) {
137
+ releases.addRelease(release);
138
+ }
139
+ });
140
+ } catch (error) {
141
+ releases = null;
142
+ }
145
143
  return releases;
146
144
  }
147
145
  function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
148
- var projects = _projects.default.fromNothing(), topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath), projectNames = topmostDirectoryNames; ///
149
- projectNames.forEach(function(projectName) {
150
- var project = loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
151
- if (project !== null) {
152
- projects.addProject(project);
153
- }
154
- });
146
+ var projects;
147
+ try {
148
+ projects = _projects.default.fromNothing();
149
+ var topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath), projectNames = topmostDirectoryNames; ///
150
+ projectNames.forEach(function(projectName) {
151
+ var project = loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
152
+ if (project !== null) {
153
+ projects.addProject(project);
154
+ }
155
+ });
156
+ } catch (error) {
157
+ projects = null;
158
+ }
155
159
  return projects;
156
160
  }
157
161
  function loadDirectory(path, projectsDirectoryPath) {
158
- var directory = null;
162
+ var directory;
159
163
  try {
160
164
  var absolutePath = concatenatePaths(projectsDirectoryPath, path), entryDirectory = isEntryDirectory(absolutePath);
161
165
  if (entryDirectory) {
162
166
  directory = _directory.default.fromPath(path);
163
167
  }
164
168
  } catch (error) {
165
- ///
169
+ directory = null;
166
170
  }
167
171
  return directory;
168
172
  }
@@ -171,13 +175,17 @@ var _default = {
171
175
  saveFile: saveFile,
172
176
  loadFiles: loadFiles,
173
177
  saveFiles: saveFiles,
174
- loadEntries: loadEntries,
175
178
  loadRelease: loadRelease,
176
179
  loadProject: loadProject,
177
180
  loadReleases: loadReleases,
178
181
  loadProjects: loadProjects,
179
182
  loadDirectory: loadDirectory
180
183
  };
184
+ function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
185
+ var entries = _entries.default.fromNothing(), relativeDirectoryPath = topmostDirectoryName; ///
186
+ entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
187
+ return entries;
188
+ }
181
189
  function fileFromProject(path, projectsDirectoryPath) {
182
190
  var file = null;
183
191
  var absolutePath = concatenatePaths(projectsDirectoryPath, path), entryFile = isEntryFile(absolutePath);
@@ -269,4 +277,4 @@ function topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath) {
269
277
  return topmostDirectoryNames;
270
278
  }
271
279
 
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBwYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICB0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBta2RpcnAuc3luYyh0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgd3JpdGVGaWxlKGFic29sdXRlUGF0aCwgY29udGVudCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlcyA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBwYXRoc0xlbmd0aCA9IHBhdGhzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgICAgcGF0aCA9IGZpcnN0UGF0aCwgLy8vXHJcbiAgICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICAgIGZpbGVzID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICAgICBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICAgICBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGVzKGZpbGVzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBmaWxlcy5mb3JFYWNoRmlsZSgoZmlsZSkgPT4ge1xyXG4gICAgc2F2ZUZpbGUoZmlsZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgZW50cmllcyA9IEVudHJpZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICByZWxhdGl2ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5TmFtZTsgIC8vL1xyXG5cclxuICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlKHJlbGVhc2VOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgcmVsZWFzZSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBuYW1lID0gcmVsZWFzZU5hbWUsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gcmVsZWFzZU5hbWUsICAvLy9cclxuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RmlsZU5hbWUpLFxyXG4gICAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICAgIGxldCBqc29uLFxyXG4gICAgICAgICAgZW50cmllcztcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAoeyBlbnRyaWVzIH0gPSBqc29uKTtcclxuXHJcbiAgICAgIGpzb24gID0gZW50cmllczsgIC8vL1xyXG5cclxuICAgICAgZW50cmllcyA9IEVudHJpZXMuZnJvbUpTT04oanNvbik7XHJcblxyXG4gICAgICByZWxlYXNlID0gUmVsZWFzZS5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlbGVhc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdChwcm9qZWN0TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGxldCBwcm9qZWN0ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSBwcm9qZWN0TmFtZSwgIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwcm9qZWN0TmFtZSwgLy8vXHJcbiAgICAgICAgICBlbnRyaWVzID0gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIHByb2plY3QgPSBQcm9qZWN0LmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlcyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCByZWxlYXNlcyA9IFJlbGVhc2VzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lcyA9IHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgcmVsZWFzZU5hbWVzID0gdG9wbW9zdEZpbGVOYW1lczsgIC8vL1xyXG5cclxuICByZWxlYXNlTmFtZXMuZm9yRWFjaCgocmVsZWFzZU5hbWUpID0+IHtcclxuICAgIGNvbnN0IHJlbGVhc2UgPSBsb2FkUmVsZWFzZShyZWxlYXNlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xyXG4gICAgICByZWxlYXNlcy5hZGRSZWxlYXNlKHJlbGVhc2UpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVsZWFzZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IHByb2plY3RzID0gUHJvamVjdHMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgcHJvamVjdE5hbWVzID0gdG9wbW9zdERpcmVjdG9yeU5hbWVzOyAvLy9cclxuXHJcbiAgcHJvamVjdE5hbWVzLmZvckVhY2goKHByb2plY3ROYW1lKSA9PiB7XHJcbiAgICBjb25zdCBwcm9qZWN0ID0gbG9hZFByb2plY3QocHJvamVjdE5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIGlmIChwcm9qZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHByb2plY3RzLmFkZFByb2plY3QocHJvamVjdCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwcm9qZWN0cztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGRpcmVjdG9yeSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LmZyb21QYXRoKHBhdGgpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXJlY3Rvcnk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBsb2FkRmlsZSxcclxuICBzYXZlRmlsZSxcclxuICBsb2FkRmlsZXMsXHJcbiAgc2F2ZUZpbGVzLFxyXG4gIGxvYWRFbnRyaWVzLFxyXG4gIGxvYWRSZWxlYXNlLFxyXG4gIGxvYWRQcm9qZWN0LFxyXG4gIGxvYWRSZWxlYXNlcyxcclxuICBsb2FkUHJvamVjdHMsXHJcbiAgbG9hZERpcmVjdG9yeVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIGlmIChlbnRyeUZpbGUpIHtcclxuICAgIGNvbnN0IHJlbGVhc2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UoY29udGVudCk7ICAvLy9cclxuXHJcbiAgICBmaWxlID0gRmlsZS5mcm9tUGF0aENvbnRlbnRBbmRSZWxlYXNlZChwYXRoLCBjb250ZW50LCByZWxlYXNlZCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgLy8vXHJcbiAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUHJvamVjdChwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpO1xyXG5cclxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBmaWxlcyA9IEZpbGVzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgcGF0aHNMZW5ndGggPSBwYXRocy5sZW5ndGg7XHJcblxyXG4gIGlmIChwYXRoc0xlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgIHBhdGggPSBmaXJzdFBhdGgsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpLFxyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSByZWxlYXNlLmdldEZpbGUocGF0aCk7XHJcblxyXG4gICAgICBmaWxlcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGFic29sdXRlRGlyZWN0b3J5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgpLFxyXG4gICAgICAgIHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KGFic29sdXRlRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHN1YkVudHJ5TmFtZXMuZm9yRWFjaCgoc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMgPSAhbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXM7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgICAgZGlyZWN0b3J5ID0gbG9hZERpcmVjdG9yeShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKGRpcmVjdG9yeSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoOyAvLy9cclxuXHJcbiAgICAgICAgaWYgKGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICBlbnRyaWVzLmFkZERpcmVjdG9yeShkaXJlY3RvcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgZGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7IC8vL1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIGZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoID0gaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aChmaWxlUGF0aCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUmVjb2duaXNlZEZpbGUgPSBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aDsgIC8vL1xyXG5cclxuICAgICAgICAgIGlmIChmaWxlUmVjb2duaXNlZEZpbGUgfHwgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMpIHtcclxuICAgICAgICAgICAgZW50cmllcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdEZpbGVOYW1lcztcclxuXHJcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdEZpbGVOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RmlsZU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdEZpbGVOYW1lID0gc3ViRW50cnlOYW1lOyAgLy8vXHJcblxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMucHVzaCh0b3Btb3N0RmlsZU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiB0b3Btb3N0RmlsZU5hbWVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RGlyZWN0b3J5TmFtZXMsIHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgYWJzb2x1dGVTdWJFbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSk7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN1YkVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMucHVzaCh0b3Btb3N0RGlyZWN0b3J5TmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJsb2FkRmlsZSIsInNhdmVGaWxlIiwibG9hZEZpbGVzIiwic2F2ZUZpbGVzIiwibG9hZEVudHJpZXMiLCJsb2FkUmVsZWFzZSIsImxvYWRQcm9qZWN0IiwibG9hZFJlbGVhc2VzIiwibG9hZFByb2plY3RzIiwibG9hZERpcmVjdG9yeSIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJyZWFkRmlsZSIsImZpbGVTeXN0ZW1VdGlsaXRpZXMiLCJ3cml0ZUZpbGUiLCJpc0VudHJ5RmlsZSIsInJlYWREaXJlY3RvcnkiLCJpc0VudHJ5RGlyZWN0b3J5IiwiY29uY2F0ZW5hdGVQYXRocyIsInBhdGhVdGlsaXRpZXMiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoIiwidG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aCIsInBhdGgiLCJwcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJmaWxlIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJhYnNvbHV0ZVBhdGgiLCJlbnRyeURpcmVjdG9yeSIsImZpbGVGcm9tUHJvamVjdCIsImZpbGVGcm9tUmVsZWFzZSIsImVycm9yIiwiZ2V0UGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwidG9wbW9zdEFic29sdXRlRGlyZWN0b3J5UGF0aCIsIm1rZGlycCIsInN5bmMiLCJwYXRocyIsImZpbGVzIiwicGF0aHNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFBhdGgiLCJmaWxlc0Zyb21Qcm9qZWN0IiwiZmlsZXNGcm9tUmVsZWFzZSIsImZvckVhY2hGaWxlIiwibG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMiLCJlbnRyaWVzIiwiRW50cmllcyIsImZyb21Ob3RoaW5nIiwicmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwiZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgiLCJyZWxlYXNlTmFtZSIsInJlbGVhc2UiLCJuYW1lIiwidG9wbW9zdEZpbGVOYW1lIiwiZW50cnlGaWxlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsImZyb21KU09OIiwiUmVsZWFzZSIsImZyb21OYW1lQW5kRW50cmllcyIsInByb2plY3ROYW1lIiwicHJvamVjdCIsIlByb2plY3QiLCJyZWxlYXNlcyIsIlJlbGVhc2VzIiwidG9wbW9zdEZpbGVOYW1lcyIsInRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU5hbWVzIiwiZm9yRWFjaCIsImFkZFJlbGVhc2UiLCJwcm9qZWN0cyIsIlByb2plY3RzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsInByb2plY3ROYW1lcyIsImFkZFByb2plY3QiLCJkaXJlY3RvcnkiLCJEaXJlY3RvcnkiLCJmcm9tUGF0aCIsInJlbGVhc2VkIiwiY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIiwiRmlsZSIsImZyb21QYXRoQ29udGVudEFuZFJlbGVhc2VkIiwiZ2V0RmlsZSIsIkZpbGVzIiwiYWRkRmlsZSIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJzdWJFbnRyeUZpbGUiLCJwdXNoIiwic3ViRW50cnlEaXJlY3RvcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQXVCZ0JBLFFBQVE7ZUFBUkE7O0lBcUJBQyxRQUFRO2VBQVJBOztJQVdBQyxTQUFTO2VBQVRBOztJQTJCQUMsU0FBUztlQUFUQTs7SUFNQUMsV0FBVztlQUFYQTs7SUFTQUMsV0FBVztlQUFYQTs7SUFnQ0FDLFdBQVc7ZUFBWEE7O0lBZ0JBQyxZQUFZO2VBQVpBOztJQWdCQUMsWUFBWTtlQUFaQTs7SUFnQkFDLGFBQWE7ZUFBYkE7O0lBaUJoQixPQVdFO2VBWEY7Ozs2REFoTW1CO3lCQUVnRDsyREFFbEQ7NERBQ0M7OERBQ0U7OERBQ0E7OERBQ0E7K0RBQ0M7K0RBQ0E7Z0VBQ0M7b0JBRVc7d0JBQ1k7dUJBQ0U7Ozs7OztBQUUvQyxJQUFNLEFBQUVDLFFBQVVDLHlCQUFjLENBQXhCRCxPQUNBRSxXQUFzRUMsOEJBQW1CLENBQXpGRCxVQUFVRSxZQUE0REQsOEJBQW1CLENBQS9FQyxXQUFXQyxjQUFpREYsOEJBQW1CLENBQXBFRSxhQUFhQyxnQkFBb0NILDhCQUFtQixDQUF2REcsZUFBZUMsbUJBQXFCSiw4QkFBbUIsQ0FBeENJLGtCQUNqREMsbUJBQWlGQyx3QkFBYSxDQUE5RkQsa0JBQWtCRSwrQkFBK0RELHdCQUFhLENBQTVFQyw4QkFBOEJDLCtCQUFpQ0Ysd0JBQWEsQ0FBOUNFO0FBRWpELFNBQVNyQixTQUFTc0IsSUFBSSxFQUFFQyxxQkFBcUIsRUFBRTtJQUNwRCxJQUFJQyxPQUFPLElBQUk7SUFFZixJQUFJO1FBQ0YsSUFBTUMsdUJBQXVCTCw2QkFBNkJFO1FBRTFELElBQUlHLHlCQUF5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
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpO1xyXG5cclxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgdG9wbW9zdERpcmVjdG9yeU5hbWUpLFxyXG4gICAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICAgIGZpbGUgPSBlbnRyeURpcmVjdG9yeSA/XHJcbiAgICAgICAgICAgICAgIGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICBmaWxlRnJvbVJlbGVhc2UocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgZmlsZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlKGZpbGUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICBjb250ZW50ID0gZmlsZS5nZXRDb250ZW50KCksXHJcbiAgICAgICAgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIHRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIG1rZGlycC5zeW5jKHRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB3cml0ZUZpbGUoYWJzb2x1dGVQYXRoLCBjb250ZW50KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlcyhwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGZpbGVzO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgcGF0aHNMZW5ndGggPSBwYXRocy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHBhdGhzTGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaXJzdFBhdGggPSBmaXJzdChwYXRocyksXHJcbiAgICAgICAgICAgIHBhdGggPSBmaXJzdFBhdGgsIC8vL1xyXG4gICAgICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCk7XHJcblxyXG4gICAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgdG9wbW9zdERpcmVjdG9yeU5hbWUpLFxyXG4gICAgICAgICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAgICBmaWxlcyA9IGVudHJ5RGlyZWN0b3J5ID9cclxuICAgICAgICAgICAgICAgICAgZmlsZXNGcm9tUHJvamVjdChwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNGcm9tUmVsZWFzZShwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBmaWxlcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZXMoZmlsZXMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGZpbGVzLmZvckVhY2hGaWxlKChmaWxlKSA9PiB7XHJcbiAgICBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlbGVhc2UocmVsZWFzZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCByZWxlYXNlO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgbmFtZSA9IHJlbGVhc2VOYW1lLCAvLy9cclxuICAgICAgICAgIHRvcG1vc3RGaWxlTmFtZSA9IHJlbGVhc2VOYW1lLCAgLy8vXHJcbiAgICAgICAgICBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgdG9wbW9zdEZpbGVOYW1lKSxcclxuICAgICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgaWYgKGVudHJ5RmlsZSkge1xyXG4gICAgICBsZXQganNvbixcclxuICAgICAgICAgIGVudHJpZXM7XHJcblxyXG4gICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICAgIGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xyXG5cclxuICAgICAgKHsgZW50cmllcyB9ID0ganNvbik7XHJcblxyXG4gICAgICBqc29uICA9IGVudHJpZXM7ICAvLy9cclxuXHJcbiAgICAgIGVudHJpZXMgPSBFbnRyaWVzLmZyb21KU09OKGpzb24pO1xyXG5cclxuICAgICAgcmVsZWFzZSA9IFJlbGVhc2UuZnJvbU5hbWVBbmRFbnRyaWVzKG5hbWUsIGVudHJpZXMpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZWxlYXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZWxlYXNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFByb2plY3QocHJvamVjdE5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBsZXQgcHJvamVjdDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSBwcm9qZWN0TmFtZSwgIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwcm9qZWN0TmFtZSwgLy8vXHJcbiAgICAgICAgICBlbnRyaWVzID0gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIHByb2plY3QgPSBQcm9qZWN0LmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcHJvamVjdCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlcyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgcmVsZWFzZXM7XHJcblxyXG4gIHRyeSB7XHJcbiAgICByZWxlYXNlcyA9IFJlbGVhc2VzLmZyb21Ob3RoaW5nKCk7XHJcblxyXG4gICAgY29uc3QgdG9wbW9zdEZpbGVOYW1lcyA9IHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgICByZWxlYXNlTmFtZXMgPSB0b3Btb3N0RmlsZU5hbWVzOyAgLy8vXHJcblxyXG4gICAgcmVsZWFzZU5hbWVzLmZvckVhY2goKHJlbGVhc2VOYW1lKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSBsb2FkUmVsZWFzZShyZWxlYXNlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChyZWxlYXNlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVsZWFzZXMuYWRkUmVsZWFzZShyZWxlYXNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHJlbGVhc2VzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZWxlYXNlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0cyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgbGV0IHByb2plY3RzO1xyXG5cclxuICB0cnkge1xyXG4gICAgcHJvamVjdHMgPSBQcm9qZWN0cy5mcm9tTm90aGluZygpO1xyXG5cclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgcHJvamVjdE5hbWVzID0gdG9wbW9zdERpcmVjdG9yeU5hbWVzOyAvLy9cclxuXHJcbiAgICBwcm9qZWN0TmFtZXMuZm9yRWFjaCgocHJvamVjdE5hbWUpID0+IHtcclxuICAgICAgY29uc3QgcHJvamVjdCA9IGxvYWRQcm9qZWN0KHByb2plY3ROYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgICAgIGlmIChwcm9qZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcHJvamVjdHMuYWRkUHJvamVjdChwcm9qZWN0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHByb2plY3RzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiBwcm9qZWN0cztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGRpcmVjdG9yeTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGlmIChlbnRyeURpcmVjdG9yeSkge1xyXG4gICAgICBkaXJlY3RvcnkgPSBEaXJlY3RvcnkuZnJvbVBhdGgocGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGRpcmVjdG9yeSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGlyZWN0b3J5O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbG9hZEZpbGUsXHJcbiAgc2F2ZUZpbGUsXHJcbiAgbG9hZEZpbGVzLFxyXG4gIHNhdmVGaWxlcyxcclxuICBsb2FkUmVsZWFzZSxcclxuICBsb2FkUHJvamVjdCxcclxuICBsb2FkUmVsZWFzZXMsXHJcbiAgbG9hZFByb2plY3RzLFxyXG4gIGxvYWREaXJlY3RvcnlcclxufTtcclxuXHJcbmZ1bmN0aW9uIGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgZW50cmllcyA9IEVudHJpZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICByZWxhdGl2ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5TmFtZTsgIC8vL1xyXG5cclxuICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIGlmIChlbnRyeUZpbGUpIHtcclxuICAgIGNvbnN0IHJlbGVhc2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UoY29udGVudCk7ICAvLy9cclxuXHJcbiAgICBmaWxlID0gRmlsZS5mcm9tUGF0aENvbnRlbnRBbmRSZWxlYXNlZChwYXRoLCBjb250ZW50LCByZWxlYXNlZCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgLy8vXHJcbiAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUHJvamVjdChwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpO1xyXG5cclxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBmaWxlcyA9IEZpbGVzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgcGF0aHNMZW5ndGggPSBwYXRocy5sZW5ndGg7XHJcblxyXG4gIGlmIChwYXRoc0xlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgIHBhdGggPSBmaXJzdFBhdGgsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpLFxyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSByZWxlYXNlLmdldEZpbGUocGF0aCk7XHJcblxyXG4gICAgICBmaWxlcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGFic29sdXRlRGlyZWN0b3J5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgpLFxyXG4gICAgICAgIHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KGFic29sdXRlRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHN1YkVudHJ5TmFtZXMuZm9yRWFjaCgoc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMgPSAhbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXM7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgICAgZGlyZWN0b3J5ID0gbG9hZERpcmVjdG9yeShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKGRpcmVjdG9yeSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoOyAvLy9cclxuXHJcbiAgICAgICAgaWYgKGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICBlbnRyaWVzLmFkZERpcmVjdG9yeShkaXJlY3RvcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgZGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7IC8vL1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIGZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoID0gaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aChmaWxlUGF0aCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUmVjb2duaXNlZEZpbGUgPSBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aDsgIC8vL1xyXG5cclxuICAgICAgICAgIGlmIChmaWxlUmVjb2duaXNlZEZpbGUgfHwgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMpIHtcclxuICAgICAgICAgICAgZW50cmllcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdEZpbGVOYW1lcztcclxuXHJcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdEZpbGVOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RmlsZU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdEZpbGVOYW1lID0gc3ViRW50cnlOYW1lOyAgLy8vXHJcblxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMucHVzaCh0b3Btb3N0RmlsZU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiB0b3Btb3N0RmlsZU5hbWVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RGlyZWN0b3J5TmFtZXMsIHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgYWJzb2x1dGVTdWJFbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSk7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN1YkVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMucHVzaCh0b3Btb3N0RGlyZWN0b3J5TmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJsb2FkRmlsZSIsInNhdmVGaWxlIiwibG9hZEZpbGVzIiwic2F2ZUZpbGVzIiwibG9hZFJlbGVhc2UiLCJsb2FkUHJvamVjdCIsImxvYWRSZWxlYXNlcyIsImxvYWRQcm9qZWN0cyIsImxvYWREaXJlY3RvcnkiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicmVhZEZpbGUiLCJmaWxlU3lzdGVtVXRpbGl0aWVzIiwid3JpdGVGaWxlIiwiaXNFbnRyeUZpbGUiLCJyZWFkRGlyZWN0b3J5IiwiaXNFbnRyeURpcmVjdG9yeSIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgiLCJwYXRoIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZmlsZSIsInRvcG1vc3REaXJlY3RvcnlOYW1lIiwiYWJzb2x1dGVQYXRoIiwiZW50cnlEaXJlY3RvcnkiLCJmaWxlRnJvbVByb2plY3QiLCJmaWxlRnJvbVJlbGVhc2UiLCJlcnJvciIsImdldFBhdGgiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJta2RpcnAiLCJzeW5jIiwicGF0aHMiLCJmaWxlcyIsInBhdGhzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQYXRoIiwiZmlsZXNGcm9tUHJvamVjdCIsImZpbGVzRnJvbVJlbGVhc2UiLCJmb3JFYWNoRmlsZSIsInJlbGVhc2VOYW1lIiwicmVsZWFzZSIsIm5hbWUiLCJ0b3Btb3N0RmlsZU5hbWUiLCJlbnRyeUZpbGUiLCJqc29uIiwiZW50cmllcyIsIkpTT04iLCJwYXJzZSIsIkVudHJpZXMiLCJmcm9tSlNPTiIsIlJlbGVhc2UiLCJmcm9tTmFtZUFuZEVudHJpZXMiLCJwcm9qZWN0TmFtZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwicHJvamVjdCIsImxvYWRFbnRyaWVzIiwiUHJvamVjdCIsInJlbGVhc2VzIiwiUmVsZWFzZXMiLCJmcm9tTm90aGluZyIsInRvcG1vc3RGaWxlTmFtZXMiLCJ0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsInJlbGVhc2VOYW1lcyIsImZvckVhY2giLCJhZGRSZWxlYXNlIiwicHJvamVjdHMiLCJQcm9qZWN0cyIsInRvcG1vc3REaXJlY3RvcnlOYW1lcyIsInRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJwcm9qZWN0TmFtZXMiLCJhZGRQcm9qZWN0IiwiZGlyZWN0b3J5IiwiRGlyZWN0b3J5IiwiZnJvbVBhdGgiLCJyZWxhdGl2ZURpcmVjdG9yeVBhdGgiLCJlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aCIsInJlbGVhc2VkIiwiY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIiwiRmlsZSIsImZyb21QYXRoQ29udGVudEFuZFJlbGVhc2VkIiwiZ2V0RmlsZSIsIkZpbGVzIiwiYWRkRmlsZSIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJzdWJFbnRyeUZpbGUiLCJwdXNoIiwic3ViRW50cnlEaXJlY3RvcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQXVCZ0JBLFFBQVE7ZUFBUkE7O0lBcUJBQyxRQUFRO2VBQVJBOztJQVdBQyxTQUFTO2VBQVRBOztJQTJCQUMsU0FBUztlQUFUQTs7SUFNQUMsV0FBVztlQUFYQTs7SUFnQ0FDLFdBQVc7ZUFBWEE7O0lBZ0JBQyxZQUFZO2VBQVpBOztJQXVCQUMsWUFBWTtlQUFaQTs7SUF1QkFDLGFBQWE7ZUFBYkE7O0lBaUJoQixPQVVFO2VBVkY7Ozs2REFyTW1CO3lCQUVnRDsyREFFbEQ7NERBQ0M7OERBQ0U7OERBQ0E7OERBQ0E7K0RBQ0M7K0RBQ0E7Z0VBQ0M7b0JBRVc7d0JBQ1k7dUJBQ0U7Ozs7OztBQUUvQyxJQUFNLEFBQUVDLFFBQVVDLHlCQUFjLENBQXhCRCxPQUNBRSxXQUFzRUMsOEJBQW1CLENBQXpGRCxVQUFVRSxZQUE0REQsOEJBQW1CLENBQS9FQyxXQUFXQyxjQUFpREYsOEJBQW1CLENBQXBFRSxhQUFhQyxnQkFBb0NILDhCQUFtQixDQUF2REcsZUFBZUMsbUJBQXFCSiw4QkFBbUIsQ0FBeENJLGtCQUNqREMsbUJBQWlGQyx3QkFBYSxD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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-file-system",
3
3
  "author": "James Smith",
4
- "version": "5.0.204",
4
+ "version": "5.0.205",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-file-system",
7
7
  "description": "Occam's file system functionality.",
@@ -22,7 +22,7 @@ const { first } = arrayUtilities,
22
22
  { concatenatePaths, topmostDirectoryNameFromPath, topmostDirectoryPathFromPath } = pathUtilities;
23
23
 
24
24
  export function loadFile(path, projectsDirectoryPath) {
25
- let file = null;
25
+ let file;
26
26
 
27
27
  try {
28
28
  const topmostDirectoryName = topmostDirectoryNameFromPath(path);
@@ -36,7 +36,7 @@ export function loadFile(path, projectsDirectoryPath) {
36
36
  fileFromRelease(path, projectsDirectoryPath);
37
37
  }
38
38
  } catch (error) {
39
- ///
39
+ file = null;
40
40
  }
41
41
 
42
42
  return file;
@@ -54,7 +54,7 @@ export function saveFile(file, projectsDirectoryPath) {
54
54
  }
55
55
 
56
56
  export function loadFiles(paths, projectsDirectoryPath) {
57
- let files = null;
57
+ let files;
58
58
 
59
59
  try {
60
60
  const pathsLength = paths.length;
@@ -74,7 +74,7 @@ export function loadFiles(paths, projectsDirectoryPath) {
74
74
  }
75
75
  }
76
76
  } catch (error) {
77
- ///
77
+ files = null;
78
78
  }
79
79
 
80
80
  return files;
@@ -86,17 +86,8 @@ export function saveFiles(files, projectsDirectoryPath) {
86
86
  });
87
87
  }
88
88
 
89
- export function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
90
- const entries = Entries.fromNothing(),
91
- relativeDirectoryPath = topmostDirectoryName; ///
92
-
93
- entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
94
-
95
- return entries;
96
- }
97
-
98
89
  export function loadRelease(releaseName, projectsDirectoryPath) {
99
- let release = null;
90
+ let release;
100
91
 
101
92
  try {
102
93
  const name = releaseName, ///
@@ -121,14 +112,14 @@ export function loadRelease(releaseName, projectsDirectoryPath) {
121
112
  release = Release.fromNameAndEntries(name, entries);
122
113
  }
123
114
  } catch (error) {
124
- ///
115
+ release = null;
125
116
  }
126
117
 
127
118
  return release;
128
119
  }
129
120
 
130
121
  export function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
131
- let project = null;
122
+ let project;
132
123
 
133
124
  try {
134
125
  const name = projectName, ///
@@ -137,46 +128,60 @@ export function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognis
137
128
 
138
129
  project = Project.fromNameAndEntries(name, entries);
139
130
  } catch (error) {
140
- ///
131
+ project = null;
141
132
  }
142
133
 
143
134
  return project;
144
135
  }
145
136
 
146
137
  export function loadReleases(projectsDirectoryPath) {
147
- const releases = Releases.fromNothing(),
148
- topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath),
149
- releaseNames = topmostFileNames; ///
138
+ let releases;
150
139
 
151
- releaseNames.forEach((releaseName) => {
152
- const release = loadRelease(releaseName, projectsDirectoryPath);
140
+ try {
141
+ releases = Releases.fromNothing();
153
142
 
154
- if (release !== null) {
155
- releases.addRelease(release);
156
- }
157
- });
143
+ const topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath),
144
+ releaseNames = topmostFileNames; ///
145
+
146
+ releaseNames.forEach((releaseName) => {
147
+ const release = loadRelease(releaseName, projectsDirectoryPath);
148
+
149
+ if (release !== null) {
150
+ releases.addRelease(release);
151
+ }
152
+ });
153
+ } catch (error) {
154
+ releases = null;
155
+ }
158
156
 
159
157
  return releases;
160
158
  }
161
159
 
162
160
  export function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
163
- const projects = Projects.fromNothing(),
164
- topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath),
165
- projectNames = topmostDirectoryNames; ///
161
+ let projects;
166
162
 
167
- projectNames.forEach((projectName) => {
168
- const project = loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
163
+ try {
164
+ projects = Projects.fromNothing();
169
165
 
170
- if (project !== null) {
171
- projects.addProject(project);
172
- }
173
- });
166
+ const topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath),
167
+ projectNames = topmostDirectoryNames; ///
168
+
169
+ projectNames.forEach((projectName) => {
170
+ const project = loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
171
+
172
+ if (project !== null) {
173
+ projects.addProject(project);
174
+ }
175
+ });
176
+ } catch (error) {
177
+ projects = null;
178
+ }
174
179
 
175
180
  return projects;
176
181
  }
177
182
 
178
183
  export function loadDirectory(path, projectsDirectoryPath) {
179
- let directory = null;
184
+ let directory;
180
185
 
181
186
  try {
182
187
  const absolutePath = concatenatePaths(projectsDirectoryPath, path),
@@ -186,7 +191,7 @@ export function loadDirectory(path, projectsDirectoryPath) {
186
191
  directory = Directory.fromPath(path);
187
192
  }
188
193
  } catch (error) {
189
- ///
194
+ directory = null;
190
195
  }
191
196
 
192
197
  return directory;
@@ -197,7 +202,6 @@ export default {
197
202
  saveFile,
198
203
  loadFiles,
199
204
  saveFiles,
200
- loadEntries,
201
205
  loadRelease,
202
206
  loadProject,
203
207
  loadReleases,
@@ -205,6 +209,15 @@ export default {
205
209
  loadDirectory
206
210
  };
207
211
 
212
+ function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
213
+ const entries = Entries.fromNothing(),
214
+ relativeDirectoryPath = topmostDirectoryName; ///
215
+
216
+ entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
217
+
218
+ return entries;
219
+ }
220
+
208
221
  function fileFromProject(path, projectsDirectoryPath) {
209
222
  let file = null;
210
223