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.

27 lines (26 loc) • 1.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toTimetableOpeningHours = void 0; const utilities_1 = require("../utilities"); const to_timetable_osm_opening_hours_1 = require("./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] ]; const toTimetableOpeningHours = (date) => (horairesOSM) => (0, to_timetable_osm_opening_hours_1.toTimetableOsmOpeningHours)(date)(horairesOSM).reduce((schedule, { day, osmHours }) => ({ ...schedule, [day]: createTimeSlot(orderedTimeRange(timeRangesFrom(osmHours))) }), utilities_1.CLOSED_SCHEDULE); exports.toTimetableOpeningHours = toTimetableOpeningHours;