@gouvfr-anct/mednum
Version:
✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique
110 lines (109 loc) • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HORAIRES_FIELD_CLEAN_OPERATIONS = exports.REPLACE_SHORT_DAYS = void 0;
const REPLACE_SHORT_LUNDI = {
selector: /(?:^|\s)lu?(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` lundi ${afterDay}`
};
const REPLACE_SHORT_MARDI = {
selector: /(?:^|\s)ma(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` mardi ${afterDay}`
};
const REPLACE_SHORT_MERCREDI = {
selector: /(?:^|\s)me(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` mercredi ${afterDay}`
};
const REPLACE_SHORT_JEUDI = {
selector: /(?:^|\s)je?(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` jeudi ${afterDay}`
};
const REPLACE_SHORT_VENDREDI = {
selector: /(?:^|\s)ve?(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` vendredi ${afterDay}`
};
const REPLACE_SHORT_SAMEDI = {
selector: /(?:^|\s)sa?(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` samedi ${afterDay}`
};
const REPLACE_SHORT_DIMANCHE = {
selector: /(?:^|\s)di?(?<afterDay>\s|\d)/gu,
fix: (_, afterDay) => ` dimanche ${afterDay}`
};
const REPLACE_HYPHEN_DAYS_RANGE_WITH_AU = {
selector: /(?<startDay>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\s*-\s*(?<endDay>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)/gu,
fix: (_, startDay, endDay) => `${startDay} au ${endDay}`
};
const REPLACE_ANY_DAYS_SEPARATOR_WITH_SLASH = {
selector: /(?:et|le|sauf|---|\.|-|>|,|\s{3})[\s:a-z]*(?<day>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)/gu,
fix: (day) => `/ ${day}`
};
const REPLACE_SLASH_TIME_SEPARATOR_WITH_HYPHEN = {
selector: /(?<startTime>[0-2]?\dh?(?:[0-5]?\d)?)\s?\/\s?(?<endTime>[0-2]?\dh?(?:[0-5]?\d)?)/gu,
fix: (_, startTime, endTime) => `${startTime}-${endTime}`
};
const REMOVE_PHONE_NUMBERS = {
selector: /\d\d[-.\s]?\d\d[-.\s]?\d\d[-.\s]?\d\d[-.\s]?\d\d/gu,
fix: () => ''
};
const REPLACE_DOT_DAYS_SEPARATOR_WITH_SLASH = {
selector: /\.\s/gu,
fix: () => '/ '
};
const REPLACE_0_INSTEAD_OF_ACCENTED_A_TYPO = {
selector: /\s0\s/gu,
fix: () => ' à '
};
const INSERT_DAYS_SEPARATOR_BETWEEN_H_AND_DU = {
selector: /h\sdu/gu,
fix: () => 'h / du'
};
const FIX_REVERSE_AU = {
selector: /(?<hours>.*)(?<days>du\s(?<startDay>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)\sau\s(?<endDay>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche))\s*(?:\/|et|$)/u,
fix: (_, hours, days) => `${days} ${hours} `
};
const FIX_REVERSE_SINGLE_DAY = {
selector: /(?<hours>[0-2]?\dh?(?:[0-5]?\d)?-[0-2]?\dh?(?:[0-5]?\d)?)\D+\/\D+(?<day>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)$/u,
fix: (_, hours, day) => `/ ${day} ${hours} `
};
const INSERT_DAYS_SEPARATOR_BETWEEN_HOURS_AND_DAY = {
selector: /(?<before>[0-2]?\d\s*h(?:[0-5]\d)?)\s(?<day>lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche)/gu,
fix: (_, before, day) => `${before} / ${day}`
};
const CLEAN_UNICODE_AND_USELESS_CHAR = {
selector: /[\n+'"]/gu,
fix: () => ' '
};
const INSERT_COMMA_BETWEEN_DAYS = {
selector: /(?<=\d)\s*\b\p{L}+\b\s*(?=:)/gu,
fix: (day) => `,${day}`
};
const REPLACE_DASH_BY_DOUBLE_DOT_ONLY_IF_IT_IS_TIME = {
selector: /(?<![0-9a-zA-Z-])\d{2}\/\d{2}(?![0-9a-zA-Z-])/gu,
fix: (time) => time.replace('/', ':')
};
exports.REPLACE_SHORT_DAYS = [
REPLACE_SHORT_LUNDI,
REPLACE_SHORT_MARDI,
REPLACE_SHORT_MERCREDI,
REPLACE_SHORT_JEUDI,
REPLACE_SHORT_VENDREDI,
REPLACE_SHORT_SAMEDI,
REPLACE_SHORT_DIMANCHE
];
exports.HORAIRES_FIELD_CLEAN_OPERATIONS = [
...exports.REPLACE_SHORT_DAYS,
CLEAN_UNICODE_AND_USELESS_CHAR,
INSERT_COMMA_BETWEEN_DAYS,
REPLACE_DASH_BY_DOUBLE_DOT_ONLY_IF_IT_IS_TIME,
REPLACE_HYPHEN_DAYS_RANGE_WITH_AU,
REPLACE_ANY_DAYS_SEPARATOR_WITH_SLASH,
REPLACE_SLASH_TIME_SEPARATOR_WITH_HYPHEN,
REPLACE_SLASH_TIME_SEPARATOR_WITH_HYPHEN,
REMOVE_PHONE_NUMBERS,
REPLACE_DOT_DAYS_SEPARATOR_WITH_SLASH,
REPLACE_0_INSTEAD_OF_ACCENTED_A_TYPO,
INSERT_DAYS_SEPARATOR_BETWEEN_H_AND_DU,
FIX_REVERSE_AU,
FIX_REVERSE_SINGLE_DAY,
INSERT_DAYS_SEPARATOR_BETWEEN_HOURS_AND_DAY
];