@ajoelp/json-to-formdata
Version:
Convert json data to a FormData object
1 lines • 3.81 kB
Source Map (JSON)
{"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"}