nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
78 lines (77 loc) • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeForm = serializeForm;
exports.parseFormData = parseFormData;
const query_1 = require("../dom/query");
const primitives_1 = require("../guards/primitives");
const sanitize_1 = require("../object/sanitize");
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 = (0, query_1.generateQueryParams)(data);
return queryString;
}
return data;
}
function parseFormData(data, parsePrimitives = true) {
const parsed = {};
if ((0, primitives_1.isString)(data)) {
const params = new URLSearchParams(data);
params?.forEach((value, key) => {
const existing = parsed[key];
if ((0, primitives_1.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 ((0, primitives_1.isString)(existing)) {
parsed[key] = [existing, value];
}
else if (Array.isArray(existing)) {
parsed[key] = [...existing, value];
}
else {
parsed[key] = value;
}
}
});
}
if (parsePrimitives) {
return (0, sanitize_1.parseObjectValues)(parsed);
}
else {
return parsed;
}
}