tfts 0.2.13 → 0.3.1

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 (426) hide show
  1. package/README.md +5 -161
  2. package/dist/cli/config.d.ts +18 -0
  3. package/dist/cli/config.d.ts.map +1 -0
  4. package/dist/cli/config.js +36 -0
  5. package/dist/cli/config.js.map +1 -0
  6. package/dist/cli/get.d.ts +8 -0
  7. package/dist/cli/get.d.ts.map +1 -0
  8. package/dist/cli/get.js +107 -0
  9. package/dist/cli/get.js.map +1 -0
  10. package/dist/cli/main.d.ts +3 -0
  11. package/dist/cli/main.d.ts.map +1 -0
  12. package/dist/cli/main.js +86 -0
  13. package/dist/cli/main.js.map +1 -0
  14. package/dist/cli/synth.d.ts +7 -0
  15. package/dist/cli/synth.d.ts.map +1 -0
  16. package/dist/cli/synth.js +35 -0
  17. package/dist/cli/synth.js.map +1 -0
  18. package/dist/codegen/fetch-schema.d.ts +9 -0
  19. package/dist/codegen/fetch-schema.d.ts.map +1 -0
  20. package/dist/codegen/fetch-schema.js +51 -0
  21. package/dist/codegen/fetch-schema.js.map +1 -0
  22. package/dist/codegen/fetch-schema.spec.d.ts +2 -0
  23. package/dist/codegen/fetch-schema.spec.d.ts.map +1 -0
  24. package/dist/codegen/fetch-schema.spec.js +63 -0
  25. package/dist/codegen/fetch-schema.spec.js.map +1 -0
  26. package/dist/codegen/generator.d.ts +8 -0
  27. package/dist/codegen/generator.d.ts.map +1 -0
  28. package/dist/codegen/generator.js +582 -0
  29. package/dist/codegen/generator.js.map +1 -0
  30. package/dist/codegen/generator.spec.d.ts.map +1 -0
  31. package/dist/codegen/generator.spec.js +387 -0
  32. package/dist/codegen/generator.spec.js.map +1 -0
  33. package/dist/codegen/index.d.ts +5 -0
  34. package/dist/codegen/index.d.ts.map +1 -0
  35. package/dist/codegen/index.js +5 -0
  36. package/dist/codegen/index.js.map +1 -0
  37. package/dist/codegen/schema.d.ts +46 -0
  38. package/dist/codegen/schema.d.ts.map +1 -0
  39. package/dist/codegen/schema.js +64 -0
  40. package/dist/codegen/schema.js.map +1 -0
  41. package/dist/codegen/type-mapper.d.ts +11 -0
  42. package/dist/codegen/type-mapper.d.ts.map +1 -0
  43. package/dist/codegen/type-mapper.js +130 -0
  44. package/dist/codegen/type-mapper.js.map +1 -0
  45. package/dist/core/synthesize.d.ts +2 -0
  46. package/dist/core/synthesize.d.ts.map +1 -0
  47. package/dist/core/synthesize.js +51 -0
  48. package/dist/core/synthesize.js.map +1 -0
  49. package/dist/core/synthesize.spec.d.ts.map +1 -0
  50. package/dist/core/synthesize.spec.js +72 -0
  51. package/dist/core/synthesize.spec.js.map +1 -0
  52. package/dist/core/terraform-json.d.ts +86 -0
  53. package/dist/core/terraform-json.d.ts.map +1 -0
  54. package/dist/core/terraform-json.js.map +1 -0
  55. package/dist/core/tokens.d.ts +46 -0
  56. package/dist/core/tokens.d.ts.map +1 -0
  57. package/dist/core/tokens.js +256 -0
  58. package/dist/core/tokens.js.map +1 -0
  59. package/dist/{src/core → core}/tokens.spec.d.ts.map +1 -1
  60. package/dist/core/tokens.spec.js +140 -0
  61. package/dist/core/tokens.spec.js.map +1 -0
  62. package/dist/core/tree.d.ts +11 -0
  63. package/dist/core/tree.d.ts.map +1 -0
  64. package/dist/core/tree.js +89 -0
  65. package/dist/core/tree.js.map +1 -0
  66. package/dist/{src/core → core}/tree.spec.d.ts.map +1 -1
  67. package/dist/core/tree.spec.js +110 -0
  68. package/dist/core/tree.spec.js.map +1 -0
  69. package/dist/core/types.d.ts +165 -0
  70. package/dist/core/types.d.ts.map +1 -0
  71. package/dist/core/types.js +2 -0
  72. package/dist/core/types.js.map +1 -0
  73. package/dist/core/validate.d.ts +5 -0
  74. package/dist/core/validate.d.ts.map +1 -0
  75. package/dist/core/validate.js +186 -0
  76. package/dist/core/validate.js.map +1 -0
  77. package/dist/core/validate.spec.d.ts.map +1 -0
  78. package/dist/core/validate.spec.js +126 -0
  79. package/dist/core/validate.spec.js.map +1 -0
  80. package/dist/facade/annotations.d.ts +17 -0
  81. package/dist/facade/annotations.d.ts.map +1 -0
  82. package/dist/facade/annotations.js +29 -0
  83. package/dist/facade/annotations.js.map +1 -0
  84. package/dist/facade/app.d.ts +51 -0
  85. package/dist/facade/app.d.ts.map +1 -0
  86. package/dist/facade/app.js +121 -0
  87. package/dist/facade/app.js.map +1 -0
  88. package/dist/facade/aspects.d.ts +13 -0
  89. package/dist/facade/aspects.d.ts.map +1 -0
  90. package/dist/facade/aspects.js +34 -0
  91. package/dist/facade/aspects.js.map +1 -0
  92. package/dist/facade/backends/cloud-backend.d.ts +34 -0
  93. package/dist/facade/backends/cloud-backend.d.ts.map +1 -0
  94. package/dist/facade/backends/cloud-backend.js +84 -0
  95. package/dist/facade/backends/cloud-backend.js.map +1 -0
  96. package/dist/facade/backends/gcs-backend.d.ts +29 -0
  97. package/dist/facade/backends/gcs-backend.d.ts.map +1 -0
  98. package/dist/facade/backends/gcs-backend.js +34 -0
  99. package/dist/facade/backends/gcs-backend.js.map +1 -0
  100. package/dist/facade/backends/index.d.ts +5 -0
  101. package/dist/facade/backends/index.d.ts.map +1 -0
  102. package/dist/facade/backends/index.js +5 -0
  103. package/dist/facade/backends/index.js.map +1 -0
  104. package/dist/facade/backends/remote-backend.d.ts +34 -0
  105. package/dist/facade/backends/remote-backend.d.ts.map +1 -0
  106. package/dist/facade/backends/remote-backend.js +50 -0
  107. package/dist/facade/backends/remote-backend.js.map +1 -0
  108. package/dist/facade/backends/s3-backend.d.ts +97 -0
  109. package/dist/facade/backends/s3-backend.d.ts.map +1 -0
  110. package/dist/facade/backends/s3-backend.js +34 -0
  111. package/dist/facade/backends/s3-backend.js.map +1 -0
  112. package/dist/facade/complex-computed-list.d.ts +117 -0
  113. package/dist/facade/complex-computed-list.d.ts.map +1 -0
  114. package/dist/facade/complex-computed-list.js +370 -0
  115. package/dist/facade/complex-computed-list.js.map +1 -0
  116. package/dist/facade/construct.d.ts +49 -0
  117. package/dist/facade/construct.d.ts.map +1 -0
  118. package/dist/facade/construct.js +129 -0
  119. package/dist/facade/construct.js.map +1 -0
  120. package/dist/facade/importable-resource.d.ts +17 -0
  121. package/dist/facade/importable-resource.d.ts.map +1 -0
  122. package/dist/facade/importable-resource.js +27 -0
  123. package/dist/facade/importable-resource.js.map +1 -0
  124. package/dist/facade/index.d.ts +27 -0
  125. package/dist/facade/index.d.ts.map +1 -0
  126. package/dist/facade/index.js +27 -0
  127. package/dist/facade/index.js.map +1 -0
  128. package/dist/facade/runtime.d.ts +16 -0
  129. package/dist/facade/runtime.d.ts.map +1 -0
  130. package/dist/facade/runtime.js +76 -0
  131. package/dist/facade/runtime.js.map +1 -0
  132. package/dist/facade/stack-registry.d.ts +13 -0
  133. package/dist/facade/stack-registry.d.ts.map +1 -0
  134. package/dist/facade/stack-registry.js +8 -0
  135. package/dist/facade/stack-registry.js.map +1 -0
  136. package/dist/facade/terraform-addressable.d.ts +9 -0
  137. package/dist/facade/terraform-addressable.d.ts.map +1 -0
  138. package/dist/facade/terraform-addressable.js +2 -0
  139. package/dist/facade/terraform-addressable.js.map +1 -0
  140. package/dist/facade/terraform-asset.d.ts +27 -0
  141. package/dist/facade/terraform-asset.d.ts.map +1 -0
  142. package/dist/facade/terraform-asset.js +118 -0
  143. package/dist/facade/terraform-asset.js.map +1 -0
  144. package/dist/facade/terraform-backend.d.ts +23 -0
  145. package/dist/facade/terraform-backend.d.ts.map +1 -0
  146. package/dist/facade/terraform-backend.js +53 -0
  147. package/dist/facade/terraform-backend.js.map +1 -0
  148. package/dist/facade/terraform-data-source.d.ts +45 -0
  149. package/dist/facade/terraform-data-source.d.ts.map +1 -0
  150. package/dist/facade/terraform-data-source.js +85 -0
  151. package/dist/facade/terraform-data-source.js.map +1 -0
  152. package/dist/facade/terraform-element.d.ts +28 -0
  153. package/dist/facade/terraform-element.d.ts.map +1 -0
  154. package/dist/facade/terraform-element.js +100 -0
  155. package/dist/facade/terraform-element.js.map +1 -0
  156. package/dist/facade/terraform-functions.d.ts +148 -0
  157. package/dist/facade/terraform-functions.d.ts.map +1 -0
  158. package/dist/facade/terraform-functions.js +615 -0
  159. package/dist/facade/terraform-functions.js.map +1 -0
  160. package/dist/facade/terraform-functions.spec.d.ts +2 -0
  161. package/dist/facade/terraform-functions.spec.d.ts.map +1 -0
  162. package/dist/facade/terraform-functions.spec.js +282 -0
  163. package/dist/facade/terraform-functions.spec.js.map +1 -0
  164. package/dist/facade/terraform-hcl-module.d.ts +18 -0
  165. package/dist/facade/terraform-hcl-module.d.ts.map +1 -0
  166. package/dist/facade/terraform-hcl-module.js +39 -0
  167. package/dist/facade/terraform-hcl-module.js.map +1 -0
  168. package/dist/facade/terraform-iterator.d.ts +39 -0
  169. package/dist/facade/terraform-iterator.d.ts.map +1 -0
  170. package/dist/facade/terraform-iterator.js +77 -0
  171. package/dist/facade/terraform-iterator.js.map +1 -0
  172. package/dist/facade/terraform-local.d.ts +18 -0
  173. package/dist/facade/terraform-local.d.ts.map +1 -0
  174. package/dist/facade/terraform-local.js +34 -0
  175. package/dist/facade/terraform-local.js.map +1 -0
  176. package/dist/facade/terraform-module.d.ts +35 -0
  177. package/dist/facade/terraform-module.d.ts.map +1 -0
  178. package/dist/facade/terraform-module.js +94 -0
  179. package/dist/facade/terraform-module.js.map +1 -0
  180. package/dist/facade/terraform-output.d.ts +20 -0
  181. package/dist/facade/terraform-output.d.ts.map +1 -0
  182. package/dist/facade/terraform-output.js +38 -0
  183. package/dist/facade/terraform-output.js.map +1 -0
  184. package/dist/facade/terraform-provider.d.ts +27 -0
  185. package/dist/facade/terraform-provider.d.ts.map +1 -0
  186. package/dist/facade/terraform-provider.js +48 -0
  187. package/dist/facade/terraform-provider.js.map +1 -0
  188. package/dist/facade/terraform-remote-state.d.ts +33 -0
  189. package/dist/facade/terraform-remote-state.d.ts.map +1 -0
  190. package/dist/facade/terraform-remote-state.js +62 -0
  191. package/dist/facade/terraform-remote-state.js.map +1 -0
  192. package/dist/facade/terraform-resource.d.ts +64 -0
  193. package/dist/facade/terraform-resource.d.ts.map +1 -0
  194. package/dist/facade/terraform-resource.js +170 -0
  195. package/dist/facade/terraform-resource.js.map +1 -0
  196. package/dist/facade/terraform-stack.d.ts +36 -0
  197. package/dist/facade/terraform-stack.d.ts.map +1 -0
  198. package/dist/facade/terraform-stack.js +161 -0
  199. package/dist/facade/terraform-stack.js.map +1 -0
  200. package/dist/facade/terraform-variable.d.ts +32 -0
  201. package/dist/facade/terraform-variable.d.ts.map +1 -0
  202. package/dist/facade/terraform-variable.js +66 -0
  203. package/dist/facade/terraform-variable.js.map +1 -0
  204. package/dist/facade/tokenization.d.ts +4 -0
  205. package/dist/facade/tokenization.d.ts.map +1 -0
  206. package/dist/facade/tokenization.js +13 -0
  207. package/dist/facade/tokenization.js.map +1 -0
  208. package/dist/facade/util.d.ts +7 -0
  209. package/dist/facade/util.d.ts.map +1 -0
  210. package/dist/facade/util.js +55 -0
  211. package/dist/facade/util.js.map +1 -0
  212. package/dist/facade/util.spec.d.ts +2 -0
  213. package/dist/facade/util.spec.d.ts.map +1 -0
  214. package/dist/facade/util.spec.js +103 -0
  215. package/dist/facade/util.spec.js.map +1 -0
  216. package/dist/index.d.ts +3 -0
  217. package/dist/index.d.ts.map +1 -0
  218. package/dist/index.js +3 -0
  219. package/dist/index.js.map +1 -0
  220. package/dist/index.spec.d.ts +2 -0
  221. package/dist/index.spec.d.ts.map +1 -0
  222. package/dist/index.spec.js +7 -0
  223. package/dist/index.spec.js.map +1 -0
  224. package/dist/integration.spec.d.ts +2 -0
  225. package/dist/integration.spec.d.ts.map +1 -0
  226. package/dist/integration.spec.js +345 -0
  227. package/dist/integration.spec.js.map +1 -0
  228. package/dist/testing/index.d.ts +40 -0
  229. package/dist/testing/index.d.ts.map +1 -0
  230. package/dist/testing/index.js +160 -0
  231. package/dist/testing/index.js.map +1 -0
  232. package/package.json +9 -7
  233. package/dist/bin/tfts.d.ts +0 -3
  234. package/dist/bin/tfts.d.ts.map +0 -1
  235. package/dist/bin/tfts.js +0 -5
  236. package/dist/bin/tfts.js.map +0 -1
  237. package/dist/src/cli/config.d.ts +0 -43
  238. package/dist/src/cli/config.d.ts.map +0 -1
  239. package/dist/src/cli/config.js +0 -63
  240. package/dist/src/cli/config.js.map +0 -1
  241. package/dist/src/cli/diff.d.ts +0 -25
  242. package/dist/src/cli/diff.d.ts.map +0 -1
  243. package/dist/src/cli/diff.js +0 -108
  244. package/dist/src/cli/diff.js.map +0 -1
  245. package/dist/src/cli/get.d.ts +0 -24
  246. package/dist/src/cli/get.d.ts.map +0 -1
  247. package/dist/src/cli/get.js +0 -86
  248. package/dist/src/cli/get.js.map +0 -1
  249. package/dist/src/cli/index.d.ts +0 -2
  250. package/dist/src/cli/index.d.ts.map +0 -1
  251. package/dist/src/cli/index.js +0 -157
  252. package/dist/src/cli/index.js.map +0 -1
  253. package/dist/src/cli/synth.d.ts +0 -32
  254. package/dist/src/cli/synth.d.ts.map +0 -1
  255. package/dist/src/cli/synth.js +0 -55
  256. package/dist/src/cli/synth.js.map +0 -1
  257. package/dist/src/codegen/__tests__/fixtures.d.ts +0 -7
  258. package/dist/src/codegen/__tests__/fixtures.d.ts.map +0 -1
  259. package/dist/src/codegen/__tests__/fixtures.js +0 -202
  260. package/dist/src/codegen/__tests__/fixtures.js.map +0 -1
  261. package/dist/src/codegen/__tests__/generator.spec.d.ts.map +0 -1
  262. package/dist/src/codegen/__tests__/generator.spec.js +0 -382
  263. package/dist/src/codegen/__tests__/generator.spec.js.map +0 -1
  264. package/dist/src/codegen/fn-generator.d.ts +0 -22
  265. package/dist/src/codegen/fn-generator.d.ts.map +0 -1
  266. package/dist/src/codegen/fn-generator.js +0 -203
  267. package/dist/src/codegen/fn-generator.js.map +0 -1
  268. package/dist/src/codegen/generator.d.ts +0 -4
  269. package/dist/src/codegen/generator.d.ts.map +0 -1
  270. package/dist/src/codegen/generator.js +0 -479
  271. package/dist/src/codegen/generator.js.map +0 -1
  272. package/dist/src/codegen/raw-schema.d.ts +0 -38
  273. package/dist/src/codegen/raw-schema.d.ts.map +0 -1
  274. package/dist/src/codegen/raw-schema.js +0 -3
  275. package/dist/src/codegen/raw-schema.js.map +0 -1
  276. package/dist/src/codegen/schema.d.ts +0 -68
  277. package/dist/src/codegen/schema.d.ts.map +0 -1
  278. package/dist/src/codegen/schema.js +0 -71
  279. package/dist/src/codegen/schema.js.map +0 -1
  280. package/dist/src/core/backend.d.ts +0 -5
  281. package/dist/src/core/backend.d.ts.map +0 -1
  282. package/dist/src/core/backend.js +0 -2
  283. package/dist/src/core/backend.js.map +0 -1
  284. package/dist/src/core/construct.d.ts +0 -42
  285. package/dist/src/core/construct.d.ts.map +0 -1
  286. package/dist/src/core/construct.js +0 -2
  287. package/dist/src/core/construct.js.map +0 -1
  288. package/dist/src/core/datasource.d.ts +0 -8
  289. package/dist/src/core/datasource.d.ts.map +0 -1
  290. package/dist/src/core/datasource.js +0 -2
  291. package/dist/src/core/datasource.js.map +0 -1
  292. package/dist/src/core/errors.d.ts +0 -29
  293. package/dist/src/core/errors.d.ts.map +0 -1
  294. package/dist/src/core/errors.js +0 -2
  295. package/dist/src/core/errors.js.map +0 -1
  296. package/dist/src/core/local.d.ts +0 -4
  297. package/dist/src/core/local.d.ts.map +0 -1
  298. package/dist/src/core/local.js +0 -2
  299. package/dist/src/core/local.js.map +0 -1
  300. package/dist/src/core/logical-id.d.ts +0 -3
  301. package/dist/src/core/logical-id.d.ts.map +0 -1
  302. package/dist/src/core/logical-id.js +0 -48
  303. package/dist/src/core/logical-id.js.map +0 -1
  304. package/dist/src/core/output.d.ts +0 -8
  305. package/dist/src/core/output.d.ts.map +0 -1
  306. package/dist/src/core/output.js +0 -2
  307. package/dist/src/core/output.js.map +0 -1
  308. package/dist/src/core/provider.d.ts +0 -7
  309. package/dist/src/core/provider.d.ts.map +0 -1
  310. package/dist/src/core/provider.js +0 -2
  311. package/dist/src/core/provider.js.map +0 -1
  312. package/dist/src/core/resource.d.ts +0 -30
  313. package/dist/src/core/resource.d.ts.map +0 -1
  314. package/dist/src/core/resource.js +0 -2
  315. package/dist/src/core/resource.js.map +0 -1
  316. package/dist/src/core/synthesize.d.ts +0 -78
  317. package/dist/src/core/synthesize.d.ts.map +0 -1
  318. package/dist/src/core/synthesize.js +0 -293
  319. package/dist/src/core/synthesize.js.map +0 -1
  320. package/dist/src/core/synthesize.spec.d.ts.map +0 -1
  321. package/dist/src/core/synthesize.spec.js +0 -506
  322. package/dist/src/core/synthesize.spec.js.map +0 -1
  323. package/dist/src/core/terraform-json.d.ts +0 -36
  324. package/dist/src/core/terraform-json.d.ts.map +0 -1
  325. package/dist/src/core/terraform-json.js.map +0 -1
  326. package/dist/src/core/tokens.d.ts +0 -62
  327. package/dist/src/core/tokens.d.ts.map +0 -1
  328. package/dist/src/core/tokens.js +0 -133
  329. package/dist/src/core/tokens.js.map +0 -1
  330. package/dist/src/core/tokens.spec.js +0 -119
  331. package/dist/src/core/tokens.spec.js.map +0 -1
  332. package/dist/src/core/tree.d.ts +0 -6
  333. package/dist/src/core/tree.d.ts.map +0 -1
  334. package/dist/src/core/tree.js +0 -52
  335. package/dist/src/core/tree.js.map +0 -1
  336. package/dist/src/core/tree.spec.js +0 -138
  337. package/dist/src/core/tree.spec.js.map +0 -1
  338. package/dist/src/core/validate.d.ts +0 -5
  339. package/dist/src/core/validate.d.ts.map +0 -1
  340. package/dist/src/core/validate.js +0 -94
  341. package/dist/src/core/validate.js.map +0 -1
  342. package/dist/src/core/validate.spec.d.ts.map +0 -1
  343. package/dist/src/core/validate.spec.js +0 -69
  344. package/dist/src/core/validate.spec.js.map +0 -1
  345. package/dist/src/core/variable.d.ts +0 -14
  346. package/dist/src/core/variable.d.ts.map +0 -1
  347. package/dist/src/core/variable.js +0 -2
  348. package/dist/src/core/variable.js.map +0 -1
  349. package/dist/src/facade/app.d.ts +0 -23
  350. package/dist/src/facade/app.d.ts.map +0 -1
  351. package/dist/src/facade/app.js +0 -55
  352. package/dist/src/facade/app.js.map +0 -1
  353. package/dist/src/facade/backends/backend.d.ts +0 -7
  354. package/dist/src/facade/backends/backend.d.ts.map +0 -1
  355. package/dist/src/facade/backends/backend.js +0 -15
  356. package/dist/src/facade/backends/backend.js.map +0 -1
  357. package/dist/src/facade/backends/gcs.d.ts +0 -18
  358. package/dist/src/facade/backends/gcs.d.ts.map +0 -1
  359. package/dist/src/facade/backends/gcs.js +0 -28
  360. package/dist/src/facade/backends/gcs.js.map +0 -1
  361. package/dist/src/facade/backends/index.d.ts +0 -6
  362. package/dist/src/facade/backends/index.d.ts.map +0 -1
  363. package/dist/src/facade/backends/index.js +0 -6
  364. package/dist/src/facade/backends/index.js.map +0 -1
  365. package/dist/src/facade/backends/local.d.ts +0 -12
  366. package/dist/src/facade/backends/local.d.ts.map +0 -1
  367. package/dist/src/facade/backends/local.js +0 -16
  368. package/dist/src/facade/backends/local.js.map +0 -1
  369. package/dist/src/facade/backends/remote.d.ts +0 -22
  370. package/dist/src/facade/backends/remote.d.ts.map +0 -1
  371. package/dist/src/facade/backends/remote.js +0 -23
  372. package/dist/src/facade/backends/remote.js.map +0 -1
  373. package/dist/src/facade/backends/s3.d.ts +0 -24
  374. package/dist/src/facade/backends/s3.d.ts.map +0 -1
  375. package/dist/src/facade/backends/s3.js +0 -39
  376. package/dist/src/facade/backends/s3.js.map +0 -1
  377. package/dist/src/facade/construct.d.ts +0 -9
  378. package/dist/src/facade/construct.d.ts.map +0 -1
  379. package/dist/src/facade/construct.js +0 -32
  380. package/dist/src/facade/construct.js.map +0 -1
  381. package/dist/src/facade/datasource.d.ts +0 -19
  382. package/dist/src/facade/datasource.d.ts.map +0 -1
  383. package/dist/src/facade/datasource.js +0 -33
  384. package/dist/src/facade/datasource.js.map +0 -1
  385. package/dist/src/facade/facade.spec.d.ts +0 -2
  386. package/dist/src/facade/facade.spec.d.ts.map +0 -1
  387. package/dist/src/facade/facade.spec.js +0 -434
  388. package/dist/src/facade/facade.spec.js.map +0 -1
  389. package/dist/src/facade/local.d.ts +0 -15
  390. package/dist/src/facade/local.d.ts.map +0 -1
  391. package/dist/src/facade/local.js +0 -27
  392. package/dist/src/facade/local.js.map +0 -1
  393. package/dist/src/facade/output.d.ts +0 -18
  394. package/dist/src/facade/output.d.ts.map +0 -1
  395. package/dist/src/facade/output.js +0 -29
  396. package/dist/src/facade/output.js.map +0 -1
  397. package/dist/src/facade/provider.d.ts +0 -13
  398. package/dist/src/facade/provider.d.ts.map +0 -1
  399. package/dist/src/facade/provider.js +0 -25
  400. package/dist/src/facade/provider.js.map +0 -1
  401. package/dist/src/facade/resource.d.ts +0 -34
  402. package/dist/src/facade/resource.d.ts.map +0 -1
  403. package/dist/src/facade/resource.js +0 -58
  404. package/dist/src/facade/resource.js.map +0 -1
  405. package/dist/src/facade/stack.d.ts +0 -11
  406. package/dist/src/facade/stack.d.ts.map +0 -1
  407. package/dist/src/facade/stack.js +0 -28
  408. package/dist/src/facade/stack.js.map +0 -1
  409. package/dist/src/facade/variable.d.ts +0 -27
  410. package/dist/src/facade/variable.d.ts.map +0 -1
  411. package/dist/src/facade/variable.js +0 -45
  412. package/dist/src/facade/variable.js.map +0 -1
  413. package/dist/src/generated/fn.d.ts +0 -599
  414. package/dist/src/generated/fn.d.ts.map +0 -1
  415. package/dist/src/generated/fn.js +0 -998
  416. package/dist/src/generated/fn.js.map +0 -1
  417. package/dist/src/index.d.ts +0 -35
  418. package/dist/src/index.d.ts.map +0 -1
  419. package/dist/src/index.js +0 -23
  420. package/dist/src/index.js.map +0 -1
  421. /package/dist/{src/codegen/__tests__ → codegen}/generator.spec.d.ts +0 -0
  422. /package/dist/{src/core → core}/synthesize.spec.d.ts +0 -0
  423. /package/dist/{src/core → core}/terraform-json.js +0 -0
  424. /package/dist/{src/core → core}/tokens.spec.d.ts +0 -0
  425. /package/dist/{src/core → core}/tree.spec.d.ts +0 -0
  426. /package/dist/{src/core → core}/validate.spec.d.ts +0 -0
