import { map, mapValues, merge } from 'lodash'; export function buildSelectors(localSelectors, splatSelector, subduxes) { const subSelectors = map(subduxes, ({ selectors }, slice) => { if (!selectors) return {}; if (slice === '*') return {}; return mapValues(selectors, (func) => (state) => func(state[slice])); }); let splat = {}; if (splatSelector) { splat[splatSelector[0]] = (state) => (...args) => { const value = splatSelector[1](state)(...args); const res = () => value; return merge( res, mapValues( subduxes['*'].selectors, (selector) => () => selector(value) ) ); }; } return merge({}, ...subSelectors, localSelectors, splat); }