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.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.1 KiB
						
					
					
				var reFirstKey = /^[^\[]*/
 | 
						|
var reDigitPath = /^\[(\d+)\]/
 | 
						|
var reNormalPath = /^\[([^\]]+)\]/
 | 
						|
 | 
						|
function parsePath (key) {
 | 
						|
  function failure () {
 | 
						|
    return [{ type: 'object', key: key, last: true }]
 | 
						|
  }
 | 
						|
 | 
						|
  var firstKey = reFirstKey.exec(key)[0]
 | 
						|
  if (!firstKey) return failure()
 | 
						|
 | 
						|
  var len = key.length
 | 
						|
  var pos = firstKey.length
 | 
						|
  var tail = { type: 'object', key: firstKey }
 | 
						|
  var steps = [tail]
 | 
						|
 | 
						|
  while (pos < len) {
 | 
						|
    var m
 | 
						|
 | 
						|
    if (key[pos] === '[' && key[pos + 1] === ']') {
 | 
						|
      pos += 2
 | 
						|
      tail.append = true
 | 
						|
      if (pos !== len) return failure()
 | 
						|
      continue
 | 
						|
    }
 | 
						|
 | 
						|
    m = reDigitPath.exec(key.substring(pos))
 | 
						|
    if (m !== null) {
 | 
						|
      pos += m[0].length
 | 
						|
      tail.nextType = 'array'
 | 
						|
      tail = { type: 'array', key: parseInt(m[1], 10) }
 | 
						|
      steps.push(tail)
 | 
						|
      continue
 | 
						|
    }
 | 
						|
 | 
						|
    m = reNormalPath.exec(key.substring(pos))
 | 
						|
    if (m !== null) {
 | 
						|
      pos += m[0].length
 | 
						|
      tail.nextType = 'object'
 | 
						|
      tail = { type: 'object', key: m[1] }
 | 
						|
      steps.push(tail)
 | 
						|
      continue
 | 
						|
    }
 | 
						|
 | 
						|
    return failure()
 | 
						|
  }
 | 
						|
 | 
						|
  tail.last = true
 | 
						|
  return steps
 | 
						|
}
 | 
						|
 | 
						|
module.exports = parsePath
 |