UNPKG

@gouvfr-anct/lieux-de-mediation-numerique

Version:

📚 Bibliothèque pour la modélisation des lieux de médiation numérique respectant le standard du schéma de données des lieux de médiation numériques

26 lines (25 loc) • 1.48 kB
import { CodeInseeError, CodePostalError, CommuneError, VoieError } from './errors'; const CODE_POSTAL_REG_EXP = /^\d{5}$/u; const CODE_INSEE_REG_EXP = /^(?:[013-9]\d|2[AB1-9])(?:0?\d{3}|-\d-\d{2}-\d{3})$/u; const COMMUNE_REG_EXP = /^[A-Za-z\dÀ-ÖØ-öø-ÿœ-ŸŒ\-'’\s]+$/u; const VOIE_REG_EXP = /^[0-9A-Za-z\dÀ-ÖØ-öø-ÿœ-ŸŒ\-,()°.&:+–|;'’/\s]+$/u; const isValidCodePostal = (codePostal) => CODE_POSTAL_REG_EXP.test(codePostal); const isValidCodeInsee = (codeInsee) => CODE_INSEE_REG_EXP.test(codeInsee); const isValidCommune = (commune) => COMMUNE_REG_EXP.test(commune); const isValidVoie = (voie) => voie.length > 0 && VOIE_REG_EXP.test(voie); export const isValidAddress = (adresse) => isValidVoie(adresse.voie) && isValidCodePostal(adresse.code_postal) && (adresse.code_insee == null || isValidCodeInsee(adresse.code_insee)) && isValidCommune(adresse.commune); const throwAdresseError = (adresse) => { if (!isValidVoie(adresse.voie)) throw new VoieError(adresse.voie); if (!isValidCodePostal(adresse.code_postal)) throw new CodePostalError(adresse.code_postal); if (adresse.code_insee != null && !isValidCodeInsee(adresse.code_insee)) throw new CodeInseeError(adresse.code_insee); if (!isValidCommune(adresse.commune)) throw new CommuneError(adresse.commune); throw new Error(); }; export const Adresse = (adresse) => isValidAddress(adresse) ? { ...adresse } : throwAdresseError(adresse);