65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| 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
 |