{"version":3,"file":"index.modern.mjs","sources":["../src/index.ts"],"sourcesContent":["import isObject from 'lodash/isObject';\nimport isArray from 'lodash/isArray';\nimport Options from './models/Options';\n\nconst isBlob = (value) => value instanceof Blob;\nconst isFile = (value) => value instanceof File;\nconst isBoolean = (value) => typeof value === 'boolean';\nconst isNull = (value) => value === null;\nconst isUndefined = (value) => value === undefined;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst processData = (value: any, options: Options, formData: FormData, parent?: string) => {\n  const processedKey = parent || '';\n\n  if (isNull(value) || isUndefined(value)) {\n    if (!options.excludeNull) {\n      formData.append(processedKey, '');\n    }\n    return;\n  }\n\n  if (isFile(value)) {\n    formData.append(processedKey, value);\n    return;\n  }\n\n  if (isBlob(value)) {\n    formData.append(processedKey, value);\n    return;\n  }\n\n  if (isArray(value)) {\n    value.forEach((item, index) => {\n      let computedKey = processedKey;\n      if(options.useBrackets){\n        computedKey += `[${options.arrayIndexes ? index : ''}]`\n      }\n      processData(item, options, formData, computedKey);\n    });\n    return;\n  }\n\n  if (isObject(value)) {\n    Object.entries(value).forEach(([key, data]) => {\n      let computedKey = key;\n      if (parent) {\n        computedKey = options.useDotSeparator\n          ? `${parent}.${key}`\n          : `${parent}[${key}]`;\n      }\n      processData(data, options, formData, computedKey);\n    });\n    return;\n  }\n\n  if (isBoolean(value)) {\n    if (options.booleanAsNumbers) {\n      formData.append(processedKey, `${Number(value)}`);\n    } else {\n      formData.append(processedKey, value ? 'true' : 'false');\n    }\n\n    return;\n  }\n\n  formData.append(processedKey, value);\n};\n\nconst defaultOptions: Options = {\n  arrayIndexes: true,\n  excludeNull: true,\n  useDotSeparator: false,\n  useBrackets: true,\n  booleanAsNumbers: false,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst objectToFormData = (payload: any, options: Partial<Options> = {}, formData: FormData = new FormData()) => {\n  if (!payload) return formData;\n\n  options = Object.assign({}, defaultOptions, options);\n\n  processData(payload, options as Options, formData);\n\n  return formData;\n};\n\nexport default objectToFormData;\n"],"names":["processData","value","options","formData","parent","processedKey","isNull","undefined","isUndefined","excludeNull","append","File","isFile","Blob","isBlob","isArray","forEach","item","index","computedKey","useBrackets","arrayIndexes","isObject","Object","entries","key","data","useDotSeparator","isBoolean","booleanAsNumbers","Number","defaultOptions","objectToFormData","payload","FormData","assign"],"mappings":"6DAIA,MAOMA,EAAc,CAACC,EAAYC,EAAkBC,EAAoBC,KACrE,MAAMC,EAAeD,GAAU,GALjBH,CAAAA,GAAoB,OAAVA,EAOpBK,CAAOL,IANQA,CAAAA,QAAoBM,IAAVN,EAMRO,CAAYP,GAC1BC,EAAQO,aACXN,EAASO,OAAOL,EAAc,IAXpBJ,CAAAA,GAAUA,aAAiBU,KAgBrCC,CAAOX,IAjBGA,CAAAA,GAAUA,aAAiBY,KAsBrCC,CAAOb,GAJTE,EAASO,OAAOL,EAAcJ,GAS5Bc,EAAQd,GACVA,EAAMe,QAAQ,CAACC,EAAMC,KACnB,IAAIC,EAAcd,EACfH,EAAQkB,cACTD,OAAmBjB,EAAQmB,aAAeH,EAAQ,OAEpDlB,EAAYiB,EAAMf,EAASC,EAAUgB,KAKrCG,EAASrB,GACXsB,OAAOC,QAAQvB,GAAOe,QAAQ,EAAES,EAAKC,MACnC,IAAIP,EAAcM,EACdrB,IACFe,EAAcjB,EAAQyB,mBACfvB,KAAUqB,OACVrB,KAAUqB,MAEnBzB,EAAY0B,EAAMxB,EAASC,EAAUgB,KA5CxBlB,CAAAA,GAA2B,kBAAVA,EAiD9B2B,CAAU3B,GAEVE,EAASO,OAAOL,EADdH,EAAQ2B,oBACuBC,OAAO7B,KAEVA,EAAQ,OAAS,SAMnDE,EAASO,OAAOL,EAAcJ,IAG1B8B,EAA0B,CAC9BV,cAAc,EACdZ,aAAa,EACbkB,iBAAiB,EACjBP,aAAa,EACbS,kBAAkB,GAIdG,EAAmB,CAACC,EAAc/B,EAA4B,GAAIC,EAAqB,IAAI+B,WAC1FD,GAEL/B,EAAUqB,OAAOY,OAAO,GAAIJ,EAAgB7B,GAE5CF,EAAYiC,EAAS/B,EAAoBC,GAElCA,GANcA"}