cdktn 0.23.2 → 0.23.4
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/.jsii +468 -251
- package/README.md +3 -3
- package/lib/annotations.js +1 -1
- package/lib/app.js +1 -1
- package/lib/aspect.js +1 -1
- package/lib/backends/azurerm-backend.js +2 -2
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.js +2 -2
- package/lib/backends/cos-backend.js +2 -2
- package/lib/backends/gcs-backend.js +2 -2
- package/lib/backends/http-backend.js +2 -2
- package/lib/backends/local-backend.js +2 -2
- package/lib/backends/oss-backend.js +2 -2
- package/lib/backends/pg-backend.js +2 -2
- package/lib/backends/remote-backend.js +4 -4
- package/lib/backends/s3-backend.d.ts +11 -1
- package/lib/backends/s3-backend.js +11 -4
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.js +25 -25
- package/lib/errors.d.ts +1 -2
- package/lib/errors.js +11 -8
- package/lib/features.d.ts +9 -0
- package/lib/features.js +11 -2
- package/lib/functions/function-availability.generated.d.ts +16 -0
- package/lib/functions/function-availability.generated.js +21 -0
- package/lib/functions/helpers.js +3 -1
- package/lib/functions/terraform-functions.generated.d.ts +40 -2
- package/lib/functions/terraform-functions.generated.js +57 -5
- package/lib/functions/usage-registry.d.ts +6 -0
- package/lib/functions/usage-registry.js +34 -0
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.js +4 -5
- package/lib/resource.js +1 -1
- package/lib/synthesize/synthesizer.js +8 -5
- package/lib/terraform-asset.js +1 -1
- package/lib/terraform-backend.js +1 -1
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.js +1 -1
- package/lib/terraform-dynamic-block.js +2 -2
- package/lib/terraform-dynamic-expression.js +2 -2
- package/lib/terraform-element.js +1 -1
- package/lib/terraform-functions.js +1 -1
- package/lib/terraform-hcl-module.js +1 -1
- package/lib/terraform-iterator.js +5 -5
- package/lib/terraform-local.js +1 -1
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.js +1 -1
- package/lib/terraform-provider.js +1 -1
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.js +1 -1
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.js +1 -1
- package/lib/terraform-stack.js +6 -2
- package/lib/terraform-variable.js +2 -2
- package/lib/testing/index.js +8 -9
- package/lib/testing/matchers.js +1 -1
- package/lib/tokens/lazy.js +4 -4
- package/lib/tokens/private/intrinsic.d.ts +0 -5
- package/lib/tokens/private/intrinsic.js +2 -9
- package/lib/tokens/private/stack-trace.d.ts +6 -0
- package/lib/tokens/private/stack-trace.js +14 -1
- package/lib/tokens/resolvable.js +4 -4
- package/lib/tokens/string-fragments.js +1 -1
- package/lib/tokens/token.js +2 -2
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/upgrade-id-aspect.js +1 -1
- package/lib/validations/index.d.ts +3 -0
- package/lib/validations/index.js +4 -1
- package/lib/validations/target-versions.d.ts +71 -0
- package/lib/validations/target-versions.js +132 -0
- package/lib/validations/validate-binary-version.d.ts +10 -0
- package/lib/validations/validate-binary-version.js +11 -1
- package/lib/validations/validate-function-version-support.d.ts +21 -0
- package/lib/validations/validate-function-version-support.js +53 -0
- package/lib/validations/validate-terraform-feature-version.d.ts +34 -0
- package/lib/validations/validate-terraform-feature-version.js +34 -0
- package/node_modules/{call-bind-apply-helpers → safe-stable-stringify}/LICENSE +2 -2
- package/node_modules/safe-stable-stringify/esm/package.json +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.d.ts +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.js +6 -0
- package/node_modules/safe-stable-stringify/index.d.ts +22 -0
- package/node_modules/safe-stable-stringify/index.js +625 -0
- package/node_modules/safe-stable-stringify/package.json +65 -0
- package/node_modules/safe-stable-stringify/readme.md +179 -0
- package/package.json +11 -12
- package/scripts/pack.mjs +168 -0
- package/node_modules/call-bind/.eslintignore +0 -1
- package/node_modules/call-bind/.eslintrc +0 -16
- package/node_modules/call-bind/.github/FUNDING.yml +0 -12
- package/node_modules/call-bind/.nycrc +0 -9
- package/node_modules/call-bind/CHANGELOG.md +0 -106
- package/node_modules/call-bind/LICENSE +0 -21
- package/node_modules/call-bind/README.md +0 -64
- package/node_modules/call-bind/callBound.js +0 -15
- package/node_modules/call-bind/index.js +0 -24
- package/node_modules/call-bind/package.json +0 -93
- package/node_modules/call-bind/test/callBound.js +0 -54
- package/node_modules/call-bind/test/index.js +0 -74
- package/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
- package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
- package/node_modules/call-bind-apply-helpers/.nycrc +0 -9
- package/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
- package/node_modules/call-bind-apply-helpers/README.md +0 -62
- package/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
- package/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
- package/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
- package/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
- package/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
- package/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
- package/node_modules/call-bind-apply-helpers/index.js +0 -15
- package/node_modules/call-bind-apply-helpers/package.json +0 -85
- package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
- package/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
- package/node_modules/call-bind-apply-helpers/test/index.js +0 -63
- package/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
- package/node_modules/call-bound/.eslintrc +0 -13
- package/node_modules/call-bound/.github/FUNDING.yml +0 -12
- package/node_modules/call-bound/.nycrc +0 -9
- package/node_modules/call-bound/CHANGELOG.md +0 -42
- package/node_modules/call-bound/LICENSE +0 -21
- package/node_modules/call-bound/README.md +0 -53
- package/node_modules/call-bound/index.d.ts +0 -94
- package/node_modules/call-bound/index.js +0 -19
- package/node_modules/call-bound/package.json +0 -99
- package/node_modules/call-bound/test/index.js +0 -61
- package/node_modules/call-bound/tsconfig.json +0 -10
- package/node_modules/define-data-property/.eslintrc +0 -24
- package/node_modules/define-data-property/.github/FUNDING.yml +0 -12
- package/node_modules/define-data-property/.nycrc +0 -13
- package/node_modules/define-data-property/CHANGELOG.md +0 -70
- package/node_modules/define-data-property/LICENSE +0 -21
- package/node_modules/define-data-property/README.md +0 -67
- package/node_modules/define-data-property/index.d.ts +0 -12
- package/node_modules/define-data-property/index.js +0 -56
- package/node_modules/define-data-property/package.json +0 -106
- package/node_modules/define-data-property/test/index.js +0 -392
- package/node_modules/define-data-property/tsconfig.json +0 -59
- package/node_modules/dunder-proto/.eslintrc +0 -5
- package/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
- package/node_modules/dunder-proto/.nycrc +0 -13
- package/node_modules/dunder-proto/CHANGELOG.md +0 -24
- package/node_modules/dunder-proto/LICENSE +0 -21
- package/node_modules/dunder-proto/README.md +0 -54
- package/node_modules/dunder-proto/get.d.ts +0 -5
- package/node_modules/dunder-proto/get.js +0 -30
- package/node_modules/dunder-proto/package.json +0 -76
- package/node_modules/dunder-proto/set.d.ts +0 -5
- package/node_modules/dunder-proto/set.js +0 -35
- package/node_modules/dunder-proto/test/get.js +0 -34
- package/node_modules/dunder-proto/test/index.js +0 -4
- package/node_modules/dunder-proto/test/set.js +0 -50
- package/node_modules/dunder-proto/tsconfig.json +0 -9
- package/node_modules/es-define-property/.eslintrc +0 -13
- package/node_modules/es-define-property/.github/FUNDING.yml +0 -12
- package/node_modules/es-define-property/.nycrc +0 -9
- package/node_modules/es-define-property/CHANGELOG.md +0 -29
- package/node_modules/es-define-property/LICENSE +0 -21
- package/node_modules/es-define-property/README.md +0 -49
- package/node_modules/es-define-property/index.d.ts +0 -3
- package/node_modules/es-define-property/index.js +0 -14
- package/node_modules/es-define-property/package.json +0 -81
- package/node_modules/es-define-property/test/index.js +0 -56
- package/node_modules/es-define-property/tsconfig.json +0 -10
- package/node_modules/es-errors/.eslintrc +0 -5
- package/node_modules/es-errors/.github/FUNDING.yml +0 -12
- package/node_modules/es-errors/CHANGELOG.md +0 -40
- package/node_modules/es-errors/LICENSE +0 -21
- package/node_modules/es-errors/README.md +0 -55
- package/node_modules/es-errors/eval.d.ts +0 -3
- package/node_modules/es-errors/eval.js +0 -4
- package/node_modules/es-errors/index.d.ts +0 -3
- package/node_modules/es-errors/index.js +0 -4
- package/node_modules/es-errors/package.json +0 -80
- package/node_modules/es-errors/range.d.ts +0 -3
- package/node_modules/es-errors/range.js +0 -4
- package/node_modules/es-errors/ref.d.ts +0 -3
- package/node_modules/es-errors/ref.js +0 -4
- package/node_modules/es-errors/syntax.d.ts +0 -3
- package/node_modules/es-errors/syntax.js +0 -4
- package/node_modules/es-errors/test/index.js +0 -19
- package/node_modules/es-errors/tsconfig.json +0 -49
- package/node_modules/es-errors/type.d.ts +0 -3
- package/node_modules/es-errors/type.js +0 -4
- package/node_modules/es-errors/uri.d.ts +0 -3
- package/node_modules/es-errors/uri.js +0 -4
- package/node_modules/es-object-atoms/.eslintrc +0 -16
- package/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
- package/node_modules/es-object-atoms/CHANGELOG.md +0 -37
- package/node_modules/es-object-atoms/LICENSE +0 -21
- package/node_modules/es-object-atoms/README.md +0 -63
- package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
- package/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
- package/node_modules/es-object-atoms/ToObject.d.ts +0 -7
- package/node_modules/es-object-atoms/ToObject.js +0 -10
- package/node_modules/es-object-atoms/index.d.ts +0 -3
- package/node_modules/es-object-atoms/index.js +0 -4
- package/node_modules/es-object-atoms/isObject.d.ts +0 -3
- package/node_modules/es-object-atoms/isObject.js +0 -6
- package/node_modules/es-object-atoms/package.json +0 -80
- package/node_modules/es-object-atoms/test/index.js +0 -38
- package/node_modules/es-object-atoms/tsconfig.json +0 -6
- package/node_modules/function-bind/.eslintrc +0 -21
- package/node_modules/function-bind/.github/FUNDING.yml +0 -12
- package/node_modules/function-bind/.github/SECURITY.md +0 -3
- package/node_modules/function-bind/.nycrc +0 -13
- package/node_modules/function-bind/CHANGELOG.md +0 -136
- package/node_modules/function-bind/LICENSE +0 -20
- package/node_modules/function-bind/README.md +0 -46
- package/node_modules/function-bind/implementation.js +0 -84
- package/node_modules/function-bind/index.js +0 -5
- package/node_modules/function-bind/package.json +0 -87
- package/node_modules/function-bind/test/.eslintrc +0 -9
- package/node_modules/function-bind/test/index.js +0 -252
- package/node_modules/get-intrinsic/.eslintrc +0 -42
- package/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
- package/node_modules/get-intrinsic/.nycrc +0 -9
- package/node_modules/get-intrinsic/CHANGELOG.md +0 -186
- package/node_modules/get-intrinsic/LICENSE +0 -21
- package/node_modules/get-intrinsic/README.md +0 -71
- package/node_modules/get-intrinsic/index.js +0 -378
- package/node_modules/get-intrinsic/package.json +0 -97
- package/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
- package/node_modules/get-proto/.eslintrc +0 -10
- package/node_modules/get-proto/.github/FUNDING.yml +0 -12
- package/node_modules/get-proto/.nycrc +0 -9
- package/node_modules/get-proto/CHANGELOG.md +0 -21
- package/node_modules/get-proto/LICENSE +0 -21
- package/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
- package/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
- package/node_modules/get-proto/README.md +0 -50
- package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
- package/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
- package/node_modules/get-proto/index.d.ts +0 -5
- package/node_modules/get-proto/index.js +0 -27
- package/node_modules/get-proto/package.json +0 -81
- package/node_modules/get-proto/test/index.js +0 -68
- package/node_modules/get-proto/tsconfig.json +0 -9
- package/node_modules/gopd/.eslintrc +0 -16
- package/node_modules/gopd/.github/FUNDING.yml +0 -12
- package/node_modules/gopd/CHANGELOG.md +0 -45
- package/node_modules/gopd/LICENSE +0 -21
- package/node_modules/gopd/README.md +0 -40
- package/node_modules/gopd/gOPD.d.ts +0 -1
- package/node_modules/gopd/gOPD.js +0 -4
- package/node_modules/gopd/index.d.ts +0 -5
- package/node_modules/gopd/index.js +0 -15
- package/node_modules/gopd/package.json +0 -77
- package/node_modules/gopd/test/index.js +0 -36
- package/node_modules/gopd/tsconfig.json +0 -9
- package/node_modules/has-property-descriptors/.eslintrc +0 -13
- package/node_modules/has-property-descriptors/.github/FUNDING.yml +0 -12
- package/node_modules/has-property-descriptors/.nycrc +0 -9
- package/node_modules/has-property-descriptors/CHANGELOG.md +0 -35
- package/node_modules/has-property-descriptors/LICENSE +0 -21
- package/node_modules/has-property-descriptors/README.md +0 -43
- package/node_modules/has-property-descriptors/index.js +0 -22
- package/node_modules/has-property-descriptors/package.json +0 -77
- package/node_modules/has-property-descriptors/test/index.js +0 -57
- package/node_modules/has-symbols/.eslintrc +0 -11
- package/node_modules/has-symbols/.github/FUNDING.yml +0 -12
- package/node_modules/has-symbols/.nycrc +0 -9
- package/node_modules/has-symbols/CHANGELOG.md +0 -91
- package/node_modules/has-symbols/LICENSE +0 -21
- package/node_modules/has-symbols/README.md +0 -46
- package/node_modules/has-symbols/index.d.ts +0 -3
- package/node_modules/has-symbols/index.js +0 -14
- package/node_modules/has-symbols/package.json +0 -111
- package/node_modules/has-symbols/shams.d.ts +0 -3
- package/node_modules/has-symbols/shams.js +0 -45
- package/node_modules/has-symbols/test/index.js +0 -22
- package/node_modules/has-symbols/test/shams/core-js.js +0 -29
- package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
- package/node_modules/has-symbols/test/tests.js +0 -58
- package/node_modules/has-symbols/tsconfig.json +0 -10
- package/node_modules/hasown/.eslintrc +0 -5
- package/node_modules/hasown/.github/FUNDING.yml +0 -12
- package/node_modules/hasown/.nycrc +0 -13
- package/node_modules/hasown/CHANGELOG.md +0 -40
- package/node_modules/hasown/LICENSE +0 -21
- package/node_modules/hasown/README.md +0 -40
- package/node_modules/hasown/index.d.ts +0 -3
- package/node_modules/hasown/index.js +0 -8
- package/node_modules/hasown/package.json +0 -92
- package/node_modules/hasown/tsconfig.json +0 -6
- package/node_modules/isarray/LICENSE +0 -21
- package/node_modules/isarray/README.md +0 -38
- package/node_modules/isarray/index.js +0 -5
- package/node_modules/isarray/package.json +0 -48
- package/node_modules/json-stable-stringify/.eslintrc +0 -31
- package/node_modules/json-stable-stringify/.github/FUNDING.yml +0 -12
- package/node_modules/json-stable-stringify/CHANGELOG.md +0 -160
- package/node_modules/json-stable-stringify/LICENSE +0 -21
- package/node_modules/json-stable-stringify/README.md +0 -157
- package/node_modules/json-stable-stringify/example/key_cmp.js +0 -9
- package/node_modules/json-stable-stringify/example/nested.js +0 -7
- package/node_modules/json-stable-stringify/example/str.js +0 -7
- package/node_modules/json-stable-stringify/example/value_cmp.js +0 -12
- package/node_modules/json-stable-stringify/index.d.ts +0 -25
- package/node_modules/json-stable-stringify/index.js +0 -124
- package/node_modules/json-stable-stringify/package.json +0 -88
- package/node_modules/json-stable-stringify/test/cmp.js +0 -33
- package/node_modules/json-stable-stringify/test/nested.js +0 -48
- package/node_modules/json-stable-stringify/test/replacer.js +0 -81
- package/node_modules/json-stable-stringify/test/space.js +0 -127
- package/node_modules/json-stable-stringify/test/str.js +0 -46
- package/node_modules/json-stable-stringify/test/to-json.js +0 -22
- package/node_modules/json-stable-stringify/tsconfig.json +0 -10
- package/node_modules/jsonify/.eslintrc +0 -21
- package/node_modules/jsonify/.github/FUNDING.yml +0 -12
- package/node_modules/jsonify/CHANGELOG.md +0 -48
- package/node_modules/jsonify/README.md +0 -66
- package/node_modules/jsonify/index.js +0 -4
- package/node_modules/jsonify/lib/parse.js +0 -261
- package/node_modules/jsonify/lib/stringify.js +0 -151
- package/node_modules/jsonify/package.json +0 -62
- package/node_modules/jsonify/test/parse.js +0 -20
- package/node_modules/jsonify/test/stringify.js +0 -18
- package/node_modules/math-intrinsics/.eslintrc +0 -16
- package/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
- package/node_modules/math-intrinsics/CHANGELOG.md +0 -24
- package/node_modules/math-intrinsics/LICENSE +0 -21
- package/node_modules/math-intrinsics/README.md +0 -50
- package/node_modules/math-intrinsics/abs.d.ts +0 -1
- package/node_modules/math-intrinsics/abs.js +0 -4
- package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
- package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
- package/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxValue.js +0 -5
- package/node_modules/math-intrinsics/floor.d.ts +0 -1
- package/node_modules/math-intrinsics/floor.js +0 -4
- package/node_modules/math-intrinsics/isFinite.d.ts +0 -3
- package/node_modules/math-intrinsics/isFinite.js +0 -12
- package/node_modules/math-intrinsics/isInteger.d.ts +0 -3
- package/node_modules/math-intrinsics/isInteger.js +0 -16
- package/node_modules/math-intrinsics/isNaN.d.ts +0 -1
- package/node_modules/math-intrinsics/isNaN.js +0 -6
- package/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
- package/node_modules/math-intrinsics/isNegativeZero.js +0 -6
- package/node_modules/math-intrinsics/max.d.ts +0 -1
- package/node_modules/math-intrinsics/max.js +0 -4
- package/node_modules/math-intrinsics/min.d.ts +0 -1
- package/node_modules/math-intrinsics/min.js +0 -4
- package/node_modules/math-intrinsics/mod.d.ts +0 -3
- package/node_modules/math-intrinsics/mod.js +0 -9
- package/node_modules/math-intrinsics/package.json +0 -86
- package/node_modules/math-intrinsics/pow.d.ts +0 -1
- package/node_modules/math-intrinsics/pow.js +0 -4
- package/node_modules/math-intrinsics/round.d.ts +0 -1
- package/node_modules/math-intrinsics/round.js +0 -4
- package/node_modules/math-intrinsics/sign.d.ts +0 -3
- package/node_modules/math-intrinsics/sign.js +0 -11
- package/node_modules/math-intrinsics/test/index.js +0 -192
- package/node_modules/math-intrinsics/tsconfig.json +0 -3
- package/node_modules/object-keys/.editorconfig +0 -13
- package/node_modules/object-keys/.eslintrc +0 -17
- package/node_modules/object-keys/.travis.yml +0 -277
- package/node_modules/object-keys/CHANGELOG.md +0 -232
- package/node_modules/object-keys/LICENSE +0 -21
- package/node_modules/object-keys/README.md +0 -76
- package/node_modules/object-keys/implementation.js +0 -122
- package/node_modules/object-keys/index.js +0 -32
- package/node_modules/object-keys/isArguments.js +0 -17
- package/node_modules/object-keys/package.json +0 -88
- package/node_modules/object-keys/test/index.js +0 -5
- package/node_modules/set-function-length/.eslintrc +0 -27
- package/node_modules/set-function-length/.github/FUNDING.yml +0 -12
- package/node_modules/set-function-length/.nycrc +0 -13
- package/node_modules/set-function-length/CHANGELOG.md +0 -70
- package/node_modules/set-function-length/LICENSE +0 -21
- package/node_modules/set-function-length/README.md +0 -56
- package/node_modules/set-function-length/env.d.ts +0 -9
- package/node_modules/set-function-length/env.js +0 -25
- package/node_modules/set-function-length/index.d.ts +0 -7
- package/node_modules/set-function-length/index.js +0 -42
- package/node_modules/set-function-length/package.json +0 -102
- package/node_modules/set-function-length/tsconfig.json +0 -9
package/lib/upgrade-id-aspect.js
CHANGED
|
@@ -161,5 +161,5 @@ Refer to the following page for more information: https://cdktn.io/docs/examples
|
|
|
161
161
|
}
|
|
162
162
|
exports.MigrateIds = MigrateIds;
|
|
163
163
|
_a = JSII_RTTI_SYMBOL_1;
|
|
164
|
-
MigrateIds[_a] = { fqn: "cdktn.MigrateIds", version: "0.23.
|
|
164
|
+
MigrateIds[_a] = { fqn: "cdktn.MigrateIds", version: "0.23.4" };
|
|
165
165
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1pZC1hc3BlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXBncmFkZS1pZC1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBRW5DLHdCQU9XO0FBR1gsaUNBQWlDO0FBQ2pDLHFDQUErRDtBQUMvRCw2QkFBNkI7QUFFN0I7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXZCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyxvQkFBb0I7QUFDL0MsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXZCOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxVQUFvQixFQUFFLGFBQXNCO0lBQzFFLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFFdkQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBQSw0Q0FBbUMsR0FBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLGdDQUFnQztJQUNoQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIscUVBQXFFO1FBQ3JFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLDZDQUE2QztRQUM3QyxNQUFNLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FB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dCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuXG5pbXBvcnQge1xuICBBbm5vdGF0aW9ucyxcbiAgQXBwLFxuICBUZXJyYWZvcm1FbGVtZW50LFxuICBUZXJyYWZvcm1Nb2R1bGUsXG4gIFRlcnJhZm9ybVJlc291cmNlLFxuICBUZXJyYWZvcm1TdGFjayxcbn0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IElBc3BlY3QgfSBmcm9tIFwiLi9hc3BlY3RcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QsIE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNhbm5vdENhbGNJZEZvckVtcHR5U2V0T2ZDb21wb25lbnRzIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8qKlxuICogV2UgaGF2ZSB0byBjb3B5IHRoaXMgZnJvbSB0aGUgb2xkIENES1ROIHZlcnNpb24gZm9yIG5vdywgc28gdGhhdCB3ZSBjYW5cbiAqIGNhbGN1bGF0ZSB0aGUgb2xkIGxvZ2ljYWwgSURzIGZvciBub3cgYW5kIGZvciBsYXRlciBmb3IgdGhlIG1pZ3JhdGlvbi5cbiAqL1xuXG4vKipcbiAqIFJlc291cmNlcyB3aXRoIHRoaXMgSUQgYXJlIGhpZGRlbiBmcm9tIGh1bWFuc1xuICpcbiAqIFRoZXkgZG8gbm90IGFwcGVhciBpbiB0aGUgaHVtYW4tcmVhZGFibGUgcGFydCBvZiB0aGUgbG9naWNhbCBJRCxcbiAqIGJ1dCB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGUgaGFzaCBjYWxjdWxhdGlvbi5cbiAqL1xuY29uc3QgSElEREVOX0ZST01fSFVNQU5fSUQgPSBcIlJlc291cmNlXCI7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgY29tcGxldGUgaGlkZGVuIGZyb20gdGhlIGxvZ2ljYWwgSUQgY2FsY3VsYXRpb24uXG4gKi9cbmNvbnN0IEhJRERFTl9JRCA9IFwiRGVmYXVsdFwiO1xuXG5jb25zdCBQQVRIX1NFUCA9IFwiL1wiO1xuY29uc3QgVU5JUVVFX1NFUCA9IFwiX1wiO1xuXG5jb25zdCBIQVNIX0xFTiA9IDg7XG5jb25zdCBNQVhfSFVNQU5fTEVOID0gMjQwOyAvLyBtYXggSUQgbGVuIGlzIDI1NVxuY29uc3QgTUFYX0lEX0xFTiA9IDI1NTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIGEgdW5pcXVlIElEIGZvciBhIHNldCBvZiB0ZXh0dWFsIGNvbXBvbmVudHMuXG4gKlxuICogVGhpcyBpcyBkb25lIGJ5IGNhbGN1bGF0aW5nIGEgaGFzaCBvbiB0aGUgZnVsbCBwYXRoIGFuZCB1c2luZyBpdCBhcyBhIHN1ZmZpeFxuICogb2YgYSBsZW5ndGgtbGltaXRlZCBcImh1bWFuXCIgcmVuZGl0aW9uIG9mIHRoZSBwYXRoIGNvbXBvbmVudHMuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudHMgVGhlIHBhdGggY29tcG9uZW50c1xuICogQHJldHVybnMgYSB1bmlxdWUgYWxwaGEtbnVtZXJpYyBpZGVudGlmaWVyIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiAyNTVcbiAqL1xuZnVuY3Rpb24gbWFrZVVuaXF1ZUlkT2xkVmVyc2lvbihjb21wb25lbnRzOiBzdHJpbmdbXSwgYWxsb3dTZXBDaGFyczogYm9vbGVhbikge1xuICBjb21wb25lbnRzID0gY29tcG9uZW50cy5maWx0ZXIoKHgpID0+IHggIT09IEhJRERFTl9JRCk7XG5cbiAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMoKTtcbiAgfVxuXG4gIC8vIHRvcC1sZXZlbCByZXNvdXJjZXMgd2lsbCBzaW1wbHkgdXNlIHRoZSBgbmFtZWAgYXMtaXMgaW4gb3JkZXIgdG8gc3VwcG9ydFxuICAvLyB0cmFuc3BhcmVudCBtaWdyYXRpb24gb2YgY2xvdWRmb3JtYXRpb24gdGVtcGxhdGVzIHRvIHRoZSBDREsgd2l0aG91dCB0aGVcbiAgLy8gbmVlZCB0byByZW5hbWUgYWxsIHJlc291cmNlcy5cbiAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gd2UgZmlsdGVyIG91dCBub24tYWxwaGEgY2hhcmFjdGVycyBidXQgdGhhdCBpcyBhY3R1YWxseSBhIGJhZCBpZGVhXG4gICAgLy8gYmVjYXVzZSBpdCBjb3VsZCBjcmVhdGUgY29uZmxpY3RzIChcIkEtQlwiIGFuZCBcIkFCXCIgd2lsbCByZW5kZXIgdGhlIHNhbWVcbiAgICAvLyBsb2dpY2FsIElEKS4gc2FkbHksIGNoYW5naW5nIGl0IGluIHRoZSAxLnggdmVyc2lvbiBsaW5lIGlzIGltcG9zc2libGVcbiAgICAvLyBiZWNhdXNlIGl0IHdpbGwgYmUgYSBicmVha2luZyBjaGFuZ2UuIHdlIHNob3VsZCBjb25zaWRlciBmb3IgdjIuMC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzY0MjFcbiAgICBjb25zdCBjYW5kaWRhdGUgPSByZW1vdmVEaXNhbGxvd2VkQ2hhcmFjdGVycyhjb21wb25lbnRzWzBdLCBhbGxvd1NlcENoYXJzKTtcblxuICAgIC8vIGlmIG91ciBjYW5kaWRhdGUgaXMgc2hvcnQgZW5vdWdoLCB1c2UgaXQgYXMgaXMuIG90aGVyd2lzZSwgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIG5vcm1hbCBtb2RlLlxuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IE1BWF9JRF9MRU4pIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFzaCA9IHBhdGhIYXNoKGNvbXBvbmVudHMpO1xuICBjb25zdCBodW1hbiA9IHJlbW92ZUR1cGVzKGNvbXBvbmVudHMpXG4gICAgLmZpbHRlcigoeCkgPT4geCAhPT0gSElEREVOX0ZST01fSFVNQU5fSUQpXG4gICAgLm1hcCgocykgPT4gcmVtb3ZlRGlzYWxsb3dlZENoYXJhY3RlcnMocywgYWxsb3dTZXBDaGFycykpXG4gICAgLmpvaW4oVU5JUVVFX1NFUClcbiAgICAuc2xpY2UoMCwgTUFYX0hVTUFOX0xFTik7XG5cbiAgcmV0dXJuIGh1bWFuICsgVU5JUVVFX1NFUCArIGhhc2g7XG59XG5cbi8qKlxuICogVGFrZSBhIGhhc2ggb2YgdGhlIGdpdmVuIHBhdGguXG4gKlxuICogVGhlIGhhc2ggaXMgbGltaXRlZCBpbiBzaXplLlxuICovXG5mdW5jdGlvbiBwYXRoSGFzaChwYXRoOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1kNSA9IGNyeXB0b1xuICAgIC5jcmVhdGVIYXNoKFwibWQ1XCIpXG4gICAgLnVwZGF0ZShwYXRoLmpvaW4oUEFUSF9TRVApKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG4gIHJldHVybiBtZDUuc2xpY2UoMCwgSEFTSF9MRU4pLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzXG4gKiBAcGFyYW0gYWxsb3dTZXBDaGFyc1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGlzYWxsb3dlZENoYXJhY3RlcnMoczogc3RyaW5nLCBhbGxvd1NlcENoYXJzOiBib29sZWFuKSB7XG4gIGlmIChhbGxvd1NlcENoYXJzKSB7XG4gICAgcmV0dXJuIHJlbW92ZU5vbkFscGhhbnVtZXJpY1NlcChzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVtb3ZlTm9uQWxwaGFudW1lcmljKHMpO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZW1vdmVOb25BbHBoYW51bWVyaWMoczogc3RyaW5nKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHNcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU5vbkFscGhhbnVtZXJpY1NlcChzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgXCJcIik7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZSBcInRlcm1zXCIgZnJvbSB0aGUgcGF0aCBsaXN0XG4gKlxuICogSWYgdGhlIHByZXZpb3VzIHBhdGggY29tcG9uZW50IG5hbWUgZW5kcyB3aXRoIHRoaXMgY29tcG9uZW50IG5hbWUsIHNraXAgdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwZXMocGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcGF0aCkge1xuICAgIGlmIChyZXQubGVuZ3RoID09PSAwIHx8ICFyZXRbcmV0Lmxlbmd0aCAtIDFdLmVuZHNXaXRoKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldC5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHRmRWxlbWVudFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gYWxsb2NhdGVMb2dpY2FsSWRPbGRWZXJzaW9uKFxuICB0ZkVsZW1lbnQ6IFRlcnJhZm9ybUVsZW1lbnQgfCBOb2RlLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9kZSA9IFRlcnJhZm9ybUVsZW1lbnQuaXNUZXJyYWZvcm1FbGVtZW50KHRmRWxlbWVudClcbiAgICA/IHRmRWxlbWVudC5ub2RlXG4gICAgOiB0ZkVsZW1lbnQ7XG5cbiAgLy8gVGhpcyBpcyB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHdoaWNoIHdlIHdhbnQgZm9yIG5vdy5cbiAgY29uc3Qgc3RhY2tJbmRleCA9IDA7XG5cbiAgY29uc3QgY29tcG9uZW50cyA9IG5vZGUuc2NvcGVzLnNsaWNlKHN0YWNrSW5kZXggKyAxKS5tYXAoKGMpID0+IGMubm9kZS5pZCk7XG4gIHJldHVybiBjb21wb25lbnRzLmxlbmd0aCA+IDAgPyBtYWtlVW5pcXVlSWRPbGRWZXJzaW9uKGNvbXBvbmVudHMsIGZhbHNlKSA6IFwiXCI7XG59XG5cbi8qKlxuICogRm9yIG1pZ3JhdGluZyBwYXN0IDAuMTcgd2hlcmUgdGhlIGZlYXR1cmUgZmxhZyBmb3IgdGhlIG9sZCBpZCBnZW5lcmF0aW9uIGxvZ2ljIHdhcyByZW1vdmVkIGFmdGVyIGJlaW5nIGRlcHJlY2F0ZWQgc2luY2UgMC4xNVxuICovXG5leHBvcnQgY2xhc3MgTWlncmF0ZUlkcyBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWluc3RhbmNlb2Yvbm8taW5zdGFuY2VvZlxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgVGVycmFmb3JtUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG9sZElkID0gYWxsb2NhdGVMb2dpY2FsSWRPbGRWZXJzaW9uKG5vZGUpO1xuICAgICAgbm9kZS5tb3ZlRnJvbUlkKGAke25vZGUudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke29sZElkfWApO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW5zdGFuY2VvZi9uby1pbnN0YW5jZW9mXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXJyYWZvcm1Nb2R1bGUpIHtcbiAgICAgIGNvbnN0IG9sZElkID0gYWxsb2NhdGVMb2dpY2FsSWRPbGRWZXJzaW9uKG5vZGUpO1xuICAgICAgY29uc3QgYXBwTWFuaWZlc3QgPSBBcHAub2Yobm9kZSkubWFuaWZlc3Q7XG4gICAgICBjb25zdCBzdGFja01hbmlmZXN0ID0gYXBwTWFuaWZlc3QuZm9yU3RhY2soVGVycmFmb3JtU3RhY2sub2Yobm9kZSkpO1xuICAgICAgY29uc3Qgc3RhY2tPdXRkaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGFwcE1hbmlmZXN0Lm91dGRpcixcbiAgICAgICAgc3RhY2tNYW5pZmVzdC53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgKTtcbiAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpXG4gICAgICAgIC5hZGRXYXJuaW5nKGBGb3VuZCBtb2R1bGUgd2l0aCBuZXcgaWQgJHtub2RlLmZyaWVuZGx5VW5pcXVlSWR9LiBNb3ZpbmcgdGhpcyBtb2R1bGUgcmVxdWlyZXMgYSBtYW51YWwgc3RhdGUgbWlncmF0aW9uLlxuSWYgdGhpcyBtb2R1bGUgaGFzIG5vdCBiZWVuIG1vdmVkIHlldCwgcnVuIFwidGVycmFmb3JtIHN0YXRlIG12IG1vZHVsZS4ke29sZElkfSBtb2R1bGUuJHtub2RlLmZyaWVuZGx5VW5pcXVlSWR9XCIgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkgXCIke3N0YWNrT3V0ZGlyfVwiIHRvIG1pZ3JhdGUgdGhlIGV4aXN0aW5nIHN0YXRlIHRvIGl0cyBuZXcgaWQuXG5SZWZlciB0byB0aGUgZm9sbG93aW5nIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9leGFtcGxlcy1hbmQtZ3VpZGVzL3JlZmFjdG9yaW5nI21vdmluZy1vci1yZW5hbWluZy1tb2R1bGVzYCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/validations/index.js
CHANGED
|
@@ -16,6 +16,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
// Copyright (c) HashiCorp, Inc
|
|
18
18
|
// SPDX-License-Identifier: MPL-2.0
|
|
19
|
+
__exportStar(require("./target-versions"), exports);
|
|
19
20
|
__exportStar(require("./validate-binary-version"), exports);
|
|
21
|
+
__exportStar(require("./validate-function-version-support"), exports);
|
|
20
22
|
__exportStar(require("./validate-provider-presence"), exports);
|
|
21
|
-
|
|
23
|
+
__exportStar(require("./validate-terraform-feature-version"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsb0RBQWtDO0FBQ2xDLDREQUEwQztBQUMxQyxzRUFBb0Q7QUFDcEQsK0RBQTZDO0FBQzdDLHVFQUFxRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5leHBvcnQgKiBmcm9tIFwiLi90YXJnZXQtdmVyc2lvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRlLWJpbmFyeS12ZXJzaW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0ZS1mdW5jdGlvbi12ZXJzaW9uLXN1cHBvcnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRlLXByb3ZpZGVyLXByZXNlbmNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0ZS10ZXJyYWZvcm0tZmVhdHVyZS12ZXJzaW9uXCI7XG4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { IConstruct, IValidation } from "constructs";
|
|
2
|
+
import { TerraformFeatureVersionConstraints } from "./validate-terraform-feature-version";
|
|
3
|
+
/**
|
|
4
|
+
* Context key carrying the project's declared Terraform-compatible runtime
|
|
5
|
+
* targets (set from the `targetVersions` field in cdktf.json by the CLI, or
|
|
6
|
+
* directly via App context / CDKTF_CONTEXT_JSON for standalone synth).
|
|
7
|
+
*
|
|
8
|
+
* This is the canonical definition. `@cdktn/commons` imports it from here
|
|
9
|
+
* (commons depends on cdktn; cdktn must not depend on commons), so the CLI
|
|
10
|
+
* writes and the construct library reads the exact same key. It is an
|
|
11
|
+
* internal wiring detail, deliberately not part of cdktn's public API.
|
|
12
|
+
*/
|
|
13
|
+
export declare const TARGET_VERSIONS_CONTEXT_KEY = "targetVersions";
|
|
14
|
+
/**
|
|
15
|
+
* The Terraform-compatible runtimes a project declares it supports, as npm
|
|
16
|
+
* semver ranges per product. A missing product means the project does not
|
|
17
|
+
* target that product.
|
|
18
|
+
*/
|
|
19
|
+
export interface TerraformTargetVersions {
|
|
20
|
+
readonly terraform?: string;
|
|
21
|
+
readonly opentofu?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Used when a project declares no `targetVersions`: the project is assumed
|
|
25
|
+
* to target every supported release of both products, which is the strictest
|
|
26
|
+
* (most portable) interpretation.
|
|
27
|
+
*/
|
|
28
|
+
export declare const DEFAULT_TARGET_VERSIONS: TerraformTargetVersions;
|
|
29
|
+
/**
|
|
30
|
+
* The product keys a project may declare targets for. Exported for reuse by
|
|
31
|
+
* `@cdktn/commons` (imported via subpath), not part of cdktn's public API.
|
|
32
|
+
*/
|
|
33
|
+
export declare const TARGET_PRODUCTS: readonly ["terraform", "opentofu"];
|
|
34
|
+
/**
|
|
35
|
+
* Resolves the declared target versions from construct context, falling back
|
|
36
|
+
* to DEFAULT_TARGET_VERSIONS. Returns errors instead of targets when the
|
|
37
|
+
* declared value is malformed (which can happen when context is set directly
|
|
38
|
+
* on the App rather than going through cdktf.json validation).
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveTargetVersions(scope: IConstruct): {
|
|
41
|
+
targets?: TerraformTargetVersions;
|
|
42
|
+
errors: string[];
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Checks whether a feature is supported across the entire declared target
|
|
46
|
+
* range of every targeted product.
|
|
47
|
+
*
|
|
48
|
+
* `supportedIn` follows the TerraformFeatureVersionConstraints semantics: a
|
|
49
|
+
* missing product key means the feature is not supported by that product at
|
|
50
|
+
* any version. The check is a semver range subset: declaring
|
|
51
|
+
* `terraform: ">=1.5.7"` while a feature requires `>=1.8.0` fails, because
|
|
52
|
+
* the project claims to support 1.5.7..1.8.0 where the feature is missing.
|
|
53
|
+
*/
|
|
54
|
+
export declare function checkFeatureSupportedByTargets(featureName: string, supportedIn: TerraformFeatureVersionConstraints, targets: TerraformTargetVersions, hint?: string): string[];
|
|
55
|
+
/**
|
|
56
|
+
* Validates that a feature is supported by the project's declared
|
|
57
|
+
* Terraform-compatible runtime targets (cdktf.json `targetVersions`),
|
|
58
|
+
* without probing any locally installed binary.
|
|
59
|
+
*
|
|
60
|
+
* Verifying the actually installed binary is a separate, explicit step:
|
|
61
|
+
* the opt-in `validateInstalledBinary` config handled by the CLI commands
|
|
62
|
+
* that execute the binary.
|
|
63
|
+
*/
|
|
64
|
+
export declare class ValidateFeatureTargetSupport implements IValidation {
|
|
65
|
+
protected scope: IConstruct;
|
|
66
|
+
protected featureName: string;
|
|
67
|
+
protected supportedIn: TerraformFeatureVersionConstraints;
|
|
68
|
+
protected hint?: string | undefined;
|
|
69
|
+
constructor(scope: IConstruct, featureName: string, supportedIn: TerraformFeatureVersionConstraints, hint?: string | undefined);
|
|
70
|
+
validate(): string[];
|
|
71
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateFeatureTargetSupport = exports.TARGET_PRODUCTS = exports.DEFAULT_TARGET_VERSIONS = exports.TARGET_VERSIONS_CONTEXT_KEY = void 0;
|
|
4
|
+
exports.resolveTargetVersions = resolveTargetVersions;
|
|
5
|
+
exports.checkFeatureSupportedByTargets = checkFeatureSupportedByTargets;
|
|
6
|
+
const semver = require("semver");
|
|
7
|
+
/**
|
|
8
|
+
* Context key carrying the project's declared Terraform-compatible runtime
|
|
9
|
+
* targets (set from the `targetVersions` field in cdktf.json by the CLI, or
|
|
10
|
+
* directly via App context / CDKTF_CONTEXT_JSON for standalone synth).
|
|
11
|
+
*
|
|
12
|
+
* This is the canonical definition. `@cdktn/commons` imports it from here
|
|
13
|
+
* (commons depends on cdktn; cdktn must not depend on commons), so the CLI
|
|
14
|
+
* writes and the construct library reads the exact same key. It is an
|
|
15
|
+
* internal wiring detail, deliberately not part of cdktn's public API.
|
|
16
|
+
*/
|
|
17
|
+
exports.TARGET_VERSIONS_CONTEXT_KEY = "targetVersions";
|
|
18
|
+
/**
|
|
19
|
+
* Used when a project declares no `targetVersions`: the project is assumed
|
|
20
|
+
* to target every supported release of both products, which is the strictest
|
|
21
|
+
* (most portable) interpretation.
|
|
22
|
+
*/
|
|
23
|
+
exports.DEFAULT_TARGET_VERSIONS = {
|
|
24
|
+
terraform: ">=1.5.7",
|
|
25
|
+
opentofu: ">=1.6.0",
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The product keys a project may declare targets for. Exported for reuse by
|
|
29
|
+
* `@cdktn/commons` (imported via subpath), not part of cdktn's public API.
|
|
30
|
+
*/
|
|
31
|
+
exports.TARGET_PRODUCTS = ["terraform", "opentofu"];
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the declared target versions from construct context, falling back
|
|
34
|
+
* to DEFAULT_TARGET_VERSIONS. Returns errors instead of targets when the
|
|
35
|
+
* declared value is malformed (which can happen when context is set directly
|
|
36
|
+
* on the App rather than going through cdktf.json validation).
|
|
37
|
+
*/
|
|
38
|
+
function resolveTargetVersions(scope) {
|
|
39
|
+
const declared = scope.node.tryGetContext(exports.TARGET_VERSIONS_CONTEXT_KEY);
|
|
40
|
+
if (declared === undefined) {
|
|
41
|
+
return { targets: exports.DEFAULT_TARGET_VERSIONS, errors: [] };
|
|
42
|
+
}
|
|
43
|
+
if (typeof declared !== "object" ||
|
|
44
|
+
declared === null ||
|
|
45
|
+
Array.isArray(declared)) {
|
|
46
|
+
return {
|
|
47
|
+
errors: [
|
|
48
|
+
`targetVersions context must be an object mapping products to semver ranges, e.g. { "terraform": ">=1.5.7" }`,
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const entries = Object.entries(declared);
|
|
53
|
+
if (entries.length === 0) {
|
|
54
|
+
return {
|
|
55
|
+
errors: [
|
|
56
|
+
`targetVersions must declare at least one product ("terraform" or "opentofu") or be omitted entirely`,
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const errors = [];
|
|
61
|
+
for (const [product, range] of entries) {
|
|
62
|
+
if (!exports.TARGET_PRODUCTS.includes(product)) {
|
|
63
|
+
errors.push(`targetVersions has unknown product "${product}" (expected "terraform" or "opentofu")`);
|
|
64
|
+
}
|
|
65
|
+
else if (typeof range === "string" && range.includes("~>")) {
|
|
66
|
+
// npm semver happens to parse "~>" as "~", which has different
|
|
67
|
+
// semantics than Terraform's "~>" pessimistic constraint — reject it
|
|
68
|
+
// instead of silently meaning something else
|
|
69
|
+
errors.push(`targetVersions.${product} "${range}" uses Terraform provider constraint syntax; use npm semver ranges instead (e.g. ">=1.5.7" or "~1.5.7")`);
|
|
70
|
+
}
|
|
71
|
+
else if (typeof range !== "string" || semver.validRange(range) === null) {
|
|
72
|
+
errors.push(`targetVersions.${product} ${JSON.stringify(range)} is not a valid semver range`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (errors.length > 0) {
|
|
76
|
+
return { errors };
|
|
77
|
+
}
|
|
78
|
+
return { targets: declared, errors: [] };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Checks whether a feature is supported across the entire declared target
|
|
82
|
+
* range of every targeted product.
|
|
83
|
+
*
|
|
84
|
+
* `supportedIn` follows the TerraformFeatureVersionConstraints semantics: a
|
|
85
|
+
* missing product key means the feature is not supported by that product at
|
|
86
|
+
* any version. The check is a semver range subset: declaring
|
|
87
|
+
* `terraform: ">=1.5.7"` while a feature requires `>=1.8.0` fails, because
|
|
88
|
+
* the project claims to support 1.5.7..1.8.0 where the feature is missing.
|
|
89
|
+
*/
|
|
90
|
+
function checkFeatureSupportedByTargets(featureName, supportedIn, targets, hint) {
|
|
91
|
+
const errors = [];
|
|
92
|
+
for (const product of exports.TARGET_PRODUCTS) {
|
|
93
|
+
const targetRange = targets[product];
|
|
94
|
+
if (!targetRange)
|
|
95
|
+
continue; // product not targeted by the project
|
|
96
|
+
const supportedRange = supportedIn[product];
|
|
97
|
+
if (!supportedRange) {
|
|
98
|
+
errors.push(`${featureName} is not supported by ${product}, but the project targets ${product} ${targetRange}. ${hint || ""}`.trimEnd());
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (!semver.subset(targetRange, supportedRange)) {
|
|
102
|
+
errors.push(`${featureName} requires ${product} ${supportedRange}, but the project targets ${product} ${targetRange}. ${hint || ""}`.trimEnd());
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return errors;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Validates that a feature is supported by the project's declared
|
|
109
|
+
* Terraform-compatible runtime targets (cdktf.json `targetVersions`),
|
|
110
|
+
* without probing any locally installed binary.
|
|
111
|
+
*
|
|
112
|
+
* Verifying the actually installed binary is a separate, explicit step:
|
|
113
|
+
* the opt-in `validateInstalledBinary` config handled by the CLI commands
|
|
114
|
+
* that execute the binary.
|
|
115
|
+
*/
|
|
116
|
+
class ValidateFeatureTargetSupport {
|
|
117
|
+
constructor(scope, featureName, supportedIn, hint) {
|
|
118
|
+
this.scope = scope;
|
|
119
|
+
this.featureName = featureName;
|
|
120
|
+
this.supportedIn = supportedIn;
|
|
121
|
+
this.hint = hint;
|
|
122
|
+
}
|
|
123
|
+
validate() {
|
|
124
|
+
const { targets, errors } = resolveTargetVersions(this.scope);
|
|
125
|
+
if (!targets) {
|
|
126
|
+
return errors;
|
|
127
|
+
}
|
|
128
|
+
return checkFeatureSupportedByTargets(this.featureName, this.supportedIn, targets, this.hint);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.ValidateFeatureTargetSupport = ValidateFeatureTargetSupport;
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LXZlcnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb25zL3RhcmdldC12ZXJzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrREEsc0RBeURDO0FBWUQsd0VBZ0NDO0FBcEpELGlDQUFpQztBQUdqQzs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLGdCQUFnQixDQUFDO0FBWTVEOzs7O0dBSUc7QUFDVSxRQUFBLHVCQUF1QixHQUE0QjtJQUM5RCxTQUFTLEVBQUUsU0FBUztJQUNwQixRQUFRLEVBQUUsU0FBUztDQUNwQixDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxlQUFlLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFFbEU7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxLQUFpQjtJQUlyRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQ0FBMkIsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sRUFBRSxPQUFPLEVBQUUsK0JBQXVCLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUNFLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsUUFBUSxLQUFLLElBQUk7UUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFDdkIsQ0FBQztRQUNELE9BQU87WUFDTCxNQUFNLEVBQUU7Z0JBQ04sNkdBQTZHO2FBQzlHO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLHFHQUFxRzthQUN0RztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsdUJBQWUsQ0FBQyxRQUFRLENBQUMsT0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLENBQUMsSUFBSSxDQUNULHVDQUF1QyxPQUFPLHdDQUF3QyxDQUN2RixDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCwrREFBK0Q7WUFDL0QscUVBQXFFO1lBQ3JFLDZDQUE2QztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFrQixPQUFPLEtBQUssS0FBSyx5R0FBeUcsQ0FDN0ksQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsa0JBQWtCLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUN6QyxLQUFLLENBQ04sOEJBQThCLENBQ2hDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBbUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLDhCQUE4QixDQUM1QyxXQUFtQixFQUNuQixXQUErQyxFQUMvQyxPQUFnQyxFQUNoQyxJQUFhO0lBRWIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLEtBQUssTUFBTSxPQUFPLElBQUksdUJBQWUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVMsQ0FBQyxzQ0FBc0M7UUFFbEUsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsV0FBVyx3QkFBd0IsT0FBTyw2QkFBNkIsT0FBTyxJQUFJLFdBQVcsS0FDOUYsSUFBSSxJQUFJLEVBQ1YsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUNiLENBQUM7WUFDRixTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxXQUFXLGFBQWEsT0FBTyxJQUFJLGNBQWMsNkJBQTZCLE9BQU8sSUFBSSxXQUFXLEtBQ3JHLElBQUksSUFBSSxFQUNWLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDYixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLDRCQUE0QjtJQUN2QyxZQUNZLEtBQWlCLEVBQ2pCLFdBQW1CLEVBQ25CLFdBQStDLEVBQy9DLElBQWE7UUFIYixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQztRQUMvQyxTQUFJLEdBQUosSUFBSSxDQUFTO0lBQ3RCLENBQUM7SUFFRyxRQUFRO1FBQ2IsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sOEJBQThCLENBQ25DLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLE9BQU8sRUFDUCxJQUFJLENBQUMsSUFBSSxDQUNWLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyQkQsb0VBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IElDb25zdHJ1Y3QsIElWYWxpZGF0aW9uIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1GZWF0dXJlVmVyc2lvbkNvbnN0cmFpbnRzIH0gZnJvbSBcIi4vdmFsaWRhdGUtdGVycmFmb3JtLWZlYXR1cmUtdmVyc2lvblwiO1xuXG4vKipcbiAqIENvbnRleHQga2V5IGNhcnJ5aW5nIHRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgVGVycmFmb3JtLWNvbXBhdGlibGUgcnVudGltZVxuICogdGFyZ2V0cyAoc2V0IGZyb20gdGhlIGB0YXJnZXRWZXJzaW9uc2AgZmllbGQgaW4gY2RrdGYuanNvbiBieSB0aGUgQ0xJLCBvclxuICogZGlyZWN0bHkgdmlhIEFwcCBjb250ZXh0IC8gQ0RLVEZfQ09OVEVYVF9KU09OIGZvciBzdGFuZGFsb25lIHN5bnRoKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbi4gYEBjZGt0bi9jb21tb25zYCBpbXBvcnRzIGl0IGZyb20gaGVyZVxuICogKGNvbW1vbnMgZGVwZW5kcyBvbiBjZGt0bjsgY2RrdG4gbXVzdCBub3QgZGVwZW5kIG9uIGNvbW1vbnMpLCBzbyB0aGUgQ0xJXG4gKiB3cml0ZXMgYW5kIHRoZSBjb25zdHJ1Y3QgbGlicmFyeSByZWFkcyB0aGUgZXhhY3Qgc2FtZSBrZXkuIEl0IGlzIGFuXG4gKiBpbnRlcm5hbCB3aXJpbmcgZGV0YWlsLCBkZWxpYmVyYXRlbHkgbm90IHBhcnQgb2YgY2RrdG4ncyBwdWJsaWMgQVBJLlxuICovXG5leHBvcnQgY29uc3QgVEFSR0VUX1ZFUlNJT05TX0NPTlRFWFRfS0VZID0gXCJ0YXJnZXRWZXJzaW9uc1wiO1xuXG4vKipcbiAqIFRoZSBUZXJyYWZvcm0tY29tcGF0aWJsZSBydW50aW1lcyBhIHByb2plY3QgZGVjbGFyZXMgaXQgc3VwcG9ydHMsIGFzIG5wbVxuICogc2VtdmVyIHJhbmdlcyBwZXIgcHJvZHVjdC4gQSBtaXNzaW5nIHByb2R1Y3QgbWVhbnMgdGhlIHByb2plY3QgZG9lcyBub3RcbiAqIHRhcmdldCB0aGF0IHByb2R1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMge1xuICByZWFkb25seSB0ZXJyYWZvcm0/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wZW50b2Z1Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZWQgd2hlbiBhIHByb2plY3QgZGVjbGFyZXMgbm8gYHRhcmdldFZlcnNpb25zYDogdGhlIHByb2plY3QgaXMgYXNzdW1lZFxuICogdG8gdGFyZ2V0IGV2ZXJ5IHN1cHBvcnRlZCByZWxlYXNlIG9mIGJvdGggcHJvZHVjdHMsIHdoaWNoIGlzIHRoZSBzdHJpY3Rlc3RcbiAqIChtb3N0IHBvcnRhYmxlKSBpbnRlcnByZXRhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEFSR0VUX1ZFUlNJT05TOiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyA9IHtcbiAgdGVycmFmb3JtOiBcIj49MS41LjdcIixcbiAgb3BlbnRvZnU6IFwiPj0xLjYuMFwiLFxufTtcblxuLyoqXG4gKiBUaGUgcHJvZHVjdCBrZXlzIGEgcHJvamVjdCBtYXkgZGVjbGFyZSB0YXJnZXRzIGZvci4gRXhwb3J0ZWQgZm9yIHJldXNlIGJ5XG4gKiBgQGNka3RuL2NvbW1vbnNgIChpbXBvcnRlZCB2aWEgc3VicGF0aCksIG5vdCBwYXJ0IG9mIGNka3RuJ3MgcHVibGljIEFQSS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRBUkdFVF9QUk9EVUNUUyA9IFtcInRlcnJhZm9ybVwiLCBcIm9wZW50b2Z1XCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkZWNsYXJlZCB0YXJnZXQgdmVyc2lvbnMgZnJvbSBjb25zdHJ1Y3QgY29udGV4dCwgZmFsbGluZyBiYWNrXG4gKiB0byBERUZBVUxUX1RBUkdFVF9WRVJTSU9OUy4gUmV0dXJucyBlcnJvcnMgaW5zdGVhZCBvZiB0YXJnZXRzIHdoZW4gdGhlXG4gKiBkZWNsYXJlZCB2YWx1ZSBpcyBtYWxmb3JtZWQgKHdoaWNoIGNhbiBoYXBwZW4gd2hlbiBjb250ZXh0IGlzIHNldCBkaXJlY3RseVxuICogb24gdGhlIEFwcCByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIGNka3RmLmpzb24gdmFsaWRhdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGFyZ2V0VmVyc2lvbnMoc2NvcGU6IElDb25zdHJ1Y3QpOiB7XG4gIHRhcmdldHM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbn0ge1xuICBjb25zdCBkZWNsYXJlZCA9IHNjb3BlLm5vZGUudHJ5R2V0Q29udGV4dChUQVJHRVRfVkVSU0lPTlNfQ09OVEVYVF9LRVkpO1xuICBpZiAoZGVjbGFyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7IHRhcmdldHM6IERFRkFVTFRfVEFSR0VUX1ZFUlNJT05TLCBlcnJvcnM6IFtdIH07XG4gIH1cblxuICBpZiAoXG4gICAgdHlwZW9mIGRlY2xhcmVkICE9PSBcIm9iamVjdFwiIHx8XG4gICAgZGVjbGFyZWQgPT09IG51bGwgfHxcbiAgICBBcnJheS5pc0FycmF5KGRlY2xhcmVkKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBbXG4gICAgICAgIGB0YXJnZXRWZXJzaW9ucyBjb250ZXh0IG11c3QgYmUgYW4gb2JqZWN0IG1hcHBpbmcgcHJvZHVjdHMgdG8gc2VtdmVyIHJhbmdlcywgZS5nLiB7IFwidGVycmFmb3JtXCI6IFwiPj0xLjUuN1wiIH1gLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGRlY2xhcmVkKTtcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogW1xuICAgICAgICBgdGFyZ2V0VmVyc2lvbnMgbXVzdCBkZWNsYXJlIGF0IGxlYXN0IG9uZSBwcm9kdWN0IChcInRlcnJhZm9ybVwiIG9yIFwib3BlbnRvZnVcIikgb3IgYmUgb21pdHRlZCBlbnRpcmVseWAsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgW3Byb2R1Y3QsIHJhbmdlXSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFUQVJHRVRfUFJPRFVDVFMuaW5jbHVkZXMocHJvZHVjdCBhcyBhbnkpKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYHRhcmdldFZlcnNpb25zIGhhcyB1bmtub3duIHByb2R1Y3QgXCIke3Byb2R1Y3R9XCIgKGV4cGVjdGVkIFwidGVycmFmb3JtXCIgb3IgXCJvcGVudG9mdVwiKWAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhbmdlID09PSBcInN0cmluZ1wiICYmIHJhbmdlLmluY2x1ZGVzKFwifj5cIikpIHtcbiAgICAgIC8vIG5wbSBzZW12ZXIgaGFwcGVucyB0byBwYXJzZSBcIn4+XCIgYXMgXCJ+XCIsIHdoaWNoIGhhcyBkaWZmZXJlbnRcbiAgICAgIC8vIHNlbWFudGljcyB0aGFuIFRlcnJhZm9ybSdzIFwifj5cIiBwZXNzaW1pc3RpYyBjb25zdHJhaW50IOKAlCByZWplY3QgaXRcbiAgICAgIC8vIGluc3RlYWQgb2Ygc2lsZW50bHkgbWVhbmluZyBzb21ldGhpbmcgZWxzZVxuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIGB0YXJnZXRWZXJzaW9ucy4ke3Byb2R1Y3R9IFwiJHtyYW5nZX1cIiB1c2VzIFRlcnJhZm9ybSBwcm92aWRlciBjb25zdHJhaW50IHN5bnRheDsgdXNlIG5wbSBzZW12ZXIgcmFuZ2VzIGluc3RlYWQgKGUuZy4gXCI+PTEuNS43XCIgb3IgXCJ+MS41LjdcIilgLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByYW5nZSAhPT0gXCJzdHJpbmdcIiB8fCBzZW12ZXIudmFsaWRSYW5nZShyYW5nZSkgPT09IG51bGwpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgdGFyZ2V0VmVyc2lvbnMuJHtwcm9kdWN0fSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHJhbmdlLFxuICAgICAgICApfSBpcyBub3QgYSB2YWxpZCBzZW12ZXIgcmFuZ2VgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBlcnJvcnMgfTtcbiAgfVxuXG4gIHJldHVybiB7IHRhcmdldHM6IGRlY2xhcmVkIGFzIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLCBlcnJvcnM6IFtdIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBhY3Jvc3MgdGhlIGVudGlyZSBkZWNsYXJlZCB0YXJnZXRcbiAqIHJhbmdlIG9mIGV2ZXJ5IHRhcmdldGVkIHByb2R1Y3QuXG4gKlxuICogYHN1cHBvcnRlZEluYCBmb2xsb3dzIHRoZSBUZXJyYWZvcm1GZWF0dXJlVmVyc2lvbkNvbnN0cmFpbnRzIHNlbWFudGljczogYVxuICogbWlzc2luZyBwcm9kdWN0IGtleSBtZWFucyB0aGUgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoYXQgcHJvZHVjdCBhdFxuICogYW55IHZlcnNpb24uIFRoZSBjaGVjayBpcyBhIHNlbXZlciByYW5nZSBzdWJzZXQ6IGRlY2xhcmluZ1xuICogYHRlcnJhZm9ybTogXCI+PTEuNS43XCJgIHdoaWxlIGEgZmVhdHVyZSByZXF1aXJlcyBgPj0xLjguMGAgZmFpbHMsIGJlY2F1c2VcbiAqIHRoZSBwcm9qZWN0IGNsYWltcyB0byBzdXBwb3J0IDEuNS43Li4xLjguMCB3aGVyZSB0aGUgZmVhdHVyZSBpcyBtaXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGZWF0dXJlU3VwcG9ydGVkQnlUYXJnZXRzKFxuICBmZWF0dXJlTmFtZTogc3RyaW5nLFxuICBzdXBwb3J0ZWRJbjogVGVycmFmb3JtRmVhdHVyZVZlcnNpb25Db25zdHJhaW50cyxcbiAgdGFyZ2V0czogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4gIGhpbnQ/OiBzdHJpbmcsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHByb2R1Y3Qgb2YgVEFSR0VUX1BST0RVQ1RTKSB7XG4gICAgY29uc3QgdGFyZ2V0UmFuZ2UgPSB0YXJnZXRzW3Byb2R1Y3RdO1xuICAgIGlmICghdGFyZ2V0UmFuZ2UpIGNvbnRpbnVlOyAvLyBwcm9kdWN0IG5vdCB0YXJnZXRlZCBieSB0aGUgcHJvamVjdFxuXG4gICAgY29uc3Qgc3VwcG9ydGVkUmFuZ2UgPSBzdXBwb3J0ZWRJbltwcm9kdWN0XTtcbiAgICBpZiAoIXN1cHBvcnRlZFJhbmdlKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYCR7ZmVhdHVyZU5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgJHtwcm9kdWN0fSwgYnV0IHRoZSBwcm9qZWN0IHRhcmdldHMgJHtwcm9kdWN0fSAke3RhcmdldFJhbmdlfS4gJHtcbiAgICAgICAgICBoaW50IHx8IFwiXCJcbiAgICAgICAgfWAudHJpbUVuZCgpLFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghc2VtdmVyLnN1YnNldCh0YXJnZXRSYW5nZSwgc3VwcG9ydGVkUmFuZ2UpKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYCR7ZmVhdHVyZU5hbWV9IHJlcXVpcmVzICR7cHJvZHVjdH0gJHtzdXBwb3J0ZWRSYW5nZX0sIGJ1dCB0aGUgcHJvamVjdCB0YXJnZXRzICR7cHJvZHVjdH0gJHt0YXJnZXRSYW5nZX0uICR7XG4gICAgICAgICAgaGludCB8fCBcIlwiXG4gICAgICAgIH1gLnRyaW1FbmQoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCBhIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBwcm9qZWN0J3MgZGVjbGFyZWRcbiAqIFRlcnJhZm9ybS1jb21wYXRpYmxlIHJ1bnRpbWUgdGFyZ2V0cyAoY2RrdGYuanNvbiBgdGFyZ2V0VmVyc2lvbnNgKSxcbiAqIHdpdGhvdXQgcHJvYmluZyBhbnkgbG9jYWxseSBpbnN0YWxsZWQgYmluYXJ5LlxuICpcbiAqIFZlcmlmeWluZyB0aGUgYWN0dWFsbHkgaW5zdGFsbGVkIGJpbmFyeSBpcyBhIHNlcGFyYXRlLCBleHBsaWNpdCBzdGVwOlxuICogdGhlIG9wdC1pbiBgdmFsaWRhdGVJbnN0YWxsZWRCaW5hcnlgIGNvbmZpZyBoYW5kbGVkIGJ5IHRoZSBDTEkgY29tbWFuZHNcbiAqIHRoYXQgZXhlY3V0ZSB0aGUgYmluYXJ5LlxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVGZWF0dXJlVGFyZ2V0U3VwcG9ydCBpbXBsZW1lbnRzIElWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNjb3BlOiBJQ29uc3RydWN0LFxuICAgIHByb3RlY3RlZCBmZWF0dXJlTmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBzdXBwb3J0ZWRJbjogVGVycmFmb3JtRmVhdHVyZVZlcnNpb25Db25zdHJhaW50cyxcbiAgICBwcm90ZWN0ZWQgaGludD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgeyB0YXJnZXRzLCBlcnJvcnMgfSA9IHJlc29sdmVUYXJnZXRWZXJzaW9ucyh0aGlzLnNjb3BlKTtcbiAgICBpZiAoIXRhcmdldHMpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoZWNrRmVhdHVyZVN1cHBvcnRlZEJ5VGFyZ2V0cyhcbiAgICAgIHRoaXMuZmVhdHVyZU5hbWUsXG4gICAgICB0aGlzLnN1cHBvcnRlZEluLFxuICAgICAgdGFyZ2V0cyxcbiAgICAgIHRoaXMuaGludCxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -2,6 +2,16 @@ import { IValidation } from "constructs";
|
|
|
2
2
|
/**
|
|
3
3
|
* A validation that can be applied to a construct that will error if the
|
|
4
4
|
* construct is being used in an environment with a version of a binary lower than the specified version.
|
|
5
|
+
*
|
|
6
|
+
* TODO(target-versions): legacy synth-time binary probe that predates
|
|
7
|
+
* OpenTofu support and the declared `targetVersions` model. Existing
|
|
8
|
+
* consumers (e.g. ValidateTerraformVersion for resource moves) should
|
|
9
|
+
* migrate to ValidateFeatureTargetSupport, leaving installed-binary
|
|
10
|
+
* verification to the opt-in validateInstalledBinary CLI behavior. Left
|
|
11
|
+
* unchanged here only to keep this PR small; the migration is tracked in
|
|
12
|
+
* #275. Note this class is not exported from the cdktn package root, so the
|
|
13
|
+
* change is behavioral (synth no longer shelling out), not a symbol-level
|
|
14
|
+
* public-API break.
|
|
5
15
|
*/
|
|
6
16
|
export declare class ValidateBinaryVersion implements IValidation {
|
|
7
17
|
protected binary: string;
|
|
@@ -6,6 +6,16 @@ const semver = require("semver");
|
|
|
6
6
|
/**
|
|
7
7
|
* A validation that can be applied to a construct that will error if the
|
|
8
8
|
* construct is being used in an environment with a version of a binary lower than the specified version.
|
|
9
|
+
*
|
|
10
|
+
* TODO(target-versions): legacy synth-time binary probe that predates
|
|
11
|
+
* OpenTofu support and the declared `targetVersions` model. Existing
|
|
12
|
+
* consumers (e.g. ValidateTerraformVersion for resource moves) should
|
|
13
|
+
* migrate to ValidateFeatureTargetSupport, leaving installed-binary
|
|
14
|
+
* verification to the opt-in validateInstalledBinary CLI behavior. Left
|
|
15
|
+
* unchanged here only to keep this PR small; the migration is tracked in
|
|
16
|
+
* #275. Note this class is not exported from the cdktn package root, so the
|
|
17
|
+
* change is behavioral (synth no longer shelling out), not a symbol-level
|
|
18
|
+
* public-API break.
|
|
9
19
|
*/
|
|
10
20
|
class ValidateBinaryVersion {
|
|
11
21
|
constructor(binary, versionConstraint, versionCommand, hint) {
|
|
@@ -41,4 +51,4 @@ class ValidateBinaryVersion {
|
|
|
41
51
|
}
|
|
42
52
|
}
|
|
43
53
|
exports.ValidateBinaryVersion = ValidateBinaryVersion;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtYmluYXJ5LXZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbnMvdmFsaWRhdGUtYmluYXJ5LXZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsaURBQXlDO0FBQ3pDLGlDQUFpQztBQUVqQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSxxQkFBcUI7SUFDaEMsWUFDWSxNQUFjLEVBQ2QsaUJBQXlCLEVBQ3pCLGNBQXNCLEVBQ3RCLElBQWE7UUFIYixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQVM7SUFDdEIsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUM7WUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUEsd0JBQVEsRUFBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyRCxLQUFLLEVBQUUsTUFBTTthQUNkLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVkLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU87b0JBQ0wsa0NBQWtDLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxDQUFDLGNBQWMsR0FBRztpQkFDakYsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDMUQsT0FBTztvQkFDTCxHQUFHLElBQUksQ0FBQyxNQUFNLFlBQ1osT0FBTyxDQUFDLENBQUMsQ0FDWCx1Q0FDRSxJQUFJLENBQUMsaUJBQ1Asd0JBQXdCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFO2lCQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPO2dCQUNMLGtDQUFrQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxjQUFjLFlBQVksQ0FBQyxFQUFFO2FBQ3JGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdENELHNEQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBJVmFsaWRhdGlvbiB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY29uc3RydWN0IHRoYXQgd2lsbCBlcnJvciBpZiB0aGVcbiAqIGNvbnN0cnVjdCBpcyBiZWluZyB1c2VkIGluIGFuIGVudmlyb25tZW50IHdpdGggYSB2ZXJzaW9uIG9mIGEgYmluYXJ5IGxvd2VyIHRoYW4gdGhlIHNwZWNpZmllZCB2ZXJzaW9uLlxuICpcbiAqIFRPRE8odGFyZ2V0LXZlcnNpb25zKTogbGVnYWN5IHN5bnRoLXRpbWUgYmluYXJ5IHByb2JlIHRoYXQgcHJlZGF0ZXNcbiAqIE9wZW5Ub2Z1IHN1cHBvcnQgYW5kIHRoZSBkZWNsYXJlZCBgdGFyZ2V0VmVyc2lvbnNgIG1vZGVsLiBFeGlzdGluZ1xuICogY29uc3VtZXJzIChlLmcuIFZhbGlkYXRlVGVycmFmb3JtVmVyc2lvbiBmb3IgcmVzb3VyY2UgbW92ZXMpIHNob3VsZFxuICogbWlncmF0ZSB0byBWYWxpZGF0ZUZlYXR1cmVUYXJnZXRTdXBwb3J0LCBsZWF2aW5nIGluc3RhbGxlZC1iaW5hcnlcbiAqIHZlcmlmaWNhdGlvbiB0byB0aGUgb3B0LWluIHZhbGlkYXRlSW5zdGFsbGVkQmluYXJ5IENMSSBiZWhhdmlvci4gTGVmdFxuICogdW5jaGFuZ2VkIGhlcmUgb25seSB0byBrZWVwIHRoaXMgUFIgc21hbGw7IHRoZSBtaWdyYXRpb24gaXMgdHJhY2tlZCBpblxuICogIzI3NS4gTm90ZSB0aGlzIGNsYXNzIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBjZGt0biBwYWNrYWdlIHJvb3QsIHNvIHRoZVxuICogY2hhbmdlIGlzIGJlaGF2aW9yYWwgKHN5bnRoIG5vIGxvbmdlciBzaGVsbGluZyBvdXQpLCBub3QgYSBzeW1ib2wtbGV2ZWxcbiAqIHB1YmxpYy1BUEkgYnJlYWsuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUJpbmFyeVZlcnNpb24gaW1wbGVtZW50cyBJVmFsaWRhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBiaW5hcnk6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmVyc2lvbkNvbnN0cmFpbnQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmVyc2lvbkNvbW1hbmQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgaGludD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmVyc2lvbk9mQ29tbWFuZCA9IGV4ZWNTeW5jKHRoaXMudmVyc2lvbkNvbW1hbmQsIHtcbiAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgfSkudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3Qgc2VtdmVyUmVnZXggPSAvXFxkK1xcLlxcZCtcXC5cXGQrLztcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uT2ZDb21tYW5kLm1hdGNoKHNlbXZlclJlZ2V4KTtcbiAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHZlcnNpb24gb2YgJHt0aGlzLmJpbmFyeX0gKHJ1bm5pbmcgJHt0aGlzLnZlcnNpb25Db21tYW5kfSlgLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbXZlci5zYXRpc2ZpZXModmVyc2lvblswXSwgdGhpcy52ZXJzaW9uQ29uc3RyYWludCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHt0aGlzLmJpbmFyeX0gdmVyc2lvbiAke1xuICAgICAgICAgICAgdmVyc2lvblswXVxuICAgICAgICAgIH0gaXMgbG93ZXIgdGhhbiB0aGUgcmVxdWlyZWQgdmVyc2lvbiAke1xuICAgICAgICAgICAgdGhpcy52ZXJzaW9uQ29uc3RyYWludFxuICAgICAgICAgIH0gZm9yIHRoaXMgY29uc3RydWN0LiAke3RoaXMuaGludCB8fCBcIlwifWAsXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgdmVyc2lvbiBvZiAke3RoaXMuYmluYXJ5fSwgJHt0aGlzLnZlcnNpb25Db21tYW5kfSBmYWlsZWQ6ICR7ZX1gLFxuICAgICAgXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IConstruct, IValidation } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Validates that every Terraform function used through `Fn` is supported by
|
|
4
|
+
* the project's declared Terraform/OpenTofu targets (cdktf.json
|
|
5
|
+
* `targetVersions`, defaulting to the dual product baseline).
|
|
6
|
+
*
|
|
7
|
+
* Most functions are universally available and are not checked at all; only
|
|
8
|
+
* functions listed in the generated availability map are validated. The
|
|
9
|
+
* check is purely declarative — no binary is executed — so synth behaves
|
|
10
|
+
* identically in CI, package builds, and environments without Terraform or
|
|
11
|
+
* OpenTofu installed. Verifying the actually installed binary is the
|
|
12
|
+
* separate, opt-in `validateInstalledBinary` CLI behavior.
|
|
13
|
+
*
|
|
14
|
+
* Functions used via raw escape hatches (overrides, hand-written expression
|
|
15
|
+
* strings) are not tracked and therefore not validated.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ValidateFunctionVersionSupport implements IValidation {
|
|
18
|
+
protected scope: IConstruct;
|
|
19
|
+
constructor(scope: IConstruct);
|
|
20
|
+
validate(): string[];
|
|
21
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateFunctionVersionSupport = void 0;
|
|
4
|
+
const target_versions_1 = require("./target-versions");
|
|
5
|
+
const function_availability_generated_1 = require("../functions/function-availability.generated");
|
|
6
|
+
const usage_registry_1 = require("../functions/usage-registry");
|
|
7
|
+
/**
|
|
8
|
+
* Validates that every Terraform function used through `Fn` is supported by
|
|
9
|
+
* the project's declared Terraform/OpenTofu targets (cdktf.json
|
|
10
|
+
* `targetVersions`, defaulting to the dual product baseline).
|
|
11
|
+
*
|
|
12
|
+
* Most functions are universally available and are not checked at all; only
|
|
13
|
+
* functions listed in the generated availability map are validated. The
|
|
14
|
+
* check is purely declarative — no binary is executed — so synth behaves
|
|
15
|
+
* identically in CI, package builds, and environments without Terraform or
|
|
16
|
+
* OpenTofu installed. Verifying the actually installed binary is the
|
|
17
|
+
* separate, opt-in `validateInstalledBinary` CLI behavior.
|
|
18
|
+
*
|
|
19
|
+
* Functions used via raw escape hatches (overrides, hand-written expression
|
|
20
|
+
* strings) are not tracked and therefore not validated.
|
|
21
|
+
*/
|
|
22
|
+
class ValidateFunctionVersionSupport {
|
|
23
|
+
constructor(scope) {
|
|
24
|
+
this.scope = scope;
|
|
25
|
+
}
|
|
26
|
+
validate() {
|
|
27
|
+
const constrainedFunctions = (0, usage_registry_1.getUsedFunctions)()
|
|
28
|
+
.filter((name) => name in function_availability_generated_1.functionVersionConstraints)
|
|
29
|
+
.sort();
|
|
30
|
+
// only universally available functions in use: nothing to validate
|
|
31
|
+
if (constrainedFunctions.length === 0) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const { targets, errors } = (0, target_versions_1.resolveTargetVersions)(this.scope);
|
|
35
|
+
if (!targets) {
|
|
36
|
+
return errors;
|
|
37
|
+
}
|
|
38
|
+
return constrainedFunctions.flatMap((name) => {
|
|
39
|
+
const supportedIn = function_availability_generated_1.functionVersionConstraints[name];
|
|
40
|
+
return (0, target_versions_1.checkFeatureSupportedByTargets)(`Terraform function "${name}"`, supportedIn, targets, availabilityHint(supportedIn));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ValidateFunctionVersionSupport = ValidateFunctionVersionSupport;
|
|
45
|
+
/**
|
|
46
|
+
* Tells the user where the function IS available, so they can adjust their
|
|
47
|
+
* declared targetVersions (or drop the function).
|
|
48
|
+
*/
|
|
49
|
+
function availabilityHint(supportedIn) {
|
|
50
|
+
const parts = Object.entries(supportedIn).map(([product, range]) => `${product} ${range}`);
|
|
51
|
+
return `It is available in ${parts.join(" and ")}.`;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZnVuY3Rpb24tdmVyc2lvbi1zdXBwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb25zL3ZhbGlkYXRlLWZ1bmN0aW9uLXZlcnNpb24tc3VwcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx1REFHMkI7QUFDM0Isa0dBR3NEO0FBQ3RELGdFQUErRDtBQUUvRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsOEJBQThCO0lBQ3pDLFlBQXNCLEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7SUFBRyxDQUFDO0lBRXBDLFFBQVE7UUFDYixNQUFNLG9CQUFvQixHQUFHLElBQUEsaUNBQWdCLEdBQUU7YUFDNUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksNERBQTBCLENBQUM7YUFDcEQsSUFBSSxFQUFFLENBQUM7UUFFVixtRUFBbUU7UUFDbkUsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHVDQUFxQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxNQUFNLFdBQVcsR0FBRyw0REFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxPQUFPLElBQUEsZ0RBQThCLEVBQ25DLHVCQUF1QixJQUFJLEdBQUcsRUFDOUIsV0FBVyxFQUNYLE9BQU8sRUFDUCxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNUJELHdFQTRCQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsV0FBdUM7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQzNDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUM1QyxDQUFDO0lBQ0YsT0FBTyxzQkFBc0IsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgSUNvbnN0cnVjdCwgSVZhbGlkYXRpb24gfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tGZWF0dXJlU3VwcG9ydGVkQnlUYXJnZXRzLFxuICByZXNvbHZlVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCIuL3RhcmdldC12ZXJzaW9uc1wiO1xuaW1wb3J0IHtcbiAgRnVuY3Rpb25WZXJzaW9uQ29uc3RyYWludHMsXG4gIGZ1bmN0aW9uVmVyc2lvbkNvbnN0cmFpbnRzLFxufSBmcm9tIFwiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uLWF2YWlsYWJpbGl0eS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGdldFVzZWRGdW5jdGlvbnMgfSBmcm9tIFwiLi4vZnVuY3Rpb25zL3VzYWdlLXJlZ2lzdHJ5XCI7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgZXZlcnkgVGVycmFmb3JtIGZ1bmN0aW9uIHVzZWQgdGhyb3VnaCBgRm5gIGlzIHN1cHBvcnRlZCBieVxuICogdGhlIHByb2plY3QncyBkZWNsYXJlZCBUZXJyYWZvcm0vT3BlblRvZnUgdGFyZ2V0cyAoY2RrdGYuanNvblxuICogYHRhcmdldFZlcnNpb25zYCwgZGVmYXVsdGluZyB0byB0aGUgZHVhbCBwcm9kdWN0IGJhc2VsaW5lKS5cbiAqXG4gKiBNb3N0IGZ1bmN0aW9ucyBhcmUgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIGFuZCBhcmUgbm90IGNoZWNrZWQgYXQgYWxsOyBvbmx5XG4gKiBmdW5jdGlvbnMgbGlzdGVkIGluIHRoZSBnZW5lcmF0ZWQgYXZhaWxhYmlsaXR5IG1hcCBhcmUgdmFsaWRhdGVkLiBUaGVcbiAqIGNoZWNrIGlzIHB1cmVseSBkZWNsYXJhdGl2ZSDigJQgbm8gYmluYXJ5IGlzIGV4ZWN1dGVkIOKAlCBzbyBzeW50aCBiZWhhdmVzXG4gKiBpZGVudGljYWxseSBpbiBDSSwgcGFja2FnZSBidWlsZHMsIGFuZCBlbnZpcm9ubWVudHMgd2l0aG91dCBUZXJyYWZvcm0gb3JcbiAqIE9wZW5Ub2Z1IGluc3RhbGxlZC4gVmVyaWZ5aW5nIHRoZSBhY3R1YWxseSBpbnN0YWxsZWQgYmluYXJ5IGlzIHRoZVxuICogc2VwYXJhdGUsIG9wdC1pbiBgdmFsaWRhdGVJbnN0YWxsZWRCaW5hcnlgIENMSSBiZWhhdmlvci5cbiAqXG4gKiBGdW5jdGlvbnMgdXNlZCB2aWEgcmF3IGVzY2FwZSBoYXRjaGVzIChvdmVycmlkZXMsIGhhbmQtd3JpdHRlbiBleHByZXNzaW9uXG4gKiBzdHJpbmdzKSBhcmUgbm90IHRyYWNrZWQgYW5kIHRoZXJlZm9yZSBub3QgdmFsaWRhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVGdW5jdGlvblZlcnNpb25TdXBwb3J0IGltcGxlbWVudHMgSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2NvcGU6IElDb25zdHJ1Y3QpIHt9XG5cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIGNvbnN0IGNvbnN0cmFpbmVkRnVuY3Rpb25zID0gZ2V0VXNlZEZ1bmN0aW9ucygpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBuYW1lIGluIGZ1bmN0aW9uVmVyc2lvbkNvbnN0cmFpbnRzKVxuICAgICAgLnNvcnQoKTtcblxuICAgIC8vIG9ubHkgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIGZ1bmN0aW9ucyBpbiB1c2U6IG5vdGhpbmcgdG8gdmFsaWRhdGVcbiAgICBpZiAoY29uc3RyYWluZWRGdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgeyB0YXJnZXRzLCBlcnJvcnMgfSA9IHJlc29sdmVUYXJnZXRWZXJzaW9ucyh0aGlzLnNjb3BlKTtcbiAgICBpZiAoIXRhcmdldHMpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbmVkRnVuY3Rpb25zLmZsYXRNYXAoKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvcnRlZEluID0gZnVuY3Rpb25WZXJzaW9uQ29uc3RyYWludHNbbmFtZV07XG4gICAgICByZXR1cm4gY2hlY2tGZWF0dXJlU3VwcG9ydGVkQnlUYXJnZXRzKFxuICAgICAgICBgVGVycmFmb3JtIGZ1bmN0aW9uIFwiJHtuYW1lfVwiYCxcbiAgICAgICAgc3VwcG9ydGVkSW4sXG4gICAgICAgIHRhcmdldHMsXG4gICAgICAgIGF2YWlsYWJpbGl0eUhpbnQoc3VwcG9ydGVkSW4pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHRoZSB1c2VyIHdoZXJlIHRoZSBmdW5jdGlvbiBJUyBhdmFpbGFibGUsIHNvIHRoZXkgY2FuIGFkanVzdCB0aGVpclxuICogZGVjbGFyZWQgdGFyZ2V0VmVyc2lvbnMgKG9yIGRyb3AgdGhlIGZ1bmN0aW9uKS5cbiAqL1xuZnVuY3Rpb24gYXZhaWxhYmlsaXR5SGludChzdXBwb3J0ZWRJbjogRnVuY3Rpb25WZXJzaW9uQ29uc3RyYWludHMpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEluKS5tYXAoXG4gICAgKFtwcm9kdWN0LCByYW5nZV0pID0+IGAke3Byb2R1Y3R9ICR7cmFuZ2V9YCxcbiAgKTtcbiAgcmV0dXJuIGBJdCBpcyBhdmFpbGFibGUgaW4gJHtwYXJ0cy5qb2luKFwiIGFuZCBcIil9LmA7XG59XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type TerraformCliName = "terraform" | "opentofu" | "unknown";
|
|
2
|
+
export interface TerraformCliVersion {
|
|
3
|
+
readonly name: TerraformCliName;
|
|
4
|
+
readonly version?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The versions at which Terraform and OpenTofu support a feature, as npm
|
|
8
|
+
* semver ranges. A missing product key means the feature is not supported by
|
|
9
|
+
* that product at any version.
|
|
10
|
+
*
|
|
11
|
+
* Features can become available in Terraform and OpenTofu at different
|
|
12
|
+
* versions, so the validation matrix is feature -> product -> semver range.
|
|
13
|
+
* Used together with the project's declared targets, see
|
|
14
|
+
* ValidateFeatureTargetSupport.
|
|
15
|
+
*/
|
|
16
|
+
export interface TerraformFeatureVersionConstraints {
|
|
17
|
+
readonly terraform?: string;
|
|
18
|
+
readonly opentofu?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses the output of `terraform version` or `tofu version`.
|
|
22
|
+
*
|
|
23
|
+
* Plain text version output is used because both Terraform and OpenTofu expose
|
|
24
|
+
* a Terraform-compatible `terraform_version` key in `version -json` output.
|
|
25
|
+
*
|
|
26
|
+
* Note: synth-time validations check features against the project's declared
|
|
27
|
+
* `targetVersions` and do not execute any binary; this parser exists for
|
|
28
|
+
* consumers that explicitly interact with an installed CLI (e.g. the opt-in
|
|
29
|
+
* validateInstalledBinary behavior in the cdktn CLI). This is the canonical
|
|
30
|
+
* definition; `@cdktn/commons` imports it (commons depends on cdktn). Its
|
|
31
|
+
* return type uses a string-literal union, so it is kept out of cdktn's
|
|
32
|
+
* public (jsii) API and consumed via subpath import.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseTerraformCliVersion(versionOutput: string): TerraformCliVersion;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) HashiCorp, Inc
|
|
3
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.parseTerraformCliVersion = parseTerraformCliVersion;
|
|
6
|
+
/**
|
|
7
|
+
* Parses the output of `terraform version` or `tofu version`.
|
|
8
|
+
*
|
|
9
|
+
* Plain text version output is used because both Terraform and OpenTofu expose
|
|
10
|
+
* a Terraform-compatible `terraform_version` key in `version -json` output.
|
|
11
|
+
*
|
|
12
|
+
* Note: synth-time validations check features against the project's declared
|
|
13
|
+
* `targetVersions` and do not execute any binary; this parser exists for
|
|
14
|
+
* consumers that explicitly interact with an installed CLI (e.g. the opt-in
|
|
15
|
+
* validateInstalledBinary behavior in the cdktn CLI). This is the canonical
|
|
16
|
+
* definition; `@cdktn/commons` imports it (commons depends on cdktn). Its
|
|
17
|
+
* return type uses a string-literal union, so it is kept out of cdktn's
|
|
18
|
+
* public (jsii) API and consumed via subpath import.
|
|
19
|
+
*/
|
|
20
|
+
function parseTerraformCliVersion(versionOutput) {
|
|
21
|
+
const firstLine = versionOutput.trim().split(/\r?\n/)[0] || "";
|
|
22
|
+
const firstLineMatch = firstLine.match(/^(Terraform|OpenTofu) v(\d+\.\d+\.\d+(?:[-+][^\s]+)?)/);
|
|
23
|
+
if (firstLineMatch) {
|
|
24
|
+
return {
|
|
25
|
+
name: firstLineMatch[1] === "OpenTofu" ? "opentofu" : "terraform",
|
|
26
|
+
version: firstLineMatch[2],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
name: "unknown",
|
|
31
|
+
version: versionOutput.match(/\d+\.\d+\.\d+(?:[-+][^\s]+)?/)?.[0],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVycmFmb3JtLWZlYXR1cmUtdmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9ucy92YWxpZGF0ZS10ZXJyYWZvcm0tZmVhdHVyZS12ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DOztBQXNDbkMsNERBbUJDO0FBakNEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsYUFBcUI7SUFFckIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0QsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FDcEMsdURBQXVELENBQ3hELENBQUM7SUFFRixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE9BQU87WUFDTCxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2pFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNsRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmV4cG9ydCB0eXBlIFRlcnJhZm9ybUNsaU5hbWUgPSBcInRlcnJhZm9ybVwiIHwgXCJvcGVudG9mdVwiIHwgXCJ1bmtub3duXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtQ2xpVmVyc2lvbiB7XG4gIHJlYWRvbmx5IG5hbWU6IFRlcnJhZm9ybUNsaU5hbWU7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb25zIGF0IHdoaWNoIFRlcnJhZm9ybSBhbmQgT3BlblRvZnUgc3VwcG9ydCBhIGZlYXR1cmUsIGFzIG5wbVxuICogc2VtdmVyIHJhbmdlcy4gQSBtaXNzaW5nIHByb2R1Y3Qga2V5IG1lYW5zIHRoZSBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAqIHRoYXQgcHJvZHVjdCBhdCBhbnkgdmVyc2lvbi5cbiAqXG4gKiBGZWF0dXJlcyBjYW4gYmVjb21lIGF2YWlsYWJsZSBpbiBUZXJyYWZvcm0gYW5kIE9wZW5Ub2Z1IGF0IGRpZmZlcmVudFxuICogdmVyc2lvbnMsIHNvIHRoZSB2YWxpZGF0aW9uIG1hdHJpeCBpcyBmZWF0dXJlIC0+IHByb2R1Y3QgLT4gc2VtdmVyIHJhbmdlLlxuICogVXNlZCB0b2dldGhlciB3aXRoIHRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgdGFyZ2V0cywgc2VlXG4gKiBWYWxpZGF0ZUZlYXR1cmVUYXJnZXRTdXBwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybUZlYXR1cmVWZXJzaW9uQ29uc3RyYWludHMge1xuICByZWFkb25seSB0ZXJyYWZvcm0/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wZW50b2Z1Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgb3V0cHV0IG9mIGB0ZXJyYWZvcm0gdmVyc2lvbmAgb3IgYHRvZnUgdmVyc2lvbmAuXG4gKlxuICogUGxhaW4gdGV4dCB2ZXJzaW9uIG91dHB1dCBpcyB1c2VkIGJlY2F1c2UgYm90aCBUZXJyYWZvcm0gYW5kIE9wZW5Ub2Z1IGV4cG9zZVxuICogYSBUZXJyYWZvcm0tY29tcGF0aWJsZSBgdGVycmFmb3JtX3ZlcnNpb25gIGtleSBpbiBgdmVyc2lvbiAtanNvbmAgb3V0cHV0LlxuICpcbiAqIE5vdGU6IHN5bnRoLXRpbWUgdmFsaWRhdGlvbnMgY2hlY2sgZmVhdHVyZXMgYWdhaW5zdCB0aGUgcHJvamVjdCdzIGRlY2xhcmVkXG4gKiBgdGFyZ2V0VmVyc2lvbnNgIGFuZCBkbyBub3QgZXhlY3V0ZSBhbnkgYmluYXJ5OyB0aGlzIHBhcnNlciBleGlzdHMgZm9yXG4gKiBjb25zdW1lcnMgdGhhdCBleHBsaWNpdGx5IGludGVyYWN0IHdpdGggYW4gaW5zdGFsbGVkIENMSSAoZS5nLiB0aGUgb3B0LWluXG4gKiB2YWxpZGF0ZUluc3RhbGxlZEJpbmFyeSBiZWhhdmlvciBpbiB0aGUgY2RrdG4gQ0xJKS4gVGhpcyBpcyB0aGUgY2Fub25pY2FsXG4gKiBkZWZpbml0aW9uOyBgQGNka3RuL2NvbW1vbnNgIGltcG9ydHMgaXQgKGNvbW1vbnMgZGVwZW5kcyBvbiBjZGt0bikuIEl0c1xuICogcmV0dXJuIHR5cGUgdXNlcyBhIHN0cmluZy1saXRlcmFsIHVuaW9uLCBzbyBpdCBpcyBrZXB0IG91dCBvZiBjZGt0bidzXG4gKiBwdWJsaWMgKGpzaWkpIEFQSSBhbmQgY29uc3VtZWQgdmlhIHN1YnBhdGggaW1wb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXJyYWZvcm1DbGlWZXJzaW9uKFxuICB2ZXJzaW9uT3V0cHV0OiBzdHJpbmcsXG4pOiBUZXJyYWZvcm1DbGlWZXJzaW9uIHtcbiAgY29uc3QgZmlyc3RMaW5lID0gdmVyc2lvbk91dHB1dC50cmltKCkuc3BsaXQoL1xccj9cXG4vKVswXSB8fCBcIlwiO1xuICBjb25zdCBmaXJzdExpbmVNYXRjaCA9IGZpcnN0TGluZS5tYXRjaChcbiAgICAvXihUZXJyYWZvcm18T3BlblRvZnUpIHYoXFxkK1xcLlxcZCtcXC5cXGQrKD86Wy0rXVteXFxzXSspPykvLFxuICApO1xuXG4gIGlmIChmaXJzdExpbmVNYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBmaXJzdExpbmVNYXRjaFsxXSA9PT0gXCJPcGVuVG9mdVwiID8gXCJvcGVudG9mdVwiIDogXCJ0ZXJyYWZvcm1cIixcbiAgICAgIHZlcnNpb246IGZpcnN0TGluZU1hdGNoWzJdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidW5rbm93blwiLFxuICAgIHZlcnNpb246IHZlcnNpb25PdXRwdXQubWF0Y2goL1xcZCtcXC5cXGQrXFwuXFxkKyg/OlstK11bXlxcc10rKT8vKT8uWzBdLFxuICB9O1xufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
MIT License
|
|
1
|
+
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) Ruben Bridgewater
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type Replacer = (number | string)[] | null | undefined | ((key: string, value: unknown) => string | number | boolean | null | object)
|
|
2
|
+
|
|
3
|
+
export function stringify(value: undefined | symbol | ((...args: unknown[]) => unknown), replacer?: Replacer, space?: string | number): undefined
|
|
4
|
+
export function stringify(value: string | number | unknown[] | null | boolean | object, replacer?: Replacer, space?: string | number): string
|
|
5
|
+
export function stringify(value: unknown, replacer?: ((key: string, value: unknown) => unknown) | (number | string)[] | null | undefined, space?: string | number): string | undefined
|
|
6
|
+
|
|
7
|
+
export interface StringifyOptions {
|
|
8
|
+
bigint?: boolean,
|
|
9
|
+
circularValue?: string | null | TypeErrorConstructor | ErrorConstructor,
|
|
10
|
+
deterministic?: boolean | ((a: string, b: string) => number),
|
|
11
|
+
maximumBreadth?: number,
|
|
12
|
+
maximumDepth?: number,
|
|
13
|
+
strict?: boolean,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export namespace stringify {
|
|
17
|
+
export function configure(options: StringifyOptions): typeof stringify
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function configure(options: StringifyOptions): typeof stringify
|
|
21
|
+
|
|
22
|
+
export default stringify
|