github.com/myhau/pulumi/pkg/v3@v3.70.2-0.20221116134521-f2775972e587/operations/testdata/todo.json (about)

     1  {
     2      "target": "foo",
     3      "latest": {
     4          "time": "2017-11-08T11:59:08.512209-08:00",
     5          "resources": [
     6              {
     7                  "urn": "urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo",
     8                  "custom": true,
     9                  "id": "todo-a1916a6b16ec016b",
    10                  "type": "aws:dynamodb/table:Table",
    11                  "parent": "urn:pulumi:foo::todo::cloud:table:Table::todo",
    12                  "inputs": {
    13                      "attribute": [
    14                          {
    15                              "name": "id",
    16                              "type": "S"
    17                          }
    18                      ],
    19                      "hashKey": "id",
    20                      "readCapacity": 5,
    21                      "writeCapacity": 5
    22                  },
    23                  "defaults": {
    24                      "name": "todo-a1916a6b16ec016b",
    25                      "readCapacity": "5",
    26                      "writeCapacity": "5"
    27                  },
    28                  "outputs": {
    29                      "arn": "arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b",
    30                      "attribute": [
    31                          {
    32                              "name": "id",
    33                              "type": "S"
    34                          }
    35                      ],
    36                      "globalSecondaryIndex": [],
    37                      "hashKey": "id",
    38                      "id": "todo-a1916a6b16ec016b",
    39                      "localSecondaryIndex": [],
    40                      "name": "todo-a1916a6b16ec016b",
    41                      "readCapacity": "5",
    42                      "writeCapacity": "5"
    43                  }
    44              },
    45              {
    46                  "urn": "urn:pulumi:foo::todo::cloud:table:Table::todo",
    47                  "custom": false,
    48                  "type": "cloud:table:Table",
    49                  "inputs": {
    50                      "primaryKey": "id",
    51                      "primaryKeyType": "string"
    52                  }
    53              },
    54              {
    55                  "urn": "urn:pulumi:foo::todo::aws:s3/bucket:Bucket::todo",
    56                  "custom": true,
    57                  "id": "todo-8c10043f3d2b0e28",
    58                  "type": "aws:s3/bucket:Bucket",
    59                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
    60                  "defaults": {
    61                      "acl": "private",
    62                      "bucket": "todo-8c10043f3d2b0e28",
    63                      "forceDestroy": false
    64                  },
    65                  "outputs": {
    66                      "accelerationStatus": "",
    67                      "acl": "private",
    68                      "arn": "arn:aws:s3:::todo-8c10043f3d2b0e28",
    69                      "bucket": "todo-8c10043f3d2b0e28",
    70                      "bucketDomainName": "todo-8c10043f3d2b0e28.s3.amazonaws.com",
    71                      "forceDestroy": false,
    72                      "hostedZoneId": "Z2O1EMRO9K5GLX",
    73                      "id": "todo-8c10043f3d2b0e28",
    74                      "logging": [],
    75                      "region": "us-east-2",
    76                      "requestPayer": "BucketOwner",
    77                      "tags": {},
    78                      "versioning": [
    79                          {
    80                              "enabled": false,
    81                              "mfaDelete": false
    82                          }
    83                      ],
    84                      "website": []
    85                  }
    86              },
    87              {
    88                  "urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo4c238266",
    89                  "custom": true,
    90                  "id": "todo4c238266-c22303f113387c32",
    91                  "type": "aws:iam/role:Role",
    92                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
    93                  "inputs": {
    94                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
    95                  },
    96                  "defaults": {
    97                      "forceDetachPolicies": false,
    98                      "name": "todo4c238266-c22303f113387c32",
    99                      "path": "/"
   100                  },
   101                  "outputs": {
   102                      "arn": "arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32",
   103                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
   104                      "createDate": "2017-11-08T19:57:49Z",
   105                      "forceDetachPolicies": false,
   106                      "id": "todo4c238266-c22303f113387c32",
   107                      "name": "todo4c238266-c22303f113387c32",
   108                      "path": "/",
   109                      "uniqueId": "AROAIZQT7GOCLELAEWHT2"
   110                  }
   111              },
   112              {
   113                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo4c238266",
   114                  "custom": true,
   115                  "id": "todo4c238266-c22303f113387c32-20171108195750237000000001",
   116                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   117                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   118                  "inputs": {
   119                      "policyArn": "arn:aws:iam::aws:policy/AmazonS3FullAccess",
   120                      "role": "todo4c238266-c22303f113387c32"
   121                  },
   122                  "outputs": {
   123                      "id": "todo4c238266-c22303f113387c32-20171108195750237000000001",
   124                      "policyArn": "arn:aws:iam::aws:policy/AmazonS3FullAccess",
   125                      "role": "todo4c238266-c22303f113387c32"
   126                  }
   127              },
   128              {
   129                  "urn": "urn:pulumi:foo::todo::aws:s3/bucketObject:BucketObject::todo4c238266/favicon.ico",
   130                  "custom": true,
   131                  "id": "todo4c238266/favicon.ico",
   132                  "type": "aws:s3/bucketObject:BucketObject",
   133                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   134                  "inputs": {
   135                      "bucket": "todo-8c10043f3d2b0e28",
   136                      "contentType": "image/x-icon",
   137                      "key": "todo4c238266/favicon.ico",
   138                      "source": {
   139                          "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   140                          "hash": "3e928d52d10b060711c530e190e862cb8c1e32ae582da57a633d197c09475081",
   141                          "path": "/Users/luke/go/src/github.com/pulumi/pulumi-cloud/examples/todo/www/favicon.ico"
   142                      }
   143                  },
   144                  "defaults": {
   145                      "acl": "private",
   146                      "source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset750331830"
   147                  },
   148                  "outputs": {
   149                      "acl": "private",
   150                      "bucket": "todo-8c10043f3d2b0e28",
   151                      "cacheControl": "",
   152                      "contentDisposition": "",
   153                      "contentEncoding": "",
   154                      "contentLanguage": "",
   155                      "contentType": "image/x-icon",
   156                      "etag": "8b29bc54ef1e39d577bd5a5157c7d285",
   157                      "id": "todo4c238266/favicon.ico",
   158                      "key": "todo4c238266/favicon.ico",
   159                      "serverSideEncryption": "",
   160                      "source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset678329245",
   161                      "storageClass": "STANDARD",
   162                      "tags": {},
   163                      "versionId": "",
   164                      "websiteRedirect": ""
   165                  }
   166              },
   167              {
   168                  "urn": "urn:pulumi:foo::todo::aws:s3/bucketObject:BucketObject::todo4c238266/index.html",
   169                  "custom": true,
   170                  "id": "todo4c238266/index.html",
   171                  "type": "aws:s3/bucketObject:BucketObject",
   172                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   173                  "inputs": {
   174                      "bucket": "todo-8c10043f3d2b0e28",
   175                      "contentType": "text/html",
   176                      "key": "todo4c238266/index.html",
   177                      "source": {
   178                          "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   179                          "hash": "064df7eb98909d2a5f50e74dfb94899d57d0aaba1ffc580541ca79afebf87bb7",
   180                          "path": "/Users/luke/go/src/github.com/pulumi/pulumi-cloud/examples/todo/www/index.html"
   181                      }
   182                  },
   183                  "defaults": {
   184                      "acl": "private",
   185                      "source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset637927000"
   186                  },
   187                  "outputs": {
   188                      "acl": "private",
   189                      "bucket": "todo-8c10043f3d2b0e28",
   190                      "cacheControl": "",
   191                      "contentDisposition": "",
   192                      "contentEncoding": "",
   193                      "contentLanguage": "",
   194                      "contentType": "text/html",
   195                      "etag": "b996a167b3143d3a2fc3255ec69dbad4",
   196                      "id": "todo4c238266/index.html",
   197                      "key": "todo4c238266/index.html",
   198                      "serverSideEncryption": "",
   199                      "source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset523489751",
   200                      "storageClass": "STANDARD",
   201                      "tags": {},
   202                      "versionId": "",
   203                      "websiteRedirect": ""
   204                  }
   205              },
   206              {
   207                  "urn": "urn:pulumi:foo::todo::aws:sns/topic:Topic::unhandled-error-topic",
   208                  "custom": true,
   209                  "id": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
   210                  "type": "aws:sns/topic:Topic",
   211                  "defaults": {
   212                      "name": "unhandled-error-topic-7c13e147ce8d9e53"
   213                  },
   214                  "outputs": {
   215                      "arn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
   216                      "displayName": "",
   217                      "id": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
   218                      "name": "unhandled-error-topic-7c13e147ce8d9e53",
   219                      "policy": "{\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"153052954103\"}},\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Resource\":\"arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53\",\"Sid\":\"__default_statement_ID\"}],\"Version\":\"2008-10-17\"}"
   220                  }
   221              },
   222              {
   223                  "urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo035b5d8f-iamrole",
   224                  "custom": true,
   225                  "id": "todo035b5d8f-iamrole-4c6d0a50781a686f",
   226                  "type": "aws:iam/role:Role",
   227                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
   228                  "inputs": {
   229                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
   230                  },
   231                  "defaults": {
   232                      "forceDetachPolicies": false,
   233                      "name": "todo035b5d8f-iamrole-4c6d0a50781a686f",
   234                      "path": "/"
   235                  },
   236                  "outputs": {
   237                      "arn": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
   238                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
   239                      "createDate": "2017-11-08T19:57:56Z",
   240                      "forceDetachPolicies": false,
   241                      "id": "todo035b5d8f-iamrole-4c6d0a50781a686f",
   242                      "name": "todo035b5d8f-iamrole-4c6d0a50781a686f",
   243                      "path": "/",
   244                      "uniqueId": "AROAJPLTIAHPA4S2PXQPY"
   245                  }
   246              },
   247              {
   248                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo035b5d8f-iampolicy-0",
   249                  "custom": true,
   250                  "id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195757731500000002",
   251                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   252                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
   253                  "inputs": {
   254                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   255                      "role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
   256                  },
   257                  "outputs": {
   258                      "id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195757731500000002",
   259                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   260                      "role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
   261                  }
   262              },
   263              {
   264                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo035b5d8f-iampolicy-1",
   265                  "custom": true,
   266                  "id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195759109500000003",
   267                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   268                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
   269                  "inputs": {
   270                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   271                      "role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
   272                  },
   273                  "outputs": {
   274                      "id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195759109500000003",
   275                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   276                      "role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
   277                  }
   278              },
   279              {
   280                  "urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todo035b5d8f",
   281                  "custom": true,
   282                  "id": "todo035b5d8f-7748c68eadc313c0",
   283                  "type": "aws:lambda/function:Function",
   284                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
   285                  "inputs": {
   286                      "code": {
   287                          "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   288                          "assets": {
   289                              ".": {
   290                                  "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   291                                  "hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
   292                                  "path": "."
   293                              },
   294                              "__index.js": {
   295                                  "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   296                                  "hash": "dc21f0f3deefc1f33f9aee13b2861a2e6d24810f0f68fbfd2cc9669438cb0f76",
   297                                  "text": "exports.handler = __1d93ab845c76406f165a33c3b1aa7b72c82a0245;\n\nfunction __1d93ab845c76406f165a33c3b1aa7b72c82a0245() {\n  var _this;\n  with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"GET\", path: \"/todo/{id}\", handlers: [ __d2f8baf55a86f7483292ccab09007d22aa150368, __5941ad084d3fce898f986ab0decb5538a0df0be7 ] } }) {\n    return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n                let body;\n                if (ev.body !== null) {\n                    if (ev.isBase64Encoded) {\n                        body = Buffer.from(ev.body, \"base64\");\n                    }\n                    else {\n                        body = Buffer.from(ev.body, \"utf8\");\n                    }\n                }\n                ctx.callbackWaitsForEmptyEventLoop = false;\n                const reqres = apiGatewayToRequestResponse(ev, body, cb);\n                let i = 0;\n                const next = () =\u003e {\n                    const nextHandler = route.handlers[i++];\n                    if (nextHandler !== undefined) {\n                        nextHandler(reqres.req, reqres.res, next);\n                    }\n                };\n                next();\n            })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n  var _this;\n  with({ stageName: \"stage\" }) {\n    return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n    const response = {\n        statusCode: 200,\n        headers: {},\n        body: Buffer.from([]),\n    };\n    const req = {\n        headers: ev.headers,\n        body: body,\n        method: ev.httpMethod,\n        params: ev.pathParameters,\n        query: ev.queryStringParameters,\n        path: ev.path,\n        baseUrl: \"/\" + stageName,\n        hostname: ev.headers[\"Host\"],\n        protocol: ev.headers[\"X-Forwarded-Proto\"],\n    };\n    const res = {\n        status: (code) =\u003e {\n            response.statusCode = code;\n            return res;\n        },\n        setHeader: (name, value) =\u003e {\n            response.headers[name] = value;\n            return res;\n        },\n        write: (data, encoding) =\u003e {\n            if (encoding === undefined) {\n                encoding = \"utf8\";\n            }\n            if (typeof data === \"string\") {\n                data = Buffer.from(data, encoding);\n            }\n            response.body = Buffer.concat([response.body, data]);\n            return res;\n        },\n        end: (data, encoding) =\u003e {\n            if (data !== undefined) {\n                res.write(data, encoding);\n            }\n            cb(null, {\n                statusCode: response.statusCode,\n                headers: response.headers,\n                isBase64Encoded: true,\n                body: response.body.toString(\"base64\"),\n            });\n        },\n        json: (obj) =\u003e {\n            res.setHeader(\"content-type\", \"application/json\");\n            res.end(JSON.stringify(obj));\n        },\n    };\n    return { req, res };\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __d2f8baf55a86f7483292ccab09007d22aa150368() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn ((req, res, next) =\u003e {\n    let auth = req.headers[\"Authorization\"];\n    if (auth !== \"Bearer SECRETPASSWORD\") {\n        res.status(401).end(\"Authorization header required\");\n        return;\n    }\n    next();\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __5941ad084d3fce898f986ab0decb5538a0df0be7() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [  ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [  ], hashKey: \"id\", localSecondaryIndex: [  ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n    return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n    console.log(\"GET /todo/\" + req.params[\"id\"]);\n    try {\n        let item = yield todos.get({ id: req.params[\"id\"] });\n        res.status(200).json(item.value);\n    }\n    catch (err) {\n        res.status(500).json(err);\n    }\n}))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().get({\n                TableName: getTableName(),\n                Key: query,\n                ConsistentRead: true,\n            }).promise();\n            return result.Item;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (() =\u003e {\n            const awssdk = require(\"aws-sdk\");\n            return new awssdk.DynamoDB.DocumentClient();\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n  var _this;\n  with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n    return (function() {\n\nreturn (function getTableName() {\n            // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n            // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n            // way to make TypeScript aware of that.  So we just fool the typesystem with these\n            // explicit casts.\n            //\n            // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n            return tableName;\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().put({\n                TableName: getTableName(),\n                Item: item,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().scan({\n                TableName: getTableName(),\n                ConsistentRead: true,\n            }).promise();\n            return result.Items;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n            let updateExpression = \"\";\n            const attributeValues = {};\n            for (const key of Object.keys(updates)) {\n                const val = updates[key];\n                if (updateExpression === \"\") {\n                    updateExpression += \"SET \";\n                }\n                else {\n                    updateExpression += \", \";\n                }\n                updateExpression += `${key} = :${key}`;\n                attributeValues[`:${key}`] = val;\n            }\n            yield db().update({\n                TableName: getTableName(),\n                Key: query,\n                UpdateExpression: updateExpression,\n                ExpressionAttributeValues: attributeValues,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().delete({\n                TableName: getTableName(),\n                Key: query,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\n"
   298                              }
   299                          },
   300                          "hash": "bd8cb8017488e278e396f1e3b7eea27bc4b376d0adc075593aea9e32da043a38"
   301                      },
   302                      "deadLetterConfig": [
   303                          {
   304                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   305                          }
   306                      ],
   307                      "handler": "__index.handler",
   308                      "memorySize": 128,
   309                      "role": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
   310                      "runtime": "nodejs6.10",
   311                      "timeout": 180
   312                  },
   313                  "defaults": {
   314                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive035209546",
   315                      "memorySize": "128",
   316                      "name": "todo035b5d8f-7748c68eadc313c0",
   317                      "publish": false,
   318                      "timeout": "180"
   319                  },
   320                  "outputs": {
   321                      "arn": "arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0",
   322                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive894239265",
   323                      "deadLetterConfig": [
   324                          {
   325                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   326                          }
   327                      ],
   328                      "description": "",
   329                      "environment": [],
   330                      "handler": "__index.handler",
   331                      "id": "todo035b5d8f-7748c68eadc313c0",
   332                      "invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations",
   333                      "kmsKeyArn": "",
   334                      "lastModified": "2017-11-08T19:58:07.802+0000",
   335                      "memorySize": "128",
   336                      "name": "todo035b5d8f-7748c68eadc313c0",
   337                      "publish": false,
   338                      "qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0:$LATEST",
   339                      "role": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
   340                      "runtime": "nodejs6.10",
   341                      "sourceCodeHash": "Pj7qx3M0/X9sY4nBiLeDFAklTGhYmjG527OkA6cDFgM=",
   342                      "tags": {},
   343                      "timeout": "180",
   344                      "tracingConfig": [
   345                          {
   346                              "mode": "PassThrough"
   347                          }
   348                      ],
   349                      "version": "$LATEST",
   350                      "vpcConfig": []
   351                  }
   352              },
   353              {
   354                  "urn": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
   355                  "custom": false,
   356                  "type": "aws:serverless:Function",
   357                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
   358                  "inputs": {
   359                      "options": {
   360                          "deadLetterConfig": {
   361                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   362                          },
   363                          "memorySize": 128,
   364                          "policies": [
   365                              "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   366                              "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
   367                          ]
   368                      }
   369                  }
   370              },
   371              {
   372                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todo035b5d8f-func-logs",
   373                  "custom": true,
   374                  "id": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
   375                  "type": "aws:cloudwatch/logGroup:LogGroup",
   376                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
   377                  "inputs": {
   378                      "name": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
   379                      "retentionInDays": 1
   380                  },
   381                  "defaults": {
   382                      "retentionInDays": "1"
   383                  },
   384                  "outputs": {
   385                      "arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todo035b5d8f-7748c68eadc313c0:*",
   386                      "id": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
   387                      "name": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
   388                      "retentionInDays": "1",
   389                      "tags": {}
   390                  }
   391              },
   392              {
   393                  "urn": "urn:pulumi:foo::todo::aws:iam/role:Role::pulumi-foo-log-collector-iamrole",
   394                  "custom": true,
   395                  "id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   396                  "type": "aws:iam/role:Role",
   397                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
   398                  "inputs": {
   399                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
   400                  },
   401                  "defaults": {
   402                      "forceDetachPolicies": false,
   403                      "name": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   404                      "path": "/"
   405                  },
   406                  "outputs": {
   407                      "arn": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   408                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
   409                      "createDate": "2017-11-08T19:58:11Z",
   410                      "forceDetachPolicies": false,
   411                      "id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   412                      "name": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   413                      "path": "/",
   414                      "uniqueId": "AROAJ4VEH3V4TL27YZSSM"
   415                  }
   416              },
   417              {
   418                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::pulumi-foo-log-collector-iampolicy-0",
   419                  "custom": true,
   420                  "id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7-20171108195812293000000004",
   421                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   422                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
   423                  "inputs": {
   424                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   425                      "role": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7"
   426                  },
   427                  "outputs": {
   428                      "id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7-20171108195812293000000004",
   429                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   430                      "role": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7"
   431                  }
   432              },
   433              {
   434                  "urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::pulumi-foo-log-collector",
   435                  "custom": true,
   436                  "id": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   437                  "type": "aws:lambda/function:Function",
   438                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
   439                  "inputs": {
   440                      "code": {
   441                          "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   442                          "assets": {
   443                              ".": {
   444                                  "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   445                                  "hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
   446                                  "path": "."
   447                              },
   448                              "__index.js": {
   449                                  "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   450                                  "hash": "371d4d8ead106550e5d7e2d0c02dd2e479dba060c765e09f98840fdfe73ea824",
   451                                  "text": "exports.handler = __88442d0b4365f25c858d35485cca4f999253cc40;\n\nfunction __88442d0b4365f25c858d35485cca4f999253cc40() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n            const zlib = require(\"zlib\");\n            const payload = new Buffer(ev.awslogs.data, \"base64\");\n            zlib.gunzip(payload, (err, result) =\u003e {\n                if (err !== undefined \u0026\u0026 err !== null) {\n                    cb(err, null);\n                }\n                else {\n                    console.log(result.toString(\"utf8\"));\n                    cb(null, {});\n                }\n            });\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\n"
   452                              }
   453                          },
   454                          "hash": "a9d89fe37b8226be55d17695285012d451d2e749947db7a336962eeb65fc1345"
   455                      },
   456                      "handler": "__index.handler",
   457                      "role": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   458                      "runtime": "nodejs6.10",
   459                      "timeout": 180
   460                  },
   461                  "defaults": {
   462                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive580507404",
   463                      "memorySize": "128",
   464                      "name": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   465                      "publish": false,
   466                      "timeout": "180"
   467                  },
   468                  "outputs": {
   469                      "arn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   470                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive451729659",
   471                      "deadLetterConfig": [],
   472                      "description": "",
   473                      "environment": [],
   474                      "handler": "__index.handler",
   475                      "id": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   476                      "invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff/invocations",
   477                      "kmsKeyArn": "",
   478                      "lastModified": "2017-11-08T19:58:25.717+0000",
   479                      "memorySize": "128",
   480                      "name": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   481                      "publish": false,
   482                      "qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff:$LATEST",
   483                      "role": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
   484                      "runtime": "nodejs6.10",
   485                      "sourceCodeHash": "rC8lRsDSOm3VcDZrv8qkZ4LsGBpYHlkcWHRE5qHBWLM=",
   486                      "tags": {},
   487                      "timeout": "180",
   488                      "tracingConfig": [
   489                          {
   490                              "mode": "PassThrough"
   491                          }
   492                      ],
   493                      "version": "$LATEST",
   494                      "vpcConfig": []
   495                  }
   496              },
   497              {
   498                  "urn": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
   499                  "custom": false,
   500                  "type": "aws:serverless:Function",
   501                  "inputs": {
   502                      "options": {
   503                          "policies": [
   504                              "arn:aws:iam::aws:policy/AWSLambdaFullAccess"
   505                          ]
   506                      }
   507                  }
   508              },
   509              {
   510                  "urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::pulumi-foo-log-collector",
   511                  "custom": true,
   512                  "id": "pulumi-foo-log-collector-715ade4f6f854187",
   513                  "type": "aws:lambda/permission:Permission",
   514                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
   515                  "inputs": {
   516                      "action": "lambda:invokeFunction",
   517                      "function": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   518                      "principal": "logs.us-east-2.amazonaws.com"
   519                  },
   520                  "defaults": {
   521                      "statementId": "pulumi-foo-log-collector-715ade4f6f854187"
   522                  },
   523                  "outputs": {
   524                      "action": "lambda:invokeFunction",
   525                      "function": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
   526                      "id": "pulumi-foo-log-collector-715ade4f6f854187",
   527                      "principal": "logs.us-east-2.amazonaws.com",
   528                      "qualifier": "",
   529                      "statementId": "pulumi-foo-log-collector-715ade4f6f854187"
   530                  }
   531              },
   532              {
   533                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todo035b5d8f",
   534                  "custom": true,
   535                  "id": "cwlsf-2917862896",
   536                  "type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
   537                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
   538                  "inputs": {
   539                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   540                      "filterPattern": "",
   541                      "logGroup": "/aws/lambda/todo035b5d8f-7748c68eadc313c0"
   542                  },
   543                  "defaults": {
   544                      "name": "todo035b5d8f-c9b30759625946a3"
   545                  },
   546                  "outputs": {
   547                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   548                      "filterPattern": "",
   549                      "id": "cwlsf-2917862896",
   550                      "logGroup": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
   551                      "name": "todo035b5d8f-c9b30759625946a3"
   552                  }
   553              },
   554              {
   555                  "urn": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
   556                  "custom": false,
   557                  "type": "cloud:function:Function",
   558                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   559                  "inputs": {
   560                      "handler": {}
   561                  }
   562              },
   563              {
   564                  "urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo67876f56-iamrole",
   565                  "custom": true,
   566                  "id": "todo67876f56-iamrole-ce66deec75ae88fd",
   567                  "type": "aws:iam/role:Role",
   568                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
   569                  "inputs": {
   570                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
   571                  },
   572                  "defaults": {
   573                      "forceDetachPolicies": false,
   574                      "name": "todo67876f56-iamrole-ce66deec75ae88fd",
   575                      "path": "/"
   576                  },
   577                  "outputs": {
   578                      "arn": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
   579                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
   580                      "createDate": "2017-11-08T19:58:28Z",
   581                      "forceDetachPolicies": false,
   582                      "id": "todo67876f56-iamrole-ce66deec75ae88fd",
   583                      "name": "todo67876f56-iamrole-ce66deec75ae88fd",
   584                      "path": "/",
   585                      "uniqueId": "AROAJ4OUDFQWKLTUWKJO6"
   586                  }
   587              },
   588              {
   589                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo67876f56-iampolicy-0",
   590                  "custom": true,
   591                  "id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195829869300000005",
   592                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   593                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
   594                  "inputs": {
   595                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   596                      "role": "todo67876f56-iamrole-ce66deec75ae88fd"
   597                  },
   598                  "outputs": {
   599                      "id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195829869300000005",
   600                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   601                      "role": "todo67876f56-iamrole-ce66deec75ae88fd"
   602                  }
   603              },
   604              {
   605                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo67876f56-iampolicy-1",
   606                  "custom": true,
   607                  "id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195831240000000006",
   608                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   609                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
   610                  "inputs": {
   611                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   612                      "role": "todo67876f56-iamrole-ce66deec75ae88fd"
   613                  },
   614                  "outputs": {
   615                      "id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195831240000000006",
   616                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   617                      "role": "todo67876f56-iamrole-ce66deec75ae88fd"
   618                  }
   619              },
   620              {
   621                  "urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todo67876f56",
   622                  "custom": true,
   623                  "id": "todo67876f56-7069ef1500d0e44e",
   624                  "type": "aws:lambda/function:Function",
   625                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
   626                  "inputs": {
   627                      "code": {
   628                          "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   629                          "assets": {
   630                              ".": {
   631                                  "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   632                                  "hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
   633                                  "path": "."
   634                              },
   635                              "__index.js": {
   636                                  "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   637                                  "hash": "ece4682cb493cbebe3c503bee17d4566db2fe361528d5b1e86acb48fa2aa7362",
   638                                  "text": "exports.handler = __a950d2f3106e78658d58f1ab976fb89886d8a56a;\n\nfunction __a950d2f3106e78658d58f1ab976fb89886d8a56a() {\n  var _this;\n  with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"POST\", path: \"/todo/{id}\", handlers: [ __83c5bf0f4cf2fd2730ceee79a34c9fb7ee3f9ded ] } }) {\n    return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n                let body;\n                if (ev.body !== null) {\n                    if (ev.isBase64Encoded) {\n                        body = Buffer.from(ev.body, \"base64\");\n                    }\n                    else {\n                        body = Buffer.from(ev.body, \"utf8\");\n                    }\n                }\n                ctx.callbackWaitsForEmptyEventLoop = false;\n                const reqres = apiGatewayToRequestResponse(ev, body, cb);\n                let i = 0;\n                const next = () =\u003e {\n                    const nextHandler = route.handlers[i++];\n                    if (nextHandler !== undefined) {\n                        nextHandler(reqres.req, reqres.res, next);\n                    }\n                };\n                next();\n            })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n  var _this;\n  with({ stageName: \"stage\" }) {\n    return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n    const response = {\n        statusCode: 200,\n        headers: {},\n        body: Buffer.from([]),\n    };\n    const req = {\n        headers: ev.headers,\n        body: body,\n        method: ev.httpMethod,\n        params: ev.pathParameters,\n        query: ev.queryStringParameters,\n        path: ev.path,\n        baseUrl: \"/\" + stageName,\n        hostname: ev.headers[\"Host\"],\n        protocol: ev.headers[\"X-Forwarded-Proto\"],\n    };\n    const res = {\n        status: (code) =\u003e {\n            response.statusCode = code;\n            return res;\n        },\n        setHeader: (name, value) =\u003e {\n            response.headers[name] = value;\n            return res;\n        },\n        write: (data, encoding) =\u003e {\n            if (encoding === undefined) {\n                encoding = \"utf8\";\n            }\n            if (typeof data === \"string\") {\n                data = Buffer.from(data, encoding);\n            }\n            response.body = Buffer.concat([response.body, data]);\n            return res;\n        },\n        end: (data, encoding) =\u003e {\n            if (data !== undefined) {\n                res.write(data, encoding);\n            }\n            cb(null, {\n                statusCode: response.statusCode,\n                headers: response.headers,\n                isBase64Encoded: true,\n                body: response.body.toString(\"base64\"),\n            });\n        },\n        json: (obj) =\u003e {\n            res.setHeader(\"content-type\", \"application/json\");\n            res.end(JSON.stringify(obj));\n        },\n    };\n    return { req, res };\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __83c5bf0f4cf2fd2730ceee79a34c9fb7ee3f9ded() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [  ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [  ], hashKey: \"id\", localSecondaryIndex: [  ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n    return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n    console.log(\"POST /todo/\" + req.params[\"id\"]);\n    try {\n        yield todos.insert({ id: req.params[\"id\"], value: req.body.toString() });\n        res.status(201).json({});\n    }\n    catch (err) {\n        res.status(500).json(err);\n    }\n}))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().get({\n                TableName: getTableName(),\n                Key: query,\n                ConsistentRead: true,\n            }).promise();\n            return result.Item;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (() =\u003e {\n            const awssdk = require(\"aws-sdk\");\n            return new awssdk.DynamoDB.DocumentClient();\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n  var _this;\n  with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n    return (function() {\n\nreturn (function getTableName() {\n            // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n            // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n            // way to make TypeScript aware of that.  So we just fool the typesystem with these\n            // explicit casts.\n            //\n            // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n            return tableName;\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().put({\n                TableName: getTableName(),\n                Item: item,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().scan({\n                TableName: getTableName(),\n                ConsistentRead: true,\n            }).promise();\n            return result.Items;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n            let updateExpression = \"\";\n            const attributeValues = {};\n            for (const key of Object.keys(updates)) {\n                const val = updates[key];\n                if (updateExpression === \"\") {\n                    updateExpression += \"SET \";\n                }\n                else {\n                    updateExpression += \", \";\n                }\n                updateExpression += `${key} = :${key}`;\n                attributeValues[`:${key}`] = val;\n            }\n            yield db().update({\n                TableName: getTableName(),\n                Key: query,\n                UpdateExpression: updateExpression,\n                ExpressionAttributeValues: attributeValues,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().delete({\n                TableName: getTableName(),\n                Key: query,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\n"
   639                              }
   640                          },
   641                          "hash": "95023a27d5a4393ec1440ff2d704997748f68087320f130218deb540c457f14a"
   642                      },
   643                      "deadLetterConfig": [
   644                          {
   645                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   646                          }
   647                      ],
   648                      "handler": "__index.handler",
   649                      "memorySize": 128,
   650                      "role": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
   651                      "runtime": "nodejs6.10",
   652                      "timeout": 180
   653                  },
   654                  "defaults": {
   655                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive069041694",
   656                      "memorySize": "128",
   657                      "name": "todo67876f56-7069ef1500d0e44e",
   658                      "publish": false,
   659                      "timeout": "180"
   660                  },
   661                  "outputs": {
   662                      "arn": "arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e",
   663                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive199670501",
   664                      "deadLetterConfig": [
   665                          {
   666                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   667                          }
   668                      ],
   669                      "description": "",
   670                      "environment": [],
   671                      "handler": "__index.handler",
   672                      "id": "todo67876f56-7069ef1500d0e44e",
   673                      "invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations",
   674                      "kmsKeyArn": "",
   675                      "lastModified": "2017-11-08T19:58:39.700+0000",
   676                      "memorySize": "128",
   677                      "name": "todo67876f56-7069ef1500d0e44e",
   678                      "publish": false,
   679                      "qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e:$LATEST",
   680                      "role": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
   681                      "runtime": "nodejs6.10",
   682                      "sourceCodeHash": "8MW5kWvG/GsKUoKzl6eeave6PJsTtx943FRFO/hizFM=",
   683                      "tags": {},
   684                      "timeout": "180",
   685                      "tracingConfig": [
   686                          {
   687                              "mode": "PassThrough"
   688                          }
   689                      ],
   690                      "version": "$LATEST",
   691                      "vpcConfig": []
   692                  }
   693              },
   694              {
   695                  "urn": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
   696                  "custom": false,
   697                  "type": "aws:serverless:Function",
   698                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
   699                  "inputs": {
   700                      "options": {
   701                          "deadLetterConfig": {
   702                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   703                          },
   704                          "memorySize": 128,
   705                          "policies": [
   706                              "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   707                              "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
   708                          ]
   709                      }
   710                  }
   711              },
   712              {
   713                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todo67876f56-func-logs",
   714                  "custom": true,
   715                  "id": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
   716                  "type": "aws:cloudwatch/logGroup:LogGroup",
   717                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
   718                  "inputs": {
   719                      "name": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
   720                      "retentionInDays": 1
   721                  },
   722                  "defaults": {
   723                      "retentionInDays": "1"
   724                  },
   725                  "outputs": {
   726                      "arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todo67876f56-7069ef1500d0e44e:*",
   727                      "id": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
   728                      "name": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
   729                      "retentionInDays": "1",
   730                      "tags": {}
   731                  }
   732              },
   733              {
   734                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todo67876f56",
   735                  "custom": true,
   736                  "id": "cwlsf-1714177476",
   737                  "type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
   738                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
   739                  "inputs": {
   740                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   741                      "filterPattern": "",
   742                      "logGroup": "/aws/lambda/todo67876f56-7069ef1500d0e44e"
   743                  },
   744                  "defaults": {
   745                      "name": "todo67876f56-b74b44a8d71cb4d7"
   746                  },
   747                  "outputs": {
   748                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   749                      "filterPattern": "",
   750                      "id": "cwlsf-1714177476",
   751                      "logGroup": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
   752                      "name": "todo67876f56-b74b44a8d71cb4d7"
   753                  }
   754              },
   755              {
   756                  "urn": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
   757                  "custom": false,
   758                  "type": "cloud:function:Function",
   759                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   760                  "inputs": {
   761                      "handler": {}
   762                  }
   763              },
   764              {
   765                  "urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todoc57917fa-iamrole",
   766                  "custom": true,
   767                  "id": "todoc57917fa-iamrole-694bcb6442f1858b",
   768                  "type": "aws:iam/role:Role",
   769                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
   770                  "inputs": {
   771                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
   772                  },
   773                  "defaults": {
   774                      "forceDetachPolicies": false,
   775                      "name": "todoc57917fa-iamrole-694bcb6442f1858b",
   776                      "path": "/"
   777                  },
   778                  "outputs": {
   779                      "arn": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
   780                      "assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
   781                      "createDate": "2017-11-08T19:58:44Z",
   782                      "forceDetachPolicies": false,
   783                      "id": "todoc57917fa-iamrole-694bcb6442f1858b",
   784                      "name": "todoc57917fa-iamrole-694bcb6442f1858b",
   785                      "path": "/",
   786                      "uniqueId": "AROAIGQTRMZ65JGHRMYGI"
   787                  }
   788              },
   789              {
   790                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todoc57917fa-iampolicy-0",
   791                  "custom": true,
   792                  "id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195845358400000007",
   793                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   794                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
   795                  "inputs": {
   796                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   797                      "role": "todoc57917fa-iamrole-694bcb6442f1858b"
   798                  },
   799                  "outputs": {
   800                      "id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195845358400000007",
   801                      "policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   802                      "role": "todoc57917fa-iamrole-694bcb6442f1858b"
   803                  }
   804              },
   805              {
   806                  "urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todoc57917fa-iampolicy-1",
   807                  "custom": true,
   808                  "id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195846675000000008",
   809                  "type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
   810                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
   811                  "inputs": {
   812                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   813                      "role": "todoc57917fa-iamrole-694bcb6442f1858b"
   814                  },
   815                  "outputs": {
   816                      "id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195846675000000008",
   817                      "policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
   818                      "role": "todoc57917fa-iamrole-694bcb6442f1858b"
   819                  }
   820              },
   821              {
   822                  "urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todoc57917fa",
   823                  "custom": true,
   824                  "id": "todoc57917fa-2fb58339c66e2b46",
   825                  "type": "aws:lambda/function:Function",
   826                  "parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
   827                  "inputs": {
   828                      "code": {
   829                          "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   830                          "assets": {
   831                              ".": {
   832                                  "4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
   833                                  "hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
   834                                  "path": "."
   835                              },
   836                              "__index.js": {
   837                                  "4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
   838                                  "hash": "c580d01e8cd138bafec86d9637e36c91f0b02f76a93f905107a706023cc38ffa",
   839                                  "text": "exports.handler = __e1c9effdafcb58b254eea61ac68abf8a58b1f75f;\n\nfunction __e1c9effdafcb58b254eea61ac68abf8a58b1f75f() {\n  var _this;\n  with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"GET\", path: \"/todo\", handlers: [ __cfa3f168a2b5a7b0e8c87c7c05d9f158fc764d0d ] } }) {\n    return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n                let body;\n                if (ev.body !== null) {\n                    if (ev.isBase64Encoded) {\n                        body = Buffer.from(ev.body, \"base64\");\n                    }\n                    else {\n                        body = Buffer.from(ev.body, \"utf8\");\n                    }\n                }\n                ctx.callbackWaitsForEmptyEventLoop = false;\n                const reqres = apiGatewayToRequestResponse(ev, body, cb);\n                let i = 0;\n                const next = () =\u003e {\n                    const nextHandler = route.handlers[i++];\n                    if (nextHandler !== undefined) {\n                        nextHandler(reqres.req, reqres.res, next);\n                    }\n                };\n                next();\n            })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n  var _this;\n  with({ stageName: \"stage\" }) {\n    return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n    const response = {\n        statusCode: 200,\n        headers: {},\n        body: Buffer.from([]),\n    };\n    const req = {\n        headers: ev.headers,\n        body: body,\n        method: ev.httpMethod,\n        params: ev.pathParameters,\n        query: ev.queryStringParameters,\n        path: ev.path,\n        baseUrl: \"/\" + stageName,\n        hostname: ev.headers[\"Host\"],\n        protocol: ev.headers[\"X-Forwarded-Proto\"],\n    };\n    const res = {\n        status: (code) =\u003e {\n            response.statusCode = code;\n            return res;\n        },\n        setHeader: (name, value) =\u003e {\n            response.headers[name] = value;\n            return res;\n        },\n        write: (data, encoding) =\u003e {\n            if (encoding === undefined) {\n                encoding = \"utf8\";\n            }\n            if (typeof data === \"string\") {\n                data = Buffer.from(data, encoding);\n            }\n            response.body = Buffer.concat([response.body, data]);\n            return res;\n        },\n        end: (data, encoding) =\u003e {\n            if (data !== undefined) {\n                res.write(data, encoding);\n            }\n            cb(null, {\n                statusCode: response.statusCode,\n                headers: response.headers,\n                isBase64Encoded: true,\n                body: response.body.toString(\"base64\"),\n            });\n        },\n        json: (obj) =\u003e {\n            res.setHeader(\"content-type\", \"application/json\");\n            res.end(JSON.stringify(obj));\n        },\n    };\n    return { req, res };\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __cfa3f168a2b5a7b0e8c87c7c05d9f158fc764d0d() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [  ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [  ], hashKey: \"id\", localSecondaryIndex: [  ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n    return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n    console.log(\"GET /todo\");\n    try {\n        let items = yield todos.scan();\n        res.status(200).json(items);\n    }\n    catch (err) {\n        res.status(500).json(err);\n    }\n}))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n})\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().get({\n                TableName: getTableName(),\n                Key: query,\n                ConsistentRead: true,\n            }).promise();\n            return result.Item;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n  var _this;\n  with({  }) {\n    return (function() {\n\nreturn (() =\u003e {\n            const awssdk = require(\"aws-sdk\");\n            return new awssdk.DynamoDB.DocumentClient();\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n  var _this;\n  with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n    return (function() {\n\nreturn (function getTableName() {\n            // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n            // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n            // way to make TypeScript aware of that.  So we just fool the typesystem with these\n            // explicit casts.\n            //\n            // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n            return tableName;\n        })\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().put({\n                TableName: getTableName(),\n                Item: item,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n            const result = yield db().scan({\n                TableName: getTableName(),\n                ConsistentRead: true,\n            }).promise();\n            return result.Items;\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n            let updateExpression = \"\";\n            const attributeValues = {};\n            for (const key of Object.keys(updates)) {\n                const val = updates[key];\n                if (updateExpression === \"\") {\n                    updateExpression += \"SET \";\n                }\n                else {\n                    updateExpression += \", \";\n                }\n                updateExpression += `${key} = :${key}`;\n                attributeValues[`:${key}`] = val;\n            }\n            yield db().update({\n                TableName: getTableName(),\n                Key: query,\n                UpdateExpression: updateExpression,\n                ExpressionAttributeValues: attributeValues,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n  var _this;\n  with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n    return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n            yield db().delete({\n                TableName: getTableName(),\n                Key: query,\n            }).promise();\n        }))\n\n    }).apply(_this).apply(this, arguments);\n  }\n}\n\n"
   840                              }
   841                          },
   842                          "hash": "0e2624d7e58513ff02277d9d7ce4f9b6bc32a4cd09002ac82c3b3a31a1257205"
   843                      },
   844                      "deadLetterConfig": [
   845                          {
   846                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   847                          }
   848                      ],
   849                      "handler": "__index.handler",
   850                      "memorySize": 128,
   851                      "role": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
   852                      "runtime": "nodejs6.10",
   853                      "timeout": 180
   854                  },
   855                  "defaults": {
   856                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive769316096",
   857                      "memorySize": "128",
   858                      "name": "todoc57917fa-2fb58339c66e2b46",
   859                      "publish": false,
   860                      "timeout": "180"
   861                  },
   862                  "outputs": {
   863                      "arn": "arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46",
   864                      "code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive597830751",
   865                      "deadLetterConfig": [
   866                          {
   867                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   868                          }
   869                      ],
   870                      "description": "",
   871                      "environment": [],
   872                      "handler": "__index.handler",
   873                      "id": "todoc57917fa-2fb58339c66e2b46",
   874                      "invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations",
   875                      "kmsKeyArn": "",
   876                      "lastModified": "2017-11-08T19:58:55.468+0000",
   877                      "memorySize": "128",
   878                      "name": "todoc57917fa-2fb58339c66e2b46",
   879                      "publish": false,
   880                      "qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46:$LATEST",
   881                      "role": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
   882                      "runtime": "nodejs6.10",
   883                      "sourceCodeHash": "JOLZIbcsEiyD/ve/26I7FakO5pE4IcDcHw+So/Mxdlo=",
   884                      "tags": {},
   885                      "timeout": "180",
   886                      "tracingConfig": [
   887                          {
   888                              "mode": "PassThrough"
   889                          }
   890                      ],
   891                      "version": "$LATEST",
   892                      "vpcConfig": []
   893                  }
   894              },
   895              {
   896                  "urn": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
   897                  "custom": false,
   898                  "type": "aws:serverless:Function",
   899                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
   900                  "inputs": {
   901                      "options": {
   902                          "deadLetterConfig": {
   903                              "targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
   904                          },
   905                          "memorySize": 128,
   906                          "policies": [
   907                              "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
   908                              "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
   909                          ]
   910                      }
   911                  }
   912              },
   913              {
   914                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todoc57917fa-func-logs",
   915                  "custom": true,
   916                  "id": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
   917                  "type": "aws:cloudwatch/logGroup:LogGroup",
   918                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
   919                  "inputs": {
   920                      "name": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
   921                      "retentionInDays": 1
   922                  },
   923                  "defaults": {
   924                      "retentionInDays": "1"
   925                  },
   926                  "outputs": {
   927                      "arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todoc57917fa-2fb58339c66e2b46:*",
   928                      "id": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
   929                      "name": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
   930                      "retentionInDays": "1",
   931                      "tags": {}
   932                  }
   933              },
   934              {
   935                  "urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todoc57917fa",
   936                  "custom": true,
   937                  "id": "cwlsf-166366141",
   938                  "type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
   939                  "parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
   940                  "inputs": {
   941                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   942                      "filterPattern": "",
   943                      "logGroup": "/aws/lambda/todoc57917fa-2fb58339c66e2b46"
   944                  },
   945                  "defaults": {
   946                      "name": "todoc57917fa-80b54f1d26aaf9da"
   947                  },
   948                  "outputs": {
   949                      "destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
   950                      "filterPattern": "",
   951                      "id": "cwlsf-166366141",
   952                      "logGroup": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
   953                      "name": "todoc57917fa-80b54f1d26aaf9da"
   954                  }
   955              },
   956              {
   957                  "urn": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
   958                  "custom": false,
   959                  "type": "cloud:function:Function",
   960                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   961                  "inputs": {
   962                      "handler": {}
   963                  }
   964              },
   965              {
   966                  "urn": "urn:pulumi:foo::todo::aws:apigateway/restApi:RestApi::todo",
   967                  "custom": true,
   968                  "id": "eupwl7wu4i",
   969                  "type": "aws:apigateway/restApi:RestApi",
   970                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   971                  "inputs": {
   972                      "body": "{\"swagger\":\"2.0\",\"info\":{\"title\":\"todo\",\"version\":\"1.0\"},\"paths\":{\"/\":{\"get\":{\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/index.html\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/{proxy+}\":{\"x-amazon-apigateway-any-method\":{\"parameters\":[{\"name\":\"proxy\",\"in\":\"path\",\"required\":true,\"type\":\"string\"}],\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"requestParameters\":{\"integration.request.path.proxy\":\"method.request.path.proxy\"},\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/{proxy}\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/todo/{id}\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations\"}},\"post\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations\"}}},\"/todo\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations\"}}}},\"x-amazon-apigateway-binary-media-types\":[\"*/*\"]}"
   973                  },
   974                  "defaults": {
   975                      "name": "todo-ad0751ace493404e"
   976                  },
   977                  "outputs": {
   978                      "body": "{\"swagger\":\"2.0\",\"info\":{\"title\":\"todo\",\"version\":\"1.0\"},\"paths\":{\"/\":{\"get\":{\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/index.html\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/{proxy+}\":{\"x-amazon-apigateway-any-method\":{\"parameters\":[{\"name\":\"proxy\",\"in\":\"path\",\"required\":true,\"type\":\"string\"}],\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"requestParameters\":{\"integration.request.path.proxy\":\"method.request.path.proxy\"},\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/{proxy}\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/todo/{id}\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations\"}},\"post\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations\"}}},\"/todo\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations\"}}}},\"x-amazon-apigateway-binary-media-types\":[\"*/*\"]}",
   979                      "createdDate": "2017-11-08T19:58:59Z",
   980                      "description": "",
   981                      "id": "eupwl7wu4i",
   982                      "name": "todo",
   983                      "rootResourceId": "jxbhzjh5dd"
   984                  }
   985              },
   986              {
   987                  "urn": "urn:pulumi:foo::todo::aws:apigateway/deployment:Deployment::todo_f569e86a",
   988                  "custom": true,
   989                  "id": "4ws2ht",
   990                  "type": "aws:apigateway/deployment:Deployment",
   991                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
   992                  "inputs": {
   993                      "description": "Deployment of version todo_f569e86a",
   994                      "restApi": "eupwl7wu4i",
   995                      "stageName": ""
   996                  },
   997                  "outputs": {
   998                      "createdDate": "2017-11-08T19:59:03Z",
   999                      "description": "Deployment of version todo_f569e86a",
  1000                      "executionArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/",
  1001                      "id": "4ws2ht",
  1002                      "invokeUrl": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/",
  1003                      "restApi": "eupwl7wu4i",
  1004                      "stageName": ""
  1005                  }
  1006              },
  1007              {
  1008                  "urn": "urn:pulumi:foo::todo::aws:apigateway/stage:Stage::todo",
  1009                  "custom": true,
  1010                  "id": "ags-eupwl7wu4i-stage",
  1011                  "type": "aws:apigateway/stage:Stage",
  1012                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1013                  "inputs": {
  1014                      "deployment": "4ws2ht",
  1015                      "description": "The current deployment of the API.",
  1016                      "restApi": "eupwl7wu4i",
  1017                      "stageName": "stage"
  1018                  },
  1019                  "outputs": {
  1020                      "cacheClusterEnabled": false,
  1021                      "cacheClusterSize": "",
  1022                      "clientCertificateId": "",
  1023                      "deployment": "4ws2ht",
  1024                      "description": "The current deployment of the API.",
  1025                      "documentationVersion": "",
  1026                      "id": "ags-eupwl7wu4i-stage",
  1027                      "restApi": "eupwl7wu4i",
  1028                      "stageName": "stage",
  1029                      "variables": {}
  1030                  }
  1031              },
  1032              {
  1033                  "urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_f0c1d77e",
  1034                  "custom": true,
  1035                  "id": "todo_invoke_f0c1d77e-0225bcbbfa5e7941",
  1036                  "type": "aws:lambda/permission:Permission",
  1037                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1038                  "inputs": {
  1039                      "action": "lambda:invokeFunction",
  1040                      "function": "todo035b5d8f-7748c68eadc313c0",
  1041                      "principal": "apigateway.amazonaws.com",
  1042                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo/{id}"
  1043                  },
  1044                  "defaults": {
  1045                      "statementId": "todo_invoke_f0c1d77e-0225bcbbfa5e7941"
  1046                  },
  1047                  "outputs": {
  1048                      "action": "lambda:invokeFunction",
  1049                      "function": "todo035b5d8f-7748c68eadc313c0",
  1050                      "id": "todo_invoke_f0c1d77e-0225bcbbfa5e7941",
  1051                      "principal": "apigateway.amazonaws.com",
  1052                      "qualifier": "",
  1053                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo/{id}",
  1054                      "statementId": "todo_invoke_f0c1d77e-0225bcbbfa5e7941"
  1055                  }
  1056              },
  1057              {
  1058                  "urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_44308e8f",
  1059                  "custom": true,
  1060                  "id": "todo_invoke_44308e8f-08a405381ef4ecdb",
  1061                  "type": "aws:lambda/permission:Permission",
  1062                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1063                  "inputs": {
  1064                      "action": "lambda:invokeFunction",
  1065                      "function": "todo67876f56-7069ef1500d0e44e",
  1066                      "principal": "apigateway.amazonaws.com",
  1067                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/POST/todo/{id}"
  1068                  },
  1069                  "defaults": {
  1070                      "statementId": "todo_invoke_44308e8f-08a405381ef4ecdb"
  1071                  },
  1072                  "outputs": {
  1073                      "action": "lambda:invokeFunction",
  1074                      "function": "todo67876f56-7069ef1500d0e44e",
  1075                      "id": "todo_invoke_44308e8f-08a405381ef4ecdb",
  1076                      "principal": "apigateway.amazonaws.com",
  1077                      "qualifier": "",
  1078                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/POST/todo/{id}",
  1079                      "statementId": "todo_invoke_44308e8f-08a405381ef4ecdb"
  1080                  }
  1081              },
  1082              {
  1083                  "urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_a55f2cbc",
  1084                  "custom": true,
  1085                  "id": "todo_invoke_a55f2cbc-b70db0537c54d3d2",
  1086                  "type": "aws:lambda/permission:Permission",
  1087                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1088                  "inputs": {
  1089                      "action": "lambda:invokeFunction",
  1090                      "function": "todoc57917fa-2fb58339c66e2b46",
  1091                      "principal": "apigateway.amazonaws.com",
  1092                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo"
  1093                  },
  1094                  "defaults": {
  1095                      "statementId": "todo_invoke_a55f2cbc-b70db0537c54d3d2"
  1096                  },
  1097                  "outputs": {
  1098                      "action": "lambda:invokeFunction",
  1099                      "function": "todoc57917fa-2fb58339c66e2b46",
  1100                      "id": "todo_invoke_a55f2cbc-b70db0537c54d3d2",
  1101                      "principal": "apigateway.amazonaws.com",
  1102                      "qualifier": "",
  1103                      "sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo",
  1104                      "statementId": "todo_invoke_a55f2cbc-b70db0537c54d3d2"
  1105                  }
  1106              },
  1107              {
  1108                  "urn": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1109                  "custom": false,
  1110                  "type": "cloud:http:HttpEndpoint",
  1111                  "inputs": {
  1112                      "customDomainNames": [],
  1113                      "customDomains": [],
  1114                      "routes": [
  1115                          {
  1116                              "handlers": [
  1117                                  {},
  1118                                  {}
  1119                              ],
  1120                              "method": "GET",
  1121                              "path": "/todo/{id}"
  1122                          },
  1123                          {
  1124                              "handlers": [
  1125                                  {}
  1126                              ],
  1127                              "method": "POST",
  1128                              "path": "/todo/{id}"
  1129                          },
  1130                          {
  1131                              "handlers": [
  1132                                  {}
  1133                              ],
  1134                              "method": "GET",
  1135                              "path": "/todo"
  1136                          }
  1137                      ],
  1138                      "staticRoutes": [
  1139                          {
  1140                              "localPath": "www",
  1141                              "options": {},
  1142                              "path": "/"
  1143                          }
  1144                      ],
  1145                      "url": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/"
  1146                  }
  1147              },
  1148              {
  1149                  "urn": "urn:pulumi:foo::todo::aws:apigateway/deployment:Deployment::todo_f569e86a",
  1150                  "delete": true,
  1151                  "custom": true,
  1152                  "id": "abc123",
  1153                  "type": "aws:apigateway/deployment:Deployment",
  1154                  "parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
  1155                  "inputs": {
  1156                      "description": "Deployment of version todo_f569e86a",
  1157                      "restApi": "eupwl7wu4i",
  1158                      "stageName": ""
  1159                  },
  1160                  "outputs": {
  1161                      "createdDate": "2017-11-08T19:59:03Z",
  1162                      "description": "Deployment of version todo_f569e86a",
  1163                      "executionArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/",
  1164                      "id": "abc123",
  1165                      "invokeUrl": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/",
  1166                      "restApi": "eupwl7wu4i",
  1167                      "stageName": ""
  1168                  }
  1169              }
  1170          ]
  1171      }
  1172  }