| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- 'use strict';
 
- import utils from '../utils.js';
 
- /**
 
-  * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
 
-  *
 
-  * @param {string} name - The name of the property to get.
 
-  *
 
-  * @returns An array of strings.
 
-  */
 
- function parsePropPath(name) {
 
-   // foo[x][y][z]
 
-   // foo.x.y.z
 
-   // foo-x-y-z
 
-   // foo x y z
 
-   return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => {
 
-     return match[0] === '[]' ? '' : match[1] || match[0];
 
-   });
 
- }
 
- /**
 
-  * Convert an array to an object.
 
-  *
 
-  * @param {Array<any>} arr - The array to convert to an object.
 
-  *
 
-  * @returns An object with the same keys and values as the array.
 
-  */
 
- function arrayToObject(arr) {
 
-   const obj = {};
 
-   const keys = Object.keys(arr);
 
-   let i;
 
-   const len = keys.length;
 
-   let key;
 
-   for (i = 0; i < len; i++) {
 
-     key = keys[i];
 
-     obj[key] = arr[key];
 
-   }
 
-   return obj;
 
- }
 
- /**
 
-  * It takes a FormData object and returns a JavaScript object
 
-  *
 
-  * @param {string} formData The FormData object to convert to JSON.
 
-  *
 
-  * @returns {Object<string, any> | null} The converted object.
 
-  */
 
- function formDataToJSON(formData) {
 
-   function buildPath(path, value, target, index) {
 
-     let name = path[index++];
 
-     if (name === '__proto__') return true;
 
-     const isNumericKey = Number.isFinite(+name);
 
-     const isLast = index >= path.length;
 
-     name = !name && utils.isArray(target) ? target.length : name;
 
-     if (isLast) {
 
-       if (utils.hasOwnProp(target, name)) {
 
-         target[name] = [target[name], value];
 
-       } else {
 
-         target[name] = value;
 
-       }
 
-       return !isNumericKey;
 
-     }
 
-     if (!target[name] || !utils.isObject(target[name])) {
 
-       target[name] = [];
 
-     }
 
-     const result = buildPath(path, value, target[name], index);
 
-     if (result && utils.isArray(target[name])) {
 
-       target[name] = arrayToObject(target[name]);
 
-     }
 
-     return !isNumericKey;
 
-   }
 
-   if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {
 
-     const obj = {};
 
-     utils.forEachEntry(formData, (name, value) => {
 
-       buildPath(parsePropPath(name), value, obj, 0);
 
-     });
 
-     return obj;
 
-   }
 
-   return null;
 
- }
 
- export default formDataToJSON;
 
 
  |