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.
		
		
		
		
		
			
		
			
				
					
					
						
							48 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							48 lines
						
					
					
						
							1.4 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
module.exports = function stringToParts(str) {
 | 
						|
  const result = [];
 | 
						|
 | 
						|
  let curPropertyName = '';
 | 
						|
  let state = 'DEFAULT';
 | 
						|
  for (let i = 0; i < str.length; ++i) {
 | 
						|
    // Fall back to treating as property name rather than bracket notation if
 | 
						|
    // square brackets contains something other than a number.
 | 
						|
    if (state === 'IN_SQUARE_BRACKETS' && !/\d/.test(str[i]) && str[i] !== ']') {
 | 
						|
      state = 'DEFAULT';
 | 
						|
      curPropertyName = result[result.length - 1] + '[' + curPropertyName;
 | 
						|
      result.splice(result.length - 1, 1);
 | 
						|
    }
 | 
						|
 | 
						|
    if (str[i] === '[') {
 | 
						|
      if (state !== 'IMMEDIATELY_AFTER_SQUARE_BRACKETS') {
 | 
						|
        result.push(curPropertyName);
 | 
						|
        curPropertyName = '';
 | 
						|
      }
 | 
						|
      state = 'IN_SQUARE_BRACKETS';
 | 
						|
    } else if (str[i] === ']') {
 | 
						|
      if (state === 'IN_SQUARE_BRACKETS') {
 | 
						|
        state = 'IMMEDIATELY_AFTER_SQUARE_BRACKETS';
 | 
						|
        result.push(curPropertyName);
 | 
						|
        curPropertyName = '';
 | 
						|
      } else {
 | 
						|
        state = 'DEFAULT';
 | 
						|
        curPropertyName += str[i];
 | 
						|
      }
 | 
						|
    } else if (str[i] === '.') {
 | 
						|
      if (state !== 'IMMEDIATELY_AFTER_SQUARE_BRACKETS') {
 | 
						|
        result.push(curPropertyName);
 | 
						|
        curPropertyName = '';
 | 
						|
      }
 | 
						|
      state = 'DEFAULT';
 | 
						|
    } else {
 | 
						|
      curPropertyName += str[i];
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (state !== 'IMMEDIATELY_AFTER_SQUARE_BRACKETS') {
 | 
						|
    result.push(curPropertyName);
 | 
						|
  }
 | 
						|
 | 
						|
  return result;
 | 
						|
}; |