UNPKG

@lucaspaganini/value-objects

Version:

TypeScript first validation and class creation library

89 lines (74 loc) 2.25 kB
import { ObjectPath } from '../utils' const VO_ERROR_TAG = {} export class VOError extends Error { private _tag = VO_ERROR_TAG constructor(message?: string | undefined, public readonly path = new ObjectPath([])) { super(message) } static is(err: Error): err is VOError { return (<VOError>err)._tag === VO_ERROR_TAG } } export class MaxLengthError extends VOError { public readonly message = 'Too long' constructor(public readonly maxLength: number, public readonly length: number) { super() } } export class MaxSizeError extends VOError { public readonly message = 'Too big' constructor(public readonly max: number, public readonly valueSize: number) { super() } } export class MinLengthError extends VOError { public readonly message = 'Too short' constructor(public readonly minLength: number, public readonly length: number) { super() } } export class MinSizeError extends VOError { public readonly message = 'Too small' constructor(public readonly min: number, public readonly valueSize: number) { super() } } export class NotInSetError extends VOError { public readonly message = 'Value not found in set' constructor(public readonly set: Array<string>, public readonly value: string, public readonly prop?: string) { super() } } export class NotIntegerError extends VOError { public readonly message = 'Not an integer' constructor(public readonly value: number, public readonly prop?: string) { super() } } export class PatternError extends VOError { public readonly message = "Value doesn't match pattern" constructor() { super() } } export class RawTypeError extends TypeError { public readonly message = 'Wrong raw value type' constructor(public readonly expected: string, public readonly actual: string, public readonly prop?: string) { super() } static is(err: Error): err is RawTypeError { return err.message === 'Wrong raw value type' } } export class UnknownError extends VOError { public readonly message = 'Unknown error' constructor() { super() } } export class LogicError extends VOError { public readonly message = 'Invalid logic' constructor(public readonly expected: string) { super() } }