tfts 0.2.13 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -161
- package/dist/cli/config.d.ts +18 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +36 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/get.d.ts +8 -0
- package/dist/cli/get.d.ts.map +1 -0
- package/dist/cli/get.js +107 -0
- package/dist/cli/get.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +85 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/synth.d.ts +7 -0
- package/dist/cli/synth.d.ts.map +1 -0
- package/dist/cli/synth.js +35 -0
- package/dist/cli/synth.js.map +1 -0
- package/dist/codegen/fetch-schema.d.ts +9 -0
- package/dist/codegen/fetch-schema.d.ts.map +1 -0
- package/dist/codegen/fetch-schema.js +51 -0
- package/dist/codegen/fetch-schema.js.map +1 -0
- package/dist/codegen/fetch-schema.spec.d.ts +2 -0
- package/dist/codegen/fetch-schema.spec.d.ts.map +1 -0
- package/dist/codegen/fetch-schema.spec.js +63 -0
- package/dist/codegen/fetch-schema.spec.js.map +1 -0
- package/dist/codegen/generator.d.ts +8 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +582 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/generator.spec.d.ts.map +1 -0
- package/dist/codegen/generator.spec.js +387 -0
- package/dist/codegen/generator.spec.js.map +1 -0
- package/dist/codegen/index.d.ts +5 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +5 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/schema.d.ts +46 -0
- package/dist/codegen/schema.d.ts.map +1 -0
- package/dist/codegen/schema.js +64 -0
- package/dist/codegen/schema.js.map +1 -0
- package/dist/codegen/type-mapper.d.ts +11 -0
- package/dist/codegen/type-mapper.d.ts.map +1 -0
- package/dist/codegen/type-mapper.js +130 -0
- package/dist/codegen/type-mapper.js.map +1 -0
- package/dist/core/synthesize.d.ts +2 -0
- package/dist/core/synthesize.d.ts.map +1 -0
- package/dist/core/synthesize.js +51 -0
- package/dist/core/synthesize.js.map +1 -0
- package/dist/core/synthesize.spec.d.ts.map +1 -0
- package/dist/core/synthesize.spec.js +72 -0
- package/dist/core/synthesize.spec.js.map +1 -0
- package/dist/core/terraform-json.d.ts +86 -0
- package/dist/core/terraform-json.d.ts.map +1 -0
- package/dist/core/terraform-json.js.map +1 -0
- package/dist/core/tokens.d.ts +46 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +256 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/{src/core → core}/tokens.spec.d.ts.map +1 -1
- package/dist/core/tokens.spec.js +140 -0
- package/dist/core/tokens.spec.js.map +1 -0
- package/dist/core/tree.d.ts +11 -0
- package/dist/core/tree.d.ts.map +1 -0
- package/dist/core/tree.js +89 -0
- package/dist/core/tree.js.map +1 -0
- package/dist/{src/core → core}/tree.spec.d.ts.map +1 -1
- package/dist/core/tree.spec.js +110 -0
- package/dist/core/tree.spec.js.map +1 -0
- package/dist/core/types.d.ts +165 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +5 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +186 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/core/validate.spec.d.ts.map +1 -0
- package/dist/core/validate.spec.js +126 -0
- package/dist/core/validate.spec.js.map +1 -0
- package/dist/facade/annotations.d.ts +17 -0
- package/dist/facade/annotations.d.ts.map +1 -0
- package/dist/facade/annotations.js +29 -0
- package/dist/facade/annotations.js.map +1 -0
- package/dist/facade/app.d.ts +51 -0
- package/dist/facade/app.d.ts.map +1 -0
- package/dist/facade/app.js +121 -0
- package/dist/facade/app.js.map +1 -0
- package/dist/facade/aspects.d.ts +13 -0
- package/dist/facade/aspects.d.ts.map +1 -0
- package/dist/facade/aspects.js +34 -0
- package/dist/facade/aspects.js.map +1 -0
- package/dist/facade/backends/cloud-backend.d.ts +34 -0
- package/dist/facade/backends/cloud-backend.d.ts.map +1 -0
- package/dist/facade/backends/cloud-backend.js +84 -0
- package/dist/facade/backends/cloud-backend.js.map +1 -0
- package/dist/facade/backends/gcs-backend.d.ts +29 -0
- package/dist/facade/backends/gcs-backend.d.ts.map +1 -0
- package/dist/facade/backends/gcs-backend.js +34 -0
- package/dist/facade/backends/gcs-backend.js.map +1 -0
- package/dist/facade/backends/index.d.ts +5 -0
- package/dist/facade/backends/index.d.ts.map +1 -0
- package/dist/facade/backends/index.js +5 -0
- package/dist/facade/backends/index.js.map +1 -0
- package/dist/facade/backends/remote-backend.d.ts +34 -0
- package/dist/facade/backends/remote-backend.d.ts.map +1 -0
- package/dist/facade/backends/remote-backend.js +50 -0
- package/dist/facade/backends/remote-backend.js.map +1 -0
- package/dist/facade/backends/s3-backend.d.ts +97 -0
- package/dist/facade/backends/s3-backend.d.ts.map +1 -0
- package/dist/facade/backends/s3-backend.js +34 -0
- package/dist/facade/backends/s3-backend.js.map +1 -0
- package/dist/facade/complex-computed-list.d.ts +117 -0
- package/dist/facade/complex-computed-list.d.ts.map +1 -0
- package/dist/facade/complex-computed-list.js +370 -0
- package/dist/facade/complex-computed-list.js.map +1 -0
- package/dist/facade/construct.d.ts +49 -0
- package/dist/facade/construct.d.ts.map +1 -0
- package/dist/facade/construct.js +129 -0
- package/dist/facade/construct.js.map +1 -0
- package/dist/facade/importable-resource.d.ts +17 -0
- package/dist/facade/importable-resource.d.ts.map +1 -0
- package/dist/facade/importable-resource.js +27 -0
- package/dist/facade/importable-resource.js.map +1 -0
- package/dist/facade/index.d.ts +27 -0
- package/dist/facade/index.d.ts.map +1 -0
- package/dist/facade/index.js +27 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/runtime.d.ts +16 -0
- package/dist/facade/runtime.d.ts.map +1 -0
- package/dist/facade/runtime.js +76 -0
- package/dist/facade/runtime.js.map +1 -0
- package/dist/facade/stack-registry.d.ts +13 -0
- package/dist/facade/stack-registry.d.ts.map +1 -0
- package/dist/facade/stack-registry.js +8 -0
- package/dist/facade/stack-registry.js.map +1 -0
- package/dist/facade/terraform-addressable.d.ts +9 -0
- package/dist/facade/terraform-addressable.d.ts.map +1 -0
- package/dist/facade/terraform-addressable.js +2 -0
- package/dist/facade/terraform-addressable.js.map +1 -0
- package/dist/facade/terraform-asset.d.ts +27 -0
- package/dist/facade/terraform-asset.d.ts.map +1 -0
- package/dist/facade/terraform-asset.js +118 -0
- package/dist/facade/terraform-asset.js.map +1 -0
- package/dist/facade/terraform-backend.d.ts +23 -0
- package/dist/facade/terraform-backend.d.ts.map +1 -0
- package/dist/facade/terraform-backend.js +53 -0
- package/dist/facade/terraform-backend.js.map +1 -0
- package/dist/facade/terraform-data-source.d.ts +45 -0
- package/dist/facade/terraform-data-source.d.ts.map +1 -0
- package/dist/facade/terraform-data-source.js +85 -0
- package/dist/facade/terraform-data-source.js.map +1 -0
- package/dist/facade/terraform-element.d.ts +28 -0
- package/dist/facade/terraform-element.d.ts.map +1 -0
- package/dist/facade/terraform-element.js +100 -0
- package/dist/facade/terraform-element.js.map +1 -0
- package/dist/facade/terraform-functions.d.ts +148 -0
- package/dist/facade/terraform-functions.d.ts.map +1 -0
- package/dist/facade/terraform-functions.js +615 -0
- package/dist/facade/terraform-functions.js.map +1 -0
- package/dist/facade/terraform-functions.spec.d.ts +2 -0
- package/dist/facade/terraform-functions.spec.d.ts.map +1 -0
- package/dist/facade/terraform-functions.spec.js +282 -0
- package/dist/facade/terraform-functions.spec.js.map +1 -0
- package/dist/facade/terraform-hcl-module.d.ts +18 -0
- package/dist/facade/terraform-hcl-module.d.ts.map +1 -0
- package/dist/facade/terraform-hcl-module.js +39 -0
- package/dist/facade/terraform-hcl-module.js.map +1 -0
- package/dist/facade/terraform-iterator.d.ts +39 -0
- package/dist/facade/terraform-iterator.d.ts.map +1 -0
- package/dist/facade/terraform-iterator.js +77 -0
- package/dist/facade/terraform-iterator.js.map +1 -0
- package/dist/facade/terraform-local.d.ts +18 -0
- package/dist/facade/terraform-local.d.ts.map +1 -0
- package/dist/facade/terraform-local.js +34 -0
- package/dist/facade/terraform-local.js.map +1 -0
- package/dist/facade/terraform-module.d.ts +35 -0
- package/dist/facade/terraform-module.d.ts.map +1 -0
- package/dist/facade/terraform-module.js +94 -0
- package/dist/facade/terraform-module.js.map +1 -0
- package/dist/facade/terraform-output.d.ts +20 -0
- package/dist/facade/terraform-output.d.ts.map +1 -0
- package/dist/facade/terraform-output.js +38 -0
- package/dist/facade/terraform-output.js.map +1 -0
- package/dist/facade/terraform-provider.d.ts +27 -0
- package/dist/facade/terraform-provider.d.ts.map +1 -0
- package/dist/facade/terraform-provider.js +48 -0
- package/dist/facade/terraform-provider.js.map +1 -0
- package/dist/facade/terraform-remote-state.d.ts +33 -0
- package/dist/facade/terraform-remote-state.d.ts.map +1 -0
- package/dist/facade/terraform-remote-state.js +62 -0
- package/dist/facade/terraform-remote-state.js.map +1 -0
- package/dist/facade/terraform-resource.d.ts +64 -0
- package/dist/facade/terraform-resource.d.ts.map +1 -0
- package/dist/facade/terraform-resource.js +170 -0
- package/dist/facade/terraform-resource.js.map +1 -0
- package/dist/facade/terraform-stack.d.ts +36 -0
- package/dist/facade/terraform-stack.d.ts.map +1 -0
- package/dist/facade/terraform-stack.js +161 -0
- package/dist/facade/terraform-stack.js.map +1 -0
- package/dist/facade/terraform-variable.d.ts +32 -0
- package/dist/facade/terraform-variable.d.ts.map +1 -0
- package/dist/facade/terraform-variable.js +66 -0
- package/dist/facade/terraform-variable.js.map +1 -0
- package/dist/facade/tokenization.d.ts +4 -0
- package/dist/facade/tokenization.d.ts.map +1 -0
- package/dist/facade/tokenization.js +13 -0
- package/dist/facade/tokenization.js.map +1 -0
- package/dist/facade/util.d.ts +7 -0
- package/dist/facade/util.d.ts.map +1 -0
- package/dist/facade/util.js +55 -0
- package/dist/facade/util.js.map +1 -0
- package/dist/facade/util.spec.d.ts +2 -0
- package/dist/facade/util.spec.d.ts.map +1 -0
- package/dist/facade/util.spec.js +103 -0
- package/dist/facade/util.spec.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/index.spec.d.ts +2 -0
- package/dist/index.spec.d.ts.map +1 -0
- package/dist/index.spec.js +7 -0
- package/dist/index.spec.js.map +1 -0
- package/dist/integration.spec.d.ts +2 -0
- package/dist/integration.spec.d.ts.map +1 -0
- package/dist/integration.spec.js +345 -0
- package/dist/integration.spec.js.map +1 -0
- package/dist/testing/index.d.ts +40 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +160 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +9 -7
- package/dist/bin/tfts.d.ts +0 -3
- package/dist/bin/tfts.d.ts.map +0 -1
- package/dist/bin/tfts.js +0 -5
- package/dist/bin/tfts.js.map +0 -1
- package/dist/src/cli/config.d.ts +0 -43
- package/dist/src/cli/config.d.ts.map +0 -1
- package/dist/src/cli/config.js +0 -63
- package/dist/src/cli/config.js.map +0 -1
- package/dist/src/cli/diff.d.ts +0 -25
- package/dist/src/cli/diff.d.ts.map +0 -1
- package/dist/src/cli/diff.js +0 -108
- package/dist/src/cli/diff.js.map +0 -1
- package/dist/src/cli/get.d.ts +0 -24
- package/dist/src/cli/get.d.ts.map +0 -1
- package/dist/src/cli/get.js +0 -86
- package/dist/src/cli/get.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -2
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -157
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/synth.d.ts +0 -32
- package/dist/src/cli/synth.d.ts.map +0 -1
- package/dist/src/cli/synth.js +0 -55
- package/dist/src/cli/synth.js.map +0 -1
- package/dist/src/codegen/__tests__/fixtures.d.ts +0 -7
- package/dist/src/codegen/__tests__/fixtures.d.ts.map +0 -1
- package/dist/src/codegen/__tests__/fixtures.js +0 -202
- package/dist/src/codegen/__tests__/fixtures.js.map +0 -1
- package/dist/src/codegen/__tests__/generator.spec.d.ts.map +0 -1
- package/dist/src/codegen/__tests__/generator.spec.js +0 -382
- package/dist/src/codegen/__tests__/generator.spec.js.map +0 -1
- package/dist/src/codegen/fn-generator.d.ts +0 -22
- package/dist/src/codegen/fn-generator.d.ts.map +0 -1
- package/dist/src/codegen/fn-generator.js +0 -203
- package/dist/src/codegen/fn-generator.js.map +0 -1
- package/dist/src/codegen/generator.d.ts +0 -4
- package/dist/src/codegen/generator.d.ts.map +0 -1
- package/dist/src/codegen/generator.js +0 -479
- package/dist/src/codegen/generator.js.map +0 -1
- package/dist/src/codegen/raw-schema.d.ts +0 -38
- package/dist/src/codegen/raw-schema.d.ts.map +0 -1
- package/dist/src/codegen/raw-schema.js +0 -3
- package/dist/src/codegen/raw-schema.js.map +0 -1
- package/dist/src/codegen/schema.d.ts +0 -68
- package/dist/src/codegen/schema.d.ts.map +0 -1
- package/dist/src/codegen/schema.js +0 -71
- package/dist/src/codegen/schema.js.map +0 -1
- package/dist/src/core/backend.d.ts +0 -5
- package/dist/src/core/backend.d.ts.map +0 -1
- package/dist/src/core/backend.js +0 -2
- package/dist/src/core/backend.js.map +0 -1
- package/dist/src/core/construct.d.ts +0 -42
- package/dist/src/core/construct.d.ts.map +0 -1
- package/dist/src/core/construct.js +0 -2
- package/dist/src/core/construct.js.map +0 -1
- package/dist/src/core/datasource.d.ts +0 -8
- package/dist/src/core/datasource.d.ts.map +0 -1
- package/dist/src/core/datasource.js +0 -2
- package/dist/src/core/datasource.js.map +0 -1
- package/dist/src/core/errors.d.ts +0 -29
- package/dist/src/core/errors.d.ts.map +0 -1
- package/dist/src/core/errors.js +0 -2
- package/dist/src/core/errors.js.map +0 -1
- package/dist/src/core/local.d.ts +0 -4
- package/dist/src/core/local.d.ts.map +0 -1
- package/dist/src/core/local.js +0 -2
- package/dist/src/core/local.js.map +0 -1
- package/dist/src/core/logical-id.d.ts +0 -3
- package/dist/src/core/logical-id.d.ts.map +0 -1
- package/dist/src/core/logical-id.js +0 -48
- package/dist/src/core/logical-id.js.map +0 -1
- package/dist/src/core/output.d.ts +0 -8
- package/dist/src/core/output.d.ts.map +0 -1
- package/dist/src/core/output.js +0 -2
- package/dist/src/core/output.js.map +0 -1
- package/dist/src/core/provider.d.ts +0 -7
- package/dist/src/core/provider.d.ts.map +0 -1
- package/dist/src/core/provider.js +0 -2
- package/dist/src/core/provider.js.map +0 -1
- package/dist/src/core/resource.d.ts +0 -30
- package/dist/src/core/resource.d.ts.map +0 -1
- package/dist/src/core/resource.js +0 -2
- package/dist/src/core/resource.js.map +0 -1
- package/dist/src/core/synthesize.d.ts +0 -78
- package/dist/src/core/synthesize.d.ts.map +0 -1
- package/dist/src/core/synthesize.js +0 -293
- package/dist/src/core/synthesize.js.map +0 -1
- package/dist/src/core/synthesize.spec.d.ts.map +0 -1
- package/dist/src/core/synthesize.spec.js +0 -506
- package/dist/src/core/synthesize.spec.js.map +0 -1
- package/dist/src/core/terraform-json.d.ts +0 -36
- package/dist/src/core/terraform-json.d.ts.map +0 -1
- package/dist/src/core/terraform-json.js.map +0 -1
- package/dist/src/core/tokens.d.ts +0 -62
- package/dist/src/core/tokens.d.ts.map +0 -1
- package/dist/src/core/tokens.js +0 -133
- package/dist/src/core/tokens.js.map +0 -1
- package/dist/src/core/tokens.spec.js +0 -119
- package/dist/src/core/tokens.spec.js.map +0 -1
- package/dist/src/core/tree.d.ts +0 -6
- package/dist/src/core/tree.d.ts.map +0 -1
- package/dist/src/core/tree.js +0 -52
- package/dist/src/core/tree.js.map +0 -1
- package/dist/src/core/tree.spec.js +0 -138
- package/dist/src/core/tree.spec.js.map +0 -1
- package/dist/src/core/validate.d.ts +0 -5
- package/dist/src/core/validate.d.ts.map +0 -1
- package/dist/src/core/validate.js +0 -94
- package/dist/src/core/validate.js.map +0 -1
- package/dist/src/core/validate.spec.d.ts.map +0 -1
- package/dist/src/core/validate.spec.js +0 -69
- package/dist/src/core/validate.spec.js.map +0 -1
- package/dist/src/core/variable.d.ts +0 -14
- package/dist/src/core/variable.d.ts.map +0 -1
- package/dist/src/core/variable.js +0 -2
- package/dist/src/core/variable.js.map +0 -1
- package/dist/src/facade/app.d.ts +0 -23
- package/dist/src/facade/app.d.ts.map +0 -1
- package/dist/src/facade/app.js +0 -55
- package/dist/src/facade/app.js.map +0 -1
- package/dist/src/facade/backends/backend.d.ts +0 -7
- package/dist/src/facade/backends/backend.d.ts.map +0 -1
- package/dist/src/facade/backends/backend.js +0 -15
- package/dist/src/facade/backends/backend.js.map +0 -1
- package/dist/src/facade/backends/gcs.d.ts +0 -18
- package/dist/src/facade/backends/gcs.d.ts.map +0 -1
- package/dist/src/facade/backends/gcs.js +0 -28
- package/dist/src/facade/backends/gcs.js.map +0 -1
- package/dist/src/facade/backends/index.d.ts +0 -6
- package/dist/src/facade/backends/index.d.ts.map +0 -1
- package/dist/src/facade/backends/index.js +0 -6
- package/dist/src/facade/backends/index.js.map +0 -1
- package/dist/src/facade/backends/local.d.ts +0 -12
- package/dist/src/facade/backends/local.d.ts.map +0 -1
- package/dist/src/facade/backends/local.js +0 -16
- package/dist/src/facade/backends/local.js.map +0 -1
- package/dist/src/facade/backends/remote.d.ts +0 -22
- package/dist/src/facade/backends/remote.d.ts.map +0 -1
- package/dist/src/facade/backends/remote.js +0 -23
- package/dist/src/facade/backends/remote.js.map +0 -1
- package/dist/src/facade/backends/s3.d.ts +0 -24
- package/dist/src/facade/backends/s3.d.ts.map +0 -1
- package/dist/src/facade/backends/s3.js +0 -39
- package/dist/src/facade/backends/s3.js.map +0 -1
- package/dist/src/facade/construct.d.ts +0 -9
- package/dist/src/facade/construct.d.ts.map +0 -1
- package/dist/src/facade/construct.js +0 -32
- package/dist/src/facade/construct.js.map +0 -1
- package/dist/src/facade/datasource.d.ts +0 -19
- package/dist/src/facade/datasource.d.ts.map +0 -1
- package/dist/src/facade/datasource.js +0 -33
- package/dist/src/facade/datasource.js.map +0 -1
- package/dist/src/facade/facade.spec.d.ts +0 -2
- package/dist/src/facade/facade.spec.d.ts.map +0 -1
- package/dist/src/facade/facade.spec.js +0 -434
- package/dist/src/facade/facade.spec.js.map +0 -1
- package/dist/src/facade/local.d.ts +0 -15
- package/dist/src/facade/local.d.ts.map +0 -1
- package/dist/src/facade/local.js +0 -27
- package/dist/src/facade/local.js.map +0 -1
- package/dist/src/facade/output.d.ts +0 -18
- package/dist/src/facade/output.d.ts.map +0 -1
- package/dist/src/facade/output.js +0 -29
- package/dist/src/facade/output.js.map +0 -1
- package/dist/src/facade/provider.d.ts +0 -13
- package/dist/src/facade/provider.d.ts.map +0 -1
- package/dist/src/facade/provider.js +0 -25
- package/dist/src/facade/provider.js.map +0 -1
- package/dist/src/facade/resource.d.ts +0 -34
- package/dist/src/facade/resource.d.ts.map +0 -1
- package/dist/src/facade/resource.js +0 -58
- package/dist/src/facade/resource.js.map +0 -1
- package/dist/src/facade/stack.d.ts +0 -11
- package/dist/src/facade/stack.d.ts.map +0 -1
- package/dist/src/facade/stack.js +0 -28
- package/dist/src/facade/stack.js.map +0 -1
- package/dist/src/facade/variable.d.ts +0 -27
- package/dist/src/facade/variable.d.ts.map +0 -1
- package/dist/src/facade/variable.js +0 -45
- package/dist/src/facade/variable.js.map +0 -1
- package/dist/src/generated/fn.d.ts +0 -599
- package/dist/src/generated/fn.d.ts.map +0 -1
- package/dist/src/generated/fn.js +0 -998
- package/dist/src/generated/fn.js.map +0 -1
- package/dist/src/index.d.ts +0 -35
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -23
- package/dist/src/index.js.map +0 -1
- /package/dist/{src/codegen/__tests__ → codegen}/generator.spec.d.ts +0 -0
- /package/dist/{src/core → core}/synthesize.spec.d.ts +0 -0
- /package/dist/{src/core → core}/terraform-json.js +0 -0
- /package/dist/{src/core → core}/tokens.spec.d.ts +0 -0
- /package/dist/{src/core → core}/tree.spec.d.ts +0 -0
- /package/dist/{src/core → core}/validate.spec.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,171 +1,15 @@
|
|
|
1
1
|
# tfts
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
tfts lets you define Terraform infrastructure using TypeScript with full type safety. It generates Terraform JSON that you can apply with the standard Terraform CLI.
|
|
8
|
-
|
|
9
|
-
Key differences from CDKTF:
|
|
10
|
-
|
|
11
|
-
- **Type-safe attribute references** - Computed attributes return `TokenValue<string>` instead of `string`, preventing invalid operations like `.toUpperCase()` at compile time
|
|
12
|
-
- **Lightweight** - No JSII, no complex runtime, just TypeScript
|
|
13
|
-
|
|
14
|
-
## Getting Started
|
|
15
|
-
|
|
16
|
-
### Prerequisites
|
|
17
|
-
|
|
18
|
-
- [Bun](https://bun.sh) or Node.js
|
|
19
|
-
- [Terraform CLI](https://developer.hashicorp.com/terraform/downloads)
|
|
20
|
-
|
|
21
|
-
### Installation
|
|
3
|
+
To install dependencies:
|
|
22
4
|
|
|
23
5
|
```bash
|
|
24
|
-
bun
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Project Setup
|
|
28
|
-
|
|
29
|
-
Create `cdktf.json`:
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"language": "typescript",
|
|
34
|
-
"app": "bun main.ts",
|
|
35
|
-
"output": "cdktf.out",
|
|
36
|
-
"codeMakerOutput": ".gen",
|
|
37
|
-
"terraformProviders": [
|
|
38
|
-
{
|
|
39
|
-
"name": "google",
|
|
40
|
-
"source": "hashicorp/google",
|
|
41
|
-
"version": "5.0.0"
|
|
42
|
-
}
|
|
43
|
-
]
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Generate provider bindings:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
bunx tfts get
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Write Infrastructure
|
|
54
|
-
|
|
55
|
-
Create `main.ts`:
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
import { App, TerraformStack, TerraformOutput } from "tfts";
|
|
59
|
-
import { GoogleProvider, GoogleComputeNetwork } from "./.gen/providers/google/index.js";
|
|
60
|
-
|
|
61
|
-
const app = new App();
|
|
62
|
-
const stack = new TerraformStack(app, "my-stack");
|
|
63
|
-
|
|
64
|
-
new GoogleProvider(stack, "google", {
|
|
65
|
-
project: "my-project",
|
|
66
|
-
region: "us-central1",
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const network = new GoogleComputeNetwork(stack, "network", {
|
|
70
|
-
name: "my-network",
|
|
71
|
-
autoCreateSubnetworks: true,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
new TerraformOutput(stack, "network_id", {
|
|
75
|
-
value: network.id,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
app.synth();
|
|
6
|
+
bun install
|
|
79
7
|
```
|
|
80
8
|
|
|
81
|
-
|
|
9
|
+
To run:
|
|
82
10
|
|
|
83
11
|
```bash
|
|
84
|
-
|
|
85
|
-
bun main.ts
|
|
86
|
-
|
|
87
|
-
# Apply with Terraform
|
|
88
|
-
cd cdktf.out/stacks/my-stack
|
|
89
|
-
terraform init
|
|
90
|
-
terraform apply
|
|
12
|
+
bun run index.ts
|
|
91
13
|
```
|
|
92
14
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
### Type-Safe Attributes
|
|
96
|
-
|
|
97
|
-
The main difference: computed attributes return `TokenValue<string>` instead of `string`.
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
// CDKTF - compiles but broken at runtime
|
|
101
|
-
network.id.toUpperCase();
|
|
102
|
-
|
|
103
|
-
// tfts - compile error (TokenValue<string> has no .toUpperCase())
|
|
104
|
-
network.id.toUpperCase(); // Error!
|
|
105
|
-
|
|
106
|
-
// tfts - template literals work via toString()
|
|
107
|
-
`prefix-${network.id}`;
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Custom Constructs
|
|
111
|
-
|
|
112
|
-
If your CDKTF code has custom constructs with string config properties:
|
|
113
|
-
|
|
114
|
-
```typescript
|
|
115
|
-
// CDKTF
|
|
116
|
-
interface MyDatabaseConfig {
|
|
117
|
-
name: string;
|
|
118
|
-
vpcId: string; // Often passed a token like vpc.id
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
class MyDatabase extends Construct {
|
|
122
|
-
constructor(scope: Construct, id: string, config: MyDatabaseConfig) {
|
|
123
|
-
// ...
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
new MyDatabase(stack, "db", {
|
|
128
|
-
name: "mydb",
|
|
129
|
-
vpcId: vpc.id, // Works in CDKTF because vpc.id is typed as string
|
|
130
|
-
});
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
In tfts, update config properties that accept tokens to use `TfString`:
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
import { TfString } from "tfts";
|
|
137
|
-
|
|
138
|
-
// tfts
|
|
139
|
-
interface MyDatabaseConfig {
|
|
140
|
-
name: string; // Literal only - keep as string
|
|
141
|
-
vpcId: TfString; // Accepts tokens - use TfString
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Import Changes
|
|
146
|
-
|
|
147
|
-
```typescript
|
|
148
|
-
// CDKTF
|
|
149
|
-
import { App, TerraformStack } from "cdktf";
|
|
150
|
-
|
|
151
|
-
// tfts
|
|
152
|
-
import { App, TerraformStack } from "tfts";
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Supported Constructs
|
|
156
|
-
|
|
157
|
-
| Construct | Status |
|
|
158
|
-
|-----------|--------|
|
|
159
|
-
| TerraformResource | Supported |
|
|
160
|
-
| TerraformDataSource | Supported |
|
|
161
|
-
| TerraformProvider | Supported |
|
|
162
|
-
| TerraformVariable | Supported |
|
|
163
|
-
| TerraformOutput | Supported |
|
|
164
|
-
| TerraformLocal | Supported |
|
|
165
|
-
| Backends (S3, GCS, Remote, Local) | Supported |
|
|
166
|
-
| TerraformModule | Not yet |
|
|
167
|
-
| TerraformIterator | Not yet |
|
|
168
|
-
|
|
169
|
-
## License
|
|
170
|
-
|
|
171
|
-
MIT
|
|
15
|
+
This project was created using `bun init` in bun v1.2.19. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const TftsConfigSchema: z.ZodObject<{
|
|
3
|
+
language: z.ZodDefault<z.ZodEnum<{
|
|
4
|
+
typescript: "typescript";
|
|
5
|
+
}>>;
|
|
6
|
+
app: z.ZodString;
|
|
7
|
+
output: z.ZodDefault<z.ZodString>;
|
|
8
|
+
codeMakerOutput: z.ZodOptional<z.ZodString>;
|
|
9
|
+
projectId: z.ZodOptional<z.ZodString>;
|
|
10
|
+
sendCrashReports: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>, z.ZodTransform<boolean, string | boolean>>>>;
|
|
11
|
+
terraformProviders: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
|
+
terraformModules: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
export type TftsConfig = z.infer<typeof TftsConfigSchema>;
|
|
16
|
+
export declare function readConfig(configPath: string): TftsConfig;
|
|
17
|
+
export declare function findConfig(cwd: string): string | null;
|
|
18
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;iBAU3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAMzD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const coercedBoolean = z
|
|
4
|
+
.union([z.boolean(), z.string()])
|
|
5
|
+
.transform((val) => (typeof val === "boolean" ? val : val === "true"))
|
|
6
|
+
.optional()
|
|
7
|
+
.default(false);
|
|
8
|
+
export const TftsConfigSchema = z.object({
|
|
9
|
+
language: z.enum(["typescript"]).default("typescript"),
|
|
10
|
+
app: z.string(),
|
|
11
|
+
output: z.string().default("cdktf.out"),
|
|
12
|
+
codeMakerOutput: z.string().optional(),
|
|
13
|
+
projectId: z.string().optional(),
|
|
14
|
+
sendCrashReports: coercedBoolean,
|
|
15
|
+
terraformProviders: z.array(z.string()).optional(),
|
|
16
|
+
terraformModules: z.array(z.string()).optional(),
|
|
17
|
+
context: z.record(z.string(), z.unknown()).optional(),
|
|
18
|
+
});
|
|
19
|
+
export function readConfig(configPath) {
|
|
20
|
+
if (!existsSync(configPath)) {
|
|
21
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
22
|
+
}
|
|
23
|
+
const content = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
24
|
+
return TftsConfigSchema.parse(content);
|
|
25
|
+
}
|
|
26
|
+
export function findConfig(cwd) {
|
|
27
|
+
const configNames = ["cdktf.json", "tfts.json"];
|
|
28
|
+
for (const name of configNames) {
|
|
29
|
+
const configPath = `${cwd}/${name}`;
|
|
30
|
+
if (existsSync(configPath)) {
|
|
31
|
+
return configPath;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,CAAC;KACrB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAChC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;KACrE,QAAQ,EAAE;KACV,OAAO,CAAC,KAAK,CAAC,CAAC;AAElB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACtD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACvC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,gBAAgB,EAAE,cAAc;IAChC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/cli/get.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,wBAAsB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjE"}
|
package/dist/cli/get.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { cleanupWorkDir, fetchProviderSchema, generateProviderBindings, parseProviderConstraint, } from "../codegen/index.js";
|
|
5
|
+
import { findConfig, readConfig } from "./config.js";
|
|
6
|
+
export async function get(options = {}) {
|
|
7
|
+
const cwd = options.cwd ?? process.cwd();
|
|
8
|
+
const configPath = findConfig(cwd);
|
|
9
|
+
const config = configPath !== null ? readConfig(configPath) : null;
|
|
10
|
+
const providers = options.providers ?? config?.terraformProviders ?? [];
|
|
11
|
+
const modules = options.modules ?? config?.terraformModules ?? [];
|
|
12
|
+
const output = options.output ?? config?.codeMakerOutput ?? ".gen";
|
|
13
|
+
if (providers.length === 0 && modules.length === 0) {
|
|
14
|
+
console.log("No providers or modules specified. Add them to cdktf.json or use --providers/--modules flags.");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log("Generating provider bindings...");
|
|
18
|
+
console.log(` Output: ${output}`);
|
|
19
|
+
for (const provider of providers) {
|
|
20
|
+
console.log(` Generating: ${provider}`);
|
|
21
|
+
await generateProvider(provider, `${cwd}/${output}`);
|
|
22
|
+
}
|
|
23
|
+
for (const module of modules) {
|
|
24
|
+
console.log(` Generating: ${module}`);
|
|
25
|
+
await generateModule(module, `${cwd}/${output}`);
|
|
26
|
+
}
|
|
27
|
+
console.log("\nGeneration complete!");
|
|
28
|
+
}
|
|
29
|
+
async function generateProvider(providerSpec, outputDir) {
|
|
30
|
+
const constraint = parseProviderConstraint(providerSpec);
|
|
31
|
+
const workDir = join(tmpdir(), `tfts-schema-${constraint.name}-${Date.now()}`);
|
|
32
|
+
try {
|
|
33
|
+
console.log(` Fetching schema for ${constraint.fqn}@${constraint.version ?? "latest"}...`);
|
|
34
|
+
const { schema, resolvedVersion } = fetchProviderSchema(constraint, workDir);
|
|
35
|
+
const constraintWithVersion = {
|
|
36
|
+
...constraint,
|
|
37
|
+
version: resolvedVersion ?? constraint.version,
|
|
38
|
+
};
|
|
39
|
+
const result = generateProviderBindings(constraintWithVersion, schema);
|
|
40
|
+
if (result.isErr()) {
|
|
41
|
+
console.error(` Error: ${result.error.message}`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
for (const file of result.value) {
|
|
45
|
+
const filePath = join(outputDir, file.path);
|
|
46
|
+
const dir = filePath.substring(0, filePath.lastIndexOf("/"));
|
|
47
|
+
await mkdir(dir, { recursive: true });
|
|
48
|
+
await writeFile(filePath, file.content);
|
|
49
|
+
}
|
|
50
|
+
console.log(` Generated ${result.value.length} files`);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
cleanupWorkDir(workDir);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function parseModuleSpec(spec) {
|
|
57
|
+
const atIndex = spec.indexOf("@");
|
|
58
|
+
const fullName = atIndex === -1 ? spec : spec.slice(0, atIndex);
|
|
59
|
+
const version = atIndex === -1 ? "latest" : spec.slice(atIndex + 1);
|
|
60
|
+
const parts = fullName.split("/");
|
|
61
|
+
if (parts.length < 3) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
namespace: parts[0] ?? "",
|
|
66
|
+
name: parts[1] ?? "",
|
|
67
|
+
provider: parts[2] ?? "",
|
|
68
|
+
version,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function generateModule(moduleSpec, outputDir) {
|
|
72
|
+
const parsed = parseModuleSpec(moduleSpec);
|
|
73
|
+
if (!parsed) {
|
|
74
|
+
console.log(` Skipping ${moduleSpec}: invalid module format`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const { namespace, name, provider, version } = parsed;
|
|
78
|
+
const moduleDir = `${outputDir}/modules/${namespace}/${name}/${provider}`;
|
|
79
|
+
await mkdir(moduleDir, { recursive: true });
|
|
80
|
+
console.log(` Generating module ${namespace}/${name}/${provider}@${version}...`);
|
|
81
|
+
const className = capitalize(name);
|
|
82
|
+
const content = `import { TerraformModule } from "../../../facade/terraform-module.js";
|
|
83
|
+
import type { Construct } from "../../../facade/construct.js";
|
|
84
|
+
|
|
85
|
+
export type ${className}ModuleConfig = {
|
|
86
|
+
readonly source?: string;
|
|
87
|
+
readonly version?: string;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export class ${className}Module extends TerraformModule {
|
|
91
|
+
constructor(scope: Construct, id: string, config: ${className}ModuleConfig = {}) {
|
|
92
|
+
super(scope, id, {
|
|
93
|
+
source: "${namespace}/${name}/${provider}",
|
|
94
|
+
version: config.version ?? "${version}",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
`;
|
|
99
|
+
await writeFile(`${moduleDir}/index.ts`, content);
|
|
100
|
+
}
|
|
101
|
+
function capitalize(str) {
|
|
102
|
+
return str
|
|
103
|
+
.split("-")
|
|
104
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
105
|
+
.join("");
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/cli/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { get } from "./get.js";
|
|
2
|
+
import { synth } from "./synth.js";
|
|
3
|
+
const cliArgs = process.argv.slice(2);
|
|
4
|
+
const command = cliArgs[0];
|
|
5
|
+
function parseFlags(flagArgs) {
|
|
6
|
+
const flags = {};
|
|
7
|
+
for (let i = 0; i < flagArgs.length; i++) {
|
|
8
|
+
const arg = flagArgs[i];
|
|
9
|
+
if (arg === undefined)
|
|
10
|
+
continue;
|
|
11
|
+
if (arg.startsWith("--")) {
|
|
12
|
+
const key = arg.slice(2);
|
|
13
|
+
const next = flagArgs[i + 1];
|
|
14
|
+
if (next !== undefined && !next.startsWith("--")) {
|
|
15
|
+
flags[key] = next;
|
|
16
|
+
i++;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
flags[key] = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return flags;
|
|
24
|
+
}
|
|
25
|
+
function getStringFlag(flags, key) {
|
|
26
|
+
const value = flags[key];
|
|
27
|
+
return typeof value === "string" ? value : undefined;
|
|
28
|
+
}
|
|
29
|
+
async function main() {
|
|
30
|
+
const flags = parseFlags(cliArgs.slice(1));
|
|
31
|
+
switch (command) {
|
|
32
|
+
case "synth":
|
|
33
|
+
case "synthesize":
|
|
34
|
+
await synth({
|
|
35
|
+
app: getStringFlag(flags, "app"),
|
|
36
|
+
output: getStringFlag(flags, "output"),
|
|
37
|
+
});
|
|
38
|
+
break;
|
|
39
|
+
case "get": {
|
|
40
|
+
const providersStr = getStringFlag(flags, "providers");
|
|
41
|
+
const modulesStr = getStringFlag(flags, "modules");
|
|
42
|
+
await get({
|
|
43
|
+
output: getStringFlag(flags, "output"),
|
|
44
|
+
providers: providersStr !== undefined ? providersStr.split(",") : undefined,
|
|
45
|
+
modules: modulesStr !== undefined ? modulesStr.split(",") : undefined,
|
|
46
|
+
});
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case "help":
|
|
50
|
+
case "--help":
|
|
51
|
+
case "-h":
|
|
52
|
+
case undefined:
|
|
53
|
+
printHelp();
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
console.error(`Unknown command: ${String(command)}`);
|
|
57
|
+
printHelp();
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function printHelp() {
|
|
62
|
+
console.log(`
|
|
63
|
+
tfts - Terraform CDK TypeScript
|
|
64
|
+
|
|
65
|
+
Commands:
|
|
66
|
+
synth, synthesize Synthesize Terraform configuration
|
|
67
|
+
get Generate provider/module bindings
|
|
68
|
+
|
|
69
|
+
Options:
|
|
70
|
+
--app <command> Command to run the app (synth)
|
|
71
|
+
--output <dir> Output directory (synth: cdktf.out, get: .gen)
|
|
72
|
+
--providers <list> Comma-separated provider list (get)
|
|
73
|
+
--modules <list> Comma-separated module list (get)
|
|
74
|
+
--help, -h Show this help
|
|
75
|
+
|
|
76
|
+
Examples:
|
|
77
|
+
tfts synth --app "bun run main.ts"
|
|
78
|
+
tfts get --providers "hashicorp/aws@~>5.0"
|
|
79
|
+
`);
|
|
80
|
+
}
|
|
81
|
+
main().catch((err) => {
|
|
82
|
+
console.error("Error:", err.message);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synth.d.ts","sourceRoot":"","sources":["../../src/cli/synth.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCrE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { findConfig, readConfig } from "./config.js";
|
|
3
|
+
export async function synth(options = {}) {
|
|
4
|
+
const cwd = options.cwd ?? process.cwd();
|
|
5
|
+
const configPath = findConfig(cwd);
|
|
6
|
+
if (configPath === null && options.app === undefined) {
|
|
7
|
+
throw new Error("No config file found and no app specified. Create cdktf.json or use --app flag.");
|
|
8
|
+
}
|
|
9
|
+
const config = configPath !== null ? readConfig(configPath) : null;
|
|
10
|
+
const appCommand = options.app ?? config?.app;
|
|
11
|
+
const outputDir = options.output ?? config?.output ?? "cdktf.out";
|
|
12
|
+
if (appCommand === undefined) {
|
|
13
|
+
throw new Error("No app command specified");
|
|
14
|
+
}
|
|
15
|
+
console.log(`Synthesizing Terraform configuration...`);
|
|
16
|
+
console.log(` App: ${appCommand}`);
|
|
17
|
+
console.log(` Output: ${outputDir}`);
|
|
18
|
+
const env = { ...process.env, CDKTF_OUTDIR: `${cwd}/${outputDir}` };
|
|
19
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
20
|
+
const proc = spawn("sh", ["-c", appCommand], {
|
|
21
|
+
cwd,
|
|
22
|
+
env,
|
|
23
|
+
stdio: "inherit",
|
|
24
|
+
});
|
|
25
|
+
proc.on("close", (code) => {
|
|
26
|
+
resolve(code ?? 1);
|
|
27
|
+
});
|
|
28
|
+
proc.on("error", reject);
|
|
29
|
+
});
|
|
30
|
+
if (exitCode !== 0) {
|
|
31
|
+
throw new Error(`App command failed with exit code ${String(exitCode)}`);
|
|
32
|
+
}
|
|
33
|
+
console.log(`\nSynthesis complete. Output written to ${outputDir}/`);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=synth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/cli/synth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQrD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAwB,EAAE;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,EAAE,GAAG,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,MAAM,IAAI,WAAW,CAAC;IAElE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,GAAG,IAAI,SAAS,EAAE,EAAE,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YAC3C,GAAG;YACH,GAAG;YACH,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2CAA2C,SAAS,GAAG,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ProviderConstraint, type TerraformSchema } from "./schema.js";
|
|
2
|
+
export type FetchSchemaResult = {
|
|
3
|
+
readonly schema: TerraformSchema;
|
|
4
|
+
readonly resolvedVersion: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
export declare function parseProviderVersionFromLockFile(lockFilePath: string, providerFqn: string): string | undefined;
|
|
7
|
+
export declare function fetchProviderSchema(constraint: ProviderConstraint, workDir: string): FetchSchemaResult;
|
|
8
|
+
export declare function cleanupWorkDir(workDir: string): void;
|
|
9
|
+
//# sourceMappingURL=fetch-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-schema.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAwB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,MAAM,GACd,iBAAiB,CAwCnB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { parseTerraformSchema } from "./schema.js";
|
|
4
|
+
export function parseProviderVersionFromLockFile(lockFilePath, providerFqn) {
|
|
5
|
+
const content = readFileSync(lockFilePath, "utf-8");
|
|
6
|
+
// HCL format: provider "registry.terraform.io/hashicorp/google" { version = "1.2.3" ... }
|
|
7
|
+
const escapedFqn = providerFqn.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
8
|
+
const providerBlockRegex = new RegExp(`provider\\s+"${escapedFqn}"\\s*\\{([^}]+)\\}`, "s");
|
|
9
|
+
const blockMatch = content.match(providerBlockRegex);
|
|
10
|
+
if (blockMatch === null) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const versionMatch = blockMatch[1]?.match(/version\s*=\s*"([^"]+)"/);
|
|
14
|
+
return versionMatch?.[1];
|
|
15
|
+
}
|
|
16
|
+
export function fetchProviderSchema(constraint, workDir) {
|
|
17
|
+
const providerConfig = {
|
|
18
|
+
source: constraint.fqn,
|
|
19
|
+
};
|
|
20
|
+
if (constraint.version !== undefined) {
|
|
21
|
+
providerConfig.version = constraint.version;
|
|
22
|
+
}
|
|
23
|
+
const tfConfig = {
|
|
24
|
+
terraform: {
|
|
25
|
+
required_providers: {
|
|
26
|
+
[constraint.name]: providerConfig,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
mkdirSync(workDir, { recursive: true });
|
|
31
|
+
writeFileSync(`${workDir}/main.tf.json`, JSON.stringify(tfConfig, null, 2));
|
|
32
|
+
execSync("terraform init -no-color", {
|
|
33
|
+
cwd: workDir,
|
|
34
|
+
stdio: "pipe",
|
|
35
|
+
maxBuffer: 100 * 1024 * 1024,
|
|
36
|
+
});
|
|
37
|
+
const schemaOutput = execSync("terraform providers schema -json", {
|
|
38
|
+
cwd: workDir,
|
|
39
|
+
stdio: "pipe",
|
|
40
|
+
maxBuffer: 100 * 1024 * 1024,
|
|
41
|
+
});
|
|
42
|
+
const rawSchema = JSON.parse(schemaOutput.toString());
|
|
43
|
+
const schema = parseTerraformSchema(rawSchema);
|
|
44
|
+
const lockFilePath = `${workDir}/.terraform.lock.hcl`;
|
|
45
|
+
const resolvedVersion = parseProviderVersionFromLockFile(lockFilePath, `registry.terraform.io/${constraint.fqn}`);
|
|
46
|
+
return { schema, resolvedVersion };
|
|
47
|
+
}
|
|
48
|
+
export function cleanupWorkDir(workDir) {
|
|
49
|
+
rmSync(workDir, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=fetch-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-schema.js","sourceRoot":"","sources":["../../src/codegen/fetch-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAA2B,oBAAoB,EAAwB,MAAM,aAAa,CAAC;AAOlG,MAAM,UAAU,gCAAgC,CAC9C,YAAoB,EACpB,WAAmB;IAEnB,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEpD,0FAA0F;IAC1F,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,gBAAgB,UAAU,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACrE,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAA8B,EAC9B,OAAe;IAEf,MAAM,cAAc,GAAyC;QAC3D,MAAM,EAAE,UAAU,CAAC,GAAG;KACvB,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE;YACT,kBAAkB,EAAE;gBAClB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,cAAc;aAClC;SACF;KACF,CAAC;IAEF,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,aAAa,CAAC,GAAG,OAAO,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5E,QAAQ,CAAC,0BAA0B,EAAE;QACnC,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;KAC7B,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,QAAQ,CAAC,kCAAkC,EAAE;QAChE,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;KAC7B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,GAAG,OAAO,sBAAsB,CAAC;IACtD,MAAM,eAAe,GAAG,gCAAgC,CACtD,YAAY,EACZ,yBAAyB,UAAU,CAAC,GAAG,EAAE,CAC1C,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-schema.spec.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-schema.spec.ts"],"names":[],"mappings":""}
|