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
						
					
					
				| 'use strict';
 | |
| 
 | |
| const isDefiningProjection = require('./isDefiningProjection');
 | |
| 
 | |
| /*!
 | |
|  * ignore
 | |
|  */
 | |
| 
 | |
| module.exports = function isExclusive(projection) {
 | |
|   if (projection == null) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   const keys = Object.keys(projection);
 | |
|   let ki = keys.length;
 | |
|   let exclude = null;
 | |
| 
 | |
|   if (ki === 1 && keys[0] === '_id') {
 | |
|     exclude = !!projection[keys[ki]];
 | |
|   } else {
 | |
|     while (ki--) {
 | |
|       // Does this projection explicitly define inclusion/exclusion?
 | |
|       // Explicitly avoid `$meta` and `$slice`
 | |
|       if (keys[ki] !== '_id' && isDefiningProjection(projection[keys[ki]])) {
 | |
|         exclude = !projection[keys[ki]];
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return exclude;
 | |
| };
 |