# koa-context-validator

> A robust context validator for koajs

Latest version **1.0.0** (published 2021-08-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install koa-context-validator
pnpm add koa-context-validator
yarn add koa-context-validator
bun add koa-context-validator
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2021-08-24 |
| First published | 2016-05-25 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=12 |
| Dependencies | 0 |
| Unpacked size | 9.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 54 |
| Author | C.T. Lin |
| Maintainers | chentsulin, kpman, tw0517tw |
| Keywords | context, joi, koa, middleware, validate, validator |

## Links

- npm: https://www.npmjs.com/package/koa-context-validator
- Repository: https://github.com/chentsulin/koa-context-validator
- Homepage: https://github.com/chentsulin/koa-context-validator#readme
- Issues: https://github.com/chentsulin/koa-context-validator/issues
- npm.io page: https://npm.io/package/koa-context-validator

## Alternatives

- [@regle/core](https://npm.io/package/@regle/core.md) — 47.0K weekly downloads
- [typeof-arguments](https://npm.io/package/typeof-arguments.md) — 12.5K weekly downloads
- [@lokalise/projects-engine-contracts](https://npm.io/package/@lokalise/projects-engine-contracts.md) — 978 weekly downloads
- [@osjwnpm/nam-laboriosam-quibusdam](https://npm.io/package/@osjwnpm/nam-laboriosam-quibusdam.md) — 70 weekly downloads
- [@oridune/validator](https://npm.io/package/@oridune/validator.md) — 16 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2021-08-24
- 0.5.0-beta.1 (next) — 2020-11-06
- 0.6.0 — 2021-08-17
- 0.5.0 — 2020-11-06
- 0.4.1 — 2017-07-28
- 0.4.0 — 2017-07-26
- 0.3.0 — 2016-11-30
- 0.2.0 — 2016-08-20
- 0.1.3 — 2016-07-18
- 0.1.2 — 2016-07-18
- 0.1.1 — 2016-05-25
- 0.1.0 — 2016-05-25

## README

# koa-context-validator

[![npm version](https://badge.fury.io/js/koa-context-validator.svg)](https://npmjs.org/package/koa-context-validator)
[![Build Status](https://github.com/chentsulin/koa-context-validator/workflows/CI/badge.svg?branch=master)](https://github.com/chentsulin/koa-context-validator/actions?query=branch%3Amaster)
[![Coverage Status](https://coveralls.io/repos/github/chentsulin/koa-context-validator/badge.svg?branch=master)](https://coveralls.io/r/chentsulin/koa-context-validator?branch=master)

> A robust context validator for koajs. Use [`Joi`](https://github.com/sideway/joi) behind the scenes.

## Installation

```sh
$ npm install koa-context-validator joi
```

## Usage

### `query` Validation

```js
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';

const app = new Koa();

app.use(
  validator({
    query: Joi.object().keys({
      username: Joi.string().required(),
    }),
  }),
);
```

### `body` Validation

```js
import Koa from 'koa';
import bodyParser from 'koa-bodyparser';
import validator, { Joi } from 'koa-context-validator';

const app = new Koa();

app.use(bodyParser());
app.use(
  validator({
    body: Joi.object().keys({
      username: Joi.string().required(),
      age: Joi.number().required(),
    }),
  }),
);
```

### `headers` Validation

```js
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';

const app = new Koa();

app.use(
  validator({
    headers: Joi.object()
      .keys({
        username: Joi.string().required(),
      })
      .unknown(),
  }),
);
```

### With `koa-compose`

```js
import Koa from 'koa';
import compose from 'koa-compose';
import validator, { Joi } from 'koa-context-validator';

const app = new Koa();

app.use(
  compose([
    validator({
      query: Joi.object().keys({
        username: Joi.string().required(),
      }),
    }),
    async (ctx) => {
      ctx.body = ctx.request.query;
    },
  ]),
);
```

### With `koa-mount`

```js
import Koa from 'koa';
import mount from 'koa-mount';
import validator, { Joi } from 'koa-context-validator';

const app = new Koa();

app.use(
  mount(
    '/api',
    validator({
      query: Joi.object().keys({
        username: Joi.string().required(),
      }),
    }),
  ),
);
```

### With `@koa/router`

```js
import Koa from 'koa';
import Router from '@koa/router';
import validator, { Joi } from 'koa-context-validator';

const router = new Router();
router.get(
  '/api/:username',
  validator({
    params: Joi.object().keys({
      username: Joi.string().required(),
    }),
  }),
  async (ctx) => {
    ctx.body = ctx.params;
  },
);

const app = new Koa();
app.use(router.middleware());
```

### With `stripUnknown`

```js
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';

app.use(
  validator(
    {
      query: Joi.object().keys({
        username: Joi.string().required(),
      }),
    },
    { stripUnknown: true },
  ),
);
```

### With `Joi.ref`

```js
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';

app.use(
  validator({
    body: Joi.object().keys({
      username: Joi.string().default(Joi.ref('$defaultUsername')),
      age: Joi.number().default(Joi.ref('$defaultAge')),
    }),
  }),
);
```

## Koa 1.x

Use `convert.back` from `koa-convert`.

```js
import koa from 'koa'; // koa 1.x
import convert from 'koa-convert';
import validator, { Joi } from 'koa-context-validator';

const app = koa();

app.use(
  convert.back(
    validator({
      query: Joi.object().keys({
        username: Joi.string().required(),
      }),
    }),
  ),
);
```

## API

### validator(schema, options?)

#### schema

_Required_
Type: `object`

A object which has optional `query`, `body`, `headers` and `params` schema to validate.

#### options

Just be passed to Joi's validate function as options:

https://github.com/hapijs/joi/blob/master/API.md#validatevalue-schema-options-callback.

### Joi

The `Joi` object from the [joi](https://github.com/sideway/joi) package.

## TypeScript

As of version 1.0.0 we've added initial support for TypeScript.

## License

MIT © [C.T. Lin](https://github.com/chentsulin/koa-context-validator)

---
_Source: https://npm.io/package/koa-context-validator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
