{"id":24518249,"url":"https://github.com/flasd/express-yup-middleware","last_synced_at":"2025-03-15T11:12:13.428Z","repository":{"id":43158341,"uuid":"248382750","full_name":"flasd/express-yup-middleware","owner":"flasd","description":"Middleware to validate incoming data in express endpoints using Yup's dead simple schema validation.","archived":false,"fork":false,"pushed_at":"2023-01-24T01:41:05.000Z","size":2805,"stargazers_count":2,"open_issues_count":18,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-01-22T01:41:28.964Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flasd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-19T01:31:09.000Z","updated_at":"2020-07-06T08:58:27.000Z","dependencies_parsed_at":"2023-02-13T09:31:18.799Z","dependency_job_id":null,"html_url":"https://github.com/flasd/express-yup-middleware","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flasd%2Fexpress-yup-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flasd%2Fexpress-yup-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flasd%2Fexpress-yup-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flasd%2Fexpress-yup-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flasd","download_url":"https://codeload.github.com/flasd/express-yup-middleware/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243719398,"owners_count":20336607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-22T01:41:22.057Z","updated_at":"2025-03-15T11:12:13.409Z","avatar_url":"https://github.com/flasd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# express-yup-middleware\n\nMiddleware to validate incoming data in express endpoints using Yup's dead simple schema validation.\n\n[![Build Status](https://travis-ci.org/flasd/express-yup-middleware.svg?branch=master)](https://travis-ci.org/flasd/express-yup-middleware)\n[![Coverage Status](https://coveralls.io/repos/github/flasd/express-yup-middleware/badge.svg?branch=master)](https://coveralls.io/github/flasd/express-yup-middleware?branch=master)\n[![npm version](https://badge.fury.io/js/flasd%2Fexpress-yup-middleware.svg)](https://www.npmjs.com/package/@flasd/express-yup-middleware)\n[![npm downloads per month](https://img.shields.io/npm/dm/@flasd/express-yup-middleware.svg)](https://www.npmjs.com/package/@flasd/express-yup-middleware)\n\n## Instalation\n\nInstall the latest version of express-yup-middleware:\n\n```\n$ yarn add @flasd/express-yup-middleware\n\n// if you are feeling old school\n$ npm install @flasd/express-yup-middleware --save\n```\n\nNow you just import it as a module:\n\n```javascript\nconst createValidation = require('express-yup-middleware');\n\n// ou, em ES6+\n\nimport createValidation from 'express-yup-middleware';\n```\n\nThis module is [UMD](https://github.com/umdjs/umd) compliant, therefore it's compatible with RequireJs, AMD, CommonJs 1 \u0026 2, etc. It would even work on the browser, but you probably should only use it in NodeJs.\n\nAlso, this comes with type definitions in Typescript!\n\n## API \u0026 Usage.\n\n#### createValidation();\n\nMethod signature:\n\n```typescript\nfunction createValidation\u003cT\u003e(\n  schema: Schema\u003cobject\u003e | ObjectSchemaDefinition\u003cobject\u003e,\n  entityFrom: 'query' | 'body' | 'request' = 'body',\n  options?: ExpressYupMiddlewareOptions,\n): QueryValidator\u003cT\u003e | BodyValidator\u003cT\u003e | RequestValidator;\n```\n\n```typescript\nimport createValidation from 'express-yup-middleware';\nimport express from 'express';\nimport * as Yup from 'yup';\n\nconst validate = createValidation({\n  name: Yup.string('Name must be a string!')\n    .min(3, 'Name too short!')\n    .required('Name is required!'),\n});\n\nconst app = express();\n\napp.post('/save-name', [\n  validate,\n  (req, res) =\u003e {\n    /* req.body.name has been validated! */\n  },\n]);\n```\n\n#### Args\n\n##### schema: Schema\u003cany\u003e | any,\n\nThis first argument passed to `createValidation` is a Yup schema or an Object that can will transformed into one.\nAll are valid:\n\n```typescript\n/* here req.body must be an object */\ncreateValidation({\n  name: Yup.string().required(),\n});\n\n// or\n/* here req.body must also be an object */\ncreateValidation(\n  Yup.object().shape({\n    name: Yup.string().required(),\n  }),\n);\n\n// or\n/* here req.body must be an array */\ncreateValidation(Yup.array());\n```\n\n##### entityFrom: 'query' | 'body' | 'request' = 'body',\n\n```typescript\n/* here req.body must be an object */\ncreateValidation(\n  {\n    name: Yup.string().required(),\n  },\n  'body',\n);\n\n// or\n/* here req.body must also be an object */\ncreateValidation(\n  Yup.object().shape({\n    name: Yup.string().required(),\n  }),\n  'query',\n);\n\n// or\n/* here req.body must be an array */\ncreateValidation(Yup.string(), 'request', {\n  entityPath: ['headers', 'authroization'],\n});\n```\n\n##### options?: ExpressYupMiddlewareOptions\n\nThe second argument passed to `createValidation` is an optional configuration object:\n\n```typescript\ntype ExpressYupMiddlewareOptions = {\n  // Yup schema.validate(options) object. Check their documentation! (link below)\n  /* Defaults are:\n   * {\n   *   strict: true,\n   *   stripUnknown: true,\n   *   abortEarly: false,\n   * }\n   */\n  validateOptions?: ValidateOptions;\n\n  // Whenever validation fails, how to send the response to client?\n  responseOptions?: {\n    // res.status(errorCode), defaults is 422 (Unprocessable Entity)\n    errorCode?: number;\n    // should we return errors to the client? default is true\n    returnErrors?: boolean;\n\n    // If you need to transform errors returned from Yup before sending them:\n    transformErrors?: (errors: Array\u003cstring\u003e) =\u003e any;\n  };\n\n  // where in the given object is the data to be validated (uses lodash.get to access data)\n  // if you want to only validate nested data (eg: req.body.data), pass 'data'\n  // if 'entityFrom' is 'request' and you want to access, for example, req.files, pass 'files';\n  entityPath?: string | number | Array\u003cstring | number\u003e;\n\n  // If you need to transform the entity in some way before validating:\n  transformEntity?: (entity: any) =\u003e any;\n};\n```\n\n#### Middleware\n\nWhen you call `createValidation()` the returned value will be a regular express middleware.\n\n```typescript\nconst app = express();\n\nconst validateHeader = createValidation(\n  Yup.string().required('Authorization'),\n  'request',\n  { entityPath: ['headers', 'Authorization'] },\n);\n\napp.use(validateHeader);\n\nconst validateLogin = createValidation(\n  {\n    email: Yup.string().email().required(),\n    password: Yup.string().required(),\n  },\n  'body',\n  { responseOptions: { errorCode: 401 } },\n);\n\napp.post('/login', [\n  validateLogin,\n  (req, res) =\u003e {\n    /* do login */\n  },\n]);\n```\n\n### Copyright \u0026 License\n\nCopyright (c) 2020 [Marcel de Oliveira Coelho](https://github.com/flasd) under the [MIT License](https://github.com/flasd/express-yup-middleware/blob/master/LICENSE.md). Go Crazy. :rocket:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflasd%2Fexpress-yup-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflasd%2Fexpress-yup-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflasd%2Fexpress-yup-middleware/lists"}