{"version":3,"file":"form-utilities-BwQd8euB.js","sources":["../src/lib/form-utilities.js"],"sourcesContent":["/**\r\n * Roll up all form values into a JS object.\r\n * Allows for nesting via ., ie person.address.street\r\n * Note that duplicate keys will use the last one\r\n * @param {HTMLFormElement} form\r\n */\r\nexport function FormToObject(form) {\r\n const formdata = new FormData(form);\r\n const data = {};\r\n const braceRegex = /{([^}]+)}/;\r\n formdata.forEach((value, key) => {\r\n const input = form.querySelector(\"[name='\" + key + \"'\");\r\n if (input.hasAttribute(\"data-form-helper-json\")) {\r\n // This field has been marked to be interpreted as JSON\r\n value = JSON.parse(value);\r\n }\r\n const parts = key.split(\".\");\r\n let cursor = data;\r\n for (let i = 0; i < parts.length; i++) {\r\n if (i === parts.length - 1) {\r\n cursor[parts[i]] = value;\r\n } else {\r\n const match = braceRegex.exec(parts[i]);\r\n if (match) {\r\n // Special handling for curly braces. A field like Instructions{asdf} will become an array (Instructions[]) with an element { Id = \"asdf\" }\r\n parts[i] = parts[i].substring(0, match.index);\r\n if (!Array.isArray(cursor[parts[i]])) {\r\n cursor[parts[i]] = [];\r\n }\r\n const item = { Id: match[1] };\r\n cursor[parts[i]].push(item);\r\n cursor = item;\r\n } else {\r\n // No braces, handle as normal\r\n if (typeof cursor[parts[i]] !== \"object\") {\r\n cursor[parts[i]] = {};\r\n }\r\n cursor = cursor[parts[i]];\r\n }\r\n }\r\n }\r\n });\r\n return data;\r\n}\r\n"],"names":["FormToObject","form","formdata","FormData","data","braceRegex","forEach","value","key","querySelector","hasAttribute","JSON","parse","parts","split","cursor","i","length","match","exec","substring","index","Array","isArray","item","Id","push","_typeof"],"mappings":"6CAMO,SAASA,EAAaC,GACzB,IAAMC,EAAW,IAAIC,SAASF,GACxBG,EAAO,CAAE,EACTC,EAAa,YAiCnB,OAhCAH,EAASI,SAAQ,SAACC,EAAOC,GACPP,EAAKQ,cAAc,UAAYD,EAAM,KACzCE,aAAa,2BAEnBH,EAAQI,KAAKC,MAAML,IAIvB,IAFA,IAAMM,EAAQL,EAAIM,MAAM,KACpBC,EAASX,EACJY,EAAI,EAAGA,EAAIH,EAAMI,OAAQD,IAC9B,GAAIA,IAAMH,EAAMI,OAAS,EACrBF,EAAOF,EAAMG,IAAMT,MAChB,CACH,IAAMW,EAAQb,EAAWc,KAAKN,EAAMG,IACpC,GAAIE,EAAO,CAEPL,EAAMG,GAAKH,EAAMG,GAAGI,UAAU,EAAGF,EAAMG,OAClCC,MAAMC,QAAQR,EAAOF,EAAMG,OAC5BD,EAAOF,EAAMG,IAAM,IAEvB,IAAMQ,EAAO,CAAEC,GAAIP,EAAM,IACzBH,EAAOF,EAAMG,IAAIU,KAAKF,GACtBT,EAASS,CACb,KAEoC,WAA5BG,EAAOZ,EAAOF,EAAMG,OACpBD,EAAOF,EAAMG,IAAM,CAAE,GAEzBD,EAASA,EAAOF,EAAMG,GAE9B,CAER,IACOZ,CACX"}