https://github.com/skippyza/lambda-lib
Collection of decorators to simplify boilerplate for NodeJS lambdas on AWS
https://github.com/skippyza/lambda-lib
decorators nodejs serverless
Last synced: 9 months ago
JSON representation
Collection of decorators to simplify boilerplate for NodeJS lambdas on AWS
- Host: GitHub
- URL: https://github.com/skippyza/lambda-lib
- Owner: SkippyZA
- License: mit
- Created: 2017-05-12T06:37:51.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2020-05-27T23:45:40.000Z (almost 6 years ago)
- Last Synced: 2025-06-07T15:46:56.251Z (10 months ago)
- Topics: decorators, nodejs, serverless
- Language: JavaScript
- Homepage:
- Size: 328 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/SkippyZA/lambda-lib)
[](./LICENSE)
[](http://npmjs.com/package/lambda-lib)
[](https://codecov.io/gh/SkippyZA/lambda-lib)
# AWS Lambda Lib
This library contains a set of decorators to apply to AWS Lambda function to help abstract the event source
and eliminate boilerplate code
## Example
```javascript
import { HandlerController, ApiGateway } from 'lambda-lib'
const errorMap = [
{
error: ReferenceError,
status: 400
},
{
error: Error,
status: 404
}
]
@HandlerController
class SampleLambdaHandler {
@ApiGateway({ statusCode: 200, cors: true })
helloHandler (event) {
return Promise.resolve({ hello: world })
}
@ApiGateway({ statusCode: 200, errorMap: errorMap })
failedHandler (event) {
return Promise.reject(new ReferenceError('I am a reference error'))
}
}
const handler = new SampleLambdaHandler()
export default handler.getHandlers()
```
### Sample Response
#### HelloHandler Response
```bash
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:07:04 GMT
accept-ranges: bytes
cache-control: no-cache
content-length: 39
vary: origin,accept-encoding
{
"hello": "world"
}
```
#### FailedHandler Response
```bash
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:08:00 GMT
cache-control: no-cache
content-length: 398
vary: accept-encoding
{
"error": {
"message": "I am a reference error",
"name": "ReferenceError",
"_stackTrace": [
"ReferenceError: I am a reference error",
"at SampleLambdaHandler.failedHandler (/.../src/resources/example/index.js:223:15)",
"at /.../node_modules/lambda-lib/lib/api-gateway.js:93:19",
"at process._tickDomainCallback (internal/process/next_tick.js:135:7)"
]
}
}
```
## Specifying a custom error response
```javascript
import { Plugins } from 'lambda-lib'
// Registering a custom error response plugin. This is applied globally.
ApiGateway.registerPlugin(new Plugins.ErrorResponse(err => {
return {
test: 'This is the error response body for all errors',
error: err.message
}
}))
```
#### Sample response with custom error
```bash
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Type: application/json
Date: Tue, 29 Aug 2017 17:08:00 GMT
cache-control: no-cache
content-length: 398
vary: accept-encoding
{
"test": "This is the error response body for all errors",
"error": "I am a reference error"
}
```
## Included Plugins
| Plugin | Description |
| ---------------- | -------------------------------------------------------------- |
| cors | When true, a set of default CORS headers are added to the response. Such as: `Access-Control-Allow-Origin`, `Access-Control-Allow-Credentials`, `Access-Control-Allow-Methods` |
| statusCode | Default status code for the response. Any object resolved via a Promise in the handler, will get this status code. |
| errorMap | Mapping of error types to response codes for rejected promises. |
| errorResponse | Format the response of an error. |
## Plugin Hooks
| Hook | Description |
| ---------------- | -------------------------------------------------------------- |
| INITIALIZE | Initialize is executed right at the beginning of the request, before any default plugins have been executed |
| PRE_EXECUTE | The pre execute hook is run right before the execution of handler code. |
| POST_EXECUTE | This hook, post execute, is run after the execution of the handler code. |
| ON_ERROR | When ever there is an error which results in a rejected promise, this hook is executed. |
| FINALLY | Final hook executed after the response has been sent to the client already. (Unable to manipulate response contents here) |
## Writing your own plugin
See [built-in plugins](./src/plugins) for samples