@cdktn/hcl2cdk 0.24.0-pre.5 → 0.24.0-pre.51

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 (83) hide show
  1. package/.spec.swcrc +22 -0
  2. package/LICENSE +355 -0
  3. package/README.md +1 -1
  4. package/build/__tests__/jsii-rosetta-workarounds.test.js +2 -2
  5. package/build/expressions.js +3 -4
  6. package/build/function-bindings/functions.generated.js +2 -2
  7. package/build/generation.js +2 -2
  8. package/build/index.d.ts +20 -20
  9. package/build/index.js +4 -4
  10. package/build/references.js +2 -3
  11. package/build/schema.d.ts +60 -60
  12. package/build/utils.d.ts +1 -1
  13. package/build/utils.js +3 -3
  14. package/jest.config.js +18 -11
  15. package/package.json +37 -25
  16. package/package.sh +1 -1
  17. package/src/__tests__/coerceType.test.ts +207 -0
  18. package/src/__tests__/expressionToTs.test.ts +1167 -0
  19. package/src/__tests__/expressions.test.ts +541 -0
  20. package/src/__tests__/findExpressionType.test.ts +112 -0
  21. package/src/__tests__/functions.test.ts +768 -0
  22. package/src/__tests__/generation.test.ts +72 -0
  23. package/src/__tests__/jsii-rosetta-workarounds.test.ts +145 -0
  24. package/src/__tests__/partialCode.test.ts +432 -0
  25. package/src/__tests__/terraformSchema.test.ts +107 -0
  26. package/src/__tests__/testHelpers.ts +11 -0
  27. package/src/coerceType.ts +261 -0
  28. package/src/dynamic-blocks.ts +61 -0
  29. package/src/expressions.ts +968 -0
  30. package/src/function-bindings/functions.generated.ts +1139 -0
  31. package/src/function-bindings/functions.ts +104 -0
  32. package/src/generation.ts +1189 -0
  33. package/src/index.ts +584 -0
  34. package/src/iteration.ts +156 -0
  35. package/src/jsii-rosetta-workarounds.ts +145 -0
  36. package/src/partialCode.ts +132 -0
  37. package/src/provider.ts +60 -0
  38. package/src/references.ts +193 -0
  39. package/src/schema.ts +74 -0
  40. package/src/terraformSchema.ts +182 -0
  41. package/src/types.ts +58 -0
  42. package/src/utils.ts +19 -0
  43. package/src/variables.ts +214 -0
  44. package/test/__snapshots__/backends.test.ts.snap +70 -0
  45. package/test/__snapshots__/externals.test.ts.snap +37 -0
  46. package/test/__snapshots__/granular-imports.test.ts.snap +180 -0
  47. package/test/__snapshots__/imports.test.ts.snap +159 -0
  48. package/test/__snapshots__/iteration.test.ts.snap +532 -0
  49. package/test/__snapshots__/jsiiLanguage.test.ts.snap +347 -0
  50. package/test/__snapshots__/locals.test.ts.snap +55 -0
  51. package/test/__snapshots__/modules.test.ts.snap +127 -0
  52. package/test/__snapshots__/outputs.test.ts.snap +77 -0
  53. package/test/__snapshots__/partialCode.test.ts.snap +120 -0
  54. package/test/__snapshots__/provider.test.ts.snap +128 -0
  55. package/test/__snapshots__/references.test.ts.snap +376 -0
  56. package/test/__snapshots__/resource-meta-properties.test.ts.snap +342 -0
  57. package/test/__snapshots__/resources.test.ts.snap +613 -0
  58. package/test/__snapshots__/tfExpressions.test.ts.snap +537 -0
  59. package/test/__snapshots__/typeCoercion.test.ts.snap +253 -0
  60. package/test/__snapshots__/variables.test.ts.snap +150 -0
  61. package/test/backends.test.ts +75 -0
  62. package/test/convertProject.test.ts +257 -0
  63. package/test/externals.test.ts +35 -0
  64. package/test/globalSetup.ts +224 -0
  65. package/test/globalTeardown.ts +11 -0
  66. package/test/granular-imports.test.ts +161 -0
  67. package/test/hcl2cdk.test.ts +88 -0
  68. package/test/helpers/convert.ts +543 -0
  69. package/test/helpers/tmp.ts +25 -0
  70. package/test/imports.test.ts +141 -0
  71. package/test/iteration.test.ts +342 -0
  72. package/test/jsiiLanguage.test.ts +73 -0
  73. package/test/locals.test.ts +47 -0
  74. package/test/modules.test.ts +143 -0
  75. package/test/outputs.test.ts +69 -0
  76. package/test/partialCode.test.ts +25 -0
  77. package/test/provider.test.ts +106 -0
  78. package/test/references.test.ts +287 -0
  79. package/test/resource-meta-properties.test.ts +288 -0
  80. package/test/resources.test.ts +551 -0
  81. package/test/tfExpressions.test.ts +300 -0
  82. package/test/typeCoercion.test.ts +154 -0
  83. package/test/variables.test.ts +96 -0
