{"_id":"@lambda-middleware/compose","_rev":"4-94142d13a2fdb9363accf854dc5a1684","name":"@lambda-middleware/compose","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@lambda-middleware/compose","version":"1.0.0","description":"A compose function for functional lambda middleware.","homepage":"https://dbartholomae.github.io/lambda-middleware/","license":"MIT","author":{"name":"Daniel Bartholomae","email":"daniel@bartholomae.name"},"main":"lib/index.js","keywords":["aws","lambda","middleware","error","http","json"],"types":"lib/index.d.ts","engines":{"npm":">= 4.0.0"},"private":false,"directories":{"example":"examples"},"scripts":{"build":"rimraf ./lib && tsc --project tsconfig.build.json","lint":"eslint src/**/*.ts examples/**/*.ts","pretest":"npm run build","start":"cd test && serverless offline","test":"npm run lint && npm run test:unit && npm run test:integration && pkg-ok","test:integration":"concurrently --timeout 600000 --kill-others --success first \"cd test && serverless offline\" \"wait-on http://localhost:3000/dev/status && jest -c jest.integration.config.js\"","test:unit":"jest"},"devDependencies":{"@lambda-middleware/utils":"*","@semantic-release/changelog":"^3.0.2","@semantic-release/commit-analyzer":"^6.1.0","@semantic-release/git":"^7.0.8","@semantic-release/npm":"^5.1.4","@semantic-release/release-notes-generator":"^7.1.4","@types/jest":"^25.2.1","@types/supertest":"^2.0.8","@types/aws-lambda":"^8.10.47","@typescript-eslint/parser":"^2.26.0","@typescript-eslint/eslint-plugin":"^2.26.0","aws-lambda":"^1.0.5","codecov":"^3.2.0","concurrently":"^5.1.0","cross-env":"^6.0.0","eslint":"^6.8.0","eslint-config-prettier":"^6.10.1","eslint-plugin-prettier":"^3.1.2","http-errors":"^1.7.3","jest":"^25.2.7","jest-junit":"^10.0.0","pkg-ok":"^2.3.1","prettier":"^2.0.2","prettier-config-standard":"^1.0.1","rimraf":"^3.0.2","semantic-release":"^15.13.3","serverless":"^1.67.0","serverless-offline":"^6.1.4","serverless-webpack":"^5.3.1","source-map-support":"^0.5.16","supertest":"^4.0.2","ts-jest":"^25.3.1","ts-loader":"^6.2.2","typescript":"^3.7.5","wait-on":"^5.2.0","webpack":"^4.41.5"},"repository":{"type":"git","url":"git+ssh://git@github.com/dbartholomae/lambda-middleware.git"},"bugs":{"url":"https://github.com/dbartholomae/lambda-middleware/issues"},"_id":"@lambda-middleware/compose@1.0.0","_nodeVersion":"12.16.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-aFzU5+Xe+tvXBQwwN3gXtvSIkqS4EjAIJHTxglR+rgXYq2vaqEtttSYvbAJwdlk9mA8MEyA3noF+I3R6okmXTw==","shasum":"232d1dcdec98bc12f68daa1865041abb19242f27","tarball":"https://registry.npmjs.org/@lambda-middleware/compose/-/compose-1.0.0.tgz","fileCount":11,"unpackedSize":10728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMYUTCRA9TVsSAnZWagAAmUYQAIFkVjDq/IheL4o2MJZm\nlVqmDIbh2tN2d5BmVP/cBBbc8NYa8a7AlEh+GWMkMDrz7mjK5Z6XlmfE5w7B\n0j4PeiZhwmlvmdEQxun0tLmauBVz0uL3VNX0kmadL7FsEnWU4HQm7ZltKasi\n4FMpS4SLqEpGfkoYk/XYvQpUMh01/aMa4tYnCwX59P5d3iCMh1GQQhJk4oSm\nkdvccggzSl2mn2G2px9utb2JpjGCq/sBhv06stVzxenlqJjwmDYXWqx408Gj\nZGv8tsxssfCOrqo7zHfvXzbzd/QHHtvQfRzDw90dSV6+5QpTtrTlsA2pMKpP\n8OyBSmN4cFF9GTGGc/JEpToG6IkUxjdE+2fvSPI2mtWQu0tWr3SGKqUwm4pm\nUfMXDOtDpoZWv6dBRrDlwUTgdcf7nDdN/H4V6lIAzoezfqu1McStu6fXDeHr\n1jowTutMXj6PgHIWvKMCQEmSX14+ME5m1xOZyM0+P73sZfS50vcyrBxljnK4\nded0pT75H4UhLNl5NkSPiw8F8LhsTWYCgS1V6Apb7eioBMeE9eJC11J8Th7s\nhs7wXh31OMBJEWp+0E+2sDmn/ylZuC5mksdAZk192pMSKysmmFM7TtdZmgae\nqLbTBiM2Z/Ndh7OIQXlorx1Rk+Ipgtafe5nOP6jdkOY5G6qOQrMpae6KYdjY\na47V\r\n=sZo9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDY3DaRa/Bk6lklMFRNpgOlIUdbbZZYM7herWvYIJCOUwIhAJWxQFdpphHf2vk/Y8m0Sxzw0gX8HqIN2LJxMkSygCx1"}]},"maintainers":[{"name":"dbartholomae","email":"daniel@bartholomae.name"}],"_npmUser":{"name":"dbartholomae","email":"daniel@bartholomae.name"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/compose_1.0.0_1597080850642_0.5246407883522963"},"_hasShrinkwrap":false},"1.0.1":{"name":"@lambda-middleware/compose","version":"1.0.1","description":"A compose function for functional lambda middleware.","homepage":"https://dbartholomae.github.io/lambda-middleware/","license":"MIT","author":{"name":"Daniel Bartholomae","email":"daniel@bartholomae.name"},"main":"lib/index.js","keywords":["aws","lambda","middleware","error","http","json"],"types":"lib/index.d.ts","engines":{"npm":">= 4.0.0"},"private":false,"directories":{"example":"examples"},"scripts":{"build":"rimraf ./lib && tsc --project tsconfig.build.json","lint":"eslint src/**/*.ts examples/**/*.ts","pretest":"npm run build","start":"cd test && serverless offline","test":"npm run lint && npm run test:unit && npm run test:integration && pkg-ok","test:integration":"concurrently --timeout 600000 --kill-others --success first \"cd test && serverless offline\" \"wait-on http://localhost:3000/dev/status && jest -c jest.integration.config.js\"","test:unit":"jest"},"dependencies":{"tslib":"^2.0.1"},"devDependencies":{"@lambda-middleware/utils":"*","@semantic-release/changelog":"^3.0.2","@semantic-release/commit-analyzer":"^6.1.0","@semantic-release/git":"^7.0.8","@semantic-release/npm":"^5.1.4","@semantic-release/release-notes-generator":"^7.1.4","@types/jest":"^25.2.1","@types/supertest":"^2.0.8","@types/aws-lambda":"^8.10.47","@typescript-eslint/parser":"^2.26.0","@typescript-eslint/eslint-plugin":"^2.26.0","aws-lambda":"^1.0.5","codecov":"^3.2.0","concurrently":"^5.1.0","cross-env":"^6.0.0","eslint":"^6.8.0","eslint-config-prettier":"^6.10.1","eslint-plugin-prettier":"^3.1.2","http-errors":"^1.7.3","jest":"^25.2.7","jest-junit":"^10.0.0","pkg-ok":"^2.3.1","prettier":"^2.0.2","prettier-config-standard":"^1.0.1","rimraf":"^3.0.2","semantic-release":"^15.13.3","serverless":"^1.67.0","serverless-offline":"^6.1.4","serverless-webpack":"^5.3.1","source-map-support":"^0.5.16","supertest":"^4.0.2","ts-jest":"^25.3.1","ts-loader":"^6.2.2","typescript":"^3.7.5","wait-on":"^5.2.0","webpack":"^4.41.5"},"repository":{"type":"git","url":"git+ssh://git@github.com/dbartholomae/lambda-middleware.git"},"bugs":{"url":"https://github.com/dbartholomae/lambda-middleware/issues"},"_id":"@lambda-middleware/compose@1.0.1","_nodeVersion":"12.16.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-2HQaIANkVbDq6LWKipP9v4gsU0Ro8P0hpRKbTG7jpwvR1hLLNM8MhA79oGUq6XAQpSzeBVLQpU/hYL5JfphtJg==","shasum":"f7ca5276ef10d9769a6d34a70bd1c9263d8ed02d","tarball":"https://registry.npmjs.org/@lambda-middleware/compose/-/compose-1.0.1.tgz","fileCount":11,"unpackedSize":11264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZYQCRA9TVsSAnZWagAAmJYP/0q2yryzNLB0tHNTHr8R\n8nZZdrYc2JbrN5HFHZ1KrJk1qEVJ23DP0xoHPI8y19lVAeviFREQSD7W6xgJ\n+BGUYo2vdfJAX4xp2yv7D7itBZFRCnh4Ukjdly60GTvEFfkG2fFjtJn8a87M\n/6DYcKL8xHvE4cZoEXKpuQMqhWA1uWmOlHpYt77LQThaPvkLAXV/kB5KGn7L\nwgsvh42xB3YUkFMmLTZFKjWQSaH72FKoB8pFRh/4bBOgB2Y3H40us+JDLQBt\nS15mc6zNoCap1e8X0F2pilX2gKsRVGU5Ru02qINSpUXyERDY9CtnEU/5VTw8\nu/J8/afvzDWX2CS0rI8RdN67wA1nzYtfi+7Du/ReOtqnPwhbeEMb+EdaG74E\nSj2sefFQHc1aHwkAOQy5arfuKQBLRd65MCeqP5J+6WiNxw/uTA/XqME/2alV\nah4LGQV6YTUxeu/cRcNlONYP7Dl67J0wRhYY3Ofpewa0ze21/HA9WtV3v+Ih\nZ0OVwVe34GmMCVL56pqEZbv70YTKoTBpOThFrSPl1DXtsBqdPkhfBX1cVHsN\nXIey9ryxcv9QKC/mTAcPoyHLovfWnZnaSP3A7LgEPYA40u18azVIjA/1clEk\nMUpej7cvDKIifhY/Acbj/ZYnFnbAGdIzlu8XWTY1OUu53shprK6yLYBSMioE\nxavu\r\n=//u5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAr5QQT5mv7Df6eszvS65jXaIy1RTdDtKIZ2pVVKFiYAAiEAuNCRf9DDIvru2Ns+hLxv8KdM6yE4V+UQODh75vhrE/Y="}]},"maintainers":[{"name":"dbartholomae","email":"daniel@bartholomae.name"}],"_npmUser":{"name":"dbartholomae","email":"daniel@bartholomae.name"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/compose_1.0.1_1597347343574_0.14055714687261678"},"_hasShrinkwrap":false},"1.1.0":{"name":"@lambda-middleware/compose","version":"1.1.0","description":"A compose function for functional lambda middleware.","homepage":"https://dbartholomae.github.io/lambda-middleware/","license":"MIT","author":{"name":"Daniel Bartholomae","email":"daniel@bartholomae.name"},"main":"lib/index.js","keywords":["aws","lambda","middleware","error","http","json"],"types":"lib/index.d.ts","engines":{"npm":">= 4.0.0"},"private":false,"directories":{"example":"examples"},"scripts":{"build":"rimraf ./lib && tsc --project tsconfig.build.json","lint":"eslint src/**/*.ts examples/**/*.ts","pretest":"npm run build","start":"cd test && serverless offline","test":"npm run lint && npm run test:unit && npm run test:integration && pkg-ok","test:integration":"concurrently --timeout 600000 --kill-others --success first \"cd test && serverless offline\" \"wait-on http://localhost:3000/dev/status && jest -c jest.integration.config.js\"","test:unit":"jest"},"dependencies":{"tslib":"^2.0.1"},"devDependencies":{"@lambda-middleware/utils":"^1.0.2","@semantic-release/changelog":"^3.0.2","@semantic-release/commit-analyzer":"^6.1.0","@semantic-release/git":"^7.0.8","@semantic-release/npm":"^5.1.4","@semantic-release/release-notes-generator":"^7.1.4","@types/jest":"^25.2.1","@types/supertest":"^2.0.8","@types/aws-lambda":"^8.10.47","@typescript-eslint/parser":"^2.26.0","@typescript-eslint/eslint-plugin":"^2.26.0","aws-lambda":"^1.0.5","codecov":"^3.2.0","concurrently":"^5.1.0","cross-env":"^6.0.0","eslint":"^6.8.0","eslint-config-prettier":"^6.10.1","eslint-plugin-prettier":"^3.1.2","http-errors":"^1.7.3","jest":"^25.2.7","jest-junit":"^10.0.0","pkg-ok":"^2.3.1","prettier":"^2.0.2","prettier-config-standard":"^1.0.1","rimraf":"^3.0.2","semantic-release":"^15.13.3","serverless":"^1.67.0","serverless-offline":"^6.1.4","serverless-webpack":"^5.3.1","source-map-support":"^0.5.16","supertest":"^4.0.2","ts-jest":"^25.3.1","ts-loader":"^6.2.2","typescript":"^4.0.3","wait-on":"^5.2.0","webpack":"^4.41.5"},"repository":{"type":"git","url":"git+ssh://git@github.com/dbartholomae/lambda-middleware.git","directory":"packages/compose"},"bugs":{"url":"https://github.com/dbartholomae/lambda-middleware/issues"},"_id":"@lambda-middleware/compose@1.1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.8","dist":{"integrity":"sha512-I2F/46b5rSgF15pdK/1KgjzWCLX780vXXiv7K+DR2YK1U/v2+mYtrx51owHmUFILPqEdoCegDQ0+zp9BDUsnfQ==","shasum":"9ccda81991212128300b6d00a0a90d20092a167a","tarball":"https://registry.npmjs.org/@lambda-middleware/compose/-/compose-1.1.0.tgz","fileCount":11,"unpackedSize":11809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkveoCRA9TVsSAnZWagAAOKgP/j86+XWKb7DWk0E1iR1B\nLeKYlp9puMV+aRcCaRUHGDc9E9swj3usR+9GkdOXOOItuxxcK7XWxKF0wpdz\nq694SvB6mL8i9N6M9fGF7bQ+OI7ORObRru1iTFacd/GHb+ZRZIQEJsXd6Opc\ng2vggHPrEusZEj0Ew7FzJ2/pSgDV+ukV5cE6kmtXsr21q9cijylDLqcp497f\nn42KtvF9HAxLgvdS5Wt8NH3nZOdhuSth2uEwem7n9e0/1YawJ7fFaqC4ljyw\nxaoyR/I7+m8WLX2Qnwej2f2+VWAat13i1aMhRlPg9S6LFAB4T7KEXJkA6pfo\niXBfER+P06SbEpwYFLM83KpPOEG/h04Fpqy+eVBlzYEqfPw/2fZJwclRRcBn\nqvSXdwAWQkSrmdtA13laD4Pd0cBBKoxG4x1u4MB6uYly/98sP36jSoH7xsVy\nzM9IzLtqDSeNfr+aB7b2iJy+AwR1+I68gTZMleDncmyr3Pj5lTpX7xTRQyMX\n41N95rsqhfcIF62QgjS/vHhG9Tm68NHT1MAz+NYKXC3D51jYq3bMdPl+NzHZ\nWDAJJJHERb/FdezKWCJtkWJSGqZtghdFxWF3AABpWMNFfk8s0c5h5HQpxMCU\nHS40y+xP6iP5tl4oZ7QQHbnlLKzjdZov63D11MjNY8xTk5gZg/iZpTGZSLfz\npDow\r\n=R0DU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDauF+/Usa7ldM42jzocXL1NLGaVOpIAtWERedKKWD0NgIgD+KyWJg8YXE57+/5PhYsGnNTcrUSMmfDm+8X7zKLYaU="}]},"maintainers":[{"name":"dbartholomae","email":"daniel@bartholomae.name"}],"_npmUser":{"name":"dbartholomae","email":"daniel@bartholomae.name"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/compose_1.1.0_1603467175544_0.789959544511883"},"_hasShrinkwrap":false},"1.2.0":{"name":"@lambda-middleware/compose","version":"1.2.0","description":"A compose function for functional lambda middleware.","homepage":"https://dbartholomae.github.io/lambda-middleware/","license":"MIT","author":{"name":"Daniel Bartholomae","email":"daniel@bartholomae.name"},"main":"lib/index.js","keywords":["aws","lambda","middleware","error","http","json"],"types":"lib/index.d.ts","engines":{"npm":">= 4.0.0"},"private":false,"directories":{"example":"examples"},"scripts":{"build":"rimraf ./lib && tsc --project tsconfig.build.json","lint":"eslint src/**/*.ts examples/**/*.ts","pretest":"npm run build","start":"cd test && serverless offline","test":"npm run lint && npm run test:unit && npm run test:integration && pkg-ok","test:integration":"concurrently --timeout 600000 --kill-others --success first \"cd test && serverless offline\" \"wait-on http://localhost:3000/dev/status && jest -c jest.integration.config.js\"","test:unit":"jest"},"dependencies":{"tslib":"^2.0.1"},"devDependencies":{"@lambda-middleware/utils":"^1.0.3","@semantic-release/changelog":"^3.0.2","@semantic-release/commit-analyzer":"^6.1.0","@semantic-release/git":"^7.0.8","@semantic-release/npm":"^5.1.4","@semantic-release/release-notes-generator":"^7.1.4","@types/jest":"^25.2.1","@types/supertest":"^2.0.8","@types/aws-lambda":"^8.10.47","@typescript-eslint/parser":"^2.26.0","@typescript-eslint/eslint-plugin":"^2.26.0","aws-lambda":"^1.0.5","codecov":"^3.2.0","concurrently":"^5.1.0","cross-env":"^6.0.0","eslint":"^6.8.0","eslint-config-prettier":"^6.10.1","eslint-plugin-prettier":"^3.1.2","http-errors":"^1.7.3","jest":"^25.2.7","jest-junit":"^10.0.0","pkg-ok":"^2.3.1","prettier":"^2.0.2","prettier-config-standard":"^1.0.1","rimraf":"^3.0.2","semantic-release":"^15.13.3","serverless":"^1.67.0","serverless-offline":"^6.1.4","serverless-webpack":"^5.3.1","source-map-support":"^0.5.16","supertest":"^4.0.2","ts-jest":"^25.3.1","ts-loader":"^6.2.2","typescript":"^4.0.3","wait-on":"^5.2.0","webpack":"^4.41.5"},"repository":{"type":"git","url":"git+ssh://git@github.com/dbartholomae/lambda-middleware.git","directory":"packages/compose"},"bugs":{"url":"https://github.com/dbartholomae/lambda-middleware/issues"},"_id":"@lambda-middleware/compose@1.2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5WsGK3QNHuPDHgviREZqZaU/PkXxg+pwtEb9inEmxezgy9pCjWWjLE3A51Qf9m5jQs+avkyU4w8GK5swmI4RZg==","shasum":"db63d42636cf0774949da44cc2d6317496743e2e","tarball":"https://registry.npmjs.org/@lambda-middleware/compose/-/compose-1.2.0.tgz","fileCount":14,"unpackedSize":16504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmyPeCRA9TVsSAnZWagAA4+kP+wYvJ9Ny6H7KnR+hKkQ/\nCCb1e8JK65R93zuETZF15yqYYdNy6LLw3kCm3UVtpkdFMAtMkTlQh8Yl8O1I\n/okmCxMif8XMkRfz9KdbPulWiV/4jS2CRAI+GwpOFvZmA5ZfLnYWvDNlyKkr\nRHvUOTfiqoPxOgdSkyykI8aXTmVYDt36gphEsQhRdhBlqCSNmzRRzMFRv1k1\nNECrCW3zFQ+Jd3ZIr60rn6W18ibWqbYsFYRqgSfkHbZqb7y4QsxMopwxYWzu\n4wVriCKUVJrkONkbseorlGdgjuKF7rSYFWtSDFxmwfak1RXSnsZvEPqQnWaj\niZ2wfhJ/67rbjnbHkCkeol6Z5y1hp4krI5cUv1jzHApcYHRHwrokE456dMfg\nU0HThjDQ4L29XDY+uaUz98hKEfF71h2MkqU44Dm6A6vt9BJc1l5OkTr9zhqn\noQw/IQn8SpqRREvDSXot66hV/OdQCSOImDNY9QEUwL2IJ81u5VsdVCqxsUaW\nDMm7ocV3fNZKdCGGYQUQ8wAA6Sb4PkF7y9AvnyANxEYKFdTTtM3xVDDGDaz1\nkzHt4M0fztbgoIzbPuUuBz9JJlYprv23gObeeSGXY4abAdgqgTCVrB1et3hX\n/cIi+vdsHNrDkIeHdh3tCoHm9Ss5EwbLZAxOGM7ZQHBKZtuBJipRyK7a2auy\nsbVH\r\n=ejiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDL35PEaE3dPJ3xD1MrDKRWNizP89j8wSJsTgykK8mGpAiAWn1JKGLlOYyDjp6gdAeNlnfBO7GmpRrv3HGkc+LdVaA=="}]},"maintainers":[{"name":"dbartholomae","email":"daniel@bartholomae.name"}],"_npmUser":{"name":"dbartholomae","email":"daniel@bartholomae.name"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/compose_1.2.0_1604002782192_0.4133878625336136"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-10T17:34:10.357Z","1.0.0":"2020-08-10T17:34:10.796Z","modified":"2022-04-06T00:42:06.277Z","1.0.1":"2020-08-13T19:35:43.684Z","1.1.0":"2020-10-23T15:32:55.699Z","1.2.0":"2020-10-29T20:19:42.325Z"},"maintainers":[{"name":"dbartholomae","email":"daniel@bartholomae.name"}],"description":"A compose function for functional lambda middleware.","homepage":"https://dbartholomae.github.io/lambda-middleware/","keywords":["aws","lambda","middleware","error","http","json"],"repository":{"type":"git","url":"git+ssh://git@github.com/dbartholomae/lambda-middleware.git","directory":"packages/compose"},"author":{"name":"Daniel Bartholomae","email":"daniel@bartholomae.name"},"bugs":{"url":"https://github.com/dbartholomae/lambda-middleware/issues"},"license":"MIT","readme":"# @lambda-middleware/compose\n\n[![npm version](https://badge.fury.io/js/%40lambda-middleware%2Fcompose.svg)](https://npmjs.org/package/@lambda-middleware/compose)\n[![downloads](https://img.shields.io/npm/dw/%40lambda-middleware%2Fcompose.svg)](https://npmjs.org/package/@lambda-middleware/compose)\n[![open issues](https://img.shields.io/github/issues-raw/dbartholomae/lambda-middleware.svg)](https://github.com/dbartholomae/lambda-middleware/issues)\n[![debug](https://img.shields.io/badge/debug-blue.svg)](https://github.com/visionmedia/debug#readme)\n[![build status](https://github.com/dbartholomae/lambda-middleware/workflows/.github/workflows/build.yml/badge.svg?branch=main)](https://github.com/dbartholomae/lambda-middleware/actions?query=workflow%3A.github%2Fworkflows%2Fbuild.yml)\n[![codecov](https://codecov.io/gh/dbartholomae/lambda-middleware/branch/main/graph/badge.svg)](https://codecov.io/gh/dbartholomae/lambda-middleware)\n[![dependency status](https://david-dm.org/dbartholomae/lambda-middleware.svg?theme=shields.io)](https://david-dm.org/dbartholomae/lambda-middleware)\n[![devDependency status](https://david-dm.org/dbartholomae/lambda-middleware/dev-status.svg)](https://david-dm.org/dbartholomae/lambda-middleware?type=dev)\n\nA compose function for lambda middleware. This is a pure convenience copy of [ramda's compose](https://ramdajs.com/docs/#compose), using it directly or using other compose functions works as well.\n\n## Lambda middleware\n\nThis middleware is part of the [lambda middleware series](https://dbartholomae.github.io/lambda-middleware/). It can be used independently.\n\n## Usage\n\n```typescript\nimport { compose } from \"@lambda-middleware/compose\";\nimport { PromiseHandler } from \"@lambda-middleware/utils\";\nimport { Context, ProxyHandler, APIGatewayEvent } from \"aws-lambda\";\n\n// This is your AWS handler\nasync function helloWorld(): Promise<object> {\n  return {\n    message: \"Hello world!\",\n  };\n}\n\n// Write your own middleware\nconst stringifyToBody = () => (\n  handle: PromiseHandler<APIGatewayEvent, object>\n) => async (event: APIGatewayEvent, context: Context) => {\n  const response = await handle(event, context);\n  return {\n    body: JSON.stringify(response),\n  };\n};\n\nconst addStatusCode = (statusCode: number) => (\n  handle: PromiseHandler<APIGatewayEvent, { body: string }>\n) => async (event: APIGatewayEvent, context: Context) => {\n  const response = await handle(event, context);\n  return {\n    ...response,\n    statusCode,\n  };\n};\n\n// Wrap the handler with the middleware.\n// With compose you can wrap multiple middlewares around one handler.\nexport const handler: ProxyHandler = compose(\n  addStatusCode(200),\n  stringifyToBody()\n)(helloWorld);\n```\n\n## Usage in TypeScript strict mode\n\nThere's a [known issue with TypeScript](https://github.com/microsoft/TypeScript/issues/29904) that pipe and compose functions cannot\ninfer types correctly if the innermost function is generic (in this case the last argument to `compose`).\nTo get around it, this package also exports `composeHandler`:\n\n```ts\nimport \"reflect-metadata\";\n\nimport { classValidator } from \"@lambda-middleware/class-validator\";\nimport { compose } from \"@lambda-middleware/compose\";\nimport { errorHandler } from \"@lambda-middleware/http-error-handler\";\nimport { IsString } from \"class-validator\";\nimport { APIGatewayProxyResult } from \"aws-lambda\";\n\nclass NameBody {\n  constructor(firstName: string, lastName: string) {\n    this.firstName = firstName;\n    this.lastName = lastName;\n  }\n\n  @IsString()\n  public firstName: string;\n\n  @IsString()\n  public lastName: string;\n}\n\nasync function helloWorld(event: {\n  body: NameBody;\n}): Promise<APIGatewayProxyResult> {\n  return {\n    body: `Hello ${event.body.firstName} ${event.body.lastName}`,\n    headers: {\n      \"content-type\": \"text\",\n    },\n    statusCode: 200,\n  };\n}\n\nexport const handler = composeHandler(\n  errorHandler(),\n  classValidator({\n    bodyType: NameBody,\n  }),\n  // The following function solves the type trouble:\n  helloWorld\n);\n```\n","readmeFilename":"README.md"}