@cdktn/hcl2cdk 0.23.0-pre.7 → 0.23.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 (85) hide show
  1. package/ambient.d.ts +0 -1
  2. package/build/__tests__/coerceType.test.js +165 -0
  3. package/build/__tests__/expressionToTs.test.js +693 -0
  4. package/build/__tests__/expressions.test.js +415 -0
  5. package/build/__tests__/findExpressionType.test.js +105 -0
  6. package/build/__tests__/functions.test.js +605 -0
  7. package/build/__tests__/generation.test.js +45 -0
  8. package/build/__tests__/jsii-rosetta-workarounds.test.js +86 -0
  9. package/build/__tests__/partialCode.test.js +390 -0
  10. package/build/__tests__/terraformSchema.test.js +105 -0
  11. package/build/__tests__/testHelpers.js +16 -0
  12. package/build/coerceType.js +240 -0
  13. package/build/dynamic-blocks.js +44 -0
  14. package/build/expressions.js +633 -0
  15. package/build/function-bindings/functions.generated.js +1142 -0
  16. package/build/function-bindings/functions.js +73 -0
  17. package/{lib → build}/generation.js +4 -4
  18. package/{lib → build}/index.d.ts +2 -2
  19. package/build/index.js +364 -0
  20. package/build/iteration.js +87 -0
  21. package/build/jsii-rosetta-workarounds.js +126 -0
  22. package/build/partialCode.js +116 -0
  23. package/build/provider.js +40 -0
  24. package/build/references.js +141 -0
  25. package/build/schema.js +81 -0
  26. package/build/telemetryAllowList.json +24 -0
  27. package/build/terraformSchema.js +136 -0
  28. package/build/types.js +3 -0
  29. package/build/utils.js +25 -0
  30. package/build/variables.js +172 -0
  31. package/package.json +13 -14
  32. package/tsconfig.json +4 -2
  33. package/lib/__tests__/coerceType.test.js +0 -165
  34. package/lib/__tests__/expressionToTs.test.js +0 -693
  35. package/lib/__tests__/expressions.test.js +0 -415
  36. package/lib/__tests__/findExpressionType.test.js +0 -105
  37. package/lib/__tests__/functions.test.js +0 -605
  38. package/lib/__tests__/generation.test.js +0 -45
  39. package/lib/__tests__/jsii-rosetta-workarounds.test.js +0 -86
  40. package/lib/__tests__/partialCode.test.js +0 -390
  41. package/lib/__tests__/terraformSchema.test.js +0 -105
  42. package/lib/__tests__/testHelpers.js +0 -16
  43. package/lib/coerceType.js +0 -240
  44. package/lib/dynamic-blocks.js +0 -44
  45. package/lib/expressions.js +0 -634
  46. package/lib/function-bindings/functions.generated.js +0 -1142
  47. package/lib/function-bindings/functions.js +0 -73
  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
