{
  "Parameters": {
    "DynamoDBModelTableReadIOPS": {
      "Type": "Number",
      "Default": 5,
      "Description": "The number of read IOPS the table should support."
    },
    "DynamoDBModelTableWriteIOPS": {
      "Type": "Number",
      "Default": 5,
      "Description": "The number of write IOPS the table should support."
    },
    "DynamoDBBillingMode": {
      "Type": "String",
      "Default": "PAY_PER_REQUEST",
      "AllowedValues": [
        "PAY_PER_REQUEST",
        "PROVISIONED"
      ],
      "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes."
    },
    "DynamoDBEnablePointInTimeRecovery": {
      "Type": "String",
      "Default": "false",
      "AllowedValues": [
        "true",
        "false"
      ],
      "Description": "Whether to enable Point in Time Recovery on the table."
    },
    "DynamoDBEnableServerSideEncryption": {
      "Type": "String",
      "Default": "true",
      "AllowedValues": [
        "true",
        "false"
      ],
      "Description": "Enable server side encryption powered by KMS."
    },
    "referencetotransformerrootstackenv10C5A902Ref": {
      "Type": "String"
    },
    "referencetotransformerrootstackGraphQLAPI20497F53ApiId": {
      "Type": "String"
    },
    "referencetotransformerrootstackS3DeploymentBucket7592718ARef": {
      "Type": "String"
    },
    "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": {
      "Type": "String"
    },
    "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowQuerygetFollowauth0FunctionQuerygetFollowauth0FunctionAppSyncFunction4D0BAD6FFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationcreateUserinit0FunctionMutationcreateUserinit0FunctionAppSyncFunction5CF77F6AFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowMutationcreateFollowauth0FunctionMutationcreateFollowauth0FunctionAppSyncFunctionF9F07A49FunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationupdateUserinit0FunctionMutationupdateUserinit0FunctionAppSyncFunction90E2C98AFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowSubscriptiononCreateFollowauth0FunctionSubscriptiononCreateFollowauth0FunctionAppSyncFunction54BF6B84FunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId": {
      "Type": "String"
    }
  },
  "Conditions": {
    "HasEnvironmentParameter": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
            },
            "NONE"
          ]
        }
      ]
    },
    "ShouldUseServerSideEncryption": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBEnableServerSideEncryption"
        },
        "true"
      ]
    },
    "ShouldUsePayPerRequestBilling": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBBillingMode"
        },
        "PAY_PER_REQUEST"
      ]
    },
    "ShouldUsePointInTimeRecovery": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBEnablePointInTimeRecovery"
        },
        "true"
      ]
    }
  },
  "Resources": {
    "RecipeIngredientTable": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "KeySchema": [
          {
            "AttributeName": "id",
            "KeyType": "HASH"
          }
        ],
        "AttributeDefinitions": [
          {
            "AttributeName": "id",
            "AttributeType": "S"
          },
          {
            "AttributeName": "recipeCardRecipeIngredientsId",
            "AttributeType": "S"
          }
        ],
        "BillingMode": {
          "Fn::If": [
            "ShouldUsePayPerRequestBilling",
            "PAY_PER_REQUEST",
            {
              "Ref": "AWS::NoValue"
            }
          ]
        },
        "GlobalSecondaryIndexes": [
          {
            "IndexName": "gsi-RecipeCard.recipeIngredients",
            "KeySchema": [
              {
                "AttributeName": "recipeCardRecipeIngredientsId",
                "KeyType": "HASH"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            },
            "ProvisionedThroughput": {
              "Fn::If": [
                "ShouldUsePayPerRequestBilling",
                {
                  "Ref": "AWS::NoValue"
                },
                {
                  "ReadCapacityUnits": {
                    "Ref": "DynamoDBModelTableReadIOPS"
                  },
                  "WriteCapacityUnits": {
                    "Ref": "DynamoDBModelTableWriteIOPS"
                  }
                }
              ]
            }
          }
        ],
        "PointInTimeRecoverySpecification": {
          "Fn::If": [
            "ShouldUsePointInTimeRecovery",
            {
              "PointInTimeRecoveryEnabled": true
            },
            {
              "Ref": "AWS::NoValue"
            }
          ]
        },
        "ProvisionedThroughput": {
          "Fn::If": [
            "ShouldUsePayPerRequestBilling",
            {
              "Ref": "AWS::NoValue"
            },
            {
              "ReadCapacityUnits": {
                "Ref": "DynamoDBModelTableReadIOPS"
              },
              "WriteCapacityUnits": {
                "Ref": "DynamoDBModelTableWriteIOPS"
              }
            }
          ]
        },
        "SSESpecification": {
          "SSEEnabled": {
            "Fn::If": [
              "ShouldUseServerSideEncryption",
              true,
              false
            ]
          }
        },
        "StreamSpecification": {
          "StreamViewType": "NEW_AND_OLD_IMAGES"
        },
        "TableName": {
          "Fn::Join": [
            "",
            [
              "RecipeIngredient-",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "-",
              {
                "Ref": "referencetotransformerrootstackenv10C5A902Ref"
              }
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete"
    },
    "RecipeIngredientIAMRole2B189D25": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "appsync.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "RoleName": {
          "Fn::Join": [
            "",
            [
              "RecipeIngredientIAMRd0c233-",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "-",
              {
                "Ref": "referencetotransformerrootstackenv10C5A902Ref"
              }
            ]
          ]
        }
      }
    },
    "RecipeIngredientIAMRoleDefaultPolicyB02C21AD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "RecipeIngredientTable",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "RecipeIngredientTable",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "RecipeIngredientIAMRoleDefaultPolicyB02C21AD",
        "Roles": [
          {
            "Ref": "RecipeIngredientIAMRole2B189D25"
          }
        ]
      }
    },
    "DynamoDBAccess71ABE5AE": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::Join": [
                          "",
                          [
                            "RecipeIngredient-",
                            {
                              "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
                            },
                            "-",
                            {
                              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*",
                    {
                      "tablename": {
                        "Fn::Join": [
                          "",
                          [
                            "RecipeIngredient-",
                            {
                              "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
                            },
                            "-",
                            {
                              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBAccess71ABE5AE",
        "Roles": [
          {
            "Ref": "RecipeIngredientIAMRole2B189D25"
          }
        ]
      }
    },
    "RecipeIngredientDataSource": {
      "Type": "AWS::AppSync::DataSource",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "Name": "RecipeIngredientTable",
        "Type": "AMAZON_DYNAMODB",
        "DynamoDBConfig": {
          "AwsRegion": {
            "Ref": "AWS::Region"
          },
          "TableName": {
            "Ref": "RecipeIngredientTable"
          }
        },
        "ServiceRoleArn": {
          "Fn::GetAtt": [
            "RecipeIngredientIAMRole2B189D25",
            "Arn"
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientIAMRole2B189D25"
      ]
    },
    "QueryGetRecipeIngredientDataResolverFnQueryGetRecipeIngredientDataResolverFnAppSyncFunctionB293B31E": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "QueryGetRecipeIngredientDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.getRecipeIngredient.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.getRecipeIngredient.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "GetRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "getRecipeIngredient",
        "TypeName": "Query",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowQuerygetFollowauth0FunctionQuerygetFollowauth0FunctionAppSyncFunction4D0BAD6FFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "QueryGetRecipeIngredientDataResolverFnQueryGetRecipeIngredientDataResolverFnAppSyncFunctionB293B31E",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "RecipeIngredientTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "QueryListRecipeIngredientsDataResolverFnQueryListRecipeIngredientsDataResolverFnAppSyncFunction4FE8B28F": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "QueryListRecipeIngredientsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.listRecipeIngredients.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.listRecipeIngredients.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "ListRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "listRecipeIngredients",
        "TypeName": "Query",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowQuerygetFollowauth0FunctionQuerygetFollowauth0FunctionAppSyncFunction4D0BAD6FFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "QueryListRecipeIngredientsDataResolverFnQueryListRecipeIngredientsDataResolverFnAppSyncFunction4FE8B28F",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listRecipeIngredients\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "RecipeIngredientTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationCreateRecipeIngredientDataResolverFnMutationCreateRecipeIngredientDataResolverFnAppSyncFunctionA3D94B5E": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "MutationCreateRecipeIngredientDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.createRecipeIngredient.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.createRecipeIngredient.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "CreateRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "createRecipeIngredient",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationcreateUserinit0FunctionMutationcreateUserinit0FunctionAppSyncFunction5CF77F6AFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowMutationcreateFollowauth0FunctionMutationcreateFollowauth0FunctionAppSyncFunctionF9F07A49FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationCreateRecipeIngredientDataResolverFnMutationCreateRecipeIngredientDataResolverFnAppSyncFunctionA3D94B5E",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "RecipeIngredientTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationupdateRecipeIngredientauth0FunctionMutationupdateRecipeIngredientauth0FunctionAppSyncFunction5E5BB6C6": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "MutationupdateRecipeIngredientauth0Function",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateRecipeIngredient.auth.1.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateRecipeIngredient.auth.1.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "MutationUpdateRecipeIngredientDataResolverFnMutationUpdateRecipeIngredientDataResolverFnAppSyncFunctionC8C83BE8": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "MutationUpdateRecipeIngredientDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateRecipeIngredient.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateRecipeIngredient.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "UpdateRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "updateRecipeIngredient",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationupdateUserinit0FunctionMutationupdateUserinit0FunctionAppSyncFunction90E2C98AFunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationupdateRecipeIngredientauth0FunctionMutationupdateRecipeIngredientauth0FunctionAppSyncFunction5E5BB6C6",
                "FunctionId"
              ]
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationUpdateRecipeIngredientDataResolverFnMutationUpdateRecipeIngredientDataResolverFnAppSyncFunctionC8C83BE8",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "RecipeIngredientTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationdeleteRecipeIngredientauth0FunctionMutationdeleteRecipeIngredientauth0FunctionAppSyncFunction7BE5394D": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "MutationdeleteRecipeIngredientauth0Function",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteRecipeIngredient.auth.1.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteRecipeIngredient.auth.1.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "MutationDeleteRecipeIngredientDataResolverFnMutationDeleteRecipeIngredientDataResolverFnAppSyncFunction1C969A14": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "RecipeIngredientDataSource",
            "Name"
          ]
        },
        "Name": "MutationDeleteRecipeIngredientDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteRecipeIngredient.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteRecipeIngredient.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "RecipeIngredientDataSource"
      ]
    },
    "DeleteRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "deleteRecipeIngredient",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Fn::GetAtt": [
                "MutationdeleteRecipeIngredientauth0FunctionMutationdeleteRecipeIngredientauth0FunctionAppSyncFunction7BE5394D",
                "FunctionId"
              ]
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationDeleteRecipeIngredientDataResolverFnMutationDeleteRecipeIngredientDataResolverFnAppSyncFunction1C969A14",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "RecipeIngredientTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononCreateRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onCreateRecipeIngredient",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowSubscriptiononCreateFollowauth0FunctionSubscriptiononCreateFollowauth0FunctionAppSyncFunction54BF6B84FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononUpdateRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onUpdateRecipeIngredient",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowSubscriptiononCreateFollowauth0FunctionSubscriptiononCreateFollowauth0FunctionAppSyncFunction54BF6B84FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononDeleteRecipeIngredientResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onDeleteRecipeIngredient",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackFollowNestedStackFollowNestedStackResource6C78E3E6OutputstransformerrootstackFollowSubscriptiononCreateFollowauth0FunctionSubscriptiononCreateFollowauth0FunctionAppSyncFunction54BF6B84FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteRecipeIngredient\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    }
  },
  "Outputs": {
    "GetAttRecipeIngredientTableStreamArn": {
      "Description": "Your DynamoDB table StreamArn.",
      "Value": {
        "Fn::GetAtt": [
          "RecipeIngredientTable",
          "StreamArn"
        ]
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:RecipeIngredientTable:StreamArn"
            ]
          ]
        }
      }
    },
    "GetAttRecipeIngredientTableName": {
      "Description": "Your DynamoDB table name.",
      "Value": {
        "Ref": "RecipeIngredientTable"
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:RecipeIngredientTable:Name"
            ]
          ]
        }
      }
    },
    "GetAttRecipeIngredientDataSourceName": {
      "Description": "Your model DataSource name.",
      "Value": {
        "Fn::GetAtt": [
          "RecipeIngredientDataSource",
          "Name"
        ]
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:RecipeIngredientDataSource:Name"
            ]
          ]
        }
      }
    },
    "transformerrootstackRecipeIngredientRecipeIngredientDataSource382456C5Name": {
      "Value": {
        "Fn::GetAtt": [
          "RecipeIngredientDataSource",
          "Name"
        ]
      }
    },
    "transformerrootstackRecipeIngredientRecipeIngredientTable848A86D7Ref": {
      "Value": {
        "Ref": "RecipeIngredientTable"
      }
    }
  }
}