UNPKG

@multipart/append-field

Version:

[fork] W3C HTML JSON form compliant field appender Written In ES6 And Optimised With JavaScript Compiler.

63 lines (56 loc) 1.5 kB
function valueType (value) { if (value === undefined) return 'undefined' if (Array.isArray(value)) return 'array' if (typeof value == 'object') return 'object' return 'scalar' } function setLastValue(context, step, currentValue, entryValue) { switch (valueType(currentValue)) { case 'undefined': if (step.append) { context[step.key] = [entryValue] } else { context[step.key] = entryValue } break case 'array': context[step.key].push(entryValue) break case 'object': return setLastValue(currentValue, { type: 'object', key: '', last: true }, currentValue[''], entryValue) case 'scalar': context[step.key] = [context[step.key], entryValue] break } return context } export default function setValue(context, step, currentValue, entryValue) { if (step.last) return setLastValue(context, step, currentValue, entryValue) let obj switch (valueType(currentValue)) { case 'undefined': if (step.nextType == 'array') { context[step.key] = [] } else { context[step.key] = {} } return context[step.key] case 'object': return context[step.key] case 'array': if (step.nextType == 'array') { return currentValue } obj = {} context[step.key] = obj currentValue.forEach(function (item, i) { if (item !== undefined) obj['' + i] = item }) return obj case 'scalar': obj = {} obj[''] = currentValue context[step.key] = obj return obj } }