@@ -1,165 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- // Copyright (c) HashiCorp, Inc
7
- // SPDX-License-Identifier: MPL-2.0
8
- const coerceType_1 = require("../coerceType");
9
- const template_1 = __importDefault(require("@babel/template"));
10
- const generator_1 = __importDefault(require("@babel/generator"));
11
- function expressionify(code) {
12
- return template_1.default.ast(code).expression;
13
- }
14
- function generateCode(ast) {
15
- return (0, generator_1.default)(ast).code;
16
- }
17
- const scope = {
18
- importables: [],
19
- variables: {
20
- a_user_defined_variable: {
21
- resource: "var",
22
- variableName: "aUserDefinedVariable",
23
- },
24
- a_user_defined_local: {
25
- resource: "var",
26
- variableName: "aUserDefinedTerraformLocal",
27
- },
28
- },
29
- };
30
- describe("coerceType", () => {
31
- it.each([
32
- { code: `"hello-world"`, type: "string", targetType: undefined },
33
- { code: `"hello-world"`, type: "string", targetType: "string" },
34
- ])("should change nothing for %p ", ({ code, type, targetType }) => {
35
- expect(generateCode((0, coerceType_1.coerceType)(scope, expressionify(code), type, targetType))).toEqual(code);
36
- });
37
- it.each([
38
- {
39
- code: `"300"`,
40
- type: "string",
41
- targetType: "number",
42
- expectedCode: `Token.asNumber("300")`,
43
- },
44
- {
45
- code: `300`,
46
- type: "number",
47
- targetType: "string",
48
- expectedCode: `Token.asString(300)`,
49
- },
50
- {
51
- code: `"['foo', 'bar']"`,
52
- type: "string",
53
- targetType: ["list", "string"],
54
- expectedCode: `Token.asList("['foo', 'bar']")`,
55
- },
56
- {
57
- code: `"[1,2,3]"`,
58
- type: "string",
59
- targetType: ["list", "number"],
60
- expectedCode: `Token.asNumberList("[1,2,3]")`,
61
- },
62
- {
63
- code: `"['foo', 'bar']"`,
64
- type: "string",
65
- targetType: ["set", "string"],
66
- expectedCode: `Token.asList("['foo', 'bar']")`,
67
- },
68
- {
69
- code: `"[1,2,3]"`,
70
- type: "string",
71
- targetType: ["set", "number"],
72
- expectedCode: `Token.asNumberList("[1,2,3]")`,
73
- },
74
- // We don't have a token function for boolean lists, so we need to take an asAny
75
- {
76
- code: `"[true,false,true]"`,
77
- type: "string",
78
- targetType: ["list", "bool"],
79
- expectedCode: `Token.asAny("[true,false,true]")`,
80
- },
81
- {
82
- code: `"{ foo: 'bar' }"`,
83
- type: "string",
84
- targetType: ["map", "string"],
85
- expectedCode: `Token.asStringMap("{ foo: 'bar' }")`,
86
- },
87
- {
88
- code: `"{ foo: 1 }"`,
89
- type: "string",
90
- targetType: ["map", "number"],
91
- expectedCode: `Token.asNumberMap("{ foo: 1 }")`,
92
- },
93
- {
94
- code: `"{ foo: true }"`,
95
- type: "string",
96
- targetType: ["map", "bool"],
97
- expectedCode: `Token.asBooleanMap("{ foo: true }")`,
98
- },
99
- {
100
- code: `"{ foo: {bar: true} }"`,
101
- type: "string",
102
- targetType: ["map", ["map", "boolean"]],
103
- expectedCode: `Token.asAnyMap("{ foo: {bar: true} }")`,
104
- },
105
- ])("should use Token functions %p", ({ code, type, targetType, expectedCode }) => {
106
- expect(generateCode((0, coerceType_1.coerceType)(scope, expressionify(code), type, targetType))).toEqual(expectedCode);
107
- });
108
- it.each([
109
- {
110
- code: `aUserDefinedVariable.value`,
111
- type: "dynamic",
112
- targetType: "string",
113
- expectedCode: `aUserDefinedVariable.stringValue`,
114
- },
115
- {
116
- code: `aUserDefinedVariable.value`,
117
- type: "dynamic",
118
- targetType: "number",
119
- expectedCode: `aUserDefinedVariable.numberValue`,
120
- },
121
- {
122
- code: `aUserDefinedVariable.value`,
123
- type: "dynamic",
124
- targetType: ["list", "string"],
125
- expectedCode: `aUserDefinedVariable.listValue`,
126
- },
127
- {
128
- code: `aUserDefinedVariable.value`,
129
- type: "dynamic",
130
- targetType: "bool",
131
- expectedCode: `aUserDefinedVariable.booleanValue`,
132
- },
133
- ])("should use TerraformVariables accessors %p", ({ code, type, targetType, expectedCode }) => {
134
- expect(generateCode((0, coerceType_1.coerceType)(scope, expressionify(code), type, targetType))).toEqual(expectedCode);
135
- });
136
- it.each([
137
- {
138
- code: `aUserDefinedTerraformLocal.value`,
139
- type: "dynamic",
140
- targetType: "string",
141
- expectedCode: `aUserDefinedTerraformLocal.stringValue`,
142
- },
143
- {
144
- code: `aUserDefinedTerraformLocal.value`,
145
- type: "dynamic",
146
- targetType: "number",
147
- expectedCode: `aUserDefinedTerraformLocal.numberValue`,
148
- },
149
- {
150
- code: `aUserDefinedTerraformLocal.value`,
151
- type: "dynamic",
152
- targetType: ["list", "string"],
153
- expectedCode: `aUserDefinedTerraformLocal.listValue`,
154
- },
155
- {
156
- code: `aUserDefinedTerraformLocal.value`,
157
- type: "dynamic",
158
- targetType: "bool",
159
- expectedCode: `aUserDefinedTerraformLocal.booleanValue`,
160
- },
161
- ])("should use TerraformLocal accessors %p", ({ code, type, targetType, expectedCode }) => {
162
- expect(generateCode((0, coerceType_1.coerceType)(scope, expressionify(code), type, targetType))).toEqual(expectedCode);
163
- });
164
- });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNlVHlwZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29lcmNlVHlwZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw4Q0FBMkM7QUFDM0MsK0RBQXVDO0FBQ3ZDLGlFQUF3QztBQUV4QyxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQ2pDLE9BQVEsa0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFTLENBQUMsVUFBVSxDQUFDO0FBQ2hELENBQUM7QUFDRCxTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQzVCLE9BQU8sSUFBQSxtQkFBUSxFQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQVE7SUFDakIsV0FBVyxFQUFFLEVBQUU7SUFDZixTQUFTLEVBQUU7UUFDVCx1QkFBdUIsRUFBRTtZQUN2QixRQUFRLEVBQUUsS0FBSztZQUNmLFlBQVksRUFBRSxzQkFBc0I7U0FDckM7UUFDRCxvQkFBb0IsRUFBRTtZQUNwQixRQUFRLEVBQUUsS0FBSztZQUNmLFlBQVksRUFBRSw0QkFBNEI7U0FDM0M7S0FDRjtDQUNGLENBQUM7QUFFRixRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtRQUNoRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO0tBQ2hFLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ2pFLE1BQU0sQ0FDSixZQUFZLENBQ1YsSUFBQSx1QkFBVSxFQUFDLEtBQUssRUFBRSxh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SUFBSSxFQUFFLFNBQVM7WUFDZixVQUFVLEVBQUUsTUFBTTtZQUNsQixZQUFZLEVBQUUseUNBQXlDO1NBQ3hEO0tBQ0YsQ0FBQyxDQUNBLHdDQUF3QyxFQUN4QyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRTtRQUMzQyxNQUFNLENBQ0osWUFBWSxDQUNWLElBQUEsdUJBQVUsRUFDUixLQUFLLEVBQ0wsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUNuQixJQUFXLEVBQ1gsVUFBaUIsQ0FDbEIsQ0FDRixDQUNGLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgY29lcmNlVHlwZSB9IGZyb20gXCIuLi9jb2VyY2VUeXBlXCI7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0IGdlbmVyYXRlIGZyb20gXCJAYmFiZWwvZ2VuZXJhdG9yXCI7XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb25pZnkoY29kZTogc3RyaW5nKSB7XG4gIHJldHVybiAodGVtcGxhdGUuYXN0KGNvZGUpIGFzIGFueSkuZXhwcmVzc2lvbjtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQ29kZShhc3Q6IGFueSkge1xuICByZXR1cm4gZ2VuZXJhdGUoYXN0KS5jb2RlO1xufVxuXG5jb25zdCBzY29wZTogYW55ID0ge1xuICBpbXBvcnRhYmxlczogW10sXG4gIHZhcmlhYmxlczoge1xuICAgIGFfdXNlcl9kZWZpbmVkX3ZhcmlhYmxlOiB7XG4gICAgICByZXNvdXJjZTogXCJ2YXJcIixcbiAgICAgIHZhcmlhYmxlTmFtZTogXCJhVXNlckRlZmluZWRWYXJpYWJsZVwiLFxuICAgIH0sXG4gICAgYV91c2VyX2RlZmluZWRfbG9jYWw6IHtcbiAgICAgIHJlc291cmNlOiBcInZhclwiLFxuICAgICAgdmFyaWFibGVOYW1lOiBcImFVc2VyRGVmaW5lZFRlcnJhZm9ybUxvY2FsXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbmRlc2NyaWJlKFwiY29lcmNlVHlwZVwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHsgY29kZTogYFwiaGVsbG8td29ybGRcImAsIHR5cGU6IFwic3RyaW5nXCIsIHRhcmdldFR5cGU6IHVuZGVmaW5lZCB9LFxuICAgIHsgY29kZTogYFwiaGVsbG8td29ybGRcImAsIHR5cGU6IFwic3RyaW5nXCIsIHRhcmdldFR5cGU6IFwic3RyaW5nXCIgfSxcbiAgXSkoXCJzaG91bGQgY2hhbmdlIG5vdGhpbmcgZm9yICVwIFwiLCAoeyBjb2RlLCB0eXBlLCB0YXJnZXRUeXBlIH0pID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBnZW5lcmF0ZUNvZGUoXG4gICAgICAgIGNvZXJjZVR5cGUoc2NvcGUsIGV4cHJlc3Npb25pZnkoY29kZSksIHR5cGUgYXMgYW55LCB0YXJnZXRUeXBlIGFzIGFueSksXG4gICAgICApLFxuICAgICkudG9FcXVhbChjb2RlKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAge1xuICAgICAgY29kZTogYFwiMzAwXCJgLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHRhcmdldFR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBleHBlY3RlZENvZGU6IGBUb2tlbi5hc051bWJlcihcIjMwMFwiKWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgMzAwYCxcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICB0YXJnZXRUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgVG9rZW4uYXNTdHJpbmcoMzAwKWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgXCJbJ2ZvbycsICdiYXInXVwiYCxcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgVG9rZW4uYXNMaXN0KFwiWydmb28nLCAnYmFyJ11cIilgLFxuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogYFwiWzEsMiwzXVwiYCxcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJsaXN0XCIsIFwibnVtYmVyXCJdLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgVG9rZW4uYXNOdW1iZXJMaXN0KFwiWzEsMiwzXVwiKWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgXCJbJ2ZvbycsICdiYXInXVwiYCxcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJzZXRcIiwgXCJzdHJpbmdcIl0sXG4gICAgICBleHBlY3RlZENvZGU6IGBUb2tlbi5hc0xpc3QoXCJbJ2ZvbycsICdiYXInXVwiKWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgXCJbMSwyLDNdXCJgLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHRhcmdldFR5cGU6IFtcInNldFwiLCBcIm51bWJlclwiXSxcbiAgICAgIGV4cGVjdGVkQ29kZTogYFRva2VuLmFzTnVtYmVyTGlzdChcIlsxLDIsM11cIilgLFxuICAgIH0sXG4gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHRva2VuIGZ1bmN0aW9uIGZvciBib29sZWFuIGxpc3RzLCBzbyB3ZSBuZWVkIHRvIHRha2UgYW4gYXNBbnlcbiAgICB7XG4gICAgICBjb2RlOiBgXCJbdHJ1ZSxmYWxzZSx0cnVlXVwiYCxcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJsaXN0XCIsIFwiYm9vbFwiXSxcbiAgICAgIGV4cGVjdGVkQ29kZTogYFRva2VuLmFzQW55KFwiW3RydWUsZmFsc2UsdHJ1ZV1cIilgLFxuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogYFwieyBmb286ICdiYXInIH1cImAsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgdGFyZ2V0VHlwZTogW1wibWFwXCIsIFwic3RyaW5nXCJdLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgVG9rZW4uYXNTdHJpbmdNYXAoXCJ7IGZvbzogJ2JhcicgfVwiKWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgXCJ7IGZvbzogMSB9XCJgLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHRhcmdldFR5cGU6IFtcIm1hcFwiLCBcIm51bWJlclwiXSxcbiAgICAgIGV4cGVjdGVkQ29kZTogYFRva2VuLmFzTnVtYmVyTWFwKFwieyBmb286IDEgfVwiKWAsXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGNvZGU6IGBcInsgZm9vOiB0cnVlIH1cImAsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgdGFyZ2V0VHlwZTogW1wibWFwXCIsIFwiYm9vbFwiXSxcbiAgICAgIGV4cGVjdGVkQ29kZTogYFRva2VuLmFzQm9vbGVhbk1hcChcInsgZm9vOiB0cnVlIH1cIilgLFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBjb2RlOiBgXCJ7IGZvbzoge2JhcjogdHJ1ZX0gfVwiYCxcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJtYXBcIiwgW1wibWFwXCIsIFwiYm9vbGVhblwiXV0sXG4gICAgICBleHBlY3RlZENvZGU6IGBUb2tlbi5hc0FueU1hcChcInsgZm9vOiB7YmFyOiB0cnVlfSB9XCIpYCxcbiAgICB9LFxuICBdKShcbiAgICBcInNob3VsZCB1c2UgVG9rZW4gZnVuY3Rpb25zICVwXCIsXG4gICAgKHsgY29kZSwgdHlwZSwgdGFyZ2V0VHlwZSwgZXhwZWN0ZWRDb2RlIH0pID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZ2VuZXJhdGVDb2RlKFxuICAgICAgICAgIGNvZXJjZVR5cGUoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb25pZnkoY29kZSksXG4gICAgICAgICAgICB0eXBlIGFzIGFueSxcbiAgICAgICAgICAgIHRhcmdldFR5cGUgYXMgYW55LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLnRvRXF1YWwoZXhwZWN0ZWRDb2RlKTtcbiAgICB9LFxuICApO1xuXG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGNvZGU6IGBhVXNlckRlZmluZWRWYXJpYWJsZS52YWx1ZWAsXG4gICAgICB0eXBlOiBcImR5bmFtaWNcIixcbiAgICAgIHRhcmdldFR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBleHBlY3RlZENvZGU6IGBhVXNlckRlZmluZWRWYXJpYWJsZS5zdHJpbmdWYWx1ZWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgYVVzZXJEZWZpbmVkVmFyaWFibGUudmFsdWVgLFxuICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICB0YXJnZXRUeXBlOiBcIm51bWJlclwiLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgYVVzZXJEZWZpbmVkVmFyaWFibGUubnVtYmVyVmFsdWVgLFxuICAgIH0sXG4gICAge1xuICAgICAgY29kZTogYGFVc2VyRGVmaW5lZFZhcmlhYmxlLnZhbHVlYCxcbiAgICAgIHR5cGU6IFwiZHluYW1pY1wiLFxuICAgICAgdGFyZ2V0VHlwZTogW1wibGlzdFwiLCBcInN0cmluZ1wiXSxcbiAgICAgIGV4cGVjdGVkQ29kZTogYGFVc2VyRGVmaW5lZFZhcmlhYmxlLmxpc3RWYWx1ZWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgYVVzZXJEZWZpbmVkVmFyaWFibGUudmFsdWVgLFxuICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICB0YXJnZXRUeXBlOiBcImJvb2xcIixcbiAgICAgIGV4cGVjdGVkQ29kZTogYGFVc2VyRGVmaW5lZFZhcmlhYmxlLmJvb2xlYW5WYWx1ZWAsXG4gICAgfSxcbiAgXSkoXG4gICAgXCJzaG91bGQgdXNlIFRlcnJhZm9ybVZhcmlhYmxlcyBhY2Nlc3NvcnMgJXBcIixcbiAgICAoeyBjb2RlLCB0eXBlLCB0YXJnZXRUeXBlLCBleHBlY3RlZENvZGUgfSkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBnZW5lcmF0ZUNvZGUoXG4gICAgICAgICAgY29lcmNlVHlwZShcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbmlmeShjb2RlKSxcbiAgICAgICAgICAgIHR5cGUgYXMgYW55LFxuICAgICAgICAgICAgdGFyZ2V0VHlwZSBhcyBhbnksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkudG9FcXVhbChleHBlY3RlZENvZGUpO1xuICAgIH0sXG4gICk7XG5cbiAgaXQuZWFjaChbXG4gICAge1xuICAgICAgY29kZTogYGFVc2VyRGVmaW5lZFRlcnJhZm9ybUxvY2FsLnZhbHVlYCxcbiAgICAgIHR5cGU6IFwiZHluYW1pY1wiLFxuICAgICAgdGFyZ2V0VHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGV4cGVjdGVkQ29kZTogYGFVc2VyRGVmaW5lZFRlcnJhZm9ybUxvY2FsLnN0cmluZ1ZhbHVlYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvZGU6IGBhVXNlckRlZmluZWRUZXJyYWZvcm1Mb2NhbC52YWx1ZWAsXG4gICAgICB0eXBlOiBcImR5bmFtaWNcIixcbiAgICAgIHRhcmdldFR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBleHBlY3RlZENvZGU6IGBhVXNlckRlZmluZWRUZXJyYWZvcm1Mb2NhbC5udW1iZXJWYWx1ZWAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgYVVzZXJEZWZpbmVkVGVycmFmb3JtTG9jYWwudmFsdWVgLFxuICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICB0YXJnZXRUeXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgYVVzZXJEZWZpbmVkVGVycmFmb3JtTG9jYWwubGlzdFZhbHVlYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvZGU6IGBhVXNlckRlZmluZWRUZXJyYWZvcm1Mb2NhbC52YWx1ZWAsXG4gICAgICB0eXBlOiBcImR5bmFtaWNcIixcbiAgICAgIHRhcmdldFR5cGU6IFwiYm9vbFwiLFxuICAgICAgZXhwZWN0ZWRDb2RlOiBgYVVzZXJEZWZpbmVkVGVycmFmb3JtTG9jYWwuYm9vbGVhblZhbHVlYCxcbiAgICB9LFxuICBdKShcbiAgICBcInNob3VsZCB1c2UgVGVycmFmb3JtTG9jYWwgYWNjZXNzb3JzICVwXCIsXG4gICAgKHsgY29kZSwgdHlwZSwgdGFyZ2V0VHlwZSwgZXhwZWN0ZWRDb2RlIH0pID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZ2VuZXJhdGVDb2RlKFxuICAgICAgICAgIGNvZXJjZVR5cGUoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb25pZnkoY29kZSksXG4gICAgICAgICAgICB0eXBlIGFzIGFueSxcbiAgICAgICAgICAgIHRhcmdldFR5cGUgYXMgYW55LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLnRvRXF1YWwoZXhwZWN0ZWRDb2RlKTtcbiAgICB9LFxuICApO1xufSk7XG4iXX0=