12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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
|