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.
		
		
		
		
		
			
		
			
				
					33 lines
				
				685 B
			
		
		
			
		
	
	
					33 lines
				
				685 B
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Convert a string or array into a projection object, retaining all | ||
|  |  * `-` and `+` paths. | ||
|  |  */ | ||
|  | 
 | ||
|  | module.exports = function parseProjection(v, retainMinusPaths) { | ||
|  |   const type = typeof v; | ||
|  | 
 | ||
|  |   if (type === 'string') { | ||
|  |     v = v.split(/\s+/); | ||
|  |   } | ||
|  |   if (!Array.isArray(v) && Object.prototype.toString.call(v) !== '[object Arguments]') { | ||
|  |     return v; | ||
|  |   } | ||
|  | 
 | ||
|  |   const len = v.length; | ||
|  |   const ret = {}; | ||
|  |   for (let i = 0; i < len; ++i) { | ||
|  |     let field = v[i]; | ||
|  |     if (!field) { | ||
|  |       continue; | ||
|  |     } | ||
|  |     const include = '-' == field[0] ? 0 : 1; | ||
|  |     if (!retainMinusPaths && include === 0) { | ||
|  |       field = field.substring(1); | ||
|  |     } | ||
|  |     ret[field] = include; | ||
|  |   } | ||
|  | 
 | ||
|  |   return ret; | ||
|  | }; |