From 21faf97301085962049ef033a8d58e2dae5c0fbe Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sun, 9 Aug 2020 16:01:33 +0200 Subject: [PATCH] Fixing support for FormData requests (#1056) --- packages/gitbeaker-browser/src/KyRequester.ts | 2 +- packages/gitbeaker-node/package.json | 2 +- packages/gitbeaker-node/src/GotRequester.ts | 4 ++-- packages/gitbeaker-requester-utils/package.json | 2 +- packages/gitbeaker-requester-utils/src/RequesterUtils.ts | 5 +++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/gitbeaker-browser/src/KyRequester.ts b/packages/gitbeaker-browser/src/KyRequester.ts index 81734742..ad508ee1 100644 --- a/packages/gitbeaker-browser/src/KyRequester.ts +++ b/packages/gitbeaker-browser/src/KyRequester.ts @@ -11,7 +11,7 @@ function responseHeadersAsObject(response): Record { if (!response.headers.entries().length) { return {}; } - + const headers = {}; const keyVals = [...response.headers.entries()]; diff --git a/packages/gitbeaker-node/package.json b/packages/gitbeaker-node/package.json index 2d5c2b11..e724f670 100644 --- a/packages/gitbeaker-node/package.json +++ b/packages/gitbeaker-node/package.json @@ -11,11 +11,11 @@ "dependencies": { "@gitbeaker/core": "^23.4.2", "@gitbeaker/requester-utils": "^23.4.2", - "form-data": "^3.0.0", "got": "^11.1.4", "xcase": "^2.0.1" }, "devDependencies": { + "form-data": "^3.0.0", "@types/node": "^14.0.6", "openpgp": "^4.10.4", "rollup": "^2.12.0", diff --git a/packages/gitbeaker-node/src/GotRequester.ts b/packages/gitbeaker-node/src/GotRequester.ts index 105b427c..2e998b13 100644 --- a/packages/gitbeaker-node/src/GotRequester.ts +++ b/packages/gitbeaker-node/src/GotRequester.ts @@ -1,5 +1,4 @@ import Got from 'got'; -import * as FormData from 'form-data'; import { decamelizeKeys } from 'xcase'; import { Agent } from 'https'; import { @@ -15,7 +14,8 @@ export function defaultRequest( ) { const options = baseDefaultRequest(service, { body, query, sudo, method }); - if (typeof body === 'object' && !(body instanceof FormData)) { + // FIXME: Not the best comparison, but...it will have to do for now. + if (typeof body === 'object' && body.constructor.name !== 'FormData') { options.json = decamelizeKeys(body); delete options.body; diff --git a/packages/gitbeaker-requester-utils/package.json b/packages/gitbeaker-requester-utils/package.json index 115dc0f8..c8311d35 100644 --- a/packages/gitbeaker-requester-utils/package.json +++ b/packages/gitbeaker-requester-utils/package.json @@ -9,12 +9,12 @@ "url": "https://github.com/jdalrymple/gitbeaker/issues" }, "dependencies": { - "form-data": "^3.0.0", "query-string": "^6.12.1", "xcase": "^2.0.1" }, "devDependencies": { "@types/node": "^14.0.6", + "form-data": "^3.0.0", "rollup": "^2.12.0", "rollup-plugin-terser": "^6.1.0", "rollup-plugin-typescript2": "^0.27.1", diff --git a/packages/gitbeaker-requester-utils/src/RequesterUtils.ts b/packages/gitbeaker-requester-utils/src/RequesterUtils.ts index 2e99e441..3e789096 100644 --- a/packages/gitbeaker-requester-utils/src/RequesterUtils.ts +++ b/packages/gitbeaker-requester-utils/src/RequesterUtils.ts @@ -1,7 +1,6 @@ import { Agent } from 'https'; import { decamelizeKeys } from 'xcase'; import { stringify } from 'query-string'; -import * as FormData from 'form-data'; // Types export interface RequesterType { @@ -41,7 +40,8 @@ export function defaultRequest( if (sudo) headers.sudo = sudo; - if (typeof body === 'object' && !(body instanceof FormData)) { + // FIXME: Not the best comparison, but...it will have to do for now. + if (typeof body === 'object' && body.constructor.name !== 'FormData') { bod = JSON.stringify(decamelizeKeys(body)); headers['content-type'] = 'application/json'; } else { @@ -67,6 +67,7 @@ export function createInstance(optionsHandler, requestHandler): RequesterType { /* eslint func-names:0 */ requester[m] = function (service, endpoint, options) { const requestOptions = optionsHandler(service, { ...options, method: m }); + return requestHandler(endpoint, requestOptions); }; });