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