occam-file-system 5.0.110 → 5.0.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/utilities/fileSystem.js +57 -20
- package/package.json +1 -1
- package/src/utilities/fileSystem.js +84 -15
|
@@ -61,15 +61,14 @@ function _interopRequireDefault(obj) {
|
|
|
61
61
|
default: obj
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
var
|
|
65
|
-
function loadFile(
|
|
64
|
+
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, pathWithoutTopmostDirectoryNameFromPath = _necessary.pathUtilities.pathWithoutTopmostDirectoryNameFromPath;
|
|
65
|
+
function loadFile(path1, projectsDirectoryPath) {
|
|
66
66
|
var file = null;
|
|
67
67
|
try {
|
|
68
|
-
var
|
|
69
|
-
if (
|
|
70
|
-
var
|
|
71
|
-
|
|
72
|
-
file = _file.default.fromPathAndContent(path, content);
|
|
68
|
+
var topmostDirectoryName = topmostDirectoryNameFromPath(path1);
|
|
69
|
+
if (topmostDirectoryName !== null) {
|
|
70
|
+
var absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName), entryDirectory = isEntryDirectory(absolutePath);
|
|
71
|
+
file = entryDirectory ? fileFromProject(path1, projectsDirectoryPath) : fileFromRelease(path1, projectsDirectoryPath);
|
|
73
72
|
}
|
|
74
73
|
} catch (error) {
|
|
75
74
|
///
|
|
@@ -77,16 +76,21 @@ function loadFile(path, projectsDirectoryPath) {
|
|
|
77
76
|
return file;
|
|
78
77
|
}
|
|
79
78
|
function saveFile(file, projectsDirectoryPath) {
|
|
80
|
-
var
|
|
79
|
+
var path1 = file.getPath(), content = file.getContent(), absolutePath = concatenatePaths(projectsDirectoryPath, path1), topmostAbsoluteDirectoryPath = topmostDirectoryPathFromPath(absolutePath);
|
|
81
80
|
_mkdirp.default.sync(topmostAbsoluteDirectoryPath);
|
|
82
81
|
writeFile(absolutePath, content);
|
|
83
82
|
}
|
|
84
83
|
function loadFiles(paths, projectsDirectoryPath) {
|
|
85
|
-
var files =
|
|
86
|
-
|
|
87
|
-
var
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
var files = null;
|
|
85
|
+
try {
|
|
86
|
+
var topmostDirectoryName = topmostDirectoryNameFromPath(path);
|
|
87
|
+
if (topmostDirectoryName !== null) {
|
|
88
|
+
var absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName), entryDirectory = isEntryDirectory(absolutePath);
|
|
89
|
+
files = entryDirectory ? filesFromProject(paths, projectsDirectoryPath) : filesFromRelease(paths, projectsDirectoryPath);
|
|
90
|
+
}
|
|
91
|
+
} catch (error) {
|
|
92
|
+
///
|
|
93
|
+
}
|
|
90
94
|
return files;
|
|
91
95
|
}
|
|
92
96
|
function saveFiles(files, projectsDirectoryPath) {
|
|
@@ -147,12 +151,12 @@ function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
|
|
|
147
151
|
});
|
|
148
152
|
return projects;
|
|
149
153
|
}
|
|
150
|
-
function loadDirectory(
|
|
154
|
+
function loadDirectory(path1, projectsDirectoryPath) {
|
|
151
155
|
var directory = null;
|
|
152
156
|
try {
|
|
153
|
-
var absolutePath = concatenatePaths(projectsDirectoryPath,
|
|
157
|
+
var absolutePath = concatenatePaths(projectsDirectoryPath, path1), entryDirectory = isEntryDirectory(absolutePath);
|
|
154
158
|
if (entryDirectory) {
|
|
155
|
-
directory = _directory.default.fromPath(
|
|
159
|
+
directory = _directory.default.fromPath(path1);
|
|
156
160
|
}
|
|
157
161
|
} catch (error) {
|
|
158
162
|
///
|
|
@@ -171,20 +175,53 @@ var _default = {
|
|
|
171
175
|
loadProjects: loadProjects,
|
|
172
176
|
loadDirectory: loadDirectory
|
|
173
177
|
};
|
|
178
|
+
function fileFromProject(path1, projectsDirectoryPath) {
|
|
179
|
+
var file = null;
|
|
180
|
+
var absolutePath = concatenatePaths(projectsDirectoryPath, path1), entryFile = isEntryFile(absolutePath);
|
|
181
|
+
if (entryFile) {
|
|
182
|
+
var content = readFile(absolutePath);
|
|
183
|
+
content = (0, _content.convertContentTabsToWhitespace)(content); ///
|
|
184
|
+
file = _file.default.fromPathAndContent(path1, content);
|
|
185
|
+
}
|
|
186
|
+
return file;
|
|
187
|
+
}
|
|
188
|
+
function fileFromRelease(path1, projectsDirectoryPath) {
|
|
189
|
+
var topmostDirectoryName = topmostDirectoryNameFromPath(path1), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath), file = release.getFile(path1);
|
|
190
|
+
return file;
|
|
191
|
+
}
|
|
192
|
+
function filesFromProject(paths, projectsDirectoryPath) {
|
|
193
|
+
var files = _files.default.fromNothing();
|
|
194
|
+
paths.forEach(function(path1) {
|
|
195
|
+
var file = fileFromProject(path1, projectsDirectoryPath);
|
|
196
|
+
files.addFile(file);
|
|
197
|
+
});
|
|
198
|
+
return files;
|
|
199
|
+
}
|
|
200
|
+
function filesFromRelease(paths, projectsDirectoryPath) {
|
|
201
|
+
var files = _files.default.fromNothing(), pathsLength = paths.length;
|
|
202
|
+
if (pathsLength > 0) {
|
|
203
|
+
var firstPath = first(paths), path1 = firstPath, topmostDirectoryName = topmostDirectoryNameFromPath(path1), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath);
|
|
204
|
+
paths.forEach(function(path1) {
|
|
205
|
+
var file = release.getFile(path1);
|
|
206
|
+
files.addFile(file);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return files;
|
|
210
|
+
}
|
|
174
211
|
function entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles) {
|
|
175
212
|
var absoluteDirectoryPath = concatenatePaths(projectsDirectoryPath, relativeDirectoryPath), subEntryNames = readDirectory(absoluteDirectoryPath);
|
|
176
213
|
subEntryNames.forEach(function(subEntryName) {
|
|
177
214
|
var subEntryNameHiddenName = (0, _name.isNameHiddenName)(subEntryName), loadUnrecognisedFilesAndDirectories = !loadOnlyRecognisedFiles;
|
|
178
215
|
if (!subEntryNameHiddenName) {
|
|
179
|
-
var
|
|
216
|
+
var path1 = concatenatePaths(relativeDirectoryPath, subEntryName), directory = loadDirectory(path1, projectsDirectoryPath);
|
|
180
217
|
if (directory !== null) {
|
|
181
|
-
var directoryPath =
|
|
218
|
+
var directoryPath = path1; ///
|
|
182
219
|
if (loadUnrecognisedFilesAndDirectories) {
|
|
183
220
|
entries.addDirectory(directory);
|
|
184
221
|
}
|
|
185
222
|
entriesFromRelativeDirectoryPath(entries, directoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles); ///
|
|
186
223
|
} else {
|
|
187
|
-
var file = loadFile(
|
|
224
|
+
var file = loadFile(path1, projectsDirectoryPath);
|
|
188
225
|
if (file !== null) {
|
|
189
226
|
var filePath = file.getPath(), filePathRecognisedFilePath = (0, _filePath.isFilePathRecognisedFilePath)(filePath), fileRecognisedFile = filePathRecognisedFilePath; ///
|
|
190
227
|
if (fileRecognisedFile || loadUnrecognisedFilesAndDirectories) {
|
|
@@ -228,4 +265,4 @@ function topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath) {
|
|
|
228
265
|
return topmostDirectoryNames;
|
|
229
266
|
}
|
|
230
267
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgZmlsZVN5c3RlbVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcclxuXHJcbmltcG9ydCBGaWxlIGZyb20gXCIuLi9maWxlXCI7XHJcbmltcG9ydCBGaWxlcyBmcm9tIFwiLi4vZmlsZXNcIjtcclxuaW1wb3J0IEVudHJpZXMgZnJvbSBcIi4uL2VudHJpZXNcIjtcclxuaW1wb3J0IFByb2plY3QgZnJvbSBcIi4uL3Byb2plY3RcIjtcclxuaW1wb3J0IFJlbGVhc2UgZnJvbSBcIi4uL3JlbGVhc2VcIjtcclxuaW1wb3J0IFByb2plY3RzIGZyb20gXCIuLi9wcm9qZWN0c1wiO1xyXG5pbXBvcnQgUmVsZWFzZXMgZnJvbSBcIi4uL3JlbGVhc2VzXCI7XHJcbmltcG9ydCBEaXJlY3RvcnkgZnJvbSBcIi4uL2RpcmVjdG9yeVwiO1xyXG5cclxuaW1wb3J0IHsgaXNOYW1lSGlkZGVuTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xyXG5pbXBvcnQgeyBpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9maWxlUGF0aFwiO1xyXG5pbXBvcnQgeyBjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcclxuXHJcbmNvbnN0IHsgY29uY2F0ZW5hdGVQYXRocywgdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgZmlsZSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgICBlbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGlmIChlbnRyeUZpbGUpIHtcclxuICAgICAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnZlcnRDb250ZW50VGFic1RvV2hpdGVzcGFjZShjb250ZW50KTsgIC8vL1xyXG5cclxuICAgICAgZmlsZSA9IEZpbGUuZnJvbVBhdGhBbmRDb250ZW50KHBhdGgsIGNvbnRlbnQpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBmaWxlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUoZmlsZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgcGF0aCA9IGZpbGUuZ2V0UGF0aCgpLFxyXG4gICAgICAgIGNvbnRlbnQgPSBmaWxlLmdldENvbnRlbnQoKSxcclxuICAgICAgICBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgdG9wbW9zdEFic29sdXRlRGlyZWN0b3J5UGF0aCA9IHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgbWtkaXJwLnN5bmModG9wbW9zdEFic29sdXRlRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHdyaXRlRmlsZShhYnNvbHV0ZVBhdGgsIGNvbnRlbnQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBmaWxlcyA9IEZpbGVzLmZyb21Ob3RoaW5nKCk7XHJcblxyXG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGZpbGVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlcyhmaWxlcywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgZmlsZXMuZm9yRWFjaEZpbGUoKGZpbGUpID0+IHtcclxuICAgIHNhdmVGaWxlKGZpbGUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW50cmllcyh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGVudHJpZXMgPSBFbnRyaWVzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgcmVsYXRpdmVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeU5hbWU7ICAvLy9cclxuXHJcbiAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgcmVsYXRpdmVEaXJlY3RvcnlQYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCByZWxlYXNlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0b3Btb3N0RmlsZU5hbWUsIC8vL1xyXG4gICAgICAgICAgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIG5hbWUpLFxyXG4gICAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICAgIGxldCBqc29uLFxyXG4gICAgICAgICAgZW50cmllcztcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAoeyBlbnRyaWVzIH0gPSBqc29uKTtcclxuXHJcbiAgICAgIGpzb24gID0gZW50cmllczsgIC8vL1xyXG5cclxuICAgICAgZW50cmllcyA9IEVudHJpZXMuZnJvbUpTT04oanNvbik7XHJcblxyXG4gICAgICByZWxlYXNlID0gUmVsZWFzZS5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlbGVhc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdCh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGxldCBwcm9qZWN0ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgIC8vL1xyXG4gICAgICAgICAgZW50cmllcyA9IGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgICBwcm9qZWN0ID0gUHJvamVjdC5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb2plY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVsZWFzZXMocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgcmVsZWFzZXMgPSBSZWxlYXNlcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMgPSB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RmlsZU5hbWVzLmZvckVhY2goKHRvcG1vc3RGaWxlTmFtZSkgPT4ge1xyXG4gICAgY29uc3QgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xyXG4gICAgICByZWxlYXNlcy5hZGRSZWxlYXNlKHJlbGVhc2UpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVsZWFzZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IHByb2plY3RzID0gUHJvamVjdHMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcy5mb3JFYWNoKCh0b3Btb3N0RGlyZWN0b3J5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgcHJvamVjdCA9IGxvYWRQcm9qZWN0KHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgICBpZiAocHJvamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICBwcm9qZWN0cy5hZGRQcm9qZWN0KHByb2plY3QpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcHJvamVjdHM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGlyZWN0b3J5KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBkaXJlY3RvcnkgPSBudWxsO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgaWYgKGVudHJ5RGlyZWN0b3J5KSB7XHJcbiAgICAgIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5mcm9tUGF0aChwYXRoKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGlyZWN0b3J5O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbG9hZEZpbGUsXHJcbiAgc2F2ZUZpbGUsXHJcbiAgbG9hZEZpbGVzLFxyXG4gIHNhdmVGaWxlcyxcclxuICBsb2FkRW50cmllcyxcclxuICBsb2FkUmVsZWFzZSxcclxuICBsb2FkUHJvamVjdCxcclxuICBsb2FkUmVsZWFzZXMsXHJcbiAgbG9hZFByb2plY3RzLFxyXG4gIGxvYWREaXJlY3RvcnlcclxufTtcclxuXHJcbmZ1bmN0aW9uIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGFic29sdXRlRGlyZWN0b3J5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgpLFxyXG4gICAgICAgIHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KGFic29sdXRlRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHN1YkVudHJ5TmFtZXMuZm9yRWFjaCgoc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMgPSAhbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXM7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgICAgZGlyZWN0b3J5ID0gbG9hZERpcmVjdG9yeShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKGRpcmVjdG9yeSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoOyAvLy9cclxuXHJcbiAgICAgICAgaWYgKGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICBlbnRyaWVzLmFkZERpcmVjdG9yeShkaXJlY3RvcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgZGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7IC8vL1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIGZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoID0gaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aChmaWxlUGF0aCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUmVjb2duaXNlZEZpbGUgPSBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aDsgIC8vL1xyXG5cclxuICAgICAgICAgIGlmIChmaWxlUmVjb2duaXNlZEZpbGUgfHwgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMpIHtcclxuICAgICAgICAgICAgZW50cmllcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdEZpbGVOYW1lcztcclxuXHJcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdEZpbGVOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RmlsZU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdEZpbGVOYW1lID0gc3ViRW50cnlOYW1lOyAgLy8vXHJcblxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMucHVzaCh0b3Btb3N0RmlsZU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiB0b3Btb3N0RmlsZU5hbWVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RGlyZWN0b3J5TmFtZXMsIHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgYWJzb2x1dGVTdWJFbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSk7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN1YkVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMucHVzaCh0b3Btb3N0RGlyZWN0b3J5TmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJsb2FkRmlsZSIsInNhdmVGaWxlIiwibG9hZEZpbGVzIiwic2F2ZUZpbGVzIiwibG9hZEVudHJpZXMiLCJsb2FkUmVsZWFzZSIsImxvYWRQcm9qZWN0IiwibG9hZFJlbGVhc2VzIiwibG9hZFByb2plY3RzIiwibG9hZERpcmVjdG9yeSIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwidG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aCIsInJlYWRGaWxlIiwiZmlsZVN5c3RlbVV0aWxpdGllcyIsIndyaXRlRmlsZSIsImlzRW50cnlGaWxlIiwicmVhZERpcmVjdG9yeSIsImlzRW50cnlEaXJlY3RvcnkiLCJwYXRoIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZmlsZSIsImFic29sdXRlUGF0aCIsImVudHJ5RmlsZSIsImNvbnRlbnQiLCJjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UiLCJGaWxlIiwiZnJvbVBhdGhBbmRDb250ZW50IiwiZXJyb3IiLCJnZXRQYXRoIiwiZ2V0Q29udGVudCIsInRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJta2RpcnAiLCJzeW5jIiwicGF0aHMiLCJmaWxlcyIsIkZpbGVzIiwiZnJvbU5vdGhpbmciLCJmb3JFYWNoIiwiYWRkRmlsZSIsImZvckVhY2hGaWxlIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJsb2FkT25seVJlY29nbmlzZWRGaWxlcyIsImVudHJpZXMiLCJFbnRyaWVzIiwicmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwiZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgiLCJ0b3Btb3N0RmlsZU5hbWUiLCJyZWxlYXNlIiwibmFtZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJmcm9tSlNPTiIsIlJlbGVhc2UiLCJmcm9tTmFtZUFuZEVudHJpZXMiLCJwcm9qZWN0IiwiUHJvamVjdCIsInJlbGVhc2VzIiwiUmVsZWFzZXMiLCJ0b3Btb3N0RmlsZU5hbWVzIiwidG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJhZGRSZWxlYXNlIiwicHJvamVjdHMiLCJQcm9qZWN0cyIsInRvcG1vc3REaXJlY3RvcnlOYW1lcyIsInRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJhZGRQcm9qZWN0IiwiZGlyZWN0b3J5IiwiZW50cnlEaXJlY3RvcnkiLCJEaXJlY3RvcnkiLCJmcm9tUGF0aCIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJz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
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGggfSA9IHBhdGhVdGlsaXRpZXM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGUocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGZpbGUgPSBudWxsO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpO1xyXG5cclxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgdG9wbW9zdERpcmVjdG9yeU5hbWUpLFxyXG4gICAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICAgIGZpbGUgPSBlbnRyeURpcmVjdG9yeSA/XHJcbiAgICAgICAgICAgICAgIGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICBmaWxlRnJvbVJlbGVhc2UocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlKGZpbGUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICBjb250ZW50ID0gZmlsZS5nZXRDb250ZW50KCksXHJcbiAgICAgICAgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIHRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIG1rZGlycC5zeW5jKHRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB3cml0ZUZpbGUoYWJzb2x1dGVQYXRoLCBjb250ZW50KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlcyhwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGZpbGVzID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlcyA9IGVudHJ5RGlyZWN0b3J5ID9cclxuICAgICAgICAgICAgICAgIGZpbGVzRnJvbVByb2plY3QocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkgOlxyXG4gICAgICAgICAgICAgICAgICBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlcyhmaWxlcywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgZmlsZXMuZm9yRWFjaEZpbGUoKGZpbGUpID0+IHtcclxuICAgIHNhdmVGaWxlKGZpbGUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW50cmllcyh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGVudHJpZXMgPSBFbnRyaWVzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgcmVsYXRpdmVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeU5hbWU7ICAvLy9cclxuXHJcbiAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgcmVsYXRpdmVEaXJlY3RvcnlQYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCByZWxlYXNlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0b3Btb3N0RmlsZU5hbWUsIC8vL1xyXG4gICAgICAgICAgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIG5hbWUpLFxyXG4gICAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICAgIGxldCBqc29uLFxyXG4gICAgICAgICAgZW50cmllcztcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAoeyBlbnRyaWVzIH0gPSBqc29uKTtcclxuXHJcbiAgICAgIGpzb24gID0gZW50cmllczsgIC8vL1xyXG5cclxuICAgICAgZW50cmllcyA9IEVudHJpZXMuZnJvbUpTT04oanNvbik7XHJcblxyXG4gICAgICByZWxlYXNlID0gUmVsZWFzZS5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlbGVhc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdCh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGxldCBwcm9qZWN0ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgIC8vL1xyXG4gICAgICAgICAgZW50cmllcyA9IGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgICBwcm9qZWN0ID0gUHJvamVjdC5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb2plY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVsZWFzZXMocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgcmVsZWFzZXMgPSBSZWxlYXNlcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMgPSB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RmlsZU5hbWVzLmZvckVhY2goKHRvcG1vc3RGaWxlTmFtZSkgPT4ge1xyXG4gICAgY29uc3QgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBpZiAocmVsZWFzZSAhPT0gbnVsbCkge1xyXG4gICAgICByZWxlYXNlcy5hZGRSZWxlYXNlKHJlbGVhc2UpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVsZWFzZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IHByb2plY3RzID0gUHJvamVjdHMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcy5mb3JFYWNoKCh0b3Btb3N0RGlyZWN0b3J5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgcHJvamVjdCA9IGxvYWRQcm9qZWN0KHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTtcclxuXHJcbiAgICBpZiAocHJvamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICBwcm9qZWN0cy5hZGRQcm9qZWN0KHByb2plY3QpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcHJvamVjdHM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGlyZWN0b3J5KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBkaXJlY3RvcnkgPSBudWxsO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgaWYgKGVudHJ5RGlyZWN0b3J5KSB7XHJcbiAgICAgIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5mcm9tUGF0aChwYXRoKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGlyZWN0b3J5O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbG9hZEZpbGUsXHJcbiAgc2F2ZUZpbGUsXHJcbiAgbG9hZEZpbGVzLFxyXG4gIHNhdmVGaWxlcyxcclxuICBsb2FkRW50cmllcyxcclxuICBsb2FkUmVsZWFzZSxcclxuICBsb2FkUHJvamVjdCxcclxuICBsb2FkUmVsZWFzZXMsXHJcbiAgbG9hZFByb2plY3RzLFxyXG4gIGxvYWREaXJlY3RvcnlcclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgZmlsZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICBlbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHJlYWRGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgY29udGVudCA9IGNvbnZlcnRDb250ZW50VGFic1RvV2hpdGVzcGFjZShjb250ZW50KTsgIC8vL1xyXG5cclxuICAgIGZpbGUgPSBGaWxlLmZyb21QYXRoQW5kQ29udGVudChwYXRoLCBjb250ZW50KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaWxlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxlRnJvbVJlbGVhc2UocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpLFxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lLCAvLy9cclxuICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2UodG9wbW9zdEZpbGVOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpLFxyXG4gICAgICAgIGZpbGUgPSByZWxlYXNlLmdldEZpbGUocGF0aCk7XHJcblxyXG4gIHJldHVybiBmaWxlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBmaWxlcyA9IEZpbGVzLmZyb21Ob3RoaW5nKCk7XHJcblxyXG4gIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBmaWxlcy5hZGRGaWxlKGZpbGUpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVzRnJvbVJlbGVhc2UocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IGZpbGVzID0gRmlsZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICBwYXRoc0xlbmd0aCA9IHBhdGhzLmxlbmd0aDtcclxuXHJcbiAgaWYgKHBhdGhzTGVuZ3RoID4gMCkge1xyXG4gICAgY29uc3QgZmlyc3RQYXRoID0gZmlyc3QocGF0aHMpLFxyXG4gICAgICAgICAgcGF0aCA9IGZpcnN0UGF0aCwgLy8vXHJcbiAgICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCksXHJcbiAgICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgLy8vXHJcbiAgICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2UodG9wbW9zdEZpbGVOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcclxuICAgICAgY29uc3QgZmlsZSA9IHJlbGVhc2UuZ2V0RmlsZShwYXRoKTtcclxuXHJcbiAgICAgIGZpbGVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZnVuY3Rpb24gZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgcmVsYXRpdmVEaXJlY3RvcnlQYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgYWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkoYWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgc3ViRW50cnlOYW1lcy5mb3JFYWNoKChzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3RvcmllcyA9ICFsb2FkT25seVJlY29nbmlzZWRGaWxlcztcclxuXHJcbiAgICBpZiAoIXN1YkVudHJ5TmFtZUhpZGRlbk5hbWUpIHtcclxuICAgICAgY29uc3QgcGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocmVsYXRpdmVEaXJlY3RvcnlQYXRoLCBzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgICBkaXJlY3RvcnkgPSBsb2FkRGlyZWN0b3J5KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoZGlyZWN0b3J5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IHBhdGg7IC8vL1xyXG5cclxuICAgICAgICBpZiAobG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMpIHtcclxuICAgICAgICAgIGVudHJpZXMuYWRkRGlyZWN0b3J5KGRpcmVjdG9yeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCBkaXJlY3RvcnlQYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKTsgLy8vXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGZpbGUuZ2V0UGF0aCgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGggPSBpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoKGZpbGVQYXRoKSxcclxuICAgICAgICAgICAgICAgIGZpbGVSZWNvZ25pc2VkRmlsZSA9IGZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoOyAgLy8vXHJcblxyXG4gICAgICAgICAgaWYgKGZpbGVSZWNvZ25pc2VkRmlsZSB8fCBsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3Rvcmllcykge1xyXG4gICAgICAgICAgICBlbnRyaWVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCB0b3Btb3N0RmlsZU5hbWVzO1xyXG5cclxuICBjb25zdCBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RmlsZU5hbWVzID0gc3ViRW50cnlOYW1lcy5yZWR1Y2UoKHRvcG1vc3RGaWxlTmFtZXMsIHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgYWJzb2x1dGVTdWJFbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSk7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN1YkVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlU3ViRW50cnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChzdWJFbnRyeUZpbGUpIHtcclxuICAgICAgICBjb25zdCB0b3Btb3N0RmlsZU5hbWUgPSBzdWJFbnRyeU5hbWU7ICAvLy9cclxuXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lcy5wdXNoKHRvcG1vc3RGaWxlTmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3Btb3N0RmlsZU5hbWVzO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIHRvcG1vc3RGaWxlTmFtZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lcztcclxuXHJcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdERpcmVjdG9yeU5hbWVzID0gc3ViRW50cnlOYW1lcy5yZWR1Y2UoKHRvcG1vc3REaXJlY3RvcnlOYW1lcywgc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVN1YkVudHJ5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKTtcclxuXHJcbiAgICBpZiAoIXN1YkVudHJ5TmFtZUhpZGRlbk5hbWUpIHtcclxuICAgICAgY29uc3Qgc3ViRW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlU3ViRW50cnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChzdWJFbnRyeURpcmVjdG9yeSkge1xyXG4gICAgICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc3ViRW50cnlOYW1lOyAgLy8vXHJcblxyXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lcy5wdXNoKHRvcG1vc3REaXJlY3RvcnlOYW1lKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlOYW1lcztcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcbn1cclxuIl0sIm5hbWVzIjpbImxvYWRGaWxlIiwic2F2ZUZpbGUiLCJsb2FkRmlsZXMiLCJzYXZlRmlsZXMiLCJsb2FkRW50cmllcyIsImxvYWRSZWxlYXNlIiwibG9hZFByb2plY3QiLCJsb2FkUmVsZWFzZXMiLCJsb2FkUHJvamVjdHMiLCJsb2FkRGlyZWN0b3J5IiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsInJlYWRGaWxlIiwiZmlsZVN5c3RlbVV0aWxpdGllcyIsIndyaXRlRmlsZSIsImlzRW50cnlGaWxlIiwicmVhZERpcmVjdG9yeSIsImlzRW50cnlEaXJlY3RvcnkiLCJjb25jYXRlbmF0ZVBhdGhzIiwicGF0aFV0aWxpdGllcyIsInRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgiLCJ0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoIiwicGF0aCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsImZpbGUiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZSIsImFic29sdXRlUGF0aCIsImVudHJ5RGlyZWN0b3J5IiwiZmlsZUZyb21Qcm9qZWN0IiwiZmlsZUZyb21SZWxlYXNlIiwiZXJyb3IiLCJnZXRQYXRoIiwiY29udGVudCIsImdldENvbnRlbnQiLCJ0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoIiwibWtkaXJwIiwic3luYyIsInBhdGhzIiwiZmlsZXMiLCJmaWxlc0Zyb21Qcm9qZWN0IiwiZmlsZXNGcm9tUmVsZWFzZSIsImZvckVhY2hGaWxlIiwibG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMiLCJlbnRyaWVzIiwiRW50cmllcyIsImZyb21Ob3RoaW5nIiwicmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwiZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgiLCJ0b3Btb3N0RmlsZU5hbWUiLCJyZWxlYXNlIiwibmFtZSIsImVudHJ5RmlsZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJmcm9tSlNPTiIsIlJlbGVhc2UiLCJmcm9tTmFtZUFuZEVudHJpZXMiLCJwcm9qZWN0IiwiUHJvamVjdCIsInJlbGVhc2VzIiwiUmVsZWFzZXMiLCJ0b3Btb3N0RmlsZU5hbWVzIiwidG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJmb3JFYWNoIiwiYWRkUmVsZWFzZSIsInByb2plY3RzIiwiUHJvamVjdHMiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZXMiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiYWRkUHJvamVjdCIsImRpcmVjdG9yeSIsIkRpcmVjdG9yeSIsImZyb21QYXRoIiwiY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIiwiRmlsZSIsImZyb21QYXRoQW5kQ29udGVudCIsImdldEZpbGUiLCJGaWxlcyIsImFkZEZpbGUiLCJwYXRoc0xlbmd0aCIsImxlbmd0aCIsImZpcnN0UGF0aCIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJzdWJFbnRyeUZpbGUiLCJwdXNoIiwic3ViRW50cnlEaXJlY3RvcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQXVCZ0JBLFFBQVE7ZUFBUkE7O0lBcUJBQyxRQUFRO2VBQVJBOztJQVdBQyxTQUFTO2VBQVRBOztJQXFCQUMsU0FBUztlQUFUQTs7SUFNQUMsV0FBVztlQUFYQTs7SUFTQUMsV0FBVztlQUFYQTs7SUErQkFDLFdBQVc7ZUFBWEE7O0lBZUFDLFlBQVk7ZUFBWkE7O0lBZUFDLFlBQVk7ZUFBWkE7O0lBZUFDLGFBQWE7ZUFBYkE7O0lBaUJoQixPQVdFO2VBWEY7OzsyREF0TG1CO3lCQUVnRDt5REFFbEQ7MERBQ0M7NERBQ0U7NERBQ0E7NERBQ0E7NkRBQ0M7NkRBQ0E7OERBQ0M7b0JBRVc7d0JBQ1k7dUJBQ0U7Ozs7OztBQUUvQyxJQUFNLEFBQUVDLFFBQVVDLHlCQUFjLENBQXhCRCxPQUNBRSxXQUFzRUMsOEJBQW1CLENBQXpGRCxVQUFVRSxZQUE0REQsOEJBQW1CLENBQS9FQyxXQUFXQyxjQUFpREYsOEJBQW1CLENBQXBFRSxhQUFhQyxnQkFBb0NILDhCQUFtQixDQUF2REcsZUFBZUMsbUJBQXFCSiw4QkFBbUIsQ0FBeENJLGtCQUNqREMsbUJBQTBIQyx3QkFBYSxDQUF2SUQsa0JBQWtCRSwrQkFBd0dELHdCQUFhLENBQXJIQyw4QkFBOEJDLCtCQUEwRUYsd0JBQWEsQ0FBdkZFLDhCQUE4QkMsMENBQTRDSCx3QkFBYSxDQUF6REc7QUFFL0UsU0FBU3RCLFNBQVN1QixLQUFJLEVBQUVDLHFCQUFxQixFQUFFO0lBQ3BELElBQUlDLE9BQU8sSUFBSTtJQUVmLElBQUk7UUFDRixJQUFNQyx1QkFBdUJOLDZCQUE2Qkc7UUFFMUQsSUFBSUcseUJBQXlCLElBQUksRUFBRTtZQUNqQyxJQUFNQyxlQUFlVCxpQkFBaUJNLHVCQUF1QkUsdUJBQ3ZERSxpQkFBaUJYLGlCQUFpQlU7WUFFeENGLE9BQU9HLGlCQUNFQyxnQkFBZ0JOLE9BQU1DLHlCQUNwQk0sZ0JBQWdCUCxPQUFNQyxzQkFBc0I7UUFDekQsQ0FBQztJQUNILEVBQUUsT0FBT08sT0FBTztJQUNkLEdBQUc7SUFDTDtJQUVBLE9BQU9OO0FBQ1Q7QUFFTyxTQUFTeEIsU0FBU3dCLElBQUksRUFBRUQscUJBQXFCLEVBQUU7SUFDcEQsSUFBTUQsUUFBT0UsS0FBS08sT0FBTyxJQUNuQkMsVUFBVVIsS0FBS1MsVUFBVSxJQUN6QlAsZUFBZVQsaUJBQWlCTSx1QkFBdUJELFFBQ3ZEWSwrQkFBK0JkLDZCQUE2Qk07SUFFbEVTLGVBQU0sQ0FBQ0MsSUFBSSxDQUFDRjtJQUVackIsVUFBVWEsY0FBY007QUFDMUI7QUFFTyxTQUFTL0IsVUFBVW9DLEtBQUssRUFBRWQscUJBQXFCLEVBQUU7SUFDdEQsSUFBSWUsUUFBUSxJQUFJO0lBRWhCLElBQUk7UUFDRixJQUFNYix1QkFBdUJOLDZCQUE2Qkc7UUFFMUQsSUFBSUcseUJBQXlCLElBQUksRUFBRTtZQUNqQyxJQUFNQyxlQUFlVCxpQkFBaUJNLHVCQUF1QkUsdUJBQ3ZERSxpQkFBaUJYLGlCQUFpQlU7WUFFeENZLFFBQVFYLGlCQUNFWSxpQkFBaUJGLE9BQU9kLHlCQUN0QmlCLGlCQUFpQkgsT0FBT2Qsc0JBQXNCO1FBQzVELENBQUM7SUFDSCxFQUFFLE9BQU9PLE9BQU87SUFDZCxHQUFHO0lBQ0w7SUFFQSxPQUFPUTtBQUNUO0FBRU8sU0FBU3BDLFVBQVVvQyxLQUFLLEVBQUVmLHFCQUFxQixFQUFFO0lBQ3REZSxNQUFNRyxXQUFXLENBQUMsU0FBQ2pCLE1BQVM7UUFDMUJ4QixTQUFTd0IsTUFBTUQ7SUFDakI7QUFDRjtBQUVPLFNBQVNwQixZQUFZc0Isb0JBQW9CLEVBQUVGLHFCQUFxQixFQUFFbUIsdUJBQXVCLEVBQUU7SUFDaEcsSUFBTUMsVUFBVUMsZ0JBQU8sQ0FBQ0MsV0FBVyxJQUM3QkMsd0JBQXdCckIsc0JBQXVCLEdBQUc7SUFFeERzQixpQ0FBaUNKLFNBQVNHLHVCQUF1QnZCLHVCQUF1Qm1CO0lBRXhGLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdkMsWUFBWTRDLGVBQWUsRUFBRXpCLHFCQUFxQixFQUFFO0lBQ2xFLElBQUkwQixVQUFVLElBQUk7SUFFbEIsSUFBSTtRQUNGLElBQU1DLE9BQU9GLGlCQUNQdEIsZUFBZVQsaUJBQWlCTSx1QkFBdUIyQixPQUN2REMsWUFBWXJDLFlBQVlZO1FBRTlCLElBQUl5QixXQUFXO1lBQ2IsSUFBSUMsTUFDQVQ7WUFFSixJQUFNWCxVQUFVckIsU0FBU2U7WUFFekIwQixPQUFPQyxLQUFLQyxLQUFLLENBQUN0QjtZQUVmVyxVQUFZUyxLQUFaVDtZQUVIUyxPQUFRVCxTQUFVLEdBQUc7WUFFckJBLFVBQVVDLGdCQUFPLENBQUNXLFFBQVEsQ0FBQ0g7WUFFM0JILFVBQVVPLGdCQUFPLENBQUNDLGtCQUFrQixDQUFDUCxNQUFNUDtRQUM3QyxDQUFDO0lBQ0gsRUFBRSxPQUFPYixPQUFPO0lBQ2QsR0FBRztJQUNMO0lBRUEsT0FBT21CO0FBQ1Q7QUFFTyxTQUFTNUMsWUFBWW9CLG9CQUFvQixFQUFFRixxQkFBcUIsRUFBRW1CLHVCQUF1QixFQUFFO0lBQ2hHLElBQUlnQixVQUFVLElBQUk7SUFFbEIsSUFBSTtRQUNGLElBQU1SLE9BQU96QixzQkFDUGtCLFVBQVV4QyxZQUFZc0Isc0JBQXNCRix1QkFBdUJtQjtRQUV6RWdCLFVBQVVDLGdCQUFPLENBQUNGLGtCQUFrQixDQUFDUCxNQUFNUDtJQUM3QyxFQUFFLE9BQU9iLE9BQU87SUFDZCxHQUFHO0lBQ0w7SUFFQSxPQUFPNEI7QUFDVDtBQUVPLFNBQVNwRCxhQUFhaUIscUJBQXFCLEVBQUU7SUFDbEQsSUFBTXFDLFdBQVdDLGlCQUFRLENBQUNoQixXQUFXLElBQy9CaUIsbUJBQW1CQywwQ0FBMEN4QztJQUVuRXVDLGlCQUFpQkUsT0FBTyxDQUFDLFNBQUNoQixpQkFBb0I7UUFDNUMsSUFBTUMsVUFBVTdDLFlBQVk0QyxpQkFBaUJ6QjtRQUU3QyxJQUFJMEIsWUFBWSxJQUFJLEVBQUU7WUFDcEJXLFNBQVNLLFVBQVUsQ0FBQ2hCO1FBQ3RCLENBQUM7SUFDSDtJQUVBLE9BQU9XO0FBQ1Q7QUFFTyxTQUFTckQsYUFBYWdCLHFCQUFxQixFQUFFbUIsdUJBQXVCLEVBQUU7SUFDM0UsSUFBTXdCLFdBQVdDLGlCQUFRLENBQUN0QixXQUFXLElBQy9CdUIsd0JBQXdCQywrQ0FBK0M5QztJQUU3RTZDLHNCQUFzQkosT0FBTyxDQUFDLFNBQUN2QyxzQkFBeUI7UUFDdEQsSUFBTWlDLFVBQVVyRCxZQUFZb0Isc0JBQXNCRix1QkFBdUJtQjtRQUV6RSxJQUFJZ0IsWUFBWSxJQUFJLEVBQUU7WUFDcEJRLFNBQVNJLFVBQVUsQ0FBQ1o7UUFDdEIsQ0FBQztJQUNIO0lBRUEsT0FBT1E7QUFDVDtBQUVPLFNBQVMxRCxjQUFjYyxLQUFJLEVBQUVDLHFCQUFxQixFQUFFO0lBQ3pELElBQUlnRCxZQUFZLElBQUk7SUFFcEIsSUFBSTtRQUNGLElBQU03QyxlQUFlVCxpQkFBaUJNLHVCQUF1QkQsUUFDdkRLLGlCQUFpQlgsaUJBQWlCVTtRQUV4QyxJQUFJQyxnQkFBZ0I7WUFDbEI0QyxZQUFZQyxrQkFBUyxDQUFDQyxRQUFRLENBQUNuRDtRQUNqQyxDQUFDO0lBQ0gsRUFBRSxPQUFPUSxPQUFPO0lBQ2QsR0FBRztJQUNMO0lBRUEsT0FBT3lDO0FBQ1Q7SUFFQSxXQUFlO0lBQ2J4RSxVQUFBQTtJQUNBQyxVQUFBQTtJQUNBQyxXQUFBQTtJQUNBQyxXQUFBQTtJQUNBQyxhQUFBQTtJQUNBQyxhQUFBQTtJQUNBQyxhQUFBQTtJQUNBQyxjQUFBQTtJQUNBQyxjQUFBQTtJQUNBQyxlQUFBQTtBQUNGO0FBRUEsU0FBU29CLGdCQUFnQk4sS0FBSSxFQUFFQyxxQkFBcUIsRUFBRTtJQUNwRCxJQUFJQyxPQUFPLElBQUk7SUFFZixJQUFNRSxlQUFlVCxpQkFBaUJNLHVCQUF1QkQsUUFDdkQ2QixZQUFZckMsWUFBWVk7SUFFOUIsSUFBSXlCLFdBQVc7UUFDYixJQUFJbkIsVUFBVXJCLFNBQVNlO1FBRXZCTSxVQUFVMEMsSUFBQUEsdUNBQThCLEVBQUMxQyxVQUFXLEdBQUc7UUFFdkRSLE9BQU9tRCxhQUFJLENBQUNDLGtCQUFrQixDQUFDdEQsT0FBTVU7SUFDdkMsQ0FBQztJQUVELE9BQU9SO0FBQ1Q7QUFFQSxTQUFTSyxnQkFBZ0JQLEtBQUksRUFBRUMscUJBQXFCLEVBQUU7SUFDcEQsSUFBTUUsdUJBQXVCTiw2QkFBNkJHLFFBQ3BEMEIsa0JBQWtCdkIsc0JBQ2xCd0IsVUFBVTdDLFlBQVk0QyxpQkFBaUJ6Qix3QkFDdkNDLE9BQU95QixRQUFRNEIsT0FBTyxDQUFDdkQ7SUFFN0IsT0FBT0U7QUFDVDtBQUVBLFNBQVNlLGlCQUFpQkYsS0FBSyxFQUFFZCxxQkFBcUIsRUFBRTtJQUN0RCxJQUFNZSxRQUFRd0MsY0FBSyxDQUFDakMsV0FBVztJQUUvQlIsTUFBTTJCLE9BQU8sQ0FBQyxTQUFDMUMsT0FBUztRQUN0QixJQUFNRSxPQUFPSSxnQkFBZ0JOLE9BQU1DO1FBRW5DZSxNQUFNeUMsT0FBTyxDQUFDdkQ7SUFDaEI7SUFFQSxPQUFPYztBQUNUO0FBRUEsU0FBU0UsaUJBQWlCSCxLQUFLLEVBQUVkLHFCQUFxQixFQUFFO0lBQ3RELElBQU1lLFFBQVF3QyxjQUFLLENBQUNqQyxXQUFXLElBQ3pCbUMsY0FBYzNDLE1BQU00QyxNQUFNO0lBRWhDLElBQUlELGNBQWMsR0FBRztRQUNuQixJQUFNRSxZQUFZekUsTUFBTTRCLFFBQ2xCZixRQUFPNEQsV0FDUHpELHVCQUF1Qk4sNkJBQTZCRyxRQUNwRDBCLGtCQUFrQnZCLHNCQUNsQndCLFVBQVU3QyxZQUFZNEMsaUJBQWlCekI7UUFFN0NjLE1BQU0yQixPQUFPLENBQUMsU0FBQzFDLE9BQVM7WUFDdEIsSUFBTUUsT0FBT3lCLFFBQVE0QixPQUFPLENBQUN2RDtZQUU3QmdCLE1BQU15QyxPQUFPLENBQUN2RDtRQUNoQjtJQUNGLENBQUM7SUFFRCxPQUFPYztBQUNUO0FBRUEsU0FBU1MsaUNBQWlDSixPQUFPLEVBQUVHLHFCQUFxQixFQUFFdkIscUJBQXFCLEVBQUVtQix1QkFBdUIsRUFBRTtJQUN4SCxJQUFNeUMsd0JBQXdCbEUsaUJBQWlCTSx1QkFBdUJ1Qix3QkFDaEVzQyxnQkFBZ0JyRSxjQUFjb0U7SUFFcENDLGNBQWNwQixPQUFPLENBQUMsU0FBQ3FCLGNBQWlCO1FBQ3RDLElBQU1DLHlCQUF5QkMsSUFBQUEsc0JBQWdCLEVBQUNGLGVBQzFDRyxzQ0FBc0MsQ0FBQzlDO1FBRTdDLElBQUksQ0FBQzRDLHdCQUF3QjtZQUMzQixJQUFNaEUsUUFBT0wsaUJBQWlCNkIsdUJBQXVCdUMsZUFDL0NkLFlBQVkvRCxjQUFjYyxPQUFNQztZQUV0QyxJQUFJZ0QsY0FBYyxJQUFJLEVBQUU7Z0JBQ3RCLElBQU1rQixnQkFBZ0JuRSxPQUFNLEdBQUc7Z0JBRS9CLElBQUlrRSxxQ0FBcUM7b0JBQ3ZDN0MsUUFBUStDLFlBQVksQ0FBQ25CO2dCQUN2QixDQUFDO2dCQUVEeEIsaUNBQWlDSixTQUFTOEMsZUFBZWxFLHVCQUF1Qm1CLDBCQUEwQixHQUFHO1lBQy9HLE9BQU87Z0JBQ0wsSUFBTWxCLE9BQU96QixTQUFTdUIsT0FBTUM7Z0JBRTVCLElBQUlDLFNBQVMsSUFBSSxFQUFFO29CQUNqQixJQUFNbUUsV0FBV25FLEtBQUtPLE9BQU8sSUFDdkI2RCw2QkFBNkJDLElBQUFBLHNDQUE0QixFQUFDRixXQUMxREcscUJBQXFCRiw0QkFBNkIsR0FBRztvQkFFM0QsSUFBSUUsc0JBQXNCTixxQ0FBcUM7d0JBQzdEN0MsUUFBUW9DLE9BQU8sQ0FBQ3ZEO29CQUNsQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNIO0FBQ0Y7QUFFQSxTQUFTdUMsMENBQTBDeEMscUJBQXFCLEVBQUU7SUFDeEUsSUFBSXVDO0lBRUosSUFBTXNCLGdCQUFnQnJFLGNBQWNRO0lBRXBDdUMsbUJBQW1Cc0IsY0FBY1csTUFBTSxDQUFDLFNBQUNqQyxrQkFBa0J1QixjQUFpQjtRQUMxRSxJQUFNVyx1QkFBdUIvRSxpQkFBaUJNLHVCQUF1QjhELGVBQy9EQyx5QkFBeUJDLElBQUFBLHNCQUFnQixFQUFDRjtRQUVoRCxJQUFJLENBQUNDLHdCQUF3QjtZQUMzQixJQUFNVyxlQUFlbkYsWUFBWWtGO1lBRWpDLElBQUlDLGNBQWM7Z0JBQ2hCLElBQU1qRCxrQkFBa0JxQyxjQUFlLEdBQUc7Z0JBRTFDdkIsaUJBQWlCb0MsSUFBSSxDQUFDbEQ7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPYztJQUNULEdBQUcsRUFBRTtJQUVMLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTTywrQ0FBK0M5QyxxQkFBcUIsRUFBRTtJQUM3RSxJQUFJNkM7SUFFSixJQUFNZ0IsZ0JBQWdCckUsY0FBY1E7SUFFcEM2Qyx3QkFBd0JnQixjQUFjVyxNQUFNLENBQUMsU0FBQzNCLHVCQUF1QmlCLGNBQWlCO1FBQ3BGLElBQU1XLHVCQUF1Qi9FLGlCQUFpQk0sdUJBQXVCOEQsZUFDL0RDLHlCQUF5QkMsSUFBQUEsc0JBQWdCLEVBQUNGO1FBRWhELElBQUksQ0FBQ0Msd0JBQXdCO1lBQzNCLElBQU1hLG9CQUFvQm5GLGlCQUFpQmdGO1lBRTNDLElBQUlHLG1CQUFtQjtnQkFDckIsSUFBTTFFLHVCQUF1QjRELGNBQWUsR0FBRztnQkFFL0NqQixzQkFBc0I4QixJQUFJLENBQUN6RTtZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8yQztJQUNULEdBQUcsRUFBRTtJQUVMLE9BQU9BO0FBQ1QifQ==
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import mkdirp from "mkdirp";
|
|
4
4
|
|
|
5
|
-
import { pathUtilities, fileSystemUtilities } from "necessary";
|
|
5
|
+
import { arrayUtilities, pathUtilities, fileSystemUtilities } from "necessary";
|
|
6
6
|
|
|
7
7
|
import File from "../file";
|
|
8
8
|
import Files from "../files";
|
|
@@ -17,22 +17,23 @@ import { isNameHiddenName } from "../utilities/name";
|
|
|
17
17
|
import { isFilePathRecognisedFilePath } from "../utilities/filePath";
|
|
18
18
|
import { convertContentTabsToWhitespace } from "../utilities/content";
|
|
19
19
|
|
|
20
|
-
const {
|
|
21
|
-
{ readFile, writeFile, isEntryFile, readDirectory, isEntryDirectory } = fileSystemUtilities
|
|
20
|
+
const { first } = arrayUtilities,
|
|
21
|
+
{ readFile, writeFile, isEntryFile, readDirectory, isEntryDirectory } = fileSystemUtilities,
|
|
22
|
+
{ concatenatePaths, topmostDirectoryNameFromPath, topmostDirectoryPathFromPath, pathWithoutTopmostDirectoryNameFromPath } = pathUtilities;
|
|
22
23
|
|
|
23
24
|
export function loadFile(path, projectsDirectoryPath) {
|
|
24
25
|
let file = null;
|
|
25
26
|
|
|
26
27
|
try {
|
|
27
|
-
const
|
|
28
|
-
entryFile = isEntryFile(absolutePath);
|
|
29
|
-
|
|
30
|
-
if (entryFile) {
|
|
31
|
-
let content = readFile(absolutePath);
|
|
28
|
+
const topmostDirectoryName = topmostDirectoryNameFromPath(path);
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
if (topmostDirectoryName !== null) {
|
|
31
|
+
const absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName),
|
|
32
|
+
entryDirectory = isEntryDirectory(absolutePath);
|
|
34
33
|
|
|
35
|
-
file =
|
|
34
|
+
file = entryDirectory ?
|
|
35
|
+
fileFromProject(path, projectsDirectoryPath) :
|
|
36
|
+
fileFromRelease(path, projectsDirectoryPath);
|
|
36
37
|
}
|
|
37
38
|
} catch (error) {
|
|
38
39
|
///
|
|
@@ -53,13 +54,22 @@ export function saveFile(file, projectsDirectoryPath) {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
export function loadFiles(paths, projectsDirectoryPath) {
|
|
56
|
-
|
|
57
|
+
let files = null;
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
const
|
|
59
|
+
try {
|
|
60
|
+
const topmostDirectoryName = topmostDirectoryNameFromPath(path);
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
if (topmostDirectoryName !== null) {
|
|
63
|
+
const absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName),
|
|
64
|
+
entryDirectory = isEntryDirectory(absolutePath);
|
|
65
|
+
|
|
66
|
+
files = entryDirectory ?
|
|
67
|
+
filesFromProject(paths, projectsDirectoryPath) :
|
|
68
|
+
filesFromRelease(paths, projectsDirectoryPath);
|
|
69
|
+
}
|
|
70
|
+
} catch (error) {
|
|
71
|
+
///
|
|
72
|
+
}
|
|
63
73
|
|
|
64
74
|
return files;
|
|
65
75
|
}
|
|
@@ -185,6 +195,65 @@ export default {
|
|
|
185
195
|
loadDirectory
|
|
186
196
|
};
|
|
187
197
|
|
|
198
|
+
function fileFromProject(path, projectsDirectoryPath) {
|
|
199
|
+
let file = null;
|
|
200
|
+
|
|
201
|
+
const absolutePath = concatenatePaths(projectsDirectoryPath, path),
|
|
202
|
+
entryFile = isEntryFile(absolutePath);
|
|
203
|
+
|
|
204
|
+
if (entryFile) {
|
|
205
|
+
let content = readFile(absolutePath);
|
|
206
|
+
|
|
207
|
+
content = convertContentTabsToWhitespace(content); ///
|
|
208
|
+
|
|
209
|
+
file = File.fromPathAndContent(path, content);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return file;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function fileFromRelease(path, projectsDirectoryPath) {
|
|
216
|
+
const topmostDirectoryName = topmostDirectoryNameFromPath(path),
|
|
217
|
+
topmostFileName = topmostDirectoryName, ///
|
|
218
|
+
release = loadRelease(topmostFileName, projectsDirectoryPath),
|
|
219
|
+
file = release.getFile(path);
|
|
220
|
+
|
|
221
|
+
return file;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function filesFromProject(paths, projectsDirectoryPath) {
|
|
225
|
+
const files = Files.fromNothing();
|
|
226
|
+
|
|
227
|
+
paths.forEach((path) => {
|
|
228
|
+
const file = fileFromProject(path, projectsDirectoryPath);
|
|
229
|
+
|
|
230
|
+
files.addFile(file);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
return files;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function filesFromRelease(paths, projectsDirectoryPath) {
|
|
237
|
+
const files = Files.fromNothing(),
|
|
238
|
+
pathsLength = paths.length;
|
|
239
|
+
|
|
240
|
+
if (pathsLength > 0) {
|
|
241
|
+
const firstPath = first(paths),
|
|
242
|
+
path = firstPath, ///
|
|
243
|
+
topmostDirectoryName = topmostDirectoryNameFromPath(path),
|
|
244
|
+
topmostFileName = topmostDirectoryName, ///
|
|
245
|
+
release = loadRelease(topmostFileName, projectsDirectoryPath);
|
|
246
|
+
|
|
247
|
+
paths.forEach((path) => {
|
|
248
|
+
const file = release.getFile(path);
|
|
249
|
+
|
|
250
|
+
files.addFile(file);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return files;
|
|
255
|
+
}
|
|
256
|
+
|
|
188
257
|
function entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles) {
|
|
189
258
|
const absoluteDirectoryPath = concatenatePaths(projectsDirectoryPath, relativeDirectoryPath),
|
|
190
259
|
subEntryNames = readDirectory(absoluteDirectoryPath);
|