@@ -1,382 +0,0 @@
1
- import { test, expect, describe } from "bun:test";
2
- import { generateProviderFiles } from "../generator.js";
3
- import { parseProviderSchema } from "../schema.js";
4
- import { simpleProvider as rawSimple, multiwordProvider as rawMultiword, nestingModesProvider as rawNestingModes, computedListProvider as rawComputedList, computedListAttrProvider as rawComputedListAttr, } from "./fixtures.js";
5
- const parse = (raw) => {
6
- const result = parseProviderSchema(raw);
7
- if (result.isErr())
8
- throw new Error(result.error.message);
9
- return result.value;
10
- };
11
- const simpleProvider = parse(rawSimple);
12
- const multiwordProvider = parse(rawMultiword);
13
- const nestingModesProvider = parse(rawNestingModes);
14
- const computedListProvider = parse(rawComputedList);
15
- const computedListAttrProvider = parse(rawComputedListAttr);
16
- const getContent = (files, path) => {
17
- const content = files.get(path);
18
- if (content === undefined) {
19
- throw new Error(`File not found: ${path}`);
20
- }
21
- return content;
22
- };
23
- describe("file structure", () => {
24
- test("generates provider at provider/index.ts", () => {
25
- const files = generateProviderFiles("simple", simpleProvider);
26
- expect(files.has("provider/index.ts")).toBe(true);
27
- });
28
- test("generates resources at {name}/index.ts", () => {
29
- const files = generateProviderFiles("google", multiwordProvider);
30
- expect(files.has("alloydb-cluster/index.ts")).toBe(true);
31
- expect(files.has("storage-bucket/index.ts")).toBe(true);
32
- });
33
- test("generates data sources at data-{name}/index.ts", () => {
34
- const files = generateProviderFiles("simple", simpleProvider);
35
- expect(files.has("data-data/index.ts")).toBe(true);
36
- });
37
- test("generates index.ts with namespace exports", () => {
38
- const files = generateProviderFiles("google", multiwordProvider);
39
- const index = getContent(files, "index.ts");
40
- expect(index).toContain('export * as provider from "./provider/index.js"');
41
- expect(index).toContain('export * as alloydbCluster from "./alloydb-cluster/index.js"');
42
- expect(index).toContain('export * as storageBucket from "./storage-bucket/index.js"');
43
- });
44
- });
45
- describe("class naming", () => {
46
- test("provider class: {Provider}Provider", () => {
47
- const files = generateProviderFiles("simple", simpleProvider);
48
- const content = getContent(files, "provider/index.ts");
49
- expect(content).toContain("export class SimpleProvider extends TerraformProvider");
50
- });
51
- test("resource class: strips provider prefix, PascalCase", () => {
52
- const files = generateProviderFiles("google", multiwordProvider);
53
- const content = getContent(files, "alloydb-cluster/index.ts");
54
- expect(content).toContain("export class AlloydbCluster extends TerraformResource");
55
- });
56
- test("data source class: Data{Name}", () => {
57
- const files = generateProviderFiles("simple", simpleProvider);
58
- const content = getContent(files, "data-data/index.ts");
59
- expect(content).toContain("export class DataData extends TerraformDataSource");
60
- });
61
- });
62
- describe("type naming", () => {
63
- test("config type: {ClassName}Config", () => {
64
- const files = generateProviderFiles("test", nestingModesProvider);
65
- const content = getContent(files, "resource/index.ts");
66
- expect(content).toContain("export type ResourceConfig = {");
67
- });
68
- test("nested block type: {ClassName}{BlockName} (not {ClassName}Config{BlockName})", () => {
69
- const files = generateProviderFiles("test", nestingModesProvider);
70
- const content = getContent(files, "resource/index.ts");
71
- // Correct: ResourceSingleBlock
72
- expect(content).toContain("export type ResourceSingleBlock = {");
73
- expect(content).toContain("export type ResourceListBlock = {");
74
- expect(content).toContain("export type ResourceSingleItemList = {");
75
- expect(content).toContain("export type ResourceSetBlock = {");
76
- // Wrong: ResourceConfigSingleBlock
77
- expect(content).not.toContain("ResourceConfigSingleBlock");
78
- expect(content).not.toContain("ResourceConfigListBlock");
79
- });
80
- test("collision: append A when type name exists", () => {
81
- const files = generateProviderFiles("simple", simpleProvider);
82
- const content = getContent(files, "resource/index.ts");
83
- // ResourceConfig exists for the config type
84
- // Nested block "config" would also be ResourceConfig -> becomes ResourceConfigA
85
- expect(content).toContain("export type ResourceConfigA = {");
86
- expect(content).toContain("readonly config?: ResourceConfigA;");
87
- });
88
- });
89
- describe("property naming", () => {
90
- test("converts snake_case to camelCase", () => {
91
- const files = generateProviderFiles("test", nestingModesProvider);
92
- const content = getContent(files, "resource/index.ts");
93
- expect(content).toContain("readonly secretId?:");
94
- expect(content).toContain("readonly singleBlock?:");
95
- expect(content).toContain("readonly listBlock?:");
96
- expect(content).toContain("readonly singleItemList?:");
97
- expect(content).toContain("readonly setBlock?:");
98
- });
99
- test("uses snake_case in terraform attribute mapping", () => {
100
- const files = generateProviderFiles("test", nestingModesProvider);
101
- const content = getContent(files, "resource/index.ts");
102
- expect(content).toContain("secret_id: config.secretId");
103
- expect(content).toContain("single_block: config.singleBlock");
104
- });
105
- });
106
- describe("block nesting modes", () => {
107
- test("single: generates T", () => {
108
- const files = generateProviderFiles("test", nestingModesProvider);
109
- const content = getContent(files, "resource/index.ts");
110
- expect(content).toContain("readonly singleBlock?: ResourceSingleBlock;");
111
- expect(content).not.toContain("readonly singleBlock?: ResourceSingleBlock |");
112
- });
113
- test("list without max_items=1: generates readonly T[]", () => {
114
- const files = generateProviderFiles("test", nestingModesProvider);
115
- const content = getContent(files, "resource/index.ts");
116
- expect(content).toContain("readonly listBlock?: readonly ResourceListBlock[];");
117
- });
118
- test("set: generates readonly T[]", () => {
119
- const files = generateProviderFiles("test", nestingModesProvider);
120
- const content = getContent(files, "resource/index.ts");
121
- expect(content).toContain("readonly setBlock?: readonly ResourceSetBlock[];");
122
- });
123
- test("list with max_items=1: generates T (single object)", () => {
124
- const files = generateProviderFiles("test", nestingModesProvider);
125
- const content = getContent(files, "resource/index.ts");
126
- expect(content).toContain("readonly singleItemList?: ResourceSingleItemList;");
127
- expect(content).not.toContain("ResourceSingleItemList[]");
128
- });
129
- });
130
- describe("constructor body", () => {
131
- test("regular properties: tf_name: config.tsName", () => {
132
- const files = generateProviderFiles("test", nestingModesProvider);
133
- const content = getContent(files, "resource/index.ts");
134
- expect(content).toContain("secret_id: config.secretId,");
135
- expect(content).toContain("single_block: config.singleBlock,");
136
- });
137
- test("max_items=1 blocks: simple assignment (no array normalization)", () => {
138
- const files = generateProviderFiles("test", nestingModesProvider);
139
- const content = getContent(files, "resource/index.ts");
140
- expect(content).toContain("single_item_list: config.singleItemList,");
141
- expect(content).not.toContain("Array.isArray(config.singleItemList)");
142
- });
143
- });
144
- describe("getters", () => {
145
- test("generates getters for all attributes", () => {
146
- const files = generateProviderFiles("test", nestingModesProvider);
147
- const content = getContent(files, "resource/index.ts");
148
- expect(content).toContain("get id(): TokenValue<string> {");
149
- expect(content).toContain("get name(): TokenValue<string> {");
150
- expect(content).toContain("get secretId(): TokenValue<string> {");
151
- expect(content).toContain("get location(): TokenValue<string> {");
152
- });
153
- test("string getter: TokenValue<string> with getStringAttribute", () => {
154
- const files = generateProviderFiles("test", nestingModesProvider);
155
- const content = getContent(files, "resource/index.ts");
156
- expect(content).toContain("get secretId(): TokenValue<string> {");
157
- expect(content).toContain('return this.getStringAttribute("secret_id");');
158
- });
159
- test("bool getter: TokenValue<boolean> with getBooleanAttribute", () => {
160
- const files = generateProviderFiles("simple", simpleProvider);
161
- const content = getContent(files, "resource/index.ts");
162
- expect(content).toContain("get computedBool(): TokenValue<boolean> {");
163
- expect(content).toContain('return this.getBooleanAttribute("computed_bool");');
164
- });
165
- test("number getter: TokenValue<number> with getNumberAttribute", () => {
166
- const files = generateProviderFiles("simple", simpleProvider);
167
- const content = getContent(files, "resource/index.ts");
168
- expect(content).toContain("get computedNumber(): TokenValue<number> {");
169
- expect(content).toContain('return this.getNumberAttribute("computed_number");');
170
- });
171
- test("list getter: ComputedList<TokenValue<string>> with element access", () => {
172
- const files = generateProviderFiles("simple", simpleProvider);
173
- const content = getContent(files, "resource/index.ts");
174
- expect(content).toContain("get computedList(): ComputedList<TokenValue<string>> {");
175
- expect(content).toContain('return new ComputedList(this.fqn, "computed_list"');
176
- });
177
- test("number list getter: ComputedList<TokenValue<number>>", () => {
178
- const files = generateProviderFiles("simple", simpleProvider);
179
- const content = getContent(files, "resource/index.ts");
180
- expect(content).toContain("get computedNumberList(): ComputedList<TokenValue<number>> {");
181
- });
182
- test("map getter: TokenValue<Readonly<Record<string, string>>>", () => {
183
- const files = generateProviderFiles("simple", simpleProvider);
184
- const content = getContent(files, "resource/index.ts");
185
- expect(content).toContain("get computedMap(): TokenValue<Readonly<Record<string, string>>> {");
186
- expect(content).toContain('return this.getMapAttribute("computed_map");');
187
- });
188
- test("list of maps getter: ComputedList<TokenValue<Readonly<Record<string, string>>>>", () => {
189
- const files = generateProviderFiles("simple", simpleProvider);
190
- const content = getContent(files, "resource/index.ts");
191
- expect(content).toContain("get computedListOfMaps(): ComputedList<TokenValue<Readonly<Record<string, string>>>> {");
192
- });
193
- test("number map getter: TokenValue<Readonly<Record<string, number>>>", () => {
194
- const files = generateProviderFiles("simple", simpleProvider);
195
- const content = getContent(files, "resource/index.ts");
196
- expect(content).toContain("get computedNumberMap(): TokenValue<Readonly<Record<string, number>>> {");
197
- });
198
- test("list of lists getter: ComputedList<TokenValue<readonly string[]>>", () => {
199
- const files = generateProviderFiles("simple", simpleProvider);
200
- const content = getContent(files, "resource/index.ts");
201
- expect(content).toContain("get computedListOfLists(): ComputedList<TokenValue<readonly string[]>> {");
202
- });
203
- test("bool set getter: ComputedList<TokenValue<boolean>>", () => {
204
- const files = generateProviderFiles("simple", simpleProvider);
205
- const content = getContent(files, "resource/index.ts");
206
- expect(content).toContain("get computedBoolSet(): ComputedList<TokenValue<boolean>> {");
207
- });
208
- });
209
- describe("attribute type mappings", () => {
210
- test("string -> TfString in config", () => {
211
- const files = generateProviderFiles("simple", simpleProvider);
212
- const content = getContent(files, "resource/index.ts");
213
- expect(content).toContain("readonly name: TfString;");
214
- });
215
- test("bool -> TfBoolean in config", () => {
216
- const files = generateProviderFiles("simple", simpleProvider);
217
- const content = getContent(files, "resource/index.ts");
218
- expect(content).toContain("readonly enabled?: TfBoolean;");
219
- });
220
- test("number -> TfNumber in config", () => {
221
- const files = generateProviderFiles("simple", simpleProvider);
222
- const content = getContent(files, "resource/index.ts");
223
- expect(content).toContain("readonly count?: TfNumber;");
224
- });
225
- test('["map", "string"] -> TfStringMap in config', () => {
226
- const files = generateProviderFiles("simple", simpleProvider);
227
- const content = getContent(files, "resource/index.ts");
228
- expect(content).toContain("readonly tags?: TfStringMap;");
229
- });
230
- });
231
- describe("optionality", () => {
232
- test("required: true -> required property", () => {
233
- const files = generateProviderFiles("simple", simpleProvider);
234
- const content = getContent(files, "resource/index.ts");
235
- expect(content).toContain("readonly name: TfString;"); // no ?
236
- });
237
- test("optional: true -> optional property", () => {
238
- const files = generateProviderFiles("simple", simpleProvider);
239
- const content = getContent(files, "resource/index.ts");
240
- expect(content).toContain("readonly enabled?: TfBoolean;");
241
- });
242
- test("computed: true -> optional property", () => {
243
- const files = generateProviderFiles("simple", simpleProvider);
244
- const content = getContent(files, "resource/index.ts");
245
- expect(content).toContain("readonly id?: TfString;");
246
- });
247
- test("block with min_items undefined or 0 -> optional", () => {
248
- const files = generateProviderFiles("test", nestingModesProvider);
249
- const content = getContent(files, "resource/index.ts");
250
- expect(content).toContain("readonly singleBlock?:");
251
- expect(content).toContain("readonly listBlock?:");
252
- });
253
- test("block with min_items >= 1 -> required", () => {
254
- const files = generateProviderFiles("simple", simpleProvider);
255
- const content = getContent(files, "resource/index.ts");
256
- // items has min_items: 1
257
- expect(content).toContain("readonly items: readonly ResourceItems[];");
258
- });
259
- });
260
- describe("input getters", () => {
261
- test("generates *Input getters for non-computed attributes", () => {
262
- const files = generateProviderFiles("simple", simpleProvider);
263
- const content = getContent(files, "resource/index.ts");
264
- // Should have nameInput for required attribute
265
- expect(content).toContain("get nameInput():");
266
- // Should have enabledInput for optional attribute
267
- expect(content).toContain("get enabledInput():");
268
- // Should have countInput for optional number attribute
269
- expect(content).toContain("get countInput():");
270
- // Should have tagsInput for optional map attribute
271
- expect(content).toContain("get tagsInput():");
272
- });
273
- test("does not generate *Input getters for computed-only attributes", () => {
274
- const files = generateProviderFiles("simple", simpleProvider);
275
- const content = getContent(files, "resource/index.ts");
276
- // id is computed-only, should not have idInput
277
- expect(content).not.toContain("get idInput():");
278
- });
279
- test("*Input getter returns the config value type", () => {
280
- const files = generateProviderFiles("simple", simpleProvider);
281
- const content = getContent(files, "resource/index.ts");
282
- expect(content).toContain("get nameInput(): TfString | undefined {");
283
- expect(content).toContain("return this._config.name;");
284
- });
285
- });
286
- describe("importFrom instance method", () => {
287
- test("generates importFrom instance method on resources", () => {
288
- const files = generateProviderFiles("simple", simpleProvider);
289
- const content = getContent(files, "resource/index.ts");
290
- expect(content).toContain("importFrom(resourceId: TfString): this {");
291
- });
292
- test("importFrom sets lifecycle importId and returns this", () => {
293
- const files = generateProviderFiles("simple", simpleProvider);
294
- const content = getContent(files, "resource/index.ts");
295
- expect(content).toContain("this.lifecycle = { ...this.lifecycle, importId: resourceId };");
296
- expect(content).toContain("return this;");
297
- });
298
- });
299
- describe("imports", () => {
300
- test("imports TokenValue instead of TokenString", () => {
301
- const files = generateProviderFiles("simple", simpleProvider);
302
- const content = getContent(files, "resource/index.ts");
303
- expect(content).toContain("TokenValue");
304
- expect(content).not.toContain("TokenString");
305
- });
306
- test("does not duplicate base class in type and value imports", () => {
307
- const files = generateProviderFiles("simple", simpleProvider);
308
- const content = getContent(files, "resource/index.ts");
309
- // Should have value import with TerraformResource, not in type import
310
- expect(content).toMatch(/import \{[^}]*\bTerraformResource\b[^}]*\} from "tfts"/);
311
- expect(content).not.toMatch(/import type \{[^}]*\bTerraformResource\b[^}]*\}/);
312
- });
313
- test("getter returns TokenValue<string>", () => {
314
- const files = generateProviderFiles("simple", simpleProvider);
315
- const content = getContent(files, "resource/index.ts");
316
- expect(content).toContain("get name(): TokenValue<string>");
317
- });
318
- });
319
- describe("provider config", () => {
320
- test("includes provider-specific attributes in config type", () => {
321
- const files = generateProviderFiles("simple", simpleProvider);
322
- const content = getContent(files, "provider/index.ts");
323
- expect(content).toContain("readonly apiKey: TfString");
324
- expect(content).toContain("readonly region?: TfString");
325
- });
326
- });
327
- describe("computed list block_types", () => {
328
- test("generates getter returning ComputedList for computed list blocks", () => {
329
- const files = generateProviderFiles("google", computedListProvider);
330
- const content = getContent(files, "cloud-run-service/index.ts");
331
- expect(content).toContain("get status(): ComputedList<CloudRunServiceStatusOutput>");
332
- });
333
- test("generates output class with getters for computed attributes", () => {
334
- const files = generateProviderFiles("google", computedListProvider);
335
- const content = getContent(files, "cloud-run-service/index.ts");
336
- expect(content).toContain("class CloudRunServiceStatusOutput extends ComputedObject");
337
- expect(content).toContain("get url(): TokenValue<string>");
338
- expect(content).toContain("get latestReadyRevisionName(): TokenValue<string>");
339
- });
340
- test("imports ComputedList and ComputedObject when needed", () => {
341
- const files = generateProviderFiles("google", computedListProvider);
342
- const content = getContent(files, "cloud-run-service/index.ts");
343
- expect(content).toContain("import { ComputedList, ComputedObject, TerraformResource } from");
344
- });
345
- });
346
- describe("computed list/object attributes", () => {
347
- test("generates getter returning ComputedList for computed list attributes", () => {
348
- const files = generateProviderFiles("google", computedListAttrProvider);
349
- const content = getContent(files, "cloud-run-service/index.ts");
350
- expect(content).toContain("get status(): ComputedList<CloudRunServiceStatusOutput>");
351
- });
352
- test("generates output class for computed list attribute", () => {
353
- const files = generateProviderFiles("google", computedListAttrProvider);
354
- const content = getContent(files, "cloud-run-service/index.ts");
355
- expect(content).toContain("class CloudRunServiceStatusOutput extends ComputedObject");
356
- expect(content).toContain("get url(): TokenValue<string>");
357
- expect(content).toContain("get latestReadyRevisionName(): TokenValue<string>");
358
- });
359
- test("does not include computed list attribute in config type", () => {
360
- const files = generateProviderFiles("google", computedListAttrProvider);
361
- const content = getContent(files, "cloud-run-service/index.ts");
362
- expect(content).not.toContain("readonly status?:");
363
- expect(content).not.toContain("readonly status:");
364
- });
365
- test("does not generate duplicate getter for computed list attribute", () => {
366
- const files = generateProviderFiles("google", computedListAttrProvider);
367
- const content = getContent(files, "cloud-run-service/index.ts");
368
- const matches = content.match(/get status\(\)/g);
369
- expect(matches?.length).toBe(1);
370
- });
371
- test("does not include computed list attribute in constructor body", () => {
372
- const files = generateProviderFiles("google", computedListAttrProvider);
373
- const content = getContent(files, "cloud-run-service/index.ts");
374
- expect(content).not.toContain("status: config.status");
375
- });
376
- test("imports ComputedList and ComputedObject for computed list attributes", () => {
377
- const files = generateProviderFiles("google", computedListAttrProvider);
378
- const content = getContent(files, "cloud-run-service/index.ts");
379
- expect(content).toContain("import { ComputedList, ComputedObject, TerraformResource }");
380
- });
381
- });
382
- //# sourceMappingURL=generator.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { z } from "zod";
2
- type ParameterType = "string" | "number" | "bool" | "dynamic" | readonly ["list", ParameterType] | readonly ["set", ParameterType] | readonly ["map", ParameterType] | readonly ["object", Readonly<Record<string, ParameterType>>] | readonly ["tuple", readonly ParameterType[]];
3
- declare const FunctionsMetadataSchema: z.ZodObject<{
4
- format_version: z.ZodString;
5
- function_signatures: z.ZodRecord<z.ZodString, z.ZodObject<{
6
- description: z.ZodString;
7
- return_type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
8
- parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
9
- name: z.ZodString;
10
- type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
11
- }, z.core.$strip>>>;
12
- variadic_parameter: z.ZodOptional<z.ZodObject<{
13
- name: z.ZodString;
14
- type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
15
- }, z.core.$strip>>;
16
- }, z.core.$strip>>;
17
- }, z.core.$strip>;
18
- export type FunctionsMetadata = z.infer<typeof FunctionsMetadataSchema>;
19
- export declare const parseFunctionsMetadata: (data: unknown) => FunctionsMetadata;
20
- export declare const generateFnClass: (metadata: FunctionsMetadata) => string;
21
- export {};
22
- //# sourceMappingURL=fn-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fn-generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/fn-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,aAAa,GACd,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,SAAS,GACT,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,GAChC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,GAC/B,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,GAC/B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAC5D,SAAS,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC;AA8BjD,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;iBAG3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,sBAAsB,GAAI,MAAM,OAAO,KAAG,iBAClB,CAAC;AA+KtC,eAAO,MAAM,eAAe,GAAI,UAAU,iBAAiB,KAAG,MAmB7D,CAAC"}
@@ -1,203 +0,0 @@
1
- import { z } from "zod";
2
- const ParameterTypeSchema = z.lazy(() => z.union([
3
- z.literal("string"),
4
- z.literal("number"),
5
- z.literal("bool"),
6
- z.literal("dynamic"),
7
- z.tuple([z.literal("list"), ParameterTypeSchema]),
8
- z.tuple([z.literal("set"), ParameterTypeSchema]),
9
- z.tuple([z.literal("map"), ParameterTypeSchema]),
10
- z.tuple([z.literal("object"), z.record(z.string(), ParameterTypeSchema)]),
11
- z.tuple([z.literal("tuple"), z.array(ParameterTypeSchema)]),
12
- ]));
13
- const FunctionParameterSchema = z.object({
14
- name: z.string(),
15
- type: ParameterTypeSchema,
16
- });
17
- const FunctionSignatureSchema = z.object({
18
- description: z.string(),
19
- return_type: ParameterTypeSchema,
20
- parameters: z.array(FunctionParameterSchema).optional(),
21
- variadic_parameter: FunctionParameterSchema.optional(),
22
- });
23
- const FunctionsMetadataSchema = z.object({
24
- format_version: z.string(),
25
- function_signatures: z.record(z.string(), FunctionSignatureSchema),
26
- });
27
- export const parseFunctionsMetadata = (data) => FunctionsMetadataSchema.parse(data);
28
- const mapParamTypeToTs = (type) => {
29
- if (type === "string")
30
- return "TfString";
31
- if (type === "number")
32
- return "TfNumber";
33
- if (type === "bool")
34
- return "TfBoolean";
35
- if (type === "dynamic")
36
- return "TerraformValue";
37
- const [container, inner] = type;
38
- if (container === "list" || container === "set") {
39
- return `readonly ${mapParamTypeToTs(inner)}[]`;
40
- }
41
- if (container === "map") {
42
- return `Readonly<Record<string, ${mapParamTypeToTs(inner)}>>`;
43
- }
44
- return "TerraformValue";
45
- };
46
- const mapReturnTypeToTs = (type) => {
47
- const innerType = (t) => {
48
- if (t === "string")
49
- return "string";
50
- if (t === "number")
51
- return "number";
52
- if (t === "bool")
53
- return "boolean";
54
- if (t === "dynamic")
55
- return "any";
56
- const [container, inner] = t;
57
- if (container === "list" || container === "set") {
58
- return `${innerType(inner)}[]`;
59
- }
60
- if (container === "map") {
61
- return `Record<string, ${innerType(inner)}>`;
62
- }
63
- return "unknown";
64
- };
65
- return `TokenValue<${innerType(type)}>`;
66
- };
67
- const escapeDescription = (desc) => desc.replace(/\*\//g, "* /").replace(/\n/g, "\n * ");
68
- const RESERVED_WORDS = new Set([
69
- "break",
70
- "case",
71
- "catch",
72
- "continue",
73
- "debugger",
74
- "default",
75
- "delete",
76
- "do",
77
- "else",
78
- "finally",
79
- "for",
80
- "function",
81
- "if",
82
- "in",
83
- "instanceof",
84
- "new",
85
- "return",
86
- "switch",
87
- "this",
88
- "throw",
89
- "try",
90
- "typeof",
91
- "var",
92
- "void",
93
- "while",
94
- "with",
95
- "class",
96
- "const",
97
- "enum",
98
- "export",
99
- "extends",
100
- "import",
101
- "super",
102
- "implements",
103
- "interface",
104
- "let",
105
- "package",
106
- "private",
107
- "protected",
108
- "public",
109
- "static",
110
- "yield",
111
- ]);
112
- const safeParamName = (name) => (RESERVED_WORDS.has(name) ? `${name}_` : name);
113
- const generateUnwrap = (expr, type, counter) => {
114
- if (type === "string" || type === "number" || type === "bool" || type === "dynamic") {
115
- return {
116
- expr: `${expr} instanceof TokenValue ? ${expr}.toToken() : ${expr}`,
117
- nextCounter: counter,
118
- };
119
- }
120
- const [container, inner] = type;
121
- if (container === "list" || container === "set") {
122
- const varName = `v${counter}`;
123
- const { expr: innerExpr, nextCounter } = generateUnwrap(varName, inner, counter + 1);
124
- return { expr: `${expr}.map(${varName} => ${innerExpr})`, nextCounter };
125
- }
126
- if (container === "map") {
127
- const keyName = `k${counter}`;
128
- const varName = `v${counter}`;
129
- const { expr: innerExpr, nextCounter } = generateUnwrap(varName, inner, counter + 1);
130
- return {
131
- expr: `Object.fromEntries(Object.entries(${expr}).map(([${keyName}, ${varName}]) => [${keyName}, ${innerExpr}]))`,
132
- nextCounter,
133
- };
134
- }
135
- return { expr, nextCounter: counter };
136
- };
137
- const generateMethod = (name, sig) => {
138
- const params = sig.parameters ?? [];
139
- const paramList = [
140
- ...params.map((p) => `${safeParamName(p.name)}: ${mapParamTypeToTs(p.type)}`),
141
- ...(sig.variadic_parameter
142
- ? [
143
- `...${safeParamName(sig.variadic_parameter.name)}: ${mapParamTypeToTs(sig.variadic_parameter.type)}[]`,
144
- ]
145
- : []),
146
- ];
147
- const initial = {
148
- statements: [],
149
- args: [],
150
- counter: 0,
151
- };
152
- const { statements, args, counter: finalCounter, } = params.reduce((acc, p) => {
153
- const paramName = safeParamName(p.name);
154
- const unwrappedName = `_${paramName}`;
155
- const { expr, nextCounter } = generateUnwrap(paramName, p.type, acc.counter);
156
- return {
157
- statements: [...acc.statements, `const ${unwrappedName} = ${expr};`],
158
- args: [...acc.args, unwrappedName],
159
- counter: nextCounter,
160
- };
161
- }, initial);
162
- const [allStatements, allArgs] = sig.variadic_parameter
163
- ? [
164
- [
165
- ...statements,
166
- `const _${safeParamName(sig.variadic_parameter.name)} = ${safeParamName(sig.variadic_parameter.name)}.map(v => ${generateUnwrap("v", sig.variadic_parameter.type, finalCounter).expr});`,
167
- ],
168
- [...args, `..._${safeParamName(sig.variadic_parameter.name)}`],
169
- ]
170
- : [statements, args];
171
- const fnCall = allArgs.length > 0 ? `fn("${name}", ${allArgs.join(", ")})` : `fn("${name}")`;
172
- const returnType = mapReturnTypeToTs(sig.return_type);
173
- const body = allStatements.length > 0
174
- ? `${allStatements.join("\n ")}\n return new TokenValue(${fnCall});`
175
- : `return new TokenValue(${fnCall});`;
176
- return ` /**
177
- * ${escapeDescription(sig.description)}
178
- * @see https://developer.hashicorp.com/terraform/language/functions/${name}
179
- */
180
- static ${name}(${paramList.join(", ")}): ${returnType} {
181
- ${body}
182
- }`;
183
- };
184
- export const generateFnClass = (metadata) => {
185
- const methods = Object.entries(metadata.function_signatures)
186
- .filter(([name]) => !name.includes("::"))
187
- .sort(([a], [b]) => a.localeCompare(b))
188
- .map(([name, sig]) => generateMethod(name, sig))
189
- .join("\n\n");
190
- return `/**
191
- * Generated by scripts/generate-fn.ts - do not edit manually.
192
- * Regenerate: bun run generate:fn
193
- */
194
-
195
- import type { TfString, TfNumber, TfBoolean, TerraformValue } from "../core/tokens.js";
196
- import { fn, TokenValue } from "../core/tokens.js";
197
-
198
- export class Fn {
199
- ${methods}
200
- }
201
- `;
202
- };
203
- //# sourceMappingURL=fn-generator.js.map