Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(sources): use official SAM schema #898

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

mrgrain
Copy link
Contributor

@mrgrain mrgrain commented Feb 26, 2024

Fixes #897

PR is in draft. Changing the URL created a bunch of (potential) problems that need to be looked at and solved before it can be merged.

@tsuga
Copy link

tsuga commented Oct 16, 2024

Hi @mrgrain , thank you for picking this up.
Is there any timeframe for this issue? Thanks.

Copy link

@aws-cdk/aws-service-spec: Model database diff detected

└[~] service aws-sam
  └ resources
     ├[~] resource AWS::Serverless::Api
     │ ├ properties
     │ │  ├ AccessLogSetting: - AccessLogSetting (immutable)
     │ │  │                   + json ⇐ AccessLogSetting (immutable)
     │ │  ├[+] ApiKeySourceType: json
     │ │  ├ BinaryMediaTypes: - Array<string> (immutable)
     │ │  │                   + json ⇐ Array<string> (immutable)
     │ │  ├ CacheClusterEnabled: - boolean (immutable)
     │ │  │                      + json ⇐ boolean (immutable)
     │ │  ├ CacheClusterSize: - string (immutable)
     │ │  │                   + json ⇐ string (immutable)
     │ │  ├ CanarySetting: - CanarySetting (immutable)
     │ │  │                + json ⇐ CanarySetting (immutable)
     │ │  ├ Cors: - string | CorsConfiguration (immutable)
     │ │  │       + json | string | Cors ⇐ string | CorsConfiguration (immutable)
     │ │  ├ DefinitionUri: - string | S3Location (immutable)
     │ │  │                + string | DefinitionUri ⇐ string | S3Location (immutable)
     │ │  ├ Description: - string (immutable)
     │ │  │              + json ⇐ string (immutable)
     │ │  ├ DisableExecuteApiEndpoint: - boolean (immutable)
     │ │  │                            + json ⇐ boolean (immutable)
     │ │  ├ Domain: - DomainConfiguration (immutable)
     │ │  │         + Domain ⇐ DomainConfiguration (immutable)
     │ │  ├ EndpointConfiguration: - string | EndpointConfiguration (immutable)
     │ │  │                        + json | EndpointConfiguration ⇐ string | EndpointConfiguration (immutable)
     │ │  ├[+] FailOnWarnings: json
     │ │  ├[+] MergeDefinitions: boolean
     │ │  ├ MethodSettings: - Array<json> (immutable)
     │ │  │                 + json ⇐ Array<json> (immutable)
     │ │  ├ MinimumCompressionSize: - number ⇐ integer (immutable)
     │ │  │                         + json ⇐ integer (immutable)
     │ │  ├[+] Mode: json
     │ │  ├ Name: - string (immutable)
     │ │  │       + json ⇐ string (immutable)
     │ │  ├ OpenApiVersion: - string (immutable)
     │ │  │                 + number | string ⇐ string (immutable)
     │ │  ├[+] PropagateTags: boolean
     │ │  ├ StageName: - string (required, immutable)
     │ │  │            + json | string ⇐ string (required, immutable)
     │ │  ├ Tags: - Map<string, string> (immutable)
     │ │  │       + json ⇐ Map<string, string> (immutable)
     │ │  ├ TracingEnabled: - boolean (immutable)
     │ │  │                 + json ⇐ boolean (immutable)
     │ │  └ Variables: - Map<string, string> (immutable)
     │ │               + json ⇐ Map<string, string> (immutable)
     │ └ types
     │    ├[~] type Auth
     │    │ └ properties
     │    │    ├[+] AddApiKeyRequiredToCorsPreflight: boolean
     │    │    ├[+] ApiKeyRequired: boolean
     │    │    ├ Authorizers: - json (immutable)
     │    │    │              + Map<string, CognitoAuthorizer | LambdaTokenAuthorizer | LambdaRequestAuthorizer> ⇐ json (immutable)
     │    │    ├[+] InvokeRole: string
     │    │    ├[+] ResourcePolicy: ResourcePolicy
     │    │    └[+] UsagePlan: UsagePlan
     │    ├[+] type CognitoAuthorizer
     │    │ ├  name: CognitoAuthorizer
     │    │ └ properties
     │    │    ├AuthorizationScopes: Array<string>
     │    │    ├Identity: CognitoAuthorizerIdentity
     │    │    └UserPoolArn: json | string (required)
     │    ├[+] type CognitoAuthorizerIdentity
     │    │ ├  name: CognitoAuthorizerIdentity
     │    │ └ properties
     │    │    ├Header: string
     │    │    ├ReauthorizeEvery: json | integer
     │    │    └ValidationExpression: string
     │    ├[+] type Cors
     │    │ ├  name: Cors
     │    │ └ properties
     │    │    ├AllowCredentials: boolean
     │    │    ├AllowHeaders: string
     │    │    ├AllowMethods: string
     │    │    ├AllowOrigin: string (required)
     │    │    └MaxAge: string
     │    ├[+] type DefinitionUri
     │    │ ├  name: DefinitionUri
     │    │ └ properties
     │    │    ├Bucket: json (required)
     │    │    ├Key: json (required)
     │    │    └Version: json
     │    ├[+] type Domain
     │    │ ├  name: Domain
     │    │ └ properties
     │    │    ├BasePath: json
     │    │    ├CertificateArn: json (required)
     │    │    ├DomainName: json (required)
     │    │    ├EndpointConfiguration: json | string
     │    │    ├MutualTlsAuthentication: json
     │    │    ├NormalizeBasePath: boolean
     │    │    ├OwnershipVerificationCertificateArn: json
     │    │    ├Route53: Route53
     │    │    └SecurityPolicy: json
     │    ├[~] type EndpointConfiguration
     │    │ └ properties
     │    │    ├ Type: - string (immutable)
     │    │    │       + json ⇐ string (immutable)
     │    │    └[+] VPCEndpointIds: json
     │    ├[+] type LambdaRequestAuthorizer
     │    │ ├  name: LambdaRequestAuthorizer
     │    │ └ properties
     │    │    ├AuthorizationScopes: Array<string>
     │    │    ├DisableFunctionDefaultPermissions: boolean
     │    │    ├FunctionArn: json | string (required)
     │    │    ├FunctionInvokeRole: string
     │    │    ├FunctionPayloadType: string
     │    │    └Identity: LambdaRequestAuthorizerIdentity
     │    ├[+] type LambdaRequestAuthorizerIdentity
     │    │ ├  name: LambdaRequestAuthorizerIdentity
     │    │ └ properties
     │    │    ├Context: Array<string>
     │    │    ├Headers: Array<string>
     │    │    ├QueryStrings: Array<string>
     │    │    ├ReauthorizeEvery: json | integer
     │    │    └StageVariables: Array<string>
     │    ├[+] type LambdaTokenAuthorizer
     │    │ ├  name: LambdaTokenAuthorizer
     │    │ └ properties
     │    │    ├AuthorizationScopes: Array<string>
     │    │    ├DisableFunctionDefaultPermissions: boolean
     │    │    ├FunctionArn: json | string (required)
     │    │    ├FunctionInvokeRole: string
     │    │    ├FunctionPayloadType: string
     │    │    └Identity: LambdaTokenAuthorizerIdentity
     │    ├[+] type LambdaTokenAuthorizerIdentity
     │    │ ├  name: LambdaTokenAuthorizerIdentity
     │    │ └ properties
     │    │    ├Header: string
     │    │    ├ReauthorizeEvery: json | integer
     │    │    └ValidationExpression: string
     │    ├[+] type ResourcePolicy
     │    │ ├  name: ResourcePolicy
     │    │ └ properties
     │    │    ├AwsAccountBlacklist: Array<string | json>
     │    │    ├AwsAccountWhitelist: Array<string | json>
     │    │    ├CustomStatements: Array<string | json>
     │    │    ├IntrinsicVpcBlacklist: Array<string | json>
     │    │    ├IntrinsicVpcWhitelist: Array<string | json>
     │    │    ├IntrinsicVpceBlacklist: Array<string | json>
     │    │    ├IntrinsicVpceWhitelist: Array<string | json>
     │    │    ├IpRangeBlacklist: Array<string | json>
     │    │    ├IpRangeWhitelist: Array<string | json>
     │    │    ├SourceVpcBlacklist: Array<string | json>
     │    │    └SourceVpcWhitelist: Array<string | json>
     │    ├[+] type Route53
     │    │ ├  name: Route53
     │    │ └ properties
     │    │    ├DistributionDomainName: json
     │    │    ├EvaluateTargetHealth: json
     │    │    ├HostedZoneId: json
     │    │    ├HostedZoneName: json
     │    │    ├IpV6: boolean
     │    │    ├Region: json
     │    │    ├SeparateRecordSetGroup: boolean
     │    │    └SetIdentifier: json
     │    ├[~] type S3Location
     │    │ └ properties
     │    │    └ Version: - number ⇐ integer (required, immutable)
     │    │               + integer (required, immutable)
     │    └[+] type UsagePlan
     │      ├  name: UsagePlan
     │      └ properties
     │         ├CreateUsagePlan: json | string (required)
     │         ├Description: json
     │         ├Quota: json
     │         ├Tags: json
     │         ├Throttle: json
     │         └UsagePlanName: json
     ├[~] resource AWS::Serverless::Application
     │ ├ properties
     │ │  ├ Location: - string | ApplicationLocation (required, immutable)
     │ │  │           + string | Location ⇐ string | ApplicationLocation (required, immutable)
     │ │  ├[+] NotificationARNs: json
     │ │  ├ Parameters: - Map<string, string> (immutable)
     │ │  │             + json ⇐ Map<string, string> (immutable)
     │ │  ├ Tags: - Map<string, string> (immutable)
     │ │  │       + json ⇐ Map<string, string> (immutable)
     │ │  └ TimeoutInMinutes: - number ⇐ integer (immutable)
     │ │                      + json ⇐ integer (immutable)
     │ └ types
     │    └[+] type Location
     │      ├  name: Location
     │      └ properties
     │         ├ApplicationId: json | string (required)
     │         └SemanticVersion: json | string (required)
     ├[+] resource AWS::Serverless::Connector
     │ ├  name: Connector
     │ │  cloudFormationType: AWS::Serverless::Connector
     │ │  cloudFormationTransform: AWS::Serverless-2016-10-31
     │ │  documentation: Definition of AWS::Serverless::Connector
     │ ├ properties
     │ │  ├Destination: ResourceReference | Array<ResourceReference> (required)
     │ │  ├Permissions: Array<string> (required)
     │ │  └Source: ResourceReference (required)
     │ └ types
     │    └type ResourceReference
     │     ├  name: ResourceReference
     │     └ properties
     │        ├Arn: json
     │        ├Id: string
     │        ├Name: json
     │        ├Qualifier: json
     │        ├QueueUrl: json
     │        ├ResourceId: json
     │        ├RoleName: json
     │        └Type: string
     ├[~] resource AWS::Serverless::Function
     │ ├ properties
     │ │  ├ Architectures: - Array<string> (immutable)
     │ │  │                + json ⇐ Array<string> (immutable)
     │ │  ├ AutoPublishAlias: - string (immutable)
     │ │  │                   + json | string ⇐ string (immutable)
     │ │  ├[+] AutoPublishAliasAllProperties: boolean
     │ │  ├ AutoPublishCodeSha256: - string (immutable)
     │ │  │                        + json | string ⇐ string (immutable)
     │ │  ├ CodeSigningConfigArn: - string (immutable)
     │ │  │                       + json | string ⇐ string (immutable)
     │ │  ├ CodeUri: - string | S3Location (immutable)
     │ │  │          + string | CodeUri ⇐ string | S3Location (immutable)
     │ │  ├ DeadLetterQueue: - DeadLetterQueue (immutable)
     │ │  │                  + json | DeadLetterQueue ⇐ DeadLetterQueue (immutable)
     │ │  ├ Description: - string (immutable)
     │ │  │              + json ⇐ string (immutable)
     │ │  ├ Environment: - FunctionEnvironment (immutable)
     │ │  │              + json ⇐ FunctionEnvironment (immutable)
     │ │  ├ EphemeralStorage: - EphemeralStorage (immutable)
     │ │  │                   + json ⇐ EphemeralStorage (immutable)
     │ │  ├ Events: - Map<string, EventSource> (immutable)
     │ │  │         + Map<string, S3Event | SNSEvent | KinesisEvent | DynamoDBEvent | DocumentDBEvent | SQSEvent | ApiEvent | ScheduleEvent | ScheduleV2Event | CloudWatchEvent | EventBridgeRuleEvent | CloudWatchLogsEvent | IoTRuleEvent | AlexaSkillEvent | CognitoEvent | HttpApiEvent | MSKEvent | MQEvent | SelfManagedKafkaEvent> ⇐ Map<string, EventSource> (immutable)
     │ │  ├ FileSystemConfigs: - Array<FileSystemConfig> (immutable)
     │ │  │                    + json ⇐ Array<FileSystemConfig> (immutable)
     │ │  ├ FunctionName: - string (immutable)
     │ │  │               + json ⇐ string (immutable)
     │ │  ├ Handler: - string (immutable)
     │ │  │          + json ⇐ string (immutable)
     │ │  ├ ImageConfig: - ImageConfig (immutable)
     │ │  │              + json ⇐ ImageConfig (immutable)
     │ │  ├ ImageUri: - string (immutable)
     │ │  │           + json ⇐ string (immutable)
     │ │  ├ InlineCode: - string (immutable)
     │ │  │             + json ⇐ string (immutable)
     │ │  ├ KmsKeyArn: - string (immutable)
     │ │  │            + json ⇐ string (immutable)
     │ │  ├ Layers: - Array<string> (immutable)
     │ │  │         + json ⇐ Array<string> (immutable)
     │ │  ├[+] LoggingConfig: json
     │ │  ├ MemorySize: - number ⇐ integer (immutable)
     │ │  │             + json ⇐ integer (immutable)
     │ │  ├ PackageType: - string (immutable)
     │ │  │              + json ⇐ string (immutable)
     │ │  ├ PermissionsBoundary: - string (immutable)
     │ │  │                      + json ⇐ string (immutable)
     │ │  ├ Policies: - string | IAMPolicyDocument | Array<string | IAMPolicyDocument | SAMPolicyTemplate> (immutable)
     │ │  │           + string | json | Array<string | json> ⇐ string | IAMPolicyDocument | Array<string | IAMPolicyDocument | SAMPolicyTemplate> (immutable)
     │ │  ├[+] PropagateTags: boolean
     │ │  ├ ProvisionedConcurrencyConfig: - ProvisionedConcurrencyConfig (immutable)
     │ │  │                               + json ⇐ ProvisionedConcurrencyConfig (immutable)
     │ │  ├[+] RecursiveLoop: json
     │ │  ├ ReservedConcurrentExecutions: - number ⇐ integer (immutable)
     │ │  │                               + json ⇐ integer (immutable)
     │ │  ├ Role: - string (immutable)
     │ │  │       + json | string ⇐ string (immutable)
     │ │  ├[+] RolePath: json
     │ │  ├ Runtime: - string (immutable)
     │ │  │          + json ⇐ string (immutable)
     │ │  ├[+] RuntimeManagementConfig: json
     │ │  ├[+] SnapStart: json
     │ │  ├ Tags: - Map<string, string> (immutable)
     │ │  │       + json ⇐ Map<string, string> (immutable)
     │ │  ├ Timeout: - number ⇐ integer (immutable)
     │ │  │          + json ⇐ integer (immutable)
     │ │  ├ Tracing: - string (immutable)
     │ │  │          + json | string ⇐ string (immutable)
     │ │  ├ VersionDescription: - string (immutable)
     │ │  │                     + json ⇐ string (immutable)
     │ │  └ VpcConfig: - VpcConfig (immutable)
     │ │               + json ⇐ VpcConfig (immutable)
     │ └ types
     │    ├[~] type AlexaSkillEvent
     │    │ └ properties
     │    │    ├[+] Properties: AlexaSkillEventProperties
     │    │    ├ SkillId: - string (required, immutable)
     │    │    │          + string (immutable)
     │    │    └[+] Type: string (required)
     │    ├[+] type AlexaSkillEventProperties
     │    │ ├  name: AlexaSkillEventProperties
     │    │ └ properties
     │    │    └SkillId: string
     │    ├[+] type ApiAuth
     │    │ ├  name: ApiAuth
     │    │ └ properties
     │    │    ├ApiKeyRequired: boolean
     │    │    ├AuthorizationScopes: Array<string>
     │    │    ├Authorizer: string
     │    │    ├InvokeRole: json | string
     │    │    ├OverrideApiAuth: boolean
     │    │    └ResourcePolicy: ResourcePolicy
     │    ├[~] type ApiEvent
     │    │ └ properties
     │    │    ├[+] Properties: ApiEventProperties (required)
     │    │    ├ RequestParameters: - Array<string | Map<string, RequestParameter>> ⇐ Array<string | RequestParameter> (immutable)
     │    │    │                    + Array<string | RequestParameter> (immutable)
     │    │    └[+] Type: string (required)
     │    ├[+] type ApiEventProperties
     │    │ ├  name: ApiEventProperties
     │    │ └ properties
     │    │    ├Auth: ApiAuth
     │    │    ├Method: string (required)
     │    │    ├Path: string (required)
     │    │    ├RequestModel: RequestModel
     │    │    ├RequestParameters: Array<string | Map<string, RequestParameters>>
     │    │    ├RestApiId: string | Ref
     │    │    └TimeoutInMillis: json
     │    ├[+] type CloudWatchEvent
     │    │ ├  name: CloudWatchEvent
     │    │ └ properties
     │    │    ├Properties: CloudWatchEventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type CloudWatchEventProperties
     │    │ ├  name: CloudWatchEventProperties
     │    │ └ properties
     │    │    ├Enabled: boolean
     │    │    ├EventBusName: json
     │    │    ├Input: json
     │    │    ├InputPath: json
     │    │    ├Pattern: json
     │    │    └State: json
     │    ├[~] type CloudWatchLogsEvent
     │    │ └ properties
     │    │    ├[+] Properties: CloudWatchLogsEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type CloudWatchLogsEventProperties
     │    │ ├  name: CloudWatchLogsEventProperties
     │    │ └ properties
     │    │    ├FilterPattern: json (required)
     │    │    └LogGroupName: json (required)
     │    ├[+] type CodeUri
     │    │ ├  name: CodeUri
     │    │ └ properties
     │    │    ├Bucket: json | string (required)
     │    │    ├Key: json | string (required)
     │    │    └Version: json | string
     │    ├[~] type CognitoEvent
     │    │ └ properties
     │    │    ├[+] Properties: CognitoEventProperties (required)
     │    │    ├ Trigger: - string | Array<string> ⇐ string (required)
     │    │    │          + string (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type CognitoEventProperties
     │    │ ├  name: CognitoEventProperties
     │    │ └ properties
     │    │    ├Trigger: json (required)
     │    │    └UserPool: json | string (required)
     │    ├[+] type DeadLetterConfig
     │    │ ├  name: DeadLetterConfig
     │    │ └ properties
     │    │    ├Arn: json
     │    │    ├QueueLogicalId: string
     │    │    └Type: string
     │    ├[~] type DeploymentPreference
     │    │ └ properties
     │    │    ├ Alarms: - Array<string> (immutable)
     │    │    │         + json | Array<json> ⇐ Array<string> (immutable)
     │    │    ├ Enabled: - boolean (immutable)
     │    │    │          + json | boolean ⇐ boolean (immutable)
     │    │    ├[+] PassthroughCondition: json | boolean
     │    │    ├ Role: - string
     │    │    │       + json | string
     │    │    ├[+] TriggerConfigurations: json
     │    │    └ Type: - string (immutable)
     │    │            + json | string ⇐ string (immutable)
     │    ├[+] type DocumentDBEvent
     │    │ ├  name: DocumentDBEvent
     │    │ └ properties
     │    │    ├Properties: DocumentDBEventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type DocumentDBEventProperties
     │    │ ├  name: DocumentDBEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├Cluster: json (required)
     │    │    ├CollectionName: json
     │    │    ├DatabaseName: json (required)
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├FullDocument: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├SecretsManagerKmsKeyId: string
     │    │    ├SourceAccessConfigurations: json (required)
     │    │    ├StartingPosition: json
     │    │    └StartingPositionTimestamp: json
     │    ├[~] type DynamoDBEvent
     │    │ └ properties
     │    │    ├ BatchSize: - number ⇐ integer (immutable)
     │    │    │            + integer (immutable)
     │    │    ├ MaximumBatchingWindowInSeconds: - number ⇐ integer (immutable)
     │    │    │                                 + integer (immutable)
     │    │    ├ MaximumRecordAgeInSeconds: - number ⇐ integer (immutable)
     │    │    │                            + integer (immutable)
     │    │    ├ MaximumRetryAttempts: - number ⇐ integer (immutable)
     │    │    │                       + integer (immutable)
     │    │    ├ ParallelizationFactor: - number ⇐ integer (immutable)
     │    │    │                        + integer (immutable)
     │    │    ├[+] Properties: DynamoDBEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type DynamoDBEventProperties
     │    │ ├  name: DynamoDBEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├BisectBatchOnFunctionError: json
     │    │    ├DestinationConfig: json
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├FunctionResponseTypes: json
     │    │    ├KmsKeyArn: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├MaximumRecordAgeInSeconds: json
     │    │    ├MaximumRetryAttempts: json
     │    │    ├ParallelizationFactor: json
     │    │    ├StartingPosition: json
     │    │    ├StartingPositionTimestamp: json
     │    │    ├Stream: json (required)
     │    │    └TumblingWindowInSeconds: json
     │    ├[~] type EphemeralStorage
     │    │ └ properties
     │    │    └ Size: - number ⇐ integer (required, immutable)
     │    │            + integer (required, immutable)
     │    ├[~] type EventBridgeRuleEvent
     │    │ └ properties
     │    │    ├[+] Properties: EventBridgeRuleEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type EventBridgeRuleEventProperties
     │    │ ├  name: EventBridgeRuleEventProperties
     │    │ └ properties
     │    │    ├DeadLetterConfig: DeadLetterConfig
     │    │    ├EventBusName: json
     │    │    ├Input: json
     │    │    ├InputPath: json
     │    │    ├InputTransformer: json
     │    │    ├Pattern: json (required)
     │    │    ├RetryPolicy: json
     │    │    ├RuleName: json
     │    │    └Target: EventBridgeRuleTarget
     │    ├[+] type EventBridgeRuleTarget
     │    │ ├  name: EventBridgeRuleTarget
     │    │ └ properties
     │    │    └Id: json (required)
     │    ├[~] type EventInvokeConfig
     │    │ └ properties
     │    │    ├ MaximumEventAgeInSeconds: - number ⇐ integer (immutable)
     │    │    │                           + integer (immutable)
     │    │    └ MaximumRetryAttempts: - number ⇐ integer (immutable)
     │    │                            + integer (immutable)
     │    ├[~] type EventInvokeDestinationConfig
     │    │ └ properties
     │    │    ├ OnFailure: - Destination (required, immutable)
     │    │    │            + EventInvokeOnFailure ⇐ Destination (immutable)
     │    │    └ OnSuccess: - Destination (required, immutable)
     │    │                 + EventInvokeOnSuccess ⇐ Destination (immutable)
     │    ├[+] type EventInvokeOnFailure
     │    │ ├  name: EventInvokeOnFailure
     │    │ └ properties
     │    │    ├Destination: json | string
     │    │    └Type: string
     │    ├[+] type EventInvokeOnSuccess
     │    │ ├  name: EventInvokeOnSuccess
     │    │ └ properties
     │    │    ├Destination: json | string
     │    │    └Type: string
     │    ├[+] type EventsScheduleProperties
     │    │ ├  name: EventsScheduleProperties
     │    │ └ properties
     │    │    ├DeadLetterConfig: DeadLetterConfig
     │    │    ├Description: json
     │    │    ├Enabled: boolean
     │    │    ├Input: json
     │    │    ├Name: json
     │    │    ├RetryPolicy: json
     │    │    ├Schedule: json
     │    │    └State: json
     │    ├[~] type FunctionUrlConfig
     │    │ └ properties
     │    │    ├ AuthType: - string (required, immutable)
     │    │    │           + json | string ⇐ string (required, immutable)
     │    │    ├ Cors: - string | CorsConfiguration (immutable)
     │    │    │       + json ⇐ string | CorsConfiguration (immutable)
     │    │    └ InvokeMode: - string (immutable)
     │    │                  + json ⇐ string (immutable)
     │    ├[~] type Hooks
     │    │ └ properties
     │    │    ├ PostTraffic: - string (immutable)
     │    │    │              + json | string ⇐ string (immutable)
     │    │    └ PreTraffic: - string (immutable)
     │    │                  + json | string ⇐ string (immutable)
     │    ├[+] type HttpApiAuth
     │    │ ├  name: HttpApiAuth
     │    │ └ properties
     │    │    ├AuthorizationScopes: Array<string>
     │    │    └Authorizer: string
     │    ├[~] type HttpApiEvent
     │    │ └ properties
     │    │    ├[+] Properties: HttpApiEventProperties
     │    │    ├ TimeoutInMillis: - number ⇐ integer (immutable)
     │    │    │                  + integer (immutable)
     │    │    └[+] Type: string (required)
     │    ├[+] type HttpApiEventProperties
     │    │ ├  name: HttpApiEventProperties
     │    │ └ properties
     │    │    ├ApiId: json | string
     │    │    ├Auth: HttpApiAuth
     │    │    ├Method: string
     │    │    ├Path: string
     │    │    ├PayloadFormatVersion: json | string
     │    │    ├RouteSettings: json
     │    │    └TimeoutInMillis: json | integer
     │    ├[~] type IoTRuleEvent
     │    │ └ properties
     │    │    ├[+] Properties: IoTRuleEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type IoTRuleEventProperties
     │    │ ├  name: IoTRuleEventProperties
     │    │ └ properties
     │    │    ├AwsIotSqlVersion: json
     │    │    └Sql: json (required)
     │    ├[~] type KinesisEvent
     │    │ └ properties
     │    │    ├ BatchSize: - number ⇐ integer (immutable)
     │    │    │            + integer (immutable)
     │    │    ├[+] Properties: KinesisEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type KinesisEventProperties
     │    │ ├  name: KinesisEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├BisectBatchOnFunctionError: json
     │    │    ├DestinationConfig: json
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├FunctionResponseTypes: json
     │    │    ├KmsKeyArn: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├MaximumRecordAgeInSeconds: json
     │    │    ├MaximumRetryAttempts: json
     │    │    ├ParallelizationFactor: json
     │    │    ├StartingPosition: json
     │    │    ├StartingPositionTimestamp: json
     │    │    ├Stream: json (required)
     │    │    └TumblingWindowInSeconds: json
     │    ├[+] type MQEvent
     │    │ ├  name: MQEvent
     │    │ └ properties
     │    │    ├Properties: MQEventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type MQEventProperties
     │    │ ├  name: MQEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├Broker: json (required)
     │    │    ├DynamicPolicyName: boolean
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├KmsKeyArn: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├Queues: json (required)
     │    │    ├SecretsManagerKmsKeyId: string
     │    │    └SourceAccessConfigurations: json (required)
     │    ├[+] type MSKEvent
     │    │ ├  name: MSKEvent
     │    │ └ properties
     │    │    ├Properties: MSKEventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type MSKEventProperties
     │    │ ├  name: MSKEventProperties
     │    │ └ properties
     │    │    ├ConsumerGroupId: json
     │    │    ├DestinationConfig: json
     │    │    ├FilterCriteria: json
     │    │    ├KmsKeyArn: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├SourceAccessConfigurations: json
     │    │    ├StartingPosition: json
     │    │    ├StartingPositionTimestamp: json
     │    │    ├Stream: json (required)
     │    │    └Topics: json (required)
     │    ├[+] type Ref
     │    │ ├  name: Ref
     │    │ └ properties
     │    │    └Ref: string (required)
     │    ├[+] type RequestParameters
     │    │ ├  name: RequestParameters
     │    │ └ properties
     │    │    ├Caching: boolean
     │    │    └Required: boolean
     │    ├[+] type ResourcePolicy
     │    │ ├  name: ResourcePolicy
     │    │ └ properties
     │    │    ├AwsAccountBlacklist: Array<string | json>
     │    │    ├AwsAccountWhitelist: Array<string | json>
     │    │    ├CustomStatements: Array<string | json>
     │    │    ├IntrinsicVpcBlacklist: Array<string | json>
     │    │    ├IntrinsicVpcWhitelist: Array<string | json>
     │    │    ├IntrinsicVpceBlacklist: Array<string | json>
     │    │    ├IntrinsicVpceWhitelist: Array<string | json>
     │    │    ├IpRangeBlacklist: Array<string | json>
     │    │    ├IpRangeWhitelist: Array<string | json>
     │    │    ├SourceVpcBlacklist: Array<string | json>
     │    │    └SourceVpcWhitelist: Array<string | json>
     │    ├[~] type RouteSettings
     │    │ └ properties
     │    │    └ ThrottlingBurstLimit: - number ⇐ integer (immutable)
     │    │                            + integer (immutable)
     │    ├[~] type S3Event
     │    │ └ properties
     │    │    ├ Events: - string | Array<string> ⇐ string (required, immutable)
     │    │    │         + string (required, immutable)
     │    │    ├[+] Properties: S3EventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type S3EventProperties
     │    │ ├  name: S3EventProperties
     │    │ └ properties
     │    │    ├Bucket: json | string (required)
     │    │    ├Events: json (required)
     │    │    └Filter: json
     │    ├[~] type S3Location
     │    │ └ properties
     │    │    └ Version: - number ⇐ integer (immutable)
     │    │               + integer (immutable)
     │    ├[~] type ScheduleEvent
     │    │ └ properties
     │    │    ├[+] Properties: EventsScheduleProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type ScheduleV2Event
     │    │ ├  name: ScheduleV2Event
     │    │ └ properties
     │    │    ├Properties: ScheduleV2EventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type ScheduleV2EventProperties
     │    │ ├  name: ScheduleV2EventProperties
     │    │ └ properties
     │    │    ├DeadLetterConfig: DeadLetterConfig
     │    │    ├Description: json
     │    │    ├EndDate: json
     │    │    ├FlexibleTimeWindow: json
     │    │    ├GroupName: json
     │    │    ├Input: json
     │    │    ├KmsKeyArn: json
     │    │    ├Name: json
     │    │    ├OmitName: boolean
     │    │    ├PermissionsBoundary: json
     │    │    ├RetryPolicy: json
     │    │    ├RoleArn: json
     │    │    ├ScheduleExpression: json
     │    │    ├ScheduleExpressionTimezone: json
     │    │    ├StartDate: json
     │    │    └State: json
     │    ├[+] type SelfManagedKafkaEvent
     │    │ ├  name: SelfManagedKafkaEvent
     │    │ └ properties
     │    │    ├Properties: SelfManagedKafkaEventProperties (required)
     │    │    └Type: string (required)
     │    ├[+] type SelfManagedKafkaEventProperties
     │    │ ├  name: SelfManagedKafkaEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├ConsumerGroupId: json
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├KafkaBootstrapServers: Array<string | json>
     │    │    ├KmsKeyArn: json
     │    │    ├SourceAccessConfigurations: json (required)
     │    │    ├StartingPosition: json
     │    │    ├StartingPositionTimestamp: json
     │    │    └Topics: json (required)
     │    ├[~] type SNSEvent
     │    │ └ properties
     │    │    ├[+] Properties: SNSEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type SNSEventProperties
     │    │ ├  name: SNSEventProperties
     │    │ └ properties
     │    │    ├FilterPolicy: json
     │    │    ├FilterPolicyScope: json
     │    │    ├Region: json
     │    │    ├SqsSubscription: boolean | SqsSubscription
     │    │    └Topic: json (required)
     │    ├[~] type SQSEvent
     │    │ └ properties
     │    │    ├ BatchSize: - number ⇐ integer (immutable)
     │    │    │            + integer (immutable)
     │    │    ├[+] Properties: SQSEventProperties (required)
     │    │    └[+] Type: string (required)
     │    ├[+] type SQSEventProperties
     │    │ ├  name: SQSEventProperties
     │    │ └ properties
     │    │    ├BatchSize: json
     │    │    ├Enabled: json
     │    │    ├FilterCriteria: json
     │    │    ├FunctionResponseTypes: json
     │    │    ├KmsKeyArn: json
     │    │    ├MaximumBatchingWindowInSeconds: json
     │    │    ├Queue: json (required)
     │    │    └ScalingConfig: json
     │    └[+] type SqsSubscription
     │      ├  name: SqsSubscription
     │      └ properties
     │         ├BatchSize: json | string
     │         ├Enabled: boolean
     │         ├QueueArn: json | string (required)
     │         ├QueuePolicyLogicalId: string
     │         └QueueUrl: json | string (required)
     ├[+] resource AWS::Serverless::GraphQLApi
     │ ├  name: GraphQLApi
     │ │  cloudFormationType: AWS::Serverless::GraphQLApi
     │ │  cloudFormationTransform: AWS::Serverless-2016-10-31
     │ │  documentation: Definition of AWS::Serverless::GraphQLApi
     │ │  tagInformation: {"tagPropertyName":"Tags","variant":"map"}
     │ ├ properties
     │ │  ├ApiKeys: Map<string, ApiKey>
     │ │  ├Auth: Auth (required)
     │ │  ├Cache: Cache
     │ │  ├DataSources: DataSources
     │ │  ├DomainName: DomainName
     │ │  ├Functions: Map<string, Function>
     │ │  ├IntrospectionConfig: json
     │ │  ├Logging: Logging | boolean
     │ │  ├Name: json
     │ │  ├OwnerContact: json
     │ │  ├QueryDepthLimit: json
     │ │  ├ResolverCountLimit: json
     │ │  ├Resolvers: Map<string, Map<string, Resolver>>
     │ │  ├SchemaInline: json
     │ │  ├SchemaUri: json
     │ │  ├Tags: json
     │ │  ├Visibility: json
     │ │  └XrayEnabled: boolean
     │ └ types
     │    ├type ApiKey
     │    │├  name: ApiKey
     │    │└ properties
     │    │   ├ApiKeyId: json
     │    │   ├Description: json
     │    │   └ExpiresOn: json
     │    ├type Auth
     │    │├  name: Auth
     │    │└ properties
     │    │   ├Additional: Array<Authorizer>
     │    │   ├LambdaAuthorizer: LambdaAuthorizerConfig
     │    │   ├OpenIDConnect: OpenIDConnectConfig
     │    │   ├Type: string (required)
     │    │   └UserPool: UserPoolConfig
     │    ├type Authorizer
     │    │├  name: Authorizer
     │    │└ properties
     │    │   ├LambdaAuthorizer: LambdaAuthorizerConfig
     │    │   ├OpenIDConnect: OpenIDConnectConfig
     │    │   ├Type: string (required)
     │    │   └UserPool: UserPoolConfig
     │    ├type LambdaAuthorizerConfig
     │    │├  name: LambdaAuthorizerConfig
     │    │└ properties
     │    │   ├AuthorizerResultTtlInSeconds: json
     │    │   ├AuthorizerUri: json (required)
     │    │   └IdentityValidationExpression: json
     │    ├type OpenIDConnectConfig
     │    │├  name: OpenIDConnectConfig
     │    │└ properties
     │    │   ├AuthTTL: json
     │    │   ├ClientId: json
     │    │   ├IatTTL: json
     │    │   └Issuer: json
     │    ├type UserPoolConfig
     │    │├  name: UserPoolConfig
     │    │└ properties
     │    │   ├AppIdClientRegex: json
     │    │   ├AwsRegion: json
     │    │   ├DefaultAction: json
     │    │   └UserPoolId: json (required)
     │    ├type Cache
     │    │├  name: Cache
     │    │└ properties
     │    │   ├ApiCachingBehavior: json (required)
     │    │   ├AtRestEncryptionEnabled: json
     │    │   ├TransitEncryptionEnabled: json
     │    │   ├Ttl: json (required)
     │    │   └Type: json (required)
     │    ├type DataSources
     │    │├  name: DataSources
     │    │└ properties
     │    │   ├DynamoDb: Map<string, DynamoDBDataSource>
     │    │   └Lambda: Map<string, LambdaDataSource>
     │    ├type DynamoDBDataSource
     │    │├  name: DynamoDBDataSource
     │    │└ properties
     │    │   ├DeltaSync: DeltaSync
     │    │   ├Description: json
     │    │   ├Name: json
     │    │   ├Permissions: Array<string>
     │    │   ├Region: json
     │    │   ├ServiceRoleArn: json
     │    │   ├TableArn: json
     │    │   ├TableName: json (required)
     │    │   ├UseCallerCredentials: json
     │    │   └Versioned: json
     │    ├type DeltaSync
     │    │├  name: DeltaSync
     │    │└ properties
     │    │   ├BaseTableTTL: json (required)
     │    │   ├DeltaSyncTableName: json (required)
     │    │   └DeltaSyncTableTTL: json (required)
     │    ├type LambdaDataSource
     │    │├  name: LambdaDataSource
     │    │└ properties
     │    │   ├Description: json
     │    │   ├FunctionArn: json (required)
     │    │   ├Name: json
     │    │   └ServiceRoleArn: json
     │    ├type DomainName
     │    │├  name: DomainName
     │    │└ properties
     │    │   ├CertificateArn: json (required)
     │    │   ├Description: json
     │    │   └DomainName: json (required)
     │    ├type Function
     │    │├  name: Function
     │    │└ properties
     │    │   ├CodeUri: json
     │    │   ├DataSource: json | string
     │    │   ├Description: json
     │    │   ├Id: json
     │    │   ├InlineCode: json
     │    │   ├MaxBatchSize: json
     │    │   ├Name: string
     │    │   ├Runtime: Runtime
     │    │   └Sync: Sync
     │    ├type Runtime
     │    │├  name: Runtime
     │    │└ properties
     │    │   ├Name: json (required)
     │    │   └Version: json (required)
     │    ├type Sync
     │    │├  name: Sync
     │    │└ properties
     │    │   ├ConflictDetection: json (required)
     │    │   ├ConflictHandler: json
     │    │   └LambdaConflictHandlerConfig: LambdaConflictHandlerConfig
     │    ├type LambdaConflictHandlerConfig
     │    │├  name: LambdaConflictHandlerConfig
     │    │└ properties
     │    │   └LambdaConflictHandlerArn: json (required)
     │    ├type Logging
     │    │├  name: Logging
     │    │└ properties
     │    │   ├CloudWatchLogsRoleArn: json
     │    │   ├ExcludeVerboseContent: json
     │    │   └FieldLogLevel: json
     │    ├type Resolver
     │    │├  name: Resolver
     │    │└ properties
     │    │   ├Caching: Caching
     │    │   ├CodeUri: json
     │    │   ├FieldName: string
     │    │   ├InlineCode: json
     │    │   ├MaxBatchSize: json
     │    │   ├Pipeline: Array<string>
     │    │   ├Runtime: Runtime
     │    │   └Sync: Sync
     │    └type Caching
     │     ├  name: Caching
     │     └ properties
     │        ├CachingKeys: Array<json>
     │        └Ttl: json (required)
     ├[~] resource AWS::Serverless::HttpApi
     │ ├ properties
     │ │  ├[+] AccessLogSettings: json
     │ │  ├ Auth: - HttpApiAuth (immutable)
     │ │  │       + Auth ⇐ HttpApiAuth (immutable)
     │ │  ├ CorsConfiguration: - boolean | CorsConfigurationObject (immutable)
     │ │  │                    + json ⇐ boolean | CorsConfigurationObject (immutable)
     │ │  ├ DefaultRouteSettings: - RouteSettings (immutable)
     │ │  │                       + json ⇐ RouteSettings (immutable)
     │ │  ├ DefinitionUri: - string | S3Location (immutable)
     │ │  │                + string | DefinitionUri ⇐ string | S3Location (immutable)
     │ │  ├ DisableExecuteApiEndpoint: - boolean (immutable)
     │ │  │                            + json ⇐ boolean (immutable)
     │ │  ├ Domain: - HttpApiDomainConfiguration (immutable)
     │ │  │         + Domain ⇐ HttpApiDomainConfiguration (immutable)
     │ │  ├ FailOnWarnings: - boolean (immutable)
     │ │  │                 + json ⇐ boolean (immutable)
     │ │  ├[+] Name: json
     │ │  ├[+] PropagateTags: boolean
     │ │  ├ RouteSettings: - RouteSettings (immutable)
     │ │  │                + json ⇐ RouteSettings (immutable)
     │ │  ├ StageName: - string (immutable)
     │ │  │            + json ⇐ string (immutable)
     │ │  ├ StageVariables: - Map<string, string> (immutable)
     │ │  │                 + json ⇐ Map<string, string> (immutable)
     │ │  └ Tags: - Map<string, string> (immutable)
     │ │          + json ⇐ Map<string, string> (immutable)
     │ └ types
     │    ├[+] type Auth
     │    │ ├  name: Auth
     │    │ └ properties
     │    │    ├Authorizers: Map<string, OAuth2Authorizer | LambdaAuthorizer>
     │    │    ├DefaultAuthorizer: string
     │    │    └EnableIamAuthorizer: boolean
     │    ├[~] type CorsConfigurationObject
     │    │ └ properties
     │    │    └ MaxAge: - number ⇐ integer (immutable)
     │    │              + integer (immutable)
     │    ├[+] type DefinitionUri
     │    │ ├  name: DefinitionUri
     │    │ └ properties
     │    │    ├Bucket: string (required)
     │    │    ├Key: string (required)
     │    │    └Version: string
     │    ├[+] type Domain
     │    │ ├  name: Domain
     │    │ └ properties
     │    │    ├BasePath: Array<string>
     │    │    ├CertificateArn: json (required)
     │    │    ├DomainName: json (required)
     │    │    ├EndpointConfiguration: json | string
     │    │    ├MutualTlsAuthentication: json
     │    │    ├OwnershipVerificationCertificateArn: json
     │    │    ├Route53: Route53
     │    │    └SecurityPolicy: json
     │    ├[+] type LambdaAuthorizer
     │    │ ├  name: LambdaAuthorizer
     │    │ └ properties
     │    │    ├AuthorizerPayloadFormatVersion: string | number (required)
     │    │    ├EnableFunctionDefaultPermissions: boolean
     │    │    ├EnableSimpleResponses: boolean
     │    │    ├FunctionArn: json | string (required)
     │    │    ├FunctionInvokeRole: json | string
     │    │    └Identity: LambdaAuthorizerIdentity
     │    ├[+] type LambdaAuthorizerIdentity
     │    │ ├  name: LambdaAuthorizerIdentity
     │    │ └ properties
     │    │    ├Context: Array<string>
     │    │    ├Headers: Array<string>
     │    │    ├QueryStrings: Array<string>
     │    │    ├ReauthorizeEvery: integer
     │    │    └StageVariables: Array<string>
     │    ├[+] type OAuth2Authorizer
     │    │ ├  name: OAuth2Authorizer
     │    │ └ properties
     │    │    ├AuthorizationScopes: Array<string>
     │    │    ├IdentitySource: string
     │    │    └JwtConfiguration: json
     │    ├[+] type Route53
     │    │ ├  name: Route53
     │    │ └ properties
     │    │    ├DistributionDomainName: json
     │    │    ├EvaluateTargetHealth: json
     │    │    ├HostedZoneId: json
     │    │    ├HostedZoneName: json
     │    │    ├IpV6: boolean
     │    │    ├Region: json
     │    │    └SetIdentifier: json
     │    ├[~] type RouteSettings
     │    │ └ properties
     │    │    └ ThrottlingBurstLimit: - number ⇐ integer (immutable)
     │    │                            + integer (immutable)
     │    └[~] type S3Location
     │      └ properties
     │         └ Version: - number ⇐ integer (required, immutable)
     │                    + integer (required, immutable)
     ├[~] resource AWS::Serverless::LayerVersion
     │ ├ properties
     │ │  ├[+] CompatibleArchitectures: json
     │ │  ├ CompatibleRuntimes: - Array<string> (immutable)
     │ │  │                     + json ⇐ Array<string> (immutable)
     │ │  ├ ContentUri: - string | S3Location (immutable)
     │ │  │             + string | ContentUri ⇐ string | S3Location (required, immutable)
     │ │  ├ Description: - string (immutable)
     │ │  │              + json ⇐ string (immutable)
     │ │  ├ LayerName: - string (immutable)
     │ │  │            + json ⇐ string (immutable)
     │ │  ├ LicenseInfo: - string (immutable)
     │ │  │              + json ⇐ string (immutable)
     │ │  └ RetentionPolicy: - string (immutable)
     │ │                     + json | string ⇐ string (immutable)
     │ └ types
     │    ├[+] type ContentUri
     │    │ ├  name: ContentUri
     │    │ └ properties
     │    │    ├Bucket: json (required)
     │    │    ├Key: json (required)
     │    │    └Version: json
     │    └[~] type S3Location
     │      └ properties
     │         └ Version: - number ⇐ integer (immutable)
     │                    + integer (immutable)
     ├[~] resource AWS::Serverless::SimpleTable
     │ ├ properties
     │ │  ├[+] PointInTimeRecoverySpecification: json
     │ │  ├ ProvisionedThroughput: - ProvisionedThroughput (immutable)
     │ │  │                        + json ⇐ ProvisionedThroughput (immutable)
     │ │  ├ SSESpecification: - SSESpecification (immutable)
     │ │  │                   + json ⇐ SSESpecification (immutable)
     │ │  ├ TableName: - string (immutable)
     │ │  │            + json ⇐ string (immutable)
     │ │  └ Tags: - Map<string, string> (immutable)
     │ │          + json ⇐ Map<string, string> (immutable)
     │ └ types
     │    ├[~] type PrimaryKey
     │    │ └ properties
     │    │    ├ Name: - string (immutable)
     │    │    │       + json ⇐ string (required, immutable)
     │    │    └ Type: - string (required, immutable)
     │    │            + json ⇐ string (required, immutable)
     │    └[~] type ProvisionedThroughput
     │      └ properties
     │         ├ ReadCapacityUnits: - number ⇐ integer (immutable)
     │         │                    + integer (immutable)
     │         └ WriteCapacityUnits: - number ⇐ integer (required, immutable)
     │                               + integer (required, immutable)
     └[~] resource AWS::Serverless::StateMachine
       ├ properties
       │  ├[+] AutoPublishAlias: json
       │  ├ DefinitionSubstitutions: - Map<string, string> (immutable)
       │  │                          + json ⇐ Map<string, string> (immutable)
       │  ├ DefinitionUri: - string | S3Location (immutable)
       │  │                + string | json ⇐ string | S3Location (immutable)
       │  ├[+] DeploymentPreference: json
       │  ├ Events: - Map<string, EventSource> (immutable)
       │  │         + Map<string, ScheduleEvent | ScheduleV2Event | CloudWatchEvent | EventBridgeRuleEvent | ApiEvent> ⇐ Map<string, EventSource> (immutable)
       │  ├ Logging: - LoggingConfiguration (immutable)
       │  │          + json ⇐ LoggingConfiguration (immutable)
       │  ├ Name: - string (immutable)
       │  │       + json ⇐ string (immutable)
       │  ├[+] PermissionsBoundary: json
       │  ├ Policies: - string | IAMPolicyDocument | Array<string | IAMPolicyDocument | SAMPolicyTemplate> (immutable)
       │  │           + string | json | Array<string | json> ⇐ string | IAMPolicyDocument | Array<string | IAMPolicyDocument | SAMPolicyTemplate> (immutable)
       │  ├[+] PropagateTags: boolean
       │  ├ Role: - string (immutable)
       │  │       + json ⇐ string (immutable)
       │  ├[+] RolePath: json
       │  ├ Tags: - Map<string, string> (immutable)
       │  │       + json ⇐ Map<string, string> (immutable)
       │  ├ Tracing: - TracingConfiguration (immutable)
       │  │          + json ⇐ TracingConfiguration (immutable)
       │  ├ Type: - string (immutable)
       │  │       + json ⇐ string (immutable)
       │  └[+] UseAliasAsEventTarget: boolean
       └ types
          ├[~] type ApiEvent
          │ └ properties
          │    ├[+] Properties: ApiEventProperties (required)
          │    └[+] Type: string (required)
          ├[+] type ApiEventProperties
          │ ├  name: ApiEventProperties
          │ └ properties
          │    ├Auth: Auth
          │    ├Method: string (required)
          │    ├Path: string (required)
          │    ├RestApiId: json | string
          │    └UnescapeMappingTemplate: boolean
          ├[+] type Auth
          │ ├  name: Auth
          │ └ properties
          │    ├ApiKeyRequired: boolean
          │    ├AuthorizationScopes: Array<string>
          │    ├Authorizer: string
          │    └ResourcePolicy: ResourcePolicy
          ├[+] type CloudWatchEvent
          │ ├  name: CloudWatchEvent
          │ └ properties
          │    ├Properties: CloudWatchEventProperties (required)
          │    └Type: string (required)
          ├[+] type CloudWatchEventProperties
          │ ├  name: CloudWatchEventProperties
          │ └ properties
          │    ├EventBusName: json
          │    ├Input: json
          │    ├InputPath: json
          │    └Pattern: json
          ├[+] type DeadLetterConfig
          │ ├  name: DeadLetterConfig
          │ └ properties
          │    ├Arn: json
          │    ├QueueLogicalId: string
          │    └Type: string
          ├[~] type EventBridgeRuleEvent
          │ └ properties
          │    ├[+] Properties: EventBridgeRuleEventProperties (required)
          │    └[+] Type: string (required)
          ├[+] type EventBridgeRuleEventProperties
          │ ├  name: EventBridgeRuleEventProperties
          │ └ properties
          │    ├DeadLetterConfig: DeadLetterConfig
          │    ├EventBusName: json
          │    ├Input: json
          │    ├InputPath: json
          │    ├InputTransformer: json
          │    ├Pattern: json
          │    ├RetryPolicy: json
          │    ├RuleName: json
          │    └Target: EventBridgeRuleTarget
          ├[+] type EventBridgeRuleTarget
          │ ├  name: EventBridgeRuleTarget
          │ └ properties
          │    └Id: json (required)
          ├[+] type ResourcePolicy
          │ ├  name: ResourcePolicy
          │ └ properties
          │    ├AwsAccountBlacklist: Array<string | json>
          │    ├AwsAccountWhitelist: Array<string | json>
          │    ├CustomStatements: Array<string | json>
          │    ├IntrinsicVpcBlacklist: Array<string | json>
          │    ├IntrinsicVpcWhitelist: Array<string | json>
          │    ├IntrinsicVpceBlacklist: Array<string | json>
          │    ├IntrinsicVpceWhitelist: Array<string | json>
          │    ├IpRangeBlacklist: Array<string | json>
          │    ├IpRangeWhitelist: Array<string | json>
          │    ├SourceVpcBlacklist: Array<string | json>
          │    └SourceVpcWhitelist: Array<string | json>
          ├[~] type S3Location
          │ └ properties
          │    └ Version: - number ⇐ integer (immutable)
          │               + integer (immutable)
          ├[~] type ScheduleEvent
          │ └ properties
          │    ├[+] Properties: ScheduleEventProperties (required)
          │    └[+] Type: string (required)
          ├[+] type ScheduleEventProperties
          │ ├  name: ScheduleEventProperties
          │ └ properties
          │    ├DeadLetterConfig: DeadLetterConfig
          │    ├Description: json
          │    ├Enabled: boolean
          │    ├Input: json
          │    ├Name: json
          │    ├RetryPolicy: json
          │    ├RoleArn: json
          │    ├Schedule: json
          │    ├State: json
          │    └Target: ScheduleTarget
          ├[+] type ScheduleTarget
          │ ├  name: ScheduleTarget
          │ └ properties
          │    └Id: json (required)
          ├[+] type ScheduleV2Event
          │ ├  name: ScheduleV2Event
          │ └ properties
          │    ├Properties: ScheduleV2EventProperties (required)
          │    └Type: string (required)
          └[+] type ScheduleV2EventProperties
            ├  name: ScheduleV2EventProperties
            └ properties
               ├DeadLetterConfig: DeadLetterConfig
               ├Description: json
               ├EndDate: json
               ├FlexibleTimeWindow: json
               ├GroupName: json
               ├Input: json
               ├KmsKeyArn: json
               ├Name: json
               ├OmitName: boolean
               ├PermissionsBoundary: json
               ├RetryPolicy: json
               ├RoleArn: json
               ├ScheduleExpression: json
               ├ScheduleExpressionTimezone: json
               ├StartDate: json
               └State: json

@kaizencc
Copy link
Contributor

AFAICT, the biggest issue with the new spec is that a lot of properties are turning into json type instead of their custom type. The new schema has this everywhere we are now saying is a json:

"allOf": [
            {
              "$ref": "#/definitions/PassThroughProp"
            }
          ],

and this is the definition of PassThroughProp.

    "PassThroughProp": {},

This... has to be a problem with the "official" SAM schema right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use official SAM schema
3 participants