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.
		
		
		
		
		
			
		
			
				
					83 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					83 lines
				
				2.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Topology = require('../core').Topology;
							 | 
						||
| 
								 | 
							
								const ServerCapabilities = require('./topology_base').ServerCapabilities;
							 | 
						||
| 
								 | 
							
								const Cursor = require('../cursor');
							 | 
						||
| 
								 | 
							
								const translateOptions = require('../utils').translateOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NativeTopology extends Topology {
							 | 
						||
| 
								 | 
							
								  constructor(servers, options) {
							 | 
						||
| 
								 | 
							
								    options = options || {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    let clonedOptions = Object.assign(
							 | 
						||
| 
								 | 
							
								      {},
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        cursorFactory: Cursor,
							 | 
						||
| 
								 | 
							
								        reconnect: false,
							 | 
						||
| 
								 | 
							
								        emitError: typeof options.emitError === 'boolean' ? options.emitError : true,
							 | 
						||
| 
								 | 
							
								        maxPoolSize:
							 | 
						||
| 
								 | 
							
								          typeof options.maxPoolSize === 'number'
							 | 
						||
| 
								 | 
							
								            ? options.maxPoolSize
							 | 
						||
| 
								 | 
							
								            : typeof options.poolSize === 'number'
							 | 
						||
| 
								 | 
							
								            ? options.poolSize
							 | 
						||
| 
								 | 
							
								            : 10,
							 | 
						||
| 
								 | 
							
								        minPoolSize:
							 | 
						||
| 
								 | 
							
								          typeof options.minPoolSize === 'number'
							 | 
						||
| 
								 | 
							
								            ? options.minPoolSize
							 | 
						||
| 
								 | 
							
								            : typeof options.minSize === 'number'
							 | 
						||
| 
								 | 
							
								            ? options.minSize
							 | 
						||
| 
								 | 
							
								            : 0,
							 | 
						||
| 
								 | 
							
								        monitorCommands:
							 | 
						||
| 
								 | 
							
								          typeof options.monitorCommands === 'boolean' ? options.monitorCommands : false
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Translate any SSL options and other connectivity options
							 | 
						||
| 
								 | 
							
								    clonedOptions = translateOptions(clonedOptions, options);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Socket options
							 | 
						||
| 
								 | 
							
								    var socketOptions =
							 | 
						||
| 
								 | 
							
								      options.socketOptions && Object.keys(options.socketOptions).length > 0
							 | 
						||
| 
								 | 
							
								        ? options.socketOptions
							 | 
						||
| 
								 | 
							
								        : options;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Translate all the options to the core types
							 | 
						||
| 
								 | 
							
								    clonedOptions = translateOptions(clonedOptions, socketOptions);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    clonedOptions.serverApi = options.serverApi;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    clonedOptions.useUnifiedTopology = options.useUnifiedTopology;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    super(servers, clonedOptions);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  capabilities() {
							 | 
						||
| 
								 | 
							
								    if (this.s.sCapabilities) return this.s.sCapabilities;
							 | 
						||
| 
								 | 
							
								    if (this.lastIsMaster() == null) return null;
							 | 
						||
| 
								 | 
							
								    this.s.sCapabilities = new ServerCapabilities(this.lastIsMaster());
							 | 
						||
| 
								 | 
							
								    return this.s.sCapabilities;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Command
							 | 
						||
| 
								 | 
							
								  command(ns, cmd, options, callback) {
							 | 
						||
| 
								 | 
							
								    super.command(ns.toString(), cmd, options, callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Insert
							 | 
						||
| 
								 | 
							
								  insert(ns, ops, options, callback) {
							 | 
						||
| 
								 | 
							
								    super.insert(ns.toString(), ops, options, callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Update
							 | 
						||
| 
								 | 
							
								  update(ns, ops, options, callback) {
							 | 
						||
| 
								 | 
							
								    super.update(ns.toString(), ops, options, callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Remove
							 | 
						||
| 
								 | 
							
								  remove(ns, ops, options, callback) {
							 | 
						||
| 
								 | 
							
								    super.remove(ns.toString(), ops, options, callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = NativeTopology;
							 |