@cdktn/cli-core 0.23.0-pre.8 → 0.24.0-pre.1

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 (169) hide show
  1. package/ambient.d.ts +0 -1
  2. package/build/lib/cdktf-config.d.ts.map +1 -0
  3. package/build/lib/cdktf-config.js +108 -0
  4. package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
  5. package/build/lib/cdktf-project-io-handler.js +84 -0
  6. package/build/lib/cdktf-project.d.ts.map +1 -0
  7. package/build/lib/cdktf-project.js +370 -0
  8. package/{src → build}/lib/cdktf-stack.d.ts +1 -0
  9. package/build/lib/cdktf-stack.d.ts.map +1 -0
  10. package/build/lib/cdktf-stack.js +386 -0
  11. package/build/lib/convert.d.ts.map +1 -0
  12. package/build/lib/convert.js +51 -0
  13. package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  14. package/build/lib/dependencies/cdktf-config-manager.js +36 -0
  15. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
  16. package/build/lib/dependencies/dependency-manager.js +393 -0
  17. package/build/lib/dependencies/package-manager.d.ts.map +1 -0
  18. package/build/lib/dependencies/package-manager.js +581 -0
  19. package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  20. package/build/lib/dependencies/prebuilt-providers.js +221 -0
  21. package/build/lib/dependencies/registry-api.d.ts.map +1 -0
  22. package/build/lib/dependencies/registry-api.js +77 -0
  23. package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
  24. package/build/lib/dependencies/version-constraints.js +95 -0
  25. package/build/lib/error-reporting.d.ts.map +1 -0
  26. package/build/lib/error-reporting.js +133 -0
  27. package/build/lib/errors.d.ts.map +1 -0
  28. package/build/lib/errors.js +10 -0
  29. package/build/lib/execution-logs.d.ts.map +1 -0
  30. package/build/lib/execution-logs.js +47 -0
  31. package/build/lib/get.d.ts.map +1 -0
  32. package/build/lib/get.js +90 -0
  33. package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
  34. package/build/lib/helpers/stack-helpers.js +155 -0
  35. package/build/lib/index.d.ts.map +1 -0
  36. package/{src → build}/lib/index.js +1 -2
  37. package/build/lib/init.d.ts.map +1 -0
  38. package/build/lib/init.js +131 -0
  39. package/build/lib/local-provider-constraints.d.ts.map +1 -0
  40. package/build/lib/local-provider-constraints.js +95 -0
  41. package/build/lib/local-provider-versions.d.ts.map +1 -0
  42. package/build/lib/local-provider-versions.js +73 -0
  43. package/{src → build}/lib/models/deploy-machine.d.ts +3 -11
  44. package/build/lib/models/deploy-machine.d.ts.map +1 -0
  45. package/build/lib/models/deploy-machine.js +283 -0
  46. package/build/lib/models/interactive-process.d.ts +28 -0
  47. package/build/lib/models/interactive-process.d.ts.map +1 -0
  48. package/build/lib/models/interactive-process.js +59 -0
  49. package/{src → build}/lib/models/schema.d.ts.map +1 -1
  50. package/build/lib/models/schema.js +181 -0
  51. package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
  52. package/build/lib/models/terraform-cli.d.ts.map +1 -0
  53. package/build/lib/models/terraform-cli.js +355 -0
  54. package/build/lib/models/terraform.d.ts.map +1 -0
  55. package/build/lib/models/terraform.js +72 -0
  56. package/build/lib/output.d.ts.map +1 -0
  57. package/build/lib/output.js +211 -0
  58. package/build/lib/provider-add.d.ts.map +1 -0
  59. package/build/lib/provider-add.js +30 -0
  60. package/build/lib/server/terraform-logs.d.ts.map +1 -0
  61. package/build/lib/server/terraform-logs.js +19 -0
  62. package/{src → build}/lib/synth-stack.d.ts +1 -0
  63. package/build/lib/synth-stack.d.ts.map +1 -0
  64. package/build/lib/synth-stack.js +251 -0
  65. package/build/lib/synth.d.ts.map +1 -0
  66. package/build/lib/synth.js +67 -0
  67. package/{src → build}/lib/terraform-json.d.ts.map +1 -1
  68. package/build/lib/terraform-json.js +82 -0
  69. package/build/lib/terraform-provider-lock.d.ts.map +1 -0
  70. package/{src → build}/lib/terraform-provider-lock.js +2 -2
  71. package/{src → build}/lib/watch.d.ts +1 -0
  72. package/build/lib/watch.d.ts.map +1 -0
  73. package/build/lib/watch.js +155 -0
  74. package/eslint.config.mjs +2 -70
  75. package/package.json +22 -33
  76. package/templates/go/go.mod +1 -1
  77. package/templates/python/Pipfile +1 -1
  78. package/templates/typescript/.hooks.sscaff.js +1 -1
  79. package/templates/typescript/jest.config.js +1 -1
  80. package/src/lib/cdktf-config.d.ts.map +0 -1
  81. package/src/lib/cdktf-config.js +0 -108
  82. package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
  83. package/src/lib/cdktf-project-io-handler.js +0 -84
  84. package/src/lib/cdktf-project.d.ts.map +0 -1
  85. package/src/lib/cdktf-project.js +0 -371
  86. package/src/lib/cdktf-stack.d.ts.map +0 -1
  87. package/src/lib/cdktf-stack.js +0 -386
  88. package/src/lib/convert.d.ts.map +0 -1
  89. package/src/lib/convert.js +0 -51
  90. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
  91. package/src/lib/dependencies/cdktf-config-manager.js +0 -36
  92. package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
  93. package/src/lib/dependencies/dependency-manager.js +0 -393
  94. package/src/lib/dependencies/package-manager.d.ts.map +0 -1
  95. package/src/lib/dependencies/package-manager.js +0 -581
  96. package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
  97. package/src/lib/dependencies/prebuilt-providers.js +0 -220
  98. package/src/lib/dependencies/registry-api.d.ts.map +0 -1
  99. package/src/lib/dependencies/registry-api.js +0 -77
  100. package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
  101. package/src/lib/dependencies/version-constraints.js +0 -95
  102. package/src/lib/error-reporting.d.ts.map +0 -1
  103. package/src/lib/error-reporting.js +0 -133
  104. package/src/lib/errors.d.ts.map +0 -1
  105. package/src/lib/errors.js +0 -10
  106. package/src/lib/execution-logs.d.ts.map +0 -1
  107. package/src/lib/execution-logs.js +0 -47
  108. package/src/lib/get.d.ts.map +0 -1
  109. package/src/lib/get.js +0 -90
  110. package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
  111. package/src/lib/helpers/stack-helpers.js +0 -155
  112. package/src/lib/index.d.ts.map +0 -1
  113. package/src/lib/init.d.ts.map +0 -1
  114. package/src/lib/init.js +0 -131
  115. package/src/lib/local-provider-constraints.d.ts.map +0 -1
  116. package/src/lib/local-provider-constraints.js +0 -95
  117. package/src/lib/local-provider-versions.d.ts.map +0 -1
  118. package/src/lib/local-provider-versions.js +0 -73
  119. package/src/lib/models/deploy-machine.d.ts.map +0 -1
  120. package/src/lib/models/deploy-machine.js +0 -280
  121. package/src/lib/models/pty-process.d.ts +0 -29
  122. package/src/lib/models/pty-process.d.ts.map +0 -1
  123. package/src/lib/models/pty-process.js +0 -132
  124. package/src/lib/models/schema.js +0 -181
  125. package/src/lib/models/terraform-cli.d.ts.map +0 -1
  126. package/src/lib/models/terraform-cli.js +0 -357
  127. package/src/lib/models/terraform.d.ts.map +0 -1
  128. package/src/lib/models/terraform.js +0 -72
  129. package/src/lib/output.d.ts.map +0 -1
  130. package/src/lib/output.js +0 -211
  131. package/src/lib/provider-add.d.ts.map +0 -1
  132. package/src/lib/provider-add.js +0 -30
  133. package/src/lib/server/terraform-logs.d.ts.map +0 -1
  134. package/src/lib/server/terraform-logs.js +0 -19
  135. package/src/lib/synth-stack.d.ts.map +0 -1
  136. package/src/lib/synth-stack.js +0 -251
  137. package/src/lib/synth.d.ts.map +0 -1
  138. package/src/lib/synth.js +0 -67
  139. package/src/lib/terraform-json.js +0 -82
  140. package/src/lib/terraform-provider-lock.d.ts.map +0 -1
  141. package/src/lib/watch.d.ts.map +0 -1
  142. package/src/lib/watch.js +0 -155
  143. /package/{src → build}/lib/cdktf-config.d.ts +0 -0
  144. /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
  145. /package/{src → build}/lib/cdktf-project.d.ts +0 -0
  146. /package/{src → build}/lib/convert.d.ts +0 -0
  147. /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
  148. /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
  149. /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
  150. /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
  151. /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
  152. /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
  153. /package/{src → build}/lib/error-reporting.d.ts +0 -0
  154. /package/{src → build}/lib/errors.d.ts +0 -0
  155. /package/{src → build}/lib/execution-logs.d.ts +0 -0
  156. /package/{src → build}/lib/get.d.ts +0 -0
  157. /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
  158. /package/{src → build}/lib/index.d.ts +0 -0
  159. /package/{src → build}/lib/init.d.ts +0 -0
  160. /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
  161. /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
  162. /package/{src → build}/lib/models/schema.d.ts +0 -0
  163. /package/{src → build}/lib/models/terraform.d.ts +0 -0
  164. /package/{src → build}/lib/output.d.ts +0 -0
  165. /package/{src → build}/lib/provider-add.d.ts +0 -0
  166. /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
  167. /package/{src → build}/lib/synth.d.ts +0 -0
  168. /package/{src → build}/lib/terraform-json.d.ts +0 -0
  169. /package/{src → build}/lib/terraform-provider-lock.d.ts +0 -0