package/jest.config.js CHANGED
@@ -2,17 +2,24 @@
2
2
  * Copyright (c) HashiCorp, Inc.
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
+ /* eslint-disable */
6
+ const { readFileSync } = require('fs');
7
+
8
+ const swcJestConfig = JSON.parse(
9
+ readFileSync(`${__dirname}/.spec.swcrc`, 'utf-8'),
10
+ );
11
+
12
+ swcJestConfig.swcrc = false;
5
13
 
6
14
  module.exports = {
7
- testMatch: ['**/*.test.ts', '**/*.test.tsx'],
8
- "transform": {
9
- "^.+\\.tsx?$": "ts-jest"
15
+ displayName: '@cdktn/hcl2cdk',
16
+ preset: '../../../jest.preset.js',
17
+ rootDir: '.',
18
+ roots: ['<rootDir>'],
19
+ transform: {
20
+ '^.+\\.[tj]sx?$': ['@swc/jest', swcJestConfig],
10
21
  },
11
- moduleFileExtensions: [
12
- "js",
13
- "ts",
14
- "tsx"
15
- ],
16
- globalSetup: "./test/globalSetup.ts",
17
- globalTeardown: "./test/globalTeardown.ts",
18
- }
22
+ globalSetup: './test/globalSetup.ts',
23
+ globalTeardown: './test/globalTeardown.ts',
24
+ coverageDirectory: 'test-output/jest/coverage',
25
+ };
package/package.json CHANGED
@@ -1,24 +1,12 @@
1
1
  {
2
2
  "name": "@cdktn/hcl2cdk",
3
- "version": "0.24.0-pre.5",
3
+ "version": "0.24.0-pre.51",
4
4
  "description": "Transform HCL into CDK",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
10
- "scripts": {
11
- "build": "tsc",
12
- "watch": "tsc -w",
13
- "watch-preserve-output": "tsc -w --preserveWatchOutput",
14
- "test": "jest",
15
- "test:ci": "jest --ci",
16
- "test:update": "jest -u",
17
- "jest-watch": "jest --watch",
18
- "package": "./package.sh",
19
- "dist-clean": "rm -rf dist",
20
- "package:js": "./package.sh"
21
- },
22
10
  "repository": {
23
11
  "type": "git",
24
12
  "url": "git://github.com/open-constructs/cdk-terrain.git",
@@ -40,32 +28,56 @@
40
28
  "@babel/generator": "7.29.1",
41
29
  "@babel/template": "7.28.6",
42
30
  "@babel/types": "7.29.0",
43
- "@cdktn/commons": "0.24.0-pre.5",
44
- "@cdktn/hcl2json": "0.24.0-pre.5",
45
- "@cdktn/provider-generator": "0.24.0-pre.5",
46
- "@cdktn/provider-schema": "0.24.0-pre.5",
47
31
  "camelcase": "6.3.0",
48
- "cdktn": "0.24.0-pre.5",
49
32
  "codemaker": "1.128.0",
50
33
  "deep-equal": "2.2.3",
51
34
  "glob": "10.5.0",
52
35
  "graphology": "0.26.0",
53
36
  "graphology-types": "0.24.7",
54
- "jsii-rosetta": "5.9.39",
37
+ "jsii-rosetta": "~5.9.0",
55
38
  "prettier": "2.8.8",
56
39
  "reserved-words": "0.1.2",
57
- "zod": "3.25.76"
40
+ "zod": "3.25.76",
41
+ "@cdktn/commons": "0.24.0-pre.51",
42
+ "@cdktn/hcl2json": "0.24.0-pre.51",
43
+ "@cdktn/provider-generator": "0.24.0-pre.51",
44
+ "@cdktn/provider-schema": "0.24.0-pre.51",
45
+ "cdktn": "0.24.0-pre.51"
58
46
  },
59
47
  "devDependencies": {
48
+ "@types/babel__generator": "7.27.0",
49
+ "@types/babel__template": "7.4.4",
60
50
  "@types/deep-equal": "1.0.4",
61
- "@types/jest": "30.0.0",
51
+ "@types/fs-extra": "11.0.4",
62
52
  "@types/node": "20.19.37",
63
53
  "@types/prettier": "2.7.3",
64
54
  "@types/reserved-words": "0.1.4",
65
55
  "execa": "5.1.1",
66
56
  "fs-extra": "11.3.4",
67
- "jest": "^30.3.0",
68
- "ts-jest": "29.4.9",
69
- "typescript": "5.4.5"
57
+ "tsx": "4.6.1",
58
+ "typescript": "^5.0.0"
59
+ },
60
+ "nx": {
61
+ "tags": [
62
+ "unit-test"
63
+ ],
64
+ "targets": {
65
+ "test": {
66
+ "dependsOn": [
67
+ "build",
68
+ "^build",
69
+ "cdktn-cli:build"
70
+ ]
71
+ }
72
+ }
73
+ },
74
+ "scripts": {
75
+ "build": "tsc",
76
+ "watch": "tsc -w",
77
+ "watch-preserve-output": "tsc -w --preserveWatchOutput",
78
+ "test:update": "jest -u",
79
+ "package": "./package.sh",
80
+ "dist-clean": "rm -rf dist",
81
+ "package:js": "./package.sh"
70
82
  }
71
- }
83
+ }
package/package.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
 
