# ajv-sanitizer

> String sanitization with JSON-Schema using Ajv

Latest version **1.2.1** (published 2022-03-22) · MIT license · 0 weekly downloads

## Install

```sh
npm install ajv-sanitizer
pnpm add ajv-sanitizer
yarn add ajv-sanitizer
bun add ajv-sanitizer
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.1 |
| Published | 2022-03-22 |
| First published | 2019-01-22 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 17.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 10 |
| Author | 53JS |
| Maintainers | 53js |
| Keywords | JSON, ajv, json-schema, json-schema-sanitization, json-schema-sanitize, json-schema-sanitizer, json-schema-validation, json-schema-validator, jsonschema, sanitization, sanitize, sanitizer, schema, validation, validator |

## Links

- npm: https://www.npmjs.com/package/ajv-sanitizer
- Repository: https://github.com/53js/ajv-sanitizer
- Issues: https://github.com/53js/ajv-sanitizer/issues
- npm.io page: https://npm.io/package/ajv-sanitizer

## Dependencies (1)

- [validator](https://npm.io/package/validator.md) ^13.7.0

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 1.2.1 (latest) — 2022-03-22
- 1.2.0 — 2022-03-22
- 1.1.4 — 2019-11-08
- 1.1.3 — 2019-08-27
- 1.1.2 — 2019-07-11
- 1.1.1 — 2019-04-06
- 1.0.0 — 2019-01-22

## README

# ajv-sanitizer

String sanitization with JSON-Schema using [Ajv](https://www.npmjs.com/package/ajv).  

[![npm](https://img.shields.io/npm/v/ajv-sanitizer.svg)](https://www.npmjs.com/package/ajv-sanitizer)

It uses the library [validator.js](https://www.npmjs.com/package/validator) under the hood for string sanitizion.

## Installation and Usage

### Installation

Install the library with `npm install ajv-sanitizer`

### Usage

```javascript
const Ajv = require('ajv');
const ajvSanitizer = require('ajv-sanitizer');
const assert = require('assert');

const ajv = new Ajv();
ajvSanitizer(ajv);

const schema = {
	type: 'object',
	properties: {
		value: {
			type: 'string',
			sanitize: 'text',
		},
	},
};

// sanitized data must be an object property
const data = {
	value: ' trim & escape string',
};

ajv.validate(schema, data);

assert(data.value === 'trim &amp; escape string');
```

#### ES6

```javascript
import ajvSanitizer from 'ajv-sanitizer';
```

## API

### ajvSanitize(ajvInstance, [extraSanitizers])

Returns Ajv instance. It adds a sanitize keyword available for string types.

#### ajvInstance

Type: `Ajv`

The ajv instance to add the sanitize keyword.

#### extraSanitizers

Type: `Object`

Extend or override defaults sanitizers available in json schema.

## Sanitizers

### Available sanitizers

Here is a list of the sanitizers currently available :

* boolean
* date
* email
* escape
* float
* int
* number
* text (escape then trim)
* trim

See [validator.js sanitizers](https://www.npmjs.com/package/validator#user-content-sanitizers) for details

### Custom sanitizer

```javascript
const schema = {
	type: 'object',
	properties: {
		value: {
			type: 'string',
			// Custom sanitizer
			sanitize: data => `-- ${data} --`,
		},
	},
};
```

Usage of email sanitization with custom options:  
```js
import { normalizeEmail } from 'validator';

const schema = {
	type: 'object',
	properties: {
		value: {
			type: 'string',
			sanitize: email => normalizeEmail(email, { gmail_remove_dots: false }),
		},
	},
};
```
If you want to sanitize email this way in every schema, use the following option


### Extending default sanitizers
Adding a sanitizer or override a default globally :

```js
const Ajv = require('ajv');
const ajvSanitizer = require('ajv-sanitizer');
const { normalizeEmail } = require('validator');

const ajv = new Ajv();

// Define extra sanitizer and override defaults
const extraSanitizers = {
	email: email => normalizeEmail(email, { gmail_remove_dots: false }), // overrides default email sanitizer
	uppercase: text => text.toUpperCase(), // new uppercase sanitizer
};

ajvSanitizer(ajv, extraSanitizers);

const schema = {
	type: 'object',
	properties: {
		email: {
			type: 'string',
			sanitize: 'email',
		},
		lastname: {
			type: 'string',
			sanitize: 'uppercase',
		},
	},
};
```

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