@@ -1,393 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.DependencyManager = exports.ProviderConstraint = exports.DEFAULT_NAMESPACE = exports.DEFAULT_HOSTNAME = void 0;
27
- // Copyright (c) HashiCorp, Inc
28
- // SPDX-License-Identifier: MPL-2.0
29
- const commons_1 = require("@cdktn/commons");
30
- const codemaker_1 = require("codemaker");
31
- const cdktf_config_1 = require("../cdktf-config");
32
- const cdktf_config_manager_1 = require("./cdktf-config-manager");
33
- const package_manager_1 = require("./package-manager");
34
- const prebuilt_providers_1 = require("./prebuilt-providers");
35
- const registry_api_1 = require("./registry-api");
36
- const version_constraints_1 = require("./version-constraints");
37
- const semver = __importStar(require("semver"));
38
- const local_provider_versions_1 = require("../local-provider-versions");
39
- const local_provider_constraints_1 = require("../local-provider-constraints");
40
- // ref: https://www.terraform.io/language/providers/requirements#source-addresses
41
- exports.DEFAULT_HOSTNAME = "registry.terraform.io";
42
- exports.DEFAULT_NAMESPACE = "hashicorp";
43
- function normalizeProviderSource(source) {
44
- // returns <HOSTNAME>/<NAMESPACE>/<TYPE>
45
- const slashes = source.split("/").length - 1;
46
- switch (slashes) {
47
- case 0:
48
- return `${exports.DEFAULT_HOSTNAME}/${exports.DEFAULT_NAMESPACE}/${source}`;
49
- case 1:
50
- return `${exports.DEFAULT_HOSTNAME}/${source}`;
51
- default:
52
- return source;
53
- }
54
- }
55
- class ProviderConstraint {
56
- // TODO: add examples to cli command description (i.e. =,~>.> etc.)
57
- // if no version constraint is specified, we assume the latest version
58
- // if specific version is specified without e.g. =, we allow patch level increments (e.g. ~>2.12 for "2.12")
59
- constructor(source, version) {
60
- this.version = version;
61
- this.source = normalizeProviderSource(source);
62
- }
63
- static fromConfigEntry(provider) {
64
- if (typeof provider === "string") {
65
- const [src, version] = provider.split("@");
66
- return new ProviderConstraint(src.trim(), version ? version.trim() : undefined);
67
- }
68
- const src = (provider.namespace ? `${provider.namespace}/` : "") +
69
- (provider.source || provider.name);
70
- return new ProviderConstraint(src, provider.version);
71
- }
72
- isFromTerraformRegistry() {
73
- return this.hostname === exports.DEFAULT_HOSTNAME;
74
- }
75
- /**
76
- * the namespace of the provider
77
- * e.g. "hashicorp" or "kreuzwerker"
78
- */
79
- get namespace() {
80
- return this.source.split("/")[1];
81
- }
82
- /**
83
- * the name of the provider
84
- * e.g. "aws"
85
- */
86
- get name() {
87
- return this.source.split("/")[2];
88
- }
89
- /**
90
- * the hostname of the provider
91
- * e.g. "registry.terraform.io"
92
- */
93
- get hostname() {
94
- return this.source.split("/")[0];
95
- }
96
- /**
97
- * returns a simplified provider name, dropping namespace and hostname
98
- * if they match the defaults
99
- */
100
- get simplifiedName() {
101
- return this.source
102
- .split("/")
103
- .filter((part) => part !== exports.DEFAULT_HOSTNAME && part !== exports.DEFAULT_NAMESPACE)
104
- .join("/");
105
- }
106
- /**
107
- * checks if the version constraint matches the given version
108
- * @param version an actual version (e.g. "4.12.1")
109
- * @returns true if the version is compatible with the constraint
110
- */
111
- matchesVersion(version) {
112
- if (this.version) {
113
- return (0, version_constraints_1.versionMatchesConstraint)(version, this.version);
114
- }
115
- return true;
116
- }
117
- toString() {
118
- return `${this.source}${this.version ? `@${this.version}` : ""}`;
119
- }
120
- }
121
- exports.ProviderConstraint = ProviderConstraint;
122
- /**
123
- * manages dependencies of a CDKTN project (e.g. terraform providers)
124
- */
125
- class DependencyManager {
126
- constructor(targetLanguage, cdktfVersion, projectDirectory) {
127
- this.targetLanguage = targetLanguage;
128
- this.cdktfVersion = cdktfVersion;
129
- this.projectDirectory = projectDirectory;
130
- this.packageManager = package_manager_1.PackageManager.forLanguage(targetLanguage, this.projectDirectory);
131
- }
132
- async addProvider(constraint) {
133
- if (await this.hasPrebuiltProvider(constraint)) {
134
- await this.addPrebuiltProvider(constraint);
135
- return { addedLocalProvider: false };
136
- }
137
- else {
138
- await this.addLocalProvider(constraint);
139
- return { addedLocalProvider: true };
140
- }
141
- }
142
- async upgradeProvider(constraint) {
143
- console.log(`Upgrading ${constraint.simplifiedName}...`);
144
- const cdktfJson = new cdktf_config_manager_1.CdktfConfigManager();
145
- const prebuiltVersion = await this.getCurrentlyInstalledVersion(constraint);
146
- if (prebuiltVersion) {
147
- await this.upgradePrebuiltProvider(constraint, prebuiltVersion);
148
- return { addedLocalProvider: false };
149
- }
150
- if (await cdktfJson.hasProvider(constraint)) {
151
- await cdktfJson.updateProvider(constraint);
152
- return { addedLocalProvider: true };
153
- }
154
- throw commons_1.Errors.Usage(`Trying to upgrade ${constraint.simplifiedName} but it is not installed, please use "cdktn provider add ${constraint.simplifiedName}" to add it.`);
155
- }
156
- async getCurrentlyInstalledVersion(constraint) {
157
- var _a;
158
- commons_1.logger.info(`Checking if ${constraint.simplifiedName} is installed...`);
159
- const cdktfPackageName = await this.tryGetPackageName(constraint, false);
160
- const cdktnPackageName = await this.tryGetPackageName(constraint, true);
161
- if (!cdktfPackageName && !cdktnPackageName)
162
- return; // not available as pre-built provider, so can't be installed as such
163
- commons_1.logger.debug(`Expecting package ${cdktfPackageName} or ${cdktnPackageName} to be installed if provider is installed as pre-built one`);
164
- let installedPackages;
165
- try {
166
- installedPackages = await this.packageManager.listProviderPackages();
167
- }
168
- catch (e) {
169
- throw new Error(`Failed to list packages: ${e}`);
170
- }
171
- commons_1.logger.debug(`Installed packages found: ${JSON.stringify(installedPackages, null, 2)}`);
172
- return (_a = installedPackages.find((pkg) => pkg.name === cdktfPackageName || pkg.name === cdktnPackageName)) === null || _a === void 0 ? void 0 : _a.version;
173
- }
174
- async upgradePrebuiltProvider(constraint, currentVersion) {
175
- commons_1.logger.debug(`Searching for latest matching version of ${constraint.simplifiedName}`);
176
- const { name, version } = await this.getMatchingProviderVersion(constraint);
177
- commons_1.logger.debug(`Found package ${name}@${version}`);
178
- if (version !== currentVersion) {
179
- await this.packageManager.addPackage(name, version);
180
- }
181
- else {
182
- console.log(`The latest version of ${name} is already installed: ${version}`);
183
- }
184
- }
185
- async hasPrebuiltProvider(constraint) {
186
- commons_1.logger.debug(`determining whether pre-built provider exists for ${constraint.source} with version constraint ${constraint.version} and cdktf version ${this.cdktfVersion}`);
187
- commons_1.logger.info(`Checking whether pre-built provider exists for the following constraints:
188
- provider: ${constraint.simplifiedName}
189
- version : ${constraint.version || "latest"}
190
- language: ${this.targetLanguage}
191
- cdktf : ${this.cdktfVersion}
192
- `);
193
- if (this.targetLanguage === commons_1.Language.GO &&
194
- semver.lt(this.cdktfVersion, "0.12.0")) {
195
- commons_1.logger.info(`Before CDKTF 0.12.0 there were no pre-built providers published for Go.`);
196
- return false;
197
- }
198
- const v = await (0, prebuilt_providers_1.getPrebuiltProviderVersions)(constraint, this.cdktfVersion);
199
- const exists = v !== null;
200
- if (exists) {
201
- commons_1.logger.info(`Found pre-built provider.`);
202
- }
203
- else {
204
- commons_1.logger.info(`Pre-built provider does not exist for the given constraints.`);
205
- }
206
- return exists;
207
- }
208
- async tryGetPackageName(constraint, useCdktn) {
209
- const npmPackageName = await (0, prebuilt_providers_1.getNpmPackageName)(constraint, useCdktn);
210
- if (!npmPackageName)
211
- return;
212
- return this.tryGetLanguagePackageName(npmPackageName);
213
- }
214
- async tryGetLanguagePackageName(npmPackageName) {
215
- const prebuiltProviderRepository = await (0, prebuilt_providers_1.getPrebuiltProviderRepositoryName)(npmPackageName);
216
- return this.convertPackageName(npmPackageName, prebuiltProviderRepository, npmPackageName.startsWith("@cdktn"));
217
- }
218
- async getMatchingProviderVersion(constraint) {
219
- const prebuiltProviderNpmVersions = await (0, prebuilt_providers_1.getPrebuiltProviderVersions)(constraint, this.cdktfVersion);
220
- if (!prebuiltProviderNpmVersions) {
221
- throw commons_1.Errors.Usage(`No pre-built provider found for ${constraint.source} with version constraint ${constraint.version} and cdktf version ${this.cdktfVersion}`);
222
- }
223
- const packageVersion = await this.getLanguageSpecificPackageVersion(prebuiltProviderNpmVersions);
224
- if (!packageVersion) {
225
- throw commons_1.Errors.Usage(`No pre-built provider found for ${constraint.source} with version constraint ${constraint.version} and cdktf version ${this.cdktfVersion} for language ${this.targetLanguage}.`);
226
- }
227
- return packageVersion;
228
- }
229
- async addPrebuiltProvider(constraint, silent = false) {
230
- commons_1.logger.debug(`adding pre-built provider ${constraint.source} with version constraint ${constraint.version} for cdktf version ${this.cdktfVersion}`);
231
- const { name, version } = await this.getMatchingProviderVersion(constraint);
232
- await this.packageManager.addPackage(name, version, silent);
233
- // TODO: more debug logs
234
- }
235
- // The version we use for npm might differ from other registries
236
- // This happens mostly in cases where a provider update failed to publish to one of the registries
237
- // In that case we use the latest version that was published successfully and works with the current cdktf release
238
- async getLanguageSpecificPackageVersion(prebuiltProviderNpmVersions) {
239
- commons_1.logger.debug("Found possibly matching versions (released on npm): ", prebuiltProviderNpmVersions);
240
- commons_1.logger.debug("Searching through package manager to find latest available version for given language");
241
- for (const { name, version } of prebuiltProviderNpmVersions) {
242
- try {
243
- const languagePackageName = await this.tryGetLanguagePackageName(name);
244
- if (!languagePackageName)
245
- continue;
246
- const isAvailable = await this.packageManager.isNpmVersionAvailable(languagePackageName, version);
247
- if (isAvailable) {
248
- return { name: languagePackageName, version };
249
- }
250
- }
251
- catch (err) {
252
- commons_1.logger.info(`Could not find version ${version} for package ${name}: '${err}'. Skipping...`);
253
- }
254
- }
255
- return null;
256
- }
257
- async addLocalProvider(constraint) {
258
- commons_1.logger.info(`Adding local provider ${constraint.source} with version constraint ${constraint.version} to cdktf.json`);
259
- if (!constraint.version && constraint.isFromTerraformRegistry()) {
260
- const v = await (0, registry_api_1.getLatestVersion)(constraint);
261
- if (v) {
262
- constraint = new ProviderConstraint(constraint.source,
263
- // "1.3.2" -> "~> 1.3"
264
- `~> ${v.split(".").slice(0, 2).join(".")}`);
265
- }
266
- else {
267
- throw commons_1.Errors.Usage(`Could not find a version for the provider '${constraint}' in the public registry. This could be due to a typo, please take a look at https://cdk.tf/registry-providers to find all supported providers.`);
268
- }
269
- }
270
- await new cdktf_config_manager_1.CdktfConfigManager().addProvider(constraint);
271
- }
272
- /**
273
- * Converts an NPM package name of a pre-built provider package to the name in the target language
274
- */
275
- convertPackageName(name, repository, useCdktn) {
276
- return useCdktn
277
- ? this.convertPackageNameCdktn(name, repository)
278
- : this.convertPackageNameCdktf(name, repository);
279
- }
280
- /**
281
- * Converts an NPM package name of a pre-built provider package to the name in the target language
282
- */
283
- convertPackageNameCdktf(name, repository) {
284
- const providerName = name.replace("@cdktf/provider-", "");
285
- switch (this.targetLanguage) {
286
- case commons_1.Language.GO: // e.g. github.com/cdktf/cdktf-provider-opentelekomcloud-go/opentelekomcloud
287
- if (repository) {
288
- return `${repository}-go/${providerName}`;
289
- }
290
- return `github.com/cdktf/cdktf-provider-${providerName}-go/${providerName}`;
291
- case commons_1.Language.TYPESCRIPT: // e.g. @cdktf/provider-random
292
- return name; // already the correct name
293
- case commons_1.Language.CSHARP: // e.g. HashiCorp.Cdktf.Providers.Opentelekomcloud
294
- return `HashiCorp.Cdktf.Providers.` + (0, codemaker_1.toPascalCase)(providerName);
295
- case commons_1.Language.JAVA: // e.g. com.hashicorp.opentelekomcloud
296
- return `com.hashicorp.cdktf-provider-${providerName}`;
297
- case commons_1.Language.PYTHON: // e.g. cdktf-cdktf-provider-opentelekomcloud
298
- return `cdktf-cdktf-provider-${providerName}`;
299
- default:
300
- throw new Error(`converting package name for language ${this.targetLanguage} not implemented yet`);
301
- }
302
- }
303
- /**
304
- * Converts an NPM package name of a pre-built provider package to the name in the target language
305
- */
306
- convertPackageNameCdktn(name, repository) {
307
- const providerName = name.replace("@cdktn/provider-", "");
308
- switch (this.targetLanguage) {
309
- case commons_1.Language.GO: // e.g. github.com/cdktf/cdktf-provider-opentelekomcloud-go/opentelekomcloud
310
- if (repository) {
311
- return `${repository}-go/${providerName}`;
312
- }
313
- return `github.com/cdktn-io/cdktn-provider-${providerName}-go/${providerName}`;
314
- case commons_1.Language.TYPESCRIPT: // e.g. @cdktf/provider-random
315
- return name; // already the correct name
316
- case commons_1.Language.CSHARP: // e.g. HashiCorp.Cdktf.Providers.Opentelekomcloud
317
- return `Io.Cdktn.Providers.` + (0, codemaker_1.toPascalCase)(providerName);
318
- case commons_1.Language.JAVA: // e.g. com.hashicorp.opentelekomcloud
319
- return `io.cdktn.cdktn-provider-${providerName}`;
320
- case commons_1.Language.PYTHON: // e.g. cdktf-cdktf-provider-opentelekomcloud
321
- return `cdktn-provider-${providerName}`;
322
- default:
323
- throw new Error(`converting package name for language ${this.targetLanguage} not implemented yet`);
324
- }
325
- }
326
- /**
327
- * Converts an package name of a pre-built provider package in target language to the name in npm
328
- * Inverse of: `convertPackageName`
329
- */
330
- convertFromPackageNameToNpm(name) {
331
- const regexes = {
332
- [commons_1.Language.GO]: /github.com\/(?:cdktf|hashicorp|cdktn-io)\/cdkt([fn])-provider-(.+)-go\//i,
333
- [commons_1.Language.TYPESCRIPT]: /(.+)/i,
334
- [commons_1.Language.CSHARP]: /(?:HashiCorp|Io)\.Cdkt([fn])\.Providers\.(.+)/i,
335
- [commons_1.Language.JAVA]: /(?:com\.hashicorp|io\.cdktn)\.cdkt([fn])-provider-(.+)/i,
336
- [commons_1.Language.PYTHON]: /(?:cdktf-)?cdkt([fn])-provider-(.+)/i,
337
- };
338
- const regex = regexes[this.targetLanguage];
339
- if (!regex) {
340
- throw commons_1.Errors.Usage("Language not supported for pre-built providers");
341
- }
342
- const match = regex.exec(name);
343
- if (!match) {
344
- throw new Error(`Package name is not in expected format: ${name}`);
345
- }
346
- const npmPackagePrefix = `@cdkt${match[1]}/provider-`;
347
- switch (this.targetLanguage) {
348
- case commons_1.Language.GO: // e.g. github.com/cdktf/cdktf-provider-opentelekomcloud-go/opentelekomcloud
349
- return npmPackagePrefix + match[2];
350
- case commons_1.Language.TYPESCRIPT: // e.g. @cdktf/provider-random
351
- return match[1]; // already the correct name
352
- case commons_1.Language.CSHARP: // e.g. HashiCorp.Cdktf.Providers.Opentelekomcloud
353
- return npmPackagePrefix + (0, codemaker_1.toSnakeCase)(match[2]);
354
- case commons_1.Language.JAVA: // e.g. com.hashicorp.opentelekomcloud
355
- return npmPackagePrefix + match[2];
356
- case commons_1.Language.PYTHON: // e.g. cdktf-cdktf-provider-opentelekomcloud
357
- return npmPackagePrefix + match[2];
358
- default:
359
- throw new Error(`converting package name for language ${this.targetLanguage} not implemented yet`);
360
- }
361
- }
362
- async allProviders() {
363
- const cdktfJson = cdktf_config_1.CdktfConfig.read();
364
- const localVersions = new local_provider_versions_1.LocalProviderVersions();
365
- const localProviderConfigs = cdktfJson.terraformProviders;
366
- const prebuiltProviderConfigs = await this.packageManager.listProviderPackages();
367
- const prebuiltProvidersInfo = await Promise.all(prebuiltProviderConfigs.map(async (prebuiltProviderConfig) => {
368
- const packageName = this.convertFromPackageNameToNpm(prebuiltProviderConfig.name);
369
- const providerInformation = await (0, prebuilt_providers_1.getPrebuiltProviderVersionInformation)(packageName, prebuiltProviderConfig.version);
370
- return {
371
- ...providerInformation,
372
- packageName: prebuiltProviderConfig.name,
373
- };
374
- }));
375
- const constraints = new local_provider_constraints_1.LocalProviderConstraints();
376
- const localProvidersInfo = await Promise.all(localProviderConfigs.map(async (localProviderConfig) => {
377
- const constraint = ProviderConstraint.fromConfigEntry(localProviderConfig);
378
- const version = await localVersions.versionForProvider(constraint.simplifiedName);
379
- const constraintValue = await constraints.constraintForProvider(constraint.simplifiedName);
380
- return {
381
- providerName: constraint.simplifiedName,
382
- providerConstraint: constraintValue || constraint.version,
383
- providerVersion: version,
384
- };
385
- }));
386
- return {
387
- local: localProvidersInfo,
388
- prebuilt: prebuiltProvidersInfo,
389
- };
390
- }
391
- }
392
- exports.DependencyManager = DependencyManager;
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FLd0I7QUFDeEIseUNBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxpRUFBNEQ7QUFDNUQsdURBQW1EO0FBQ25ELDZEQUs4QjtBQUM5QixpREFBa0Q7QUFDbEQsK0RBQWlFO0FBQ2pFLCtDQUFpQztBQUNqQyx3RUFBbUU7QUFDbkUsOEVBQXlFO0FBRXpFLGlGQUFpRjtBQUNwRSxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQzNDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQzdDLFNBQVMsdUJBQXVCLENBQUMsTUFBYztJQUM3Qyx3Q0FBd0M7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxHQUFHLHdCQUFnQixJQUFJLHlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlELEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QztZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxrQkFBa0I7SUFPN0IsbUVBQW1FO0lBQ25FLHNFQUFzRTtJQUN0RSw0R0FBNEc7SUFDNUcsWUFDRSxNQUFjLEVBQ0UsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxDQUFD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Q0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUM3RCxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1lBRUYsT0FBTztnQkFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWM7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxVQUFVLENBQUMsT0FBTztnQkFDekQsZUFBZSxFQUFFLE9BQU87YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExWkQsOENBMFpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4uL2Nka3RmLWNvbmZpZ1wiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnLW1hbmFnZXJcIjtcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vcGFja2FnZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBnZXROcG1QYWNrYWdlTmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclJlcG9zaXRvcnlOYW1lLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbkluZm9ybWF0aW9uLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMsXG59IGZyb20gXCIuL3ByZWJ1aWx0LXByb3ZpZGVyc1wiO1xuaW1wb3J0IHsgZ2V0TGF0ZXN0VmVyc2lvbiB9IGZyb20gXCIuL3JlZ2lzdHJ5LWFwaVwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJWZXJzaW9ucyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci12ZXJzaW9uc1wiO1xuaW1wb3J0IHsgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzIH0gZnJvbSBcIi4uL2xvY2FsLXByb3ZpZGVyLWNvbnN0cmFpbnRzXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly93d3cudGVycmFmb3JtLmlvL2xhbmd1YWdlL3Byb3ZpZGVycy9yZXF1aXJlbWVudHMjc291cmNlLWFkZHJlc3Nlc1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSE9TVE5BTUUgPSBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gXCJoYXNoaWNvcnBcIjtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3ZpZGVyU291cmNlKHNvdXJjZTogc3RyaW5nKSB7XG4gIC8vIHJldHVybnMgPEhPU1ROQU1FPi88TkFNRVNQQUNFPi88VFlQRT5cbiAgY29uc3Qgc2xhc2hlcyA9IHNvdXJjZS5zcGxpdChcIi9cIikubGVuZ3RoIC0gMTtcbiAgc3dpdGNoIChzbGFzaGVzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7REVGQVVMVF9OQU1FU1BBQ0V9LyR7c291cmNlfWA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7c291cmNlfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyQ29uc3RyYWludCB7XG4gIC8qKlxuICAgKiBub3JtYWxpemVkIHNvdXJjZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXCJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvLyBUT0RPOiBhZGQgZXhhbXBsZXMgdG8gY2xpIGNvbW1hbmQgZGVzY3JpcHRpb24gKGkuZS4gPSx+Pi4+IGV0Yy4pXG4gIC8vIGlmIG5vIHZlcnNpb24gY29uc3RyYWludCBpcyBzcGVjaWZpZWQsIHdlIGFzc3VtZSB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgLy8gaWYgc3BlY2lmaWMgdmVyc2lvbiBpcyBzcGVjaWZpZWQgd2l0aG91dCBlLmcuID0sIHdlIGFsbG93IHBhdGNoIGxldmVsIGluY3JlbWVudHMgKGUuZy4gfj4yLjEyIGZvciBcIjIuMTJcIilcbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2UpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db25maWdFbnRyeShcbiAgICBwcm92aWRlcjogc3RyaW5nIHwgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gICk6IFByb3ZpZGVyQ29uc3RyYWludCB7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgW3NyYywgdmVyc2lvbl0gPSBwcm92aWRlci5zcGxpdChcIkBcIik7XG4gICAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgICAgc3JjLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbiA/IHZlcnNpb24udHJpbSgpIDogdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmMgPVxuICAgICAgKHByb3ZpZGVyLm5hbWVzcGFjZSA/IGAke3Byb3ZpZGVyLm5hbWVzcGFjZX0vYCA6IFwiXCIpICtcbiAgICAgIChwcm92aWRlci5zb3VyY2UgfHwgcHJvdmlkZXIubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChzcmMsIHByb3ZpZGVyLnZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGlzRnJvbVRlcnJhZm9ybVJlZ2lzdHJ5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RuYW1lID09PSBERUZBVUxUX0hPU1ROQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJoYXNoaWNvcnBcIiBvciBcImtyZXV6d2Vya2VyXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZXNwYWNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcImF3c1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc3BsaXQoXCIvXCIpWzJdO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBob3N0bmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgc2ltcGxpZmllZCBwcm92aWRlciBuYW1lLCBkcm9wcGluZyBuYW1lc3BhY2UgYW5kIGhvc3RuYW1lXG4gICAqIGlmIHRoZXkgbWF0Y2ggdGhlIGRlZmF1bHRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpbXBsaWZpZWROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlXG4gICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBERUZBVUxUX0hPU1ROQU1FICYmIHBhcnQgIT09IERFRkFVTFRfTkFNRVNQQUNFKVxuICAgICAgLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgdmVyc2lvbiBjb25zdHJhaW50IG1hdGNoZXMgdGhlIGdpdmVuIHZlcnNpb25cbiAgICogQHBhcmFtIHZlcnNpb24gYW4gYWN0dWFsIHZlcnNpb24gKGUuZy4gXCI0LjEyLjFcIilcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmVyc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnN0cmFpbnRcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50KHZlcnNpb24sIHRoaXMudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNvdXJjZX0ke3RoaXMudmVyc2lvbiA/IGBAJHt0aGlzLnZlcnNpb259YCA6IFwiXCJ9YDtcbiAgfVxufVxuXG4vKipcbiAqIG1hbmFnZXMgZGVwZW5kZW5jaWVzIG9mIGEgQ0RLVE4gcHJvamVjdCAoZS5nLiB0ZXJyYWZvcm0gcHJvdmlkZXJzKVxuICovXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jeU1hbmFnZXIge1xuICBwcml2YXRlIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZSxcbiAgICBwcml2YXRlIGNka3RmVmVyc2lvbjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdERpcmVjdG9yeTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnBhY2thZ2VNYW5hZ2VyID0gUGFja2FnZU1hbmFnZXIuZm9yTGFuZ3VhZ2UoXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHRoaXMucHJvamVjdERpcmVjdG9yeSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICApOiBQcm9taXNlPHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBib29sZWFuIH0+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5oYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTG9jYWxQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXBncmFkaW5nICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0uLi5gKTtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBuZXcgQ2RrdGZDb25maWdNYW5hZ2VyKCk7XG4gICAgY29uc3QgcHJlYnVpbHRWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGlmIChwcmVidWlsdFZlcnNpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCwgcHJlYnVpbHRWZXJzaW9uKTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKGF3YWl0IGNka3RmSnNvbi5oYXNQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgY2RrdGZKc29uLnVwZGF0ZVByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgYFRyeWluZyB0byB1cGdyYWRlICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0gYnV0IGl0IGlzIG5vdCBpbnN0YWxsZWQsIHBsZWFzZSB1c2UgXCJjZGt0biBwcm92aWRlciBhZGQgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVwiIHRvIGFkZCBpdC5gLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyBpZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGlzIGluc3RhbGxlZC4uLmApO1xuICAgIGNvbnN0IGNka3RmUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldFBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIGZhbHNlKTtcbiAgICBjb25zdCBjZGt0blBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCB0cnVlKTtcblxuICAgIGlmICghY2RrdGZQYWNrYWdlTmFtZSAmJiAhY2RrdG5QYWNrYWdlTmFtZSkgcmV0dXJuOyAvLyBub3QgYXZhaWxhYmxlIGFzIHByZS1idWlsdCBwcm92aWRlciwgc28gY2FuJ3QgYmUgaW5zdGFsbGVkIGFzIHN1Y2hcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBFeHBlY3RpbmcgcGFja2FnZSAke2Nka3RmUGFja2FnZU5hbWV9IG9yICR7Y2RrdG5QYWNrYWdlTmFtZX0gdG8gYmUgaW5zdGFsbGVkIGlmIHByb3ZpZGVyIGlzIGluc3RhbGxlZCBhcyBwcmUtYnVpbHQgb25lYCxcbiAgICApO1xuXG4gICAgbGV0IGluc3RhbGxlZFBhY2thZ2VzO1xuICAgIHRyeSB7XG4gICAgICBpbnN0YWxsZWRQYWNrYWdlcyA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIubGlzdFByb3ZpZGVyUGFja2FnZXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHBhY2thZ2VzOiAke2V9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEluc3RhbGxlZCBwYWNrYWdlcyBmb3VuZDogJHtKU09OLnN0cmluZ2lmeShpbnN0YWxsZWRQYWNrYWdlcywgbnVsbCwgMil9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGluc3RhbGxlZFBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PiBwa2cubmFtZSA9PT0gY2RrdGZQYWNrYWdlTmFtZSB8fCBwa2cubmFtZSA9PT0gY2RrdG5QYWNrYWdlTmFtZSxcbiAgICApPy52ZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgdXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmcsXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBTZWFyY2hpbmcgZm9yIGxhdGVzdCBtYXRjaGluZyB2ZXJzaW9uIG9mICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1gLFxuICAgICk7XG5cbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGF3YWl0IHRoaXMuZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludCk7XG5cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIHBhY2thZ2UgJHtuYW1lfUAke3ZlcnNpb259YCk7XG4gICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mICR7bmFtZX0gaXMgYWxyZWFkeSBpbnN0YWxsZWQ6ICR7dmVyc2lvbn1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBkZXRlcm1pbmluZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludHM6XG4gIHByb3ZpZGVyOiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9XG4gIHZlcnNpb24gOiAke2NvbnN0cmFpbnQudmVyc2lvbiB8fCBcImxhdGVzdFwifVxuICBsYW5ndWFnZTogJHt0aGlzLnRhcmdldExhbmd1YWdlfVxuICBjZGt0ZiAgIDogJHt0aGlzLmNka3RmVmVyc2lvbn1cbmApO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR08gJiZcbiAgICAgIHNlbXZlci5sdCh0aGlzLmNka3RmVmVyc2lvbiwgXCIwLjEyLjBcIilcbiAgICApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQmVmb3JlIENES1RGIDAuMTIuMCB0aGVyZSB3ZXJlIG5vIHByZS1idWlsdCBwcm92aWRlcnMgcHVibGlzaGVkIGZvciBHby5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2ID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNvbnN0cmFpbnQsIHRoaXMuY2RrdGZWZXJzaW9uKTtcbiAgICBjb25zdCBleGlzdHMgPSB2ICE9PSBudWxsO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oYEZvdW5kIHByZS1idWlsdCBwcm92aWRlci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBQcmUtYnVpbHQgcHJvdmlkZXIgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cnlHZXRQYWNrYWdlTmFtZShcbiAgICBjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsXG4gICAgdXNlQ2RrdG46IGJvb2xlYW4sXG4gICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbnBtUGFja2FnZU5hbWUgPSBhd2FpdCBnZXROcG1QYWNrYWdlTmFtZShjb25zdHJhaW50LCB1c2VDZGt0bik7XG5cbiAgICBpZiAoIW5wbVBhY2thZ2VOYW1lKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy50cnlHZXRMYW5ndWFnZVBhY2thZ2VOYW1lKG5wbVBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShcbiAgICBucG1QYWNrYWdlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5ID1cbiAgICAgIGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZShucG1QYWNrYWdlTmFtZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgICBucG1QYWNrYWdlTmFtZSxcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5LFxuICAgICAgbnBtUGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBjZGt0blwiKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKFxuICAgICAgY29uc3RyYWludCxcbiAgICAgIHRoaXMuY2RrdGZWZXJzaW9uLFxuICAgICk7XG4gICAgaWYgKCFwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgTm8gcHJlLWJ1aWx0IHByb3ZpZGVyIGZvdW5kIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn0gZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYGFkZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGZvciBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuYWRkUGFja2FnZShuYW1lLCB2ZXJzaW9uLCBzaWxlbnQpO1xuXG4gICAgLy8gVE9ETzogbW9yZSBkZWJ1ZyBsb2dzXG4gIH1cblxuICAvLyBUaGUgdmVyc2lvbiB3ZSB1c2UgZm9yIG5wbSBtaWdodCBkaWZmZXIgZnJvbSBvdGhlciByZWdpc3RyaWVzXG4gIC8vIFRoaXMgaGFwcGVucyBtb3N0bHkgaW4gY2FzZXMgd2hlcmUgYSBwcm92aWRlciB1cGRhdGUgZmFpbGVkIHRvIHB1Ymxpc2ggdG8gb25lIG9mIHRoZSByZWdpc3RyaWVzXG4gIC8vIEluIHRoYXQgY2FzZSB3ZSB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIHRoYXQgd2FzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkgYW5kIHdvcmtzIHdpdGggdGhlIGN1cnJlbnQgY2RrdGYgcmVsZWFzZVxuICBwcml2YXRlIGFzeW5jIGdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnM6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdLFxuICApOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkZvdW5kIHBvc3NpYmx5IG1hdGNoaW5nIHZlcnNpb25zIChyZWxlYXNlZCBvbiBucG0pOiBcIixcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiU2VhcmNoaW5nIHRocm91Z2ggcGFja2FnZSBtYW5hZ2VyIHRvIGZpbmQgbGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9uIGZvciBnaXZlbiBsYW5ndWFnZVwiLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9IG9mIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VQYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZVBhY2thZ2VOYW1lKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgICAgICAgIGxhbmd1YWdlUGFja2FnZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogbGFuZ3VhZ2VQYWNrYWdlTmFtZSwgdmVyc2lvbiB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZlcnNpb24gJHt2ZXJzaW9ufSBmb3IgcGFja2FnZSAke25hbWV9OiAnJHtlcnJ9Jy4gU2tpcHBpbmcuLi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQWRkaW5nIGxvY2FsIHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSB0byBjZGt0Zi5qc29uYCxcbiAgICApO1xuXG4gICAgaWYgKCFjb25zdHJhaW50LnZlcnNpb24gJiYgY29uc3RyYWludC5pc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpKSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbihjb25zdHJhaW50KTtcbiAgICAgIGlmICh2KSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICAgICAgIC8vIFwiMS4zLjJcIiAtPiBcIn4+IDEuM1wiXG4gICAgICAgICAgYH4+ICR7di5zcGxpdChcIi5cIikuc2xpY2UoMCwgMikuam9pbihcIi5cIil9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIGZvciB0aGUgcHJvdmlkZXIgJyR7Y29uc3RyYWludH0nIGluIHRoZSBwdWJsaWMgcmVnaXN0cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgdHlwbywgcGxlYXNlIHRha2UgYSBsb29rIGF0IGh0dHBzOi8vY2RrLnRmL3JlZ2lzdHJ5LXByb3ZpZGVycyB0byBmaW5kIGFsbCBzdXBwb3J0ZWQgcHJvdmlkZXJzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IENka3RmQ29uZmlnTWFuYWdlcigpLmFkZFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICAgIHVzZUNka3RuOiBib29sZWFuLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1c2VDZGt0blxuICAgICAgPyB0aGlzLmNvbnZlcnRQYWNrYWdlTmFtZUNka3RuKG5hbWUsIHJlcG9zaXRvcnkpXG4gICAgICA6IHRoaXMuY29udmVydFBhY2thZ2VOYW1lQ2RrdGYobmFtZSwgcmVwb3NpdG9yeSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gTlBNIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIHRvIHRoZSBuYW1lIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2VcbiAgICovXG4gIHByaXZhdGUgY29udmVydFBhY2thZ2VOYW1lQ2RrdGYobmFtZTogc3RyaW5nLCByZXBvc2l0b3J5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG5hbWUucmVwbGFjZShcIkBjZGt0Zi9wcm92aWRlci1cIiwgXCJcIik7XG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIGAke3JlcG9zaXRvcnl9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItJHtwcm92aWRlck5hbWV9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbmFtZTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLmAgKyB0b1Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY2RrdGYtY2RrdGYtcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZUNka3RuKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByZXBvc2l0b3J5OiBzdHJpbmcsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJvdmlkZXJOYW1lID0gbmFtZS5yZXBsYWNlKFwiQGNka3RuL3Byb3ZpZGVyLVwiLCBcIlwiKTtcbiAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086IC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkLWdvL29wZW50ZWxla29tY2xvdWRcbiAgICAgICAgaWYgKHJlcG9zaXRvcnkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cmVwb3NpdG9yeX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgZ2l0aHViLmNvbS9jZGt0bi1pby9jZGt0bi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDogLy8gZS5nLiBAY2RrdGYvcHJvdmlkZXItcmFuZG9tXG4gICAgICAgIHJldHVybiBuYW1lOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYElvLkNka3RuLlByb3ZpZGVycy5gICsgdG9QYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBjZGt0bi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBjb252ZXJ0aW5nIHBhY2thZ2UgbmFtZSBmb3IgbGFuZ3VhZ2UgJHt0aGlzLnRhcmdldExhbmd1YWdlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgaW4gdGFyZ2V0IGxhbmd1YWdlIHRvIHRoZSBuYW1lIGluIG5wbVxuICAgKiBJbnZlcnNlIG9mOiBgY29udmVydFBhY2thZ2VOYW1lYFxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0RnJvbVBhY2thZ2VOYW1lVG9OcG0obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdleGVzID0ge1xuICAgICAgW0xhbmd1YWdlLkdPXTpcbiAgICAgICAgL2dpdGh1Yi5jb21cXC8oPzpjZGt0ZnxoYXNoaWNvcnB8Y2RrdG4taW8pXFwvY2RrdChbZm5dKS1wcm92aWRlci0oLispLWdvXFwvL2ksXG4gICAgICBbTGFuZ3VhZ2UuVFlQRVNDUklQVF06IC8oLispL2ksXG4gICAgICBbTGFuZ3VhZ2UuQ1NIQVJQXTogLyg/Okhhc2hpQ29ycHxJbylcXC5DZGt0KFtmbl0pXFwuUHJvdmlkZXJzXFwuKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLkpBVkFdOlxuICAgICAgICAvKD86Y29tXFwuaGFzaGljb3JwfGlvXFwuY2RrdG4pXFwuY2RrdChbZm5dKS1wcm92aWRlci0oLispL2ksXG4gICAgICBbTGFuZ3VhZ2UuUFlUSE9OXTogLyg/OmNka3RmLSk/Y2RrdChbZm5dKS1wcm92aWRlci0oLispL2ksXG4gICAgfTtcbiAgICBjb25zdCByZWdleCA9IHJlZ2V4ZXNbdGhpcy50YXJnZXRMYW5ndWFnZV07XG4gICAgaWYgKCFyZWdleCkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCBmb3IgcHJlLWJ1aWx0IHByb3ZpZGVyc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWNrYWdlIG5hbWUgaXMgbm90IGluIGV4cGVjdGVkIGZvcm1hdDogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2VQcmVmaXggPSBgQGNka3Qke21hdGNoWzFdfS9wcm92aWRlci1gO1xuXG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgbWF0Y2hbMl07XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbWF0Y2hbMV07IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgdG9TbmFrZUNhc2UobWF0Y2hbMl0pO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBjb252ZXJ0aW5nIHBhY2thZ2UgbmFtZSBmb3IgbGFuZ3VhZ2UgJHt0aGlzLnRhcmdldExhbmd1YWdlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWxsUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IGNka3RmSnNvbiA9IENka3RmQ29uZmlnLnJlYWQoKTtcbiAgICBjb25zdCBsb2NhbFZlcnNpb25zID0gbmV3IExvY2FsUHJvdmlkZXJWZXJzaW9ucygpO1xuXG4gICAgY29uc3QgbG9jYWxQcm92aWRlckNvbmZpZ3MgPSBjZGt0Zkpzb24udGVycmFmb3JtUHJvdmlkZXJzO1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJDb25maWdzID1cbiAgICAgIGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIubGlzdFByb3ZpZGVyUGFja2FnZXMoKTtcblxuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJzSW5mbyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcHJlYnVpbHRQcm92aWRlckNvbmZpZ3MubWFwKGFzeW5jIChwcmVidWlsdFByb3ZpZGVyQ29uZmlnKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gdGhpcy5jb252ZXJ0RnJvbVBhY2thZ2VOYW1lVG9OcG0oXG4gICAgICAgICAgcHJlYnVpbHRQcm92aWRlckNvbmZpZy5uYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHByb3ZpZGVySW5mb3JtYXRpb24gPSBhd2FpdCBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbkluZm9ybWF0aW9uKFxuICAgICAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWcudmVyc2lvbixcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByb3ZpZGVySW5mb3JtYXRpb24sXG4gICAgICAgICAgcGFja2FnZU5hbWU6IHByZWJ1aWx0UHJvdmlkZXJDb25maWcubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50cyA9IG5ldyBMb2NhbFByb3ZpZGVyQ29uc3RyYWludHMoKTtcblxuICAgIGNvbnN0IGxvY2FsUHJvdmlkZXJzSW5mbyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbG9jYWxQcm92aWRlckNvbmZpZ3MubWFwKGFzeW5jIChsb2NhbFByb3ZpZGVyQ29uZmlnKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPVxuICAgICAgICAgIFByb3ZpZGVyQ29uc3RyYWludC5mcm9tQ29uZmlnRW50cnkobG9jYWxQcm92aWRlckNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBsb2NhbFZlcnNpb25zLnZlcnNpb25Gb3JQcm92aWRlcihcbiAgICAgICAgICBjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50VmFsdWUgPSBhd2FpdCBjb25zdHJhaW50cy5jb25zdHJhaW50Rm9yUHJvdmlkZXIoXG4gICAgICAgICAgY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyTmFtZTogY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgICBwcm92aWRlckNvbnN0cmFpbnQ6IGNvbnN0cmFpbnRWYWx1ZSB8fCBjb25zdHJhaW50LnZlcnNpb24sXG4gICAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsb2NhbDogbG9jYWxQcm92aWRlcnNJbmZvLFxuICAgICAgcHJlYnVpbHQ6IHByZWJ1aWx0UHJvdmlkZXJzSW5mbyxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["package-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAOT,MAAM,gBAAgB,CAAC;AA+ExB;;;;GAIG;AACH,8BAAsB,cAAc;IACtB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM;gBAAxB,gBAAgB,EAAE,MAAM;WAEzC,WAAW,CACvB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,MAAM,GACvB,cAAc;aAoBD,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;aAGA,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC;aAEH,oBAAoB,IAAI,OAAO,CAC7C;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CACpC;CACF"}