@anolilab/zod-dto
v2.0.0
Published
DTO’s (Data Transfer Object) based on zod.
Downloads
7
Readme
DTO’s (Data Transfer Object) based on zod
Installation
Use npm or yarn to install
npm install @anolilab/zod-dto --save
Or
yarn add @anolilab/zod-dto
Usage
Basic usage
import { StringDto } from "@anolilab/zod-dto"
const dto = new StringDto("test string"); // the constructor has a zod validator
console.log(dto.value) // returns "test string"
If you don’t want Zod to throw errors when validation fails, use the second parameter of the constructor
.
This method returns an object containing either the successfully parsed data or a ZodError instance containing detailed information about the validation problems.
import { StringDto } from "@anolilab/zod-dto"
const dto = new StringDto("1", true); // the constructor has a zod validator
console.log(dto.value) // return { success: false; error: ZodError }
You can transform the object to a json with
dto.toJson() // returns { value: "test string" }
You can get the zod object with
StringDto.zod() // returns ZodType
Example of using @anolilab/zod-dto in Entity dto
import { NumberDto, StringDto, AbstractDto, DatetimeDto } from "@anolilab/zod-dto";
export default abstract class AbstractEntity {
protected abstract properties: object;
readonly createdAt!: DatetimeDto;
readonly updatedAt!: DatetimeDto;
readonly deletedAt!: DatetimeDto;
public toJson(): string {
return JSON.stringify(this.prepareData());
}
public toObject<T extends { [key: string]: any }>(): T {
return this.prepareData();
}
private prepareData<T extends { [key: string]: any }>(): T {
const data: { [key: string]: any } = {};
Object.entries(this.properties).forEach(([key, value]) => {
let v = value;
if (value instanceof AbstractDto) {
v = value.value;
} else {
throw new TypeError(`Value of key ${key} needs to be a class that extends AbstractDto.`);
}
data[key] = v;
});
return data as any;
}
}
export default class SettingEntity extends AbstractEntity {
readonly id!: NumberDto;
readonly phone!: StringDto;
constructor(
public properties: {
id?: NumberDto;
phone?: StringDto;
},
) {
super();
Object.assign(this, properties);
Object.freeze(this);
}
}
const settingEntity = new SettingEntity({
id: NumberDto.nullable(1),
phone: StringDto.nullable("+4900000"),
})
Versioning
This project uses SemVer for versioning. For the versions available, see the tags on this repository.
Supported Node.js Versions
Libraries in this ecosystem make a best effort to track Node.js’ release schedule. Here’s a post on why we think this is important.
Contributing
If you would like to help take a look at the list of issues and check our Contributing guild.
Note: please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Credits
License
The anolilab zod-prisma is open-sourced software licensed under the MIT license