code: function getKeys(obj = {}, flag = false, oldPath = '', allKeys = [], allGroups = []) {
      let isValue = true;
      Object.keys(obj).forEach((key) => {
          const value = obj[key];
          const newPath = oldPath + key;
  
          if (isPlainObject(value) && key !== RAW && key !== '__meta') {
              isValue = true;
              if (newPath !== 'settings') {
                  allGroups.push(true);
                  allKeys.push(newPath);
              }
              const keys = getKeys(value, flag, `${newPath}.`, allKeys, allGroups);
              // If nothing was changed we where in a value, not a group
              if (keys.value) {
                  allGroups[allGroups.length - 1] = false;
              }
          } else if (flag && key !== '__meta') {
              allKeys.push(newPath);
              allGroups.push(false);
          }
      });
  
      return {
          paths: allKeys,
          groups: allGroups,
          value: isValue,
      };
  }
docs: /* eslint-disable no-param-reassign