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