@cdktn/hcl2cdk 0.23.0-pre.4 → 0.23.0-pre.41

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 (86) 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/build/generation.js +676 -0
  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 +19 -19
  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/generation.js +0 -676
  49. package/lib/index.js +0 -364
  50. package/lib/iteration.js +0 -87
  51. package/lib/jsii-rosetta-workarounds.js +0 -126
  52. package/lib/partialCode.js +0 -116
  53. package/lib/provider.js +0 -40
  54. package/lib/references.js +0 -141
  55. package/lib/schema.js +0 -81
  56. package/lib/terraformSchema.js +0 -136
  57. package/lib/types.js +0 -3
  58. package/lib/utils.js +0 -25
  59. package/lib/variables.js +0 -172
  60. /package/{lib → build}/__tests__/coerceType.test.d.ts +0 -0
  61. /package/{lib → build}/__tests__/expressionToTs.test.d.ts +0 -0
  62. /package/{lib → build}/__tests__/expressions.test.d.ts +0 -0
  63. /package/{lib → build}/__tests__/findExpressionType.test.d.ts +0 -0
  64. /package/{lib → build}/__tests__/functions.test.d.ts +0 -0
  65. /package/{lib → build}/__tests__/generation.test.d.ts +0 -0
  66. /package/{lib → build}/__tests__/jsii-rosetta-workarounds.test.d.ts +0 -0
  67. /package/{lib → build}/__tests__/partialCode.test.d.ts +0 -0
  68. /package/{lib → build}/__tests__/terraformSchema.test.d.ts +0 -0
  69. /package/{lib → build}/__tests__/testHelpers.d.ts +0 -0
  70. /package/{lib → build}/coerceType.d.ts +0 -0
  71. /package/{lib → build}/dynamic-blocks.d.ts +0 -0
  72. /package/{lib → build}/expressions.d.ts +0 -0
  73. /package/{lib → build}/function-bindings/functions.d.ts +0 -0
  74. /package/{lib → build}/function-bindings/functions.generated.d.ts +0 -0
  75. /package/{lib → build}/generation.d.ts +0 -0
  76. /package/{lib → build}/iteration.d.ts +0 -0
  77. /package/{lib → build}/jsii-rosetta-workarounds.d.ts +0 -0
  78. /package/{lib → build}/partialCode.d.ts +0 -0
  79. /package/{lib → build}/provider.d.ts +0 -0
  80. /package/{lib → build}/references.d.ts +0 -0
  81. /package/{lib → build}/schema.d.ts +0 -0
  82. /package/{lib → build}/terraformSchema.d.ts +0 -0
  83. /package/{lib → build}/types.d.ts +0 -0
  84. /package/{lib → build}/utils.d.ts +0 -0
  85. /package/{lib → build}/variables.d.ts +0 -0
  86. /package/{lib → src}/telemetryAllowList.json +0 -0
