occam-file-system 5.0.115 → 5.0.117

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.
@@ -10,9 +10,9 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _fileSystem = require("./utilities/fileSystem");
12
12
  function loadProject(projectsDirectoryPath, json, callback) {
13
- var directoryName = json.directoryName, topmostDirectoryName = directoryName, loadOnlyRecognisedFiles = false, project = (0, _fileSystem.loadProject)(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
13
+ var projectName = json.projectName, loadOnlyRecognisedFiles = false, project = (0, _fileSystem.loadProject)(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
14
14
  json = project !== null ? project.toJSON() : null;
15
15
  return callback(json);
16
16
  }
17
17
 
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUHJvamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFByb2plY3QgYXMgbG9hZFByb2plY3RFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFByb2plY3QocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IGRpcmVjdG9yeU5hbWUgfSA9IGpzb24sXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gZGlyZWN0b3J5TmFtZSwgIC8vL1xuICAgICAgICBsb2FkT25seVJlY29nbmlzZWRGaWxlcyA9IGZhbHNlLCAvLy9cbiAgICAgICAgcHJvamVjdCA9IGxvYWRQcm9qZWN0RXgodG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xuXG4gIGpzb24gPSAocHJvamVjdCAhPT0gbnVsbCkgPyAgLy8vXG4gICAgICAgICAgICBwcm9qZWN0LnRvSlNPTigpOlxuICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBjYWxsYmFjayhqc29uKTtcbn1cbiJdLCJuYW1lcyI6WyJsb2FkUHJvamVjdCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsImpzb24iLCJjYWxsYmFjayIsImRpcmVjdG9yeU5hbWUiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwicHJvamVjdCIsImxvYWRQcm9qZWN0RXgiLCJ0b0pTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBd0JBOzs7MEJBRnFCO0FBRTlCLFNBQVNBLFlBQVlDLHFCQUFxQixFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRTtJQUN6RSxJQUFNLEFBQUVDLGdCQUFrQkYsS0FBbEJFLGVBQ0ZDLHVCQUF1QkQsZUFDdkJFLDBCQUEwQixLQUFLLEVBQy9CQyxVQUFVQyxJQUFBQSx1QkFBYSxFQUFDSCxzQkFBc0JKLHVCQUF1Qks7SUFFM0VKLE9BQU8sQUFBQ0ssWUFBWSxJQUFJLEdBQ2RBLFFBQVFFLE1BQU0sS0FDWixJQUFJO0lBRWhCLE9BQU9OLFNBQVNEO0FBQ2xCIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUHJvamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFByb2plY3QgYXMgbG9hZFByb2plY3RFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFByb2plY3QocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IHByb2plY3ROYW1lIH0gPSBqc29uLFxuICAgICAgICBsb2FkT25seVJlY29nbmlzZWRGaWxlcyA9IGZhbHNlLCAvLy9cbiAgICAgICAgcHJvamVjdCA9IGxvYWRQcm9qZWN0RXgocHJvamVjdE5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xuXG4gIGpzb24gPSAocHJvamVjdCAhPT0gbnVsbCkgPyAgLy8vXG4gICAgICAgICAgICBwcm9qZWN0LnRvSlNPTigpOlxuICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBjYWxsYmFjayhqc29uKTtcbn1cbiJdLCJuYW1lcyI6WyJsb2FkUHJvamVjdCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsImpzb24iLCJjYWxsYmFjayIsInByb2plY3ROYW1lIiwibG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMiLCJwcm9qZWN0IiwibG9hZFByb2plY3RFeCIsInRvSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUF3QkE7OzswQkFGcUI7QUFFOUIsU0FBU0EsWUFBWUMscUJBQXFCLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3pFLElBQU0sQUFBRUMsY0FBZ0JGLEtBQWhCRSxhQUNGQywwQkFBMEIsS0FBSyxFQUMvQkMsVUFBVUMsSUFBQUEsdUJBQWEsRUFBQ0gsYUFBYUgsdUJBQXVCSTtJQUVsRUgsT0FBTyxBQUFDSSxZQUFZLElBQUksR0FDZEEsUUFBUUUsTUFBTSxLQUNaLElBQUk7SUFFaEIsT0FBT0wsU0FBU0Q7QUFDbEIifQ==
@@ -10,9 +10,9 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _fileSystem = require("./utilities/fileSystem");
12
12
  function loadRelease(projectsDirectoryPath, json, callback) {
13
- var fileName = json.fileName, topmostFileName = fileName, release = (0, _fileSystem.loadRelease)(topmostFileName, projectsDirectoryPath);
13
+ var releaseName = json.releaseName, release = (0, _fileSystem.loadRelease)(releaseName, projectsDirectoryPath);
14
14
  json = release !== null ? release.toJSON() : null;
15
15
  return callback(json);
16
16
  }
17
17
 
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUmVsZWFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFJlbGVhc2UgYXMgbG9hZFJlbGVhc2VFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFJlbGVhc2UocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IGZpbGVOYW1lIH0gPSBqc29uLFxuICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSBmaWxlTmFtZSwgIC8vL1xuICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2VFeCh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XG5cbiAganNvbiA9IChyZWxlYXNlICE9PSBudWxsKSA/ICAvLy9cbiAgICAgICAgICAgIHJlbGVhc2UudG9KU09OKCk6XG4gICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIGNhbGxiYWNrKGpzb24pO1xufVxuIl0sIm5hbWVzIjpbImxvYWRSZWxlYXNlIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwianNvbiIsImNhbGxiYWNrIiwiZmlsZU5hbWUiLCJ0b3Btb3N0RmlsZU5hbWUiLCJyZWxlYXNlIiwibG9hZFJlbGVhc2VFeCIsInRvSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUF3QkE7OzswQkFGcUI7QUFFOUIsU0FBU0EsWUFBWUMscUJBQXFCLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3pFLElBQU0sQUFBRUMsV0FBYUYsS0FBYkUsVUFDRkMsa0JBQWtCRCxVQUNsQkUsVUFBVUMsSUFBQUEsdUJBQWEsRUFBQ0YsaUJBQWlCSjtJQUUvQ0MsT0FBTyxBQUFDSSxZQUFZLElBQUksR0FDZEEsUUFBUUUsTUFBTSxLQUNaLElBQUk7SUFFaEIsT0FBT0wsU0FBU0Q7QUFDbEIifQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUmVsZWFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFJlbGVhc2UgYXMgbG9hZFJlbGVhc2VFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFJlbGVhc2UocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IHJlbGVhc2VOYW1lIH0gPSBqc29uLFxuICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2VFeChyZWxlYXNlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcblxuICBqc29uID0gKHJlbGVhc2UgIT09IG51bGwpID8gIC8vL1xuICAgICAgICAgICAgcmVsZWFzZS50b0pTT04oKTpcbiAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gY2FsbGJhY2soanNvbik7XG59XG4iXSwibmFtZXMiOlsibG9hZFJlbGVhc2UiLCJwcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJqc29uIiwiY2FsbGJhY2siLCJyZWxlYXNlTmFtZSIsInJlbGVhc2UiLCJsb2FkUmVsZWFzZUV4IiwidG9KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFJQTs7O2VBQXdCQTs7OzBCQUZxQjtBQUU5QixTQUFTQSxZQUFZQyxxQkFBcUIsRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUU7SUFDekUsSUFBTSxBQUFFQyxjQUFnQkYsS0FBaEJFLGFBQ0ZDLFVBQVVDLElBQUFBLHVCQUFhLEVBQUNGLGFBQWFIO0lBRTNDQyxPQUFPLEFBQUNHLFlBQVksSUFBSSxHQUNkQSxRQUFRRSxNQUFNLEtBQ1osSUFBSTtJQUVoQixPQUFPSixTQUFTRDtBQUNsQiJ9
@@ -106,10 +106,10 @@ function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecogn
106
106
  entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
107
107
  return entries;
108
108
  }
109
- function loadRelease(topmostFileName, projectsDirectoryPath) {
109
+ function loadRelease(releaseName, projectsDirectoryPath) {
110
110
  var release = null;
111
111
  try {
112
- var name = topmostFileName, absolutePath = concatenatePaths(projectsDirectoryPath, name), entryFile = isEntryFile(absolutePath);
112
+ var name = releaseName, topmostFileName = releaseName, absolutePath = concatenatePaths(projectsDirectoryPath, topmostFileName), entryFile = isEntryFile(absolutePath);
113
113
  if (entryFile) {
114
114
  var json, entries;
115
115
  var content = readFile(absolutePath);
@@ -124,10 +124,10 @@ function loadRelease(topmostFileName, projectsDirectoryPath) {
124
124
  }
125
125
  return release;
126
126
  }
127
- function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
127
+ function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
128
128
  var project = null;
129
129
  try {
130
- var name = topmostDirectoryName, entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
130
+ var name = projectName, topmostDirectoryName = projectName, entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
131
131
  project = _project.default.fromNameAndEntries(name, entries);
132
132
  } catch (error) {
133
133
  ///
@@ -135,9 +135,9 @@ function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecogn
135
135
  return project;
136
136
  }
137
137
  function loadReleases(projectsDirectoryPath) {
138
- var releases = _releases.default.fromNothing(), topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath);
139
- topmostFileNames.forEach(function(topmostFileName) {
140
- var release = loadRelease(topmostFileName, projectsDirectoryPath);
138
+ var releases = _releases.default.fromNothing(), topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath), releaseNames = topmostFileNames; ///
139
+ releaseNames.forEach(function(releaseName) {
140
+ var release = loadRelease(releaseName, projectsDirectoryPath);
141
141
  if (release !== null) {
142
142
  releases.addRelease(release);
143
143
  }
@@ -145,9 +145,9 @@ function loadReleases(projectsDirectoryPath) {
145
145
  return releases;
146
146
  }
147
147
  function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
148
- var projects = _projects.default.fromNothing(), topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath);
149
- topmostDirectoryNames.forEach(function(topmostDirectoryName) {
150
- var project = loadProject(topmostDirectoryName, 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
151
  if (project !== null) {
152
152
  projects.addProject(project);
153
153
  }
@@ -268,4 +268,4 @@ function topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath) {
268
268
  return topmostDirectoryNames;
269
269
  }
270
270
 
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBwYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICB0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBta2RpcnAuc3luYyh0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgd3JpdGVGaWxlKGFic29sdXRlUGF0aCwgY29udGVudCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlcyA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBwYXRoc0xlbmd0aCA9IHBhdGhzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgICAgcGF0aCA9IGZpcnN0UGF0aCwgLy8vXHJcbiAgICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICAgIGZpbGVzID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICAgICBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICAgICBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGVzKGZpbGVzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBmaWxlcy5mb3JFYWNoRmlsZSgoZmlsZSkgPT4ge1xyXG4gICAgc2F2ZUZpbGUoZmlsZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgZW50cmllcyA9IEVudHJpZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICByZWxhdGl2ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5TmFtZTsgIC8vL1xyXG5cclxuICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IHJlbGVhc2UgPSBudWxsO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgbmFtZSA9IHRvcG1vc3RGaWxlTmFtZSwgLy8vXHJcbiAgICAgICAgICBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbmFtZSksXHJcbiAgICAgICAgICBlbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGlmIChlbnRyeUZpbGUpIHtcclxuICAgICAgbGV0IGpzb24sXHJcbiAgICAgICAgICBlbnRyaWVzO1xyXG5cclxuICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuXHJcbiAgICAgICh7IGVudHJpZXMgfSA9IGpzb24pO1xyXG5cclxuICAgICAganNvbiAgPSBlbnRyaWVzOyAgLy8vXHJcblxyXG4gICAgICBlbnRyaWVzID0gRW50cmllcy5mcm9tSlNPTihqc29uKTtcclxuXHJcbiAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVsZWFzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0KHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgbGV0IHByb2plY3QgPSBudWxsO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgbmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lLCAgLy8vXHJcbiAgICAgICAgICBlbnRyaWVzID0gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIHByb2plY3QgPSBQcm9qZWN0LmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlcyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCByZWxlYXNlcyA9IFJlbGVhc2VzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lcyA9IHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3RGaWxlTmFtZXMuZm9yRWFjaCgodG9wbW9zdEZpbGVOYW1lKSA9PiB7XHJcbiAgICBjb25zdCByZWxlYXNlID0gbG9hZFJlbGVhc2UodG9wbW9zdEZpbGVOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGlmIChyZWxlYXNlICE9PSBudWxsKSB7XHJcbiAgICAgIHJlbGVhc2VzLmFkZFJlbGVhc2UocmVsZWFzZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZWxlYXNlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0cyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgcHJvamVjdHMgPSBQcm9qZWN0cy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdERpcmVjdG9yeU5hbWVzLmZvckVhY2goKHRvcG1vc3REaXJlY3RvcnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBwcm9qZWN0ID0gbG9hZFByb2plY3QodG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIGlmIChwcm9qZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHByb2plY3RzLmFkZFByb2plY3QocHJvamVjdCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwcm9qZWN0cztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGRpcmVjdG9yeSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LmZyb21QYXRoKHBhdGgpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXJlY3Rvcnk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBsb2FkRmlsZSxcclxuICBzYXZlRmlsZSxcclxuICBsb2FkRmlsZXMsXHJcbiAgc2F2ZUZpbGVzLFxyXG4gIGxvYWRFbnRyaWVzLFxyXG4gIGxvYWRSZWxlYXNlLFxyXG4gIGxvYWRQcm9qZWN0LFxyXG4gIGxvYWRSZWxlYXNlcyxcclxuICBsb2FkUHJvamVjdHMsXHJcbiAgbG9hZERpcmVjdG9yeVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIGlmIChlbnRyeUZpbGUpIHtcclxuICAgIGxldCBjb250ZW50ID0gcmVhZEZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBjb250ZW50ID0gY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlKGNvbnRlbnQpOyAgLy8vXHJcblxyXG4gICAgZmlsZSA9IEZpbGUuZnJvbVBhdGhBbmRDb250ZW50KHBhdGgsIGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVGcm9tUmVsZWFzZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgZmlsZSA9IHJlbGVhc2UuZ2V0RmlsZShwYXRoKTtcclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVzRnJvbVByb2plY3QocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IGZpbGVzID0gRmlsZXMuZnJvbU5vdGhpbmcoKTtcclxuXHJcbiAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgY29uc3QgZmlsZSA9IGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGZpbGVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUmVsZWFzZShwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHBhdGhzTGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xyXG5cclxuICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmaXJzdFBhdGggPSBmaXJzdChwYXRocyksXHJcbiAgICAgICAgICBwYXRoID0gZmlyc3RQYXRoLCAvLy9cclxuICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICAgIHRvcG1vc3RGaWxlTmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lLCAvLy9cclxuICAgICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICAgICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBjb25zdCBhYnNvbHV0ZURpcmVjdG9yeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcmVsYXRpdmVEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShhYnNvbHV0ZURpcmVjdG9yeVBhdGgpO1xyXG5cclxuICBzdWJFbnRyeU5hbWVzLmZvckVhY2goKHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3Qgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzID0gIWxvYWRPbmx5UmVjb2duaXNlZEZpbGVzO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBwYXRoID0gY29uY2F0ZW5hdGVQYXRocyhyZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChkaXJlY3RvcnkgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBkaXJlY3RvcnlQYXRoID0gcGF0aDsgLy8vXHJcblxyXG4gICAgICAgIGlmIChsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3Rvcmllcykge1xyXG4gICAgICAgICAgZW50cmllcy5hZGREaXJlY3RvcnkoZGlyZWN0b3J5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpOyAvLy9cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gbG9hZEZpbGUocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCA9IGlzRmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgoZmlsZVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZVJlY29nbmlzZWRGaWxlID0gZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGg7ICAvLy9cclxuXHJcbiAgICAgICAgICBpZiAoZmlsZVJlY29nbmlzZWRGaWxlIHx8IGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICAgIGVudHJpZXMuYWRkRmlsZShmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IHRvcG1vc3RGaWxlTmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3RGaWxlTmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdEZpbGVOYW1lcywgc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVN1YkVudHJ5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKTtcclxuXHJcbiAgICBpZiAoIXN1YkVudHJ5TmFtZUhpZGRlbk5hbWUpIHtcclxuICAgICAgY29uc3Qgc3ViRW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHRvcG1vc3RGaWxlTmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWVzLnB1c2godG9wbW9zdEZpbGVOYW1lKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvcG1vc3RGaWxlTmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG5cclxuICBjb25zdCBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdERpcmVjdG9yeU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RGlyZWN0b3J5KSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzdWJFbnRyeU5hbWU7ICAvLy9cclxuXHJcbiAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWVzLnB1c2godG9wbW9zdERpcmVjdG9yeU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlOYW1lcztcclxufVxyXG4iXSwibmFtZXMiOlsibG9hZEZpbGUiLCJzYXZlRmlsZSIsImxvYWRGaWxlcyIsInNhdmVGaWxlcyIsImxvYWRFbnRyaWVzIiwibG9hZFJlbGVhc2UiLCJsb2FkUHJvamVjdCIsImxvYWRSZWxlYXNlcyIsImxvYWRQcm9qZWN0cyIsImxvYWREaXJlY3RvcnkiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicmVhZEZpbGUiLCJmaWxlU3lzdGVtVXRpbGl0aWVzIiwid3JpdGVGaWxlIiwiaXNFbnRyeUZpbGUiLCJyZWFkRGlyZWN0b3J5IiwiaXNFbnRyeURpcmVjdG9yeSIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgiLCJwYXRoIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZmlsZSIsInRvcG1vc3REaXJlY3RvcnlOYW1lIiwiYWJzb2x1dGVQYXRoIiwiZW50cnlEaXJlY3RvcnkiLCJmaWxlRnJvbVByb2plY3QiLCJmaWxlRnJvbVJlbGVhc2UiLCJlcnJvciIsImdldFBhdGgiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJta2RpcnAiLCJzeW5jIiwicGF0aHMiLCJmaWxlcyIsInBhdGhzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQYXRoIiwiZmlsZXNGcm9tUHJvamVjdCIsImZpbGVzRnJvbVJlbGVhc2UiLCJmb3JFYWNoRmlsZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwiZW50cmllcyIsIkVudHJpZXMiLCJmcm9tTm90aGluZyIsInJlbGF0aXZlRGlyZWN0b3J5UGF0aCIsImVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwidG9wbW9zdEZpbGVOYW1lIiwicmVsZWFzZSIsIm5hbWUiLCJlbnRyeUZpbGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZnJvbUpTT04iLCJSZWxlYXNlIiwiZnJvbU5hbWVBbmRFbnRyaWVzIiwicHJvamVjdCIsIlByb2plY3QiLCJyZWxlYXNlcyIsIlJlbGVhc2VzIiwidG9wbW9zdEZpbGVOYW1lcyIsInRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZm9yRWFjaCIsImFkZFJlbGVhc2UiLCJwcm9qZWN0cyIsIlByb2plY3RzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsImFkZFByb2plY3QiLCJkaXJlY3RvcnkiLCJEaXJlY3RvcnkiLCJmcm9tUGF0aCIsImNvbnZlcnRDb250ZW50VGFic1RvV2hpdGVzcGFjZSIsIkZpbGUiLCJmcm9tUGF0aEFuZENvbnRlbnQiLCJnZXRGaWxlIiwiRmlsZXMiLCJhZGRGaWxlIiwiYWJzb2x1dGVEaXJlY3RvcnlQYXRoIiwic3ViRW50cnlOYW1lcyIsInN1YkVudHJ5TmFtZSIsInN1YkVudHJ5TmFtZUhpZGRlbk5hbWUiLCJpc05hbWVIaWRkZW5OYW1lIiwibG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMiLCJkaXJlY3RvcnlQYXRoIiwiYWRkRGlyZWN0b3J5IiwiZmlsZVBhdGgiLCJmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCIsImlzRmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJmaWxlUmVjb2duaXNlZEZpbGUiLCJyZWR1Y2UiLCJhYnNvbHV0ZVN1YkVudHJ5UGF0aCIsInN1YkVudHJ5RmlsZSIsInB1c2giLCJzdWJFbnRyeURpcmVjdG9yeSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBdUJnQkEsUUFBUTtlQUFSQTs7SUFxQkFDLFFBQVE7ZUFBUkE7O0lBV0FDLFNBQVM7ZUFB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
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBwYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICB0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBta2RpcnAuc3luYyh0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgd3JpdGVGaWxlKGFic29sdXRlUGF0aCwgY29udGVudCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlcyA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBwYXRoc0xlbmd0aCA9IHBhdGhzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgICAgcGF0aCA9IGZpcnN0UGF0aCwgLy8vXHJcbiAgICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICAgIGZpbGVzID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICAgICBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICAgICBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGVzKGZpbGVzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBmaWxlcy5mb3JFYWNoRmlsZSgoZmlsZSkgPT4ge1xyXG4gICAgc2F2ZUZpbGUoZmlsZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgZW50cmllcyA9IEVudHJpZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICByZWxhdGl2ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5TmFtZTsgIC8vL1xyXG5cclxuICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlKHJlbGVhc2VOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgcmVsZWFzZSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBuYW1lID0gcmVsZWFzZU5hbWUsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gcmVsZWFzZU5hbWUsICAvLy9cclxuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RmlsZU5hbWUpLFxyXG4gICAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICAgIGxldCBqc29uLFxyXG4gICAgICAgICAgZW50cmllcztcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAoeyBlbnRyaWVzIH0gPSBqc29uKTtcclxuXHJcbiAgICAgIGpzb24gID0gZW50cmllczsgIC8vL1xyXG5cclxuICAgICAgZW50cmllcyA9IEVudHJpZXMuZnJvbUpTT04oanNvbik7XHJcblxyXG4gICAgICByZWxlYXNlID0gUmVsZWFzZS5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlbGVhc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdChwcm9qZWN0TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGxldCBwcm9qZWN0ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSBwcm9qZWN0TmFtZSwgIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwcm9qZWN0TmFtZSwgLy8vXHJcbiAgICAgICAgICBlbnRyaWVzID0gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIHByb2plY3QgPSBQcm9qZWN0LmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlcyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCByZWxlYXNlcyA9IFJlbGVhc2VzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lcyA9IHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgcmVsZWFzZU5hbWVzID0gdG9wbW9zdEZpbGVOYW1lczsgIC8vL1xyXG5cclxuICByZWxlYXNlTmFtZXMuZm9yRWFjaCgocmVsZWFzZU5hbWUpID0+IHtcclxuICAgIGNvbnN0IHJlbGVhc2UgPSBsb2FkUmVsZWFzZShyZWxlYXNlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xyXG4gICAgICByZWxlYXNlcy5hZGRSZWxlYXNlKHJlbGVhc2UpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVsZWFzZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IHByb2plY3RzID0gUHJvamVjdHMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgcHJvamVjdE5hbWVzID0gdG9wbW9zdERpcmVjdG9yeU5hbWVzOyAvLy9cclxuXHJcbiAgcHJvamVjdE5hbWVzLmZvckVhY2goKHByb2plY3ROYW1lKSA9PiB7XHJcbiAgICBjb25zdCBwcm9qZWN0ID0gbG9hZFByb2plY3QocHJvamVjdE5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIGlmIChwcm9qZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHByb2plY3RzLmFkZFByb2plY3QocHJvamVjdCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwcm9qZWN0cztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGRpcmVjdG9yeSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LmZyb21QYXRoKHBhdGgpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXJlY3Rvcnk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBsb2FkRmlsZSxcclxuICBzYXZlRmlsZSxcclxuICBsb2FkRmlsZXMsXHJcbiAgc2F2ZUZpbGVzLFxyXG4gIGxvYWRFbnRyaWVzLFxyXG4gIGxvYWRSZWxlYXNlLFxyXG4gIGxvYWRQcm9qZWN0LFxyXG4gIGxvYWRSZWxlYXNlcyxcclxuICBsb2FkUHJvamVjdHMsXHJcbiAgbG9hZERpcmVjdG9yeVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIGlmIChlbnRyeUZpbGUpIHtcclxuICAgIGxldCBjb250ZW50ID0gcmVhZEZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBjb250ZW50ID0gY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlKGNvbnRlbnQpOyAgLy8vXHJcblxyXG4gICAgZmlsZSA9IEZpbGUuZnJvbVBhdGhBbmRDb250ZW50KHBhdGgsIGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVGcm9tUmVsZWFzZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgZmlsZSA9IHJlbGVhc2UuZ2V0RmlsZShwYXRoKTtcclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVzRnJvbVByb2plY3QocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IGZpbGVzID0gRmlsZXMuZnJvbU5vdGhpbmcoKTtcclxuXHJcbiAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgY29uc3QgZmlsZSA9IGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGZpbGVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUmVsZWFzZShwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHBhdGhzTGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xyXG5cclxuICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmaXJzdFBhdGggPSBmaXJzdChwYXRocyksXHJcbiAgICAgICAgICBwYXRoID0gZmlyc3RQYXRoLCAvLy9cclxuICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICAgIHRvcG1vc3RGaWxlTmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lLCAvLy9cclxuICAgICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICAgICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBjb25zdCBhYnNvbHV0ZURpcmVjdG9yeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcmVsYXRpdmVEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShhYnNvbHV0ZURpcmVjdG9yeVBhdGgpO1xyXG5cclxuICBzdWJFbnRyeU5hbWVzLmZvckVhY2goKHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3Qgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzID0gIWxvYWRPbmx5UmVjb2duaXNlZEZpbGVzO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBwYXRoID0gY29uY2F0ZW5hdGVQYXRocyhyZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChkaXJlY3RvcnkgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBkaXJlY3RvcnlQYXRoID0gcGF0aDsgLy8vXHJcblxyXG4gICAgICAgIGlmIChsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3Rvcmllcykge1xyXG4gICAgICAgICAgZW50cmllcy5hZGREaXJlY3RvcnkoZGlyZWN0b3J5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpOyAvLy9cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gbG9hZEZpbGUocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCA9IGlzRmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgoZmlsZVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZVJlY29nbmlzZWRGaWxlID0gZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGg7ICAvLy9cclxuXHJcbiAgICAgICAgICBpZiAoZmlsZVJlY29nbmlzZWRGaWxlIHx8IGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICAgIGVudHJpZXMuYWRkRmlsZShmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IHRvcG1vc3RGaWxlTmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3RGaWxlTmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdEZpbGVOYW1lcywgc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVN1YkVudHJ5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKTtcclxuXHJcbiAgICBpZiAoIXN1YkVudHJ5TmFtZUhpZGRlbk5hbWUpIHtcclxuICAgICAgY29uc3Qgc3ViRW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHRvcG1vc3RGaWxlTmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWVzLnB1c2godG9wbW9zdEZpbGVOYW1lKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvcG1vc3RGaWxlTmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG5cclxuICBjb25zdCBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdERpcmVjdG9yeU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RGlyZWN0b3J5KSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzdWJFbnRyeU5hbWU7ICAvLy9cclxuXHJcbiAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWVzLnB1c2godG9wbW9zdERpcmVjdG9yeU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlOYW1lcztcclxufVxyXG4iXSwibmFtZXMiOlsibG9hZEZpbGUiLCJzYXZlRmlsZSIsImxvYWRGaWxlcyIsInNhdmVGaWxlcyIsImxvYWRFbnRyaWVzIiwibG9hZFJlbGVhc2UiLCJsb2FkUHJvamVjdCIsImxvYWRSZWxlYXNlcyIsImxvYWRQcm9qZWN0cyIsImxvYWREaXJlY3RvcnkiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicmVhZEZpbGUiLCJmaWxlU3lzdGVtVXRpbGl0aWVzIiwid3JpdGVGaWxlIiwiaXNFbnRyeUZpbGUiLCJyZWFkRGlyZWN0b3J5IiwiaXNFbnRyeURpcmVjdG9yeSIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgiLCJwYXRoIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZmlsZSIsInRvcG1vc3REaXJlY3RvcnlOYW1lIiwiYWJzb2x1dGVQYXRoIiwiZW50cnlEaXJlY3RvcnkiLCJmaWxlRnJvbVByb2plY3QiLCJmaWxlRnJvbVJlbGVhc2UiLCJlcnJvciIsImdldFBhdGgiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJta2RpcnAiLCJzeW5jIiwicGF0aHMiLCJmaWxlcyIsInBhdGhzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQYXRoIiwiZmlsZXNGcm9tUHJvamVjdCIsImZpbGVzRnJvbVJlbGVhc2UiLCJmb3JFYWNoRmlsZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwiZW50cmllcyIsIkVudHJpZXMiLCJmcm9tTm90aGluZyIsInJlbGF0aXZlRGlyZWN0b3J5UGF0aCIsImVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlIiwibmFtZSIsInRvcG1vc3RGaWxlTmFtZSIsImVudHJ5RmlsZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJmcm9tSlNPTiIsIlJlbGVhc2UiLCJmcm9tTmFtZUFuZEVudHJpZXMiLCJwcm9qZWN0TmFtZSIsInByb2plY3QiLCJQcm9qZWN0IiwicmVsZWFzZXMiLCJSZWxlYXNlcyIsInRvcG1vc3RGaWxlTmFtZXMiLCJ0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsInJlbGVhc2VOYW1lcyIsImZvckVhY2giLCJhZGRSZWxlYXNlIiwicHJvamVjdHMiLCJQcm9qZWN0cyIsInRvcG1vc3REaXJlY3RvcnlOYW1lcyIsInRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJwcm9qZWN0TmFtZXMiLCJhZGRQcm9qZWN0IiwiZGlyZWN0b3J5IiwiRGlyZWN0b3J5IiwiZnJvbVBhdGgiLCJjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UiLCJGaWxlIiwiZnJvbVBhdGhBbmRDb250ZW50IiwiZ2V0RmlsZSIsIkZpbGVzIiwiYWRkRmlsZSIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJzdWJFbnRyeUZpbGUiLCJwdXNoIiwic3ViRW50cnlEaXJlY3RvcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQXVCZ0JBLFFBQVE7ZUFBUkE7O0lBcUJBQyxRQUFRO2VBQVJBOztJQVdBQyxTQUFTO2VBQVRBOztJQTJCQUMsU0FBUztlQUFUQTs7SUFNQUMsV0FBVztlQUFYQTs7SUFTQUMsV0FBVztlQUFYQTs7SUFnQ0FDLFdBQVc7ZUFBWEE7O0lBZ0JBQyxZQUFZO2VBQVpBOztJQWdCQUMsWUFBWTtlQUFaQTs7SUFnQkFDLGFBQWE7ZUFBYkE7O0lBaUJoQixPQVdFO2VBWEY7OzsyREFoTW1CO3lCQUVnRDt5REFFbEQ7MERBQ0M7NERBQ0U7NERBQ0E7NERBQ0E7NkRBQ0M7NkRBQ0E7OERBQ0M7b0JBRVc7d0JBQ1k7dUJBQ0U7Ozs7OztBQUUvQyxJQUFNLEFBQUVDLFFBQVVDLHlCQUFjLENBQXhCRCxPQUNBRSxXQUFzRUMsOEJBQW1CLENBQXpGRCxVQUFVRSxZQUE0REQsOEJBQW1CLENBQS9FQyxXQUFXQyxjQUFpREYsOEJBQW1CLENBQXBFRSxhQUFhQyxnQkFBb0NILDhCQUFtQixDQUF2REcsZUFBZUMsbUJBQXFCSiw4QkFBbUIsQ0FBeENJLGtCQUNqREMsbUJBQWlGQyx3QkFBYSxDQUE5RkQsa0JBQWtCRSwrQkFBK0RELHdCQUFhLENBQTVFQyw4QkFBOEJDLCtCQUFpQ0Ysd0JBQWEsQ0FBOUNFO0FBRWpELFNBQVNyQixTQUFTc0IsSUFBSSxFQUFFQyxxQkFBcUIsRUFBRTtJQUNwRCxJQUFJQyxPQUFPLElBQUk7SUFFZixJQUFJO1FBQ0YsSUFBTUMsdUJBQXVCTCw2QkFBNkJFO1FBRTFELElBQUlHLHlCQUF5QixJQUFJLEVBQUU7WUFDakMsSUFBTUMsZUFBZVIsaUJBQWlCSyx1QkFBdUJFLHVCQUN2REUsaUJBQWlCVixpQkFBaUJTO1lB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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.115",
4
+ "version": "5.0.117",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-file-system",
7
7
  "description": "Occam's file system functionality.",
@@ -3,10 +3,9 @@
3
3
  import { loadProject as loadProjectEx } from "./utilities/fileSystem"
4
4
 
5
5
  export default function loadProject(projectsDirectoryPath, json, callback) {
6
- const { directoryName } = json,
7
- topmostDirectoryName = directoryName, ///
6
+ const { projectName } = json,
8
7
  loadOnlyRecognisedFiles = false, ///
9
- project = loadProjectEx(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
8
+ project = loadProjectEx(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
10
9
 
11
10
  json = (project !== null) ? ///
12
11
  project.toJSON():
@@ -3,9 +3,8 @@
3
3
  import { loadRelease as loadReleaseEx } from "./utilities/fileSystem"
4
4
 
5
5
  export default function loadRelease(projectsDirectoryPath, json, callback) {
6
- const { fileName } = json,
7
- topmostFileName = fileName, ///
8
- release = loadReleaseEx(topmostFileName, projectsDirectoryPath);
6
+ const { releaseName } = json,
7
+ release = loadReleaseEx(releaseName, projectsDirectoryPath);
9
8
 
10
9
  json = (release !== null) ? ///
11
10
  release.toJSON():
@@ -95,12 +95,13 @@ export function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnl
95
95
  return entries;
96
96
  }
97
97
 
98
- export function loadRelease(topmostFileName, projectsDirectoryPath) {
98
+ export function loadRelease(releaseName, projectsDirectoryPath) {
99
99
  let release = null;
100
100
 
101
101
  try {
102
- const name = topmostFileName, ///
103
- absolutePath = concatenatePaths(projectsDirectoryPath, name),
102
+ const name = releaseName, ///
103
+ topmostFileName = releaseName, ///
104
+ absolutePath = concatenatePaths(projectsDirectoryPath, topmostFileName),
104
105
  entryFile = isEntryFile(absolutePath);
105
106
 
106
107
  if (entryFile) {
@@ -126,11 +127,12 @@ export function loadRelease(topmostFileName, projectsDirectoryPath) {
126
127
  return release;
127
128
  }
128
129
 
129
- export function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
130
+ export function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
130
131
  let project = null;
131
132
 
132
133
  try {
133
- const name = topmostDirectoryName, ///
134
+ const name = projectName, ///
135
+ topmostDirectoryName = projectName, ///
134
136
  entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
135
137
 
136
138
  project = Project.fromNameAndEntries(name, entries);
@@ -143,10 +145,11 @@ export function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnl
143
145
 
144
146
  export function loadReleases(projectsDirectoryPath) {
145
147
  const releases = Releases.fromNothing(),
146
- topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath);
148
+ topmostFileNames = topmostFileNamesFromProjectsDirectoryPath(projectsDirectoryPath),
149
+ releaseNames = topmostFileNames; ///
147
150
 
148
- topmostFileNames.forEach((topmostFileName) => {
149
- const release = loadRelease(topmostFileName, projectsDirectoryPath);
151
+ releaseNames.forEach((releaseName) => {
152
+ const release = loadRelease(releaseName, projectsDirectoryPath);
150
153
 
151
154
  if (release !== null) {
152
155
  releases.addRelease(release);
@@ -158,10 +161,11 @@ export function loadReleases(projectsDirectoryPath) {
158
161
 
159
162
  export function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
160
163
  const projects = Projects.fromNothing(),
161
- topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath);
164
+ topmostDirectoryNames = topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath),
165
+ projectNames = topmostDirectoryNames; ///
162
166
 
163
- topmostDirectoryNames.forEach((topmostDirectoryName) => {
164
- const project = loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
167
+ projectNames.forEach((projectName) => {
168
+ const project = loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
165
169
 
166
170
  if (project !== null) {
167
171
  projects.addProject(project);