Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MichalLytek/class-transformer-validator
A simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.
https://github.com/MichalLytek/class-transformer-validator
javascript typescript validation validator
Last synced: about 1 month ago
JSON representation
A simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.
- Host: GitHub
- URL: https://github.com/MichalLytek/class-transformer-validator
- Owner: MichalLytek
- License: mit
- Created: 2017-02-02T18:32:18.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T22:27:35.000Z (almost 2 years ago)
- Last Synced: 2024-10-28T21:04:58.195Z (about 2 months ago)
- Topics: javascript, typescript, validation, validator
- Language: TypeScript
- Homepage:
- Size: 291 KB
- Stars: 200
- Watchers: 5
- Forks: 19
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# class-transformer-validator
[![npm version](https://badge.fury.io/js/class-transformer-validator.svg)](https://badge.fury.io/js/class-transformer-validator)
[![Dependency Status](https://david-dm.org/MichalLytek/class-transformer-validator.svg)](https://david-dm.org/MichalLytek/class-transformer-validator)
[![devDependency Status](https://david-dm.org/MichalLytek/class-transformer-validator/dev-status.svg)](https://david-dm.org/MichalLytek/class-transformer-validator#info=devDependencies)
[![peerDependency Status](https://david-dm.org/MichalLytek/class-transformer-validator/peer-status.svg)](https://david-dm.org/MichalLytek/class-transformer-validator#info=devDependencies)A simple plugin for [class-transformer](https://github.com/typestack/class-transformer) and [class-validator](https://github.com/typestack/class-validator) which combines them in a nice and programmer-friendly API.
## Installation
#### Module installation
`npm install class-transformer-validator --save`
(or the short way):
`npm i -S class-transformer-validator`
#### Peer dependencies
This package is only a simple plugin/wrapper, so you have to install the required modules too because it can't work without them. See detailed installation instruction for the modules installation:
- [class-transformer](https://github.com/typestack/class-transformer#installation)
- [class-validator](https://github.com/typestack/class-validator#installation)## Usage
The usage of this module is very simple.
```ts
import { IsEmail } from "class-validator";
import { transformAndValidate } from "class-transformer-validator";// declare the class using class-validator decorators
class User {
@IsEmail()
public email: string;public hello(): string {
return "World!";
}
}// then load the JSON string from any part of your app
const userJson: string = loadJsonFromSomething();// transform the JSON to class instance and validate it correctness
transformAndValidate(User, userJson)
.then((userObject: User) => {
// now you can access all your class prototype method
console.log(`Hello ${userObject.hello()}`); // prints "Hello World!" on console
})
.catch(err => {
// here you can handle error on transformation (invalid JSON)
// or validation error (e.g. invalid email property)
console.error(err);
});
```You can also transform and validate plain JS object (e.g. from express req.body). Using ES7 async/await syntax:
```ts
async (req, res) => {
try {
// transform and validate request body
const userObject = await transformAndValidate(User, req.body);
// infered type of userObject is User, you can access all class prototype properties and methods
} catch (err) {
// your error handling
console.error(err);
}
};
```And since release `0.3.0` you can also pass array of objects - all of them will be validated using given class validation constraints:
```ts
async (req, res) => {
try {
// transform and validate request body - array of User objects
const userObjects = await transformAndValidate(User, req.body);
userObjects.forEach(user => console.log(`Hello ${user.hello()}`));
} catch (err) {
// your error handling
}
};
```## API reference
#### Function signatures
There is available the `transformAndValidate` function with three overloads:
```ts
function transformAndValidate(
classType: ClassType,
jsonString: string,
options?: TransformValidationOptions,
): Promise;
``````ts
function transformAndValidate(
classType: ClassType,
object: object,
options?: TransformValidationOptions,
): Promise;
``````ts
function transformAndValidate(
classType: ClassType,
array: object[],
options?: TransformValidationOptions,
): Promise;
```Be aware that if you validate json string, the return type is a `Promise` of `T` or `T[]` so you need to assert the returned type if you know the shape of json:
```ts
const users = (await transformAndValidate(
User,
JSON.stringify([{ email: "[email protected]" }]),
)) as User[];
```Or you can just check the type in runtime using `Array.isArray` method.
#### Synchronous transformation and validation
If you need sync validation, use `transformAndValidateSync` function instead (available since v0.4.0). It will synchronously return `T` or `T[]`, not a Promise.
#### Parameters and types
- `classType` - an class symbol, a constructor function which can be called with `new`
```ts
type ClassType = {
new (...args: any[]): T;
};
```- `jsonString` - a normal string containing JSON
- `object` - plain JS object of type `object` (introduced in TypeScript 2.2), you will have compile-time error while trying to pass number, boolean, null or undefined but unfortunately run-time error when passing a function
- `array` - array of plain JS objects like described above
- `options` - optional options object, it has two optional properties
```ts
interface TransformValidationOptions {
validator?: ValidatorOptions;
transformer?: ClassTransformOptions;
}
```You can use it to pass options for `class-validator` ([more info](https://github.com/pleerock/class-validator/blob/master/src/validation/ValidatorOptions.ts)) and for `class-transformer` ([more info](https://github.com/pleerock/class-transformer/blob/master/src/ClassTransformOptions.ts)).
## More info
The [class-transformer](https://github.com/pleerock/class-transformer) and [class-validator](https://github.com/pleerock/class-validator) are more powerful than it was showed in the simple usage sample, so go to their github page and check out they capabilities!
## Release notes
**0.9.1**
- widen `class-transformer` peer dependency version range to `>=0.2.3`
- updated all dev dependencies**0.9.0**
- bump `class-validator` peer dependency to version `>=0.12.0`
- updated TypeScript dependency to version `^3.9.5`
- updated all dev dependencies**0.8.0**
- updated `class-transformer` dependency to version `^0.2.3`
- updated `class-validator` dependency to version `^0.10.1`
- updated TypeScript dependency to version `^3.6.3`
- built code is now emitted as ES2015 (dropped es5 support)
- updated all dev dependencies**0.7.1**
- updated `class-transformer` dependency to version `^0.2.0`
**0.6.0**
- updated `class-validator` dependency to version `^0.9.1`
**0.5.0**
- remove deprecated `TransformValdiationOptions` interface (typo)
- updated `class-validator` dependency to version `^0.8.1` and `class-transformer` to `^0.1.9`**0.4.1**
- fix `TransformValdiationOptions` interface name typo (deprecate in favour of `TransformValidationOptions`)
**0.4.0**
- added `transformAndValidateSync` function for synchronous validation
- changed return type for JSON's transform and validation to `Promise` of `T` or `T[]`
- updated `class-validator` dependency to version `^0.7.2` and `class-transformer` to `^0.1.7`**0.3.0**
- added support for transform and validate array of objects given class
- updated `class-validator` dependency to version `^0.7.1`**0.2.0**
- changed object parameter type declaration to `object` (introduced in TS 2.2)
- throwing error when passed array, undefined or null**0.1.1**
- changed throwing error (rejecting promise) [from string to `Error` with message](https://github.com/MichalLytek/class-transformer-validator/commit/e0ed33f9f8feb58d52bfdbc78f8150cdfd0ebe77#diff-f41e9d04a45c83f3b6f6e630f10117feR39)
**0.1.0**
- initial version with `transformAndValidate` function