Skip to content

Class Fillable DTO with validation functionality.

License

corefunc/class-fillable-dto

Repository files navigation

Class Fillable DTO

Class Fillable DTO with validation functionality. 🟩 NodeJS only.

Example

Minimal implementation

class MyCoolDto extends FillableDto { public shouldDisplayMessage: boolean; }

Strips unnecessary properties

const INCLUDE_KEYS: ReadonlyArray<keyof IMyCoolDto> = [ 'shouldDisplayMessage', ] as const; class MyCoolDto extends FillableDto implements IMyCoolDto { public readonly shouldDisplayMessage: boolean; public constructor(attributes: Partial<IMyCoolDto>) { super(attributes, INCLUDE_KEYS); } } const myCoolDto = new MyCoolDto({ shouldDisplayMessage: false, thisPropertyWillBeStripped: true, });

Default values

const DEFAULT_VALUES: Readonly<IMyCoolDto> = { shouldDisplayMessage: false, } as const; class MyCoolDto extends FillableDto implements IMyCoolDto { public readonly shouldDisplayMessage: boolean; public constructor(attributes: Partial<IMyCoolDto>) { super(attributes, undefined, DEFAULT_VALUES); } }

DO NOT SET DEFAULT VALUES IN CLASS PROPERTIES!!!

Attributes argument passed to the constructor will be overwritten with a class property default value.

const DEFAULT_VALUES: Readonly<IMyCoolDto> = { shouldDisplayMessage: false, } as const; class MyCoolDto extends FillableDto implements IMyCoolDto { public readonly isActive: boolean = false; // πŸ›‘βœ‹βš οΈ No!!! public readonly shouldDisplayMessage: boolean; public constructor(attributes: Partial<IMyCoolDto>) { super(attributes, undefined, DEFAULT_VALUES); } } const myCoolDto = new MyCoolDto({ isActive: true, shouldDisplayMessage: false, }); // `false` as in class property default declaration console.log(myCoolDto.isActive); // false

Fillable DTO Enterprise Edition

interface IMyCoolDto { shouldDisplayMessage: boolean; } const INCLUDE_KEYS: ReadonlyArray<keyof IMyCoolDto> = [ 'shouldDisplayMessage', ] as const; const DEFAULT_VALUES: Readonly<IMyCoolDto> = { shouldDisplayMessage: false, } as const; class MyCoolDto extends FillableDto implements IMyCoolDto { public readonly shouldDisplayMessage: boolean; public constructor(attributes: Partial<IMyCoolDto>) { super(attributes, INCLUDE_KEYS, DEFAULT_VALUES); } }

Methods

Declaration

import { IsBoolean } from 'class-validator'; class MyCoolDto extends FillableDto implements IMyCoolDto { @IsBoolean() public readonly shouldDisplayMessage: boolean; public constructor(attributes: Partial<IMyCoolDto>) { super(attributes, INCLUDE_KEYS, DEFAULT_VALUES); } }

Initialization

const attributes = { shouldDisplayMessage: true }; const includeKeys = ["isActive", "shouldDisplayMessage"]; const defaults = { isActive: true }; const myCoolDto = new MyCoolDto(attributes, includeKeys, defaults); // re-assing everithing myCoolDto.assign(attributes, includeKeys, defaults);

Factory Methods

const myCoolDtoFromJSON = MyCoolDto .fromJSON(`{"shouldDisplayMessage":true}`); const myCoolDtoFromObject = MyCoolDto .fromPlain({ shouldDisplayMessage: true });

Validation

const isValid = myCoolDto.isValid(true); // silent myCoolDto.isValid(false); // throws error const error: null | string = myCoolDto.getError(); const errors: string[] = myCoolDto.getErrors();

Serialization

myCoolDto.toJSON(); // creates plain object clone myCoolDto.toObject(); // creates plain object clone myCoolDto.toString(); // object packed in JSON string

Immutability

myCoolDto.lock(); // prevents further modifications

Utilities

validateInstance

import { validateInstance } from '@corefunc/class-fillable-dto'; // Empty array if there is no errors. validateInstance(new ClassName()); // ['Provided value is not an object. Value is [null].'] validateInstance(null);

See also

πŸ’Ύ My other projects

Open Source

About

Class Fillable DTO with validation functionality.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published