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.
Files changed (167) hide show
  1. package/.swcrc +5 -0
  2. package/lib/abbreviations.js +22 -0
  3. package/lib/action/addDirectory.js +41 -0
  4. package/lib/action/addForcedDependencyRelation.js +51 -0
  5. package/lib/action/addIgnoredDependency.js +40 -0
  6. package/lib/action/help.js +15 -0
  7. package/lib/action/initialise.js +23 -0
  8. package/lib/action/listDirectories.js +57 -0
  9. package/lib/action/listForcedDependencyRelations.js +30 -0
  10. package/lib/action/listIgnoredDependencies.js +56 -0
  11. package/lib/action/propagate.js +57 -0
  12. package/lib/action/removeDirectory.js +43 -0
  13. package/lib/action/removeForcedDependencyRelation.js +43 -0
  14. package/lib/action/removeIgnoredDependency.js +43 -0
  15. package/lib/action/setShellCommands.js +43 -0
  16. package/lib/action/version.js +19 -0
  17. package/lib/changeDirectory.js +33 -0
  18. package/lib/commands.js +70 -0
  19. package/lib/configuration/version_1_10.js +48 -0
  20. package/lib/configuration/version_1_3.js +21 -0
  21. package/lib/configuration/version_1_7.js +21 -0
  22. package/lib/configuration/version_1_9.js +27 -0
  23. package/lib/configuration.js +191 -0
  24. package/lib/constants.js +46 -0
  25. package/lib/defaults.js +54 -0
  26. package/lib/descriptions.js +82 -0
  27. package/lib/diff/map.js +114 -0
  28. package/lib/diff/semver.js +88 -0
  29. package/lib/diff/version.js +97 -0
  30. package/lib/diff.js +210 -0
  31. package/lib/main.js +119 -0
  32. package/lib/messages.js +190 -0
  33. package/lib/operation/checkDevDependencies.js +34 -0
  34. package/lib/operation/createDiffs.js +78 -0
  35. package/lib/operation/createReleaseGraph.js +43 -0
  36. package/lib/operation/createReleaseMap.js +26 -0
  37. package/lib/operation/createSubDirectoryMap.js +65 -0
  38. package/lib/operation/createSubDirectoryPath.js +30 -0
  39. package/lib/operation/dryRun.js +22 -0
  40. package/lib/operation/prompt/addDirectory.js +37 -0
  41. package/lib/operation/prompt/addForcedDependency.js +37 -0
  42. package/lib/operation/prompt/addForcedDependent.js +37 -0
  43. package/lib/operation/prompt/addIgnoredDependency.js +37 -0
  44. package/lib/operation/prompt/build.js +52 -0
  45. package/lib/operation/prompt/git.js +52 -0
  46. package/lib/operation/prompt/install.js +52 -0
  47. package/lib/operation/prompt/publish.js +61 -0
  48. package/lib/operation/prompt/removeDirectory.js +39 -0
  49. package/lib/operation/prompt/removeForcedDependencyRelation.js +39 -0
  50. package/lib/operation/prompt/removeIgnoredDependency.js +39 -0
  51. package/lib/operation/prompt/save.js +57 -0
  52. package/lib/operation/prompt/setBuildShellCommands.js +33 -0
  53. package/lib/operation/prompt/setGitShellCommands.js +33 -0
  54. package/lib/operation/prompt/setInstallShellCommands.js +33 -0
  55. package/lib/operation/prompt/setPublishShellCommands.js +33 -0
  56. package/lib/operation/propagateRelease.js +73 -0
  57. package/lib/operation/retrieveRelease.js +31 -0
  58. package/lib/operation/saveAndApplyDiff.js +49 -0
  59. package/lib/operation/saveAndApplyDiffs.js +27 -0
  60. package/lib/options.js +34 -0
  61. package/lib/prepare.js +48 -0
  62. package/lib/release.js +227 -0
  63. package/lib/releaseGraph.js +170 -0
  64. package/lib/releaseMap.js +120 -0
  65. package/lib/utilities/console.js +81 -0
  66. package/lib/utilities/dependency.js +25 -0
  67. package/lib/utilities/diffs.js +28 -0
  68. package/lib/utilities/operation.js +53 -0
  69. package/lib/utilities/packageJSON.js +50 -0
  70. package/lib/utilities/path.js +22 -0
  71. package/lib/utilities/prompt.js +15 -0
  72. package/lib/utilities/propagate.js +60 -0
  73. package/lib/utilities/shell.js +63 -0
  74. package/lib/utilities/validate.js +68 -0
  75. package/lib/version.js +140 -0
  76. package/lib/versions.js +34 -0
  77. package/package.json +19 -4
  78. package/propagate.js +3 -3
  79. package/src/abbreviations.js +19 -0
  80. package/{bin → src}/action/addDirectory.js +5 -7
  81. package/{bin → src}/action/addForcedDependencyRelation.js +8 -10
  82. package/{bin → src}/action/addIgnoredDependency.js +7 -9
  83. package/{bin → src}/action/help.js +1 -3
  84. package/{bin → src}/action/initialise.js +3 -5
  85. package/{bin → src}/action/listDirectories.js +4 -6
  86. package/{bin → src}/action/listForcedDependencyRelations.js +4 -6
  87. package/{bin → src}/action/listIgnoredDependencies.js +4 -6
  88. package/src/action/propagate.js +48 -0
  89. package/{bin → src}/action/removeDirectory.js +6 -8
  90. package/{bin → src}/action/removeForcedDependencyRelation.js +6 -8
  91. package/{bin → src}/action/removeIgnoredDependency.js +6 -8
  92. package/src/action/setShellCommands.js +37 -0
  93. package/src/action/version.js +13 -0
  94. package/{bin → src}/changeDirectory.js +4 -6
  95. package/src/commands.js +16 -0
  96. package/{bin → src}/configuration/version_1_10.js +4 -9
  97. package/{bin → src}/configuration/version_1_3.js +2 -6
  98. package/{bin → src}/configuration/version_1_7.js +2 -6
  99. package/{bin → src}/configuration/version_1_9.js +3 -7
  100. package/{bin → src}/configuration.js +23 -40
  101. package/src/constants.js +10 -0
  102. package/src/defaults.js +12 -0
  103. package/src/descriptions.js +19 -0
  104. package/{bin → src}/diff/map.js +4 -6
  105. package/{bin → src}/diff/semver.js +1 -3
  106. package/{bin → src}/diff/version.js +2 -4
  107. package/{bin → src}/diff.js +5 -7
  108. package/{bin → src}/main.js +20 -22
  109. package/src/messages.js +46 -0
  110. package/{bin → src}/operation/checkDevDependencies.js +1 -3
  111. package/{bin → src}/operation/createDiffs.js +2 -4
  112. package/{bin → src}/operation/createReleaseGraph.js +5 -7
  113. package/{bin → src}/operation/createReleaseMap.js +3 -5
  114. package/{bin → src}/operation/createSubDirectoryMap.js +5 -7
  115. package/{bin → src}/operation/createSubDirectoryPath.js +5 -7
  116. package/{bin → src}/operation/dryRun.js +1 -3
  117. package/{bin → src}/operation/prompt/addDirectory.js +5 -7
  118. package/{bin → src}/operation/prompt/addForcedDependency.js +5 -7
  119. package/{bin → src}/operation/prompt/addForcedDependent.js +5 -7
  120. package/{bin → src}/operation/prompt/addIgnoredDependency.js +5 -7
  121. package/{bin → src}/operation/prompt/build.js +8 -10
  122. package/{bin → src}/operation/prompt/git.js +8 -10
  123. package/{bin → src}/operation/prompt/install.js +8 -10
  124. package/{bin → src}/operation/prompt/publish.js +9 -11
  125. package/{bin → src}/operation/prompt/removeDirectory.js +5 -7
  126. package/{bin → src}/operation/prompt/removeForcedDependencyRelation.js +5 -7
  127. package/{bin → src}/operation/prompt/removeIgnoredDependency.js +5 -7
  128. package/{bin → src}/operation/prompt/save.js +9 -11
  129. package/{bin → src}/operation/prompt/setBuildShellCommands.js +6 -8
  130. package/{bin → src}/operation/prompt/setGitShellCommands.js +6 -8
  131. package/{bin → src}/operation/prompt/setInstallShellCommands.js +6 -8
  132. package/{bin → src}/operation/prompt/setPublishShellCommands.js +6 -8
  133. package/{bin → src}/operation/propagateRelease.js +3 -5
  134. package/{bin → src}/operation/retrieveRelease.js +2 -4
  135. package/{bin → src}/operation/saveAndApplyDiff.js +8 -10
  136. package/src/operation/saveAndApplyDiffs.js +17 -0
  137. package/src/options.js +7 -0
  138. package/{bin → src}/prepare.js +17 -19
  139. package/{bin → src}/release.js +5 -7
  140. package/{bin → src}/releaseGraph.js +2 -4
  141. package/{bin → src}/releaseMap.js +2 -4
  142. package/{bin → src}/utilities/console.js +5 -11
  143. package/{bin → src}/utilities/dependency.js +1 -5
  144. package/{bin → src}/utilities/diffs.js +2 -7
  145. package/{bin → src}/utilities/operation.js +3 -8
  146. package/{bin → src}/utilities/packageJSON.js +4 -9
  147. package/{bin → src}/utilities/path.js +2 -6
  148. package/src/utilities/prompt.js +3 -0
  149. package/{bin → src}/utilities/propagate.js +3 -8
  150. package/{bin → src}/utilities/shell.js +7 -11
  151. package/src/utilities/validate.js +19 -0
  152. package/{bin → src}/version.js +2 -4
  153. package/src/versions.js +7 -0
  154. package/bin/abbreviations.js +0 -11
  155. package/bin/action/propagate.js +0 -50
  156. package/bin/action/setShellCommands.js +0 -39
  157. package/bin/action/version.js +0 -15
  158. package/bin/commands.js +0 -33
  159. package/bin/constants.js +0 -23
  160. package/bin/defaults.js +0 -25
  161. package/bin/descriptions.js +0 -39
  162. package/bin/messages.js +0 -93
  163. package/bin/operation/saveAndApplyDiffs.js +0 -19
  164. package/bin/options.js +0 -15
  165. package/bin/utilities/prompt.js +0 -7
  166. package/bin/utilities/validate.js +0 -31
  167. 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==