VaporShell.SAM.psm1

# PSM1 Contents
function Format-Json {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [String]
        $Json
    )
    Begin {
        $cleaner = {
            param([String]$Line)
            Process{
                [Regex]::Replace(
                    $Line,
                    "\\u(?<Value>[a-zA-Z0-9]{4})",
                    {
                        param($m)([char]([int]::Parse(
                            $m.Groups['Value'].Value,
                            [System.Globalization.NumberStyles]::HexNumber
                        ))).ToString()
                    }
                )
            }
        }
    }
    Process {
        if ($PSVersionTable.PSVersion.Major -lt 6) {
            try {
                $indent = 0;
                $res = $Json -split '\n' | ForEach-Object {
                    if ($_ -match '[\}\]]') {
                        # This line contains ] or }, decrement the indentation level
                        $indent--
                    }
                    $line = (' ' * $indent * 2) + $_.TrimStart().Replace(': ', ': ')
                    if ($_ -match '[\{\[]') {
                        # This line contains [ or {, increment the indentation level
                        $indent++
                    }
                    $cleaner.Invoke($line)
                }
                $res -join "`n"
            }
            catch {
                ($Json -split '\n' | ForEach-Object {$cleaner.Invoke($_)}) -join "`n"
            }
        }
        else {
            ($Json -split '\n' | ForEach-Object {$cleaner.Invoke($_)}) -join "`n"
        }
    }
}

function Get-TrueCount {
    Param
    (
        [parameter(Mandatory = $false,Position = 0,ValueFromPipeline = $true)]
        $Array
    )
    Process {
        if ($array) {
            if ($array.Count) {
                $count = $array.Count
            }
            else {
                $count = 1
            }
        }
        else {
            $count = 0
        }
    }
    End {
        return $count
    }
}

function New-VSError {
    <#
    .SYNOPSIS
    Error generator function to use in tandem with $PSCmdlet.ThrowTerminatingError()
    
    .PARAMETER Result
    Allows input of an error from AWS SDK, resulting in the Exception message being parsed out.
    
    .PARAMETER String
    Used to create basic String message errors in the same wrapper
    #>

    [cmdletbinding(DefaultParameterSetName="Result")]
    param(
        [parameter(Position=0,ParameterSetName="Result")]
        $Result,
        [parameter(Position=0,ParameterSetName="String")]
        $String
    )
    switch ($PSCmdlet.ParameterSetName) {
        Result { $Exception = "$($result.Exception.InnerException.Message)" }
        String { $Exception = "$String" }
    }
    $e = New-Object "System.Exception" $Exception
    $errorRecord = New-Object 'System.Management.Automation.ErrorRecord' $e, $null, ([System.Management.Automation.ErrorCategory]::InvalidOperation), $null
    return $errorRecord
}

function ResolveS3Endpoint {
    <#
    .SYNOPSIS
    Resolves the S3 endpoint most appropriate for each region.
    #>

    Param
    (
      [parameter(Mandatory=$true,Position=0)]
      [ValidateSet("eu-west-2","ap-south-1","us-east-2","sa-east-1","us-west-1","us-west-2","eu-west-1","ap-southeast-2","ca-central-1","ap-northeast-2","us-east-1","eu-central-1","ap-southeast-1","ap-northeast-1")]
      [String]
      $Region
    )
    $endpointMap = @{
        "us-east-2" = "s3.us-east-2.amazonaws.com"
        "us-east-1" = "s3.amazonaws.com"
        "us-west-1" = "s3-us-west-1.amazonaws.com"
        "us-west-2" = "s3-us-west-2.amazonaws.com"
        "ca-central-1" = "s3.ca-central-1.amazonaws.com"
        "ap-south-1" = "s3.ap-south-1.amazonaws.com"
        "ap-northeast-2" = "s3.ap-northeast-2.amazonaws.com"
        "ap-southeast-1" = "s3-ap-southeast-1.amazonaws.com"
        "ap-southeast-2" = "s3-ap-southeast-2.amazonaws.com"
        "ap-northeast-1" = "s3-ap-northeast-1.amazonaws.com"
        "eu-central-1" = "s3.eu-central-1.amazonaws.com"
        "eu-west-1" = "s3-eu-west-1.amazonaws.com"
        "eu-west-2" = "s3.eu-west-2.amazonaws.com"
        "sa-east-1" = "s3-sa-east-1.amazonaws.com"
    }
    return $endpointMap[$Region]
}

