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.
		
		
		
		
		
			
		
			
				
					35 lines
				
				793 B
			
		
		
			
		
	
	
					35 lines
				
				793 B
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | /*! | ||
|  |  * Behaves like `Schema#path()`, except for it also digs into arrays without | ||
|  |  * needing to put `.0.`, so `getPath(schema, 'docArr.elProp')` works. | ||
|  |  */ | ||
|  | 
 | ||
|  | module.exports = function getPath(schema, path) { | ||
|  |   let schematype = schema.path(path); | ||
|  |   if (schematype != null) { | ||
|  |     return schematype; | ||
|  |   } | ||
|  | 
 | ||
|  |   const pieces = path.split('.'); | ||
|  |   let cur = ''; | ||
|  |   let isArray = false; | ||
|  | 
 | ||
|  |   for (const piece of pieces) { | ||
|  |     if (/^\d+$/.test(piece) && isArray) { | ||
|  |       continue; | ||
|  |     } | ||
|  |     cur = cur.length === 0 ? piece : cur + '.' + piece; | ||
|  | 
 | ||
|  |     schematype = schema.path(cur); | ||
|  |     if (schematype != null && schematype.schema) { | ||
|  |       schema = schematype.schema; | ||
|  |       cur = ''; | ||
|  |       if (schematype.$isMongooseDocumentArray) { | ||
|  |         isArray = true; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return schematype; | ||
|  | }; |