UNPKG

@gouvfr-anct/mednum

Version:

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

39 lines (38 loc) 3.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processTypologies = void 0; const lieux_de_mediation_numerique_1 = require("@gouvfr-anct/lieux-de-mediation-numerique"); const input_1 = require("../../input"); const dispositifs_programmes_nationaux_field_1 = require("../dispositifs-programmes-nationaux/dispositifs-programmes-nationaux.field"); const name_to_typologie_1 = require("./name-to-typologie"); const isAllowedTerm = (choice, sourceValue) => choice.sauf?.every((forbidden) => !sourceValue.includes(forbidden)) ?? true; const isTermFound = (sourceValue, choice) => (found, term) => found || (sourceValue.includes(term.toLowerCase()) && isAllowedTerm(choice, sourceValue)); const containsOneOfTheTerms = (choice, sourceValue = '') => choice.termes == null ? sourceValue !== '' : choice.termes.reduce(isTermFound(sourceValue.toLowerCase(), choice), false); const appendTypologie = (typologies, typologie) => [ ...typologies, ...(typologie == null ? [] : [typologie]) ]; const isDefault = (choice) => choice.colonnes == null; const findAndAppendTypologies = (choice, source) => (typologies, colonne) => containsOneOfTheTerms(choice, source[colonne]?.toString()) ? appendTypologie(typologies, choice.cible) : typologies; const typologiesForTerms = (choice, source) => (typologies, colonne) => isDefault(choice) ? appendTypologie(typologies, choice.cible) : findAndAppendTypologies(choice, source)(typologies, colonne); const appendTypologies = (source) => (typologies, choice) => [ ...typologies, ...(choice.colonnes ?? (0, input_1.cibleAsDefault)(choice)).reduce(typologiesForTerms(choice, source), []) ]; const matchWithName = (source, matching) => (hasMatch, regExp) => hasMatch || regExp.test(source[matching.nom.colonne]?.toString() ?? ''); const toTypologieMatchingName = (source, matching) => (typologies, typologieMatcher) => typologieMatcher.matchers.reduce(matchWithName(source, matching), false) ? (0, lieux_de_mediation_numerique_1.Typologies)(Array.from(new Set([...typologies, typologieMatcher.typologie]))) : typologies; const inferTypologies = (source, matching) => name_to_typologie_1.TYPOLOGIE_MATCHERS.reduce(toTypologieMatchingName(source, matching), (0, lieux_de_mediation_numerique_1.Typologies)((0, dispositifs_programmes_nationaux_field_1.processDispositifProgrammeNationaux)(source, matching).includes(lieux_de_mediation_numerique_1.DispositifProgrammeNational.FranceServices) ? [lieux_de_mediation_numerique_1.Typologie.RFS] : [])); const checkingTypologieSourceValues = (source, matching) => matching.typologie?.map((typo) => typo.colonnes != null && source[typo.colonnes[0] ?? ''] != null && source[typo.colonnes[0] ?? ''] !== ''); const typologiesArePreset = (matching) => matching.typologie?.[0]?.cible != null && matching.typologie[0].colonnes == null && matching.typologie[0].termes == null; const processTypologies = (source, matching) => ((checkingTypologieSourceValues(source, matching) ?? []).some((check) => !check) && !typologiesArePreset(matching)) || matching.typologie?.at(0)?.cible == null ? inferTypologies(source, matching) : (0, lieux_de_mediation_numerique_1.Typologies)(Array.from(new Set(matching.typologie.reduce(appendTypologies(source), inferTypologies(source, matching))))); exports.processTypologies = processTypologies;