import {ATTRIBUTE, VALUE} from './expression-types' import {dashToCamelCase} from './strings' /** * Throw an error with a descriptive message * @param { string } message - error message * @returns { undefined } hoppla.. at this point the program should stop working */ export function panic(message) { throw new Error(message) } /** * Evaluate a list of attribute expressions * @param {Array} attributes - attribute expressions generated by the riot compiler * @returns {Object} key value pairs with the result of the computation */ export function evaluateAttributeExpressions(attributes) { return attributes.reduce((acc, attribute) => { const {value, type} = attribute switch (true) { // spread attribute case !attribute.name && type === ATTRIBUTE: return { ...acc, ...value } // value attribute case type === VALUE: acc.value = attribute.value break // normal attributes default: acc[dashToCamelCase(attribute.name)] = attribute.value } return acc }, {}) }