2019-12-04 17:49:13 +01:00

57 lines
1.2 KiB
JavaScript

'use strict';
const { parseType } = require('strapi-utils');
const { parse, isValid, parseISO } = require('date-fns');
const createParser = () => (type, value) => {
if (value === null) return null;
switch (type) {
case 'json':
return JSON.stringify(value);
case 'time':
return parseType({ type: 'time', value });
case 'date':
return parseDate(value);
case 'timestamp':
case 'datetime':
return parseDateTimeOrTimestamp(value);
default:
return value;
}
};
const parseDateOrThrow = format => value => {
try {
let date = parseISO(value);
if (isValid(date)) return date;
date = parse(value, format, new Date());
if (isValid(date)) {
return date;
} else {
throw new Error(`Invalid format, expected a ${format}`);
}
} catch (error) {
throw new Error(`Invalid format, expected a ${format}`);
}
};
const parseDateTimeOrTimestamp = value => {
const date = parseISO(value);
if (isValid(date)) return date;
date.setTime(value);
if (!isValid(date)) {
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
}
return date;
};
const parseDate = parseDateOrThrow('yyyy-MM-dd');
module.exports = { createParser };