diff --git a/release-bin/cfn-validate-darwin-aarch64 b/release-bin/cfn-validate-darwin-aarch64 index 5252d2a3..f3b30079 100644 Binary files a/release-bin/cfn-validate-darwin-aarch64 and b/release-bin/cfn-validate-darwin-aarch64 differ diff --git a/release-bin/cfn-validate-darwin-x64 b/release-bin/cfn-validate-darwin-x64 index ae0c352d..b92f16a9 100644 Binary files a/release-bin/cfn-validate-darwin-x64 and b/release-bin/cfn-validate-darwin-x64 differ diff --git a/release-bin/cfn-validate-linux-aarch64 b/release-bin/cfn-validate-linux-aarch64 index efc95506..88d4e82e 100644 Binary files a/release-bin/cfn-validate-linux-aarch64 and b/release-bin/cfn-validate-linux-aarch64 differ diff --git a/release-bin/cfn-validate-linux-x64 b/release-bin/cfn-validate-linux-x64 index 08b932d5..70641b93 100644 Binary files a/release-bin/cfn-validate-linux-x64 and b/release-bin/cfn-validate-linux-x64 differ diff --git a/release-bin/cfn-validate-win32-aarch64.exe b/release-bin/cfn-validate-win32-aarch64.exe index bc3ecbeb..4e8c44ef 100644 Binary files a/release-bin/cfn-validate-win32-aarch64.exe and b/release-bin/cfn-validate-win32-aarch64.exe differ diff --git a/release-bin/cfn-validate-win32-x64.exe b/release-bin/cfn-validate-win32-x64.exe index b2e54a50..fa75c3a6 100644 Binary files a/release-bin/cfn-validate-win32-x64.exe and b/release-bin/cfn-validate-win32-x64.exe differ diff --git a/src/THIRD-PARTY-LICENSES.txt b/src/THIRD-PARTY-LICENSES.txt index 8b6e4e49..5c63b722 100644 --- a/src/THIRD-PARTY-LICENSES.txt +++ b/src/THIRD-PARTY-LICENSES.txt @@ -6365,7 +6365,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17255,7 +17255,7 @@ limitations under the License. ****************************** performance-harness -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-go/go/THIRD-PARTY-LICENSES.txt b/src/bindings-go/go/THIRD-PARTY-LICENSES.txt index 618a5adf..05b3f223 100644 --- a/src/bindings-go/go/THIRD-PARTY-LICENSES.txt +++ b/src/bindings-go/go/THIRD-PARTY-LICENSES.txt @@ -2857,7 +2857,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-go/go/libs/darwin-aarch64/libbindings_go.a b/src/bindings-go/go/libs/darwin-aarch64/libbindings_go.a index cfdc6a76..fa7ccb28 100644 Binary files a/src/bindings-go/go/libs/darwin-aarch64/libbindings_go.a and b/src/bindings-go/go/libs/darwin-aarch64/libbindings_go.a differ diff --git a/src/bindings-go/go/libs/darwin-x86-64/libbindings_go.a b/src/bindings-go/go/libs/darwin-x86-64/libbindings_go.a index eba0afe9..854dfbe5 100644 Binary files a/src/bindings-go/go/libs/darwin-x86-64/libbindings_go.a and b/src/bindings-go/go/libs/darwin-x86-64/libbindings_go.a differ diff --git a/src/bindings-go/go/libs/linux-aarch64/libbindings_go.a b/src/bindings-go/go/libs/linux-aarch64/libbindings_go.a index 6e02f23f..128c95ff 100644 Binary files a/src/bindings-go/go/libs/linux-aarch64/libbindings_go.a and b/src/bindings-go/go/libs/linux-aarch64/libbindings_go.a differ diff --git a/src/bindings-go/go/libs/linux-x86-64/libbindings_go.a b/src/bindings-go/go/libs/linux-x86-64/libbindings_go.a index d52d3f0d..7d6b9a7d 100644 Binary files a/src/bindings-go/go/libs/linux-x86-64/libbindings_go.a and b/src/bindings-go/go/libs/linux-x86-64/libbindings_go.a differ diff --git a/src/bindings-go/go/libs/win32-x86-64/libbindings_go.a b/src/bindings-go/go/libs/win32-x86-64/libbindings_go.a index 5b47e65d..b1837010 100644 Binary files a/src/bindings-go/go/libs/win32-x86-64/libbindings_go.a and b/src/bindings-go/go/libs/win32-x86-64/libbindings_go.a differ diff --git a/src/bindings-jvm/THIRD-PARTY-LICENSES.txt b/src/bindings-jvm/THIRD-PARTY-LICENSES.txt index d068bb9c..c9f1549b 100644 --- a/src/bindings-jvm/THIRD-PARTY-LICENSES.txt +++ b/src/bindings-jvm/THIRD-PARTY-LICENSES.txt @@ -4804,7 +4804,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-jvm/generated/cloudformation-validate.jar b/src/bindings-jvm/generated/cloudformation-validate.jar index c6c15324..84b17152 100644 Binary files a/src/bindings-jvm/generated/cloudformation-validate.jar and b/src/bindings-jvm/generated/cloudformation-validate.jar differ diff --git a/src/bindings-jvm/version.properties b/src/bindings-jvm/version.properties index 1ebd9a5b..d2ad2e15 100644 --- a/src/bindings-jvm/version.properties +++ b/src/bindings-jvm/version.properties @@ -1,5 +1,5 @@ # Generated by generate-version-properties.sh - do not edit manually. -publishVersion=1.11.0 +publishVersion=1.12.0 jnaVersion=5.19.1 gsonVersion=2.14.0 kotlinVersion=2.4.0 diff --git a/src/bindings-python/THIRD-PARTY-LICENSES.txt b/src/bindings-python/THIRD-PARTY-LICENSES.txt index 31269b87..39498500 100644 --- a/src/bindings-python/THIRD-PARTY-LICENSES.txt +++ b/src/bindings-python/THIRD-PARTY-LICENSES.txt @@ -2857,7 +2857,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_10_12_x86_64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_10_12_x86_64.whl deleted file mode 100644 index de36d411..00000000 Binary files a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_10_12_x86_64.whl and /dev/null differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_11_0_arm64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_11_0_arm64.whl deleted file mode 100644 index 272a3682..00000000 Binary files a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-macosx_11_0_arm64.whl and /dev/null differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_aarch64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_aarch64.whl deleted file mode 100644 index bd9d30b3..00000000 Binary files a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_aarch64.whl and /dev/null differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_x86_64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_x86_64.whl deleted file mode 100644 index 9a73cbf9..00000000 Binary files a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-manylinux_2_34_x86_64.whl and /dev/null differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-win_amd64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-win_amd64.whl deleted file mode 100644 index a7c0e72b..00000000 Binary files a/src/bindings-python/generated/dist/cloudformation_validate-1.11.0-py3-none-win_amd64.whl and /dev/null differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_10_12_x86_64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_10_12_x86_64.whl new file mode 100644 index 00000000..d0969f57 Binary files /dev/null and b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_10_12_x86_64.whl differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_11_0_arm64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_11_0_arm64.whl new file mode 100644 index 00000000..e771e63a Binary files /dev/null and b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-macosx_11_0_arm64.whl differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_aarch64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_aarch64.whl new file mode 100644 index 00000000..9dbfd2f0 Binary files /dev/null and b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_aarch64.whl differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_x86_64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_x86_64.whl new file mode 100644 index 00000000..785e5859 Binary files /dev/null and b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-manylinux_2_34_x86_64.whl differ diff --git a/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-win_amd64.whl b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-win_amd64.whl new file mode 100644 index 00000000..8686689b Binary files /dev/null and b/src/bindings-python/generated/dist/cloudformation_validate-1.12.0-py3-none-win_amd64.whl differ diff --git a/src/bindings-wasm/THIRD-PARTY-LICENSES.txt b/src/bindings-wasm/THIRD-PARTY-LICENSES.txt index 6c4eabb9..b90d7e3c 100644 --- a/src/bindings-wasm/THIRD-PARTY-LICENSES.txt +++ b/src/bindings-wasm/THIRD-PARTY-LICENSES.txt @@ -2383,7 +2383,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-wasm/dist/README.md b/src/bindings-wasm/dist/README.md index 33872351..bd2acfbc 100644 --- a/src/bindings-wasm/dist/README.md +++ b/src/bindings-wasm/dist/README.md @@ -48,8 +48,27 @@ templates. Every fallible call throws on failure - the thrown value is the error core, so handle it with `catch (error) { String(error) }`; internal panics are caught at the WASM boundary and surface the same way, never a process abort. `version()` returns the version of the bundled validation core. -A template is passed as a `TemplateFile`, which wraps a filesystem path: the engine reads the bytes and uses the path -for diagnostic source locations. +A template is passed as a `Template` - either a `TemplateFile`, which wraps a filesystem path the engine reads, or a +`TemplateContent`, which carries template text or bytes already in memory so nothing is read from disk. The file path +or the content `name` labels the report and its diagnostics; an omitted `TemplateContent` name defaults to +`"template"` (`DEFAULT_TEMPLATE_NAME`). + +```typescript +type Template = TemplateFile | TemplateContent; + +class TemplateFile { + constructor(path: string); // template read from disk +} + +class TemplateContent { + constructor(content: string | Uint8Array, name?: string); // in-memory UTF-8 text or raw bytes +} + +const fromDisk = engine.validateTemplate(new TemplateFile("template.yaml")); +const fromMemory = engine.validateTemplate(new TemplateContent("Resources: {}", "inline.yaml")); +``` + +`TemplateModel` and `SchemaValidator.validate` accept the same `Template` union. ## Engine @@ -61,7 +80,7 @@ CEL, and Guard rules on top of the built-in rules - see [CompositeEngine](#compo ```typescript interface Engine { - validateTemplate(template: TemplateFile, config?: ValidateConfig): ValidationReport; + validateTemplate(template: Template, config?: ValidateConfig): ValidationReport; validateAwsCliCommand(request: AwsCliCommand): AwsCliCommandValidation; listRules(): RuleInfo[]; engineName(): string; @@ -278,6 +297,7 @@ against. ```typescript const model = new TemplateModel(new TemplateFile("template.yaml")); +const inMemory = new TemplateModel(new TemplateContent("Resources: {}")); ``` | Method | Returns | Description | @@ -311,7 +331,7 @@ try { | Method | Returns | Description | |--------------------------------|-------------------|------------------------------------------------------------------------------------------------------------------| | `new SchemaValidator(config?)` | `SchemaValidator` | Constructs a validator; an omitted `SchemaValidatorConfig` uses only the bundled schemas | -| `validate(template, region?)` | `Diagnostic[]` | Schema diagnostics at `STANDARD` detail - the enrichment fields are absent. `region` defaults to `"us-east-1"`. | +| `validate(template, region?)` | `Diagnostic[]` | Schema diagnostics for a `Template` at `STANDARD` detail - the enrichment fields are absent. `region` defaults to `"us-east-1"`. | | `listRules()` | `RuleInfo[]` | Schema rule metadata | | `schemaCount()` | `number` | Number of compiled provider schemas | | `free()` | `void` | Releases the validator's off-heap memory; the validator must not be used afterwards | diff --git a/src/bindings-wasm/dist/THIRD-PARTY-LICENSES.txt b/src/bindings-wasm/dist/THIRD-PARTY-LICENSES.txt index 6c4eabb9..b90d7e3c 100644 --- a/src/bindings-wasm/dist/THIRD-PARTY-LICENSES.txt +++ b/src/bindings-wasm/dist/THIRD-PARTY-LICENSES.txt @@ -2383,7 +2383,7 @@ limitations under the License. ****************************** cloudformation-validate-composite-engine -1.11.0 +1.12.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/src/bindings-wasm/dist/bindings_wasm_bg.wasm b/src/bindings-wasm/dist/bindings_wasm_bg.wasm index 61c68186..36aaf9b7 100644 Binary files a/src/bindings-wasm/dist/bindings_wasm_bg.wasm and b/src/bindings-wasm/dist/bindings_wasm_bg.wasm differ diff --git a/src/bindings-wasm/dist/index.d.ts b/src/bindings-wasm/dist/index.d.ts index cf00a39e..c864aa30 100644 --- a/src/bindings-wasm/dist/index.d.ts +++ b/src/bindings-wasm/dist/index.d.ts @@ -131,27 +131,43 @@ export interface AwsCliCommandValidation { template: Uint8Array | null; } export interface Engine { - validateTemplate(template: TemplateFile, config?: ValidateConfig): ValidationReport; + validateTemplate(template: Template, config?: ValidateConfig): ValidationReport; /** * @deprecated Use {@link validateTemplate} with `detailLevel: 'STANDARD'`. Any `detailLevel` * in `config` is overridden by `'STANDARD'`. */ - validateStandard(template: TemplateFile, config?: ValidateConfig): StandardReport; + validateStandard(template: Template, config?: ValidateConfig): StandardReport; /** * @deprecated Use {@link validateTemplate}; `DETAILED` is already its default. Any `detailLevel` * in `config` is overridden by `'DETAILED'`. */ - validateDetailed(template: TemplateFile, config?: ValidateConfig): DetailedReport; + validateDetailed(template: Template, config?: ValidateConfig): DetailedReport; validateAwsCliCommand(request: AwsCliCommand): AwsCliCommandValidation; listRules(): RuleInfo[]; engineName(): string; free(): void; } +/** Name reported for an in-memory template when the caller does not supply one. */ +export declare const DEFAULT_TEMPLATE_NAME = 'template'; +/** A template read from disk; the path labels the report and its diagnostics. */ export declare class TemplateFile { readonly path: string; constructor(path: string); readBytes(): Uint8Array; } +/** + * A template already held in memory as UTF-8 text or raw bytes, so nothing is + * read from disk. `name` labels the report and its diagnostics exactly like a + * {@link TemplateFile} path does and defaults to {@link DEFAULT_TEMPLATE_NAME}. + */ +export declare class TemplateContent { + readonly content: string | Uint8Array; + readonly name: string; + constructor(content: string | Uint8Array, name?: string); + readBytes(): Uint8Array; +} +/** A template source accepted by every template-consuming API: on disk or in memory. */ +export type Template = TemplateFile | TemplateContent; export declare class RuleFile { readonly path: string; constructor(path: string); @@ -212,7 +228,7 @@ export interface SchemaValidatorConfig { } export declare class TemplateModel { private readonly inner; - constructor(template: TemplateFile); + constructor(template: Template); resources(): Record; parameters(): Record; outputs(): Record; @@ -229,7 +245,7 @@ export declare class SchemaValidator { constructor(config?: SchemaValidatorConfig); listRules(): RuleInfo[]; schemaCount(): number; - validate(template: TemplateFile, region?: string): Diagnostic[]; + validate(template: Template, region?: string): Diagnostic[]; free(): void; } export declare const RegoEngine: new (config?: EngineConfig) => Engine; diff --git a/src/bindings-wasm/dist/index.js b/src/bindings-wasm/dist/index.js index eedc5cb0..33d931de 100644 --- a/src/bindings-wasm/dist/index.js +++ b/src/bindings-wasm/dist/index.js @@ -7,7 +7,9 @@ exports.CompositeEngine = exports.TemplateModel = exports.SchemaFile = exports.RuleFile = + exports.TemplateContent = exports.TemplateFile = + exports.DEFAULT_TEMPLATE_NAME = exports.AwsCliCommand = void 0; exports.version = version; @@ -199,6 +201,9 @@ function fromWireAwsCliCommandValidation(validation) { }; } const bridge = require('./bindings_wasm'); +/** Name reported for an in-memory template when the caller does not supply one. */ +exports.DEFAULT_TEMPLATE_NAME = 'template'; +/** A template read from disk; the path labels the report and its diagnostics. */ class TemplateFile { constructor(path) { this.path = path; @@ -208,6 +213,27 @@ class TemplateFile { } } exports.TemplateFile = TemplateFile; +/** + * A template already held in memory as UTF-8 text or raw bytes, so nothing is + * read from disk. `name` labels the report and its diagnostics exactly like a + * {@link TemplateFile} path does and defaults to {@link DEFAULT_TEMPLATE_NAME}. + */ +class TemplateContent { + constructor(content, name = exports.DEFAULT_TEMPLATE_NAME) { + this.content = content; + this.name = name; + if (typeof content !== 'string' && !(content instanceof Uint8Array)) { + throw new TypeError('template content must be a string or a Uint8Array'); + } + } + readBytes() { + return typeof this.content === 'string' ? new TextEncoder().encode(this.content) : this.content; + } +} +exports.TemplateContent = TemplateContent; +function templateLabel(template) { + return template instanceof TemplateContent ? template.name : template.path; +} class RuleFile { constructor(path) { this.path = path; @@ -330,7 +356,7 @@ function createEngineClass(WasmClass, toWasmConfig) { this.inner = new WasmClass(toWasmConfig(config)); } validateTemplate(template, config) { - return this.inner.validateTemplate(template.readBytes(), config ?? {}, template.path); + return this.inner.validateTemplate(template.readBytes(), config ?? {}, templateLabel(template)); } validateStandard(template, config) { return this.validateTemplate(template, { ...config, detailLevel: 'STANDARD' }); diff --git a/src/bindings-wasm/dist/package.json b/src/bindings-wasm/dist/package.json index 8222481c..41ed7f88 100644 --- a/src/bindings-wasm/dist/package.json +++ b/src/bindings-wasm/dist/package.json @@ -1,6 +1,6 @@ { "name": "@aws/cloudformation-validate", - "version": "1.11.0", + "version": "1.12.0", "description": "Fast, offline, embeddable validation for AWS CloudFormation templates", "keywords": [ "aws",