UNPKG

@gouvfr-anct/timetable-to-osm-opening-hours

Version:

📚 Bibliothèque pour la transformation d'une série de plages horaires représentant un format emploi du temps vers le standard OSM pour les horaires d'ouverture.

23 lines (22 loc) • 1.17 kB
import { CLOSED_SCHEDULE } from '../utilities'; import { toTimetableOsmOpeningHours } from './to-timetable-osm-opening-hours'; const isAfternoonTime = (time) => +(time?.split(':').at(0) ?? 0) > 12; const createTimeSlot = ([[amStart, amEnd], [pmStart, pmEnd]]) => ({ am: { startTime: amStart, endTime: amEnd, isOpen: ![amStart, amEnd].includes(null) }, pm: { startTime: pmStart, endTime: pmEnd, isOpen: ![pmStart, pmEnd].includes(null) } }); const toTimeRage = (osmTimeRange) => osmTimeRange == null ? [null, null] : osmTimeRange.split('-'); const timeRangesFrom = (osmHours) => [...osmHours.split(','), undefined].slice(0, 2).map(toTimeRage); const orderedTimeRange = ([[timeStart, timeEnd], [pmStart, pmEnd]]) => pmStart == null && isAfternoonTime(timeStart) ? [ [null, null], [timeStart, timeEnd] ] : [ [timeStart, timeEnd], [pmStart, pmEnd] ]; export const toTimetableOpeningHours = (date) => (horairesOSM) => toTimetableOsmOpeningHours(date)(horairesOSM).reduce((schedule, { day, osmHours }) => ({ ...schedule, [day]: createTimeSlot(orderedTimeRange(timeRangesFrom(osmHours))) }), CLOSED_SCHEDULE);