aws-lambda-middleware

raw JSON →
1.1.2 verified Fri May 01 auth: no javascript

AWS Lambda Middleware is a lightweight library (v1.1.2, last updated 2023) for applying middleware and validating request parameters in AWS Lambda functions. It provides PropTypes for type checking and data correction, a Validate function for custom rules, and supports Express and other frameworks. Key differentiators include minimal overhead for Lambda, deep array/object validation, and customizable error message templates. Release cadence is sporadic, with major changes between v0.9 and v1.0 including reserved prop names, option changes, and required() method replacing isRequired.

error TypeError: Prop.string.required is not a function
cause Using .required without parentheses; should be .required().
fix
Change to Prop.string.required()
error Error: Reserved prop name 'object' cannot be overridden
cause Using 'object' as a prop name is reserved since v1.0.
fix
Rename the prop to something else (e.g., 'params').
error TypeError: Cannot destructure property 'event' of 'undefined'
cause Old syntax for default() with (event) => {} in v1.0+.
fix
Use named parameter object: Prop.string.default(({event}) => event.headers['x-id'])
breaking v1.0 changes: object and array are reserved prop names, .required() replaces .isRequired, default() uses named parameters, and option() for trim settings.
fix Update code: use .required() instead of .isRequired, change Prop.*.default(({event}) => {}) to named parameters, use .option({trim: false}) for per-prop trim.
breaking v0.9 -> v1.0: interpretation of object and array expressions changed from 'validate only when value exists' to 'required validation'.
fix Remove required() from object/array props if they should be optional; or add .default() to avoid required validation.
deprecated .isRequired is deprecated since v1.0.0.
fix Replace .isRequired with .required() method.
gotcha Prop.string.default('') returns undefined if string is empty; fixed in v1.0.4.
fix Upgrade to v1.0.4 or later.
gotcha Prop.bool.default(false) sets undefined; fixed in v1.0.4.
fix Upgrade to v1.0.4 or later.
npm install aws-lambda-middleware
yarn add aws-lambda-middleware
pnpm add aws-lambda-middleware

Creates a Lambda handler with parameter validation using PropTypes and middleware chaining.

const { Middleware, Prop } = require('aws-lambda-middleware')

exports.handler = new Middleware().add({
  queryStringParameters: {
    username: Prop.string.required(),
    age: Prop.integer,
    friends: [
      {
        name: Prop.string.length({ max: 20 }),
        gender: Prop.string.or(['male', 'female'])
      }
    ]
  }
}).add(async (event, context, prevData) => {
  const query = event.queryStringParameters
  console.log(`Hello ${query.username}`)
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'success' })
  }
})