propagate-cli 1.10.0 → 1.10.3
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/.swcrc +5 -0
- package/lib/abbreviations.js +22 -0
- package/lib/action/addDirectory.js +41 -0
- package/lib/action/addForcedDependencyRelation.js +51 -0
- package/lib/action/addIgnoredDependency.js +40 -0
- package/lib/action/help.js +15 -0
- package/lib/action/initialise.js +23 -0
- package/lib/action/listDirectories.js +57 -0
- package/lib/action/listForcedDependencyRelations.js +30 -0
- package/lib/action/listIgnoredDependencies.js +56 -0
- package/lib/action/propagate.js +57 -0
- package/lib/action/removeDirectory.js +43 -0
- package/lib/action/removeForcedDependencyRelation.js +43 -0
- package/lib/action/removeIgnoredDependency.js +43 -0
- package/lib/action/setShellCommands.js +43 -0
- package/lib/action/version.js +19 -0
- package/lib/changeDirectory.js +33 -0
- package/lib/commands.js +70 -0
- package/lib/configuration/version_1_10.js +48 -0
- package/lib/configuration/version_1_3.js +21 -0
- package/lib/configuration/version_1_7.js +21 -0
- package/lib/configuration/version_1_9.js +27 -0
- package/lib/configuration.js +191 -0
- package/lib/constants.js +46 -0
- package/lib/defaults.js +54 -0
- package/lib/descriptions.js +82 -0
- package/lib/diff/map.js +114 -0
- package/lib/diff/semver.js +88 -0
- package/lib/diff/version.js +97 -0
- package/lib/diff.js +210 -0
- package/lib/main.js +119 -0
- package/lib/messages.js +190 -0
- package/lib/operation/checkDevDependencies.js +34 -0
- package/lib/operation/createDiffs.js +78 -0
- package/lib/operation/createReleaseGraph.js +43 -0
- package/lib/operation/createReleaseMap.js +26 -0
- package/lib/operation/createSubDirectoryMap.js +65 -0
- package/lib/operation/createSubDirectoryPath.js +30 -0
- package/lib/operation/dryRun.js +22 -0
- package/lib/operation/prompt/addDirectory.js +37 -0
- package/lib/operation/prompt/addForcedDependency.js +37 -0
- package/lib/operation/prompt/addForcedDependent.js +37 -0
- package/lib/operation/prompt/addIgnoredDependency.js +37 -0
- package/lib/operation/prompt/build.js +52 -0
- package/lib/operation/prompt/git.js +52 -0
- package/lib/operation/prompt/install.js +52 -0
- package/lib/operation/prompt/publish.js +61 -0
- package/lib/operation/prompt/removeDirectory.js +39 -0
- package/lib/operation/prompt/removeForcedDependencyRelation.js +39 -0
- package/lib/operation/prompt/removeIgnoredDependency.js +39 -0
- package/lib/operation/prompt/save.js +57 -0
- package/lib/operation/prompt/setBuildShellCommands.js +33 -0
- package/lib/operation/prompt/setGitShellCommands.js +33 -0
- package/lib/operation/prompt/setInstallShellCommands.js +33 -0
- package/lib/operation/prompt/setPublishShellCommands.js +33 -0
- package/lib/operation/propagateRelease.js +73 -0
- package/lib/operation/retrieveRelease.js +31 -0
- package/lib/operation/saveAndApplyDiff.js +49 -0
- package/lib/operation/saveAndApplyDiffs.js +27 -0
- package/lib/options.js +34 -0
- package/lib/prepare.js +48 -0
- package/lib/release.js +227 -0
- package/lib/releaseGraph.js +170 -0
- package/lib/releaseMap.js +120 -0
- package/lib/utilities/console.js +81 -0
- package/lib/utilities/dependency.js +25 -0
- package/lib/utilities/diffs.js +28 -0
- package/lib/utilities/operation.js +53 -0
- package/lib/utilities/packageJSON.js +50 -0
- package/lib/utilities/path.js +22 -0
- package/lib/utilities/prompt.js +15 -0
- package/lib/utilities/propagate.js +60 -0
- package/lib/utilities/shell.js +63 -0
- package/lib/utilities/validate.js +68 -0
- package/lib/version.js +140 -0
- package/lib/versions.js +34 -0
- package/package.json +19 -4
- package/propagate.js +3 -3
- package/src/abbreviations.js +19 -0
- package/{bin → src}/action/addDirectory.js +5 -7
- package/{bin → src}/action/addForcedDependencyRelation.js +8 -10
- package/{bin → src}/action/addIgnoredDependency.js +7 -9
- package/{bin → src}/action/help.js +1 -3
- package/{bin → src}/action/initialise.js +3 -5
- package/{bin → src}/action/listDirectories.js +4 -6
- package/{bin → src}/action/listForcedDependencyRelations.js +4 -6
- package/{bin → src}/action/listIgnoredDependencies.js +4 -6
- package/src/action/propagate.js +48 -0
- package/{bin → src}/action/removeDirectory.js +6 -8
- package/{bin → src}/action/removeForcedDependencyRelation.js +6 -8
- package/{bin → src}/action/removeIgnoredDependency.js +6 -8
- package/src/action/setShellCommands.js +37 -0
- package/src/action/version.js +13 -0
- package/{bin → src}/changeDirectory.js +4 -6
- package/src/commands.js +16 -0
- package/{bin → src}/configuration/version_1_10.js +4 -9
- package/{bin → src}/configuration/version_1_3.js +2 -6
- package/{bin → src}/configuration/version_1_7.js +2 -6
- package/{bin → src}/configuration/version_1_9.js +3 -7
- package/{bin → src}/configuration.js +23 -40
- package/src/constants.js +10 -0
- package/src/defaults.js +12 -0
- package/src/descriptions.js +19 -0
- package/{bin → src}/diff/map.js +4 -6
- package/{bin → src}/diff/semver.js +1 -3
- package/{bin → src}/diff/version.js +2 -4
- package/{bin → src}/diff.js +5 -7
- package/{bin → src}/main.js +20 -22
- package/src/messages.js +46 -0
- package/{bin → src}/operation/checkDevDependencies.js +1 -3
- package/{bin → src}/operation/createDiffs.js +2 -4
- package/{bin → src}/operation/createReleaseGraph.js +5 -7
- package/{bin → src}/operation/createReleaseMap.js +3 -5
- package/{bin → src}/operation/createSubDirectoryMap.js +5 -7
- package/{bin → src}/operation/createSubDirectoryPath.js +5 -7
- package/{bin → src}/operation/dryRun.js +1 -3
- package/{bin → src}/operation/prompt/addDirectory.js +5 -7
- package/{bin → src}/operation/prompt/addForcedDependency.js +5 -7
- package/{bin → src}/operation/prompt/addForcedDependent.js +5 -7
- package/{bin → src}/operation/prompt/addIgnoredDependency.js +5 -7
- package/{bin → src}/operation/prompt/build.js +8 -10
- package/{bin → src}/operation/prompt/git.js +8 -10
- package/{bin → src}/operation/prompt/install.js +8 -10
- package/{bin → src}/operation/prompt/publish.js +9 -11
- package/{bin → src}/operation/prompt/removeDirectory.js +5 -7
- package/{bin → src}/operation/prompt/removeForcedDependencyRelation.js +5 -7
- package/{bin → src}/operation/prompt/removeIgnoredDependency.js +5 -7
- package/{bin → src}/operation/prompt/save.js +9 -11
- package/{bin → src}/operation/prompt/setBuildShellCommands.js +6 -8
- package/{bin → src}/operation/prompt/setGitShellCommands.js +6 -8
- package/{bin → src}/operation/prompt/setInstallShellCommands.js +6 -8
- package/{bin → src}/operation/prompt/setPublishShellCommands.js +6 -8
- package/{bin → src}/operation/propagateRelease.js +3 -5
- package/{bin → src}/operation/retrieveRelease.js +2 -4
- package/{bin → src}/operation/saveAndApplyDiff.js +8 -10
- package/src/operation/saveAndApplyDiffs.js +17 -0
- package/src/options.js +7 -0
- package/{bin → src}/prepare.js +17 -19
- package/{bin → src}/release.js +5 -7
- package/{bin → src}/releaseGraph.js +2 -4
- package/{bin → src}/releaseMap.js +2 -4
- package/{bin → src}/utilities/console.js +5 -11
- package/{bin → src}/utilities/dependency.js +1 -5
- package/{bin → src}/utilities/diffs.js +2 -7
- package/{bin → src}/utilities/operation.js +3 -8
- package/{bin → src}/utilities/packageJSON.js +4 -9
- package/{bin → src}/utilities/path.js +2 -6
- package/src/utilities/prompt.js +3 -0
- package/{bin → src}/utilities/propagate.js +3 -8
- package/{bin → src}/utilities/shell.js +7 -11
- package/src/utilities/validate.js +19 -0
- package/{bin → src}/version.js +2 -4
- package/src/versions.js +7 -0
- package/bin/abbreviations.js +0 -11
- package/bin/action/propagate.js +0 -50
- package/bin/action/setShellCommands.js +0 -39
- package/bin/action/version.js +0 -15
- package/bin/commands.js +0 -33
- package/bin/constants.js +0 -23
- package/bin/defaults.js +0 -25
- package/bin/descriptions.js +0 -39
- package/bin/messages.js +0 -93
- package/bin/operation/saveAndApplyDiffs.js +0 -19
- package/bin/options.js +0 -15
- package/bin/utilities/prompt.js +0 -7
- package/bin/utilities/validate.js +0 -31
- package/bin/versions.js +0 -15
package/lib/release.js
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Release;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _version = /*#__PURE__*/ _interop_require_default(require("./version"));
|
|
12
|
+
var _shell = require("./utilities/shell");
|
|
13
|
+
var _packageJSON = require("./utilities/packageJSON");
|
|
14
|
+
var _configuration = require("./configuration");
|
|
15
|
+
function _class_call_check(instance, Constructor) {
|
|
16
|
+
if (!(instance instanceof Constructor)) {
|
|
17
|
+
throw new TypeError("Cannot call a class as a function");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function _defineProperties(target, props) {
|
|
21
|
+
for(var i = 0; i < props.length; i++){
|
|
22
|
+
var descriptor = props[i];
|
|
23
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
24
|
+
descriptor.configurable = true;
|
|
25
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
26
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
30
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
31
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
32
|
+
return Constructor;
|
|
33
|
+
}
|
|
34
|
+
function _interop_require_default(obj) {
|
|
35
|
+
return obj && obj.__esModule ? obj : {
|
|
36
|
+
default: obj
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
var Release = /*#__PURE__*/ function() {
|
|
40
|
+
function Release(name, version, dependencyMap, devDependencyMap, subDirectoryPath) {
|
|
41
|
+
_class_call_check(this, Release);
|
|
42
|
+
this.name = name;
|
|
43
|
+
this.version = version;
|
|
44
|
+
this.dependencyMap = dependencyMap;
|
|
45
|
+
this.devDependencyMap = devDependencyMap;
|
|
46
|
+
this.subDirectoryPath = subDirectoryPath;
|
|
47
|
+
}
|
|
48
|
+
_create_class(Release, [
|
|
49
|
+
{
|
|
50
|
+
key: "getName",
|
|
51
|
+
value: function getName() {
|
|
52
|
+
return this.name;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: "getVersion",
|
|
57
|
+
value: function getVersion() {
|
|
58
|
+
return this.version;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: "getDependencyMap",
|
|
63
|
+
value: function getDependencyMap() {
|
|
64
|
+
return this.dependencyMap;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: "getDevDependencyMap",
|
|
69
|
+
value: function getDevDependencyMap() {
|
|
70
|
+
return this.devDependencyMap;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: "getSubDirectoryPath",
|
|
75
|
+
value: function getSubDirectoryPath() {
|
|
76
|
+
return this.subDirectoryPath;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: "isPublishable",
|
|
81
|
+
value: function isPublishable() {
|
|
82
|
+
var publishable = this.name !== null && this.version !== null;
|
|
83
|
+
return publishable;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
key: "getVersionString",
|
|
88
|
+
value: function getVersionString() {
|
|
89
|
+
var versionString = this.version.asString();
|
|
90
|
+
return versionString; ///
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: "getDependencyNames",
|
|
95
|
+
value: function getDependencyNames() {
|
|
96
|
+
var dependencyNames = Object.keys(this.dependencyMap);
|
|
97
|
+
return dependencyNames;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: "getDevDependencyNames",
|
|
102
|
+
value: function getDevDependencyNames() {
|
|
103
|
+
var devDependencyNames = Object.keys(this.devDependencyMap);
|
|
104
|
+
return devDependencyNames;
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
key: "git",
|
|
109
|
+
value: function git(quietly, callback) {
|
|
110
|
+
var shellCommands = (0, _configuration.retrieveShellCommands)();
|
|
111
|
+
var git = shellCommands.git, gitShellCommands = git;
|
|
112
|
+
shellCommands = gitShellCommands; ///
|
|
113
|
+
this.executeShellCommands(shellCommands, quietly, callback);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: "install",
|
|
118
|
+
value: function install(quietly, callback) {
|
|
119
|
+
var shellCommands = (0, _configuration.retrieveShellCommands)();
|
|
120
|
+
var install = shellCommands.install, installShellCommands = install;
|
|
121
|
+
shellCommands = installShellCommands; ///
|
|
122
|
+
this.executeShellCommands(shellCommands, quietly, callback);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
key: "build",
|
|
127
|
+
value: function build(quietly, callback) {
|
|
128
|
+
var ignoredBuilds = (0, _configuration.retrieveIgnoredBuilds)(), names = ignoredBuilds, namesIncludesName = names.includes(this.name), buildIgnored = namesIncludesName; ///
|
|
129
|
+
if (buildIgnored) {
|
|
130
|
+
console.log("Ignoring the '".concat(this.name, "' build."));
|
|
131
|
+
var success = true;
|
|
132
|
+
callback(success);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
var shellCommands = (0, _configuration.retrieveShellCommands)();
|
|
136
|
+
var build = shellCommands.build, buildShellCommands = build;
|
|
137
|
+
shellCommands = buildShellCommands; ///
|
|
138
|
+
this.executeShellCommands(shellCommands, quietly, callback);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
key: "publish",
|
|
143
|
+
value: function publish(quietly, callback) {
|
|
144
|
+
var ignoredPublishes = (0, _configuration.retrieveIgnoredPublishes)(), names = ignoredPublishes, namesIncludesName = names.includes(this.name), publishIgnored = namesIncludesName; ///
|
|
145
|
+
if (publishIgnored) {
|
|
146
|
+
console.log("Ignoring the '".concat(this.name, "' publish."));
|
|
147
|
+
var success = true;
|
|
148
|
+
callback(success);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
var shellCommands = (0, _configuration.retrieveShellCommands)();
|
|
152
|
+
var publish = shellCommands.publish, publishShellCommands = publish;
|
|
153
|
+
shellCommands = publishShellCommands; ///
|
|
154
|
+
this.executeShellCommands(shellCommands, quietly, callback);
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
key: "bumpPatchNumber",
|
|
159
|
+
value: function bumpPatchNumber() {
|
|
160
|
+
this.version.bumpPatchNumber();
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
key: "executeShellCommands",
|
|
165
|
+
value: function executeShellCommands(shellCommands, quietly, callback) {
|
|
166
|
+
var currentWorkingDirectoryPath = process.cwd();
|
|
167
|
+
process.chdir(this.subDirectoryPath);
|
|
168
|
+
(0, _shell.execute)(shellCommands, quietly, function(success) {
|
|
169
|
+
process.chdir(currentWorkingDirectoryPath);
|
|
170
|
+
callback(success);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
key: "updateDependencyVersion",
|
|
176
|
+
value: function updateDependencyVersion(name, versionString) {
|
|
177
|
+
var success = updateSemver(name, versionString, this.dependencyMap);
|
|
178
|
+
if (!success) {
|
|
179
|
+
console.log("Either the version of the '".concat(this.subDirectoryPath, "' release's '").concat(name, "' dependency is greater than or equal to the propagated '").concat(versionString, "' version or it cannot be parsed."));
|
|
180
|
+
}
|
|
181
|
+
return success;
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
key: "updateDevDependencyVersion",
|
|
186
|
+
value: function updateDevDependencyVersion(name, versionString) {
|
|
187
|
+
var success = updateSemver(name, versionString, this.devDependencyMap);
|
|
188
|
+
if (!success) {
|
|
189
|
+
console.log("Either the version of the '".concat(this.subDirectoryPath, "' release's '").concat(name, "' developer dependency is greater than or equal to the propagated '").concat(versionString, "' version or it cannot be parsed."));
|
|
190
|
+
}
|
|
191
|
+
return success;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
], [
|
|
195
|
+
{
|
|
196
|
+
key: "fromSubDirectoryPath",
|
|
197
|
+
value: function fromSubDirectoryPath(subDirectoryPath) {
|
|
198
|
+
var release = null;
|
|
199
|
+
var packageJSON = (0, _packageJSON.readPackageJSONFile)(subDirectoryPath);
|
|
200
|
+
if (packageJSON !== null) {
|
|
201
|
+
var _packageJSON_version = packageJSON.version, version = _packageJSON_version === void 0 ? null : _packageJSON_version;
|
|
202
|
+
var _packageJSON_name = packageJSON.name, name = _packageJSON_name === void 0 ? null : _packageJSON_name, _packageJSON_dependencies = packageJSON.dependencies, dependencies = _packageJSON_dependencies === void 0 ? {} : _packageJSON_dependencies, _packageJSON_devDependencies = packageJSON.devDependencies, devDependencies = _packageJSON_devDependencies === void 0 ? {} : _packageJSON_devDependencies, versionString = version, dependencyMap = dependencies, devDependencyMap = devDependencies; ///
|
|
203
|
+
version = _version.default.fromVersionString(versionString);
|
|
204
|
+
release = new Release(name, version, dependencyMap, devDependencyMap, subDirectoryPath);
|
|
205
|
+
}
|
|
206
|
+
return release;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
]);
|
|
210
|
+
return Release;
|
|
211
|
+
}();
|
|
212
|
+
function updateSemver(name, versionString, map) {
|
|
213
|
+
var success = false;
|
|
214
|
+
var semver = map[name] || null;
|
|
215
|
+
var version = _version.default.fromVersionString(versionString), existingSemver = semver, existingVersion = _version.default.fromString(existingSemver);
|
|
216
|
+
if (existingVersion !== null) {
|
|
217
|
+
var versionGreaterThanExistingVersion = version.isGreaterThan(existingVersion);
|
|
218
|
+
success = versionGreaterThanExistingVersion; ///
|
|
219
|
+
if (success) {
|
|
220
|
+
semver = version.updateSemver(semver);
|
|
221
|
+
map[name] = semver;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return success;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVyc2lvbiBmcm9tIFwiLi92ZXJzaW9uXCI7XG5cbmltcG9ydCB7IGV4ZWN1dGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvc2hlbGxcIjtcbmltcG9ydCB7IHJlYWRQYWNrYWdlSlNPTkZpbGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFja2FnZUpTT05cIjtcbmltcG9ydCB7IHJldHJpZXZlU2hlbGxDb21tYW5kcywgcmV0cmlldmVJZ25vcmVkQnVpbGRzLCByZXRyaWV2ZUlnbm9yZWRQdWJsaXNoZXMgfSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2Uge1xuICBjb25zdHJ1Y3RvcihuYW1lLCB2ZXJzaW9uLCBkZXBlbmRlbmN5TWFwLCBkZXZEZXBlbmRlbmN5TWFwLCBzdWJEaXJlY3RvcnlQYXRoKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuZGVwZW5kZW5jeU1hcCA9IGRlcGVuZGVuY3lNYXA7XG4gICAgdGhpcy5kZXZEZXBlbmRlbmN5TWFwID0gZGV2RGVwZW5kZW5jeU1hcDtcbiAgICB0aGlzLnN1YkRpcmVjdG9yeVBhdGggPSBzdWJEaXJlY3RvcnlQYXRoO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0VmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICB9XG5cbiAgZ2V0RGVwZW5kZW5jeU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmN5TWFwO1xuICB9XG5cbiAgZ2V0RGV2RGVwZW5kZW5jeU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXZEZXBlbmRlbmN5TWFwO1xuICB9XG5cbiAgZ2V0U3ViRGlyZWN0b3J5UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJEaXJlY3RvcnlQYXRoO1xuICB9XG5cbiAgaXNQdWJsaXNoYWJsZSgpIHtcbiAgICBjb25zdCBwdWJsaXNoYWJsZSA9ICh0aGlzLm5hbWUgIT09IG51bGwpICYmICh0aGlzLnZlcnNpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHB1Ymxpc2hhYmxlO1xuICB9XG5cbiAgZ2V0VmVyc2lvblN0cmluZygpIHtcbiAgICBjb25zdCB2ZXJzaW9uU3RyaW5nID0gdGhpcy52ZXJzaW9uLmFzU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gdmVyc2lvblN0cmluZzsgLy8vXG4gIH1cblxuICBnZXREZXBlbmRlbmN5TmFtZXMoKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeU5hbWVzID0gT2JqZWN0LmtleXModGhpcy5kZXBlbmRlbmN5TWFwKTtcblxuICAgIHJldHVybiBkZXBlbmRlbmN5TmFtZXM7XG4gIH1cblxuICBnZXREZXZEZXBlbmRlbmN5TmFtZXMoKSB7XG4gICAgY29uc3QgZGV2RGVwZW5kZW5jeU5hbWVzID0gT2JqZWN0LmtleXModGhpcy5kZXZEZXBlbmRlbmN5TWFwKTtcblxuICAgIHJldHVybiBkZXZEZXBlbmRlbmN5TmFtZXM7XG4gIH1cblxuICBnaXQocXVpZXRseSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc2hlbGxDb21tYW5kcyA9IHJldHJpZXZlU2hlbGxDb21tYW5kcygpO1xuXG4gICAgY29uc3QgeyBnaXQgfSA9IHNoZWxsQ29tbWFuZHMsXG4gICAgICAgICAgZ2l0U2hlbGxDb21tYW5kcyA9IGdpdDtcblxuICAgIHNoZWxsQ29tbWFuZHMgPSBnaXRTaGVsbENvbW1hbmRzOyAvLy9cblxuICAgIHRoaXMuZXhlY3V0ZVNoZWxsQ29tbWFuZHMoc2hlbGxDb21tYW5kcywgcXVpZXRseSwgY2FsbGJhY2spO1xuICB9XG5cbiAgaW5zdGFsbChxdWlldGx5LCBjYWxsYmFjaykge1xuICAgIGxldCBzaGVsbENvbW1hbmRzID0gcmV0cmlldmVTaGVsbENvbW1hbmRzKCk7XG5cbiAgICBjb25zdCB7IGluc3RhbGwgfSA9IHNoZWxsQ29tbWFuZHMsXG4gICAgICAgICAgaW5zdGFsbFNoZWxsQ29tbWFuZHMgPSBpbnN0YWxsO1xuXG4gICAgc2hlbGxDb21tYW5kcyA9IGluc3RhbGxTaGVsbENvbW1hbmRzOyAvLy9cblxuICAgIHRoaXMuZXhlY3V0ZVNoZWxsQ29tbWFuZHMoc2hlbGxDb21tYW5kcywgcXVpZXRseSwgY2FsbGJhY2spO1xuICB9XG5cbiAgYnVpbGQocXVpZXRseSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBpZ25vcmVkQnVpbGRzID0gcmV0cmlldmVJZ25vcmVkQnVpbGRzKCksXG4gICAgICAgICAgbmFtZXMgPSBpZ25vcmVkQnVpbGRzLFxuICAgICAgICAgIG5hbWVzSW5jbHVkZXNOYW1lID0gbmFtZXMuaW5jbHVkZXModGhpcy5uYW1lKSxcbiAgICAgICAgICBidWlsZElnbm9yZWQgPSBuYW1lc0luY2x1ZGVzTmFtZTsgLy8vXG5cbiAgICBpZiAoYnVpbGRJZ25vcmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgdGhlICcke3RoaXMubmFtZX0nIGJ1aWxkLmApO1xuXG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZTtcblxuICAgICAgY2FsbGJhY2soc3VjY2Vzcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc2hlbGxDb21tYW5kcyA9IHJldHJpZXZlU2hlbGxDb21tYW5kcygpO1xuXG4gICAgY29uc3QgeyBidWlsZCB9ID0gc2hlbGxDb21tYW5kcyxcbiAgICAgICAgICBidWlsZFNoZWxsQ29tbWFuZHMgPSBidWlsZDtcblxuICAgIHNoZWxsQ29tbWFuZHMgPSBidWlsZFNoZWxsQ29tbWFuZHM7IC8vL1xuXG4gICAgdGhpcy5leGVjdXRlU2hlbGxDb21tYW5kcyhzaGVsbENvbW1hbmRzLCBxdWlldGx5LCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaXNoKHF1aWV0bHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaWdub3JlZFB1Ymxpc2hlcyA9IHJldHJpZXZlSWdub3JlZFB1Ymxpc2hlcygpLFxuICAgICAgICAgIG5hbWVzID0gaWdub3JlZFB1Ymxpc2hlcyxcbiAgICAgICAgICBuYW1lc0luY2x1ZGVzTmFtZSA9IG5hbWVzLmluY2x1ZGVzKHRoaXMubmFtZSksXG4gICAgICAgICAgcHVibGlzaElnbm9yZWQgPSBuYW1lc0luY2x1ZGVzTmFtZTsgLy8vXG5cbiAgICBpZiAocHVibGlzaElnbm9yZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyB0aGUgJyR7dGhpcy5uYW1lfScgcHVibGlzaC5gKTtcblxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNoZWxsQ29tbWFuZHMgPSByZXRyaWV2ZVNoZWxsQ29tbWFuZHMoKTtcblxuICAgIGNvbnN0IHsgcHVibGlzaCB9ID0gc2hlbGxDb21tYW5kcyxcbiAgICAgICAgICBwdWJsaXNoU2hlbGxDb21tYW5kcyA9IHB1Ymxpc2g7XG5cbiAgICBzaGVsbENvbW1hbmRzID0gcHVibGlzaFNoZWxsQ29tbWFuZHM7IC8vL1xuXG4gICAgdGhpcy5leGVjdXRlU2hlbGxDb21tYW5kcyhzaGVsbENvbW1hbmRzLCBxdWlldGx5LCBjYWxsYmFjayk7XG4gIH1cblxuICBidW1wUGF0Y2hOdW1iZXIoKSB7IHRoaXMudmVyc2lvbi5idW1wUGF0Y2hOdW1iZXIoKTsgfVxuXG4gIGV4ZWN1dGVTaGVsbENvbW1hbmRzKHNoZWxsQ29tbWFuZHMsIHF1aWV0bHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIHByb2Nlc3MuY2hkaXIodGhpcy5zdWJEaXJlY3RvcnlQYXRoKTtcblxuICAgIGV4ZWN1dGUoc2hlbGxDb21tYW5kcywgcXVpZXRseSwgKHN1Y2Nlc3MpID0+IHtcbiAgICAgIHByb2Nlc3MuY2hkaXIoY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoKTtcblxuICAgICAgY2FsbGJhY2soc3VjY2Vzcyk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEZXBlbmRlbmN5VmVyc2lvbihuYW1lLCB2ZXJzaW9uU3RyaW5nKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHVwZGF0ZVNlbXZlcihuYW1lLCB2ZXJzaW9uU3RyaW5nLCB0aGlzLmRlcGVuZGVuY3lNYXApO1xuXG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhgRWl0aGVyIHRoZSB2ZXJzaW9uIG9mIHRoZSAnJHt0aGlzLnN1YkRpcmVjdG9yeVBhdGh9JyByZWxlYXNlJ3MgJyR7bmFtZX0nIGRlcGVuZGVuY3kgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcm9wYWdhdGVkICcke3ZlcnNpb25TdHJpbmd9JyB2ZXJzaW9uIG9yIGl0IGNhbm5vdCBiZSBwYXJzZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICB1cGRhdGVEZXZEZXBlbmRlbmN5VmVyc2lvbihuYW1lLCB2ZXJzaW9uU3RyaW5nKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHVwZGF0ZVNlbXZlcihuYW1lLCB2ZXJzaW9uU3RyaW5nLCB0aGlzLmRldkRlcGVuZGVuY3lNYXApO1xuXG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhgRWl0aGVyIHRoZSB2ZXJzaW9uIG9mIHRoZSAnJHt0aGlzLnN1YkRpcmVjdG9yeVBhdGh9JyByZWxlYXNlJ3MgJyR7bmFtZX0nIGRldmVsb3BlciBkZXBlbmRlbmN5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcHJvcGFnYXRlZCAnJHt2ZXJzaW9uU3RyaW5nfScgdmVyc2lvbiBvciBpdCBjYW5ub3QgYmUgcGFyc2VkLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdWJEaXJlY3RvcnlQYXRoKHN1YkRpcmVjdG9yeVBhdGgpIHtcbiAgICBsZXQgcmVsZWFzZSA9IG51bGw7XG5cbiAgICBjb25zdCBwYWNrYWdlSlNPTiA9IHJlYWRQYWNrYWdlSlNPTkZpbGUoc3ViRGlyZWN0b3J5UGF0aCk7XG5cbiAgICBpZiAocGFja2FnZUpTT04gIT09IG51bGwpIHtcbiAgICAgIGxldCB7IHZlcnNpb24gPSBudWxsIH0gPSBwYWNrYWdlSlNPTjtcblxuICAgICAgY29uc3QgeyBuYW1lID0gbnVsbCwgZGVwZW5kZW5jaWVzID0ge30sIGRldkRlcGVuZGVuY2llcyA9IHt9IH0gPSBwYWNrYWdlSlNPTixcbiAgICAgICAgICAgIHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uLCAgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbmN5TWFwID0gZGVwZW5kZW5jaWVzLCAvLy9cbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lNYXAgPSBkZXZEZXBlbmRlbmNpZXM7IC8vL1xuXG4gICAgICB2ZXJzaW9uID0gVmVyc2lvbi5mcm9tVmVyc2lvblN0cmluZyh2ZXJzaW9uU3RyaW5nKTtcblxuICAgICAgcmVsZWFzZSA9IG5ldyBSZWxlYXNlKG5hbWUsIHZlcnNpb24sIGRlcGVuZGVuY3lNYXAsIGRldkRlcGVuZGVuY3lNYXAsIHN1YkRpcmVjdG9yeVBhdGgpO1xuICAgIH1cblxuICAgIHJldHVybiByZWxlYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNlbXZlcihuYW1lLCB2ZXJzaW9uU3RyaW5nLCBtYXApIHtcbiAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICBsZXQgc2VtdmVyID0gbWFwW25hbWVdIHx8IG51bGw7XG5cbiAgY29uc3QgdmVyc2lvbiA9IFZlcnNpb24uZnJvbVZlcnNpb25TdHJpbmcodmVyc2lvblN0cmluZyksXG4gICAgICAgIGV4aXN0aW5nU2VtdmVyID0gc2VtdmVyLCAvLy9cbiAgICAgICAgZXhpc3RpbmdWZXJzaW9uID0gVmVyc2lvbi5mcm9tU3RyaW5nKGV4aXN0aW5nU2VtdmVyKTtcblxuICBpZiAoZXhpc3RpbmdWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgdmVyc2lvbkdyZWF0ZXJUaGFuRXhpc3RpbmdWZXJzaW9uID0gdmVyc2lvbi5pc0dyZWF0ZXJUaGFuKGV4aXN0aW5nVmVyc2lvbik7XG5cbiAgICBzdWNjZXNzID0gdmVyc2lvbkdyZWF0ZXJUaGFuRXhpc3RpbmdWZXJzaW9uOyAgLy8vXG5cbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc2VtdmVyID0gdmVyc2lvbi51cGRhdGVTZW12ZXIoc2VtdmVyKTtcblxuICAgICAgbWFwW25hbWVdID0gc2VtdmVyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWNjZXNzO1xufVxuIl0sIm5hbWVzIjpbIlJlbGVhc2UiLCJuYW1lIiwidmVyc2lvbiIsImRlcGVuZGVuY3lNYXAiLCJkZXZEZXBlbmRlbmN5TWFwIiwic3ViRGlyZWN0b3J5UGF0aCIsImdldE5hbWUiLCJnZXRWZXJzaW9uIiwiZ2V0RGVwZW5kZW5jeU1hcCIsImdldERldkRlcGVuZGVuY3lNYXAiLCJnZXRTdWJEaXJlY3RvcnlQYXRoIiwiaXNQdWJsaXNoYWJsZSIsInB1Ymxpc2hhYmxlIiwiZ2V0VmVyc2lvblN0cmluZyIsInZlcnNpb25TdHJpbmciLCJhc1N0cmluZyIsImdldERlcGVuZGVuY3lOYW1lcyIsImRlcGVuZGVuY3lOYW1lcyIsIk9iamVjdCIsImtleXMiLCJnZXREZXZEZXBlbmRlbmN5TmFtZXMiLCJkZXZEZXBlbmRlbmN5TmFtZXMiLCJnaXQiLCJxdWlldGx5IiwiY2FsbGJhY2siLCJzaGVsbENvbW1hbmRzIiwicmV0cmlldmVTaGVsbENvbW1hbmRzIiwiZ2l0U2hlbGxDb21tYW5kcyIsImV4ZWN1dGVTaGVsbENvbW1hbmRzIiwiaW5zdGFsbCIsImluc3RhbGxTaGVsbENvbW1hbmRzIiwiYnVpbGQiLCJpZ25vcmVkQnVpbGRzIiwicmV0cmlldmVJZ25vcmVkQnVpbGRzIiwibmFtZXMiLCJuYW1lc0luY2x1ZGVzTmFtZSIsImluY2x1ZGVzIiwiYnVpbGRJZ25vcmVkIiwiY29uc29sZSIsImxvZyIsInN1Y2Nlc3MiLCJidWlsZFNoZWxsQ29tbWFuZHMiLCJwdWJsaXNoIiwiaWdub3JlZFB1Ymxpc2hlcyIsInJldHJpZXZlSWdub3JlZFB1Ymxpc2hlcyIsInB1Ymxpc2hJZ25vcmVkIiwicHVibGlzaFNoZWxsQ29tbWFuZHMiLCJidW1wUGF0Y2hOdW1iZXIiLCJjdXJyZW50V29ya2luZ0RpcmVjdG9yeVBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiY2hkaXIiLCJleGVjdXRlIiwidXBkYXRlRGVwZW5kZW5jeVZlcnNpb24iLCJ1cGRhdGVTZW12ZXIiLCJ1cGRhdGVEZXZEZXBlbmRlbmN5VmVyc2lvbiIsImZyb21TdWJEaXJlY3RvcnlQYXRoIiwicmVsZWFzZSIsInBhY2thZ2VKU09OIiwicmVhZFBhY2thZ2VKU09ORmlsZSIsImRlcGVuZGVuY2llcyIsImRldkRlcGVuZGVuY2llcyIsIlZlcnNpb24iLCJmcm9tVmVyc2lvblN0cmluZyIsIm1hcCIsInNlbXZlciIsImV4aXN0aW5nU2VtdmVyIiwiZXhpc3RpbmdWZXJzaW9uIiwiZnJvbVN0cmluZyIsInZlcnNpb25HcmVhdGVyVGhhbkV4aXN0aW5nVmVyc2lvbiIsImlzR3JlYXRlclRoYW4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBUXFCQTs7OzhEQU5EO3FCQUVJOzJCQUNZOzZCQUNtRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV4RSxJQUFBLEFBQU1BLHdCQUFOO2FBQU1BLFFBQ1BDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGdCQUFnQixFQUFFQyxnQkFBZ0I7Z0NBRHpETDtRQUVqQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLGFBQWEsR0FBR0E7UUFDckIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBR0E7UUFDeEIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBR0E7O2tC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
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ReleaseGraph;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _occamdirectedgraphs = require("occam-directed-graphs");
|
|
12
|
+
function _class_call_check(instance, Constructor) {
|
|
13
|
+
if (!(instance instanceof Constructor)) {
|
|
14
|
+
throw new TypeError("Cannot call a class as a function");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function _defineProperties(target, props) {
|
|
18
|
+
for(var i = 0; i < props.length; i++){
|
|
19
|
+
var descriptor = props[i];
|
|
20
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
21
|
+
descriptor.configurable = true;
|
|
22
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
23
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
27
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
28
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
|
+
return Constructor;
|
|
30
|
+
}
|
|
31
|
+
var ReleaseGraph = /*#__PURE__*/ function() {
|
|
32
|
+
function ReleaseGraph(dependencyDirectedGraph, devDependencyDirectedGraph) {
|
|
33
|
+
_class_call_check(this, ReleaseGraph);
|
|
34
|
+
this.dependencyDirectedGraph = dependencyDirectedGraph;
|
|
35
|
+
this.devDependencyDirectedGraph = devDependencyDirectedGraph;
|
|
36
|
+
}
|
|
37
|
+
_create_class(ReleaseGraph, [
|
|
38
|
+
{
|
|
39
|
+
key: "getDependencyDirectedGraph",
|
|
40
|
+
value: function getDependencyDirectedGraph() {
|
|
41
|
+
return this.dependencyDirectedGraph;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: "getDevDependencyDirectedGraph",
|
|
46
|
+
value: function getDevDependencyDirectedGraph() {
|
|
47
|
+
return this.devDependencyDirectedGraph;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "isCyclicDependencyPresent",
|
|
52
|
+
value: function isCyclicDependencyPresent() {
|
|
53
|
+
var cyclesPresent = this.dependencyDirectedGraph.areCyclesPresent(), cyclicDependencyPresent = cyclesPresent; ///
|
|
54
|
+
return cyclicDependencyPresent;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: "isCyclicDevDependencyPresent",
|
|
59
|
+
value: function isCyclicDevDependencyPresent() {
|
|
60
|
+
var cyclesPresent = this.devDependencyDirectedGraph.areCyclesPresent(), cyclicDevDependencyPresent = cyclesPresent; ///
|
|
61
|
+
return cyclicDevDependencyPresent;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: "getCyclicDependencySubDirectoryPaths",
|
|
66
|
+
value: function getCyclicDependencySubDirectoryPaths() {
|
|
67
|
+
var firstCycle = this.dependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDependencySubDirectoryPaths = vertexNames; ///
|
|
68
|
+
return cyclicDependencySubDirectoryPaths;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: "getCyclicDevDependencySubDirectoryPaths",
|
|
73
|
+
value: function getCyclicDevDependencySubDirectoryPaths() {
|
|
74
|
+
var firstCycle = this.devDependencyDirectedGraph.getFirstCycle(), vertexNames = firstCycle.getVertexNames(), cyclicDevDependencySubDirectoryPaths = vertexNames; ///
|
|
75
|
+
return cyclicDevDependencySubDirectoryPaths;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: "getOrderedDependencySubDirectoryPaths",
|
|
80
|
+
value: function getOrderedDependencySubDirectoryPaths() {
|
|
81
|
+
var dependencyDirectedGraphOrderedVertexNames = this.dependencyDirectedGraph.getOrderedVertexNames(), orderedDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
|
|
82
|
+
return orderedDependencySubDirectoryPaths;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
key: "getOrderedDevDependencySubDirectoryPaths",
|
|
87
|
+
value: function getOrderedDevDependencySubDirectoryPaths() {
|
|
88
|
+
var dependencyDirectedGraphOrderedVertexNames = this.devDependencyDirectedGraph.getOrderedVertexNames(), orderedDevDependencySubDirectoryPaths = dependencyDirectedGraphOrderedVertexNames; ///
|
|
89
|
+
return orderedDevDependencySubDirectoryPaths;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: "retrieveDependentReleases",
|
|
94
|
+
value: function retrieveDependentReleases(release, releaseMap) {
|
|
95
|
+
var subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.dependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), dependentSubDirectoryPaths = immediateSuccessorVertexNames, dependentReleases = dependentSubDirectoryPaths.map(function(dependentSubDirectoryPath) {
|
|
96
|
+
var dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
|
|
97
|
+
return dependentRelease;
|
|
98
|
+
});
|
|
99
|
+
return dependentReleases;
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
key: "retrieveDevDependentReleases",
|
|
104
|
+
value: function retrieveDevDependentReleases(release, releaseMap) {
|
|
105
|
+
var subDirectoryPath = release.getSubDirectoryPath(), vertexName = subDirectoryPath, immediateSuccessorVertexNames = this.devDependencyDirectedGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName), devDependentSubDirectoryPaths = immediateSuccessorVertexNames, devDependentReleases = devDependentSubDirectoryPaths.map(function(devDependentSubDirectoryPath) {
|
|
106
|
+
var devDependentRelease = releaseMap.retrieveRelease(devDependentSubDirectoryPath);
|
|
107
|
+
return devDependentRelease;
|
|
108
|
+
});
|
|
109
|
+
return devDependentReleases;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
], [
|
|
113
|
+
{
|
|
114
|
+
key: "fromReleaseMapSubDirectoryMapAndForcedDependencyRelations",
|
|
115
|
+
value: function fromReleaseMapSubDirectoryMapAndForcedDependencyRelations(releaseMap, subDirectoryMap, forcedDependencyRelations) {
|
|
116
|
+
var dependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), devDependencyDirectedGraph = _occamdirectedgraphs.DirectedGraph.fromNothing(), releaseNames = releaseMap.getNames(), subDirectoryPaths = releaseMap.getSubDirectoryPaths(), nameToSubDirectoryPathMap = releaseMap.getNameToSubDirectoryPathMap(), vertexNames = subDirectoryPaths; ///
|
|
117
|
+
dependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
|
|
118
|
+
devDependencyDirectedGraph.addVertexesByVertexNames(vertexNames);
|
|
119
|
+
subDirectoryPaths.forEach(function(subDirectoryPath) {
|
|
120
|
+
var release = releaseMap.retrieveRelease(subDirectoryPath), releaseDependencyNames = release.getDependencyNames(), releaseDevDependencyNames = release.getDevDependencyNames();
|
|
121
|
+
releaseDependencyNames.forEach(function(releaseDependencyName) {
|
|
122
|
+
var releaseNamesIncludesReleaseDependencyName = releaseNames.includes(releaseDependencyName);
|
|
123
|
+
if (releaseNamesIncludesReleaseDependencyName) {
|
|
124
|
+
var dependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDependencyName], sourceVertexName = dependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
|
|
125
|
+
dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
releaseDevDependencyNames.forEach(function(releaseDevDependencyName) {
|
|
129
|
+
var releaseNamesIncludesReleaseDevDependencyName = releaseNames.includes(releaseDevDependencyName);
|
|
130
|
+
if (releaseNamesIncludesReleaseDevDependencyName) {
|
|
131
|
+
var devDependencySubDirectoryPath = nameToSubDirectoryPathMap[releaseDevDependencyName], sourceVertexName = devDependencySubDirectoryPath, targetVertexName = subDirectoryPath; ///
|
|
132
|
+
devDependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
forcedDependencyRelations.forEach(function(forcedDependencyRelation) {
|
|
137
|
+
var dependent = forcedDependencyRelation.dependent, dependentSubDirectoryName = dependent, dependentSubDirectoryPath = subDirectoryMap[dependentSubDirectoryName], dependentRelease = releaseMap.retrieveRelease(dependentSubDirectoryPath);
|
|
138
|
+
if (dependentRelease === null) {
|
|
139
|
+
console.log("The '".concat(dependent, "' forced dependent does not exist."));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
var dependency = forcedDependencyRelation.dependency, dependencySubDirectoryName = dependency, dependencySubDirectoryPath = subDirectoryMap[dependencySubDirectoryName], dependencyRelease = releaseMap.retrieveRelease(dependencySubDirectoryPath);
|
|
143
|
+
if (dependencyRelease === null) {
|
|
144
|
+
console.log("The '".concat(dependency, "' forced dependency does not exist."));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
var sourceVertexName = dependencySubDirectoryPath, targetVertexName = dependentSubDirectoryPath; ///
|
|
148
|
+
var dependencyDirectedGraphEdgePresent = dependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), dependencyRelationPresent = dependencyDirectedGraphEdgePresent; ///
|
|
149
|
+
if (dependencyRelationPresent) {
|
|
150
|
+
console.log("The '".concat(dependency, "' -> '").concat(dependent, "' dependency relation is present and therefore cannot be forced."));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
var devDependencyDirectedGraphEdgePresent = devDependencyDirectedGraph.isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), devDependencyRelationPresent = devDependencyDirectedGraphEdgePresent; ///
|
|
154
|
+
if (!devDependencyRelationPresent) {
|
|
155
|
+
console.log("The '".concat(dependency, "' -> '").concat(dependent, "' developer dependency relation is not present and therefore cannot be forced."));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (dependencyRelease) {
|
|
159
|
+
dependencyDirectedGraph.addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
var releaseGraph = new ReleaseGraph(dependencyDirectedGraph, devDependencyDirectedGraph);
|
|
163
|
+
return releaseGraph;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
]);
|
|
167
|
+
return ReleaseGraph;
|
|
168
|
+
}();
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlR3JhcGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERpcmVjdGVkR3JhcGggfSBmcm9tIFwib2NjYW0tZGlyZWN0ZWQtZ3JhcGhzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLCBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCkge1xuICAgIHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgICB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoID0gZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGg7XG4gIH1cblxuICBnZXREZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaDtcbiAgfVxuXG4gIGdldERldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoO1xuICB9XG5cbiAgaXNDeWNsaWNEZXBlbmRlbmN5UHJlc2VudCgpIHtcbiAgICBjb25zdCBjeWNsZXNQcmVzZW50ID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hcmVDeWNsZXNQcmVzZW50KCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSBjeWNsZXNQcmVzZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG4gIH1cblxuICBpc0N5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50KCkge1xuICAgIGNvbnN0IGN5Y2xlc1ByZXNlbnQgPSB0aGlzLmRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFyZUN5Y2xlc1ByZXNlbnQoKSxcbiAgICAgICAgICBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCA9IGN5Y2xlc1ByZXNlbnQ7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudDtcbiAgfVxuXG4gIGdldEN5Y2xpY0RlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBmaXJzdEN5Y2xlID0gdGhpcy5kZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5nZXRGaXJzdEN5Y2xlKCksXG4gICAgICAgICAgdmVydGV4TmFtZXMgPSBmaXJzdEN5Y2xlLmdldFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzID0gdmVydGV4TmFtZXM7ICAvLy9cblxuICAgIHJldHVybiBjeWNsaWNEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBnZXRDeWNsaWNEZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMoKSB7XG4gICAgY29uc3QgZmlyc3RDeWNsZSA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0Rmlyc3RDeWNsZSgpLFxuICAgICAgICAgIHZlcnRleE5hbWVzID0gZmlyc3RDeWNsZS5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgIGN5Y2xpY0RldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IHZlcnRleE5hbWVzOyAgLy8vXG5cbiAgICByZXR1cm4gY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgZ2V0T3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaE9yZGVyZWRWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCksXG4gICAgICAgICAgb3JkZXJlZERldkRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyA9IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzOyAvLy9cblxuICAgIHJldHVybiBvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzO1xuICB9XG5cbiAgcmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyhyZWxlYXNlLCByZWxlYXNlTWFwKSB7XG4gICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aCA9IHJlbGVhc2UuZ2V0U3ViRGlyZWN0b3J5UGF0aCgpLFxuICAgICAgICAgIHZlcnRleE5hbWUgPSBzdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpLFxuICAgICAgICAgIGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzID0gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMsXG4gICAgICAgICAgZGVwZW5kZW50UmVsZWFzZXMgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocy5tYXAoKGRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVudFJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVudFJlbGVhc2U7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW50UmVsZWFzZXM7XG4gIH1cblxuICByZXRyaWV2ZURldkRlcGVuZGVudFJlbGVhc2VzKHJlbGVhc2UsIHJlbGVhc2VNYXApIHtcbiAgICBjb25zdCBzdWJEaXJlY3RvcnlQYXRoID0gcmVsZWFzZS5nZXRTdWJEaXJlY3RvcnlQYXRoKCksXG4gICAgICAgICAgdmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aHMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyxcbiAgICAgICAgICBkZXZEZXBlbmRlbnRSZWxlYXNlcyA9IGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzLm1hcCgoZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV2RGVwZW5kZW50UmVsZWFzZSA9IHJlbGVhc2VNYXAucmV0cmlldmVSZWxlYXNlKGRldkRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGV2RGVwZW5kZW50UmVsZWFzZTtcbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBkZXZEZXBlbmRlbnRSZWxlYXNlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMocmVsZWFzZU1hcCwgc3ViRGlyZWN0b3J5TWFwLCBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcmVsZWFzZU5hbWVzID0gcmVsZWFzZU1hcC5nZXROYW1lcygpLFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gcmVsZWFzZU1hcC5nZXRTdWJEaXJlY3RvcnlQYXRocygpLFxuICAgICAgICAgIG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAgPSByZWxlYXNlTWFwLmdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lcyA9IHN1YkRpcmVjdG9yeVBhdGhzOyAgLy8vXG5cbiAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkVmVydGV4ZXNCeVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSByZWxlYXNlTWFwLnJldHJpZXZlUmVsZWFzZShzdWJEaXJlY3RvcnlQYXRoKSxcbiAgICAgICAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMgPSByZWxlYXNlLmdldERlcGVuZGVuY3lOYW1lcygpLFxuICAgICAgICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcyA9IHJlbGVhc2UuZ2V0RGV2RGVwZW5kZW5jeU5hbWVzKCk7XG5cbiAgICAgIHJlbGVhc2VEZXBlbmRlbmN5TmFtZXMuZm9yRWFjaCgocmVsZWFzZURlcGVuZGVuY3lOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lID0gcmVsZWFzZU5hbWVzLmluY2x1ZGVzKHJlbGVhc2VEZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgaWYgKHJlbGVhc2VOYW1lc0luY2x1ZGVzUmVsZWFzZURlcGVuZGVuY3lOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGggPSBuYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwW3JlbGVhc2VEZXBlbmRlbmN5TmFtZV0sXG4gICAgICAgICAgICAgICAgc291cmNlVmVydGV4TmFtZSA9IGRlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRoLCAgLy8vXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IHN1YkRpcmVjdG9yeVBhdGg7ICAvLy9cblxuICAgICAgICAgIGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lcy5mb3JFYWNoKChyZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUgPSByZWxlYXNlTmFtZXMuaW5jbHVkZXMocmVsZWFzZURldkRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICBpZiAocmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXBbcmVsZWFzZURldkRlcGVuZGVuY3lOYW1lXSxcbiAgICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gZGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gc3ViRGlyZWN0b3J5UGF0aDsgIC8vL1xuXG4gICAgICAgICAgZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGguYWRkRWRnZUJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9ucy5mb3JFYWNoKChmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgZGVwZW5kZW50IH0gPSBmb3JjZWREZXBlbmRlbmN5UmVsYXRpb24sXG4gICAgICAgICAgICBkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lID0gZGVwZW5kZW50LCAvL1xuICAgICAgICAgICAgZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbnRTdWJEaXJlY3RvcnlOYW1lXSwgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnRSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgIGlmIChkZXBlbmRlbnRSZWxlYXNlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGUgJyR7ZGVwZW5kZW50fScgZm9yY2VkIGRlcGVuZGVudCBkb2VzIG5vdCBleGlzdC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGVwZW5kZW5jeSB9ID0gZm9yY2VkRGVwZW5kZW5jeVJlbGF0aW9uLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWUgPSBkZXBlbmRlbmN5LCAgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCA9IHN1YkRpcmVjdG9yeU1hcFtkZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZV0sICAvLy9cbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlID0gcmVsZWFzZU1hcC5yZXRyaWV2ZVJlbGVhc2UoZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2UgPT09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgZm9yY2VkIGRlcGVuZGVuY3kgZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgIHRhcmdldFZlcnRleE5hbWUgPSBkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoOyAgLy8vXG5cbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50OyAvLy9cblxuICAgICAgaWYgKGRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZSAnJHtkZXBlbmRlbmN5fScgLT4gJyR7ZGVwZW5kZW50fScgZGVwZW5kZW5jeSByZWxhdGlvbiBpcyBwcmVzZW50IGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGZvcmNlZC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoRWRnZVByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5pc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGRldkRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQgPSBkZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50OyAvLy9cblxuICAgICAgaWYgKCFkZXZEZXBlbmRlbmN5UmVsYXRpb25QcmVzZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGUgJyR7ZGVwZW5kZW5jeX0nIC0+ICcke2RlcGVuZGVudH0nIGRldmVsb3BlciBkZXBlbmRlbmN5IHJlbGF0aW9uIGlzIG5vdCBwcmVzZW50IGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGZvcmNlZC5gKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXBlbmRlbmN5UmVsZWFzZSkge1xuICAgICAgICBkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaC5hZGRFZGdlQnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlbGVhc2VHcmFwaCA9IG5ldyBSZWxlYXNlR3JhcGgoZGVwZW5kZW5jeURpcmVjdGVkR3JhcGgsIGRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoKTtcblxuICAgIHJldHVybiByZWxlYXNlR3JhcGg7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJSZWxlYXNlR3JhcGgiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImRldkRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoIiwiZ2V0RGVwZW5kZW5jeURpcmVjdGVkR3JhcGgiLCJnZXREZXZEZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaCIsImlzQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJjeWNsZXNQcmVzZW50IiwiYXJlQ3ljbGVzUHJlc2VudCIsImN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50IiwiaXNDeWNsaWNEZXZEZXBlbmRlbmN5UHJlc2VudCIsImN5Y2xpY0RldkRlcGVuZGVuY3lQcmVzZW50IiwiZ2V0Q3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZmlyc3RDeWNsZSIsImdldEZpcnN0Q3ljbGUiLCJ2ZXJ0ZXhOYW1lcyIsImdldFZlcnRleE5hbWVzIiwiY3ljbGljRGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0Q3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiY3ljbGljRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwiZ2V0T3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImRlcGVuZGVuY3lEaXJlY3RlZEdyYXBoT3JkZXJlZFZlcnRleE5hbWVzIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwib3JkZXJlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlQYXRocyIsImdldE9yZGVyZWREZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aHMiLCJvcmRlcmVkRGV2RGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGhzIiwicmV0cmlldmVEZXBlbmRlbnRSZWxlYXNlcyIsInJlbGVhc2UiLCJyZWxlYXNlTWFwIiwic3ViRGlyZWN0b3J5UGF0aCIsImdldFN1YkRpcmVjdG9yeVBhdGgiLCJ2ZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImRlcGVuZGVudFN1YkRpcmVjdG9yeVBhdGhzIiwiZGVwZW5kZW50UmVsZWFzZXMiLCJtYXAiLCJkZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRoIiwiZGVwZW5kZW50UmVsZWFzZSIsInJldHJpZXZlUmVsZWFzZSIsInJldHJpZXZlRGV2RGVwZW5kZW50UmVsZWFzZXMiLCJkZXZEZXBlbmRlbnRTdWJEaXJlY3RvcnlQYXRocyIsImRldkRlcGVuZGVudFJlbGVhc2VzIiwiZGV2RGVwZW5kZW50U3ViRGlyZWN0b3J5UGF0aCIsImRldkRlcGVuZGVudFJlbGVhc2UiLCJmcm9tUmVsZWFzZU1hcFN1YkRpcmVjdG9yeU1hcEFuZEZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbnMiLCJzdWJEaXJlY3RvcnlNYXAiLCJmb3JjZWREZXBlbmRlbmN5UmVsYXRpb25zIiwiRGlyZWN0ZWRHcmFwaCIsImZyb21Ob3RoaW5nIiwicmVsZWFzZU5hbWVzIiwiZ2V0TmFtZXMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImdldFN1YkRpcmVjdG9yeVBhdGhzIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsImdldE5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAiLCJhZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXMiLCJmb3JFYWNoIiwicmVsZWFzZURlcGVuZGVuY3lOYW1lcyIsImdldERlcGVuZGVuY3lOYW1lcyIsInJlbGVhc2VEZXZEZXBlbmRlbmN5TmFtZXMiLCJnZXREZXZEZXBlbmRlbmN5TmFtZXMiLCJyZWxlYXNlRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlTmFtZXNJbmNsdWRlc1JlbGVhc2VEZXBlbmRlbmN5TmFtZSIsImluY2x1ZGVzIiwiZGVwZW5kZW5jeVN1YkRpcmVjdG9yeVBhdGgiLCJzb3VyY2VWZXJ0ZXhOYW1lIiwidGFyZ2V0VmVydGV4TmFtZSIsImFkZEVkZ2VCeVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lIiwicmVsZWFzZURldkRlcGVuZGVuY3lOYW1lIiwicmVsZWFzZU5hbWVzSW5jbHVkZXNSZWxlYXNlRGV2RGVwZW5kZW5jeU5hbWUiLCJkZXZEZXBlbmRlbmN5U3ViRGlyZWN0b3J5UGF0aCIsImZvcmNlZERlcGVuZGVuY3lSZWxhdGlvbiIsImRlcGVuZGVudCIsImRlcGVuZGVudFN1YkRpcmVjdG9yeU5hbWUiLCJjb25zb2xlIiwibG9nIiwiZGVwZW5kZW5jeSIsImRlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lIiwiZGVwZW5kZW5jeVJlbGVhc2UiLCJkZXBlbmRlbmN5RGlyZWN0ZWRHcmFwaEVkZ2VQcmVzZW50IiwiaXNFZGdlUHJlc2VudEJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUiLCJkZXBlbmRlbmN5UmVsYXRpb25QcmVzZW50IiwiZGV2RGVwZW5kZW5jeURpcmVjdGVkR3JhcGhFZGdlUHJlc2VudCIsImRldkRlcGVuZGVuY3lSZWxhdGlvblByZXNlbnQiLCJyZWxlYXNlR3JhcGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7O21DQUZTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVmLElBQUEsQUFBTUEsNkJBQU47YUFBTUEsYUFDUEMsdUJBQXVCLEVBQUVDLDBCQUEwQjtnQ0FENUNGO1FBRWpCLElBQUksQ0FBQ0MsdUJBQXVCLEdBQUdBO1FBQy9CLElBQUksQ0FBQ0MsMEJBQTBCLEdBQUdBOztrQkFIakJGOztZQU1uQkcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRix1QkFBdUI7WUFDckM7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNGLDBCQUEwQjtZQUN4Qzs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxnQkFBZ0IsSUFBSSxDQUFDTCx1QkFBdUIsQ0FBQ00sZ0JBQWdCLElBQzdEQywwQkFBMEJGLGVBQWdCLEdBQUc7Z0JBRW5ELE9BQU9FO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUgsZ0JBQWdCLElBQUksQ0FBQ0osMEJBQTBCLENBQUNLLGdCQUFnQixJQUNoRUcsNkJBQTZCSixlQUFnQixHQUFHO2dCQUV0RCxPQUFPSTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1D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
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ReleaseMap;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _release = /*#__PURE__*/ _interop_require_default(require("./release"));
|
|
12
|
+
function _class_call_check(instance, Constructor) {
|
|
13
|
+
if (!(instance instanceof Constructor)) {
|
|
14
|
+
throw new TypeError("Cannot call a class as a function");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function _defineProperties(target, props) {
|
|
18
|
+
for(var i = 0; i < props.length; i++){
|
|
19
|
+
var descriptor = props[i];
|
|
20
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
21
|
+
descriptor.configurable = true;
|
|
22
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
23
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
27
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
28
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
|
+
return Constructor;
|
|
30
|
+
}
|
|
31
|
+
function _interop_require_default(obj) {
|
|
32
|
+
return obj && obj.__esModule ? obj : {
|
|
33
|
+
default: obj
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
var ReleaseMap = /*#__PURE__*/ function() {
|
|
37
|
+
function ReleaseMap(map) {
|
|
38
|
+
_class_call_check(this, ReleaseMap);
|
|
39
|
+
this.map = map;
|
|
40
|
+
}
|
|
41
|
+
_create_class(ReleaseMap, [
|
|
42
|
+
{
|
|
43
|
+
key: "getNames",
|
|
44
|
+
value: function getNames() {
|
|
45
|
+
var names = [], releases = this.getReleases();
|
|
46
|
+
releases.forEach(function(release) {
|
|
47
|
+
var name = release.getName();
|
|
48
|
+
if (name !== null) {
|
|
49
|
+
names.push(name);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return names;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: "getReleases",
|
|
57
|
+
value: function getReleases() {
|
|
58
|
+
var releases = Object.values(this.map);
|
|
59
|
+
return releases;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
key: "getSubDirectoryPaths",
|
|
64
|
+
value: function getSubDirectoryPaths() {
|
|
65
|
+
var subDirectoryPaths = Object.keys(this.map);
|
|
66
|
+
return subDirectoryPaths;
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: "getNameToSubDirectoryPathMap",
|
|
71
|
+
value: function getNameToSubDirectoryPathMap() {
|
|
72
|
+
var _this = this;
|
|
73
|
+
var nameToSubDirectoryPathMap = {}, subDirectoryPaths = this.getSubDirectoryPaths();
|
|
74
|
+
subDirectoryPaths.forEach(function(subDirectoryPath) {
|
|
75
|
+
var release = _this.retrieveRelease(subDirectoryPath), name = release.getName();
|
|
76
|
+
if (name !== null) {
|
|
77
|
+
nameToSubDirectoryPathMap[name] = subDirectoryPath;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return nameToSubDirectoryPathMap;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: "retrieveRelease",
|
|
85
|
+
value: function retrieveRelease(subDirectoryPath) {
|
|
86
|
+
var release = this.map[subDirectoryPath] || null; ///
|
|
87
|
+
return release;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
], [
|
|
91
|
+
{
|
|
92
|
+
key: "fromSubDirectoryMapAndIgnoredDependencies",
|
|
93
|
+
value: function fromSubDirectoryMapAndIgnoredDependencies(subDirectoryMap, ignoredDependencies) {
|
|
94
|
+
var map = {}, subDirectoryPaths = subDirectoryPathsFromSubDirectoryMapAndIgnoredDependencies(subDirectoryMap, ignoredDependencies);
|
|
95
|
+
subDirectoryPaths.forEach(function(subDirectoryPath) {
|
|
96
|
+
var release = _release.default.fromSubDirectoryPath(subDirectoryPath);
|
|
97
|
+
if (release !== null) {
|
|
98
|
+
map[subDirectoryPath] = release;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
var releaseMap = new ReleaseMap(map);
|
|
102
|
+
return releaseMap;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
]);
|
|
106
|
+
return ReleaseMap;
|
|
107
|
+
}();
|
|
108
|
+
function subDirectoryPathsFromSubDirectoryMapAndIgnoredDependencies(subDirectoryMap, ignoredDependencies) {
|
|
109
|
+
var subDirectoryPaths = [], subDirectoryNames = Object.keys(subDirectoryMap), ignoredDependencySubDirectoryNames = ignoredDependencies; ///
|
|
110
|
+
subDirectoryNames.forEach(function(subDirectoryName) {
|
|
111
|
+
var ignoredDependencySubDirectoryNamesIncludesSubDirectoryName = ignoredDependencySubDirectoryNames.includes(subDirectoryName);
|
|
112
|
+
if (!ignoredDependencySubDirectoryNamesIncludesSubDirectoryName) {
|
|
113
|
+
var subDirectoryPath = subDirectoryMap[subDirectoryName]; ///
|
|
114
|
+
subDirectoryPaths.push(subDirectoryPath);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return subDirectoryPaths;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlTWFwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVsZWFzZSBmcm9tIFwiLi9yZWxlYXNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VNYXAge1xuICBjb25zdHJ1Y3RvcihtYXApIHtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgfVxuXG4gIGdldE5hbWVzKCkge1xuICAgIGNvbnN0IG5hbWVzID0gW10sXG4gICAgICAgICAgcmVsZWFzZXMgPSB0aGlzLmdldFJlbGVhc2VzKCk7XG5cbiAgICByZWxlYXNlcy5mb3JFYWNoKChyZWxlYXNlKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVsZWFzZS5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmFtZXM7XG4gIH1cblxuICBnZXRSZWxlYXNlcygpIHtcbiAgICBjb25zdCByZWxlYXNlcyA9IE9iamVjdC52YWx1ZXModGhpcy5tYXApO1xuXG4gICAgcmV0dXJuIHJlbGVhc2VzO1xuICB9XG5cbiAgZ2V0U3ViRGlyZWN0b3J5UGF0aHMoKSB7XG4gICAgY29uc3Qgc3ViRGlyZWN0b3J5UGF0aHMgPSBPYmplY3Qua2V5cyh0aGlzLm1hcCk7XG5cbiAgICByZXR1cm4gc3ViRGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBnZXROYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwKCkge1xuICAgIGNvbnN0IG5hbWVUb1N1YkRpcmVjdG9yeVBhdGhNYXAgPSB7fSxcbiAgICAgICAgICBzdWJEaXJlY3RvcnlQYXRocyA9IHRoaXMuZ2V0U3ViRGlyZWN0b3J5UGF0aHMoKTtcblxuICAgIHN1YkRpcmVjdG9yeVBhdGhzLmZvckVhY2goKHN1YkRpcmVjdG9yeVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSB0aGlzLnJldHJpZXZlUmVsZWFzZShzdWJEaXJlY3RvcnlQYXRoKSxcbiAgICAgICAgICAgIG5hbWUgPSByZWxlYXNlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgbmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcFtuYW1lXSA9IHN1YkRpcmVjdG9yeVBhdGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcDtcbiAgfVxuXG4gIHJldHJpZXZlUmVsZWFzZShzdWJEaXJlY3RvcnlQYXRoKSB7XG4gICAgY29uc3QgcmVsZWFzZSA9IHRoaXMubWFwW3N1YkRpcmVjdG9yeVBhdGhdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiByZWxlYXNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdWJEaXJlY3RvcnlNYXBBbmRJZ25vcmVkRGVwZW5kZW5jaWVzKHN1YkRpcmVjdG9yeU1hcCwgaWdub3JlZERlcGVuZGVuY2llcykge1xuICAgIGNvbnN0IG1hcCA9IHt9LFxuICAgICAgICAgIHN1YkRpcmVjdG9yeVBhdGhzID0gc3ViRGlyZWN0b3J5UGF0aHNGcm9tU3ViRGlyZWN0b3J5TWFwQW5kSWdub3JlZERlcGVuZGVuY2llcyhzdWJEaXJlY3RvcnlNYXAsIGlnbm9yZWREZXBlbmRlbmNpZXMpO1xuXG4gICAgc3ViRGlyZWN0b3J5UGF0aHMuZm9yRWFjaCgoc3ViRGlyZWN0b3J5UGF0aCkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZSA9IFJlbGVhc2UuZnJvbVN1YkRpcmVjdG9yeVBhdGgoc3ViRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgIGlmIChyZWxlYXNlICE9PSBudWxsKSB7XG4gICAgICAgIG1hcFtzdWJEaXJlY3RvcnlQYXRoXSA9IHJlbGVhc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZWxlYXNlTWFwID0gbmV3IFJlbGVhc2VNYXAobWFwKTtcblxuICAgIHJldHVybiByZWxlYXNlTWFwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1YkRpcmVjdG9yeVBhdGhzRnJvbVN1YkRpcmVjdG9yeU1hcEFuZElnbm9yZWREZXBlbmRlbmNpZXMoc3ViRGlyZWN0b3J5TWFwLCBpZ25vcmVkRGVwZW5kZW5jaWVzKSB7XG4gIGNvbnN0IHN1YkRpcmVjdG9yeVBhdGhzID0gW10sXG4gICAgICAgIHN1YkRpcmVjdG9yeU5hbWVzID0gT2JqZWN0LmtleXMoc3ViRGlyZWN0b3J5TWFwKSwgLy8vXG4gICAgICAgIGlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXMgPSBpZ25vcmVkRGVwZW5kZW5jaWVzOyAvLy9cblxuICBzdWJEaXJlY3RvcnlOYW1lcy5mb3JFYWNoKChzdWJEaXJlY3RvcnlOYW1lKSA9PiB7XG4gICAgY29uc3QgaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lc0luY2x1ZGVzU3ViRGlyZWN0b3J5TmFtZSA9IGlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXMuaW5jbHVkZXMoc3ViRGlyZWN0b3J5TmFtZSk7XG5cbiAgICBpZiAoIWlnbm9yZWREZXBlbmRlbmN5U3ViRGlyZWN0b3J5TmFtZXNJbmNsdWRlc1N1YkRpcmVjdG9yeU5hbWUpIHtcbiAgICAgIGNvbnN0IHN1YkRpcmVjdG9yeVBhdGggPSBzdWJEaXJlY3RvcnlNYXBbc3ViRGlyZWN0b3J5TmFtZV07IC8vL1xuXG4gICAgICBzdWJEaXJlY3RvcnlQYXRocy5wdXNoKHN1YkRpcmVjdG9yeVBhdGgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN1YkRpcmVjdG9yeVBhdGhzO1xufVxuIl0sIm5hbWVzIjpbIlJlbGVhc2VNYXAiLCJtYXAiLCJnZXROYW1lcyIsIm5hbWVzIiwicmVsZWFzZXMiLCJnZXRSZWxlYXNlcyIsImZvckVhY2giLCJyZWxlYXNlIiwibmFtZSIsImdldE5hbWUiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0U3ViRGlyZWN0b3J5UGF0aHMiLCJzdWJEaXJlY3RvcnlQYXRocyIsImtleXMiLCJnZXROYW1lVG9TdWJEaXJlY3RvcnlQYXRoTWFwIiwibmFtZVRvU3ViRGlyZWN0b3J5UGF0aE1hcCIsInN1YkRpcmVjdG9yeVBhdGgiLCJyZXRyaWV2ZVJlbGVhc2UiLCJmcm9tU3ViRGlyZWN0b3J5TWFwQW5kSWdub3JlZERlcGVuZGVuY2llcyIsInN1YkRpcmVjdG9yeU1hcCIsImlnbm9yZWREZXBlbmRlbmNpZXMiLCJzdWJEaXJlY3RvcnlQYXRoc0Zyb21TdWJEaXJlY3RvcnlNYXBBbmRJZ25vcmVkRGVwZW5kZW5jaWVzIiwiUmVsZWFzZSIsImZyb21TdWJEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU1hcCIsInN1YkRpcmVjdG9yeU5hbWVzIiwiaWdub3JlZERlcGVuZGVuY3lTdWJEaXJlY3RvcnlOYW1lcyIsInN1YkRpcmVjdG9yeU5hbWUiLCJpZ25vcmVkRGVwZW5kZW5jeVN1YkRpcmVjdG9yeU5hbWVzSW5jbHVkZXNTdWJEaXJlY3RvcnlOYW1lIiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7OzhEQUZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUwsSUFBQSxBQUFNQSwyQkFBTjthQUFNQSxXQUNQQyxHQUFHO2dDQURJRDtRQUVqQixJQUFJLENBQUNDLEdBQUcsR0FBR0E7O2tCQUZNRDs7WUFLbkJFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxRQUFRLEVBQUUsRUFDVkMsV0FBVyxJQUFJLENBQUNDLFdBQVc7Z0JBRWpDRCxTQUFTRSxPQUFPLENBQUMsU0FBQ0M7b0JBQ2hCLElBQU1DLE9BQU9ELFFBQVFFLE9BQU87b0JBRTVCLElBQUlELFNBQVMsTUFBTTt3QkFDakJMLE1BQU1PLElBQUksQ0FBQ0Y7b0JBQ2I7Z0JBQ0Y7Z0JBRUEsT0FBT0w7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNRCxXQUFXTyxPQUFPQyxNQUFNLENBQUMsSUFBSSxDQUFDWCxHQUFHO2dCQUV2QyxPQUFPRztZQUNUOzs7WUFFQVMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLG9CQUFvQkgsT0FBT0ksSUFBSSxDQUFDLElBQUksQ0FBQ2QsR0FBRztnQkFFOUMsT0FBT2E7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTs7Z0JBQ0UsSUFBTUMsNEJBQTRCLENBQUMsR0FDN0JILG9CQUFvQixJQUFJLENBQUNELG9CQUFvQjtnQkFFbkRDLGtCQUFrQlIsT0FBTyxDQUFDLFNBQUNZO29CQUN6QixJQUFNWCxVQUFVLE1BQUtZLGVBQWUsQ0FBQ0QsbUJBQy9CVixPQUFPRCxRQUFRRSxPQUFPO29CQUU1QixJQUFJRCxTQUFTLE1BQU07d0JBQ2pCUyx5QkFBeUIsQ0FBQ1QsS0FBSyxHQUFHVTtvQkFDcEM7Z0JBQ0Y7Z0JBRUEsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxnQkFBZ0JELGdCQUFnQjtnQkFDOUIsSUFBTVgsVUFBVSxJQUFJLENBQUNOLEdBQUcsQ0FBQ2lCLGlCQUFpQixJQUFJLE1BQU8sR0FBRztnQkFFeEQsT0FBT1g7WUFDVDs7OztZQUVPYSxLQUFBQTttQkFBUCxTQUFPQSwwQ0FBMENDLGVBQWUsRUFBRUMsbUJBQW1CO2dCQUNuRixJQUFNckIsTUFBTSxDQUFDLEdBQ1BhLG9CQUFvQlMsMkRBQTJERixpQkFBaUJDO2dCQUV0R1Isa0JBQWtCUixPQUFPLENBQUMsU0FBQ1k7b0JBQ3pCLElBQU1YLFVBQVVpQixnQkFBTyxDQUFDQyxvQkFBb0IsQ0FBQ1A7b0JBRTdDLElBQUlYLFlBQVksTUFBTTt3QkFDcEJOLEdBQUcsQ0FBQ2lCLGlCQUFpQixHQUFHWDtvQkFDMUI7Z0JBQ0Y7Z0JBRUEsSUFBTW1CLGFBQWEsSUFsRUYxQixXQWtFaUJDO2dCQUVsQyxPQUFPeUI7WUFDVDs7O1dBckVtQjFCOztBQXdFckIsU0FBU3VCLDJEQUEyREYsZUFBZSxFQUFFQyxtQkFBbUI7SUFDdEcsSUFBTVIsb0JBQW9CLEVBQUUsRUFDdEJhLG9CQUFvQmhCLE9BQU9JLElBQUksQ0FBQ00sa0JBQ2hDTyxxQ0FBcUNOLHFCQUFxQixHQUFHO0lBRW5FSyxrQkFBa0JyQixPQUFPLENBQUMsU0FBQ3VCO1FBQ3pCLElBQU1DLDZEQUE2REYsbUNBQW1DRyxRQUFRLENBQUNGO1FBRS9HLElBQUksQ0FBQ0MsNERBQTREO1lBQy9ELElBQU1aLG1CQUFtQkcsZUFBZSxDQUFDUSxpQkFBaUIsRUFBRSxHQUFHO1lBRS9EZixrQkFBa0JKLElBQUksQ0FBQ1E7UUFDekI7SUFDRjtJQUVBLE9BQU9KO0FBQ1QifQ==
|