Example #1
0
  return promiseEach(props, prop => {
    if (!prop)
      throw error(INVALID_PATH, {path});

    if (isPlainObject(value)) {
      if (!value.hasOwnProperty(prop)) {
        value = undefined;
        return false; // exit the loop
      }
    } else if (Array.isArray(value)) {
      const index = Number(prop);
      if (Number.isNaN(index))
        throw error(INVALID_INDEX_VALUE, {path, index});
      if (index < 0 || index >= value.length)
        throw error(INDEX_OUT_OF_RANGE, {path, index});
      prop = index;
    } else {
      throw error(OBJECT_OR_ARRAY_REQUIRED, {path, prop});
    }

    const parent = value;
    value = value[prop];

    return promiseSync(handler(value, prop, parent), val => {
      value = val;
    });
  }).then(() => value);
Example #2
0
 function _clone(value, prop, parent, path) {
   return promiseSync(handler(value, prop, parent, path), value => {
     if (isPlainObject(value))
       return _cloneObject(value, path);
     else if (Array.isArray(value))
       return _cloneArray(value, path);
     else
       return value;
   });
 }
Example #3
0
 return promiseEach(props, prop => {
   return promiseSync(_clone(obj[prop], prop, obj, path + "." + prop), value => {
     des[prop] = value;
   });
 }).then(() => des);