56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
function combinedKey(parentKey, elKey) {
|
|
return parentKey + '.' + elKey;
|
|
}
|
|
|
|
function buildFormData(formData, data, parentKey) {
|
|
if (Array.isArray(data)) {
|
|
data.forEach(function buildArray(el, i) {
|
|
buildFormData(formData, el, combinedKey(parentKey, i));
|
|
});
|
|
} else if (
|
|
typeof data === 'object' &&
|
|
!(data instanceof File || data === null)
|
|
) {
|
|
Object.keys(data).forEach(function buildObject(key) {
|
|
buildFormData(
|
|
formData,
|
|
data[key],
|
|
parentKey ? combinedKey(parentKey, key) : key
|
|
);
|
|
});
|
|
} else {
|
|
if (data === undefined) {
|
|
return;
|
|
}
|
|
|
|
var value =
|
|
typeof data === 'boolean' || typeof data === 'number'
|
|
? data.toString()
|
|
: data;
|
|
formData.append(parentKey, value);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* convert a data object to FormData
|
|
*
|
|
* type FormDataPrimitive = string | Blob | number | boolean
|
|
* interface FormDataNest {
|
|
* [x: string]: FormVal
|
|
* }
|
|
*
|
|
* type FormVal = FormDataNest | FormDataPrimitive
|
|
*
|
|
* @param {FormVal} data
|
|
*/
|
|
|
|
module.exports = function getFormData(data) {
|
|
var formData = new FormData();
|
|
|
|
buildFormData(formData, data);
|
|
|
|
return formData;
|
|
};
|