@anolilab/zod-dto v2.0.0
DTO’s (Data Transfer Object) based on zod
Installation
Use npm or yarn to install
npm install @anolilab/zod-dto --saveOr
yarn add @anolilab/zod-dtoUsage
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 ZodTypeExample 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