UNPKG

nope-validator

Version:
75 lines (72 loc) 2.31 kB
import { NopePrimitive } from './NopePrimitive.js'; import { NopeReference } from './NopeReference.js'; class NopeDate extends NopePrimitive { constructor(message = 'The field is not a valid date') { super(); this._type = 'object'; this.message = message; } before(beforeDate, message = `Date must be before ${beforeDate.toString()}`) { const rule = (entry, context) => { if (this.isEmpty(entry)) { return; } const resolvedBeforeDate = beforeDate instanceof NopeReference && context ? context[beforeDate.key] : beforeDate; if (new Date(entry) >= new Date(resolvedBeforeDate)) { return message; } }; return this.test(rule); } after(afterDate, message = `Date must be after ${afterDate}`) { const rule = (entry, context) => { if (this.isEmpty(entry)) { return; } const resolvedAfterDate = afterDate instanceof NopeReference && context ? context[afterDate.key] : afterDate; if (new Date(entry) <= new Date(resolvedAfterDate)) { return message; } }; return this.test(rule); } parseDate(entry) { let value = entry; if (this.isEmpty(entry) || entry instanceof Date) { value = entry; } else if (!isNaN(+new Date(entry))) { value = new Date(entry); } else { const ms = new Date(entry); if (isNaN(+ms)) { throw this.message; } value = new Date(ms); } return value; } validate(entry, context) { let value; try { value = this.parseDate(entry); } catch (error) { return error; } return super.validate(value, context); } validateAsync(entry, context) { let value; try { value = this.parseDate(entry); } catch (error) { return Promise.resolve(error); } return super.validateAsync(value, context); } } export { NopeDate }; //# sourceMappingURL=NopeDate.js.map