{"version":3,"file":"dom-form-serializer.mjs","sources":["../lib/TypeRegistry.js","../lib/KeyExtractors.js","../lib/InputReaders.js","../lib/KeyAssignmentValidators.js","../lib/keySplitter.js","../lib/getElementType.js","../lib/getInputElements.js","../lib/assignKeyValue.js","../lib/serialize.js","../lib/InputWriters.js","../lib/keyJoiner.js","../lib/flattenData.js","../lib/deserialize.js"],"sourcesContent":["export default class TypeRegistry {\n  constructor (initial = {}) {\n    this.registeredTypes = initial\n  }\n\n  get (type) {\n    if (typeof this.registeredTypes[type] !== 'undefined') {\n      return this.registeredTypes[type]\n    } else {\n      return this.registeredTypes.default\n    }\n  }\n\n  register (type, item) {\n    if (typeof this.registeredTypes[type] === 'undefined') {\n      this.registeredTypes[type] = item\n    }\n  }\n\n  registerDefault (item) {\n    this.register('default', item)\n  }\n}\n","import TypeRegistry from './TypeRegistry'\n\nexport default class KeyExtractors extends TypeRegistry {\n  constructor (options) {\n    super(options)\n    this.registerDefault(el => (el.getAttribute('name') || ''))\n  }\n}\n","import TypeRegistry from './TypeRegistry'\n\nexport default class InputReaders extends TypeRegistry {\n  constructor (options) {\n    super(options)\n    this.registerDefault(el => el.value)\n    this.register('checkbox', el => el.getAttribute('value') !== null ? (el.checked ? el.getAttribute('value') : null) : el.checked)\n    this.register('select', el => getSelectValue(el))\n  }\n}\n\n/**\n * Read select values\n *\n * @see {@link https://github.com/jquery/jquery/blob/master/src/attributes/val.js|Github}\n * @param {object} Select element\n * @return {string|Array} Select value(s)\n */\nfunction getSelectValue (elem) {\n  let value, option, i\n  const options = elem.options\n  const index = elem.selectedIndex\n  const one = elem.type === 'select-one'\n  const values = one ? null : []\n  const max = one ? index + 1 : options.length\n\n  if (index < 0) {\n    i = max\n  } else {\n    i = one ? index : 0\n  }\n\n  // Loop through all the selected options\n  for (; i < max; i++) {\n    option = options[i]\n\n    // Support: IE <=9 only\n    // IE8-9 doesn't update selected after form reset\n    if ((option.selected || i === index) &&\n\n        // Don't return options that are disabled or in a disabled optgroup\n        !option.disabled &&\n        !(option.parentNode.disabled && option.parentNode.tagName.toLowerCase() === 'optgroup')\n    ) {\n      // Get the specific value for the option\n      value = option.value\n\n      // We don't need an array for one selects\n      if (one) {\n        return value\n      }\n\n      // Multi-Selects return an array\n      values.push(value)\n    }\n  }\n\n  return values\n}\n","import TypeRegistry from './TypeRegistry'\n\nexport default class KeyAssignmentValidators extends TypeRegistry {\n  constructor (options) {\n    super(options)\n    this.registerDefault(() => true)\n    this.register('radio', (el) => el.checked)\n  }\n}\n","export default function keySplitter (key) {\n  const matches = key.match(/[^[\\]]+/g)\n  let lastKey\n  if (key.length > 1 && key.indexOf('[]') === key.length - 2) {\n    lastKey = matches.pop()\n    matches.push([lastKey])\n  }\n  return matches\n}\n","export default function getElementType (el) {\n  let typeAttr\n  const tagName = el.tagName\n  let type = tagName\n  if (tagName.toLowerCase() === 'input') {\n    typeAttr = el.getAttribute('type')\n    if (typeAttr) {\n      type = typeAttr\n    } else {\n      type = 'text'\n    }\n  }\n  return type.toLowerCase()\n}\n","import getElementType from './getElementType'\n\nexport default function getInputElements (element, options) {\n  return Array.prototype.filter.call(\n    element.querySelectorAll('input,select,textarea'),\n    (el) => {\n      if (el.tagName.toLowerCase() === 'input' && (el.type === 'submit' || el.type === 'reset')) {\n        return false\n      }\n      const myType = getElementType(el)\n      const extractor = options.keyExtractors.get(myType)\n      const identifier = extractor(el)\n      const foundInInclude = (options.include || []).indexOf(identifier) !== -1\n      const foundInExclude = (options.exclude || []).indexOf(identifier) !== -1\n      let foundInIgnored = false\n      let reject = false\n\n      if (options.ignoredTypes) {\n        for (const selector of options.ignoredTypes) {\n          if (el.matches(selector)) {\n            foundInIgnored = true\n          }\n        }\n      }\n\n      if (foundInInclude) {\n        reject = false\n      } else {\n        if (options.include) {\n          reject = true\n        } else {\n          reject = (foundInExclude || foundInIgnored)\n        }\n      }\n\n      return !reject\n    }\n  )\n}\n","const UNSAFE_KEYS = ['__proto__', 'constructor', 'prototype']\n\nexport default function assignKeyValue (obj, keychain, value) {\n  if (!keychain) { return obj }\n\n  const key = keychain.shift()\n\n  // Refuse to walk into prototype-pollution sinks.\n  if (UNSAFE_KEYS.indexOf(key) !== -1) { return obj }\n\n  // build the current object we need to store data\n  if (!obj[key]) {\n    obj[key] = Array.isArray(key) ? [] : {}\n  }\n\n  // if it's the last key in the chain, assign the value directly\n  if (keychain.length === 0) {\n    if (!Array.isArray(obj[key])) {\n      obj[key] = value\n    } else if (value !== null) {\n      obj[key].push(value)\n    }\n  }\n\n  // recursive parsing of the array, depth-first\n  if (keychain.length > 0) {\n    assignKeyValue(obj[key], keychain, value)\n  }\n\n  return obj\n}\n","import KeyExtractors from './KeyExtractors'\nimport InputReaders from './InputReaders'\nimport KeyAssignmentValidators from './KeyAssignmentValidators'\nimport defaultKeySplitter from './keySplitter'\nimport getInputElements from './getInputElements'\nimport getElementType from './getElementType'\nimport assignKeyValue from './assignKeyValue'\n\n/**\n * Get a JSON object that represents all of the form inputs, in this element.\n *\n * @param {HTMLElement} Root element\n * @param {object} options\n * @param {object} options.inputReaders\n * @param {object} options.keyAssignmentValidators\n * @param {object} options.keyExtractors\n * @param {object} options.keySplitter\n * @param {string[]} options.include\n * @param {string[]} options.exclude\n * @param {string[]} options.ignoredTypes\n * @return {object}\n */\nexport default function serialize (element, options = {}) {\n  let data = {}\n  options.keySplitter = options.keySplitter || defaultKeySplitter\n  options.keyExtractors = new KeyExtractors(options.keyExtractors || {})\n  options.inputReaders = new InputReaders(options.inputReaders || {})\n  options.keyAssignmentValidators = new KeyAssignmentValidators(options.keyAssignmentValidators || {})\n\n  Array.prototype.forEach.call(\n    getInputElements(element, options),\n    (el) => {\n      const type = getElementType(el)\n      const keyExtractor = options.keyExtractors.get(type)\n      const key = keyExtractor(el)\n      const inputReader = options.inputReaders.get(type)\n      const value = inputReader(el)\n      const validKeyAssignment = options.keyAssignmentValidators.get(type)\n      if (validKeyAssignment(el, key, value)) {\n        const keychain = options.keySplitter(key)\n        data = assignKeyValue(data, keychain, value)\n      }\n    }\n  )\n\n  return data\n}\n","import TypeRegistry from './TypeRegistry'\n\nexport default class InputWriters extends TypeRegistry {\n  constructor (options) {\n    super(options)\n    this.registerDefault((el, value) => { el.value = value })\n    this.register('checkbox', (el, value) => {\n      if (value === null) {\n        el.indeterminate = true\n      } else {\n        el.checked = Array.isArray(value) ? value.indexOf(el.value) !== -1 : value\n      }\n    })\n    this.register('radio', function (el, value) {\n      if (value !== undefined) {\n        el.checked = el.value === value.toString()\n      }\n    })\n    this.register('select', setSelectValue)\n  }\n}\n\nfunction makeArray (arr) {\n  const ret = []\n  if (arr !== null) {\n    if (Array.isArray(arr)) {\n      ret.push.apply(ret, arr)\n    } else {\n      ret.push(arr)\n    }\n  }\n  return ret\n}\n\n/**\n * Write select values\n *\n * @see {@link https://github.com/jquery/jquery/blob/master/src/attributes/val.js|Github}\n * @param {object} Select element\n * @param {string|array} Select value\n */\nfunction setSelectValue (elem, value) {\n  let optionSet, option\n  const options = elem.options\n  const values = makeArray(value)\n  let i = options.length\n\n  while (i--) {\n    option = options[i]\n    /* eslint-disable no-cond-assign */\n    if (values.indexOf(option.value) > -1) {\n      option.setAttribute('selected', true)\n      optionSet = true\n    }\n    /* eslint-enable no-cond-assign */\n  }\n\n  // Force browsers to behave consistently when non-matching value is set\n  if (!optionSet) {\n    elem.selectedIndex = -1\n  }\n}\n","export default function keyJoiner (parentKey, childKey) {\n  return parentKey + '[' + childKey + ']'\n}\n","import defaultKeyJoiner from './keyJoiner'\n\nexport default function flattenData (data, parentKey, options = {}) {\n  const flatData = {}\n  const keyJoiner = options.keyJoiner || defaultKeyJoiner\n\n  for (let keyName in data) {\n    if (!Object.prototype.hasOwnProperty.call(data, keyName)) {\n      continue\n    }\n\n    const value = data[keyName]\n    let hash = {}\n\n    // If there is a parent key, join it with\n    // the current, child key.\n    if (parentKey) {\n      keyName = keyJoiner(parentKey, keyName)\n    }\n\n    if (Array.isArray(value)) {\n      hash[keyName + '[]'] = value\n      hash[keyName] = value\n    } else if (typeof value === 'object') {\n      hash = flattenData(value, keyName, options)\n    } else {\n      hash[keyName] = value\n    }\n\n    Object.assign(flatData, hash)\n  }\n\n  return flatData\n}\n","import KeyExtractors from './KeyExtractors'\nimport InputWriters from './InputWriters'\nimport flattenData from './flattenData'\nimport getInputElements from './getInputElements'\nimport getElementType from './getElementType'\n\n/**\n * Use the given JSON object to populate all of the form inputs, in this element.\n *\n * @param {HTMLElement} Root element\n * @param {object} options\n * @param {object} options.inputWriters\n * @param {object} options.keyExtractors\n * @param {object} options.keySplitter\n * @param {string[]} options.include\n * @param {string[]} options.exclude\n * @param {string[]} options.ignoredTypes\n */\nexport default function deserialize (form, data, options = {}) {\n  const flattenedData = flattenData(data, null, options)\n  options.keyExtractors = new KeyExtractors(options.keyExtractors || {})\n  options.inputWriters = new InputWriters(options.inputWriters || {})\n\n  Array.prototype.forEach.call(\n    getInputElements(form, options),\n    (el) => {\n      const type = getElementType(el)\n\n      const keyExtractor = options.keyExtractors.get(type)\n      const key = keyExtractor(el)\n\n      const inputWriter = options.inputWriters.get(type)\n      const value = flattenedData[key]\n\n      inputWriter(el, value)\n    }\n  )\n}\n"],"names":["TypeRegistry","constructor","initial","arguments","length","undefined","registeredTypes","get","type","default","register","item","registerDefault","KeyExtractors","options","el","getAttribute","InputReaders","value","checked","getSelectValue","elem","option","i","index","selectedIndex","one","values","max","selected","disabled","parentNode","tagName","toLowerCase","push","KeyAssignmentValidators","keySplitter","key","matches","match","lastKey","indexOf","pop","getElementType","typeAttr","getInputElements","element","Array","prototype","filter","call","querySelectorAll","myType","extractor","keyExtractors","identifier","foundInInclude","include","foundInExclude","exclude","foundInIgnored","reject","ignoredTypes","selector","UNSAFE_KEYS","assignKeyValue","obj","keychain","shift","isArray","serialize","data","defaultKeySplitter","inputReaders","keyAssignmentValidators","forEach","keyExtractor","inputReader","validKeyAssignment","InputWriters","indeterminate","toString","setSelectValue","makeArray","arr","ret","apply","optionSet","setAttribute","keyJoiner","parentKey","childKey","flattenData","flatData","defaultKeyJoiner","keyName","Object","hasOwnProperty","hash","assign","deserialize","form","flattenedData","inputWriters","inputWriter"],"mappings":"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"}