UNPKG

formap

Version:

HTML forms to data, a better alternative to FormData()

3 lines (2 loc) 1.75 kB
export*from"maps-diff";const e=e=>Object.fromEntries(Array.from(e.keys()).map(t=>{const n=e.getAll(t);return[t,n.length>1?n:e.get(t)]})),t=e=>document.getElementById(e),n=t=>JSON.stringify(e(t)),r=e=>n(new FormData(e)),o=e=>r(t(e)),s=Object.fromEntries,a=(e,t)=>s(i(e,t)),c=(e,n)=>a(t(e),n),l=(e,n)=>i(t(e),n);function i(e,{mutator:t,append:n,prepend:r}={}){if(!(e&&e instanceof HTMLFormElement))throw new Error("The form element must be an HTMLFormElement.");const o=new Map;r&&(r instanceof Map?r.forEach((e,t)=>{o.set(t,e)}):"object"==typeof r&&Object.entries(r).forEach(([e,t])=>{o.set(e,t)}));const s=[...e.querySelectorAll(":is(input, select, textarea)[name]:enabled")],a=s.length;for(let e=0;e<a;e++){const t=s[e];if(!t)continue;if(["submit","button","reset","file"].includes(t.type.toLowerCase()))continue;const n=t.name,r=f(t),a=o.get(n);null!=a?null!=r&&(Array.isArray(a)?(Array.isArray(r)?a.push(...r):a.push(r),o.set(n,a)):Array.isArray(r)?o.set(n,[a,...r]):o.set(n,[a,r])):o.set(n,r)}return n&&(n instanceof Map?n.forEach((e,t)=>{o.set(t,e)}):"object"==typeof n&&Object.entries(n).forEach(([e,t])=>{o.set(e,t)})),t&&o.forEach((e,n)=>{const r=t(n,e);void 0===r?o.delete(n):r!==e&&o.set(n,r)}),o}function f(e){if("getValue"in e&&"function"==typeof e.getValue)return e.getValue();let t=e.value;return e instanceof HTMLSelectElement&&e.multiple&&(t=Array.from(e.selectedOptions).map(e=>e.value)),e instanceof HTMLInputElement&&["checkbox","radio"].includes(e.type.toLowerCase())&&(t=e.checked?t:null),t}export{t as formById,n as formDataToJson,e as formDataToObject,r as formToJson,o as formToJsonById,i as formToMap,l as formToMapById,a as formToObject,c as formToObjectById,s as mapToObject}; //# sourceMappingURL=index.modern.js.map