function Add-VSSAMApiAccessLogSetting {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.AccessLogSetting resource property to the template. The AccessLogSetting property type specifies settings for logging access in this stage.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.AccessLogSetting resource property to the template.
The AccessLogSetting property type specifies settings for logging access in this stage.

AccessLogSetting is a property of the AWS::ApiGateway::Stage: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html resource.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html

    .PARAMETER DestinationArn
        The Amazon Resource Name ARN of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with amazon-apigateway-.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-destinationarn
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Format
        A single line format of the access logs of data, as specified by selected $context variables: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference. The format must include at least $context.requestId.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-format
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiAccessLogSetting])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DestinationArn,
        [parameter(Mandatory = $false)]
        [object]
        $Format
    )
    Process {
        $obj = [SAMApiAccessLogSetting]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiAccessLogSetting'

function Add-VSSAMApiAuth {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.Auth resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.Auth resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api-auth-object

    .PARAMETER DefaultAuthorizer
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api-auth-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Authorizers
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api-auth-object
        PrimitiveType: Json
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiAuth])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DefaultAuthorizer,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Authorizers
    )
    Process {
        $obj = [SAMApiAuth]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiAuth'

function Add-VSSAMApiCanarySetting {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.CanarySetting resource property to the template. The CanarySetting property type specifies settings for the canary deployment in this stage.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.CanarySetting resource property to the template.
The CanarySetting property type specifies settings for the canary deployment in this stage.

CanarySetting is a property of the AWS::ApiGateway::Stage: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html resource.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html

    .PARAMETER DeploymentId
        The identifier of the deployment that the stage points to.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-deploymentid
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER PercentTraffic
        The percentage 0-100 of traffic diverted to a canary deployment.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-percenttraffic
        PrimitiveType: Double
        UpdateType: Immutable

    .PARAMETER StageVariableOverrides
        Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.
Duplicates are not allowed.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-stagevariableoverrides
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER UseStageCache
        Whether the canary deployment uses the stage cache or not.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-usestagecache
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiCanarySetting])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DeploymentId,
        [parameter(Mandatory = $false)]
        [object]
        $PercentTraffic,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $StageVariableOverrides,
        [parameter(Mandatory = $false)]
        [object]
        $UseStageCache
    )
    Process {
        $obj = [SAMApiCanarySetting]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiCanarySetting'

function Add-VSSAMApiCorsConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.CorsConfiguration resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.CorsConfiguration resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration

    .PARAMETER AllowMethods
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowHeaders
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowOrigin
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER MaxAge
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowCredentials
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiCorsConfiguration])]
    [cmdletbinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword","AllowCredentials")]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingUserNameAndPasswordParams","AllowCredentials")]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $AllowMethods,
        [parameter(Mandatory = $false)]
        [object]
        $AllowHeaders,
        [parameter(Mandatory = $true)]
        [object]
        $AllowOrigin,
        [parameter(Mandatory = $false)]
        [object]
        $MaxAge,
        [parameter(Mandatory = $false)]
        [object]
        $AllowCredentials
    )
    Process {
        $obj = [SAMApiCorsConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiCorsConfiguration'

function Add-VSSAMApiEndpointConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.EndpointConfiguration resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.EndpointConfiguration resource property to the template.


    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-api-endpointconfiguration.html

    .PARAMETER Type
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-api-endpointconfiguration.html#sam-api-endpointconfiguration-type
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER VpcEndpointIds
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-api-endpointconfiguration.html#sam-api-endpointconfiguration-vpcendpointids
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiEndpointConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Type,
        [parameter(Mandatory = $false)]
        $VpcEndpointIds
    )
    Process {
        $obj = [SAMApiEndpointConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiEndpointConfiguration'

function Add-VSSAMApiS3Location {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api.S3Location resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Api.S3Location resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Key
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Version
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApiS3Location])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        [object]
        $Key,
        [parameter(Mandatory = $true)]
        [object]
        $Version
    )
    Process {
        $obj = [SAMApiS3Location]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApiS3Location'

function Add-VSSAMApplicationApplicationLocation {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Application.ApplicationLocation resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Application.ApplicationLocation resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication

    .PARAMETER ApplicationId
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER SemanticVersion
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApplicationApplicationLocation])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $ApplicationId,
        [parameter(Mandatory = $true)]
        [object]
        $SemanticVersion
    )
    Process {
        $obj = [SAMApplicationApplicationLocation]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMApplicationApplicationLocation'

function Add-VSSAMFunctionAlexaSkillEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.AlexaSkillEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.AlexaSkillEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#alexaskill

    .PARAMETER Variables
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#alexaskill
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionAlexaSkillEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Variables
    )
    Process {
        $obj = [SAMFunctionAlexaSkillEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionAlexaSkillEvent'

function Add-VSSAMFunctionApiEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.ApiEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.ApiEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api

    .PARAMETER Path
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Method
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER RestApiId
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Auth
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        Type: Auth
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionApiEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Path,
        [parameter(Mandatory = $true)]
        [object]
        $Method,
        [parameter(Mandatory = $false)]
        [object]
        $RestApiId,
        [parameter(Mandatory = $false)]
        $Auth
    )
    Process {
        $obj = [SAMFunctionApiEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionApiEvent'

function Add-VSSAMFunctionAuth {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.Auth resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.Auth resource property to the template.


    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object

    .PARAMETER Authorizer
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AuthorizationScopes
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER ApiKeyRequired
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER ResourcePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: AuthResourcePolicy
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionAuth])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Authorizer,
        [parameter(Mandatory = $false)]
        $AuthorizationScopes,
        [parameter(Mandatory = $false)]
        [object]
        $ApiKeyRequired,
        [parameter(Mandatory = $false)]
        $ResourcePolicy
    )
    Process {
        $obj = [SAMFunctionAuth]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionAuth'

function Add-VSSAMFunctionAuthResourcePolicy {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.AuthResourcePolicy resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.AuthResourcePolicy resource property to the template.


    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object

    .PARAMETER CustomStatements
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: Map
        UpdateType: Immutable

    .PARAMETER AwsAccountBlacklist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER AwsAccountWhitelist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IntrinsicVpcBlacklist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IntrinsicVpcWhitelist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IntrinsicVpceBlacklist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IntrinsicVpceWhitelist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IpRangeBlacklist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER IpRangeWhitelist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER SourceVpcBlacklist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER SourceVpcWhitelist
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#function-auth-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionAuthResourcePolicy])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $CustomStatements,
        [parameter(Mandatory = $false)]
        $AwsAccountBlacklist,
        [parameter(Mandatory = $false)]
        $AwsAccountWhitelist,
        [parameter(Mandatory = $false)]
        $IntrinsicVpcBlacklist,
        [parameter(Mandatory = $false)]
        $IntrinsicVpcWhitelist,
        [parameter(Mandatory = $false)]
        $IntrinsicVpceBlacklist,
        [parameter(Mandatory = $false)]
        $IntrinsicVpceWhitelist,
        [parameter(Mandatory = $false)]
        $IpRangeBlacklist,
        [parameter(Mandatory = $false)]
        $IpRangeWhitelist,
        [parameter(Mandatory = $false)]
        $SourceVpcBlacklist,
        [parameter(Mandatory = $false)]
        $SourceVpcWhitelist
    )
    Process {
        $obj = [SAMFunctionAuthResourcePolicy]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionAuthResourcePolicy'

function Add-VSSAMFunctionBucketSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.BucketSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.BucketSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER BucketName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionBucketSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $BucketName
    )
    Process {
        $obj = [SAMFunctionBucketSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionBucketSAMPT'

function Add-VSSAMFunctionCloudWatchEventEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.CloudWatchEventEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.CloudWatchEventEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchevent

    .PARAMETER Pattern
        Documentation: http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchevent
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER InputPath
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchevent
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionCloudWatchEventEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Pattern,
        [parameter(Mandatory = $false)]
        [object]
        $Input,
        [parameter(Mandatory = $false)]
        [object]
        $InputPath
    )
    Process {
        $obj = [SAMFunctionCloudWatchEventEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionCloudWatchEventEvent'

function Add-VSSAMFunctionCloudWatchLogsEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.CloudWatchLogsEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.CloudWatchLogsEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchevent

    .PARAMETER LogGroupName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchlogs
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER FilterPattern
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#cloudwatchlogs
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionCloudWatchLogsEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $LogGroupName,
        [parameter(Mandatory = $true)]
        [object]
        $FilterPattern
    )
    Process {
        $obj = [SAMFunctionCloudWatchLogsEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionCloudWatchLogsEvent'

function Add-VSSAMFunctionCollectionSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.CollectionSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.CollectionSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER CollectionId
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionCollectionSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $CollectionId
    )
    Process {
        $obj = [SAMFunctionCollectionSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionCollectionSAMPT'

function Add-VSSAMFunctionDeadLetterQueue {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.DeadLetterQueue resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.DeadLetterQueue resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deadletterqueue-object

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER TargetArn
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDeadLetterQueue])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Type,
        [parameter(Mandatory = $true)]
        [object]
        $TargetArn
    )
    Process {
        $obj = [SAMFunctionDeadLetterQueue]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDeadLetterQueue'

function Add-VSSAMFunctionDeploymentPreference {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.DeploymentPreference resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.DeploymentPreference resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Alarms
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Hooks
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Role
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Enabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#deploymentpreference-object
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDeploymentPreference])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Type,
        [parameter(Mandatory = $false)]
        $Alarms,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Hooks,
        [parameter(Mandatory = $false)]
        [object]
        $Role,
        [parameter(Mandatory = $false)]
        [object]
        $Enabled
    )
    Process {
        $obj = [SAMFunctionDeploymentPreference]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDeploymentPreference'

function Add-VSSAMFunctionDestination {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.Destination resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.Destination resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Destination
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDestination])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Type,
        [parameter(Mandatory = $true)]
        [object]
        $Destination
    )
    Process {
        $obj = [SAMFunctionDestination]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDestination'

function Add-VSSAMFunctionDestinationConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.DestinationConfig resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.DestinationConfig resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object

    .PARAMETER OnFailure
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object
        Type: Destination
        UpdateType: Immutable

    .PARAMETER OnSuccess
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object
        Type: Destination
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDestinationConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        $OnFailure,
        [parameter(Mandatory = $true)]
        $OnSuccess
    )
    Process {
        $obj = [SAMFunctionDestinationConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDestinationConfig'

function Add-VSSAMFunctionDomainSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.DomainSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.DomainSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER DomainName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDomainSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $DomainName
    )
    Process {
        $obj = [SAMFunctionDomainSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDomainSAMPT'

function Add-VSSAMFunctionDynamoDBEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.DynamoDBEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.DynamoDBEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb

    .PARAMETER Stream
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER StartingPosition
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER BatchSize
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Enabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER MaximumBatchingWindowInSeconds
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER MaximumRetryAttempts
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER BisectBatchOnFunctionError
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER MaximumRecordAgeInSeconds
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER DestinationConfig
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        Type: DestinationConfig
        UpdateType: Immutable

    .PARAMETER ParallelizationFactor
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionDynamoDBEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Stream,
        [parameter(Mandatory = $true)]
        [object]
        $StartingPosition,
        [parameter(Mandatory = $false)]
        [object]
        $BatchSize,
        [parameter(Mandatory = $false)]
        [object]
        $Enabled,
        [parameter(Mandatory = $false)]
        [object]
        $MaximumBatchingWindowInSeconds,
        [parameter(Mandatory = $false)]
        [object]
        $MaximumRetryAttempts,
        [parameter(Mandatory = $false)]
        [object]
        $BisectBatchOnFunctionError,
        [parameter(Mandatory = $false)]
        [object]
        $MaximumRecordAgeInSeconds,
        [parameter(Mandatory = $false)]
        $DestinationConfig,
        [parameter(Mandatory = $false)]
        [object]
        $ParallelizationFactor
    )
    Process {
        $obj = [SAMFunctionDynamoDBEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionDynamoDBEvent'

function Add-VSSAMFunctionEmptySAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.EmptySAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.EmptySAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionEmptySAMPT])]
    [cmdletbinding()]
    Param(
    )
    Process {
        $obj = [SAMFunctionEmptySAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionEmptySAMPT'

function Add-VSSAMFunctionEventBridgeRuleEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.EventBridgeRuleEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.EventBridgeRuleEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#eventbridgerule

    .PARAMETER Pattern
        Documentation: https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER EventBusName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#eventbridgerule
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#eventbridgerule
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER InputPath
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#eventbridgerule
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionEventBridgeRuleEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Pattern,
        [parameter(Mandatory = $false)]
        [object]
        $EventBusName,
        [parameter(Mandatory = $false)]
        [object]
        $Input,
        [parameter(Mandatory = $false)]
        [object]
        $InputPath
    )
    Process {
        $obj = [SAMFunctionEventBridgeRuleEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionEventBridgeRuleEvent'

function Add-VSSAMFunctionEventInvokeConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.EventInvokeConfig resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.EventInvokeConfig resource property to the template.


    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#event-invoke-config-object

    .PARAMETER MaximumEventAgeInSeconds
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#event-invoke-config-object
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER MaximumRetryAttempts
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#event-invoke-config-object
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER DestinationConfig
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#event-invoke-config-object
        Type: DestinationConfig
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionEventInvokeConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $MaximumEventAgeInSeconds,
        [parameter(Mandatory = $false)]
        [object]
        $MaximumRetryAttempts,
        [parameter(Mandatory = $false)]
        $DestinationConfig
    )
    Process {
        $obj = [SAMFunctionEventInvokeConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionEventInvokeConfig'

function Add-VSSAMFunctionEventSource {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.EventSource resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.EventSource resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-object

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Properties
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-types
        Types: S3Event SNSEvent SQSEvent KinesisEvent DynamoDBEvent ApiEvent ScheduleEvent CloudWatchEventEvent CloudWatchLogsEvent IoTRuleEvent AlexaSkillEvent EventBridgeRuleEvent
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionEventSource])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Type,
        [parameter(Mandatory = $true)]
        $Properties
    )
    Process {
        $obj = [SAMFunctionEventSource]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionEventSource'

function Add-VSSAMFunctionFileSystemConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.FileSystemConfig resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.FileSystemConfig resource property to the template.


    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-filesystemconfig.html#cfn-lambda-function-filesystemconfig-localmountpath

    .PARAMETER Arn
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-filesystemconfig.html#cfn-lambda-function-filesystemconfig-localmountpath
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER LocalMountPath
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-filesystemconfig.html#cfn-lambda-function-filesystemconfig-localmountpath
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionFileSystemConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Arn,
        [parameter(Mandatory = $false)]
        [object]
        $LocalMountPath
    )
    Process {
        $obj = [SAMFunctionFileSystemConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionFileSystemConfig'

function Add-VSSAMFunctionFunctionEnvironment {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.FunctionEnvironment resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.FunctionEnvironment resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object

    .PARAMETER Variables
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionFunctionEnvironment])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [IDictionary]
        $Variables
    )
    Process {
        $obj = [SAMFunctionFunctionEnvironment]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionFunctionEnvironment'

function Add-VSSAMFunctionFunctionSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.FunctionSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.FunctionSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER FunctionName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionFunctionSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $FunctionName
    )
    Process {
        $obj = [SAMFunctionFunctionSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionFunctionSAMPT'

function Add-VSSAMFunctionIAMPolicyDocument {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.IAMPolicyDocument resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.IAMPolicyDocument resource property to the template.


    .LINK
        http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html

    .PARAMETER Statement
        Documentation: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html
        PrimitiveType: Json
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionIAMPolicyDocument])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Statement
    )
    Process {
        $obj = [SAMFunctionIAMPolicyDocument]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionIAMPolicyDocument'

function Add-VSSAMFunctionIdentitySAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.IdentitySAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.IdentitySAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER IdentityName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionIdentitySAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $IdentityName
    )
    Process {
        $obj = [SAMFunctionIdentitySAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionIdentitySAMPT'

function Add-VSSAMFunctionImageConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.ImageConfig resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.ImageConfig resource property to the template.


    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-imageconfig.html

    .PARAMETER Command
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-imageconfig.html#cfn-lambda-function-imageconfig-command
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER EntryPoint
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-imageconfig.html#cfn-lambda-function-imageconfig-entrypoint
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER WorkingDirectory
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-imageconfig.html#cfn-lambda-function-imageconfig-workingdirectory
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionImageConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $Command,
        [parameter(Mandatory = $false)]
        $EntryPoint,
        [parameter(Mandatory = $false)]
        [object]
        $WorkingDirectory
    )
    Process {
        $obj = [SAMFunctionImageConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionImageConfig'

function Add-VSSAMFunctionIoTRuleEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.IoTRuleEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.IoTRuleEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#iotrule

    .PARAMETER Sql
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#iotrule
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AwsIotSqlVersion
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#iotrule
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionIoTRuleEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Sql,
        [parameter(Mandatory = $false)]
        [object]
        $AwsIotSqlVersion
    )
    Process {
        $obj = [SAMFunctionIoTRuleEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionIoTRuleEvent'

function Add-VSSAMFunctionKeySAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.KeySAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.KeySAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER KeyId
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionKeySAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $KeyId
    )
    Process {
        $obj = [SAMFunctionKeySAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionKeySAMPT'

function Add-VSSAMFunctionKinesisEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.KinesisEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.KinesisEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#kinesis

    .PARAMETER Stream
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#kinesis
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER StartingPosition
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#kinesis
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER BatchSize
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#kinesis
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Enabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#kinesis
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionKinesisEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Stream,
        [parameter(Mandatory = $true)]
        [object]
        $StartingPosition,
        [parameter(Mandatory = $false)]
        [object]
        $BatchSize,
        [parameter(Mandatory = $false)]
        [object]
        $Enabled
    )
    Process {
        $obj = [SAMFunctionKinesisEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionKinesisEvent'

function Add-VSSAMFunctionLogGroupSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.LogGroupSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.LogGroupSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER LogGroupName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionLogGroupSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $LogGroupName
    )
    Process {
        $obj = [SAMFunctionLogGroupSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionLogGroupSAMPT'

function Add-VSSAMFunctionProvisionedConcurrencyConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.ProvisionedConcurrencyConfig resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.ProvisionedConcurrencyConfig resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#provisioned-concurrency-config-object

    .PARAMETER ProvisionedConcurrentExecutions
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#provisioned-concurrency-config-object
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionProvisionedConcurrencyConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $ProvisionedConcurrentExecutions
    )
    Process {
        $obj = [SAMFunctionProvisionedConcurrencyConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionProvisionedConcurrencyConfig'

function Add-VSSAMFunctionQueueSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.QueueSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.QueueSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER QueueName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionQueueSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $QueueName
    )
    Process {
        $obj = [SAMFunctionQueueSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionQueueSAMPT'

function Add-VSSAMFunctionS3Event {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.S3Event resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.S3Event resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Events
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3
        PrimitiveTypes: String
        PrimitiveItemTypes: String

    .PARAMETER Filter
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3
        Type: S3NotificationFilter
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionS3Event])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        $Events,
        [parameter(Mandatory = $false)]
        $Filter
    )
    Process {
        $obj = [SAMFunctionS3Event]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionS3Event'

function Add-VSSAMFunctionS3KeyFilter {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.S3KeyFilter resource property to the template. Specifies object key name filtering rules. For information about key name filtering, see Configuring Event Notifications: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in the *Amazon Simple Storage Service Developer Guide*.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.S3KeyFilter resource property to the template.
Specifies object key name filtering rules. For information about key name filtering, see Configuring Event Notifications: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in the *Amazon Simple Storage Service Developer Guide*.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html

    .PARAMETER Rules
        *Update requires*: No interruption: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html
        Type: List
        ItemType: S3KeyFilterRule
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionS3KeyFilter])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Rules
    )
    Process {
        $obj = [SAMFunctionS3KeyFilter]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionS3KeyFilter'

function Add-VSSAMFunctionS3KeyFilterRule {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.S3KeyFilterRule resource property to the template. Specifies the Amazon S3 object key name to filter on and whether to filter on the suffix or prefix of the key name.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.S3KeyFilterRule resource property to the template.
Specifies the Amazon S3 object key name to filter on and whether to filter on the suffix or prefix of the key name.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html

    .PARAMETER Name
        The object key name prefix or suffix identifying one or more objects to which the filtering rule applies. The maximum length is 1,024 characters. Overlapping prefixes and suffixes are not supported. For more information, see Configuring Event Notifications: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in the *Amazon Simple Storage Service Developer Guide*.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Value
        The value that the filter searches for in object key names.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionS3KeyFilterRule])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Name,
        [parameter(Mandatory = $true)]
        [object]
        $Value
    )
    Process {
        $obj = [SAMFunctionS3KeyFilterRule]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionS3KeyFilterRule'

function Add-VSSAMFunctionS3Location {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.S3Location resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.S3Location resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Key
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Version
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionS3Location])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        [object]
        $Key,
        [parameter(Mandatory = $false)]
        [object]
        $Version
    )
    Process {
        $obj = [SAMFunctionS3Location]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionS3Location'

function Add-VSSAMFunctionS3NotificationFilter {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.S3NotificationFilter resource property to the template. Specifies object key name filtering rules. For information about key name filtering, see Configuring Event Notifications: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in the *Amazon Simple Storage Service Developer Guide*.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.S3NotificationFilter resource property to the template.
Specifies object key name filtering rules. For information about key name filtering, see Configuring Event Notifications: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html in the *Amazon Simple Storage Service Developer Guide*.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html

    .PARAMETER S3Key
        A container for object key name prefix and suffix filtering rules.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html
        Type: S3KeyFilter
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionS3NotificationFilter])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        $S3Key
    )
    Process {
        $obj = [SAMFunctionS3NotificationFilter]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionS3NotificationFilter'

function Add-VSSAMFunctionSAMPolicyTemplate {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.SAMPolicyTemplate resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.SAMPolicyTemplate resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER CloudWatchPutMetricPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER EC2DescribePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER AMIDescribePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER CloudFormationDescribeStacksPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER RekognitionDetectOnlyPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER RekognitionLabelsPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER VPCAccessPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER SESEmailTemplateCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: EmptySAMPT
        UpdateType: Immutable

    .PARAMETER SQSPollerPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: QueueSAMPT
        UpdateType: Immutable

    .PARAMETER SQSSendMessagePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: QueueSAMPT
        UpdateType: Immutable

    .PARAMETER LambdaInvokePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: FunctionSAMPT
        UpdateType: Immutable

    .PARAMETER DynamoDBCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: TableSAMPT
        UpdateType: Immutable

    .PARAMETER DynamoDBReadPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: TableSAMPT
        UpdateType: Immutable

    .PARAMETER DynamoDBStreamReadPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: TableStreamSAMPT
        UpdateType: Immutable

    .PARAMETER SESSendBouncePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: IdentitySAMPT
        UpdateType: Immutable

    .PARAMETER SESCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: IdentitySAMPT
        UpdateType: Immutable

    .PARAMETER SESBulkTemplatedCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: IdentitySAMPT
        UpdateType: Immutable

    .PARAMETER ElasticsearchHttpPostPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: DomainSAMPT
        UpdateType: Immutable

    .PARAMETER S3ReadPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: BucketSAMPT
        UpdateType: Immutable

    .PARAMETER S3CrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: BucketSAMPT
        UpdateType: Immutable

    .PARAMETER RekognitionNoDataAccessPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: CollectionSAMPT
        UpdateType: Immutable

    .PARAMETER RekognitionReadPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: CollectionSAMPT
        UpdateType: Immutable

    .PARAMETER RekognitionWriteOnlyAccessPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: CollectionSAMPT
        UpdateType: Immutable

    .PARAMETER SNSCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: TopicSAMPT
        UpdateType: Immutable

    .PARAMETER SNSPublishMessagePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: TopicSAMPT
        UpdateType: Immutable

    .PARAMETER KinesisStreamReadPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: StreamSAMPT
        UpdateType: Immutable

    .PARAMETER KinesisCrudPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: StreamSAMPT
        UpdateType: Immutable

    .PARAMETER KMSDecryptPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: KeySAMPT
        UpdateType: Immutable

    .PARAMETER FilterLogEventsPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: LogGroupSAMPT
        UpdateType: Immutable

    .PARAMETER StepFunctionsExecutionPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: StateMachineSAMPT
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionSAMPolicyTemplate])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $CloudWatchPutMetricPolicy,
        [parameter(Mandatory = $false)]
        $EC2DescribePolicy,
        [parameter(Mandatory = $false)]
        $AMIDescribePolicy,
        [parameter(Mandatory = $false)]
        $CloudFormationDescribeStacksPolicy,
        [parameter(Mandatory = $false)]
        $RekognitionDetectOnlyPolicy,
        [parameter(Mandatory = $false)]
        $RekognitionLabelsPolicy,
        [parameter(Mandatory = $false)]
        $VPCAccessPolicy,
        [parameter(Mandatory = $false)]
        $SESEmailTemplateCrudPolicy,
        [parameter(Mandatory = $false)]
        $SQSPollerPolicy,
        [parameter(Mandatory = $false)]
        $SQSSendMessagePolicy,
        [parameter(Mandatory = $false)]
        $LambdaInvokePolicy,
        [parameter(Mandatory = $false)]
        $DynamoDBCrudPolicy,
        [parameter(Mandatory = $false)]
        $DynamoDBReadPolicy,
        [parameter(Mandatory = $false)]
        $DynamoDBStreamReadPolicy,
        [parameter(Mandatory = $false)]
        $SESSendBouncePolicy,
        [parameter(Mandatory = $false)]
        $SESCrudPolicy,
        [parameter(Mandatory = $false)]
        $SESBulkTemplatedCrudPolicy,
        [parameter(Mandatory = $false)]
        $ElasticsearchHttpPostPolicy,
        [parameter(Mandatory = $false)]
        $S3ReadPolicy,
        [parameter(Mandatory = $false)]
        $S3CrudPolicy,
        [parameter(Mandatory = $false)]
        $RekognitionNoDataAccessPolicy,
        [parameter(Mandatory = $false)]
        $RekognitionReadPolicy,
        [parameter(Mandatory = $false)]
        $RekognitionWriteOnlyAccessPolicy,
        [parameter(Mandatory = $false)]
        $SNSCrudPolicy,
        [parameter(Mandatory = $false)]
        $SNSPublishMessagePolicy,
        [parameter(Mandatory = $false)]
        $KinesisStreamReadPolicy,
        [parameter(Mandatory = $false)]
        $KinesisCrudPolicy,
        [parameter(Mandatory = $false)]
        $KMSDecryptPolicy,
        [parameter(Mandatory = $false)]
        $FilterLogEventsPolicy,
        [parameter(Mandatory = $false)]
        $StepFunctionsExecutionPolicy
    )
    Process {
        $obj = [SAMFunctionSAMPolicyTemplate]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionSAMPolicyTemplate'

function Add-VSSAMFunctionScheduleEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.ScheduleEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.ScheduleEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule

    .PARAMETER Schedule
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionScheduleEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Schedule,
        [parameter(Mandatory = $false)]
        [object]
        $Input
    )
    Process {
        $obj = [SAMFunctionScheduleEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionScheduleEvent'

function Add-VSSAMFunctionSNSEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.SNSEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.SNSEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sns

    .PARAMETER Topic
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sns
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionSNSEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Topic
    )
    Process {
        $obj = [SAMFunctionSNSEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionSNSEvent'

function Add-VSSAMFunctionSQSEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.SQSEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.SQSEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sqs

    .PARAMETER Queue
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sqs
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER BatchSize
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sqs
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Enabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#sqs
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionSQSEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Queue,
        [parameter(Mandatory = $false)]
        [object]
        $BatchSize,
        [parameter(Mandatory = $false)]
        [object]
        $Enabled
    )
    Process {
        $obj = [SAMFunctionSQSEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionSQSEvent'

function Add-VSSAMFunctionStateMachineSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.StateMachineSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.StateMachineSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER StateMachineName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionStateMachineSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $StateMachineName
    )
    Process {
        $obj = [SAMFunctionStateMachineSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionStateMachineSAMPT'

function Add-VSSAMFunctionStreamSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.StreamSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.StreamSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER StreamName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionStreamSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $StreamName
    )
    Process {
        $obj = [SAMFunctionStreamSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionStreamSAMPT'

function Add-VSSAMFunctionTableSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.TableSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.TableSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER TableName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionTableSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $TableName
    )
    Process {
        $obj = [SAMFunctionTableSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionTableSAMPT'

function Add-VSSAMFunctionTableStreamSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.TableStreamSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.TableStreamSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER TableName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER StreamName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionTableStreamSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $TableName,
        [parameter(Mandatory = $true)]
        [object]
        $StreamName
    )
    Process {
        $obj = [SAMFunctionTableStreamSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionTableStreamSAMPT'

function Add-VSSAMFunctionTopicSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.TopicSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.TopicSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER TopicName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionTopicSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $TopicName
    )
    Process {
        $obj = [SAMFunctionTopicSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionTopicSAMPT'

function Add-VSSAMFunctionVpcConfig {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function.VpcConfig resource property to the template. The VPC security groups and subnets that are attached to a Lambda function. When you connect a function to a VPC, Lambda creates an elastic network interface for each combination of security group and subnet in the function's VPC configuration. The function can only access resources and the internet through that VPC. For more information, see VPC Settings: https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html.

    .DESCRIPTION
        Adds an AWS::Serverless::Function.VpcConfig resource property to the template.
The VPC security groups and subnets that are attached to a Lambda function. When you connect a function to a VPC, Lambda creates an elastic network interface for each combination of security group and subnet in the function's VPC configuration. The function can only access resources and the internet through that VPC. For more information, see VPC Settings: https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html.

**Note**

When you delete a function, AWS CloudFormation monitors the state of its network interfaces and waits for Lambda to delete them before proceeding. If the VPC is defined in the same stack, the network interfaces need to be deleted by Lambda before AWS CloudFormation can delete the VPC's resources.

To monitor network interfaces, AWS CloudFormation needs the ec2:DescribeNetworkInterfaces permission. It obtains this from the user or role that modifies the stack. If you don't provide this permission, AWS CloudFormation does not wait for network interfaces to be deleted.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html

    .PARAMETER SecurityGroupIds
        A list of VPC security groups IDs.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER SubnetIds
        A list of VPC subnet IDs.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-vpcconfig.html
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunctionVpcConfig])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        $SecurityGroupIds,
        [parameter(Mandatory = $true)]
        $SubnetIds
    )
    Process {
        $obj = [SAMFunctionVpcConfig]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMFunctionVpcConfig'

function Add-VSSAMHttpApiAccessLogSetting {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.AccessLogSetting resource property to the template. The AccessLogSetting property type specifies settings for logging access in this stage.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.AccessLogSetting resource property to the template.
The AccessLogSetting property type specifies settings for logging access in this stage.

AccessLogSetting is a property of the AWS::ApiGateway::Stage: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html resource.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html

    .PARAMETER DestinationArn
        The Amazon Resource Name ARN of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with amazon-apigateway-.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-destinationarn
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Format
        A single line format of the access logs of data, as specified by selected $context variables: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference. The format must include at least $context.requestId.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-format
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiAccessLogSetting])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DestinationArn,
        [parameter(Mandatory = $false)]
        [object]
        $Format
    )
    Process {
        $obj = [SAMHttpApiAccessLogSetting]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiAccessLogSetting'

function Add-VSSAMHttpApiCorsConfigurationObject {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.CorsConfigurationObject resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.CorsConfigurationObject resource property to the template.


    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object

    .PARAMETER AllowMethods
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowHeaders
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowOrigin
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER MaxAge
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AllowCredentials
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER ExposeHeaders
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#cors-configuration-object
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiCorsConfigurationObject])]
    [cmdletbinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword","AllowCredentials")]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingUserNameAndPasswordParams","AllowCredentials")]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $AllowMethods,
        [parameter(Mandatory = $false)]
        [object]
        $AllowHeaders,
        [parameter(Mandatory = $false)]
        [object]
        $AllowOrigin,
        [parameter(Mandatory = $false)]
        [object]
        $MaxAge,
        [parameter(Mandatory = $false)]
        [object]
        $AllowCredentials,
        [parameter(Mandatory = $false)]
        $ExposeHeaders
    )
    Process {
        $obj = [SAMHttpApiCorsConfigurationObject]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiCorsConfigurationObject'

function Add-VSSAMHttpApiHttpApiAuth {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.HttpApiAuth resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.HttpApiAuth resource property to the template.


    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-httpapiauth.html

    .PARAMETER DefaultAuthorizer
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-httpapiauth.html#sam-httpapi-httpapiauth-authorizers
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Authorizers
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-httpapiauth.html#sam-httpapi-httpapiauth-defaultauthorizer
        PrimitiveType: Json
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiHttpApiAuth])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DefaultAuthorizer,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Authorizers
    )
    Process {
        $obj = [SAMHttpApiHttpApiAuth]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiHttpApiAuth'

function Add-VSSAMHttpApiHttpApiDomainConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.HttpApiDomainConfiguration resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.HttpApiDomainConfiguration resource property to the template.


    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object

    .PARAMETER DomainName
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER CertificateArn
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER EndpointConfiguration
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER BasePath
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Route53
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        Type: Route53Configuration
        UpdateType: Immutable

    .PARAMETER SecurityPolicy
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#domain-configuration-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER MutualTlsAuthentication
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-httpapidomainconfiguration.html#sam-httpapi-httpapidomainconfiguration-mutualtlsauthentication
        Type: MutualTlsAuthentication
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiHttpApiDomainConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $DomainName,
        [parameter(Mandatory = $true)]
        [object]
        $CertificateArn,
        [parameter(Mandatory = $false)]
        [object]
        $EndpointConfiguration,
        [parameter(Mandatory = $false)]
        [object]
        $BasePath,
        [parameter(Mandatory = $false)]
        $Route53,
        [parameter(Mandatory = $false)]
        [object]
        $SecurityPolicy,
        [parameter(Mandatory = $false)]
        $MutualTlsAuthentication
    )
    Process {
        $obj = [SAMHttpApiHttpApiDomainConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiHttpApiDomainConfiguration'

function Add-VSSAMHttpApiMutualTlsAuthentication {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.MutualTlsAuthentication resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.MutualTlsAuthentication resource property to the template.


    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html

    .PARAMETER TruststoreUri
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html#cfn-apigatewayv2-domainname-mutualtlsauthentication-truststoreuri
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER TruststoreVersion
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-domainname-mutualtlsauthentication.html#cfn-apigatewayv2-domainname-mutualtlsauthentication-truststoreversion
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiMutualTlsAuthentication])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $TruststoreUri,
        [parameter(Mandatory = $false)]
        [object]
        $TruststoreVersion
    )
    Process {
        $obj = [SAMHttpApiMutualTlsAuthentication]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiMutualTlsAuthentication'

function Add-VSSAMHttpApiRoute53Configuration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.Route53Configuration resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.Route53Configuration resource property to the template.


    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html

    .PARAMETER DistributedDomainName
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html#sam-httpapi-route53configuration-distributiondomainname
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER EvaluateTargetHealth
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html#sam-httpapi-route53configuration-evaluatetargethealth
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER HostedZoneId
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html#sam-httpapi-route53configuration-hostedzoneid
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER HostedZoneName
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html#sam-httpapi-route53configuration-hostedzonename
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER IpV6
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-route53configuration.html#sam-httpapi-route53configuration-ipv6
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiRoute53Configuration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DistributedDomainName,
        [parameter(Mandatory = $false)]
        [object]
        $EvaluateTargetHealth,
        [parameter(Mandatory = $false)]
        [object]
        $HostedZoneId,
        [parameter(Mandatory = $false)]
        [object]
        $HostedZoneName,
        [parameter(Mandatory = $false)]
        [object]
        $IpV6
    )
    Process {
        $obj = [SAMHttpApiRoute53Configuration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiRoute53Configuration'

function Add-VSSAMHttpApiRouteSettings {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.RouteSettings resource property to the template. Represents a collection of route settings.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.RouteSettings resource property to the template.
Represents a collection of route settings.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html

    .PARAMETER DataTraceEnabled
        Specifies whether true or not false data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-datatraceenabled
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER DetailedMetricsEnabled
        Specifies whether detailed metrics are enabled.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-detailedmetricsenabled
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER LoggingLevel
        Specifies the logging level for this route: INFO, ERROR, or OFF. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-logginglevel
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER ThrottlingBurstLimit
        Specifies the throttling burst limit.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-throttlingburstlimit
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER ThrottlingRateLimit
        Specifies the throttling rate limit.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-stage-routesettings.html#cfn-apigatewayv2-stage-routesettings-throttlingratelimit
        PrimitiveType: Double
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiRouteSettings])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DataTraceEnabled,
        [parameter(Mandatory = $false)]
        [object]
        $DetailedMetricsEnabled,
        [parameter(Mandatory = $false)]
        [LoggingLevel]
        $LoggingLevel,
        [parameter(Mandatory = $false)]
        [object]
        $ThrottlingBurstLimit,
        [parameter(Mandatory = $false)]
        [object]
        $ThrottlingRateLimit
    )
    Process {
        $obj = [SAMHttpApiRouteSettings]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiRouteSettings'

function Add-VSSAMHttpApiS3Location {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi.S3Location resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi.S3Location resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Key
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Version
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApiS3Location])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        [object]
        $Key,
        [parameter(Mandatory = $true)]
        [object]
        $Version
    )
    Process {
        $obj = [SAMHttpApiS3Location]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMHttpApiS3Location'

function Add-VSSAMLayerVersionS3Location {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::LayerVersion.S3Location resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::LayerVersion.S3Location resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Key
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Version
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMLayerVersionS3Location])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        [object]
        $Key,
        [parameter(Mandatory = $false)]
        [object]
        $Version
    )
    Process {
        $obj = [SAMLayerVersionS3Location]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMLayerVersionS3Location'

function Add-VSSAMSimpleTablePrimaryKey {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::SimpleTable.PrimaryKey resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::SimpleTable.PrimaryKey resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object

    .PARAMETER Name
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMSimpleTablePrimaryKey])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Name,
        [parameter(Mandatory = $true)]
        [object]
        $Type
    )
    Process {
        $obj = [SAMSimpleTablePrimaryKey]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMSimpleTablePrimaryKey'

function Add-VSSAMSimpleTableProvisionedThroughput {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::SimpleTable.ProvisionedThroughput resource property to the template. Throughput for the specified table, which consists of values for ReadCapacityUnits and WriteCapacityUnits. For more information about the contents of a provisioned throughput structure, see Amazon DynamoDB Table ProvisionedThroughput: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html.

    .DESCRIPTION
        Adds an AWS::Serverless::SimpleTable.ProvisionedThroughput resource property to the template.
Throughput for the specified table, which consists of values for ReadCapacityUnits and WriteCapacityUnits. For more information about the contents of a provisioned throughput structure, see Amazon DynamoDB Table ProvisionedThroughput: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html

    .PARAMETER ReadCapacityUnits
        The maximum number of strongly consistent reads consumed per second before DynamoDB returns a ThrottlingException. For more information, see Specifying Read and Write Requirements: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput in the *Amazon DynamoDB Developer Guide*.
If read/write capacity mode is PAY_PER_REQUEST the value is set to 0.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER WriteCapacityUnits
        The maximum number of writes consumed per second before DynamoDB returns a ThrottlingException. For more information, see Specifying Read and Write Requirements: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#ProvisionedThroughput in the *Amazon DynamoDB Developer Guide*.
If read/write capacity mode is PAY_PER_REQUEST the value is set to 0.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMSimpleTableProvisionedThroughput])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $ReadCapacityUnits,
        [parameter(Mandatory = $true)]
        [object]
        $WriteCapacityUnits
    )
    Process {
        $obj = [SAMSimpleTableProvisionedThroughput]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMSimpleTableProvisionedThroughput'

function Add-VSSAMSimpleTableSSESpecification {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::SimpleTable.SSESpecification resource property to the template. Represents the settings used to enable server-side encryption.

    .DESCRIPTION
        Adds an AWS::Serverless::SimpleTable.SSESpecification resource property to the template.
Represents the settings used to enable server-side encryption.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html

    .PARAMETER SSEEnabled
        Indicates whether server-side encryption is done using an AWS managed CMK or an AWS owned CMK. If enabled true, server-side encryption type is set to KMS and an AWS managed CMK is used AWS KMS charges apply. If disabled false or not specified, server-side encryption is set to AWS owned CMK.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-ssespecification.html
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMSimpleTableSSESpecification])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $SSEEnabled
    )
    Process {
        $obj = [SAMSimpleTableSSESpecification]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMSimpleTableSSESpecification'

function Add-VSSAMStateMachineApiEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.ApiEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.ApiEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api

    .PARAMETER Path
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Method
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER RestApiId
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineApiEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Path,
        [parameter(Mandatory = $true)]
        [object]
        $Method,
        [parameter(Mandatory = $false)]
        [object]
        $RestApiId
    )
    Process {
        $obj = [SAMStateMachineApiEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineApiEvent'

function Add-VSSAMStateMachineCloudWatchEventEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.CloudWatchEventEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.CloudWatchEventEvent resource property to the template.


    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html

    .PARAMETER Pattern
        Documentation: http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER EventBusName
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER InputPath
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineCloudWatchEventEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Pattern,
        [parameter(Mandatory = $false)]
        [object]
        $EventBusName,
        [parameter(Mandatory = $false)]
        [object]
        $Input,
        [parameter(Mandatory = $false)]
        [object]
        $InputPath
    )
    Process {
        $obj = [SAMStateMachineCloudWatchEventEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineCloudWatchEventEvent'

function Add-VSSAMStateMachineCloudWatchLogsLogGroup {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.CloudWatchLogsLogGroup resource property to the template. Defines a CloudWatch log group.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.CloudWatchLogsLogGroup resource property to the template.
Defines a CloudWatch log group.

**Note**

CloudWatchLogsLogGroup is only valid when StateMachineType is set to EXPRESS. For more information see Standard Versus Express Workflows: https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html in the AWS Step Functions Developer Guide.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination-cloudwatchlogsloggroup.html

    .PARAMETER LogGroupArn
        The ARN of the the CloudWatch log group to which you want your logs emitted to. The ARN must end with :*

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination-cloudwatchlogsloggroup.html
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineCloudWatchLogsLogGroup])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $LogGroupArn
    )
    Process {
        $obj = [SAMStateMachineCloudWatchLogsLogGroup]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineCloudWatchLogsLogGroup'

function Add-VSSAMStateMachineEventBridgeRuleEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.EventBridgeRuleEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.EventBridgeRuleEvent resource property to the template.


    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html

    .PARAMETER Pattern
        Documentation: http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER EventBusName
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER InputPath
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-statemachine-cloudwatchevent.html
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineEventBridgeRuleEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Pattern,
        [parameter(Mandatory = $false)]
        [object]
        $EventBusName,
        [parameter(Mandatory = $false)]
        [object]
        $Input,
        [parameter(Mandatory = $false)]
        [object]
        $InputPath
    )
    Process {
        $obj = [SAMStateMachineEventBridgeRuleEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineEventBridgeRuleEvent'

function Add-VSSAMStateMachineEventSource {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.EventSource resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.EventSource resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-object

    .PARAMETER Type
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-object
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Properties
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-types
        Types: CloudWatchEventEvent EventBridgeRuleEvent ScheduleEvent ApiEvent
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineEventSource])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Type,
        [parameter(Mandatory = $true)]
        $Properties
    )
    Process {
        $obj = [SAMStateMachineEventSource]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineEventSource'

function Add-VSSAMStateMachineFunctionSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.FunctionSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.FunctionSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER FunctionName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineFunctionSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $FunctionName
    )
    Process {
        $obj = [SAMStateMachineFunctionSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineFunctionSAMPT'

function Add-VSSAMStateMachineIAMPolicyDocument {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.IAMPolicyDocument resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.IAMPolicyDocument resource property to the template.


    .LINK
        http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html

    .PARAMETER Statement
        Documentation: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html
        PrimitiveType: Json
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineIAMPolicyDocument])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [VSJson]
        $Statement
    )
    Process {
        $obj = [SAMStateMachineIAMPolicyDocument]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineIAMPolicyDocument'

function Add-VSSAMStateMachineLogDestination {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.LogDestination resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.LogDestination resource property to the template.


    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination.html#cfn-stepfunctions-statemachine-logdestination-cloudwatchlogsloggroup

    .PARAMETER CloudWatchLogsLogGroup
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination.html#cfn-stepfunctions-statemachine-logdestination-cloudwatchlogsloggroup
        Type: CloudWatchLogsLogGroup
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineLogDestination])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        $CloudWatchLogsLogGroup
    )
    Process {
        $obj = [SAMStateMachineLogDestination]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineLogDestination'

function Add-VSSAMStateMachineLoggingConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.LoggingConfiguration resource property to the template. Defines what execution history events are logged and where they are logged.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.LoggingConfiguration resource property to the template.
Defines what execution history events are logged and where they are logged.

**Note**

By default, the level is set to OFF. For more information see Log Levels: https://docs.aws.amazon.com/step-functions/latest/dg/cloudwatch-log-level.html in the AWS Step Functions User Guide.

    .LINK
        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html

    .PARAMETER Destinations
        An array of objects that describes where your execution history events will be logged. Limited to size 1. Required, if your log level is not set to OFF.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html
        Type: List
        ItemType: LogDestination
        UpdateType: Immutable

    .PARAMETER IncludeExecutionData
        Determines whether execution data is included in your log. When set to FALSE, data is excluded.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER Level
        Defines which category of execution history events are logged.

        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineLoggingConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Destinations,
        [parameter(Mandatory = $true)]
        [object]
        $IncludeExecutionData,
        [parameter(Mandatory = $true)]
        [object]
        $Level
    )
    Process {
        $obj = [SAMStateMachineLoggingConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineLoggingConfiguration'

function Add-VSSAMStateMachineS3Location {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.S3Location resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.S3Location resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object

    .PARAMETER Bucket
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Key
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Version
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineS3Location])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Bucket,
        [parameter(Mandatory = $true)]
        [object]
        $Key,
        [parameter(Mandatory = $false)]
        [object]
        $Version
    )
    Process {
        $obj = [SAMStateMachineS3Location]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineS3Location'

function Add-VSSAMStateMachineSAMPolicyTemplate {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.SAMPolicyTemplate resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.SAMPolicyTemplate resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER LambdaInvokePolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: FunctionSAMPT
        UpdateType: Immutable

    .PARAMETER StepFunctionsExecutionPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        Type: StateMachineSAMPT
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineSAMPolicyTemplate])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $LambdaInvokePolicy,
        [parameter(Mandatory = $false)]
        $StepFunctionsExecutionPolicy
    )
    Process {
        $obj = [SAMStateMachineSAMPolicyTemplate]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineSAMPolicyTemplate'

function Add-VSSAMStateMachineScheduleEvent {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.ScheduleEvent resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.ScheduleEvent resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule

    .PARAMETER Schedule
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Input
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineScheduleEvent])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Schedule,
        [parameter(Mandatory = $false)]
        [object]
        $Input
    )
    Process {
        $obj = [SAMStateMachineScheduleEvent]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineScheduleEvent'

function Add-VSSAMStateMachineStateMachineSAMPT {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.StateMachineSAMPT resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.StateMachineSAMPT resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

    .PARAMETER StateMachineName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
        PrimitiveType: String
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineStateMachineSAMPT])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $StateMachineName
    )
    Process {
        $obj = [SAMStateMachineStateMachineSAMPT]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineStateMachineSAMPT'

function Add-VSSAMStateMachineTracingConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine.TracingConfiguration resource property to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine.TracingConfiguration resource property to the template.


    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api

    .PARAMETER Enabled
        Documentation: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-tracingconfiguration.html
        PrimitiveType: Boolean
        UpdateType: Immutable

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachineTracingConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Enabled
    )
    Process {
        $obj = [SAMStateMachineTracingConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSSAMStateMachineTracingConfiguration'

function New-VSSAMApi {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Api resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Api resource to the template.

    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Name
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER StageName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DefinitionUri
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveTypes: String
        Types: S3Location
        UpdateType: Immutable

    .PARAMETER DefinitionBody
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER CacheClusterEnabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER CacheClusterSize
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Variables
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER MethodSettings
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveItemType: Json
        Type: List
        UpdateType: Immutable

    .PARAMETER EndpointConfiguration
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        Type: EndpointConfiguration
        UpdateType: Immutable

    .PARAMETER BinaryMediaTypes
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Cors
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveTypes: String
        Types: CorsConfiguration
        UpdateType: Immutable

    .PARAMETER Auth
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        Type: Auth
        UpdateType: Immutable

    .PARAMETER TracingEnabled
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER AccessLogSetting
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        Type: AccessLogSetting
        UpdateType: Immutable

    .PARAMETER OpenApiVersion
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER CanarySetting
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html#sam-api-canarysetting
        Type: CanarySetting
        UpdateType: Immutable

    .PARAMETER Description
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html#sam-api-description
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER GatewayResponses
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html#sam-api-gatewayresponses
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER MinimumCompressionSize
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html#sam-api-minimumcompressionsize
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Models
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-api.html#sam-api-models
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApi])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        [object]
        $Name,
        [parameter(Mandatory = $true)]
        [object]
        $StageName,
        [parameter(Mandatory = $false)]
        $DefinitionUri,
        [parameter(Mandatory = $false)]
        [VSJson]
        $DefinitionBody,
        [parameter(Mandatory = $false)]
        [object]
        $CacheClusterEnabled,
        [parameter(Mandatory = $false)]
        [object]
        $CacheClusterSize,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Variables,
        [parameter(Mandatory = $false)]
        $MethodSettings,
        [parameter(Mandatory = $false)]
        $EndpointConfiguration,
        [parameter(Mandatory = $false)]
        $BinaryMediaTypes,
        [parameter(Mandatory = $false)]
        $Cors,
        [parameter(Mandatory = $false)]
        $Auth,
        [parameter(Mandatory = $false)]
        [object]
        $TracingEnabled,
        [parameter(Mandatory = $false)]
        $AccessLogSetting,
        [parameter(Mandatory = $false)]
        [object]
        $OpenApiVersion,
        [parameter(Mandatory = $false)]
        $CanarySetting,
        [parameter(Mandatory = $false)]
        [object]
        $Description,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $GatewayResponses,
        [parameter(Mandatory = $false)]
        [object]
        $MinimumCompressionSize,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Models,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMApi]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMApi'

function New-VSSAMApplication {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Application resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Application resource to the template.

    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Location
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        PrimitiveTypes: String
        Types: ApplicationLocation
        UpdateType: Immutable

    .PARAMETER Parameters
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER NotificationArns
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER TimeoutInMinutes
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMApplication])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $true)]
        $Location,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Parameters,
        [parameter(Mandatory = $false)]
        $NotificationArns,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter(Mandatory = $false)]
        [object]
        $TimeoutInMinutes,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMApplication]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMApplication'

