UNPKG

@naturalcycles/nodejs-lib

Version:
65 lines 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const time_lib_1 = require("@naturalcycles/time-lib"); function dateStringExtension(joi) { return { base: joi.string(), name: 'string', language: { dateString: 'needs to be a date string (yyyy-mm-dd)', dateStringMin: 'needs to be not earlier than {{min}}', dateStringMax: 'needs to be not later than {{max}}', dateStringCalendarAccuracy: 'needs to be a calendar accurate date', }, rules: [ { name: 'dateString', params: { min: joi.string().optional(), max: joi.string().optional(), }, validate(params, v, state, options) { let err; let min = params.min; let max = params.max; // Today allows +-14 hours gap to account for different timezones if (max === 'today') { max = time_lib_1.dayjs() .add(14, 'hour') .toISODate(); } if (min === 'today') { min = time_lib_1.dayjs() .subtract(14, 'hour') .toISODate(); } // console.log('min/max', min, max) const m = v.match(/^(\d{4})-(\d{2})-(\d{2})$/); if (!m || m.length <= 1) { err = 'string.dateString'; } else if (min && v < min) { err = 'string.dateStringMin'; } else if (max && v > max) { err = 'string.dateStringMax'; } else if (!time_lib_1.dayjs(v).isValid()) { err = 'string.dateStringCalendarAccuracy'; } if (err) { // tslint:disable-next-line:no-invalid-this return this.createError(err, { v, min, max, }, state, options); } return v; // validation passed }, }, ], }; } exports.dateStringExtension = dateStringExtension; //# sourceMappingURL=dateString.extension.js.map