integreat-adapter-form
Version:
application/x-www-form-urlencoded adapter for Integreat
35 lines • 1.32 kB
JavaScript
import { isObject, isDate } from './is.js';
const formatObject = (value) => isObject(value)
? JSON.stringify(value)
: isDate(value)
? value.toISOString()
: String(value);
const fixLineBreak = (value) => typeof value === 'string' ? value.replace(/(^|[^\r])\n/g, '$1\r\n') : value;
const formatValue = (value) => encodeURIComponent(formatObject(fixLineBreak(value))).replace(/%20/g, '+');
const formatKeyValue = (key, value) => value === undefined ? '' : `${key}=${formatValue(value)}`;
function moveStructureToKeys([key, value]) {
if (Array.isArray(value) || isObject(value)) {
return Object.entries(value).flatMap(([k, v]) => moveStructureToKeys([`${key}[${k}]`, v]));
}
else {
return formatKeyValue(key, value);
}
}
function mapEntry([key, value]) {
if (Array.isArray(value)) {
return value.map((val) => formatKeyValue(`${key}[]`, val));
}
else {
return formatKeyValue(key, value);
}
}
export default function stringifyFormData(data, setStructureInKeys = false) {
if (isObject(data)) {
const fn = setStructureInKeys ? moveStructureToKeys : mapEntry;
return Object.entries(data).flatMap(fn).filter(Boolean).join('&');
}
else {
return undefined;
}
}
//# sourceMappingURL=stringifyFormData.js.map