cow-value-model.js 549 B

12345678910111213141516171819
  1. export const cowValueModel = (key, keys = key.split('.')) => {
  2. function setField (x = {}, index, val) {
  3. if (index >= keys.length) return val;
  4. const key = keys[index],
  5. value = x[key],
  6. modified = setField(value, index + 1, val);
  7. return value === modified ? x : {...x, [key]: modified};
  8. }
  9. return {
  10. key,
  11. get (obj) {
  12. return keys.reduce((x = {}, key) => x[key], obj);
  13. },
  14. set (obj, val) {
  15. return setField(obj, 0, val);
  16. }
  17. };
  18. };