{"version":3,"file":"index.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","useDotSeparator","isBoolean","booleanAsNumbers","Number","defaultOptions","objectToFormData","payload","FormData","assign"],"mappings":"6DAIA,IAOMA,EAAc,SAAdA,EAAeC,EAAYC,EAAkBC,EAAoBC,GACrE,IAAMC,EAAeD,GAAU,IALlB,SAACH,UAAoB,OAAVA,GAOpBK,CAAOL,IANO,SAACA,eAAoBM,IAAVN,EAMRO,CAAYP,GAC1BC,EAAQO,aACXN,EAASO,OAAOL,EAAc,IAXrB,SAACJ,UAAUA,aAAiBU,KAgBrCC,CAAOX,IAjBE,SAACA,UAAUA,aAAiBY,KAsBrCC,CAAOb,GAJTE,EAASO,OAAOL,EAAcJ,GAS5Bc,EAAQd,GACVA,EAAMe,QAAQ,SAACC,EAAMC,GACnB,IAAIC,EAAcd,EACfH,EAAQkB,cACTD,QAAmBjB,EAAQmB,aAAeH,EAAQ,SAEpDlB,EAAYiB,EAAMf,EAASC,EAAUgB,KAKrCG,EAASrB,GACXsB,OAAOC,QAAQvB,GAAOe,QAAQ,gBAAES,OAC1BN,EAAcM,EACdrB,IACFe,EAAcjB,EAAQwB,gBACftB,MAAUqB,EACVrB,MAAUqB,OAEnBzB,OAAkBE,EAASC,EAAUgB,KA5CzB,SAAClB,SAA2B,kBAAVA,EAiD9B0B,CAAU1B,GAEVE,EAASO,OAAOL,EADdH,EAAQ0B,oBACuBC,OAAO5B,GAEVA,EAAQ,OAAS,SAMnDE,EAASO,OAAOL,EAAcJ,IAG1B6B,EAA0B,CAC9BT,cAAc,EACdZ,aAAa,EACbiB,iBAAiB,EACjBN,aAAa,EACbQ,kBAAkB,GAIdG,EAAmB,SAACC,EAAc9B,EAAgCC,GACtE,gBADsCD,IAAAA,EAA4B,aAAIC,IAAAA,EAAqB,IAAI8B,UAC1FD,GAEL9B,EAAUqB,OAAOW,OAAO,GAAIJ,EAAgB5B,GAE5CF,EAAYgC,EAAS9B,EAAoBC,GAElCA,GANcA"}