Skip to content

Commit

Permalink
Merge branch 'cookieMr-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonsaayman committed Feb 13, 2022
2 parents 1163588 + 95295f6 commit 2f1e818
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 50 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](http://npm-stat.com/charts.html?package=axios)
[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios)
[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios)
[![Known Vulnerabilities](https://snyk.io/test/npm/axios/badge.svg)](https://snyk.io/test/npm/axios)

Promise based HTTP client for the browser and node.js

Expand Down
3 changes: 3 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ export interface AxiosRequestConfig<D = any> {
transitional?: TransitionalOptions;
signal?: AbortSignal;
insecureHTTPParser?: boolean;
env?: {
FormData?: new (...args: any[]) => object;
};
}

export interface HeadersDefaults {
Expand Down
4 changes: 3 additions & 1 deletion lib/adapters/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ module.exports = function httpAdapter(config) {
headers['User-Agent'] = 'axios/' + VERSION;
}

if (data && !utils.isStream(data)) {
if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
Object.assign(headers, data.getHeaders());
} else if (data && !utils.isStream(data)) {
if (Buffer.isBuffer(data)) {
// Nothing to do...
} else if (utils.isArrayBuffer(data)) {
Expand Down
7 changes: 0 additions & 7 deletions lib/core/Axios.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ Axios.prototype.request = function request(configOrUrl, config) {
config = configOrUrl || {};
}

if (!config.url) {
throw new Error('Provided config url is not valid');
}

config = mergeConfig(this.defaults, config);

// Set config.method
Expand Down Expand Up @@ -122,9 +118,6 @@ Axios.prototype.request = function request(configOrUrl, config) {
};

Axios.prototype.getUri = function getUri(config) {
if (!config.url) {
throw new Error('Provided config url is not valid');
}
config = mergeConfig(this.defaults, config);
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
};
Expand Down
12 changes: 11 additions & 1 deletion lib/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
var utils = require('./utils');
var normalizeHeaderName = require('./helpers/normalizeHeaderName');
var enhanceError = require('./core/enhanceError');
var toFormData = require('./helpers/toFormData');

var DEFAULT_CONTENT_TYPE = {
'Content-Type': 'application/x-www-form-urlencoded'
Expand Down Expand Up @@ -71,10 +72,17 @@ var defaults = {
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
return data.toString();
}
if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {

var isObjectPayload = utils.isObject(data);
var contentType = headers && headers['Content-Type'];

if ( isObjectPayload && contentType === 'multipart/form-data' ) {
return toFormData(data, new (this.env && this.env.FormData || FormData));
} else if ( isObjectPayload || contentType === 'application/json' ) {
setContentTypeIfUnset(headers, 'application/json');
return stringifySafely(data);
}

return data;
}],

Expand Down Expand Up @@ -112,6 +120,8 @@ var defaults = {
maxContentLength: -1,
maxBodyLength: -1,

env: {},

validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
},
Expand Down
10 changes: 7 additions & 3 deletions lib/helpers/toFormData.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use strict';

var utils = require('../utils');

function combinedKey(parentKey, elKey) {
return parentKey + '.' + elKey;
}
Expand All @@ -11,7 +13,7 @@ function buildFormData(formData, data, parentKey) {
});
} else if (
typeof data === 'object' &&
!(data instanceof File || data === null)
!(utils.isFile(data) || data === null)
) {
Object.keys(data).forEach(function buildObject(key) {
buildFormData(
Expand Down Expand Up @@ -44,10 +46,12 @@ function buildFormData(formData, data, parentKey) {
* type FormVal = FormDataNest | FormDataPrimitive
*
* @param {FormVal} data
* @param {?Object} formData
*/

module.exports = function getFormData(data) {
var formData = new FormData();
module.exports = function getFormData(data, formData) {
// eslint-disable-next-line no-param-reassign
formData = formData || new FormData();

buildFormData(formData, data);

Expand Down
24 changes: 15 additions & 9 deletions lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,6 @@ function isArrayBuffer(val) {
return toString.call(val) === '[object ArrayBuffer]';
}

/**
* Determine if a value is a FormData
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an FormData, otherwise false
*/
function isFormData(val) {
return toString.call(val) === '[object FormData]';
}

/**
* Determine if a value is a view on an ArrayBuffer
Expand Down Expand Up @@ -168,6 +159,21 @@ function isStream(val) {
return isObject(val) && isFunction(val.pipe);
}

/**
* Determine if a value is a FormData
*
* @param {Object} thing The value to test
* @returns {boolean} True if value is an FormData, otherwise false
*/
function isFormData(thing) {
var pattern = '[object FormData]';
return thing && (
(typeof FormData === 'function' && thing instanceof FormData) ||
toString.call(thing) === pattern ||
(isFunction(thing.toString) && thing.toString() === pattern)
);
}

/**
* Determine if a value is a URLSearchParams object
*
Expand Down
18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
"unpkg": "dist/axios.min.js",
"typings": "./index.d.ts",
"dependencies": {
"follow-redirects": "^1.14.7"
"follow-redirects": "^1.14.8"
},
"bundlesize": [
{
Expand Down
2 changes: 1 addition & 1 deletion test/specs/helpers/toFormData.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var toFormData = require("../../../lib/helpers/toFormData");

describe("toFormData", function () {
it("Convert nested data object to FormDAta", function () {
it("Convert nested data object to FormData", function () {
var o = {
val: 123,
nested: {
Expand Down
18 changes: 0 additions & 18 deletions test/specs/requests.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,6 @@ describe('requests', function () {
jasmine.Ajax.uninstall();
});

it('should throw error when missing url', function (done) {
expect(() => axios()).toThrowError(/Provided config url is not valid/);
done();

expect(() => axios('')).toThrowError(/Provided config url is not valid/);
done();

expect(() => axios({
url: undefined,
})).toThrowError(/Provided config url is not valid/);
done();

expect(() => axios({
method: 'POST',
})).toThrowError(/Provided config url is not valid/);
done();
});

it('should treat single string arg as url', function (done) {
axios('/foo');

Expand Down

0 comments on commit 2f1e818

Please sign in to comment.