@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.
- package/ambient.d.ts +0 -1
- package/build/__tests__/coerceType.test.js +165 -0
- package/build/__tests__/expressionToTs.test.js +693 -0
- package/build/__tests__/expressions.test.js +415 -0
- package/build/__tests__/findExpressionType.test.js +105 -0
- package/build/__tests__/functions.test.js +605 -0
- package/build/__tests__/generation.test.js +45 -0
- package/build/__tests__/jsii-rosetta-workarounds.test.js +86 -0
- package/build/__tests__/partialCode.test.js +390 -0
- package/build/__tests__/terraformSchema.test.js +105 -0
- package/build/__tests__/testHelpers.js +16 -0
- package/build/coerceType.js +240 -0
- package/build/dynamic-blocks.js +44 -0
- package/build/expressions.js +633 -0
- package/build/function-bindings/functions.generated.js +1142 -0
- package/build/function-bindings/functions.js +73 -0
- package/build/generation.js +676 -0
- package/{lib → build}/index.d.ts +2 -2
- package/build/index.js +364 -0
- package/build/iteration.js +87 -0
- package/build/jsii-rosetta-workarounds.js +126 -0
- package/build/partialCode.js +116 -0
- package/build/provider.js +40 -0
- package/build/references.js +141 -0
- package/build/schema.js +81 -0
- package/build/telemetryAllowList.json +24 -0
- package/build/terraformSchema.js +136 -0
- package/build/types.js +3 -0
- package/build/utils.js +25 -0
- package/build/variables.js +172 -0
- package/package.json +19 -19
- package/tsconfig.json +4 -2
- package/lib/__tests__/coerceType.test.js +0 -165
- package/lib/__tests__/expressionToTs.test.js +0 -693
- package/lib/__tests__/expressions.test.js +0 -415
- package/lib/__tests__/findExpressionType.test.js +0 -105
- package/lib/__tests__/functions.test.js +0 -605
- package/lib/__tests__/generation.test.js +0 -45
- package/lib/__tests__/jsii-rosetta-workarounds.test.js +0 -86
- package/lib/__tests__/partialCode.test.js +0 -390
- package/lib/__tests__/terraformSchema.test.js +0 -105
- package/lib/__tests__/testHelpers.js +0 -16
- package/lib/coerceType.js +0 -240
- package/lib/dynamic-blocks.js +0 -44
- package/lib/expressions.js +0 -634
- package/lib/function-bindings/functions.generated.js +0 -1142
- package/lib/function-bindings/functions.js +0 -73
- package/lib/generation.js +0 -676
- package/lib/index.js +0 -364
- package/lib/iteration.js +0 -87
- package/lib/jsii-rosetta-workarounds.js +0 -126
- package/lib/partialCode.js +0 -116
- package/lib/provider.js +0 -40
- package/lib/references.js +0 -141
- package/lib/schema.js +0 -81
- package/lib/terraformSchema.js +0 -136
- package/lib/types.js +0 -3
- package/lib/utils.js +0 -25
- package/lib/variables.js +0 -172
- /package/{lib → build}/__tests__/coerceType.test.d.ts +0 -0
- /package/{lib → build}/__tests__/expressionToTs.test.d.ts +0 -0
- /package/{lib → build}/__tests__/expressions.test.d.ts +0 -0
- /package/{lib → build}/__tests__/findExpressionType.test.d.ts +0 -0
- /package/{lib → build}/__tests__/functions.test.d.ts +0 -0
- /package/{lib → build}/__tests__/generation.test.d.ts +0 -0
- /package/{lib → build}/__tests__/jsii-rosetta-workarounds.test.d.ts +0 -0
- /package/{lib → build}/__tests__/partialCode.test.d.ts +0 -0
- /package/{lib → build}/__tests__/terraformSchema.test.d.ts +0 -0
- /package/{lib → build}/__tests__/testHelpers.d.ts +0 -0
- /package/{lib → build}/coerceType.d.ts +0 -0
- /package/{lib → build}/dynamic-blocks.d.ts +0 -0
- /package/{lib → build}/expressions.d.ts +0 -0
- /package/{lib → build}/function-bindings/functions.d.ts +0 -0
- /package/{lib → build}/function-bindings/functions.generated.d.ts +0 -0
- /package/{lib → build}/generation.d.ts +0 -0
- /package/{lib → build}/iteration.d.ts +0 -0
- /package/{lib → build}/jsii-rosetta-workarounds.d.ts +0 -0
- /package/{lib → build}/partialCode.d.ts +0 -0
- /package/{lib → build}/provider.d.ts +0 -0
- /package/{lib → build}/references.d.ts +0 -0
- /package/{lib → build}/schema.d.ts +0 -0
- /package/{lib → build}/terraformSchema.d.ts +0 -0
- /package/{lib → build}/types.d.ts +0 -0
- /package/{lib → build}/utils.d.ts +0 -0
- /package/{lib → build}/variables.d.ts +0 -0
- /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=
|