docs: function proxyMethods(exec, query) {
      var methods = [].concat(END_POINT_METHODS).concat(CHAINABLE_METHODS);
      var _iteratorNormalCompletion = true;
      var _didIteratorError = false;
      var _iteratorError = undefined;
  
      try {
          var _loop = function _loop() {
              var name = _step.value;
  
              var oldMethod = query[name];
              query[name] = function () {
                  var clonedQuery = query.clone();
                  proxyMethods(exec, clonedQuery);
  
                  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
                      args[_key3] = arguments[_key3];
                  }
  
                  oldMethod.apply(clonedQuery, args);
                  if (CHAINABLE_METHODS.indexOf(name) > -1) {
                      return clonedQuery;
                  } else {
                      return exec(clonedQuery.toString());
                  }
              };
          };
  
          for (var _iterator = (0, _getIterator3.default)(methods), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
              _loop();
          }
      } catch (err) {
          _didIteratorError = true;
          _iteratorError = err;
      } finally {
          try {
              if (!_iteratorNormalCompletion && _iterator.return) {
                  _iterator.return();
              }
          } finally {
              if (_didIteratorError) {
                  throw _iteratorError;
              }
          }
      }
  }