code: function diffObj(a, b, props) {
    const diffs = {};
  
    // TODO:  maybe implement two versions of this algo, one if props is present, one if it isn't,
    //        because it's probably faster to outerloop props if it is present
  
    for (const prop in a) {
      if (!a.hasOwnProperty(prop) || (props && !props[prop])) {
        continue;
      }
  
      const av = a[prop],
        bv = b[prop];
  
      if (!Tyr.isEqual(av, bv)) {
        if (bv === undefined) {
          diffs[prop] = O_DELETE;
        } else {
          if (isArray(av)) {
            if (isArray(bv)) {
              diffs[prop] = [T_ARRAY, diffArr(av, bv)];
            } else {
              diffs[prop] = [bv];
            }
          } else if (isArray(bv)) {
            diffs[prop] = [bv];
          } else if (Tyr.isObject(av) && Tyr.isObject(bv)) {
            diffs[prop] = [T_OBJECT, diffObj(av, bv)];
          } else {
            diffs[prop] = [bv];
          }
        }
      }
    }
  
    for (const prop in b) {
      if (!b.hasOwnProperty(prop) || (props && !props[prop])) {
        continue;
      }
  
      if (!(prop in a)) {
        const bv = b[prop];
  
        diffs[prop] = [bv];
      }
    }
  
    return diffs;
  }
docs: Objects