UNPKG

@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
"use strict"; 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;