Spaces:
Sleeping
Sleeping
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 | |