You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
'use strict'; |
|
|
|
import toFormData from './toFormData.js'; |
|
|
|
/** |
|
* It encodes a string by replacing all characters that are not in the unreserved set with |
|
* their percent-encoded equivalents |
|
* |
|
* @param {string} str - The string to encode. |
|
* |
|
* @returns {string} The encoded string. |
|
*/ |
|
function encode(str) { |
|
const charMap = { |
|
'!': '%21', |
|
"'": '%27', |
|
'(': '%28', |
|
')': '%29', |
|
'~': '%7E', |
|
'%20': '+', |
|
'%00': '\x00' |
|
}; |
|
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { |
|
return charMap[match]; |
|
}); |
|
} |
|
|
|
/** |
|
* It takes a params object and converts it to a FormData object |
|
* |
|
* @param {Object<string, any>} params - The parameters to be converted to a FormData object. |
|
* @param {Object<string, any>} options - The options object passed to the Axios constructor. |
|
* |
|
* @returns {void} |
|
*/ |
|
function AxiosURLSearchParams(params, options) { |
|
this._pairs = []; |
|
|
|
params && toFormData(params, this, options); |
|
} |
|
|
|
const prototype = AxiosURLSearchParams.prototype; |
|
|
|
prototype.append = function append(name, value) { |
|
this._pairs.push([name, value]); |
|
}; |
|
|
|
prototype.toString = function toString(encoder) { |
|
const _encode = encoder ? function(value) { |
|
return encoder.call(this, value, encode); |
|
} : encode; |
|
|
|
return this._pairs.map(function each(pair) { |
|
return _encode(pair[0]) + '=' + _encode(pair[1]); |
|
}, '').join('&'); |
|
}; |
|
|
|
export default AxiosURLSearchParams;
|
|
|