UNPKG

@gouvfr-anct/mednum

Version:

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

204 lines (203 loc) 9.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLEAN_OPERATIONS = void 0; const addMissingTimeSeparator = (minutes) => (minutes.startsWith(':') ? minutes : `:${minutes}`); const setMinutesIfDefined = (minutes) => (minutes == null ? ':00' : addMissingTimeSeparator(minutes)); const addMissing0 = (hours) => (hours.length === 1 ? `0${hours}` : hours); const formatTime = (hours, minutes) => `${addMissing0(hours)}${setMinutesIfDefined(minutes)}`; const UNIFORMIZE_HYPHEN_SEPARATOR = { selector: /–/g, fix: () => '-' }; const REMOVE_MULTIPLE_SPACES = { selector: /\s\s+/g, fix: () => ' ' }; const ADD_MISSING_TIME_RANGE_SEPARATOR = { selector: /(?<startHour>[0-2]?\d)[hH](?<endHour>[0-2]?\d)[hH]/g, fix: (_, startHour, endHour) => `${startHour}h-${endHour}h` }; const REMOVE_FORMAT_SPACE_TIME_SEPARATOR = { selector: /^(?<startRangeStartHour>[0-2]?\d)h(?<startRangeStarMinute>[0-5]\d)?\s(?<startRangeEndHour>[0-2]?\d)h(?<startRangeEndMinute>[0-5]\d)?\D+(?<endRangeStartHour>[0-2]?\d)h(?<endRangeStartMinute>[0-5]\d)?\s(?<endRangeEndHour>[0-2]?\d)h(?<endRangeEndMinute>[0-5]\d)?$/u, fix: (_, startRangeStartHour, startRangeStarMinute, startRangeEndHour, startRangeEndMinute, endRangeStartHour, endRangeStarMinute, endRangeEndHour, endRangeEndMinute) => `${startRangeStartHour}:${startRangeStarMinute}-${startRangeEndHour}:${startRangeEndMinute},${endRangeStartHour}:${endRangeStarMinute}-${endRangeEndHour}:${endRangeEndMinute}` }; const REMOVE_H_FOR_HOURS_ONLY_RANGE = { selector: /(?<startHour>[0-2]?\d)[hH]\s?(?<endHour>[0-2]?\d)[hH](?<nextCharacter>\D)/g, fix: (_, startHour, endHour, nextCharacter) => `${startHour}:00 ${endHour}:00${nextCharacter}` }; const REMOVE_H_FOR_HOURS_ONLY_RANGE_SINGLE_H = { selector: /(?<startHour>[0-2]\d)\s(?<endHour>[0-2]?\d)\s*[hH](?<after>\D|$)/g, fix: (_, startHour, endHour, after) => `${startHour}:00 ${endHour}:00${after}` }; const REMOVE_H_FOLLOWED_BY_HOURS = { selector: /[hH]\s?(?<hour>[0-2]?\d)[hH]\s?(?<minute>[0-5]\d)?/g, fix: (_, hour, minute) => `-${formatTime(hour, minute)}` }; const REMOVE_H_FOLLOWED_BY_MINUTES = { selector: /[hH]\s?(?<hourLastNumber>\d)/g, fix: (_, hourLastNumber) => `:${hourLastNumber}` }; const REMOVE_H_FOLLOWED_BY_A_SPACE = { selector: /[hH]\s/g, fix: () => ' ' }; const REMOVE_H_FOLLOWED_BY_A_SEPARATOR = { selector: /[hH](?<separator>[-/à])/g, fix: (_, separator) => separator }; const REMOVE_WHITE_SPACES = { selector: /\s/g, fix: () => '' }; const FORMAT_ET_SEPARATORS = { selector: /^(?<startTimeStartRange>.*)[à/,-](?<startTimeEndRange>.*)\s?(?:et|&amp;)\s?(?<endTimeStartRange>.*)[à/,-](?<endTimeEndRange>.*)$/u, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const FORMAT_LITERARY_TIME_SEPARATORS = { selector: /^(?<startTimeStartRange>.*)à(?<startTimeEndRange>.*)[-_/,](?<endTimeStartRange>.*)à(?<endTimeEndRange>.*)$/u, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const FORMAT_LITERARY_TIME_SEPARATORS_NO_RANGE_SEPARATOR = { selector: /^(?<startTimeStartRange>.*)à(?<startTimeEndRange>.*\d)\s(?<endTimeStartRange>\d.*)à(?<endTimeEndRange>.*)$/u, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const REPLACE_LITERARY_TIME_SEPARATORS = { selector: /(?<previous>\d.*?\d?)\s*[àèa]\s*(?<next>\d.*\d)/g, fix: (_, previous, next) => `${previous}-${next}` }; const REMOVE_SEPARATOR_IN_TEXT = { selector: /[a-zA-ZÀ-ú*.'_]+-[a-zA-ZÀ-ú*.'_]+/g, fix: () => '' }; const REMOVE_ADDITIONAL_INFORMATION_TEXT_IN_PARENTHESIS = { selector: /\(.*\)/u, fix: () => '' }; const REMOVE_NUMBERS_IN_ADDITIONAL_INFORMATION_TEXT = { selector: /1er|\d?\d\sjours|[0-3]\d\/[01][1-9]\/\d\d\d\d|\d\s*[a-z]+\s*(?:\/|sur)\s*\d/g, fix: () => '' }; const REMOVE_ADDITIONAL_INFORMATION_TEXT = { selector: /[a-zA-ZÀ-úû*.'_(|>]+/g, fix: () => '' }; const REMOVE_ORPHAN_DIGITS = { selector: /^\s*\d+\s*(?<ranges>[0-2]\d-[0-5]\d)/u, fix: (_, ranges) => `${ranges}` }; const FORMAT_MISSING_MINUTES_DIGIT = { selector: /(?<hour>\d):(?<minuteToFix>\d)(?<followingCharacter>\D|$)/u, fix: (_, hour, minuteToFix, followingCharacter) => `${hour}:${minuteToFix}0${followingCharacter}` }; const TRIM = { selector: /(?<textToTrim>.*)/u, fix: (textToTrim) => textToTrim.trim() }; const FORMAT_MISSING_MINUTE_SEPARATOR = { selector: /(?<hour>[0-2]\d)(?<minute>[0-5]\d)/g, fix: (_, hour, minute) => `${hour}:${minute}` }; const FORMAT_MISSING_TIME_SEPARATOR = { selector: /^(?<startHour>[0-2]?\d)(?<startMinute>:[0-5]\d)(?<endtHour>[0-2]?\d)$/u, fix: (_, startHour, startMinute, endHour) => `${startHour}:${startMinute}-${endHour}` }; const FORMAT_SPACE_RANGES_SEPARATORS = { selector: /^(?<startTimeStartRange>\d?.*\d)\s?[-/\s]\s?(?<startTimeEndRange>.+\d)\s+(?<endTimeStartRange>\d.+\d)\s?[-/\s]\s?(?<endTimeEndRange>.+\d)$/, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const FORMAT_SPACE_TIMES_SEPARATORS = { selector: /^(?<startTimeStartRange>\d\d:\d\d)\s(?<startTimeEndRange>\d\d:\d\d)\s-\s(?<endTimeStartRange>\d\d:\d\d)\s(?<endTimeEndRange>\d\d:\d\d)$/, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const FORMAT_SPACE_TIME_SEPARATOR = { selector: /^(?<startTime>\d.+\d)\s(?<endTime>\d.*\d)$/u, fix: (_, startTime, endTime) => `${startTime}-${endTime}` }; const FORMAT_HYPHEN_RANGES_SEPARATORS = { selector: /^(?<startTimeStartRange>.*)[/-](?<startTimeEndRange>.*)-(?<endTimeStartRange>.*)[/-](?<endTimeEndRange>.*)$/u, fix: (_, startTimeStartRange, startTimeEndRange, endTimeStartRange, endTimeEndRange) => `${startTimeStartRange}-${startTimeEndRange},${endTimeStartRange}-${endTimeEndRange}` }; const REMOVE_MULTIPLE_SAME_SEPARATOR = { selector: /(?<separator>[-/,:])+/g, fix: (_, separator) => `${separator}` }; const REMOVE_HEADING_SEPARATOR = { selector: /^[/,;:-]/u, fix: () => '' }; const REMOVE_TRAILING_SEPARATOR = { selector: /[/,;:-]$/u, fix: () => '' }; const REMOVE_TIME_SEPARATOR_AFTER_RANGE_SEPARATOR = { selector: /,:/g, fix: () => ',' }; const REMOVE_USELESS_TIME_SEPARATOR = { selector: /:(?<nonDigitChar>\D)/g, fix: (_, nonDigitChar) => `${nonDigitChar}` }; const FORMAT_SINGLE_RANGE = { selector: /^(?<startHour>[0-2]?\d)(?<startMinute>:[0-5]\d)?[-/à,](?<endHour>[0-2]?\d)(?<endMinute>:[0-5]\d)?$/u, fix: (_, startHour, startMinute = undefined, endHour, endMinute = undefined) => `${formatTime(startHour, startMinute)}-${formatTime(endHour, endMinute)}` }; const FORMAT_TWO_TIMES_RANGES = { selector: /^(?<startHourStartRange>[0-2]?\d)(?<startMinuteStartRange>:[0-5]\d)?[-/à,]?(?<endHourStartRange>[0-2]?\d)(?<endMinuteStartRange>:[0-5]\d)?[|/;,](?<startHourEndRange>[0-2]?\d)(?<startMinuteEndRange>:[0-5]\d)?[-/à,]?(?<endHourEndRange>[0-2]?\d)(?<endMinuteEndRange>:[0-5]\d)?$/u, fix: (_, startHourStartRange, startMinuteStartRange = undefined, endHourStartRange, endMinuteStartRange = undefined, startHourEndRange, startMinuteEndRange = undefined, endHourEndRange, endMinuteEndRange) => `${formatTime(startHourStartRange, startMinuteStartRange)}-${formatTime(endHourStartRange, endMinuteStartRange)},${formatTime(startHourEndRange, startMinuteEndRange)}-${formatTime(endHourEndRange, endMinuteEndRange)}` }; const REMOVE_NO_TIME_RANGE = { selector: /^[0-2]?\d(?::[0-5]\d)?$/, fix: () => '' }; const REMOVE_TIME_EXTRA_DIGITS = { selector: /(?<digitsToKeep>\d\d)\d/g, fix: (_, digitsToKeep) => digitsToKeep }; const CLEAN_WHITESPACE_SEPARATORS = [ FORMAT_SPACE_TIMES_SEPARATORS, FORMAT_SPACE_RANGES_SEPARATORS, FORMAT_SPACE_TIME_SEPARATOR ]; const CLEAN_ALL_SEPARATORS = [ FORMAT_MISSING_MINUTE_SEPARATOR, FORMAT_MISSING_TIME_SEPARATOR, REMOVE_TIME_SEPARATOR_AFTER_RANGE_SEPARATOR, REMOVE_MULTIPLE_SAME_SEPARATOR, REMOVE_HEADING_SEPARATOR, REMOVE_TRAILING_SEPARATOR, REMOVE_USELESS_TIME_SEPARATOR, FORMAT_HYPHEN_RANGES_SEPARATORS ]; const FINAL_OSM_FORMATTING = [ FORMAT_SINGLE_RANGE, FORMAT_TWO_TIMES_RANGES, REMOVE_NO_TIME_RANGE, REMOVE_TIME_EXTRA_DIGITS ]; exports.CLEAN_OPERATIONS = [ UNIFORMIZE_HYPHEN_SEPARATOR, REMOVE_MULTIPLE_SPACES, ADD_MISSING_TIME_RANGE_SEPARATOR, REMOVE_FORMAT_SPACE_TIME_SEPARATOR, REMOVE_H_FOR_HOURS_ONLY_RANGE, REMOVE_H_FOR_HOURS_ONLY_RANGE_SINGLE_H, REMOVE_H_FOLLOWED_BY_HOURS, REMOVE_H_FOLLOWED_BY_MINUTES, REMOVE_H_FOLLOWED_BY_A_SPACE, REMOVE_H_FOLLOWED_BY_A_SEPARATOR, FORMAT_ET_SEPARATORS, FORMAT_LITERARY_TIME_SEPARATORS, FORMAT_LITERARY_TIME_SEPARATORS_NO_RANGE_SEPARATOR, REPLACE_LITERARY_TIME_SEPARATORS, REMOVE_SEPARATOR_IN_TEXT, REMOVE_ADDITIONAL_INFORMATION_TEXT_IN_PARENTHESIS, REMOVE_NUMBERS_IN_ADDITIONAL_INFORMATION_TEXT, REMOVE_ADDITIONAL_INFORMATION_TEXT, REMOVE_ORPHAN_DIGITS, FORMAT_MISSING_MINUTES_DIGIT, TRIM, ...CLEAN_WHITESPACE_SEPARATORS, REMOVE_WHITE_SPACES, ...CLEAN_ALL_SEPARATORS, ...FINAL_OSM_FORMATTING ];