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