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 }