code: function parseFields (/* dynamic */) {
    var tree
    var info = arguments[0]
    var keepRoot = arguments[1]
    var fieldNodes = info && (info.fieldASTs || info.fieldNodes)
    if (fieldNodes) {
      // (info, keepRoot)
      tree = fieldTreeFromAST(fieldNodes, info.fragments)
      if (!keepRoot) {
        var key = firstKey(tree)
        tree = tree[key]
      }
    } else {
      // (asts, fragments, fieldTree)
      tree = fieldTreeFromAST.apply(this, arguments)
    }
    return tree
  }
docs: parse fields has two signatures:
  1)
  @param {Object} info - graphql resolve info
  @param {Boolean} [keepRoot] default: true
  @return {Object} fieldTree
  2)
  @param {Array} asts - ast array
  @param {Object} [fragments] - optional fragment map
  @param {Object} [fieldTree] - optional initial field tree
  @return {Object} fieldTree