Fillable DTO with validation
npm install @corefunc/class-fillable-dtoClass Fillable DTO with validation functionality. 🟩 NodeJS only.
``typescript`
class MyCoolDto extends FillableDto {
public shouldDisplayMessage: boolean;
}
`typescript
const INCLUDE_KEYS: ReadonlyArray
'shouldDisplayMessage',
] as const;
class MyCoolDto extends FillableDto implements IMyCoolDto {
public readonly shouldDisplayMessage: boolean;
public constructor(attributes: Partial
super(attributes, INCLUDE_KEYS);
}
}
const myCoolDto = new MyCoolDto({
shouldDisplayMessage: false,
thisPropertyWillBeStripped: true,
});
`
`typescript
const DEFAULT_VALUES: Readonly
shouldDisplayMessage: false,
} as const;
class MyCoolDto extends FillableDto implements IMyCoolDto {
public readonly shouldDisplayMessage: boolean;
public constructor(attributes: Partial
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.
`typescript
const DEFAULT_VALUES: Readonly
shouldDisplayMessage: false,
} as const;
class MyCoolDto extends FillableDto implements IMyCoolDto {
public readonly isActive: boolean = false; // 🛑✋⚠️ No!!!
public readonly shouldDisplayMessage: boolean;
public constructor(attributes: Partial
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
`typescript
interface IMyCoolDto {
shouldDisplayMessage: boolean;
}
const INCLUDE_KEYS: ReadonlyArray
'shouldDisplayMessage',
] as const;
const DEFAULT_VALUES: Readonly
shouldDisplayMessage: false,
} as const;
class MyCoolDto extends FillableDto implements IMyCoolDto {
public readonly shouldDisplayMessage: boolean;
public constructor(attributes: Partial
super(attributes, INCLUDE_KEYS, DEFAULT_VALUES);
}
}
`
#### Declaration
`typescript
import { IsBoolean } from 'class-validator';
class MyCoolDto extends FillableDto implements IMyCoolDto {
@IsBoolean()
public readonly shouldDisplayMessage: boolean;
public constructor(attributes: Partial
super(attributes, INCLUDE_KEYS, DEFAULT_VALUES);
}
}
`
#### Initialization
`typescript
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
`typescript{"shouldDisplayMessage":true}
const myCoolDtoFromJSON = MyCoolDto
.fromJSON();
const myCoolDtoFromObject = MyCoolDto
.fromPlain({ shouldDisplayMessage: true });
`
#### Validation
`typescript`
const isValid = myCoolDto.isValid(true); // silent
myCoolDto.isValid(false); // throws error
const error: null | string = myCoolDto.getError();
const errors: string[] = myCoolDto.getErrors();
#### Serialization
`typescript`
myCoolDto.toJSON(); // creates plain object clone
myCoolDto.toObject(); // creates plain object clone
myCoolDto.toString(); // object packed in JSON string
#### Immutability
`typescript`
myCoolDto.lock(); // prevents further modifications
#### validateInstance
`typescript
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);
``
[npm-version-url]: https://npmjs.com/package/@nestjsi/class-validator
[npm-version-img]: https://badgen.net/npm/v/@nestjsi/class-validator?&icon=npm&label=npm&color=DD3636
[npm-downloads-url]: https://npmjs.com/package/@nestjsi/class-validator
[npm-downloads-img]: https://badgen.net/npm/dt/@nestjsi/class-validator?&icon=terminal&label=downloads&color=009688
[ts-url]: https://github.com/nestjsi/class-validator/blob/main/dist/index.d.ts
[ts-img]: https://badgen.net/npm/types/@nestjsi/class-validator?&icon=typescript&label=types&color=1E90FF