UNPKG

envoc-form

Version:

Envoc form components

78 lines (77 loc) 2.79 kB
// Original: https://github.com/therealparmesh/object-to-formdata/blob/master/src/index.js // With Multiple Form File Fix: https://github.com/therealparmesh/object-to-formdata/pull/94/files import { isArray, isBlob, isBoolean, isDate, isFile, isNull, isObject, isUndefined, } from './typeChecks'; // 'pre' is not provided until this function recursively calls itself when 'obj' is an array or object var serialize = function (obj, cfg, fd, pre) { cfg = cfg || {}; cfg.indices = isUndefined(cfg.indices) ? false : cfg.indices; cfg.nullsAsUndefineds = isUndefined(cfg.nullsAsUndefineds) ? false : cfg.nullsAsUndefineds; cfg.booleansAsIntegers = isUndefined(cfg.booleansAsIntegers) ? false : cfg.booleansAsIntegers; cfg.allowEmptyArrays = isUndefined(cfg.allowEmptyArrays) ? false : cfg.allowEmptyArrays; //reverse of normal because we want a different default cfg.dotNotation = isUndefined(cfg.dotNotation) ? true : cfg.dotNotation; fd = fd || new FormData(); if (isUndefined(obj)) { return fd; } else if (isNull(obj) && !!pre) { if (!cfg.nullsAsUndefineds) { fd.append(pre, ''); } } else if (isBoolean(obj) && !!pre) { if (cfg.booleansAsIntegers) { fd.append(pre, obj ? '1' : '0'); } else { fd.append(pre, obj); } } else if (isDate(obj) && !!pre) { fd.append(pre, obj.toISOString()); } else if (isArray(obj)) { if (obj.length) { obj.forEach(function (value, index) { var key; if (cfg.noFileListBrackets && isFile(value)) { key = pre; } else { key = pre + '[' + (cfg.indices ? index : '') + ']'; } serialize(value, cfg, fd, key); }); } else if (cfg.allowEmptyArrays) { fd.append(pre + '[]', ''); } } else if (isObject(obj) && !isFile(obj) && !isBlob(obj)) { Object.keys(obj).forEach(function (prop) { var value = obj[prop]; if (isArray(value)) { while (prop.length > 2 && prop.lastIndexOf('[]') === prop.length - 2) { prop = prop.substring(0, prop.length - 2); } } var key = pre ? cfg.dotNotation ? pre + '.' + prop : pre + '[' + prop + ']' : prop; serialize(value, cfg, fd, key); }); } else if (!!pre) { fd.append(pre, obj); } return fd; }; export default serialize;