UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

74 lines (73 loc) 2.23 kB
import { generateQueryParams } from '../dom/query.js'; import { isString } from '../guards/primitives.js'; import { parseObjectValues } from '../object/sanitize.js'; export function serializeForm(form, toQueryString = false) { const formData = new FormData(form); const data = {}; formData?.forEach((value, key) => { if (data[key]) { data[key] = Array.isArray(data[key]) ? [...data[key], value.toString()] : [data[key], value.toString()]; } else { data[key] = value.toString(); } }); if (toQueryString) { const queryString = generateQueryParams(data); return queryString; } return data; } export function parseFormData(data, parsePrimitives = true) { const parsed = {}; if (isString(data)) { const params = new URLSearchParams(data); params?.forEach((value, key) => { const existing = parsed[key]; if (isString(existing)) { parsed[key] = [existing, value]; } else if (Array.isArray(existing)) { parsed[key] = [...existing, value]; } else { parsed[key] = value; } }); } else { data?.forEach((value, key) => { const existing = parsed[key]; if (value instanceof File) { if (Array.isArray(existing)) { parsed[key] = [...existing, value]; } else if (existing instanceof File) { parsed[key] = [existing, value]; } else { parsed[key] = value; } } else { if (isString(existing)) { parsed[key] = [existing, value]; } else if (Array.isArray(existing)) { parsed[key] = [...existing, value]; } else { parsed[key] = value; } } }); } if (parsePrimitives) { return parseObjectValues(parsed); } else { return parsed; } }