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
JavaScript
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;
}
}