@cdktn/hcl2cdk 0.22.0-pre.2
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.
- package/README.md +95 -0
- package/ambient.d.ts +14 -0
- package/jest.config.js +16 -0
- package/lib/__tests__/coerceType.test.d.ts +2 -0
- package/lib/__tests__/coerceType.test.js +165 -0
- package/lib/__tests__/expressionToTs.test.d.ts +6 -0
- package/lib/__tests__/expressionToTs.test.js +693 -0
- package/lib/__tests__/expressions.test.d.ts +4 -0
- package/lib/__tests__/expressions.test.js +415 -0
- package/lib/__tests__/findExpressionType.test.d.ts +6 -0
- package/lib/__tests__/findExpressionType.test.js +105 -0
- package/lib/__tests__/functions.test.d.ts +6 -0
- package/lib/__tests__/functions.test.js +605 -0
- package/lib/__tests__/generation.test.d.ts +6 -0
- package/lib/__tests__/generation.test.js +45 -0
- package/lib/__tests__/jsii-rosetta-workarounds.test.d.ts +2 -0
- package/lib/__tests__/jsii-rosetta-workarounds.test.js +86 -0
- package/lib/__tests__/partialCode.test.d.ts +6 -0
- package/lib/__tests__/partialCode.test.js +390 -0
- package/lib/__tests__/terraformSchema.test.d.ts +6 -0
- package/lib/__tests__/terraformSchema.test.js +105 -0
- package/lib/__tests__/testHelpers.d.ts +7 -0
- package/lib/__tests__/testHelpers.js +16 -0
- package/lib/coerceType.d.ts +7 -0
- package/lib/coerceType.js +240 -0
- package/lib/dynamic-blocks.d.ts +8 -0
- package/lib/dynamic-blocks.js +44 -0
- package/lib/expressions.d.ts +9 -0
- package/lib/expressions.js +634 -0
- package/lib/function-bindings/functions.d.ts +31 -0
- package/lib/function-bindings/functions.generated.d.ts +806 -0
- package/lib/function-bindings/functions.generated.js +1142 -0
- package/lib/function-bindings/functions.js +73 -0
- package/lib/generation.d.ts +26 -0
- package/lib/generation.js +676 -0
- package/lib/index.d.ts +136 -0
- package/lib/index.js +364 -0
- package/lib/iteration.d.ts +23 -0
- package/lib/iteration.js +87 -0
- package/lib/jsii-rosetta-workarounds.d.ts +5 -0
- package/lib/jsii-rosetta-workarounds.js +126 -0
- package/lib/partialCode.d.ts +11 -0
- package/lib/partialCode.js +116 -0
- package/lib/provider.d.ts +8 -0
- package/lib/provider.js +40 -0
- package/lib/references.d.ts +11 -0
- package/lib/references.js +141 -0
- package/lib/schema.d.ts +297 -0
- package/lib/schema.js +81 -0
- package/lib/telemetryAllowList.json +24 -0
- package/lib/terraformSchema.d.ts +6 -0
- package/lib/terraformSchema.js +136 -0
- package/lib/types.d.ts +50 -0
- package/lib/types.js +3 -0
- package/lib/utils.d.ts +6 -0
- package/lib/utils.js +25 -0
- package/lib/variables.d.ts +10 -0
- package/lib/variables.js +172 -0
- package/package.json +71 -0
- package/package.sh +9 -0
- package/tsconfig.json +42 -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtU2NoZW1hLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXJyYWZvcm1TY2hlbWEudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOztBQUdILHdEQUFtRDtBQUVuRCxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixNQUFNLE1BQU0sR0FBbUI7UUFDN0IsZ0JBQWdCLEVBQUU7WUFDaEIsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxFQUFTO2dCQUNuQixtQkFBbUIsRUFBRSxFQUFFO2dCQUN2QixnQkFBZ0IsRUFBRTtvQkFDaEIsYUFBYSxFQUFFO3dCQUNiLE9BQU8sRUFBRSxDQUFDO3dCQUNWLEtBQUssRUFBRTs0QkFDTCxVQUFVLEVBQUU7Z0NBQ1YsZUFBZSxFQUFFO29DQUNmLElBQUksRUFBRSxRQUFRO2lDQUNmO2dDQUNELGVBQWUsRUFBRTtvQ0FDZixJQUFJLEVBQUUsUUFBUTtpQ0FDZjtnQ0FDRCxnQkFBZ0IsRUFBRTtvQ0FDaEIsSUFBSSxFQUFFLE1BQU07aUNBQ2I7Z0NBQ0QsbUJBQW1CLEVBQUU7b0NBQ25CLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7aUNBQ3pCO2dDQUNELGtCQUFrQixFQUFFO29DQUNsQixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2lDQUN4QjtnQ0FDRCxrQkFBa0IsRUFBRTtvQ0FDbEIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztpQ0FDeEI7Z0NBQ0QsdUJBQXVCLEVBQUU7b0NBQ3ZCLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztpQ0FDbkM7Z0NBQ0QsZUFBZSxFQUFFO29DQUNmLElBQUksRUFBRTt3Q0FDSixRQUFRO3dDQUNSOzRDQUNFLGVBQWUsRUFBRSxRQUFRO3lDQUMxQjtxQ0FDRjtpQ0FDRjs2QkFDRjs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1gsUUFBUSxFQUFFO29DQUNSLFlBQVksRUFBRSxNQUFNO29DQUNwQixLQUFLLEVBQUU7d0NBQ0wsVUFBVSxFQUFFOzRDQUNWLGVBQWUsRUFBRTtnREFDZixJQUFJLEVBQUUsUUFBUTs2Q0FDZjt5Q0FDRjt3Q0FDRCxXQUFXLEVBQUU7NENBQ1gsUUFBUSxFQUFFO2dEQUNSLFlBQVksRUFBRSxNQUFNO2dEQUNwQixLQUFLLEVBQUU7b0RBQ0wsVUFBVSxFQUFFO3dEQUNWLGVBQWUsRUFBRTs0REFDZixJQUFJLEVBQUUsUUFBUTt5REFDZjtxREFDRjtvREFDRCxXQUFXLEVBQUUsRUFBRTtpREFDaEI7NkNBQ0Y7eUNBQ0Y7cUNBQ0Y7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDNUQsTUFBTSxDQUFDLElBQUEsK0JBQWEsRUFBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtRQUM3RSxNQUFNLENBQUMsSUFBQSwrQkFBYSxFQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ04sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7WUFDN0IsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7WUFDN0IsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUM7WUFDNUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMzQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekMsQ0FBQyxnQ0FBZ0MsRUFBRSxRQUFRLENBQUM7WUFDNUMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEQsQ0FBQywrQkFBK0IsRUFBRSxRQUFRLENBQUM7WUFDM0MsQ0FBQyx5Q0FBeUMsRUFBRSxRQUFRLENBQUM7WUFDckQsQ0FBQyxpQ0FBaUMsRUFBRSxRQUFRLENBQUM7U0FDOUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzFDLE1BQU0sQ0FBQyxJQUFBLCtCQUFhLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgUHJvdmlkZXJTY2hlbWEgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGdldFR5cGVBdFBhdGggfSBmcm9tIFwiLi4vdGVycmFmb3JtU2NoZW1hXCI7XG5cbmRlc2NyaWJlKFwiZ2V0VHlwZUF0UGF0aFwiLCAoKSA9PiB7XG4gIGNvbnN0IHNjaGVtYTogUHJvdmlkZXJTY2hlbWEgPSB7XG4gICAgcHJvdmlkZXJfc2NoZW1hczoge1xuICAgICAgdGVzdDoge1xuICAgICAgICBwcm92aWRlcjoge30gYXMgYW55LFxuICAgICAgICBkYXRhX3NvdXJjZV9zY2hlbWFzOiB7fSxcbiAgICAgICAgcmVzb3VyY2Vfc2NoZW1hczoge1xuICAgICAgICAgIHRlc3RfcmVzb3VyY2U6IHtcbiAgICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgc3RyaW5nQXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbnVtYmVyQXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYm9vbGVhbkF0dHJpYnV0ZToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdHJpbmdMaXN0QXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RyaW5nU2V0QXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBbXCJzZXRcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdHJpbmdNYXBBdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0cmluZ0xpc3RMaXN0QXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb2JqZWN0QXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBbXG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdBdHRyaWJ1dGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7XG4gICAgICAgICAgICAgICAgbGlzdE1vZGU6IHtcbiAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGlzdE1vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBpdChcInNob3VsZCByZXR1cm4gbnVsbCBpZiBpdCBjYW4gbm90IGZpbmQgdGhlIHJlc291cmNlXCIsICgpID0+IHtcbiAgICBleHBlY3QoZ2V0VHlwZUF0UGF0aChzY2hlbWEsIFwidGVzdC5ub25FeGlzdGFudFJlc291cmNlXCIpKS50b0JlTnVsbCgpO1xuICB9KTtcbiAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgaWYgaXQgY2FuIG5vdCBmaW5kIHRoZSBhdHRyaWJ1dGUgb24gdGhlIHJlc291cmNlXCIsICgpID0+IHtcbiAgICBleHBlY3QoZ2V0VHlwZUF0UGF0aChzY2hlbWEsIFwidGVzdC5yZXNvdXJjZS5wb255Zm9vXCIpKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBkZXNjcmliZShcImtub3duIHR5cGVzXCIsICgpID0+IHtcbiAgICBpdC5lYWNoKFtcbiAgICAgIFtcInN0cmluZ0F0dHJpYnV0ZVwiLCBcInN0cmluZ1wiXSxcbiAgICAgIFtcIm51bWJlckF0dHJpYnV0ZVwiLCBcIm51bWJlclwiXSxcbiAgICAgIFtcImJvb2xlYW5BdHRyaWJ1dGVcIiwgXCJib29sXCJdLFxuICAgICAgW1wic3RyaW5nTGlzdEF0dHJpYnV0ZVwiLCBbXCJsaXN0XCIsIFwic3RyaW5nXCJdXSxcbiAgICAgIFtcInN0cmluZ1NldEF0dHJpYnV0ZVwiLCBbXCJzZXRcIiwgXCJzdHJpbmdcIl1dLFxuICAgICAgW1wic3RyaW5nTWFwQXR0cmlidXRlXCIsIFtcIm1hcFwiLCBcInN0cmluZ1wiXV0sXG4gICAgICBbXCJzdHJpbmdNYXBBdHRyaWJ1dGUud2hhdGV2ZXJrZXlcIiwgXCJzdHJpbmdcIl0sXG4gICAgICBbXCJzdHJpbmdMaXN0TGlzdEF0dHJpYnV0ZVwiLCBbXCJsaXN0XCIsIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1dXSxcbiAgICAgIFtcInN0cmluZ0xpc3RMaXN0QXR0cmlidXRlLltdXCIsIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1dLFxuICAgICAgW1wic3RyaW5nTGlzdExpc3RBdHRyaWJ1dGUuW10uW11cIiwgXCJzdHJpbmdcIl0sXG4gICAgICBbXCJsaXN0TW9kZS5bXS5saXN0TW9kZS5bXS5zdHJpbmdBdHRyaWJ1dGVcIiwgXCJzdHJpbmdcIl0sXG4gICAgICBbXCJvYmplY3RBdHRyaWJ1dGUuc3RyaW5nQXR0cmlidXRlXCIsIFwic3RyaW5nXCJdLFxuICAgIF0pKGBhY2Nlc3MgdG8gJXMgcmV0dXJucyAlc2AsIChhdHRyLCByZXMpID0+IHtcbiAgICAgIGV4cGVjdChnZXRUeXBlQXRQYXRoKHNjaGVtYSwgYHRlc3QucmVzb3VyY2UuJHthdHRyfWApKS50b0VxdWFsKHJlcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdEhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxpRUFBd0M7QUFHeEMsU0FBZ0IsU0FBUyxDQUFDLENBQWU7SUFDdkMsT0FBTyxJQUFBLG1CQUFRLEVBQUMsQ0FBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2pDLENBQUM7QUFGRCw4QkFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IGdlbmVyYXRlIGZyb20gXCJAYmFiZWwvZ2VuZXJhdG9yXCI7XG5pbXBvcnQgKiBhcyB0IGZyb20gXCJAYmFiZWwvdHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzdFRvQ29kZShlOiB0LkV4cHJlc3Npb24pOiBzdHJpbmcge1xuICByZXR1cm4gZ2VuZXJhdGUoZSBhcyBhbnkpLmNvZGU7XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as t from "@babel/types";
|
|
2
|
+
import { AttributeType } from "@cdktn/commons";
|
|
3
|
+
import { ProgramScope } from "./types";
|
|
4
|
+
export declare function typeForCallExpression(ast: t.CallExpression): AttributeType;
|
|
5
|
+
export declare const coerceType: (scope: ProgramScope, ast: t.Expression, from: AttributeType, to: AttributeType | undefined) => t.Expression;
|
|
6
|
+
export declare function findExpressionType(scope: ProgramScope, ast: t.Expression): AttributeType;
|
|
7
|
+
//# sourceMappingURL=coerceType.d.ts.map
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNlVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZXJjZVR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLCtEQUF1QztBQUN2QyxnREFBa0M7QUFDbEMsNENBQXVEO0FBRXZELDREQUFtQztBQUNuQyw2REFBK0Q7QUFDL0QsdURBQWtEO0FBQ2xELHlDQUF3QztBQUV4QyxTQUFTLG1CQUFtQixDQUMxQixHQUF1QixFQUN2QixXQUFtQjtJQUVuQixNQUFNLGtCQUFrQixHQUFpQjtRQUN2QyxHQUFJLEdBQUcsQ0FBQyxRQUF5QjtRQUNqQyxJQUFJLEVBQUUsV0FBVztLQUNsQixDQUFDO0lBQ0YsT0FBTztRQUNMLEdBQUcsR0FBRztRQUNOLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxHQUFxQjtJQUN6RCwwQ0FBMEM7SUFDMUMsSUFDRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDeEMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7UUFDNUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxD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QU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0Q7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0ICogYXMgdCBmcm9tIFwiQGJhYmVsL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2dnZXIsIEF0dHJpYnV0ZVR5cGUgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb2dyYW1TY29wZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJkZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyB0c0Z1bmN0aW9uc01hcCB9IGZyb20gXCIuL2Z1bmN0aW9uLWJpbmRpbmdzL2Z1bmN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZUF0UGF0aCB9IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5cbmZ1bmN0aW9uIGNoYW5nZVZhbHVlQWNjZXNzb3IoXG4gIGFzdDogdC5NZW1iZXJFeHByZXNzaW9uLFxuICBuZXdBY2Nlc3Nvcjogc3RyaW5nLFxuKTogdC5NZW1iZXJFeHByZXNzaW9uIHtcbiAgY29uc3QgcHJvcGVydHlJZGVudGlmaWVyOiB0LklkZW50aWZpZXIgPSB7XG4gICAgLi4uKGFzdC5wcm9wZXJ0eSBhcyB0LklkZW50aWZpZXIpLFxuICAgIG5hbWU6IG5ld0FjY2Vzc29yLFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLmFzdCxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlJZGVudGlmaWVyLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZvckNhbGxFeHByZXNzaW9uKGFzdDogdC5DYWxsRXhwcmVzc2lvbik6IEF0dHJpYnV0ZVR5cGUge1xuICAvLyBGaW5kIGFsbCBjZGt0Zi5Gbi4qIHx8IGNka3RuLkZuLiogY2FsbHNcbiAgaWYgKFxuICAgIHQuaXNNZW1iZXJFeHByZXNzaW9uKGFzdC5jYWxsZWUpICYmXG4gICAgdC5pc01lbWJlckV4cHJlc3Npb24oYXN0LmNhbGxlZS5vYmplY3QpICYmXG4gICAgdC5pc0lkZW50aWZpZXIoYXN0LmNhbGxlZS5vYmplY3Qub2JqZWN0KSAmJlxuICAgIChhc3QuY2FsbGVlLm9iamVjdC5vYmplY3QubmFtZSA9PT0gXCJjZGt0ZlwiIHx8XG4gICAgICBhc3QuY2FsbGVlLm9iamVjdC5vYmplY3QubmFtZSA9PT0gXCJjZGt0blwiKSAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUub2JqZWN0LnByb3BlcnR5KSAmJlxuICAgIGFzdC5jYWxsZWUub2JqZWN0LnByb3BlcnR5Lm5hbWUgPT09IFwiRm5cIiAmJlxuICAgIHQuaXNJZGVudGlmaWVyKGFzdC5jYWxsZWUucHJvcGVydHkpXG4gICkge1xuICAgIGNvbnN0IG1ldGEgPSB0c0Z1bmN0aW9uc01hcFthc3QuY2FsbGVlLnByb3BlcnR5Lm5hbWVdO1xuICAgIGlmIChtZXRhKSB7XG4gICAgICByZXR1cm4gbWV0YS5yZXR1cm5UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJkeW5hbWljXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gY2RrdGYuY29uZGl0aW9uYWwsIGNka3RmLnByb3BlcnR5QWNjZXNzLCBjZGt0Zi5PcC4qIGFyZSBhbGwgZHluYW1pY1xuICAvLyBCeSBkZWZhdWx0IHdlIGFzc3VtZSBkeW5hbWljXG4gIHJldHVybiBcImR5bmFtaWNcIjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvZXJjZVR5cGUgPSAoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGFzdDogdC5FeHByZXNzaW9uLFxuICBmcm9tOiBBdHRyaWJ1dGVUeXBlLFxuICB0bzogQXR0cmlidXRlVHlwZSB8IHVuZGVmaW5lZCxcbik6IHQuRXhwcmVzc2lvbiA9PiB7XG4gIGlmICh0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFzdDtcbiAgfVxuXG4gIGlmIChkZWVwRXF1YWwodG8sIGZyb20pKSB7XG4gICAgcmV0dXJuIGFzdDtcbiAgfVxuXG4gIGNvbnN0IGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsID1cbiAgICBhc3QudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICBhc3QucHJvcGVydHkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBhc3QucHJvcGVydHkubmFtZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgYXN0Lm9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIE9iamVjdC52YWx1ZXMoc2NvcGUudmFyaWFibGVzKS5zb21lKFxuICAgICAgKGtub3duVmFycykgPT5cbiAgICAgICAga25vd25WYXJzLnZhcmlhYmxlTmFtZSA9PT0gKGFzdC5vYmplY3QgYXMgdC5JZGVudGlmaWVyKS5uYW1lICYmXG4gICAgICAgIFtcInZhclwiLCBcImxvY2FsXCJdLmluY2x1ZGVzKGtub3duVmFycy5yZXNvdXJjZSksXG4gICAgKTtcblxuICBjb25zdCBhZGRUb2tlblRvSW1wb3J0cyA9ICgpID0+XG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRva2VuXCIsXG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgIH0pO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHRvKSkge1xuICAgIGlmICh0b1swXSA9PT0gXCJsaXN0XCIgfHwgdG9bMF0gPT09IFwic2V0XCIpIHtcbiAgICAgIHN3aXRjaCAodG9bMV0pIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZhbHVlQWNjZXNzb3IoYXN0IGFzIHQuTWVtYmVyRXhwcmVzc2lvbiwgXCJsaXN0VmFsdWVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNMaXN0KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNOdW1iZXJMaXN0KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFkZFRva2VuVG9JbXBvcnRzKCk7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzQW55KCUlYXN0JSUpYCkoe1xuICAgICAgICAgICAgYXN0OiBhc3QsXG4gICAgICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b1swXSA9PT0gXCJtYXBcIikge1xuICAgICAgc3dpdGNoICh0b1sxXSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNTdHJpbmdNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc051bWJlck1hcCglJWFzdCUlKWApKHtcbiAgICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0Jvb2xlYW5NYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZXhwcmVzc2lvbihgVG9rZW4uYXNBbnlNYXAoJSVhc3QlJSlgKSh7XG4gICAgICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0bykge1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIGlmIChpc1RlcnJhZm9ybVZhcmlhYmxlT3JMb2NhbCkge1xuICAgICAgICByZXR1cm4gY2hhbmdlVmFsdWVBY2Nlc3Nvcihhc3QgYXMgdC5NZW1iZXJFeHByZXNzaW9uLCBcIm51bWJlclZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc051bWJlciglJWFzdCUlKWApKHtcbiAgICAgICAgYXN0OiBhc3QsXG4gICAgICB9KSBhcyB0LkV4cHJlc3Npb247XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaWYgKGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsKSB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwic3RyaW5nVmFsdWVcIik7XG4gICAgICB9XG4gICAgICBhZGRUb2tlblRvSW1wb3J0cygpO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLmV4cHJlc3Npb24oYFRva2VuLmFzU3RyaW5nKCUlYXN0JSUpYCkoe1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgIH0pIGFzIHQuRXhwcmVzc2lvbjtcbiAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgaWYgKGlzVGVycmFmb3JtVmFyaWFibGVPckxvY2FsKSB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VWYWx1ZUFjY2Vzc29yKGFzdCBhcyB0Lk1lbWJlckV4cHJlc3Npb24sIFwiYm9vbGVhblZhbHVlXCIpO1xuICAgICAgfVxuICAgICAgYWRkVG9rZW5Ub0ltcG9ydHMoKTtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZS5leHByZXNzaW9uKGBUb2tlbi5hc0Jvb2xlYW4oJSVhc3QlJSlgKSh7XG4gICAgICAgIGFzdDogYXN0LFxuICAgICAgfSkgYXMgdC5FeHByZXNzaW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBDb3VsZCBub3QgY29lcmNlIGZyb20gJHtmcm9tfSB0byAke3RvfSBmb3IgJHthc3R9YCk7XG4gIHJldHVybiBhc3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEV4cHJlc3Npb25UeXBlKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBhc3Q6IHQuRXhwcmVzc2lvbixcbik6IEF0dHJpYnV0ZVR5cGUge1xuICBjb25zdCBpc1JlZmVyZW5jZVdpdGhvdXRUZW1wbGF0ZVN0cmluZyA9XG4gICAgYXN0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIGFzdC5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCI7XG5cbiAgLy8gSWYgd2UgaGF2ZSBhIHByb3BlcnR5IHRvIGNka3RmLnByb3BlcnR5QWNjZXNzIGNhbGwgaXQncyBkeW5hbWljXG4gIGlmIChhc3QudHlwZSA9PT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHR5cGVGb3JDYWxsRXhwcmVzc2lvbihhc3QpO1xuICB9XG5cbiAgaWYgKGFzdC50eXBlID09PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIGlmIChhc3QudHlwZSA9PT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cbiAgaWYgKGFzdC50eXBlID09PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gXCJib29sXCI7XG4gIH1cblxuICAvLyBJZiB3ZSBvbmx5IGhhdmUgb25lIHJlZmVyZW5jZSB0aGlzIGlzIGFcbiAgaWYgKGlzUmVmZXJlbmNlV2l0aG91dFRlbXBsYXRlU3RyaW5nKSB7XG4gICAgY29uc3QgZGVzdHJ1Y3R1cmVkQXN0ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0KTtcbiAgICBpZiAoIWRlc3RydWN0dXJlZEFzdCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGRlc3RydWN0dXJlIGFzdDogJHtKU09OLnN0cmluZ2lmeShhc3QsIG51bGwsIDIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGNvbnN0IFthc3RWYXJpYWJsZU5hbWUsIC4uLmF0dHJpYnV0ZXNdID0gZGVzdHJ1Y3R1cmVkQXN0O1xuICAgIGNvbnN0IHZhcmlhYmxlID0gT2JqZWN0LnZhbHVlcyhzY29wZS52YXJpYWJsZXMpLmZpbmQoXG4gICAgICAoeCkgPT4geC52YXJpYWJsZU5hbWUgPT09IGFzdFZhcmlhYmxlTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgdmFyaWFibGUgJHthc3RWYXJpYWJsZU5hbWV9IGdpdmVuIHNjb3BlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHNjb3BlLnZhcmlhYmxlcyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICAvLyBXZSBkb24ndCBrbm93LCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgaWYgaXQgZG9lcyB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2UgYW5kIG1ha2UgaXQgZHluYW1pY1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGlmICh2YXJpYWJsZS5yZXNvdXJjZSA9PT0gXCJ2YXJcIikge1xuICAgICAgcmV0dXJuIFwiZHluYW1pY1wiO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcmVzb3VyY2U6IHJlc291cmNlVHlwZSB9ID0gdmFyaWFibGU7XG4gICAgY29uc3QgW3Byb3ZpZGVyLCAuLi5yZXNvdXJjZU5hbWVGcmFnbWVudHNdID0gcmVzb3VyY2VUeXBlLnNwbGl0KFwiX1wiKTtcbiAgICBjb25zdCB0ZlJlc291cmNlUGF0aCA9IGAke3Byb3ZpZGVyfS4ke3Jlc291cmNlTmFtZUZyYWdtZW50cy5qb2luKFxuICAgICAgXCJfXCIsXG4gICAgKX0uJHthdHRyaWJ1dGVzLm1hcCgoeCkgPT4gdG9TbmFrZUNhc2UoeCkpLmpvaW4oXCIuXCIpfWA7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHRmUmVzb3VyY2VQYXRoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYW4gYXR0cmlidXRlIHR5cGUgd2UgY2FuIHJldHVybiBpdFxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBFaXRoZXIgbm90aGluZyBpcyBmb3VuZCBvciBpdCdzIGEgYmxvY2sgdHlwZVxuICAgIHJldHVybiBcImR5bmFtaWNcIjtcbiAgfVxuXG4gIHJldHVybiBcInN0cmluZ1wiO1xufVxuXG4vKlxuICogVHJhbnNmb3JtcyBhIGJhYmVsIEFTVCBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgYWNjZXNzb3JzXG4gKiBlLmcuIGZvby5iYXIuYmF6IC0+IFtcImZvb1wiLCBcImJhclwiLCBcImJhelwiXVxuICovXG5mdW5jdGlvbiBkZXN0cnVjdHVyZUFzdChhc3Q6IHQuRXhwcmVzc2lvbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChhc3QudHlwZSkge1xuICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgICByZXR1cm4gW2FzdC5uYW1lXTtcbiAgICBjYXNlIFwiTWVtYmVyRXhwcmVzc2lvblwiOiB7XG4gICAgICBjb25zdCBvYmplY3QgPSBkZXN0cnVjdHVyZUFzdChhc3Qub2JqZWN0KTtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGVzdHJ1Y3R1cmVBc3QoYXN0LnByb3BlcnR5IGFzIHQuRXhwcmVzc2lvbik7XG4gICAgICBpZiAob2JqZWN0ICYmIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBbLi4ub2JqZWN0LCAuLi5wcm9wZXJ0eV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { DynamicBlock, TerraformResourceBlock } from "./types";
|
|
6
|
+
export declare function isNestedDynamicBlock(dynBlocks: DynamicBlock[], block: DynamicBlock): boolean;
|
|
7
|
+
export declare const extractDynamicBlocks: (config: TerraformResourceBlock, path?: string) => DynamicBlock[];
|
|
8
|
+
//# sourceMappingURL=dynamic-blocks.d.ts.map
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1ibG9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkeW5hbWljLWJsb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFJSCxTQUFnQixvQkFBb0IsQ0FDbEMsU0FBeUIsRUFDekIsS0FBbUI7SUFFbkIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUNuQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDcEUsQ0FBQztBQUNKLENBQUM7QUFQRCxvREFPQztBQUVNLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsTUFBOEIsRUFDOUIsSUFBSSxHQUFHLEVBQUUsRUFDTyxFQUFFO0lBQ2xCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN0QixHQUFHLEtBQUs7WUFDUixHQUFHLElBQUEsNEJBQW9CLEVBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ2xELEVBQ0QsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUksTUFBYyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFlBQVksU0FBUyxFQUFFO2dCQUNwQyxRQUFRO2dCQUNSLE9BQU87Z0JBQ1AsU0FBUzthQUNWO1lBQ0QsR0FBRyxJQUFBLDRCQUFvQixFQUNyQixPQUFPLEVBQ1AsR0FBRyxJQUFJLFlBQVksU0FBUyxZQUFZLENBQ3pDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDM0QsT0FBTyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBQSw0QkFBb0IsRUFBQyxLQUFZLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBNUNXLFFBQUEsb0JBQW9CLHdCQTRDL0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IER5bmFtaWNCbG9jaywgVGVycmFmb3JtUmVzb3VyY2VCbG9jayB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZER5bmFtaWNCbG9jayhcbiAgZHluQmxvY2tzOiBEeW5hbWljQmxvY2tbXSxcbiAgYmxvY2s6IER5bmFtaWNCbG9jayxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gZHluQmxvY2tzLnNvbWUoXG4gICAgKGR5bikgPT4gZHluLnBhdGggIT09IGJsb2NrLnBhdGggJiYgYmxvY2sucGF0aC5zdGFydHNXaXRoKGR5bi5wYXRoKSxcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3REeW5hbWljQmxvY2tzID0gKFxuICBjb25maWc6IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gIHBhdGggPSBcIlwiLFxuKTogRHluYW1pY0Jsb2NrW10gPT4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSkge1xuICAgIHJldHVybiBjb25maWcucmVkdWNlKFxuICAgICAgKGNhcnJ5LCBpdGVtLCBpbmRleCkgPT4gW1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgLi4uZXh0cmFjdER5bmFtaWNCbG9ja3MoaXRlbSwgYCR7cGF0aH0uJHtpbmRleH1gKSxcbiAgICAgIF0sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgaWYgKFwiZHluYW1pY1wiIGluIGNvbmZpZykge1xuICAgIGNvbnN0IGR5bmFtaWMgPSAoY29uZmlnIGFzIGFueSkuZHluYW1pYztcbiAgICBjb25zdCBzY29wZWRWYXIgPSBPYmplY3Qua2V5cyhkeW5hbWljKVswXTtcbiAgICBjb25zdCB7IGZvcl9lYWNoLCBjb250ZW50IH0gPSBkeW5hbWljW3Njb3BlZFZhcl1bMF07XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBwYXRoOiBgJHtwYXRofS5keW5hbWljLiR7c2NvcGVkVmFyfWAsXG4gICAgICAgIGZvcl9lYWNoLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBzY29wZWRWYXIsXG4gICAgICB9LFxuICAgICAgLi4uZXh0cmFjdER5bmFtaWNCbG9ja3MoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGAke3BhdGh9LmR5bmFtaWMuJHtzY29wZWRWYXJ9LjAuY29udGVudGAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29uZmlnKS5yZWR1Y2UoKGNhcnJ5LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICByZXR1cm4gWy4uLmNhcnJ5LCAuLi5leHRyYWN0RHluYW1pY0Jsb2Nrcyh2YWx1ZSBhcyBhbnksIGAke3BhdGh9LiR7a2V5fWApXTtcbiAgfSwgW10gYXMgRHluYW1pY0Jsb2NrW10pO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as t from "@babel/types";
|
|
2
|
+
import { IteratorVariableReference, ProgramScope, ResourceScope } from "./types";
|
|
3
|
+
import { TFExpressionSyntaxTree as tex } from "@cdktn/hcl2json";
|
|
4
|
+
import { AttributeType } from "@cdktn/commons";
|
|
5
|
+
export declare function expressionAst(input: string): Promise<tex.ExpressionType>;
|
|
6
|
+
export declare function convertTerraformExpressionToTs(scope: ResourceScope, input: string, targetType: () => AttributeType): Promise<t.Expression>;
|
|
7
|
+
export declare function extractIteratorVariablesFromExpression(input: string): Promise<IteratorVariableReference[]>;
|
|
8
|
+
export declare function dynamicVariableToAst(scope: ProgramScope, node: tex.ScopeTraversalExpression, iteratorName: string, block?: string): t.Expression;
|
|
9
|
+
//# sourceMappingURL=expressions.d.ts.map
|