@gouvfr-anct/mednum
Version:
✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique
35 lines (34 loc) • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processDate = void 0;
const STANDARD_DATE_REG_EXP = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
const STANDARD_DATE_TIME_REG_EXP = /^(?<year>\d{4})[-/](?<month>\d{2})[-/](?<day>\d{2}) (?<time>\d{2}:\d{2}:\d{2})$/u;
const STANDARD_DATE_TIME_WITH_TIMEZONE_REG_EXP = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) (?<time>\d{2}:\d{2}:\d{2})\+(?<timezone>\d{2}:\d{2})$/u;
const FRENCH_DATE_REG_EXP = /^(?<day>\d{2})\/(?<month>\d{1,2})\/(?<year>\d{4})$/u;
const FRENCH_DATE_TIME_REG_EXP = /^(?<day>\d{2})\/(?<month>\d{2})\/(?<year>\d{4}) (?<time>\d{2}:\d{2}(?::\d{2})?)$/u;
const TIMESTAMP_REG_EXP = /^(?<timestamp>\d{10})/u;
const DATE_REGEXP = [
STANDARD_DATE_REG_EXP,
STANDARD_DATE_TIME_REG_EXP,
STANDARD_DATE_TIME_WITH_TIMEZONE_REG_EXP,
FRENCH_DATE_TIME_REG_EXP,
FRENCH_DATE_REG_EXP,
TIMESTAMP_REG_EXP
];
const DEFAULT_TIME = { time: '12:00:00' };
const addMissing0 = (month) => (month?.length === 1 ? '0' : '');
const toDate = (date) => date?.timestamp == null
? new Date(`${date?.year}-${addMissing0(date?.month)}${date?.month}-${date?.day}T${date?.time}+${date?.timezone ?? '00:00'}`)
: new Date(+date.timestamp * 1000);
const dateRegexpResultFrom = (dateRegexp, sourceDate) => ({
...DEFAULT_TIME,
...dateRegexp.exec(sourceDate)?.groups
});
const formatDate = (dateRegexp, sourceDate, date) => dateRegexp.test(sourceDate) ? toDate(dateRegexpResultFrom(dateRegexp, sourceDate)) : date;
const toFormattedDate = (sourceDate) => (date, dateRegexp) => formatDate(dateRegexp, sourceDate, date);
const removeInvalidChars = (sourceDate = '') => sourceDate.replace(/[A-Za-zÀ-ÖØ-öø-ÿœ]/gu, ' ').trim();
const dateFromSource = (source, matching) => matching.date_maj.colonne == null
? (matching.date_maj.valeur ?? '')
: (source[matching.date_maj.colonne]?.toString().replace(/\.\d+/u, '') ?? '');
const processDate = (source, matching) => DATE_REGEXP.reduce(toFormattedDate(removeInvalidChars(dateFromSource(source, matching))), new Date(0));
exports.processDate = processDate;