{
babel: {
presets: [
["stage-2"]
]
}
}
function normalizeToArray(value) {
if ( Array.isArray(value)) {
return value;
}
return [value];
}
function normalizeToFunction(value) {
if ( typeof value === 'function') {
return value;
}
return () => value;
}
function normalizeConfig(config) {
return Object.keys(config).reduce((newConfig, key) => {
const value = config[key];
return {
...newConfig,
[key]: normalizeToArray(value).map( normalizeToFunction )
};
}, {});
}
function resolveConfig(config, params) {
return Object.keys(config).reduce((newConfig, key) => {
const value = config[key];
console.log('value', value);
return {
...newConfig,
[key]: resolveValue(value, params)
};
}, {});
}
function resolveValue(value, params) {
return value.map( valueItem => valueItem(params) );
}
function connect(config = {}) {
const params = { unit: 'px' };
const normalizedConfig = normalizeConfig(config);
const resolvedConfig = resolveConfig(normalizedConfig, params);
normalizedConfig;
resolvedConfig;
}
connect({
output: [({unit}) => 2 + unit, ({unit}) => 3 + unit],
b: [2, ({unit}) => 3 + unit],
c: ({unit}) => 4 + unit
});