nope-validator
Version:
Fast and simple JS validator
75 lines (72 loc) • 2.31 kB
JavaScript
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