// This file exports the functions of the public computing library import { analyseMany, parseAll } from './traverse.js' import { rulesFr, collectDefaults, nestedSituationToPathMap, enrichRule } from './rules' import { safeLoad } from 'js-yaml' // The public evaluation function takes a nested object of input values let nestedSituationToStateSelector = rules => nestedSituation => dottedName => ({ ...collectDefaults(rules), ...nestedSituationToPathMap(nestedSituation) }[dottedName]) let enrichRules = input => (typeof input === 'string' ? safeLoad(input) : input).map(enrichRule) export default { evaluate: (targetInput, nestedSituation, config) => { let rules = config ? do { let { base, extra } = config ;[ ...(base ? enrichRules(base) : rulesFr), ...(extra ? enrichRules(extra) : []) ] } : rulesFr let evaluation = analyseMany( parseAll(rules), Array.isArray(targetInput) ? targetInput : [targetInput] )(nestedSituationToStateSelector(rules)(nestedSituation)) if (config?.debug) return evaluation let values = evaluation.targets.map(t => t.nodeValue) return Array.isArray(targetInput) ? values : values[0] } }