module.exports = graphql const GraphqlError = require('./error') const NON_VARIABLE_OPTIONS = ['method', 'baseUrl', 'url', 'headers', 'request', 'query'] function graphql (request, query, options) { if (typeof query === 'string') { options = Object.assign({ query }, options) } else { options = query } const requestOptions = Object.keys(options).reduce((result, key) => { if (NON_VARIABLE_OPTIONS.includes(key)) { result[key] = options[key] return result } if (!result.variables) { result.variables = {} } result.variables[key] = options[key] return result }, {}) return request(requestOptions) .then(response => { if (response.data.errors) { throw new GraphqlError(requestOptions, response) } return response.data.data }) }