function New-VSSAMFunction {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::Function resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::Function resource to the template.

    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Handler
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Runtime
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER CodeUri
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveTypes: String
        Types: S3Location
        UpdateType: Immutable

    .PARAMETER InlineCode
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER FunctionName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER FileSystemConfigs
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html
        Type: List
        ItemType: FileSystemConfig
        UpdateType: Immutable

    .PARAMETER Description
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER MemorySize
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Timeout
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER Role
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Policies
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveTypes: String
        PrimitiveItemTypes: String
        Types: IAMPolicyDocument
        ItemTypes: IAMPolicyDocument SAMPolicyTemplate
        UpdateType: Immutable

    .PARAMETER PermissionsBoundary
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Environment
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: FunctionEnvironment
        UpdateType: Immutable

    .PARAMETER VpcConfig
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: VpcConfig
        UpdateType: Immutable

    .PARAMETER Events
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: Map
        ItemType: EventSource
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Tracing
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER KmsKeyArn
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DeadLetterQueue
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: DeadLetterQueue
        UpdateType: Immutable

    .PARAMETER DeploymentPreference
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: DeploymentPreference
        UpdateType: Immutable

    .PARAMETER Layers
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER AutoPublishAlias
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER AutoPublishCodeSha256
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-autopublishcodesha256
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER VersionDescription
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER ReservedConcurrentExecutions
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        PrimitiveType: Integer
        UpdateType: Immutable

    .PARAMETER ProvisionedConcurrencyConfig
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: ProvisionedConcurrencyConfig
        UpdateType: Immutable

    .PARAMETER EventInvokeConfig
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Type: EventInvokeConfig
        UpdateType: Immutable

    .PARAMETER AssumeRolePolicyDocument
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-assumerolepolicydocument
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER CodeSigningConfigArn
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-codesigningconfigarn
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER ImageConfig
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-imageconfig
        Type: ImageConfig
        UpdateType: Immutable

    .PARAMETER ImageUri
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-imageuri
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER PackageType
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-packagetype
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMFunction])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        [object]
        $Handler,
        [parameter(Mandatory = $false)]
        [object]
        $Runtime,
        [parameter(Mandatory = $false)]
        $CodeUri,
        [parameter(Mandatory = $false)]
        [object]
        $InlineCode,
        [parameter(Mandatory = $false)]
        [object]
        $FunctionName,
        [parameter(Mandatory = $false)]
        [object]
        $FileSystemConfigs,
        [parameter(Mandatory = $false)]
        [object]
        $Description,
        [parameter(Mandatory = $false)]
        [object]
        $MemorySize,
        [parameter(Mandatory = $false)]
        [object]
        $Timeout,
        [parameter(Mandatory = $false)]
        [object]
        $Role,
        [parameter(Mandatory = $false)]
        $Policies,
        [parameter(Mandatory = $false)]
        [object]
        $PermissionsBoundary,
        [parameter(Mandatory = $false)]
        $Environment,
        [parameter(Mandatory = $false)]
        $VpcConfig,
        [parameter(Mandatory = $false)]
        [object]
        $Events,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter(Mandatory = $false)]
        [object]
        $Tracing,
        [parameter(Mandatory = $false)]
        [object]
        $KmsKeyArn,
        [parameter(Mandatory = $false)]
        $DeadLetterQueue,
        [parameter(Mandatory = $false)]
        $DeploymentPreference,
        [parameter(Mandatory = $false)]
        $Layers,
        [parameter(Mandatory = $false)]
        [object]
        $AutoPublishAlias,
        [parameter(Mandatory = $false)]
        [object]
        $AutoPublishCodeSha256,
        [parameter(Mandatory = $false)]
        [object]
        $VersionDescription,
        [parameter(Mandatory = $false)]
        [object]
        $ReservedConcurrentExecutions,
        [parameter(Mandatory = $false)]
        $ProvisionedConcurrencyConfig,
        [parameter(Mandatory = $false)]
        $EventInvokeConfig,
        [parameter(Mandatory = $false)]
        [VSJson]
        $AssumeRolePolicyDocument,
        [parameter(Mandatory = $false)]
        [object]
        $CodeSigningConfigArn,
        [parameter(Mandatory = $false)]
        $ImageConfig,
        [parameter(Mandatory = $false)]
        [object]
        $ImageUri,
        [parameter(Mandatory = $false)]
        [object]
        $PackageType,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMFunction]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMFunction'

