# @wssz/modeler-nestjs

> Plugin for [@wssz/modeler](https://github.com/wszerad/wssz-modeler) and [NestJS](https://github.com/nestjs/nest), introduce support for @nestjs/swagger and ModelerPipe with validation and object casting.

Latest version **0.6.5** (published 2020-10-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install @wssz/modeler-nestjs
pnpm add @wssz/modeler-nestjs
yarn add @wssz/modeler-nestjs
bun add @wssz/modeler-nestjs
```

## Health

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

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

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.6.5 |
| Published | 2020-10-10 |
| First published | 2019-09-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 7 |
| Unpacked size | 37.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | wszerad91@gmail.com |
| Maintainers | wszerad |

## Links

- npm: https://www.npmjs.com/package/@wssz/modeler-nestjs
- Repository: https://github.com/wszerad/wssz-modeler-nestjs
- Homepage: https://github.com/wszerad/wssz-modeler-nestjs#readme
- Issues: https://github.com/wszerad/wssz-modeler-nestjs/issues
- npm.io page: https://npm.io/package/@wssz/modeler-nestjs

## Dependencies (7)

- [ajv](https://npm.io/package/ajv.md) ^6.12.5
- [rxjs](https://npm.io/package/rxjs.md) ^6.5.5
- [typescript](https://npm.io/package/typescript.md) ^4.0.3
- [@wssz/modeler](https://npm.io/package/@wssz/modeler.md) ^0.5.4
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13
- [@wssz/modeler-parser](https://npm.io/package/@wssz/modeler-parser.md) ^0.5.4
- [@wssz/modeler-jsonschema](https://npm.io/package/@wssz/modeler-jsonschema.md) ^0.5.7

## Recent versions

- 0.6.5 (latest) — 2020-10-10
- 0.6.4 — 2020-05-31
- 0.6.3 — 2020-04-27
- 0.6.2 — 2020-03-31
- 0.6.1 — 2020-03-08
- 0.6.0 — 2020-03-08
- 0.5.2 — 2020-03-07
- 0.5.1 — 2020-03-06
- 0.3.6 — 2020-02-02
- 0.3.4 — 2019-11-27
- 0.3.3 — 2019-11-27
- 0.3.2 — 2019-11-27
- 0.3.1 — 2019-11-15
- 0.2.6 — 2019-10-06
- 0.2.5 — 2019-09-21
- … 1 more at https://npm.io/package/@wssz/modeler-nestjs/versions

## README

# @wssz/modeler-nestjs
Plugin for [@wssz/modeler](https://github.com/wszerad/wssz-modeler) and [NestJS](https://github.com/nestjs/nest), introduce support for @nestjs/swagger and ModelerPipe with validation and object casting.

## Usage
```typescript

class AnyDto {
    @Prop() id: string;

    @Prop() date: Date;

    @Nullable()
    @Prop() otherDto: OtherDto;
}

```

* ModelerPipe(`errorHandler`: (errors: ModelerPipeError) => any, `customTransforms`, `modelerParserOptions`, `ajvOptions`)
    * custom handler with `ModelerPipeError` and optional  or throw BadRequestException if not specified                                                                                                                                                                                                                                                          >.
    * customTransforms - `[any, TypeTransform][]`
    * modelerParserOptions = `null` - to disable parser
    * [ajvOptions](https://github.com/epoberezkin/ajv#options) = `null` - to disable ajv based validation 

```typescript
@Post()
@UsePipes(new ModelerPipe())
async create(@Body() anyDto: AnyDto) { ... }
```
## Extend Swagger models
```typescript
// inside nestjs bootstrap
const document = ModelerNestjs.extend(SwaggerModule.createDocument(app, options));
SwaggerModule.setup('docs', app, document);
```

## Definitions

* ModelerPipeError - default validation error input
```typescript
interface ModelerPipeError {
	metatype: string;
	message: string;
	ajvErrors?: ajv.ErrorObject[];
}
```
see more about [Ajv.ValidateError](https://github.com/epoberezkin/ajv#validation-errors)

* TypeTransform - custom type transformer definition (for `String`, `Number`, `Boolean`, `Date` already defined)
```typescript
export interface TypeTransform {
	validator: (value: any) => string | false;
	parser: (value: any) => any;
}

// EXAMPLE
const customTransforms = [
    [String, {
        validator() {
            return !!v ? false : 'Validation error message';
        },
        parser(v) {
            return String(v);
        }
    }],
    // ...
];
new ModelerPipe(null, customTransforms);
```

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