@cdktn/commons 0.21.0

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 (59) hide show
  1. package/README.md +3 -0
  2. package/ambient.d.ts +14 -0
  3. package/eslint.config.mjs +77 -0
  4. package/jest.config.js +19 -0
  5. package/package.json +76 -0
  6. package/src/checkpoint.d.ts +19 -0
  7. package/src/checkpoint.d.ts.map +1 -0
  8. package/src/checkpoint.js +176 -0
  9. package/src/config.d.ts +61 -0
  10. package/src/config.d.ts.map +1 -0
  11. package/src/config.js +267 -0
  12. package/src/config.test.d.ts +2 -0
  13. package/src/config.test.d.ts.map +1 -0
  14. package/src/config.test.js +680 -0
  15. package/src/construct-maker-target.d.ts +57 -0
  16. package/src/construct-maker-target.d.ts.map +1 -0
  17. package/src/construct-maker-target.js +129 -0
  18. package/src/construct-maker-target.test.d.ts +6 -0
  19. package/src/construct-maker-target.test.d.ts.map +1 -0
  20. package/src/construct-maker-target.test.js +72 -0
  21. package/src/debug.d.ts +13 -0
  22. package/src/debug.d.ts.map +1 -0
  23. package/src/debug.js +379 -0
  24. package/src/environment.d.ts +4 -0
  25. package/src/environment.d.ts.map +1 -0
  26. package/src/environment.js +15 -0
  27. package/src/errors.d.ts +10 -0
  28. package/src/errors.d.ts.map +1 -0
  29. package/src/errors.js +75 -0
  30. package/src/gradle.d.ts +19 -0
  31. package/src/gradle.d.ts.map +1 -0
  32. package/src/gradle.js +160 -0
  33. package/src/index.d.ts +15 -0
  34. package/src/index.d.ts.map +1 -0
  35. package/src/index.js +33 -0
  36. package/src/logging.d.ts +17 -0
  37. package/src/logging.d.ts.map +1 -0
  38. package/src/logging.js +117 -0
  39. package/src/module-schema.d.ts +17 -0
  40. package/src/module-schema.d.ts.map +1 -0
  41. package/src/module-schema.js +3 -0
  42. package/src/provider-schema.d.ts +99 -0
  43. package/src/provider-schema.d.ts.map +1 -0
  44. package/src/provider-schema.js +21 -0
  45. package/src/terraform-module.d.ts +2 -0
  46. package/src/terraform-module.d.ts.map +1 -0
  47. package/src/terraform-module.js +23 -0
  48. package/src/terraform-module.test.d.ts +6 -0
  49. package/src/terraform-module.test.d.ts.map +1 -0
  50. package/src/terraform-module.test.js +31 -0
  51. package/src/terraform.d.ts +3 -0
  52. package/src/terraform.d.ts.map +1 -0
  53. package/src/terraform.js +12 -0
  54. package/src/util.d.ts +39 -0
  55. package/src/util.d.ts.map +1 -0
  56. package/src/util.js +262 -0
  57. package/src/version.d.ts +2 -0
  58. package/src/version.d.ts.map +1 -0
  59. package/src/version.js +11 -0
