0.2.0-Dev.5 • Published 11 months ago
@kilbergr/dto-builder v0.2.0-Dev.5
DTO Builder
Build a DTo object from an interface.
Installation
NPM
npm install @kilbergr/dto-builder
Yarn
yarn add @kilbergr/dto-builder
Usage
import { DtoBuilder } from '@kilbergr/dto-builder';
Examples
Build a simple DTO
import { isRight } from 'fp-ts/Either';
import { DtoBuilder } from '@kilbergr/dto-builder';
interface User {
id: number;
name: string;
email: string;
tags: string[];
}
const builder = DtoBuilder.create<User>();
const user = builder
.setId(1)
.setName('John Doe')
.setEmail('john.doe@example.com')
.addTags('tag1', 'tag2')
.build();
if (isRight(user)) {
console.log(user.right);
} else {
console.log('Building user failed', user.left);
}
Patching a DTO
Override a fragment of the DTO.
import { DtoBuilder } from '@kilbergr/dto-builder';
interface User {
id: number;
name: string;
email: string;
}
const builder = DtoBuilder.create<User>();
const userBuilder = builder
.setId(1)
.setName('John Doe')
.setEmail('john.doe@example.com');
userBuilder.patch({
name: 'Jane Doe',
email: 'jane.doe@example.com',
});
Cloning a DTO builder
Share a common data between multiple DTOs.
import { DtoBuilder.create } from '@kilbergr/dto-builder';
interface User {
id: number;
name: string;
email: string;
organization: string;
}
const userBuilder = DtoBuilder.create<User>().setOrganization('Test Inc.');
const userOne = userBuilder
.clone()
.setId(1)
.setName('John Doe')
.setEmail('john.doe@example.com')
.build();
const userTwo = userBuilder
.clone()
.setId(2)
.setName('Jane Doe')
.setEmail('jane.doe@example.com')
.build();
Counting arrays
import { DtoBuilder.create } from '@kilbergr/dto-builder';
interface WithTags {
tags: string[];
}
const builder = DtoBuilder.create<WithTags>().addTags('tag1', 'tag2', 'tag3');
const tagsCount = builder.countTags();
Validating DTO
The DTO builder can validate the DTO before building it. It requires some validation function for that. It is possible to use for example some json schema with ajv.
import { Ajv } from 'ajv';
import { DtoBuilder.create } from '@kilbergr/dto-builder';
const ajv = new Ajv();
interface UserDto {
id: number;
name: string;
email: string;
}
const userSchema: JsonSchemaType<UserDto> = { ... };
const userDtoValidator = ajv.compile(userSchema);
function validateUserDto(dto: UserDto): boolean {
if (!userDtoValidator(dto)) {
const errors = userDtoValidator.errors;
const error = ... // aggregate errors into one`
return error;
};
return true;
}
const userBuilder = DtoBuilder.create<UserDto, UserBuilderError>({}, {
validate: validateUserDto
});
const user = userBuilder.setId(1).build();
if (isRight(user)) {
console.log(user.right);
} else {
console.log('Building user failed', user.left);
}
0.2.0-Dev.5
11 months ago
0.2.0-Dev.4
11 months ago
0.2.0-Dev.1
11 months ago
0.2.0-Dev.3
11 months ago
0.2.0-Dev.2
11 months ago
0.1.0-Dev.8
11 months ago
0.1.0-Dev.7
11 months ago
0.1.0-Dev.6
11 months ago
0.1.0-Dev.5
11 months ago
0.1.0-Dev.4
11 months ago
0.1.0-Dev.3
11 months ago
0.1.0-Dev.2
11 months ago
0.1.0-Dev.1
11 months ago