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 }
							 | 
						||
| 
								 | 
							
								}
							 |