export default function (form: HTMLFormElement, hook?: (...args: ANY[]) => ANY) { const result = {} for (const element of form.elements as unknown as HTMLInputElement[]) { const { checked, name, type, value } = element if ( (!hook || !hook(result, name, value, element)) && name && value && (checked || (type !== 'checkbox' && type !== 'radio')) ) { if ( type === 'range' && ((element.dataset.lower && element.min === value) || (!element.dataset.lower && element.max === value)) ) continue if (result[name]) { const arr = Array.isArray(result[name]) ? result[name] : [result[name]] arr.push(value) result[name] = arr } else { result[name] = value } } } return result }