tomasreichmann
2/27/2018 - 1:35 PM

normalize and resolve config

{
  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
});