@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
JavaScript
;
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
];