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.
		
		
		
		
		
			
		
			
				
					45 lines
				
				1.0 KiB
			
		
		
			
		
	
	
					45 lines
				
				1.0 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const rx = require('./rx') | ||
|  | 
 | ||
|  | module.exports = parse | ||
|  | 
 | ||
|  | function parse ({ paths }) { | ||
|  |   const wildcards = [] | ||
|  |   var wcLen = 0 | ||
|  |   const secret = paths.reduce(function (o, strPath, ix) { | ||
|  |     var path = strPath.match(rx).map((p) => p.replace(/'|"|`/g, '')) | ||
|  |     const leadingBracket = strPath[0] === '[' | ||
|  |     path = path.map((p) => { | ||
|  |       if (p[0] === '[') return p.substr(1, p.length - 2) | ||
|  |       else return p | ||
|  |     }) | ||
|  |     const star = path.indexOf('*') | ||
|  |     if (star > -1) { | ||
|  |       const before = path.slice(0, star) | ||
|  |       const beforeStr = before.join('.') | ||
|  |       const after = path.slice(star + 1, path.length) | ||
|  |       const nested = after.length > 0 | ||
|  |       wcLen++ | ||
|  |       wildcards.push({ | ||
|  |         before, | ||
|  |         beforeStr, | ||
|  |         after, | ||
|  |         nested | ||
|  |       }) | ||
|  |     } else { | ||
|  |       o[strPath] = { | ||
|  |         path: path, | ||
|  |         val: undefined, | ||
|  |         precensored: false, | ||
|  |         circle: '', | ||
|  |         escPath: JSON.stringify(strPath), | ||
|  |         leadingBracket: leadingBracket | ||
|  |       } | ||
|  |     } | ||
|  |     return o | ||
|  |   }, {}) | ||
|  | 
 | ||
|  |   return { wildcards, wcLen, secret } | ||
|  | } |