UNPKG

envoc-form

Version:

Envoc form components

80 lines (79 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // 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 var typeChecks_1 = require("./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 = (0, typeChecks_1.isUndefined)(cfg.indices) ? false : cfg.indices; cfg.nullsAsUndefineds = (0, typeChecks_1.isUndefined)(cfg.nullsAsUndefineds) ? false : cfg.nullsAsUndefineds; cfg.booleansAsIntegers = (0, typeChecks_1.isUndefined)(cfg.booleansAsIntegers) ? false : cfg.booleansAsIntegers; cfg.allowEmptyArrays = (0, typeChecks_1.isUndefined)(cfg.allowEmptyArrays) ? false : cfg.allowEmptyArrays; //reverse of normal because we want a different default cfg.dotNotation = (0, typeChecks_1.isUndefined)(cfg.dotNotation) ? true : cfg.dotNotation; fd = fd || new FormData(); if ((0, typeChecks_1.isUndefined)(obj)) { return fd; } else if ((0, typeChecks_1.isNull)(obj) && !!pre) { if (!cfg.nullsAsUndefineds) { fd.append(pre, ''); } } else if ((0, typeChecks_1.isBoolean)(obj) && !!pre) { if (cfg.booleansAsIntegers) { fd.append(pre, obj ? '1' : '0'); } else { fd.append(pre, obj); } } else if ((0, typeChecks_1.isDate)(obj) && !!pre) { fd.append(pre, obj.toISOString()); } else if ((0, typeChecks_1.isArray)(obj)) { if (obj.length) { obj.forEach(function (value, index) { var key; if (cfg.noFileListBrackets && (0, typeChecks_1.isFile)(value)) { key = pre; } else { key = pre + '[' + (cfg.indices ? index : '') + ']'; } serialize(value, cfg, fd, key); }); } else if (cfg.allowEmptyArrays) { fd.append(pre + '[]', ''); } } else if ((0, typeChecks_1.isObject)(obj) && !(0, typeChecks_1.isFile)(obj) && !(0, typeChecks_1.isBlob)(obj)) { Object.keys(obj).forEach(function (prop) { var value = obj[prop]; if ((0, typeChecks_1.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; }; exports.default = serialize;