{"id":26753,"library":"aws-lambda-middleware","title":"aws-lambda-middleware","description":"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.","status":"active","version":"1.1.2","language":"javascript","source_language":"en","source_url":"https://github.com/blaxk/aws-lambda-middleware","tags":["javascript","aws","lambda","middleware","validate","validation","lambda middleware","lambda validation","lambda payload 2.0"],"install":[{"cmd":"npm install aws-lambda-middleware","lang":"bash","label":"npm"},{"cmd":"yarn add aws-lambda-middleware","lang":"bash","label":"yarn"},{"cmd":"pnpm add aws-lambda-middleware","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"CommonJS destructuring only; no default export.","wrong":"const Middleware = require('aws-lambda-middleware').Middleware","symbol":"Middleware","correct":"const { Middleware } = require('aws-lambda-middleware')"},{"note":"Prop is an alias for PropTypes; both work.","wrong":"const { PropTypes } = require('aws-lambda-middleware')","symbol":"Prop","correct":"const { Prop } = require('aws-lambda-middleware')"},{"note":"isRequired deprecated in v1.0; use .required() method.","wrong":"Prop.string.isRequired","symbol":"Prop.string","correct":"Prop.string.required()"}],"quickstart":{"code":"const { Middleware, Prop } = require('aws-lambda-middleware')\n\nexports.handler = new Middleware().add({\n  queryStringParameters: {\n    username: Prop.string.required(),\n    age: Prop.integer,\n    friends: [\n      {\n        name: Prop.string.length({ max: 20 }),\n        gender: Prop.string.or(['male', 'female'])\n      }\n    ]\n  }\n}).add(async (event, context, prevData) => {\n  const query = event.queryStringParameters\n  console.log(`Hello ${query.username}`)\n  return {\n    statusCode: 200,\n    body: JSON.stringify({ message: 'success' })\n  }\n})","lang":"javascript","description":"Creates a Lambda handler with parameter validation using PropTypes and middleware chaining."},"warnings":[{"fix":"Update code: use .required() instead of .isRequired, change Prop.*.default(({event}) => {}) to named parameters, use .option({trim: false}) for per-prop trim.","message":"v1.0 changes: object and array are reserved prop names, .required() replaces .isRequired, default() uses named parameters, and option() for trim settings.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Remove required() from object/array props if they should be optional; or add .default() to avoid required validation.","message":"v0.9 -> v1.0: interpretation of object and array expressions changed from 'validate only when value exists' to 'required validation'.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Replace .isRequired with .required() method.","message":".isRequired is deprecated since v1.0.0.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Upgrade to v1.0.4 or later.","message":"Prop.string.default('') returns undefined if string is empty; fixed in v1.0.4.","severity":"gotcha","affected_versions":"<1.0.4"},{"fix":"Upgrade to v1.0.4 or later.","message":"Prop.bool.default(false) sets undefined; fixed in v1.0.4.","severity":"gotcha","affected_versions":"<1.0.4"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Change to Prop.string.required()","cause":"Using .required without parentheses; should be .required().","error":"TypeError: Prop.string.required is not a function"},{"fix":"Rename the prop to something else (e.g., 'params').","cause":"Using 'object' as a prop name is reserved since v1.0.","error":"Error: Reserved prop name 'object' cannot be overridden"},{"fix":"Use named parameter object: Prop.string.default(({event}) => event.headers['x-id'])","cause":"Old syntax for default() with (event) => {} in v1.0+.","error":"TypeError: Cannot destructure property 'event' of 'undefined'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}