From 97dc29d94164ec2fd8f82291c9ace1a2d412e170 Mon Sep 17 00:00:00 2001 From: Jordan Wallet Date: Mon, 2 Apr 2018 13:42:26 -0700 Subject: [PATCH] Draft of XMLHttpRequest support, package out of date --- src/infrastructure/BaseService.js | 6 +++++- src/infrastructure/RequestHelper.js | 19 ++++++++++++------- src/infrastructure/XMLHttpRequester.js | 12 ++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/infrastructure/XMLHttpRequester.js diff --git a/src/infrastructure/BaseService.js b/src/infrastructure/BaseService.js index cdbf78cc..7b4d28a7 100644 --- a/src/infrastructure/BaseService.js +++ b/src/infrastructure/BaseService.js @@ -1,9 +1,13 @@ import URLJoin from 'url-join'; +import Request from 'request-promise'; +import XMLHttpRequester from './XMLHttpRequester'; class BaseModel { - constructor({ url = 'https://gitlab.com', token, oauthToken }) { + constructor({ url = 'https://gitlab.com', token, oauthToken, useXMLHttpRequest = false }) { this.url = URLJoin(url, 'api', 'v4'); this.headers = {}; + this.requester = useXMLHttpRequest ? XMLHttpRequester : Request; + this.useXMLHttpRequest = useXMLHttpRequest; if (oauthToken) { this.headers.Authorization = `Bearer ${oauthToken}`; diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index 5fee2a0e..2dccdcee 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -1,12 +1,12 @@ -import Request from 'request-promise'; import Humps from 'humps'; import LinkParser from 'parse-link-header'; +import QS from 'qs'; import URLJoin from 'url-join'; function defaultRequest( url, endpoint, - { headers, body, qs, formData, resolveWithFullResponse = false }, + { headers, body, qs, formData, resolveWithFullResponse = false, useXMLHttpRequest }, ) { const params = { url: URLJoin(url, endpoint), @@ -15,7 +15,12 @@ function defaultRequest( }; if (body) params.body = Humps.decamelizeKeys(body); - if (qs) params.qs = Humps.decamelizeKeys(qs); + if (qs) { + if (useXMLHttpRequest) { + // The xhr package doesn't have a way of passing in a qs object until v3 + params.url = URLJoin(params.url, `?${QS.stringify(qs)}`); + } else params.qs = Humps.decamelizeKeys(qs); + } if (formData) params.formData = formData; params.resolveWithFullResponse = resolveWithFullResponse; @@ -25,7 +30,7 @@ function defaultRequest( class RequestHelper { static async get(service, endpoint, options = {}) { - const response = await Request.get(defaultRequest(service.url, endpoint, { + const response = await service.requester.get(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, resolveWithFullResponse: true, @@ -48,21 +53,21 @@ class RequestHelper { static post(service, endpoint, options = {}, form = false) { const body = form ? 'fromData' : 'body'; - return Request.post(defaultRequest(service.url, endpoint, { + return service.requester.post(defaultRequest(service.url, endpoint, { headers: service.headers, [body]: options, })); } static put(service, endpoint, options = {}) { - return Request.put(defaultRequest(service.url, endpoint, { + return service.requester.put(defaultRequest(service.url, endpoint, { headers: service.headers, body: options, })); } static delete(service, endpoint, options = {}) { - return Request.delete(defaultRequest(service.url, endpoint, { + return service.requester.delete(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, })); diff --git a/src/infrastructure/XMLHttpRequester.js b/src/infrastructure/XMLHttpRequester.js new file mode 100644 index 00000000..385cc3bd --- /dev/null +++ b/src/infrastructure/XMLHttpRequester.js @@ -0,0 +1,12 @@ +import { promisify as Promisify } from 'util'; +import XHR from 'xhr'; + +const XMLHttpRequester = Promisify(XHR); +XMLHttpRequester.del = Promisify(XHR.del); +XMLHttpRequester.get = Promisify(XHR.get); +XMLHttpRequester.head = Promisify(XHR.head); +XMLHttpRequester.patch = Promisify(XHR.patch); +XMLHttpRequester.post = Promisify(XHR.post); +XMLHttpRequester.put = Promisify(XHR.put); + +export default XMLHttpRequester;