function New-VSSAMHttpApi {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::HttpApi resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::HttpApi resource to the template.

    .LINK
        https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER StageName
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DefinitionUri
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveTypes: String
        Types: S3Location
        UpdateType: Immutable

    .PARAMETER DefinitionBody
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER Auth
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: HttpApiAuth
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER AccessLogSetting
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: AccessLogSetting
        UpdateType: Immutable

    .PARAMETER CorsConfiguration
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveTypes: Boolean
        Types: CorsConfigurationObject
        UpdateType: Immutable

    .PARAMETER DefaultRouteSettings
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: RouteSettings
        UpdateType: Immutable

    .PARAMETER RouteSettings
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: RouteSettings
        UpdateType: Immutable

    .PARAMETER Domain
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: HttpApiDomainConfiguration
        UpdateType: Immutable

    .PARAMETER StageVariables
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER FailOnWarnings
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER Description
        Documentation: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DisableExecuteApiEndpoint
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-httpapi.html#sam-httpapi-disableexecuteapiendpoint
        PrimitiveType: Boolean
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMHttpApi])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        [object]
        $StageName,
        [parameter(Mandatory = $false)]
        $DefinitionUri,
        [parameter(Mandatory = $false)]
        [VSJson]
        $DefinitionBody,
        [parameter(Mandatory = $false)]
        $Auth,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter(Mandatory = $false)]
        $AccessLogSetting,
        [parameter(Mandatory = $false)]
        $CorsConfiguration,
        [parameter(Mandatory = $false)]
        $DefaultRouteSettings,
        [parameter(Mandatory = $false)]
        $RouteSettings,
        [parameter(Mandatory = $false)]
        $Domain,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $StageVariables,
        [parameter(Mandatory = $false)]
        [object]
        $FailOnWarnings,
        [parameter(Mandatory = $false)]
        [object]
        $Description,
        [parameter(Mandatory = $false)]
        [object]
        $DisableExecuteApiEndpoint,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMHttpApi]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMHttpApi'

function New-VSSAMLayerVersion {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::LayerVersion resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::LayerVersion resource to the template.

    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER LayerName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Description
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER ContentUri
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        PrimitiveTypes: String
        Types: S3Location
        UpdateType: Immutable

    .PARAMETER CompatibleRuntimes
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        Type: List
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER LicenseInfo
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER RetentionPolicy
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMLayerVersion])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        [object]
        $LayerName,
        [parameter(Mandatory = $false)]
        [object]
        $Description,
        [parameter(Mandatory = $false)]
        $ContentUri,
        [parameter(Mandatory = $false)]
        $CompatibleRuntimes,
        [parameter(Mandatory = $false)]
        [object]
        $LicenseInfo,
        [parameter(Mandatory = $false)]
        [object]
        $RetentionPolicy,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMLayerVersion]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMLayerVersion'

function New-VSSAMSimpleTable {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::SimpleTable resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::SimpleTable resource to the template.

    .LINK
        https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesssimpletable

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER PrimaryKey
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object
        Type: PrimaryKey
        UpdateType: Immutable

    .PARAMETER ProvisionedThroughput
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html
        Type: ProvisionedThroughput
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesssimpletable
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER TableName
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesssimpletable
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER SSESpecification
        Documentation: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesssimpletable
        Type: SSESpecification
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMSimpleTable])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        $PrimaryKey,
        [parameter(Mandatory = $false)]
        $ProvisionedThroughput,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter(Mandatory = $false)]
        [object]
        $TableName,
        [parameter(Mandatory = $false)]
        $SSESpecification,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMSimpleTable]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMSimpleTable'

