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