UNPKG

formap

Version:

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

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