| 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 |
| }) |
| } |