Draft of XMLHttpRequest support, package out of date

This commit is contained in:
Jordan Wallet 2018-04-02 13:42:26 -07:00
parent 027d2c44c4
commit 97dc29d941
3 changed files with 29 additions and 8 deletions

View File

@ -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}`;

View File

@ -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,
}));

View File

@ -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;