You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				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
 |