Преобразование запросов GraphiQL в JSON

Используя GraphQLHub, я могу выполнить этот запрос для трех самых популярных новостей на Hacker News:

{
  hn {
    topStories(limit: 3) {
      title
      url
      timeISO
      by {
        id
      }
    }
  }
}

Как экспортировать (или преобразовать) этот запрос в JSON? Есть ли пакет npm, который это сделает?

Я вижу, что есть graphql-to-json, но, похоже, вам нужно передайте сюда файл .js, а не необработанный запрос, как показано выше.


person SeanPlusPlus    schedule 30.01.2018    source источник


Ответы (1)


Есть так много способов сделать это, но простой реализацией будет использование объекта JS для сопоставления запросов, а затем сериализация с использованием JSON.stringify()

Если вы можете получить доступ к приведенному выше запросу в виде строки, вы можете сделать то, что я говорю. Насколько я знаю, запрос взорвался бы, если бы он не был строкой один раз в среде JS, а не в среде IDE, такой как GraphiQL.

let QueryStore = {}

const getHNTopStoriesQuery = `
    query getHNTopStories {
        hn {
            topStories(limit: 3) {
                title
                url
                timeISO
                by {
                id
                }
            }
        }
    }
`   

const addQuery = (queryToAdd, queries) => {
    let key = queryToAdd.trim().split(' ')[1]
    let queryEntry = {}
    queryEntry[key] = queryToAdd

    return Object.assign({}, queries, queryEntry)
}

const queryToGraphiQLQueryString = query => {
    let lines = query.trim().split('\n')
    let queryLines =lines.slice(1, -1).map(line => line.trim())

    return encodeURIComponent(`{${queryLines.join(' ')}}`)
}

// Add Query to Store
QueryStore = addQuery(getHNTopStoriesQuery, QueryStore)

// Get a GraphiQL URI query string of a Query
let qs = queryToGraphiQLQueryString(QueryStore['getHNTopStories'])
console.log(qs)

// Print a prettified JSON of the QueryStore
console.log(JSON.stringify(QueryStore, null, 2))
person peteb    schedule 31.01.2018