1.0.1 • Published 3 years ago

typesafe-api-gateway v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

typesafe-api-gateway

This is types package that I've made as extension of @types/aws-lambda package with idea of giving much more generic interface for API Gateway events.

Before you start please take a look below to see explanation why generic API Gateway Event is needed.

interface Payload {
  foo: string
}

const handler = async ({ body }: APIGatwayEventProxy): APIGatewayProxyResult => {
   let data: Payload

    try {
      data = JSON.parse(body) as unknown as Payload
    } catch {
     // exception handle
    }
}

In the example from above body property most-likely will get string or null type since this is what type definition has inside APIGatewayProxyEventBase

export interface APIGatewayProxyEventBase<TAuthorizerContext> {
    body: string | null;
}

The reason for string as body type is most likely due fact that body in event is usually in raw form which needs to get parsed.

However, if there is body-parser used as middleware or other mechanism applied that pass parsed body to event there is need to use type correction

interface Payload {
    foo: string
}

const handler = async ({ body }: APIGatwayEventProxy): APIGatewayProxyResult => {
  let data = body as unknown as Payload
}

This is the place where this library comes with help with more generic typings

Usage

Typing request parts

interface Body {
  bar: string
}

interface Headers {
  baz: string
}

const handler = async (event: APIGatwayEventProxy<{ body: Foo,  headers: Headers }>): APIGatewayProxyResult => {
  //
}

Setup

In order to make types available with existing code base You need to specify types. There are two ways for including types in project:

Using types property in tsconfig.json

{
  "types": [
    "typesafe-api-gateway"
  ]
}

Using import in types.d.ts file

import 'typesafe-api-gateway'

Contribution

Feel free to submit an issue or PR

License

MIT