@@ -0,0 +1,105 @@
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
+ const terraformSchema_1 = require("../terraformSchema");
8
+ describe("getTypeAtPath", () => {
9
+ const schema = {
10
+ provider_schemas: {
11
+ test: {
12
+ provider: {},
13
+ data_source_schemas: {},
14
+ resource_schemas: {
15
+ test_resource: {
16
+ version: 1,
17
+ block: {
18
+ attributes: {
19
+ stringAttribute: {
20
+ type: "string",
21
+ },
22
+ numberAttribute: {
23
+ type: "number",
24
+ },
25
+ booleanAttribute: {
26
+ type: "bool",
27
+ },
28
+ stringListAttribute: {
29
+ type: ["list", "string"],
30
+ },
31
+ stringSetAttribute: {
32
+ type: ["set", "string"],
33
+ },
34
+ stringMapAttribute: {
35
+ type: ["map", "string"],
36
+ },
37
+ stringListListAttribute: {
38
+ type: ["list", ["list", "string"]],
39
+ },
40
+ objectAttribute: {
41
+ type: [
42
+ "object",
43
+ {
44
+ stringAttribute: "string",
45
+ },
46
+ ],
47
+ },
48
+ },
49
+ block_types: {
50
+ listMode: {
51
+ nesting_mode: "list",
52
+ block: {
53
+ attributes: {
54
+ stringAttribute: {
55
+ type: "string",
56
+ },
57
+ },
58
+ block_types: {
59
+ listMode: {
60
+ nesting_mode: "list",
61
+ block: {
62
+ attributes: {
63
+ stringAttribute: {
64
+ type: "string",
65
+ },
66
+ },
67
+ block_types: {},
68
+ },
69
+ },
70
+ },
71
+ },
72
+ },
73
+ },
74
+ },
75
+ },
76
+ },
77
+ },
78
+ },
79
+ };
80
+ it("should return null if it can not find the resource", () => {
81
+ expect((0, terraformSchema_1.getTypeAtPath)(schema, "test.nonExistantResource")).toBeNull();
82
+ });
83
+ it("should return null if it can not find the attribute on the resource", () => {
84
+ expect((0, terraformSchema_1.getTypeAtPath)(schema, "test.resource.ponyfoo")).toBeNull();
85
+ });
86
+ describe("known types", () => {
87
+ it.each([
88
+ ["stringAttribute", "string"],
89
+ ["numberAttribute", "number"],
90
+ ["booleanAttribute", "bool"],
91
+ ["stringListAttribute", ["list", "string"]],
92
+ ["stringSetAttribute", ["set", "string"]],
93
+ ["stringMapAttribute", ["map", "string"]],
94
+ ["stringMapAttribute.whateverkey", "string"],
95
+ ["stringListListAttribute", ["list", ["list", "string"]]],
96
+ ["stringListListAttribute.[]", ["list", "string"]],
97
+ ["stringListListAttribute.[].[]", "string"],
98
+ ["listMode.[].listMode.[].stringAttribute", "string"],
99
+ ["objectAttribute.stringAttribute", "string"],
100
+ ])(`access to %s returns %s`, (attr, res) => {
101
+ expect((0, terraformSchema_1.getTypeAtPath)(schema, `test.resource.${attr}`)).toEqual(res);
102
+ });
103
+ });
104
+ });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtU2NoZW1hLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3RlcnJhZm9ybVNjaGVtYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7O0FBR0gsd0RBQW1EO0FBRW5ELFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLE1BQU0sTUFBTSxHQUFtQjtRQUM3QixnQkFBZ0IsRUFBRTtZQUNoQixJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLEVBQVM7Z0JBQ25CLG1CQUFtQixFQUFFLEVBQUU7Z0JBQ3ZCLGdCQUFnQixFQUFFO29CQUNoQixhQUFhLEVBQUU7d0JBQ2IsT0FBTyxFQUFFLENBQUM7d0JBQ1YsS0FBSyxFQUFFOzRCQUNMLFVBQVUsRUFBRTtnQ0FDVixlQUFlLEVBQUU7b0NBQ2YsSUFBSSxFQUFFLFFBQVE7aUNBQ2Y7Z0NBQ0QsZUFBZSxFQUFFO29DQUNmLElBQUksRUFBRSxRQUFRO2lDQUNmO2dDQUNELGdCQUFnQixFQUFFO29DQUNoQixJQUFJLEVBQUUsTUFBTTtpQ0FDYjtnQ0FDRCxtQkFBbUIsRUFBRTtvQ0FDbkIsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztpQ0FDekI7Z0NBQ0Qsa0JBQWtCLEVBQUU7b0NBQ2xCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7aUNBQ3hCO2dDQUNELGtCQUFrQixFQUFFO29DQUNsQixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2lDQUN4QjtnQ0FDRCx1QkFBdUIsRUFBRTtvQ0FDdkIsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lDQUNuQztnQ0FDRCxlQUFlLEVBQUU7b0NBQ2YsSUFBSSxFQUFFO3dDQUNKLFFBQVE7d0NBQ1I7NENBQ0UsZUFBZSxFQUFFLFFBQVE7eUNBQzFCO3FDQUNGO2lDQUNGOzZCQUNGOzRCQUNELFdBQVcsRUFBRTtnQ0FDWCxRQUFRLEVBQUU7b0NBQ1IsWUFBWSxFQUFFLE1BQU07b0NBQ3BCLEtBQUssRUFBRTt3Q0FDTCxVQUFVLEVBQUU7NENBQ1YsZUFBZSxFQUFFO2dEQUNmLElBQUksRUFBRSxRQUFROzZDQUNmO3lDQUNGO3dDQUNELFdBQVcsRUFBRTs0Q0FDWCxRQUFRLEVBQUU7Z0RBQ1IsWUFBWSxFQUFFLE1BQU07Z0RBQ3BCLEtBQUssRUFBRTtvREFDTCxVQUFVLEVBQUU7d0RBQ1YsZUFBZSxFQUFFOzREQUNmLElBQUksRUFBRSxRQUFRO3lEQUNmO3FEQUNGO29EQUNELFdBQVcsRUFBRSxFQUFFO2lEQUNoQjs2Q0FDRjt5Q0FDRjtxQ0FDRjtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQUMsSUFBQSwrQkFBYSxFQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1FBQzdFLE1BQU0sQ0FBQyxJQUFBLCtCQUFhLEVBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDTixDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztZQUM3QixDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztZQUM3QixDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztZQUM1QixDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6QyxDQUFDLGdDQUFnQyxFQUFFLFFBQVEsQ0FBQztZQUM1QyxDQUFDLHlCQUF5QixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsRCxDQUFDLCtCQUErQixFQUFFLFFBQVEsQ0FBQztZQUMzQyxDQUFDLHlDQUF5QyxFQUFFLFFBQVEsQ0FBQztZQUNyRCxDQUFDLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQztTQUM5QyxDQUFDLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxDQUFDLElBQUEsK0JBQWEsRUFBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBQcm92aWRlclNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUF0UGF0aCB9IGZyb20gXCIuLi90ZXJyYWZvcm1TY2hlbWFcIjtcblxuZGVzY3JpYmUoXCJnZXRUeXBlQXRQYXRoXCIsICgpID0+IHtcbiAgY29uc3Qgc2NoZW1hOiBQcm92aWRlclNjaGVtYSA9IHtcbiAgICBwcm92aWRlcl9zY2hlbWFzOiB7XG4gICAgICB0ZXN0OiB7XG4gICAgICAgIHByb3ZpZGVyOiB7fSBhcyBhbnksXG4gICAgICAgIGRhdGFfc291cmNlX3NjaGVtYXM6IHt9LFxuICAgICAgICByZXNvdXJjZV9zY2hlbWFzOiB7XG4gICAgICAgICAgdGVzdF9yZXNvdXJjZToge1xuICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBudW1iZXJBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBib29sZWFuQXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0cmluZ0xpc3RBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdHJpbmdTZXRBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcInNldFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0cmluZ01hcEF0dHJpYnV0ZToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogW1wibWFwXCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RyaW5nTGlzdExpc3RBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcImxpc3RcIiwgW1wibGlzdFwiLCBcInN0cmluZ1wiXV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvYmplY3RBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcbiAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHtcbiAgICAgICAgICAgICAgICBsaXN0TW9kZToge1xuICAgICAgICAgICAgICAgICAgbmVzdGluZ19tb2RlOiBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsaXN0TW9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGluZ19tb2RlOiBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfdHlwZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGl0KFwic2hvdWxkIHJldHVybiBudWxsIGlmIGl0IGNhbiBub3QgZmluZCB0aGUgcmVzb3VyY2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRUeXBlQXRQYXRoKHNjaGVtYSwgXCJ0ZXN0Lm5vbkV4aXN0YW50UmVzb3VyY2VcIikpLnRvQmVOdWxsKCk7XG4gIH0pO1xuICBpdChcInNob3VsZCByZXR1cm4gbnVsbCBpZiBpdCBjYW4gbm90IGZpbmQgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgcmVzb3VyY2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRUeXBlQXRQYXRoKHNjaGVtYSwgXCJ0ZXN0LnJlc291cmNlLnBvbnlmb29cIikpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwia25vd24gdHlwZXNcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgW1wic3RyaW5nQXR0cmlidXRlXCIsIFwic3RyaW5nXCJdLFxuICAgICAgW1wibnVtYmVyQXR0cmlidXRlXCIsIFwibnVtYmVyXCJdLFxuICAgICAgW1wiYm9vbGVhbkF0dHJpYnV0ZVwiLCBcImJvb2xcIl0sXG4gICAgICBbXCJzdHJpbmdMaXN0QXR0cmlidXRlXCIsIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1dLFxuICAgICAgW1wic3RyaW5nU2V0QXR0cmlidXRlXCIsIFtcInNldFwiLCBcInN0cmluZ1wiXV0sXG4gICAgICBbXCJzdHJpbmdNYXBBdHRyaWJ1dGVcIiwgW1wibWFwXCIsIFwic3RyaW5nXCJdXSxcbiAgICAgIFtcInN0cmluZ01hcEF0dHJpYnV0ZS53aGF0ZXZlcmtleVwiLCBcInN0cmluZ1wiXSxcbiAgICAgIFtcInN0cmluZ0xpc3RMaXN0QXR0cmlidXRlXCIsIFtcImxpc3RcIiwgW1wibGlzdFwiLCBcInN0cmluZ1wiXV1dLFxuICAgICAgW1wic3RyaW5nTGlzdExpc3RBdHRyaWJ1dGUuW11cIiwgW1wibGlzdFwiLCBcInN0cmluZ1wiXV0sXG4gICAgICBbXCJzdHJpbmdMaXN0TGlzdEF0dHJpYnV0ZS5bXS5bXVwiLCBcInN0cmluZ1wiXSxcbiAgICAgIFtcImxpc3RNb2RlLltdLmxpc3RNb2RlLltdLnN0cmluZ0F0dHJpYnV0ZVwiLCBcInN0cmluZ1wiXSxcbiAgICAgIFtcIm9iamVjdEF0dHJpYnV0ZS5zdHJpbmdBdHRyaWJ1dGVcIiwgXCJzdHJpbmdcIl0sXG4gICAgXSkoYGFjY2VzcyB0byAlcyByZXR1cm5zICVzYCwgKGF0dHIsIHJlcykgPT4ge1xuICAgICAgZXhwZWN0KGdldFR5cGVBdFBhdGgoc2NoZW1hLCBgdGVzdC5yZXNvdXJjZS4ke2F0dHJ9YCkpLnRvRXF1YWwocmVzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.astToCode = void 0;
11
+ const generator_1 = __importDefault(require("@babel/generator"));
12
+ function astToCode(e) {
13
+ return (0, generator_1.default)(e).code;
14
+ }
15
+ exports.astToCode = astToCode;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdEhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3Rlc3RIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7OztBQUVILGlFQUF3QztBQUd4QyxTQUFnQixTQUFTLENBQUMsQ0FBZTtJQUN2QyxPQUFPLElBQUEsbUJBQVEsRUFBQyxDQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakMsQ0FBQztBQUZELDhCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgZ2VuZXJhdGUgZnJvbSBcIkBiYWJlbC9nZW5lcmF0b3JcIjtcbmltcG9ydCAqIGFzIHQgZnJvbSBcIkBiYWJlbC90eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXN0VG9Db2RlKGU6IHQuRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZShlIGFzIGFueSkuY29kZTtcbn1cbiJdfQ==
@@ -0,0 +1,240 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.findExpressionType = exports.coerceType = exports.typeForCallExpression = void 0;
30
+ // Copyright (c) HashiCorp, Inc
31
+ // SPDX-License-Identifier: MPL-2.0
32
+ const template_1 = __importDefault(require("@babel/template"));
33
+ const t = __importStar(require("@babel/types"));
34
+ const commons_1 = require("@cdktn/commons");
35
+ const deep_equal_1 = __importDefault(require("deep-equal"));
36
+ const functions_1 = require("./function-bindings/functions");
37
+ const terraformSchema_1 = require("./terraformSchema");
38
+ const codemaker_1 = require("codemaker");
39
+ function changeValueAccessor(ast, newAccessor) {
40
+ const propertyIdentifier = {
41
+ ...ast.property,
42
+ name: newAccessor,
43
+ };
44
+ return {
45
+ ...ast,
46
+ property: propertyIdentifier,
47
+ };
48
+ }
49
+ function typeForCallExpression(ast) {
50
+ // Find all cdktf.Fn.* || cdktn.Fn.* calls
51
+ if (t.isMemberExpression(ast.callee) &&
52
+ t.isMemberExpression(ast.callee.object) &&
53
+ t.isIdentifier(ast.callee.object.object) &&
54
+ (ast.callee.object.object.name === "cdktf" ||
55
+ ast.callee.object.object.name === "cdktn") &&
56
+ t.isIdentifier(ast.callee.object.property) &&
57
+ ast.callee.object.property.name === "Fn" &&
58
+ t.isIdentifier(ast.callee.property)) {
59
+ const meta = functions_1.tsFunctionsMap[ast.callee.property.name];
60
+ if (meta) {
61
+ return meta.returnType;
62
+ }
63
+ else {
64
+ return "dynamic";
65
+ }
66
+ }
67
+ // cdktf.conditional, cdktf.propertyAccess, cdktf.Op.* are all dynamic
68
+ // By default we assume dynamic
69
+ return "dynamic";
70
+ }
71
+ exports.typeForCallExpression = typeForCallExpression;
72
+ const coerceType = (scope, ast, from, to) => {
73
+ if (to === undefined) {
74
+ return ast;
75
+ }
76
+ if ((0, deep_equal_1.default)(to, from)) {
77
+ return ast;
78
+ }
79
+ const isTerraformVariableOrLocal = ast.type === "MemberExpression" &&
80
+ ast.property.type === "Identifier" &&
81
+ ast.property.name === "value" &&
82
+ ast.object.type === "Identifier" &&
83
+ Object.values(scope.variables).some((knownVars) => knownVars.variableName === ast.object.name &&
84
+ ["var", "local"].includes(knownVars.resource));
85
+ const addTokenToImports = () => scope.importables.push({
86
+ constructName: "Token",
87
+ provider: "cdktn",
88
+ });
89
+ if (Array.isArray(to)) {
90
+ if (to[0] === "list" || to[0] === "set") {
91
+ switch (to[1]) {
92
+ case "string":
93
+ if (isTerraformVariableOrLocal) {
94
+ return changeValueAccessor(ast, "listValue");
95
+ }
96
+ addTokenToImports();
97
+ return template_1.default.expression(`Token.asList(%%ast%%)`)({
98
+ ast: ast,
99
+ });
100
+ case "number":
101
+ addTokenToImports();
102
+ return template_1.default.expression(`Token.asNumberList(%%ast%%)`)({
103
+ ast: ast,
104
+ });
105
+ case "bool":
106
+ addTokenToImports();
107
+ return template_1.default.expression(`Token.asAny(%%ast%%)`)({
108
+ ast: ast,
109
+ });
110
+ default:
111
+ addTokenToImports();
112
+ return template_1.default.expression(`Token.asAny(%%ast%%)`)({
113
+ ast: ast,
114
+ });
115
+ }
116
+ }
117
+ if (to[0] === "map") {
118
+ switch (to[1]) {
119
+ case "string":
120
+ addTokenToImports();
121
+ return template_1.default.expression(`Token.asStringMap(%%ast%%)`)({
122
+ ast: ast,
123
+ });
124
+ case "number":
125
+ addTokenToImports();
126
+ return template_1.default.expression(`Token.asNumberMap(%%ast%%)`)({
127
+ ast: ast,
128
+ });
129
+ case "bool":
130
+ addTokenToImports();
131
+ return template_1.default.expression(`Token.asBooleanMap(%%ast%%)`)({
132
+ ast: ast,
133
+ });
134
+ default:
135
+ addTokenToImports();
136
+ return template_1.default.expression(`Token.asAnyMap(%%ast%%)`)({
137
+ ast: ast,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ switch (to) {
143
+ case "number":
144
+ if (isTerraformVariableOrLocal) {
145
+ return changeValueAccessor(ast, "numberValue");
146
+ }
147
+ addTokenToImports();
148
+ return template_1.default.expression(`Token.asNumber(%%ast%%)`)({
149
+ ast: ast,
150
+ });
151
+ case "string":
152
+ if (isTerraformVariableOrLocal) {
153
+ return changeValueAccessor(ast, "stringValue");
154
+ }
155
+ addTokenToImports();
156
+ return template_1.default.expression(`Token.asString(%%ast%%)`)({
157
+ ast: ast,
158
+ });
159
+ case "bool":
160
+ if (isTerraformVariableOrLocal) {
161
+ return changeValueAccessor(ast, "booleanValue");
162
+ }
163
+ addTokenToImports();
164
+ return template_1.default.expression(`Token.asBoolean(%%ast%%)`)({
165
+ ast: ast,
166
+ });
167
+ }
168
+ commons_1.logger.debug(`Could not coerce from ${from} to ${to} for ${ast}`);
169
+ return ast;
170
+ };
171
+ exports.coerceType = coerceType;
172
+ function findExpressionType(scope, ast) {
173
+ const isReferenceWithoutTemplateString = ast.type === "MemberExpression" && ast.object.type === "Identifier";
174
+ // If we have a property to cdktf.propertyAccess call it's dynamic
175
+ if (ast.type === "CallExpression") {
176
+ return typeForCallExpression(ast);
177
+ }
178
+ if (ast.type === "StringLiteral") {
179
+ return "string";
180
+ }
181
+ if (ast.type === "NumericLiteral") {
182
+ return "number";
183
+ }
184
+ if (ast.type === "BooleanLiteral") {
185
+ return "bool";
186
+ }
187
+ // If we only have one reference this is a
188
+ if (isReferenceWithoutTemplateString) {
189
+ const destructuredAst = destructureAst(ast);
190
+ if (!destructuredAst) {
191
+ commons_1.logger.debug(`Could not destructure ast: ${JSON.stringify(ast, null, 2)}`);
192
+ return "dynamic";
193
+ }
194
+ const [astVariableName, ...attributes] = destructuredAst;
195
+ const variable = Object.values(scope.variables).find((x) => x.variableName === astVariableName);
196
+ if (!variable) {
197
+ commons_1.logger.debug(`Could not find variable ${astVariableName} given scope: ${JSON.stringify(scope.variables, null, 2)}`);
198
+ // We don't know, this should not happen, but if it does we assume the worst case and make it dynamic
199
+ return "dynamic";
200
+ }
201
+ if (variable.resource === "var") {
202
+ return "dynamic";
203
+ }
204
+ const { resource: resourceType } = variable;
205
+ const [provider, ...resourceNameFragments] = resourceType.split("_");
206
+ const tfResourcePath = `${provider}.${resourceNameFragments.join("_")}.${attributes.map((x) => (0, codemaker_1.toSnakeCase)(x)).join(".")}`;
207
+ const type = (0, terraformSchema_1.getTypeAtPath)(scope.providerSchema, tfResourcePath);
208
+ // If this is an attribute type we can return it
209
+ if (typeof type === "string" || Array.isArray(type)) {
210
+ return type;
211
+ }
212
+ // Either nothing is found or it's a block type
213
+ return "dynamic";
214
+ }
215
+ return "string";
216
+ }
217
+ exports.findExpressionType = findExpressionType;
218
+ /*
219
+ * Transforms a babel AST into a list of string accessors
220
+ * e.g. foo.bar.baz -> ["foo", "bar", "baz"]
221
+ */
222
+ function destructureAst(ast) {
223
+ switch (ast.type) {
224
+ case "Identifier":
225
+ return [ast.name];
226
+ case "MemberExpression": {
227
+ const object = destructureAst(ast.object);
228
+ const property = destructureAst(ast.property);
229
+ if (object && property) {
230
+ return [...object, ...property];
231
+ }
232
+ else {
233
+ return undefined;
234
+ }
235
+ }
236
+ default:
237
+ return undefined;
238
+ }
239
+ }
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNlVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2VyY2VUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywrREFBdUM7QUFDdkMsZ0RBQWtDO0FBQ2xDLDRDQUF1RDtBQUV2RCw0REFBbUM7QUFDbkMsNkRBQStEO0FBQy9ELHVEQUFrRDtBQUNsRCx5Q0FBd0M7QUFFeEMsU0FBUyxtQkFBbUIsQ0FDMUIsR0FBdUIsRUFDdkIsV0FBbUI7SUFFbkIsTUFBTSxrQkFBa0IsR0FBaUI7UUFDdkMsR0FBSSxHQUFHLENBQUMsUUFBeUI7UUFDakMsSUFBSSxFQUFFLFdBQVc7S0FDbEIsQ0FBQztJQUNGLE9BQU87UUFDTCxHQUFHLEdBQUc7UUFDTixRQUFRLEVBQUUsa0JBQWtCO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsR0FBcUI7SUFDekQsMENBQTBDO0lBQzFDLElBQ0UsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFD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SUFBSSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUNEO1lBQ0UsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHRlbXBsYXRlIGZyb20gXCJAYmFiZWwvdGVtcGxhdGVcIjtcbmltcG9ydCAqIGFzIHQgZnJvbSBcIkBiYWJlbC90eXBlc1wiO1xuaW1wb3J0IHsgbG9nZ2VyLCBBdHRyaWJ1dGVUeXBlIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm9ncmFtU2NvcGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwiZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdHNGdW5jdGlvbnNNYXAgfSBmcm9tIFwiLi9mdW5jdGlvbi1iaW5kaW5ncy9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IGdldFR5cGVBdFBhdGggfSBmcm9tIFwiLi90ZXJyYWZvcm1TY2hlbWFcIjtcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuXG5mdW5jdGlvbiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKFxuICBhc3Q6IHQuTWVtYmVyRXhwcmVzc2lvbixcbiAgbmV3QWNjZXNzb3I6IHN0cmluZyxcbik6IHQuTWVtYmVyRXhwcmVzc2lvbiB7XG4gIGNvbnN0IHByb3BlcnR5SWRlbnRpZmllcjogdC5JZGVudGlmaWVyID0ge1xuICAgIC4uLihhc3QucHJvcGVydHkgYXMgdC5JZGVudGlmaWVyKSxcbiAgICBuYW1lOiBuZXdBY2Nlc3NvcixcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hc3QsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5SWRlbnRpZmllcixcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGb3JDYWxsRXhwcmVzc2lvbihhc3Q6IHQuQ2FsbEV4cHJlc3Npb24pOiBBdHRyaWJ1dGVUeXBlIHtcbiAgLy8gRmluZCBhbGwgY2RrdGYuRm4uKiB8fCBjZGt0bi5Gbi4qIGNhbGxzXG4gIGlmIChcbiAgICB0LmlzTWVtYmVyRXhwcmVzc2lvbihhc3QuY2FsbGVlKSAmJlxuICAgIHQuaXNNZW1iZXJFeHByZXNzaW9uKGFzdC5jYWxsZWUub2JqZWN0KSAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUub2JqZWN0Lm9iamVjdCkgJiZcbiAgICAoYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0Lm5hbWUgPT09IFwiY2RrdGZcIiB8fFxuICAgICAgYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0Lm5hbWUgPT09IFwiY2RrdG5cIikgJiZcbiAgICB0LmlzSWRlbnRpZmllcihhc3QuY2FsbGVlLm9iamVjdC5wcm9wZXJ0eSkgJiZcbiAgICBhc3QuY2FsbGVlLm9iamVjdC5wcm9wZXJ0eS5uYW1lID09PSBcIkZuXCIgJiZcbiAgICB0LmlzSWRlbnRpZmllcihhc3QuY2FsbGVlLnByb3BlcnR5KVxuICApIHtcbiAgICBjb25zdCBtZXRhID0gdHNGdW5jdGlvbnNNYXBbYXN0LmNhbGxlZS5wcm9wZXJ0eS5uYW1lXTtcbiAgICBpZiAobWV0YSkge1xuICAgICAgcmV0dXJuIG1ldGEucmV0dXJuVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNka3RmLmNvbmRpdGlvbmFsLCBjZGt0Zi5wcm9wZXJ0eUFjY2VzcywgY2RrdGYuT3AuKiBhcmUgYWxsIGR5bmFtaWNcbiAgLy8gQnkgZGVmYXVsdCB3ZSBhc3N1bWUgZHluYW1pY1xuICByZXR1cm4gXCJkeW5hbWljXCI7XG59XG5cbmV4cG9ydCBjb25zdCBjb2VyY2VUeXBlID0gKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBhc3Q6IHQuRXhwcmVzc2lvbixcbiAgZnJvbTogQXR0cmlidXRlVHlwZSxcbiAgdG86IEF0dHJpYnV0ZVR5cGUgfCB1bmRlZmluZWQsXG4pOiB0LkV4cHJlc3Npb24gPT4ge1xuICBpZiAodG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhc3Q7XG4gIH1cblxuICBpZiAoZGVlcEVxdWFsKHRvLCBmcm9tKSkge1xuICAgIHJldHVybiBhc3Q7XG4gIH1cblxuICBjb25zdCBpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCA9XG4gICAgYXN0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgYXN0LnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgYXN0LnByb3BlcnR5Lm5hbWUgPT09IFwidmFsdWVcIiAmJlxuICAgIGFzdC5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBPYmplY3QudmFsdWVzKHNjb3BlLnZhcmlhYmxlcykuc29tZShcbiAgICAgIChrbm93blZhcnMpID0+XG4gICAgICAgIGtub3duVmFycy52YXJpYWJsZU5hbWUgPT09IChhc3Qub2JqZWN0IGFzIHQuSWRlbnRpZmllcikubmFtZSAmJlxuICAgICAgICBbXCJ2YXJcIiwgXCJsb2NhbFwiXS5pbmNsdWRlcyhrbm93blZhcnMucmVzb3VyY2UpLFxuICAgICk7XG5cbiAgY29uc3QgYWRkVG9rZW5Ub0ltcG9ydHMgPSAoKSA9PlxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgY29uc3RydWN0TmFtZTogXCJUb2tlblwiLFxuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICB9KTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0bykpIHtcbiAgICBpZiAodG9bMF0gPT09IFwibGlzdFwiIHx8IHRvWzBdID09PSBcInNldFwiKSB7XG4gICAgICBzd2l0Y2ggKHRvWzFdKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICBpZiAoaXNUZXJyYWZvcm1WYXJpYWJsZU9yTG9jYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwibGlzdFZhbHVlXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzTGlzdCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzTnVtYmVyTGlzdCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0FueSglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0FueSglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9bMF0gPT09IFwibWFwXCIpIHtcbiAgICAgIHN3aXRjaCAodG9bMV0pIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nTWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXJNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNCb29sZWFuTWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55TWFwKCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodG8pIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICBpZiAoaXNUZXJyYWZvcm1WYXJpYWJsZU9yTG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZhbHVlQWNjZXNzb3IoYXN0IGFzIHQuTWVtYmVyRXhwcmVzc2lvbiwgXCJudW1iZXJWYWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXIoJSVhc3QlJSlgKSh7XG4gICAgICAgIGFzdDogYXN0LFxuICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcInN0cmluZ1ZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc1N0cmluZyglJWFzdCUlKWApKHtcbiAgICAgICAgYXN0OiBhc3QsXG4gICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgY2FzZSBcImJvb2xcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcImJvb2xlYW5WYWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNCb29sZWFuKCUlYXN0JSUpYCkoe1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgQ291bGQgbm90IGNvZXJjZSBmcm9tICR7ZnJvbX0gdG8gJHt0b30gZm9yICR7YXN0fWApO1xuICByZXR1cm4gYXN0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFeHByZXNzaW9uVHlwZShcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgYXN0OiB0LkV4cHJlc3Npb24sXG4pOiBBdHRyaWJ1dGVUeXBlIHtcbiAgY29uc3QgaXNSZWZlcmVuY2VXaXRob3V0VGVtcGxhdGVTdHJpbmcgPVxuICAgIGFzdC50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBhc3Qub2JqZWN0LnR5cGUgPT09IFwiSWRlbnRpZmllclwiO1xuXG4gIC8vIElmIHdlIGhhdmUgYSBwcm9wZXJ0eSB0byBjZGt0Zi5wcm9wZXJ0eUFjY2VzcyBjYWxsIGl0J3MgZHluYW1pY1xuICBpZiAoYXN0LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiB0eXBlRm9yQ2FsbEV4cHJlc3Npb24oYXN0KTtcbiAgfVxuXG4gIGlmIChhc3QudHlwZSA9PT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxuICBpZiAoYXN0LnR5cGUgPT09IFwiTnVtZXJpY0xpdGVyYWxcIikge1xuICAgIHJldHVybiBcIm51bWJlclwiO1xuICB9XG4gIGlmIChhc3QudHlwZSA9PT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIFwiYm9vbFwiO1xuICB9XG5cbiAgLy8gSWYgd2Ugb25seSBoYXZlIG9uZSByZWZlcmVuY2UgdGhpcyBpcyBhXG4gIGlmIChpc1JlZmVyZW5jZVdpdGhvdXRUZW1wbGF0ZVN0cmluZykge1xuICAgIGNvbnN0IGRlc3RydWN0dXJlZEFzdCA9IGRlc3RydWN0dXJlQXN0KGFzdCk7XG4gICAgaWYgKCFkZXN0cnVjdHVyZWRBc3QpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBkZXN0cnVjdHVyZSBhc3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXN0LCBudWxsLCAyKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXN0VmFyaWFibGVOYW1lLCAuLi5hdHRyaWJ1dGVzXSA9IGRlc3RydWN0dXJlZEFzdDtcbiAgICBjb25zdCB2YXJpYWJsZSA9IE9iamVjdC52YWx1ZXMoc2NvcGUudmFyaWFibGVzKS5maW5kKFxuICAgICAgKHgpID0+IHgudmFyaWFibGVOYW1lID09PSBhc3RWYXJpYWJsZU5hbWUsXG4gICAgKTtcblxuICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZhcmlhYmxlICR7YXN0VmFyaWFibGVOYW1lfSBnaXZlbiBzY29wZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBzY29wZS52YXJpYWJsZXMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgLy8gV2UgZG9uJ3Qga25vdywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMgd2UgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIGFuZCBtYWtlIGl0IGR5bmFtaWNcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGUucmVzb3VyY2UgPT09IFwidmFyXCIpIHtcbiAgICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlc291cmNlOiByZXNvdXJjZVR5cGUgfSA9IHZhcmlhYmxlO1xuICAgIGNvbnN0IFtwcm92aWRlciwgLi4ucmVzb3VyY2VOYW1lRnJhZ21lbnRzXSA9IHJlc291cmNlVHlwZS5zcGxpdChcIl9cIik7XG4gICAgY29uc3QgdGZSZXNvdXJjZVBhdGggPSBgJHtwcm92aWRlcn0uJHtyZXNvdXJjZU5hbWVGcmFnbWVudHMuam9pbihcbiAgICAgIFwiX1wiLFxuICAgICl9LiR7YXR0cmlidXRlcy5tYXAoKHgpID0+IHRvU25ha2VDYXNlKHgpKS5qb2luKFwiLlwiKX1gO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlQXRQYXRoKHNjb3BlLnByb3ZpZGVyU2NoZW1hLCB0ZlJlc291cmNlUGF0aCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGFuIGF0dHJpYnV0ZSB0eXBlIHdlIGNhbiByZXR1cm4gaXRcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgLy8gRWl0aGVyIG5vdGhpbmcgaXMgZm91bmQgb3IgaXQncyBhIGJsb2NrIHR5cGVcbiAgICByZXR1cm4gXCJkeW5hbWljXCI7XG4gIH1cblxuICByZXR1cm4gXCJzdHJpbmdcIjtcbn1cblxuLypcbiAqIFRyYW5zZm9ybXMgYSBiYWJlbCBBU1QgaW50byBhIGxpc3Qgb2Ygc3RyaW5nIGFjY2Vzc29yc1xuICogZS5nLiBmb28uYmFyLmJheiAtPiBbXCJmb29cIiwgXCJiYXJcIiwgXCJiYXpcIl1cbiAqL1xuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVBc3QoYXN0OiB0LkV4cHJlc3Npb24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgcmV0dXJuIFthc3QubmFtZV07XG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjoge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0Lm9iamVjdCk7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGRlc3RydWN0dXJlQXN0KGFzdC5wcm9wZXJ0eSBhcyB0LkV4cHJlc3Npb24pO1xuICAgICAgaWYgKG9iamVjdCAmJiBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gWy4uLm9iamVjdCwgLi4ucHJvcGVydHldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,44 @@
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.extractDynamicBlocks = exports.isNestedDynamicBlock = void 0;
8
+ function isNestedDynamicBlock(dynBlocks, block) {
9
+ return dynBlocks.some((dyn) => dyn.path !== block.path && block.path.startsWith(dyn.path));
10
+ }
11
+ exports.isNestedDynamicBlock = isNestedDynamicBlock;
12
+ const extractDynamicBlocks = (config, path = "") => {
13
+ if (typeof config !== "object") {
14
+ return [];
15
+ }
16
+ if (!config) {
17
+ return [];
18
+ }
19
+ if (Array.isArray(config)) {
20
+ return config.reduce((carry, item, index) => [
21
+ ...carry,
22
+ ...(0, exports.extractDynamicBlocks)(item, `${path}.${index}`),
23
+ ], []);
24
+ }
25
+ if ("dynamic" in config) {
26
+ const dynamic = config.dynamic;
27
+ const scopedVar = Object.keys(dynamic)[0];
28
+ const { for_each, content } = dynamic[scopedVar][0];
29
+ return [
30
+ {
31
+ path: `${path}.dynamic.${scopedVar}`,
32
+ for_each,
33
+ content,
34
+ scopedVar,
35
+ },
36
+ ...(0, exports.extractDynamicBlocks)(content, `${path}.dynamic.${scopedVar}.0.content`),
37
+ ];
38
+ }
39
+ return Object.entries(config).reduce((carry, [key, value]) => {
40
+ return [...carry, ...(0, exports.extractDynamicBlocks)(value, `${path}.${key}`)];
41
+ }, []);
42
+ };
43
+ exports.extractDynamicBlocks = extractDynamicBlocks;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ibG9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHluYW1pYy1ibG9ja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBSUgsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQXlCLEVBQ3pCLEtBQW1CO0lBRW5CLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FDbkIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ3BFLENBQUM7QUFDSixDQUFDO0FBUEQsb0RBT0M7QUFFTSxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLE1BQThCLEVBQzlCLElBQUksR0FBRyxFQUFFLEVBQ08sRUFBRTtJQUNsQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEIsR0FBRyxLQUFLO1lBQ1IsR0FBRyxJQUFBLDRCQUFvQixFQUFDLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztTQUNsRCxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRCxPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLEdBQUcsSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDcEMsUUFBUTtnQkFDUixPQUFPO2dCQUNQLFNBQVM7YUFDVjtZQUNELEdBQUcsSUFBQSw0QkFBb0IsRUFDckIsT0FBTyxFQUNQLEdBQUcsSUFBSSxZQUFZLFNBQVMsWUFBWSxDQUN6QztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzNELE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUEsNEJBQW9CLEVBQUMsS0FBWSxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDLEVBQUUsRUFBb0IsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQTVDVyxRQUFBLG9CQUFvQix3QkE0Qy9CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEeW5hbWljQmxvY2ssIFRlcnJhZm9ybVJlc291cmNlQmxvY2sgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWREeW5hbWljQmxvY2soXG4gIGR5bkJsb2NrczogRHluYW1pY0Jsb2NrW10sXG4gIGJsb2NrOiBEeW5hbWljQmxvY2ssXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGR5bkJsb2Nrcy5zb21lKFxuICAgIChkeW4pID0+IGR5bi5wYXRoICE9PSBibG9jay5wYXRoICYmIGJsb2NrLnBhdGguc3RhcnRzV2l0aChkeW4ucGF0aCksXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RHluYW1pY0Jsb2NrcyA9IChcbiAgY29uZmlnOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBwYXRoID0gXCJcIixcbik6IER5bmFtaWNCbG9ja1tdID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykpIHtcbiAgICByZXR1cm4gY29uZmlnLnJlZHVjZShcbiAgICAgIChjYXJyeSwgaXRlbSwgaW5kZXgpID0+IFtcbiAgICAgICAgLi4uY2FycnksXG4gICAgICAgIC4uLmV4dHJhY3REeW5hbWljQmxvY2tzKGl0ZW0sIGAke3BhdGh9LiR7aW5kZXh9YCksXG4gICAgICBdLFxuICAgICAgW10sXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcImR5bmFtaWNcIiBpbiBjb25maWcpIHtcbiAgICBjb25zdCBkeW5hbWljID0gKGNvbmZpZyBhcyBhbnkpLmR5bmFtaWM7XG4gICAgY29uc3Qgc2NvcGVkVmFyID0gT2JqZWN0LmtleXMoZHluYW1pYylbMF07XG4gICAgY29uc3QgeyBmb3JfZWFjaCwgY29udGVudCB9ID0gZHluYW1pY1tzY29wZWRWYXJdWzBdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogYCR7cGF0aH0uZHluYW1pYy4ke3Njb3BlZFZhcn1gLFxuICAgICAgICBmb3JfZWFjaCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc2NvcGVkVmFyLFxuICAgICAgfSxcbiAgICAgIC4uLmV4dHJhY3REeW5hbWljQmxvY2tzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBgJHtwYXRofS5keW5hbWljLiR7c2NvcGVkVmFyfS4wLmNvbnRlbnRgLFxuICAgICAgKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZykucmVkdWNlKChjYXJyeSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5jYXJyeSwgLi4uZXh0cmFjdER5bmFtaWNCbG9ja3ModmFsdWUgYXMgYW55LCBgJHtwYXRofS4ke2tleX1gKV07XG4gIH0sIFtdIGFzIER5bmFtaWNCbG9ja1tdKTtcbn07XG4iXX0=