@cdktn/hcl2cdk 0.23.0-pre.36 → 0.23.0-pre.39

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 (85) hide show
  1. package/build/__tests__/coerceType.test.js +165 -0
  2. package/build/__tests__/expressionToTs.test.js +693 -0
  3. package/build/__tests__/expressions.test.js +415 -0
  4. package/build/__tests__/findExpressionType.test.js +105 -0
  5. package/build/__tests__/functions.test.js +605 -0
  6. package/build/__tests__/generation.test.js +45 -0
  7. package/build/__tests__/jsii-rosetta-workarounds.test.js +86 -0
  8. package/build/__tests__/partialCode.test.js +390 -0
  9. package/build/__tests__/terraformSchema.test.js +105 -0
  10. package/build/__tests__/testHelpers.js +16 -0
  11. package/build/coerceType.js +240 -0
  12. package/build/dynamic-blocks.js +44 -0
  13. package/build/expressions.js +633 -0
  14. package/build/function-bindings/functions.generated.js +1142 -0
  15. package/build/function-bindings/functions.js +73 -0
  16. package/build/generation.js +676 -0
  17. package/{lib → build}/index.d.ts +2 -2
  18. package/build/index.js +364 -0
  19. package/build/iteration.js +87 -0
  20. package/build/jsii-rosetta-workarounds.js +126 -0
  21. package/build/partialCode.js +116 -0
  22. package/build/provider.js +40 -0
  23. package/build/references.js +141 -0
  24. package/build/schema.js +81 -0
  25. package/build/telemetryAllowList.json +24 -0
  26. package/build/terraformSchema.js +136 -0
  27. package/build/types.js +3 -0
  28. package/build/utils.js +25 -0
  29. package/build/variables.js +172 -0
  30. package/package.json +8 -8
  31. package/tsconfig.json +4 -2
  32. package/lib/__tests__/coerceType.test.js +0 -165
  33. package/lib/__tests__/expressionToTs.test.js +0 -693
  34. package/lib/__tests__/expressions.test.js +0 -415
  35. package/lib/__tests__/findExpressionType.test.js +0 -105
  36. package/lib/__tests__/functions.test.js +0 -605
  37. package/lib/__tests__/generation.test.js +0 -45
  38. package/lib/__tests__/jsii-rosetta-workarounds.test.js +0 -86
  39. package/lib/__tests__/partialCode.test.js +0 -390
  40. package/lib/__tests__/terraformSchema.test.js +0 -105
  41. package/lib/__tests__/testHelpers.js +0 -16
  42. package/lib/coerceType.js +0 -240
  43. package/lib/dynamic-blocks.js +0 -44
  44. package/lib/expressions.js +0 -634
  45. package/lib/function-bindings/functions.generated.js +0 -1142
  46. package/lib/function-bindings/functions.js +0 -73
  47. package/lib/generation.js +0 -676
  48. package/lib/index.js +0 -364
  49. package/lib/iteration.js +0 -87
  50. package/lib/jsii-rosetta-workarounds.js +0 -126
  51. package/lib/partialCode.js +0 -116
  52. package/lib/provider.js +0 -40
  53. package/lib/references.js +0 -141
  54. package/lib/schema.js +0 -81
  55. package/lib/terraformSchema.js +0 -136
  56. package/lib/types.js +0 -3
  57. package/lib/utils.js +0 -25
  58. package/lib/variables.js +0 -172
  59. /package/{lib → build}/__tests__/coerceType.test.d.ts +0 -0
  60. /package/{lib → build}/__tests__/expressionToTs.test.d.ts +0 -0
  61. /package/{lib → build}/__tests__/expressions.test.d.ts +0 -0
  62. /package/{lib → build}/__tests__/findExpressionType.test.d.ts +0 -0
  63. /package/{lib → build}/__tests__/functions.test.d.ts +0 -0
  64. /package/{lib → build}/__tests__/generation.test.d.ts +0 -0
  65. /package/{lib → build}/__tests__/jsii-rosetta-workarounds.test.d.ts +0 -0
  66. /package/{lib → build}/__tests__/partialCode.test.d.ts +0 -0
  67. /package/{lib → build}/__tests__/terraformSchema.test.d.ts +0 -0
  68. /package/{lib → build}/__tests__/testHelpers.d.ts +0 -0
  69. /package/{lib → build}/coerceType.d.ts +0 -0
  70. /package/{lib → build}/dynamic-blocks.d.ts +0 -0
  71. /package/{lib → build}/expressions.d.ts +0 -0
  72. /package/{lib → build}/function-bindings/functions.d.ts +0 -0
  73. /package/{lib → build}/function-bindings/functions.generated.d.ts +0 -0
  74. /package/{lib → build}/generation.d.ts +0 -0
  75. /package/{lib → build}/iteration.d.ts +0 -0
  76. /package/{lib → build}/jsii-rosetta-workarounds.d.ts +0 -0
  77. /package/{lib → build}/partialCode.d.ts +0 -0
  78. /package/{lib → build}/provider.d.ts +0 -0
  79. /package/{lib → build}/references.d.ts +0 -0
  80. /package/{lib → build}/schema.d.ts +0 -0
  81. /package/{lib → build}/terraformSchema.d.ts +0 -0
  82. /package/{lib → build}/types.d.ts +0 -0
  83. /package/{lib → build}/utils.d.ts +0 -0
  84. /package/{lib → build}/variables.d.ts +0 -0
  85. /package/{lib → src}/telemetryAllowList.json +0 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.tsFunctionsMap = exports.functionsMap = void 0;