5
5
  set -euo pipefail
6
- bundle=$(npm pack)
6
+ bundle=$(pnpm pack | tail -n 1)
7
7
  rm -fr dist
8
8
  mkdir -p dist/js
9
9
  mv ${bundle} dist/js
@@ -0,0 +1,207 @@
1
+ // Copyright (c) HashiCorp, Inc
2
+ // SPDX-License-Identifier: MPL-2.0
3
+ import { coerceType } from "../coerceType";
4
+ import template from "@babel/template";
5
+ import generate from "@babel/generator";
6
+
7
+ function expressionify(code: string) {
8
+ return (template.ast(code) as any).expression;
9
+ }
10
+ function generateCode(ast: any) {
11
+ return generate(ast).code;
12
+ }
13
+
14
+ const scope: any = {
15
+ importables: [],
16
+ variables: {
17
+ a_user_defined_variable: {
18
+ resource: "var",
19
+ variableName: "aUserDefinedVariable",
20
+ },
21
+ a_user_defined_local: {
22
+ resource: "var",
23
+ variableName: "aUserDefinedTerraformLocal",
24
+ },
25
+ },
26
+ };
27
+
28
+ describe("coerceType", () => {
29
+ it.each([
30
+ { code: `"hello-world"`, type: "string", targetType: undefined },
31
+ { code: `"hello-world"`, type: "string", targetType: "string" },
32
+ ])("should change nothing for %p ", ({ code, type, targetType }) => {
33
+ expect(
34
+ generateCode(
35
+ coerceType(scope, expressionify(code), type as any, targetType as any),
36
+ ),
37
+ ).toEqual(code);
38
+ });
39
+
40
+ it.each([
41
+ {
42
+ code: `"300"`,
43
+ type: "string",
44
+ targetType: "number",
45
+ expectedCode: `Token.asNumber("300")`,
46
+ },
47
+ {
48
+ code: `300`,
49
+ type: "number",
50
+ targetType: "string",
51
+ expectedCode: `Token.asString(300)`,
52
+ },
53
+ {
54
+ code: `"['foo', 'bar']"`,
55
+ type: "string",
56
+ targetType: ["list", "string"],
57
+ expectedCode: `Token.asList("['foo', 'bar']")`,
58
+ },
59
+ {
60
+ code: `"[1,2,3]"`,
61
+ type: "string",
62
+ targetType: ["list", "number"],
63
+ expectedCode: `Token.asNumberList("[1,2,3]")`,
64
+ },
65
+ {
66
+ code: `"['foo', 'bar']"`,
67
+ type: "string",
68
+ targetType: ["set", "string"],
69
+ expectedCode: `Token.asList("['foo', 'bar']")`,
70
+ },
71
+ {
72
+ code: `"[1,2,3]"`,
73
+ type: "string",
74
+ targetType: ["set", "number"],
75
+ expectedCode: `Token.asNumberList("[1,2,3]")`,
76
+ },
77
+ // We don't have a token function for boolean lists, so we need to take an asAny
78
+ {
79
+ code: `"[true,false,true]"`,
80
+ type: "string",
81
+ targetType: ["list", "bool"],
82
+ expectedCode: `Token.asAny("[true,false,true]")`,
83
+ },
84
+ {
85
+ code: `"{ foo: 'bar' }"`,
86
+ type: "string",
87
+ targetType: ["map", "string"],
88
+ expectedCode: `Token.asStringMap("{ foo: 'bar' }")`,
89
+ },
90
+ {
91
+ code: `"{ foo: 1 }"`,
92
+ type: "string",
93
+ targetType: ["map", "number"],
94
+ expectedCode: `Token.asNumberMap("{ foo: 1 }")`,
95
+ },
96
+
97
+ {
98
+ code: `"{ foo: true }"`,
99
+ type: "string",
100
+ targetType: ["map", "bool"],
101
+ expectedCode: `Token.asBooleanMap("{ foo: true }")`,
102
+ },
103
+
104
+ {
105
+ code: `"{ foo: {bar: true} }"`,
106
+ type: "string",
107
+ targetType: ["map", ["map", "boolean"]],
108
+ expectedCode: `Token.asAnyMap("{ foo: {bar: true} }")`,
109
+ },
110
+ ])(
111
+ "should use Token functions %p",
112
+ ({ code, type, targetType, expectedCode }) => {
113
+ expect(
114
+ generateCode(
115
+ coerceType(
116
+ scope,
117
+ expressionify(code),
118
+ type as any,
119
+ targetType as any,
120
+ ),
121
+ ),
122
+ ).toEqual(expectedCode);
123
+ },
124
+ );
125
+
126
+ it.each([
127
+ {
128
+ code: `aUserDefinedVariable.value`,
129
+ type: "dynamic",
130
+ targetType: "string",
131
+ expectedCode: `aUserDefinedVariable.stringValue`,
132
+ },
133
+ {
134
+ code: `aUserDefinedVariable.value`,
135
+ type: "dynamic",
136
+ targetType: "number",
137
+ expectedCode: `aUserDefinedVariable.numberValue`,
138
+ },
139
+ {
140
+ code: `aUserDefinedVariable.value`,
141
+ type: "dynamic",
142
+ targetType: ["list", "string"],
143
+ expectedCode: `aUserDefinedVariable.listValue`,
144
+ },
145
+ {
146
+ code: `aUserDefinedVariable.value`,
147
+ type: "dynamic",
148
+ targetType: "bool",
149
+ expectedCode: `aUserDefinedVariable.booleanValue`,
150
+ },
151
+ ])(
152
+ "should use TerraformVariables accessors %p",
153
+ ({ code, type, targetType, expectedCode }) => {
154
+ expect(
155
+ generateCode(
156
+ coerceType(
157
+ scope,
158
+ expressionify(code),
159
+ type as any,
160
+ targetType as any,
161
+ ),
162
+ ),
163
+ ).toEqual(expectedCode);
164
+ },
165
+ );
166
+
167
+ it.each([
168
+ {
169
+ code: `aUserDefinedTerraformLocal.value`,
170
+ type: "dynamic",
171
+ targetType: "string",
172
+ expectedCode: `aUserDefinedTerraformLocal.stringValue`,
173
+ },
174
+ {
175
+ code: `aUserDefinedTerraformLocal.value`,
176
+ type: "dynamic",
177
+ targetType: "number",
178
+ expectedCode: `aUserDefinedTerraformLocal.numberValue`,
179
+ },
180
+ {
181
+ code: `aUserDefinedTerraformLocal.value`,
182
+ type: "dynamic",
183
+ targetType: ["list", "string"],
184
+ expectedCode: `aUserDefinedTerraformLocal.listValue`,
185
+ },
186
+ {
187
+ code: `aUserDefinedTerraformLocal.value`,
188
+ type: "dynamic",
189
+ targetType: "bool",
190
+ expectedCode: `aUserDefinedTerraformLocal.booleanValue`,
191
+ },
192
+ ])(
193
+ "should use TerraformLocal accessors %p",
194
+ ({ code, type, targetType, expectedCode }) => {
195
+ expect(
196
+ generateCode(
197
+ coerceType(
198
+ scope,
199
+ expressionify(code),
200
+ type as any,
201
+ targetType as any,
202
+ ),
203
+ ),
204
+ ).toEqual(expectedCode);
205
+ },
206
+ );
207
+ });