function arrayWrap(value) { return Array.isArray(value) ? value : [value]; } export default class Errors { constructor() { this.errors = {}; } set(field, messages = undefined) { if (typeof field === 'object') { this.errors = field; } else { this.set({ ...this.errors, [field]: arrayWrap(messages) }); } } all() { return this.errors; } has(field) { return Object.prototype.hasOwnProperty.call(this.errors, field); } hasAny(...fields) { return fields.some(field => this.has(field)); } any() { return Object.keys(this.errors).length > 0; } get(field) { if (this.has(field)) { return this.getAll(field)[0]; } } getAll(field) { return arrayWrap(this.errors[field] || []); } only(...fields) { const messages = []; fields.forEach((field) => { const message = this.get(field); if (message) { messages.push(message); } }); return messages; } flatten() { return Object.values(this.errors).reduce((a, b) => a.concat(b), []); } clear(field = undefined) { const errors = {}; if (field) { Object.keys(this.errors).forEach((key) => { if (key !== field) { errors[key] = this.errors[key]; } }); } this.set(errors); } }