(function() { let api htmx.defineExtension('json-enc', { init: function(apiRef) { api = apiRef }, onEvent: function(name, evt) { if (name === 'htmx:configRequest') { evt.detail.headers['Content-Type'] = 'application/json' } }, encodeParameters: function(xhr, parameters, elt) { xhr.overrideMimeType('text/json') const vals = api.getExpressionVars(elt) const object = {} parameters.forEach(function(value, key) { // FormData encodes values as strings, restore hx-vals/hx-vars with their initial types const typedValue = Object.hasOwn(vals, key) ? vals[key] : value if (Object.hasOwn(object, key)) { if (!Array.isArray(object[key])) { object[key] = [object[key]] } object[key].push(typedValue) } else { object[key] = typedValue } }) return (JSON.stringify(object)) } }) })()