@sprucelabs/schema
Version:
Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓
55 lines (54 loc) • 1.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateDateValue = validateDateValue;
const getStartOfDay_1 = __importDefault(require("../utilities/getStartOfDay"));
const isUndefinedOrNull_1 = __importDefault(require("../utilities/isUndefinedOrNull"));
const AbstractField_1 = __importDefault(require("./AbstractField"));
class DateField extends AbstractField_1.default {
static generateTemplateDetails(options) {
return {
valueType: `${options.importAs}.DateFieldValue${options.definition.isArray ? '[]' : ''}`,
};
}
validate(value, options) {
const errors = super.validate(value, options);
if (errors.length > 0) {
return errors;
}
return validateDateValue({
value,
isRequired: this.isRequired,
name: this.name,
});
}
toValueType(value) {
return value ? (0, getStartOfDay_1.default)(+value) : value;
}
}
DateField.description = 'Date and time support.';
exports.default = DateField;
function validateDateValue(options) {
const { value, isRequired, name } = options;
if ((0, isUndefinedOrNull_1.default)(value) && !isRequired) {
return [];
}
if (typeof value === 'number' || value instanceof Date) {
return [];
}
else if (typeof value === 'string') {
const date = new Date(value);
if (date.toString() !== 'Invalid Date') {
return [];
}
}
return [
{
name,
code: 'INVALID_PARAMETER',
friendlyMessage: `This doesn't look like a date to me!`,
},
];
}