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.
		
		
		
		
		
			
		
			
				
					164 lines
				
				3.5 KiB
			
		
		
			
		
	
	
					164 lines
				
				3.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const opts = require('./propertyOptions');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class VirtualOptions {
							 | 
						||
| 
								 | 
							
								  constructor(obj) {
							 | 
						||
| 
								 | 
							
								    Object.assign(this, obj);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (obj != null && obj.options != null) {
							 | 
						||
| 
								 | 
							
								      this.options = Object.assign({}, obj.options);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Marks this virtual as a populate virtual, and specifies the model to
							 | 
						||
| 
								 | 
							
								 * use for populate.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property ref
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type String|Model|Function
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'ref', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Marks this virtual as a populate virtual, and specifies the path that
							 | 
						||
| 
								 | 
							
								 * contains the name of the model to populate
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property refPath
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type String|Function
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'refPath', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * The name of the property in the local model to match to `foreignField`
							 | 
						||
| 
								 | 
							
								 * in the foreign model.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property localField
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type String|Function
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'localField', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * The name of the property in the foreign model to match to `localField`
							 | 
						||
| 
								 | 
							
								 * in the local model.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property foreignField
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type String|Function
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'foreignField', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Whether to populate this virtual as a single document (true) or an
							 | 
						||
| 
								 | 
							
								 * array of documents (false).
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property justOne
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Boolean
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'justOne', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If true, populate just the number of documents where `localField`
							 | 
						||
| 
								 | 
							
								 * matches `foreignField`, as opposed to the documents themselves.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * If `count` is set, it overrides `justOne`.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property count
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Boolean
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'count', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Add an additional filter to populate, in addition to `localField`
							 | 
						||
| 
								 | 
							
								 * matches `foreignField`.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property match
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Object|Function
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'match', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Additional options to pass to the query used to `populate()`:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * - `sort`
							 | 
						||
| 
								 | 
							
								 * - `skip`
							 | 
						||
| 
								 | 
							
								 * - `limit`
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property options
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Object
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'options', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If true, add a `skip` to the query used to `populate()`.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property skip
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Number
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'skip', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If true, add a `limit` to the query used to `populate()`.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property limit
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Number
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'limit', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * The `limit` option for `populate()` has [some unfortunate edge cases](/docs/populate.html#query-conditions)
							 | 
						||
| 
								 | 
							
								 * when working with multiple documents, like `.find().populate()`. The
							 | 
						||
| 
								 | 
							
								 * `perDocumentLimit` option makes `populate()` execute a separate query
							 | 
						||
| 
								 | 
							
								 * for each document returned from `find()` to ensure each document
							 | 
						||
| 
								 | 
							
								 * gets up to `perDocumentLimit` populated docs if possible.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @api public
							 | 
						||
| 
								 | 
							
								 * @property perDocumentLimit
							 | 
						||
| 
								 | 
							
								 * @memberOf VirtualOptions
							 | 
						||
| 
								 | 
							
								 * @type Number
							 | 
						||
| 
								 | 
							
								 * @instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(VirtualOptions.prototype, 'perDocumentLimit', opts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = VirtualOptions;
							 |