mirror of
https://github.com/strapi/strapi.git
synced 2025-08-02 22:07:11 +00:00
57 lines
1.2 KiB
JavaScript
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 };
|