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
			| 
								 
											3 years ago
										 
									 | 
							
								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
							 |