function New-VSSAMStateMachine {
    <#
    .SYNOPSIS
        Adds an AWS::Serverless::StateMachine resource to the template.

    .DESCRIPTION
        Adds an AWS::Serverless::StateMachine resource to the template.

    .LINK
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Definition
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveType: Json
        UpdateType: Immutable

    .PARAMETER DefinitionSubstitutions
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER DefinitionUri
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveTypes: String
        Types: S3Location
        UpdateType: Immutable

    .PARAMETER Events
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        Type: Map
        ItemType: EventSource
        UpdateType: Immutable

    .PARAMETER Logging
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        Type: LoggingConfiguration
        UpdateType: Immutable

    .PARAMETER Name
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER PermissionsBoundaries
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html#sam-statemachine-permissionsboundary
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Policies
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveTypes: String
        PrimitiveItemTypes: String
        Types: IAMPolicyDocument
        ItemTypes: IAMPolicyDocument SAMPolicyTemplate
        UpdateType: Immutable

    .PARAMETER Role
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER Tags
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        Type: Map
        PrimitiveItemType: String
        UpdateType: Immutable

    .PARAMETER Tracing
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html#sam-statemachine-tracing
        Type: TracingConfiguration
        UpdateType: Immutable

    .PARAMETER Type
        Documentation: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
        PrimitiveType: String
        UpdateType: Immutable

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([SAMStateMachine])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Definition,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $DefinitionSubstitutions,
        [parameter(Mandatory = $false)]
        $DefinitionUri,
        [parameter(Mandatory = $false)]
        [object]
        $Events,
        [parameter(Mandatory = $false)]
        $Logging,
        [parameter(Mandatory = $false)]
        [object]
        $Name,
        [parameter(Mandatory = $false)]
        [object]
        $PermissionsBoundaries,
        [parameter(Mandatory = $false)]
        $Policies,
        [parameter(Mandatory = $false)]
        [object]
        $Role,
        [parameter(Mandatory = $false)]
        [IDictionary]
        $Tags,
        [parameter(Mandatory = $false)]
        $Tracing,
        [parameter(Mandatory = $false)]
        [object]
        $Type,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [SAMStateMachine]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSSAMStateMachine'