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 } function setValue (context, step, currentValue, entryValue) { if (step.last) return setLastValue(context, step, currentValue, entryValue) var obj switch (valueType(currentValue)) { case 'undefined': if (step.nextType === 'array') { context[step.key] = [] } else { context[step.key] = Object.create(null) } return context[step.key] case 'object': return context[step.key] case 'array': if (step.nextType === 'array') { return currentValue } obj = Object.create(null) context[step.key] = obj currentValue.forEach(function (item, i) { if (item !== undefined) obj['' + i] = item }) return obj case 'scalar': obj = Object.create(null) obj[''] = currentValue context[step.key] = obj return obj } } module.exports = setValue