package/src/config.js ADDED
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.logTimespan = exports.shouldCheckCodeMakerOutput = exports.readConfigSync = exports.parseConfig = exports.TerraformProviderConstraint = exports.TerraformModuleConstraint = exports.isLocalModule = exports.CONFIG_DEFAULTS = exports.LANGUAGES = exports.Language = void 0;
31
+ const fs = __importStar(require("fs-extra"));
32
+ const path = __importStar(require("path"));
33
+ const logging_1 = require("./logging");
34
+ const terraform_module_1 = require("./terraform-module");
35
+ const process_1 = require("process");
36
+ const codemaker_1 = require("codemaker");
37
+ var Language;
38
+ (function (Language) {
39
+ Language["TYPESCRIPT"] = "typescript";
40
+ Language["PYTHON"] = "python";
41
+ Language["CSHARP"] = "csharp";
42
+ Language["JAVA"] = "java";
43
+ Language["GO"] = "go";
44
+ })(Language || (exports.Language = Language = {}));
45
+ exports.LANGUAGES = [
46
+ Language.TYPESCRIPT,
47
+ Language.PYTHON,
48
+ Language.JAVA,
49
+ Language.CSHARP,
50
+ Language.GO,
51
+ ];
52
+ const CONTEXT_ENV = "CDKTF_CONTEXT_JSON";
53
+ const CONFIG_FILE = "cdktf.json";
54
+ exports.CONFIG_DEFAULTS = {
55
+ output: "cdktf.out",
56
+ codeMakerOutput: ".gen",
57
+ };
58
+ function isPresent(input) {
59
+ return Array.isArray(input) && input.length > 0;
60
+ }
61
+ function getLocalMatch(source) {
62
+ return source.match(/^(\.\/|\.\.\/|\.\\\\|\.\.\\\\)(.*)/);
63
+ }
64
+ function isLocalModule(source) {
65
+ return getLocalMatch(source) !== null;
66
+ }
67
+ exports.isLocalModule = isLocalModule;
68
+ class TerraformModuleConstraint {
69
+ constructor(item) {
70
+ if (typeof item === "string") {
71
+ const parsed = this.parseDependencyConstraint(item);
72
+ this.name = parsed.name;
73
+ this.source = parsed.source;
74
+ this.fqn = parsed.fqn;
75
+ this.version = parsed.version;
76
+ this.namespace = parsed.namespace;
77
+ }
78
+ else {
79
+ this.source = item.source;
80
+ this.name = item.name;
81
+ this.fqn = item.name;
82
+ this.version = item.version;
83
+ this.namespace = item.namespace;
84
+ }
85
+ const localMatch = getLocalMatch(this.source);
86
+ if (localMatch) {
87
+ this.localSourceAbsolutePath = path.join(process.cwd(), this.source);
88
+ }
89
+ }
90
+ get className() {
91
+ return (0, codemaker_1.toPascalCase)(this.name.replace(/[-/.]/g, "_"));
92
+ }
93
+ get fileName() {
94
+ return this.namespace ? `${this.namespace}/${this.name}` : this.name;
95
+ }
96
+ parseDependencyConstraint(item) {
97
+ var _a, _b, _c;
98
+ const localMatch = getLocalMatch(item);
99
+ if (localMatch) {
100
+ const fqn = localMatch[2];
101
+ const nameParts = fqn.split("/");
102
+ const name = (_a = nameParts.pop()) !== null && _a !== void 0 ? _a : fqn;
103
+ const namespace = nameParts.pop();
104
+ return {
105
+ name,
106
+ fqn,
107
+ source: item,
108
+ namespace,
109
+ };
110
+ }
111
+ const [source, version] = item.split("@");
112
+ let moduleParts = source.split("//");
113
+ if ((0, terraform_module_1.isRegistryModule)(moduleParts[0])) {
114
+ const nameParts = moduleParts[0].split("/");
115
+ const provider = nameParts.pop(); // last part is the provider
116
+ let name = (_b = nameParts.pop()) !== null && _b !== void 0 ? _b : source;
117
+ let namespace = `${nameParts.pop()}/${provider}`;
118
+ if (moduleParts.length > 1) {
119
+ const moduleNameParts = moduleParts[1].split("/");
120
+ const moduleName = moduleNameParts.pop();
121
+ namespace = `${namespace}/${name}/${moduleNameParts.join("/")}`;
122
+ name = moduleName !== null && moduleName !== void 0 ? moduleName : name;
123
+ }
124
+ return {
125
+ name,
126
+ source,
127
+ version,
128
+ namespace,
129
+ fqn: source.replace("//", "/").replace(/\./g, "-"),
130
+ };
131
+ }
132
+ let toProcess = item; // process one part at a time
133
+ // strip off any prefix
134
+ const prefixMatch = toProcess.match(/^([a-zA-Z0-9]*)::(.*)/);
135
+ if (prefixMatch) {
136
+ toProcess = prefixMatch[2];
137
+ }
138
+ // strip off any protocol
139
+ const protocolMatch = toProcess.match(/^([a-zA-Z]*):\/\/(.*)/);
140
+ if (protocolMatch) {
141
+ toProcess = protocolMatch[2];
142
+ }
143
+ // anything before last ':' won't contribute
144
+ const colonParts = toProcess.split(":");
145
+ toProcess = (_c = colonParts.pop()) !== null && _c !== void 0 ? _c : toProcess;
146
+ // strip off any port
147
+ const portMatch = toProcess.match(/^[\d]*(.*)/);
148
+ if (portMatch) {
149
+ toProcess = portMatch[1];
150
+ }
151
+ // strip off any hostname
152
+ const hostMatch = toProcess.match(/[^/]*\.[^/]*\/(.*)/);
153
+ if (hostMatch) {
154
+ toProcess = hostMatch[1];
155
+ }
156
+ // strip off any arguments
157
+ const argumentMatch = toProcess.match(/(.*)\?.*/);
158
+ if (argumentMatch) {
159
+ toProcess = argumentMatch[1];
160
+ }
161
+ // strip off any types
162
+ toProcess = toProcess.replace(/\.git|\.hg|\.zip/, "");
163
+ moduleParts = toProcess.split("//");
164
+ const nameParts = moduleParts[0].split("/");
165
+ let name = nameParts.pop();
166
+ let namespace = nameParts.pop();
167
+ if (!name) {
168
+ throw new Error(`Module name should be properly set in ${item}`);
169
+ }
170
+ if (moduleParts.length > 1) {
171
+ const moduleNameParts = moduleParts[1].split("/");
172
+ const moduleName = moduleNameParts.pop();
173
+ if (namespace) {
174
+ namespace = `${namespace}/${name}/${moduleNameParts.join("/")}`;
175
+ }
176
+ else {
177
+ namespace = `${name}/${moduleNameParts.join("/")}`;
178
+ }
179
+ name = moduleName !== null && moduleName !== void 0 ? moduleName : name;
180
+ }
181
+ return {
182
+ name,
183
+ source: item,
184
+ fqn: toProcess.replace("//", "/"),
185
+ namespace,
186
+ };
187
+ }
188
+ }
189
+ exports.TerraformModuleConstraint = TerraformModuleConstraint;
190
+ class TerraformProviderConstraint {
191
+ constructor(item) {
192
+ if (typeof item === "string") {
193
+ const parsed = this.parseDependencyConstraint(item);
194
+ this.name = parsed.name;
195
+ this.fqn = parsed.fqn;
196
+ this.source = parsed.fqn;
197
+ this.version = parsed.version;
198
+ this.namespace = parsed.namespace;
199
+ }
200
+ else {
201
+ this.name = item.name;
202
+ this.fqn = item.name;
203
+ this.version = item.version;
204
+ this.source = item.source;
205
+ this.namespace = item.namespace;
206
+ }
207
+ }
208
+ parseDependencyConstraint(item) {
209
+ const [fqn, version] = item.split("@");
210
+ const nameParts = fqn.split("/");
211
+ const name = nameParts.pop();
212
+ const namespace = nameParts.pop();
213
+ if (!name) {
214
+ throw new Error(`Provider name should be properly set in ${item}`);
215
+ }
216
+ return {
217
+ name,
218
+ source: fqn,
219
+ // Terraform doesn't support *, instead no version is specified
220
+ version: version === "*" ? undefined : version,
221
+ fqn,
222
+ namespace,
223
+ };
224
+ }
225
+ }
226
+ exports.TerraformProviderConstraint = TerraformProviderConstraint;
227
+ const parseConfig = (configJSON) => {
228
+ var _a, _b;
229
+ const config = {
230
+ ...exports.CONFIG_DEFAULTS,
231
+ ...JSON.parse(configJSON || "{}"),
232
+ };
233
+ if (isPresent(config.terraformModules)) {
234
+ config.terraformModules = (_a = config.terraformModules) === null || _a === void 0 ? void 0 : _a.map((mod) => new TerraformModuleConstraint(mod));
235
+ }
236
+ if (isPresent(config.terraformProviders)) {
237
+ config.terraformProviders = (_b = config.terraformProviders) === null || _b === void 0 ? void 0 : _b.map((provider) => new TerraformProviderConstraint(provider));
238
+ }
239
+ if (config.context) {
240
+ process_1.env[CONTEXT_ENV] = JSON.stringify(config.context);
241
+ }
242
+ return config;
243
+ };
244
+ exports.parseConfig = parseConfig;
245
+ function readConfigSync(configFile = path.join(process.cwd(), CONFIG_FILE)) {
246
+ let configFileContent;
247
+ if (fs.existsSync(configFile)) {
248
+ configFileContent = fs.readFileSync(configFile).toString();
249
+ }
250
+ return (0, exports.parseConfig)(configFileContent);
251
+ }
252
+ exports.readConfigSync = readConfigSync;
253
+ function shouldCheckCodeMakerOutput(config) {
254
+ return (isPresent(config.terraformModules) || isPresent(config.terraformProviders));
255
+ }
256
+ exports.shouldCheckCodeMakerOutput = shouldCheckCodeMakerOutput;
257
+ function logTimespan(message) {
258
+ logging_1.logger.debug(`Start timer for ${message}...`);
259
+ const start = Date.now();
260
+ return function logTimespanEnd() {
261
+ const end = Date.now();
262
+ const duration = end - start;
263
+ logging_1.logger.debug(`${message} took ${duration}ms`);
264
+ };
265
+ }
266
+ exports.logTimespan = logTimespan;
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix1Q0FBbUM7QUFDbkMseURBQXNEO0FBQ3RELHFDQUE4QjtBQUM5Qix5Q0FBeUM7QUFFekMsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2xCLHFDQUF5QixDQUFBO0lBQ3pCLDZCQUFpQixDQUFBO0lBQ2pCLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7SUFDYixxQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLFFBQVEsd0JBQVIsUUFBUSxRQU1uQjtBQUVZLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLFFBQVEsQ0FBQyxVQUFVO0lBQ25CLFFBQVEsQ0FBQyxNQUFNO0lBQ2YsUUFBUSxDQUFDLElBQUk7SUFDYixRQUFRLENBQUMsTUFBTTtJQUNmLFFBQVEsQ0FBQyxFQUFFO0NBQ1osQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztBQUNwQixRQUFBLGVBQWUsR0FBRztJQUM3QixNQUFNLEVBQUUsV0FBVztJQUNuQixlQUFlLEVBQUUsTUFBTTtDQUN4QixDQUFDO0FBRUYsU0FBUyxTQUFTLENBQUMsS0FBd0I7SUFDekMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFTRCxTQUFTLGFBQWEsQ0FBQyxNQUFjO0lBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsTUFBYztJQUMxQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENB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QyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlCLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU8sSUFBQSxtQkFBVyxFQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEMsQ0FBQztBQVZELHdDQVVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsTUFBYztJQUN2RCxPQUFPLENBQ0wsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDM0UsQ0FBQztBQUNKLENBQUM7QUFKRCxnRUFJQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxPQUFlO0lBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV6QixPQUFPLFNBQVMsY0FBYztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUM3QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sU0FBUyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztBQUNKLENBQUM7QUFURCxrQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBpc1JlZ2lzdHJ5TW9kdWxlIH0gZnJvbSBcIi4vdGVycmFmb3JtLW1vZHVsZVwiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcblxuZXhwb3J0IGVudW0gTGFuZ3VhZ2Uge1xuICBUWVBFU0NSSVBUID0gXCJ0eXBlc2NyaXB0XCIsXG4gIFBZVEhPTiA9IFwicHl0aG9uXCIsXG4gIENTSEFSUCA9IFwiY3NoYXJwXCIsXG4gIEpBVkEgPSBcImphdmFcIixcbiAgR08gPSBcImdvXCIsXG59XG5cbmV4cG9ydCBjb25zdCBMQU5HVUFHRVMgPSBbXG4gIExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gIExhbmd1YWdlLlBZVEhPTixcbiAgTGFuZ3VhZ2UuSkFWQSxcbiAgTGFuZ3VhZ2UuQ1NIQVJQLFxuICBMYW5ndWFnZS5HTyxcbl07XG5cbmNvbnN0IENPTlRFWFRfRU5WID0gXCJDREtURl9DT05URVhUX0pTT05cIjtcblxuY29uc3QgQ09ORklHX0ZJTEUgPSBcImNka3RmLmpzb25cIjtcbmV4cG9ydCBjb25zdCBDT05GSUdfREVGQVVMVFMgPSB7XG4gIG91dHB1dDogXCJjZGt0Zi5vdXRcIixcbiAgY29kZU1ha2VyT3V0cHV0OiBcIi5nZW5cIixcbn07XG5cbmZ1bmN0aW9uIGlzUHJlc2VudChpbnB1dDogYW55W10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA+IDA7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxNYXRjaChzb3VyY2U6IHN0cmluZyk6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsIHtcbiAgcmV0dXJuIHNvdXJjZS5tYXRjaCgvXihcXC5cXC98XFwuXFwuXFwvfFxcLlxcXFxcXFxcfFxcLlxcLlxcXFxcXFxcKSguKikvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYWxNb2R1bGUoc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldExvY2FsTWF0Y2goc291cmNlKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnRcbiAgaW1wbGVtZW50cyBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFxue1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhbFNvdXJjZUFic29sdXRlUGF0aD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihpdGVtOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludCB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZURlcGVuZGVuY3lDb25zdHJhaW50KGl0ZW0pO1xuICAgICAgdGhpcy5uYW1lID0gcGFyc2VkLm5hbWU7XG4gICAgICB0aGlzLnNvdXJjZSA9IHBhcnNlZC5zb3VyY2U7XG4gICAgICB0aGlzLmZxbiA9IHBhcnNlZC5mcW47XG4gICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZWQudmVyc2lvbjtcbiAgICAgIHRoaXMubmFtZXNwYWNlID0gcGFyc2VkLm5hbWVzcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3VyY2UgPSBpdGVtLnNvdXJjZTtcbiAgICAgIHRoaXMubmFtZSA9IGl0ZW0ubmFtZTtcbiAgICAgIHRoaXMuZnFuID0gaXRlbS5uYW1lO1xuICAgICAgdGhpcy52ZXJzaW9uID0gaXRlbS52ZXJzaW9uO1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBpdGVtLm5hbWVzcGFjZTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbE1hdGNoID0gZ2V0TG9jYWxNYXRjaCh0aGlzLnNvdXJjZSk7XG4gICAgaWYgKGxvY2FsTWF0Y2gpIHtcbiAgICAgIHRoaXMubG9jYWxTb3VyY2VBYnNvbHV0ZVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0b1Bhc2NhbENhc2UodGhpcy5uYW1lLnJlcGxhY2UoL1stLy5dL2csIFwiX1wiKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZSA/IGAke3RoaXMubmFtZXNwYWNlfS8ke3RoaXMubmFtZX1gIDogdGhpcy5uYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURlcGVuZGVuY3lDb25zdHJhaW50KFxuICAgIGl0ZW06IHN0cmluZyxcbiAgKTogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQge1xuICAgIGNvbnN0IGxvY2FsTWF0Y2ggPSBnZXRMb2NhbE1hdGNoKGl0ZW0pO1xuICAgIGlmIChsb2NhbE1hdGNoKSB7XG4gICAgICBjb25zdCBmcW4gPSBsb2NhbE1hdGNoWzJdO1xuICAgICAgY29uc3QgbmFtZVBhcnRzID0gZnFuLnNwbGl0KFwiL1wiKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBuYW1lUGFydHMucG9wKCkgPz8gZnFuO1xuICAgICAgY29uc3QgbmFtZXNwYWNlID0gbmFtZVBhcnRzLnBvcCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBmcW4sXG4gICAgICAgIHNvdXJjZTogaXRlbSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBbc291cmNlLCB2ZXJzaW9uXSA9IGl0ZW0uc3BsaXQoXCJAXCIpO1xuICAgIGxldCBtb2R1bGVQYXJ0cyA9IHNvdXJjZS5zcGxpdChcIi8vXCIpO1xuICAgIGlmIChpc1JlZ2lzdHJ5TW9kdWxlKG1vZHVsZVBhcnRzWzBdKSkge1xuICAgICAgY29uc3QgbmFtZVBhcnRzID0gbW9kdWxlUGFydHNbMF0uc3BsaXQoXCIvXCIpO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBuYW1lUGFydHMucG9wKCk7IC8vIGxhc3QgcGFydCBpcyB0aGUgcHJvdmlkZXJcbiAgICAgIGxldCBuYW1lID0gbmFtZVBhcnRzLnBvcCgpID8/IHNvdXJjZTtcbiAgICAgIGxldCBuYW1lc3BhY2UgPSBgJHtuYW1lUGFydHMucG9wKCl9LyR7cHJvdmlkZXJ9YDtcblxuICAgICAgaWYgKG1vZHVsZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlTmFtZVBhcnRzID0gbW9kdWxlUGFydHNbMV0uc3BsaXQoXCIvXCIpO1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZVBhcnRzLnBvcCgpO1xuICAgICAgICBuYW1lc3BhY2UgPSBgJHtuYW1lc3BhY2V9LyR7bmFtZX0vJHttb2R1bGVOYW1lUGFydHMuam9pbihcIi9cIil9YDtcbiAgICAgICAgbmFtZSA9IG1vZHVsZU5hbWUgPz8gbmFtZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIGZxbjogc291cmNlLnJlcGxhY2UoXCIvL1wiLCBcIi9cIikucmVwbGFjZSgvXFwuL2csIFwiLVwiKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRvUHJvY2VzcyA9IGl0ZW07IC8vIHByb2Nlc3Mgb25lIHBhcnQgYXQgYSB0aW1lXG5cbiAgICAvLyBzdHJpcCBvZmYgYW55IHByZWZpeFxuICAgIGNvbnN0IHByZWZpeE1hdGNoID0gdG9Qcm9jZXNzLm1hdGNoKC9eKFthLXpBLVowLTldKik6OiguKikvKTtcbiAgICBpZiAocHJlZml4TWF0Y2gpIHtcbiAgICAgIHRvUHJvY2VzcyA9IHByZWZpeE1hdGNoWzJdO1xuICAgIH1cblxuICAgIC8vIHN0cmlwIG9mZiBhbnkgcHJvdG9jb2xcbiAgICBjb25zdCBwcm90b2NvbE1hdGNoID0gdG9Qcm9jZXNzLm1hdGNoKC9eKFthLXpBLVpdKik6XFwvXFwvKC4qKS8pO1xuICAgIGlmIChwcm90b2NvbE1hdGNoKSB7XG4gICAgICB0b1Byb2Nlc3MgPSBwcm90b2NvbE1hdGNoWzJdO1xuICAgIH1cblxuICAgIC8vIGFueXRoaW5nIGJlZm9yZSBsYXN0ICc6JyB3b24ndCBjb250cmlidXRlXG4gICAgY29uc3QgY29sb25QYXJ0cyA9IHRvUHJvY2Vzcy5zcGxpdChcIjpcIik7XG4gICAgdG9Qcm9jZXNzID0gY29sb25QYXJ0cy5wb3AoKSA/PyB0b1Byb2Nlc3M7XG5cbiAgICAvLyBzdHJpcCBvZmYgYW55IHBvcnRcbiAgICBjb25zdCBwb3J0TWF0Y2ggPSB0b1Byb2Nlc3MubWF0Y2goL15bXFxkXSooLiopLyk7XG4gICAgaWYgKHBvcnRNYXRjaCkge1xuICAgICAgdG9Qcm9jZXNzID0gcG9ydE1hdGNoWzFdO1xuICAgIH1cblxuICAgIC8vIHN0cmlwIG9mZiBhbnkgaG9zdG5hbWVcbiAgICBjb25zdCBob3N0TWF0Y2ggPSB0b1Byb2Nlc3MubWF0Y2goL1teL10qXFwuW14vXSpcXC8oLiopLyk7XG4gICAgaWYgKGhvc3RNYXRjaCkge1xuICAgICAgdG9Qcm9jZXNzID0gaG9zdE1hdGNoWzFdO1xuICAgIH1cblxuICAgIC8vIHN0cmlwIG9mZiBhbnkgYXJndW1lbnRzXG4gICAgY29uc3QgYXJndW1lbnRNYXRjaCA9IHRvUHJvY2Vzcy5tYXRjaCgvKC4qKVxcPy4qLyk7XG4gICAgaWYgKGFyZ3VtZW50TWF0Y2gpIHtcbiAgICAgIHRvUHJvY2VzcyA9IGFyZ3VtZW50TWF0Y2hbMV07XG4gICAgfVxuXG4gICAgLy8gc3RyaXAgb2ZmIGFueSB0eXBlc1xuICAgIHRvUHJvY2VzcyA9IHRvUHJvY2Vzcy5yZXBsYWNlKC9cXC5naXR8XFwuaGd8XFwuemlwLywgXCJcIik7XG5cbiAgICBtb2R1bGVQYXJ0cyA9IHRvUHJvY2Vzcy5zcGxpdChcIi8vXCIpO1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IG1vZHVsZVBhcnRzWzBdLnNwbGl0KFwiL1wiKTtcbiAgICBsZXQgbmFtZSA9IG5hbWVQYXJ0cy5wb3AoKTtcbiAgICBsZXQgbmFtZXNwYWNlID0gbmFtZVBhcnRzLnBvcCgpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgbmFtZSBzaG91bGQgYmUgcHJvcGVybHkgc2V0IGluICR7aXRlbX1gKTtcbiAgICB9XG5cbiAgICBpZiAobW9kdWxlUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbW9kdWxlTmFtZVBhcnRzID0gbW9kdWxlUGFydHNbMV0uc3BsaXQoXCIvXCIpO1xuICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVQYXJ0cy5wb3AoKTtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgbmFtZXNwYWNlID0gYCR7bmFtZXNwYWNlfS8ke25hbWV9LyR7bW9kdWxlTmFtZVBhcnRzLmpvaW4oXCIvXCIpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYW1lc3BhY2UgPSBgJHtuYW1lfS8ke21vZHVsZU5hbWVQYXJ0cy5qb2luKFwiL1wiKX1gO1xuICAgICAgfVxuICAgICAgbmFtZSA9IG1vZHVsZU5hbWUgPz8gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHNvdXJjZTogaXRlbSxcbiAgICAgIGZxbjogdG9Qcm9jZXNzLnJlcGxhY2UoXCIvL1wiLCBcIi9cIiksXG4gICAgICBuYW1lc3BhY2UsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50XG4gIGltcGxlbWVudHMgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRcbntcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW06IE9taXQ8VGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsIFwiZnFuXCI+IHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlRGVwZW5kZW5jeUNvbnN0cmFpbnQoaXRlbSk7XG4gICAgICB0aGlzLm5hbWUgPSBwYXJzZWQubmFtZTtcbiAgICAgIHRoaXMuZnFuID0gcGFyc2VkLmZxbjtcbiAgICAgIHRoaXMuc291cmNlID0gcGFyc2VkLmZxbjtcbiAgICAgIHRoaXMudmVyc2lvbiA9IHBhcnNlZC52ZXJzaW9uO1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBwYXJzZWQubmFtZXNwYWNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICB0aGlzLmZxbiA9IGl0ZW0ubmFtZTtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGl0ZW0udmVyc2lvbjtcbiAgICAgIHRoaXMuc291cmNlID0gaXRlbS5zb3VyY2U7XG4gICAgICB0aGlzLm5hbWVzcGFjZSA9IGl0ZW0ubmFtZXNwYWNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEZXBlbmRlbmN5Q29uc3RyYWludChcbiAgICBpdGVtOiBzdHJpbmcsXG4gICk6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50IHtcbiAgICBjb25zdCBbZnFuLCB2ZXJzaW9uXSA9IGl0ZW0uc3BsaXQoXCJAXCIpO1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IGZxbi5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVQYXJ0cy5wb3AoKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lUGFydHMucG9wKCk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG5hbWUgc2hvdWxkIGJlIHByb3Blcmx5IHNldCBpbiAke2l0ZW19YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBzb3VyY2U6IGZxbixcbiAgICAgIC8vIFRlcnJhZm9ybSBkb2Vzbid0IHN1cHBvcnQgKiwgaW5zdGVhZCBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgICAgdmVyc2lvbjogdmVyc2lvbiA9PT0gXCIqXCIgPyB1bmRlZmluZWQgOiB2ZXJzaW9uLFxuICAgICAgZnFuLFxuICAgICAgbmFtZXNwYWNlLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICByZWFkb25seSBhcHA/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhbmd1YWdlPzogTGFuZ3VhZ2U7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xuICByZWFkb25seSBjb2RlTWFrZXJPdXRwdXQ6IHN0cmluZztcbiAgdGVycmFmb3JtUHJvdmlkZXJzPzogVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50W107XG4gIHRlcnJhZm9ybU1vZHVsZXM/OiBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50W107XG4gIHJlYWRvbmx5IGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VDb25maWcgPSAoY29uZmlnSlNPTj86IHN0cmluZykgPT4ge1xuICBjb25zdCBjb25maWc6IENvbmZpZyA9IHtcbiAgICAuLi5DT05GSUdfREVGQVVMVFMsXG4gICAgLi4uSlNPTi5wYXJzZShjb25maWdKU09OIHx8IFwie31cIiksXG4gIH07XG5cbiAgaWYgKGlzUHJlc2VudChjb25maWcudGVycmFmb3JtTW9kdWxlcykpIHtcbiAgICBjb25maWcudGVycmFmb3JtTW9kdWxlcyA9IGNvbmZpZy50ZXJyYWZvcm1Nb2R1bGVzPy5tYXAoXG4gICAgICAobW9kKSA9PiBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChtb2QpLFxuICAgICk7XG4gIH1cblxuICBpZiAoaXNQcmVzZW50KGNvbmZpZy50ZXJyYWZvcm1Qcm92aWRlcnMpKSB7XG4gICAgY29uZmlnLnRlcnJhZm9ybVByb3ZpZGVycyA9IGNvbmZpZy50ZXJyYWZvcm1Qcm92aWRlcnM/Lm1hcChcbiAgICAgIChwcm92aWRlcikgPT4gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChwcm92aWRlciksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29udGV4dCkge1xuICAgIGVudltDT05URVhUX0VOVl0gPSBKU09OLnN0cmluZ2lmeShjb25maWcuY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb25maWdTeW5jKFxuICBjb25maWdGaWxlID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIENPTkZJR19GSUxFKSxcbik6IENvbmZpZyB7XG4gIGxldCBjb25maWdGaWxlQ29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgY29uZmlnRmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUNvbmZpZyhjb25maWdGaWxlQ29udGVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRDaGVja0NvZGVNYWtlck91dHB1dChjb25maWc6IENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlzUHJlc2VudChjb25maWcudGVycmFmb3JtTW9kdWxlcykgfHwgaXNQcmVzZW50KGNvbmZpZy50ZXJyYWZvcm1Qcm92aWRlcnMpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dUaW1lc3BhbihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKGBTdGFydCB0aW1lciBmb3IgJHttZXNzYWdlfS4uLmApO1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGxvZ1RpbWVzcGFuRW5kKCkge1xuICAgIGNvbnN0IGVuZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICBsb2dnZXIuZGVidWcoYCR7bWVzc2FnZX0gdG9vayAke2R1cmF0aW9ufW1zYCk7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export declare function mkdtemp(closure: (dir: string) => Promise<void>): Promise<void>;
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["config.test.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,iBAOpE"}