UNPKG

@gouvfr-anct/mednum

Version:

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

88 lines (87 loc) 3.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mediationNumeriqueToCsv = exports.csvLineFrom = void 0; const HEADERS = [ 'id', 'pivot', 'nom', 'commune', 'code_postal', 'code_insee', 'adresse', 'complement_adresse', 'latitude', 'longitude', 'typologie', 'telephone', 'courriels', 'site_web', 'horaires', 'presentation_resume', 'presentation_detail', 'source', 'itinerance', 'structure_parente', 'date_maj', 'services', 'publics_specifiquement_adresses', 'prise_en_charge_specifique', 'frais_a_charge', 'dispositif_programmes_nationaux', 'formations_labels', 'autres_formations_labels', 'modalites_acces', 'modalites_accompagnement', 'fiche_acces_libre', 'prise_rdv' ]; const toDoubleQuoted = (header) => (header == null ? '' : `"${header}"`); const fieldsArrayFrom = (lieuMediationNumerique) => [ lieuMediationNumerique.id, lieuMediationNumerique.pivot, lieuMediationNumerique.nom.replace(/"/g, '').replace(/\n/g, ''), lieuMediationNumerique.commune, lieuMediationNumerique.code_postal, lieuMediationNumerique.code_insee, lieuMediationNumerique.adresse.replace(/"/g, '').replace(/\n/g, '').replace(/\s$/g, '').replace(/\s+/g, ' '), lieuMediationNumerique.complement_adresse?.replace(/"/g, '').replace(/\n/g, '').replace(/\s$/g, '').replace(/\s+/g, ' '), lieuMediationNumerique.latitude?.toString(), lieuMediationNumerique.longitude?.toString(), lieuMediationNumerique.typologie, lieuMediationNumerique.telephone, lieuMediationNumerique.courriels, lieuMediationNumerique.site_web, lieuMediationNumerique.horaires?.replace(/"/g, '').replace(/\n/g, ''), lieuMediationNumerique.presentation_resume?.replace(/"/g, '"').replace(/\n/g, ''), lieuMediationNumerique.presentation_detail?.replace(/"/g, '"').replace(/\n/g, ''), lieuMediationNumerique.source, lieuMediationNumerique.itinerance, lieuMediationNumerique.structure_parente, lieuMediationNumerique.date_maj, lieuMediationNumerique.services?.replace(/"/g, '"').replace(/\n/g, ''), lieuMediationNumerique.publics_specifiquement_adresses, lieuMediationNumerique.prise_en_charge_specifique, lieuMediationNumerique.frais_a_charge, lieuMediationNumerique.dispositif_programmes_nationaux, lieuMediationNumerique.formations_labels, lieuMediationNumerique.autres_formations_labels?.replace(/"/g, '"').replace(/\n/g, ''), lieuMediationNumerique.modalites_acces, lieuMediationNumerique.modalites_accompagnement, lieuMediationNumerique.fiche_acces_libre, lieuMediationNumerique.prise_rdv ]; const csvLineFrom = (cells) => cells.map(toDoubleQuoted).join(','); exports.csvLineFrom = csvLineFrom; const toExtraFieldValueFrom = (lieuMediationNumerique) => (field) => lieuMediationNumerique[field]?.toString() ?? ''; const toLieuMediationNumeriqueCsvLine = (extraFields) => (lieuMediationNumerique) => (0, exports.csvLineFrom)([ ...fieldsArrayFrom(lieuMediationNumerique), ...extraFields.map(toExtraFieldValueFrom(lieuMediationNumerique)) ]); const notInSchemaLieuMediationNumerique = (field) => !HEADERS.includes(field); const toObjectFields = (fields, obj) => [...fields, ...Object.keys(obj)]; const extraFieldsFor = (lieuxMediationNumerique) => Array.from(new Set(lieuxMediationNumerique.reduce(toObjectFields, []).filter(notInSchemaLieuMediationNumerique))); const mediationNumeriqueToCsv = (lieuxMediationNumerique) => { const extraFields = extraFieldsFor(lieuxMediationNumerique); return `${(0, exports.csvLineFrom)([...HEADERS, ...extraFields])}\n${lieuxMediationNumerique.map(toLieuMediationNumeriqueCsvLine(extraFields)).join('\n')}`; }; exports.mediationNumeriqueToCsv = mediationNumeriqueToCsv;