Skip to content

A simple framework for building AWS Lambda functions that can handle multiple AWS API Gateway requests.

License

Notifications You must be signed in to change notification settings

jtogrul/magiclambda

Repository files navigation

MagicLambda 🪄λ

A simple framework for building AWS Lambda functions that can handle multiple AWS API Gateway requests.

Installation

Install by npm

npm install --save magiclambda

Modify your tsconfig.json to enable annotations

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

Getting started

To have the MagicLambda handle API Gateway requests you will need to declare a Controller class with route handler methods.

// controller.ts

import { Controller, Get, PathParam, Response, ok } from 'magiclambda'

@Controller('/example')
export class ExampleController {
  @Get('/hello/{name}')
  getHelloName (@PathParam('name') name: string): Response {
    return ok(`Hello ${name}`)
  }
}

Then you can use controllerHandler from monorepo library to automaticly create API Gateway compatible request handler, which will be able to handle all the requests defined in your controller.

// index.ts

import { controllerHandler } from 'magiclambda'
import { ExampleController } from './controller'

export const handler = controllerHandler(ExampleController)

Supported annotations

@Controller(basePath: string) [class]

Marks the annotated class as a Controller and assigns a basePath to all routes that it has defined.

@Get(path: string) [method]

Registers the annotated method as GET request handler for given path. Path params should be specified in {paramName} format.

@Post(path: string) [method]

Registers the annotated method as POST request handler for given path. Path params should be specified in {paramName} format.

@Put(path: string) [method]

Registers the annotated method as PUT request handler for given path. Path params should be specified in {paramName} format.

@Patch(path: string) [method]

Registers the annotated method as PATCH request handler for given path. Path params should be specified in {paramName} format.

@Delete(path: string) [method]

Registers the annotated method as DELETE request handler for given path. Path params should be specified in {paramName} format.

@PathParam(name: string) [argument]

Marks the annotated argument as the receiver of the path param name which was specified in the path of the Router

@QueryParam(name: string, required: boolean) [argument]

Marks the annotated argument as the receiver of the query param name. Setting required to true instructs the handler to fail the request if the query parameter is not present.

@RequestBody(required: boolean) [argument]

Marks the annotated argument as the receiver of the HTTP request body. Setting required to true instructs the handler to fail the request if the request body is not present.

@Validated (schema: Joi.Schema) [argument]

Instructs the handler to validate the annotated parameter (Path, Query or RequestBody) against given Joi schema.

Router response

MagicLambda provides utilities to make it easy to return a response body with common status codes. Simply return one of the following function results from your routers.

ok(body?: any)

Builds response with status code 200 and response body if provided

badRequest(body?: any)

Builds response with status code 400 and response body if provided

notFound(body?: any)

Builds response with status code 404 and response body if provided

internalServerError(body?: any)

Builds response with status code 500 and response body if provided

response(status: number, body?: any)

Builds response with status code status and response body if provided

About

A simple framework for building AWS Lambda functions that can handle multiple AWS API Gateway requests.

Topics

Resources

License

Stars

Watchers

Forks