Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiriklv/888e4636b4c8893229efe7f355d71f0a to your computer and use it in GitHub Desktop.
Save eiriklv/888e4636b4c8893229efe7f355d71f0a to your computer and use it in GitHub Desktop.
HTTPGetRequestForQueriesInterface
import { HTTPFetchNetworkInterface, printAST } from 'apollo-client';
/**
* Serialize a object to a query string
* @source https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object#comment47677757_18116302
*/
function serialize( obj ) {
return `?` + Object.keys(obj).map(k => k + `=` + encodeURIComponent(obj[k])).join(`&`);
}
class HTTPGetRequestForQueriesInterface extends HTTPFetchNetworkInterface {
fetchFromRemoteEndpoint({ request, options }) {
const isQuery = request.query.definitions[0].operation === `query`;
if (!isQuery) {
return super.fetchFromRemoteEndpoint({ request, options });
}
const opts = Object.assign({}, this._opts, {
method: `GET`,
headers: Object.assign({
Accept: `*/*`,
'Content-Type': `application/json`,
}, (options.headers || {})),
});
const query = printAST(request.query)
.replace(/(?:\r\n|\r|\n)/g, ``)
.replace(/\s\s+/g, ` `);
const variables = JSON.stringify(request.variables);
const { operationName } = request;
const getParams = {
query,
variables,
operationName,
};
return fetch(this._uri + serialize(getParams), opts);
}
}
export default HTTPGetRequestForQueriesInterface
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment