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.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.1 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| /*!
 | |
|  * Module dependencies.
 | |
|  */
 | |
| 
 | |
| const EventEmitter = require('events').EventEmitter;
 | |
| 
 | |
| /*!
 | |
|  * ignore
 | |
|  */
 | |
| 
 | |
| class ChangeStream extends EventEmitter {
 | |
|   constructor(changeStreamThunk, pipeline, options) {
 | |
|     super();
 | |
| 
 | |
|     this.driverChangeStream = null;
 | |
|     this.closed = false;
 | |
|     this.pipeline = pipeline;
 | |
|     this.options = options;
 | |
| 
 | |
|     // This wrapper is necessary because of buffering.
 | |
|     changeStreamThunk((err, driverChangeStream) => {
 | |
|       if (err != null) {
 | |
|         this.emit('error', err);
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       this.driverChangeStream = driverChangeStream;
 | |
|       this._bindEvents();
 | |
|       this.emit('ready');
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   _bindEvents() {
 | |
|     this.driverChangeStream.on('close', () => {
 | |
|       this.closed = true;
 | |
|     });
 | |
| 
 | |
|     ['close', 'change', 'end', 'error'].forEach(ev => {
 | |
|       this.driverChangeStream.on(ev, data => this.emit(ev, data));
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   _queue(cb) {
 | |
|     this.once('ready', () => cb());
 | |
|   }
 | |
| 
 | |
|   close() {
 | |
|     this.closed = true;
 | |
|     if (this.driverChangeStream) {
 | |
|       this.driverChangeStream.close();
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*!
 | |
|  * ignore
 | |
|  */
 | |
| 
 | |
| module.exports = ChangeStream;
 |