8
+ const functions_generated_1 = require("./functions.generated");
9
+ exports.functionsMap = {
10
+ ...functions_generated_1.functionsMapGenerated,
11
+ bcrypt: {
12
+ name: "bcrypt", // this one is not variadic anymore after we mapped it
13
+ returnType: "string",
14
+ parameters: [{ type: "string" }, { type: "number", optional: true }],
15
+ },
16
+ join: {
17
+ name: "join",
18
+ returnType: "string",
19
+ parameters: [{ type: "string" }, { type: ["list", "string"] }],
20
+ /**
21
+ * Terraform supports join(separator, listA, listB)
22
+ * wheras CDKTN only supports join(separator, list) (to make it simpler to use as JSII does not support variadic parameters)
23
+ * and we'd need to convert this to join(separator, concat(listA, listB)) if multiple variadic args are passed
24
+ */
25
+ transformer: (fc) => {
26
+ if (fc.children.length <= 2) {
27
+ return fc; // just one child -> nothing to do
28
+ }
29
+ const concatFunction = {
30
+ type: "function",
31
+ meta: {
32
+ name: "concat",
33
+ expandedFinalArgument: fc.meta.expandedFinalArgument,
34
+ nameRange: {},
35
+ openParenRange: {},
36
+ closeParenRange: {},
37
+ argsRanges: [],
38
+ },
39
+ children: fc.children.slice(1),
40
+ };
41
+ return {
42
+ type: "function",
43
+ meta: {
44
+ name: "join",
45
+ },
46
+ children: [
47
+ fc.children[0], // the first parameter is the separator, so keep it as is
48
+ concatFunction,
49
+ ],
50
+ };
51
+ },
52
+ },
53
+ range: {
54
+ name: "range",
55
+ returnType: ["list", "string"], // TODO: Fn.range() currently returns string[] but should return number[] (according to functions.json)
56
+ parameters: [
57
+ { type: "number" },
58
+ { type: "number" },
59
+ { type: "number", optional: true },
60
+ ],
61
+ },
62
+ lookup: {
63
+ name: "lookup",
64
+ returnType: "dynamic",
65
+ parameters: [{ type: "dynamic" }, { type: "string" }, { type: "dynamic" }],
66
+ },
67
+ };
68
+ exports.tsFunctionsMap = Object.entries(exports.functionsMap).reduce((acc, [name, fnInfo]) => {
69
+ // Swap the names around
70
+ acc[fnInfo.name] = { ...fnInfo, name: name };
71
+ return acc;
72
+ }, {});
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmN0aW9uLWJpbmRpbmdzL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFHSCwrREFBOEQ7QUEyQmpELFFBQUEsWUFBWSxHQUFpQztJQUN4RCxHQUFJLDJDQUE2QjtJQUVqQyxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsUUFBUSxFQUFFLHNEQUFzRDtRQUN0RSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ3JFO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLE1BQU07UUFDWixVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzlEOzs7O1dBSUc7UUFDSCxXQUFXLEVBQUUsQ0FBQyxFQUE4QixFQUFFLEVBQUU7WUFDOUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxrQ0FBa0M7WUFDL0MsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCO29CQUNwRCxTQUFTLEVBQUUsRUFBRTtvQkFDYixjQUFjLEVBQUUsRUFBRTtvQkFDbEIsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2dCQUNELFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDL0IsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsTUFBTTtpQkFDYjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSx5REFBeUQ7b0JBQ3pFLGNBQWM7aUJBQ2Y7YUFDRixDQUFDO1FBQ0osQ0FBQztLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsSUFBSSxFQUFFLE9BQU87UUFDYixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsdUdBQXVHO1FBQ3ZJLFVBQVUsRUFBRTtZQUNWLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNsQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbEIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDbkM7S0FDRjtJQUNELE1BQU0sRUFBRTtRQUNOLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFLFNBQVM7UUFDckIsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7S0FDM0U7Q0FDRixDQUFDO0FBRVcsUUFBQSxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBWSxDQUFDLENBQUMsTUFBTSxDQUMvRCxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO0lBQ3RCLHdCQUF3QjtJQUN4QixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzdDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxFQUNELEVBQWtDLENBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGUgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGZ1bmN0aW9uc01hcEdlbmVyYXRlZCB9IGZyb20gXCIuL2Z1bmN0aW9ucy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IFRGRXhwcmVzc2lvblN5bnRheFRyZWUgYXMgdGV4IH0gZnJvbSBcIkBjZGt0bi9oY2wyanNvblwiO1xuXG50eXBlIEZ1bmN0aW9uQ2FsbCA9IGFueTsgLy8gVE9ETzogdGhpcyB3aWxsIGNvbWUgZnJvbSB0aGUgdHlwZXMgZm9yIGhjbDJqc29uIChha2EgZnJvbSB0aGUgVGVycmFmb3JtIEFTVClcblxudHlwZSBGdW5jdGlvbk1ldGEgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmV0dXJuVHlwZTogQXR0cmlidXRlVHlwZTtcbiAgcGFyYW1ldGVyczoge1xuICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGU7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIHZhcmlhZGljPzogYm9vbGVhbjtcbiAgfVtdO1xuICAvKipcbiAgICogQWxsb3dzIHRyYW5zZm9ybWluZyB0aGUgZnVuY3Rpb24gY2FsbCBiZWZvcmUgaXQgaXMgaGFuZGxlZC4gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCB0byBoYW5kbGVcbiAgICogZGlmZmVyZW50IEFQSXMgYmV0d2VlbiBURiBzdXBwb3J0aW5nIGpvaW4oc2VwLCBsaXN0QSwgbGlzdEIpIGFuZCBDREtUTiBvbmx5IHN1cHBvcnRpbmcgam9pbihzZXAsIGxpc3QpXG4gICAqIChhcyB0aGUgYWx0ZXJuYXRpdmUgZHVlIHRvIEpTSUlzIGxhY2sgb2Ygc3VwcG9ydCBmb3IgdmFyaWFkaWMgcGFyYW1ldGVzIHdvdWxkIGJlIGpvaW4oc2VwLCBsaXN0cykgd2hpY2hcbiAgICogIHdvdWxkIGhhdmUgYSB3b3JzZSBVWCBhcyBtb3N0IG9mdGVuIGp1c3QgYSBzaW5nbGUgbGlzdCBpcyBwYXNzZWQpXG4gICAqIEluIHRoZSBjYXNlIG9mIGpvaW4oKSB0aGUgdHJhbnNmb3JtZXIgd2lsbCBjb252ZXJ0IHRoZSBmdW5jdGlvbiBjYWxsIHRvIGpvaW4oc2VwLCBjb25jYXQobGlzdEEsIGxpc3RCKSlcbiAgICogYmVmb3JlIGhhbmRsaW5nIGl0XG4gICAqXG4gICAqIENhdXRpb246IEJld2FyZSBvZiBpbmZpbml0ZSByZWN1cnNpb24gaWYgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGNhbGwgaXMgdG8gdGhlIHNhbWUgZnVuY3Rpb24gdGhhdCBoYXMgdGhpc1xuICAgKiB0cmFuc2Zvcm1lci4gUmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlIG9mIHRoZSBwYXNzZWQgZnVuY3Rpb25DYWxsIHRvIGJyZWFrIG91dCBvZiB0aGF0IHJlY3Vyc2lvbi5cbiAgICovXG4gIHRyYW5zZm9ybWVyPzogKGZ1bmN0aW9uQ2FsbDogRnVuY3Rpb25DYWxsKSA9PiBGdW5jdGlvbkNhbGw7XG59O1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25zTWFwOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbk1ldGE+ID0ge1xuICAuLi4oZnVuY3Rpb25zTWFwR2VuZXJhdGVkIGFzIGFueSksXG5cbiAgYmNyeXB0OiB7XG4gICAgbmFtZTogXCJiY3J5cHRcIiwgLy8gdGhpcyBvbmUgaXMgbm90IHZhcmlhZGljIGFueW1vcmUgYWZ0ZXIgd2UgbWFwcGVkIGl0XG4gICAgcmV0dXJuVHlwZTogXCJzdHJpbmdcIixcbiAgICBwYXJhbWV0ZXJzOiBbeyB0eXBlOiBcInN0cmluZ1wiIH0sIHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfV0sXG4gIH0sXG4gIGpvaW46IHtcbiAgICBuYW1lOiBcImpvaW5cIixcbiAgICByZXR1cm5UeXBlOiBcInN0cmluZ1wiLFxuICAgIHBhcmFtZXRlcnM6IFt7IHR5cGU6IFwic3RyaW5nXCIgfSwgeyB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdIH1dLFxuICAgIC8qKlxuICAgICAqIFRlcnJhZm9ybSBzdXBwb3J0cyBqb2luKHNlcGFyYXRvciwgbGlzdEEsIGxpc3RCKVxuICAgICAqIHdoZXJhcyBDREtUTiBvbmx5IHN1cHBvcnRzIGpvaW4oc2VwYXJhdG9yLCBsaXN0KSAodG8gbWFrZSBpdCBzaW1wbGVyIHRvIHVzZSBhcyBKU0lJIGRvZXMgbm90IHN1cHBvcnQgdmFyaWFkaWMgcGFyYW1ldGVycylcbiAgICAgKiBhbmQgd2UnZCBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBqb2luKHNlcGFyYXRvciwgY29uY2F0KGxpc3RBLCBsaXN0QikpIGlmIG11bHRpcGxlIHZhcmlhZGljIGFyZ3MgYXJlIHBhc3NlZFxuICAgICAqL1xuICAgIHRyYW5zZm9ybWVyOiAoZmM6IHRleC5GdW5jdGlvbkNhbGxFeHByZXNzaW9uKSA9PiB7XG4gICAgICBpZiAoZmMuY2hpbGRyZW4ubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgcmV0dXJuIGZjOyAvLyBqdXN0IG9uZSBjaGlsZCAtPiBub3RoaW5nIHRvIGRvXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmNhdEZ1bmN0aW9uID0ge1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICBuYW1lOiBcImNvbmNhdFwiLFxuICAgICAgICAgIGV4cGFuZGVkRmluYWxBcmd1bWVudDogZmMubWV0YS5leHBhbmRlZEZpbmFsQXJndW1lbnQsXG4gICAgICAgICAgbmFtZVJhbmdlOiB7fSxcbiAgICAgICAgICBvcGVuUGFyZW5SYW5nZToge30sXG4gICAgICAgICAgY2xvc2VQYXJlblJhbmdlOiB7fSxcbiAgICAgICAgICBhcmdzUmFuZ2VzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IGZjLmNoaWxkcmVuLnNsaWNlKDEpLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgbmFtZTogXCJqb2luXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgZmMuY2hpbGRyZW5bMF0sIC8vIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHNlcGFyYXRvciwgc28ga2VlcCBpdCBhcyBpc1xuICAgICAgICAgIGNvbmNhdEZ1bmN0aW9uLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9LFxuICB9LFxuICByYW5nZToge1xuICAgIG5hbWU6IFwicmFuZ2VcIixcbiAgICByZXR1cm5UeXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLCAvLyBUT0RPOiBGbi5yYW5nZSgpIGN1cnJlbnRseSByZXR1cm5zIHN0cmluZ1tdIGJ1dCBzaG91bGQgcmV0dXJuIG51bWJlcltdIChhY2NvcmRpbmcgdG8gZnVuY3Rpb25zLmpzb24pXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAgeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgIHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcbiAgICBdLFxuICB9LFxuICBsb29rdXA6IHtcbiAgICBuYW1lOiBcImxvb2t1cFwiLFxuICAgIHJldHVyblR5cGU6IFwiZHluYW1pY1wiLFxuICAgIHBhcmFtZXRlcnM6IFt7IHR5cGU6IFwiZHluYW1pY1wiIH0sIHsgdHlwZTogXCJzdHJpbmdcIiB9LCB7IHR5cGU6IFwiZHluYW1pY1wiIH1dLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHRzRnVuY3Rpb25zTWFwID0gT2JqZWN0LmVudHJpZXMoZnVuY3Rpb25zTWFwKS5yZWR1Y2UoXG4gIChhY2MsIFtuYW1lLCBmbkluZm9dKSA9PiB7XG4gICAgLy8gU3dhcCB0aGUgbmFtZXMgYXJvdW5kXG4gICAgYWNjW2ZuSW5mby5uYW1lXSA9IHsgLi4uZm5JbmZvLCBuYW1lOiBuYW1lIH07XG4gICAgcmV0dXJuIGFjYztcbiAgfSxcbiAge30gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb25NZXRhPixcbik7XG4iXX0=