UNPKG

core-value-objects

Version:

Biblioteca de Value Objects reutilizáveis para domínios de negócio

38 lines (33 loc) 1.31 kB
import { IValueObjects } from './../interface/vo.interface'; import { format } from 'date-fns'; export class Data implements IValueObjects<Date> { private readonly value: Date; constructor(data: string | Date) { let parsedDate: Date; if (typeof data === 'string') { if (/^\d{4}-\d{2}-\d{2}$/.test(data)) { const [year, month, day] = data.split('-').map(Number); parsedDate = new Date(Date.UTC(year, month - 1, day)); if (parsedDate.getUTCFullYear() !== year || parsedDate.getUTCMonth() !== month - 1 || parsedDate.getUTCDate() !== day) { throw new Error('Data inválida.'); } } else { parsedDate = new Date(data); } } else { parsedDate = new Date(data); } if (isNaN(parsedDate.getTime())) { throw new Error('Data inválida.'); } this.value = parsedDate; } getValue = (): Date => this.value; getValueFormatted = (): string => { const day = String(this.value.getUTCDate()).padStart(2, '0'); const month = String(this.value.getUTCMonth() + 1).padStart(2, '0'); const year = this.value.getUTCFullYear(); return `${day}/${month}/${year}`; }; equals = (value: IValueObjects): boolean => value instanceof Data && this.value.toISOString() === value.getValue().toISOString(); }