UNPKG

@gouvfr-anct/mednum

Version:

✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique

95 lines (94 loc) 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OPENING_HOURS_EXTRACTION = void 0; const to_osm_hours_1 = require("../../to-osm-hours/to-osm-hours"); const DAYS_OF_WEEK = [ { frDay: 'lundi', enDay: 'Mo' }, { frDay: 'mardi', enDay: 'Tu' }, { frDay: 'mercredi', enDay: 'We' }, { frDay: 'jeudi', enDay: 'Th' }, { frDay: 'vendredi', enDay: 'Fr' }, { frDay: 'samedi', enDay: 'Sa' }, { frDay: 'dimanche', enDay: 'Su' } ]; const onlyDaysInRange = (start, end) => (_, index) => index >= start && index <= end; const toOsmOpeningHours = (openingHours) => (dayOfWeek) => ({ day: dayOfWeek.enDay, osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) }); const dayOfWeekIndex = (startDayRange) => DAYS_OF_WEEK.findIndex((dayOfWeek) => dayOfWeek.frDay === startDayRange); const EXTRACT_FOR_SINGLE_DAYS_RANGE = { selector: /(?<startDayRange>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\s*(?:au)?à?-?\s*(?<endDayRange>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\D+(?<openingHours>[^/]*)/u, extract: (osmOpeningHours, _, startDayRange, endDayRange, openingHours) => [ ...osmOpeningHours, ...DAYS_OF_WEEK.filter(onlyDaysInRange(dayOfWeekIndex(startDayRange), dayOfWeekIndex(endDayRange))).map(toOsmOpeningHours(openingHours)) ] }; const EXTRACT_FOR_MULTIPLE_DAYS_RANGE = { selector: /(?<startDayRange1>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\sau\s(?<endDayRange1>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\D+(?<openingHours1>[^/]*).*(?<startDayRange2>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\sau\s(?<endDayRange2>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\D+(?<openingHours2>.*)/u, extract: (osmOpeningHours, _, startDayRange1, endDayRange1, openingHours1, startDayRange2, endDayRange2, openingHours2) => [ ...osmOpeningHours, ...DAYS_OF_WEEK.filter(onlyDaysInRange(dayOfWeekIndex(startDayRange1), dayOfWeekIndex(endDayRange1))).map(toOsmOpeningHours(openingHours1)), ...DAYS_OF_WEEK.filter(onlyDaysInRange(dayOfWeekIndex(startDayRange2), dayOfWeekIndex(endDayRange2))).map(toOsmOpeningHours(openingHours2)) ] }; const EXTRACT_FOR_LUNDI = { selector: /lundi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Mo', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_MARDI = { selector: /mardi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Tu', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_MERCREDI = { selector: /mercredi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'We', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_JEUDI = { selector: /jeudi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Th', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_VENDREDI = { selector: /vendredi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Fr', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_SAMEDI = { selector: /samedi\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Sa', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; const EXTRACT_FOR_DIMANCHE = { selector: /dimanche\D*(?<openingHours>[^/]+|.*$)/u, extract: (osmOpeningHours, _, openingHours) => [ ...osmOpeningHours, { day: 'Su', osmHours: (0, to_osm_hours_1.toOsmHours)(openingHours) } ] }; exports.OPENING_HOURS_EXTRACTION = [ EXTRACT_FOR_SINGLE_DAYS_RANGE, EXTRACT_FOR_MULTIPLE_DAYS_RANGE, EXTRACT_FOR_LUNDI, EXTRACT_FOR_MARDI, EXTRACT_FOR_MERCREDI, EXTRACT_FOR_JEUDI, EXTRACT_FOR_VENDREDI, EXTRACT_FOR_SAMEDI, EXTRACT_FOR_DIMANCHE ];