UNPKG

web-ui-pack

Version:
46 lines (45 loc) 1.6 kB
export default function objectToFormData(fromObj, toForm, opts) { toForm ||= new FormData(); const canNulls = opts?.includeNulls ?? false; const isBracketNotation = opts?.bracketNotation ?? false; const useArrayNotation = opts?.arrayNotationForPlainTypes ?? false; function map(v, prop) { if (Array.isArray(v)) { v.forEach((val, index) => { const skipArrNotation = !useArrayNotation && (val == null || typeof val !== "object" || val instanceof Date || val instanceof File); const propWithIndex = skipArrNotation ? prop : `${prop}[${index}]`; map(val, propWithIndex); }); } else if (v == null) { if (canNulls) { toForm.append(prop, ""); } } else if (typeof v === "object") { if (v instanceof Date) { toForm.append(prop, v.toJSON()); } else if (v instanceof File) { toForm.append(prop, v, v.name); } else if (isBracketNotation) { Object.keys(v).forEach((key) => { const s = prop ? `${prop}[${key}]` : key; map(v[key], s); }); } else { Object.keys(v).forEach((key) => { const s = `${prop ? `${prop}.` : ""}${key}`; map(v[key], s); }); } } else { toForm.append(prop, v); } } map(fromObj, ""); return toForm; }