@corefunc/class-fillable-dto
v1.2.7
Published
Fillable DTO with validation
Downloads
122
Maintainers
Readme
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);