UNPKG

integreat-adapter-form

Version:

application/x-www-form-urlencoded adapter for Integreat

35 lines 1.32 kB
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