UNPKG

@ajoelp/json-to-formdata

Version:

Convert json data to a FormData object

1 lines 3.81 kB
{"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"}