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.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							2.6 KiB
						
					
					
				| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.defineAspects = exports.AbstractOperation = exports.Aspect = void 0;
 | |
| const util_1 = require("util");
 | |
| const bson_1 = require("../bson");
 | |
| const read_preference_1 = require("../read_preference");
 | |
| exports.Aspect = {
 | |
|     READ_OPERATION: Symbol('READ_OPERATION'),
 | |
|     WRITE_OPERATION: Symbol('WRITE_OPERATION'),
 | |
|     RETRYABLE: Symbol('RETRYABLE'),
 | |
|     EXPLAINABLE: Symbol('EXPLAINABLE'),
 | |
|     SKIP_COLLATION: Symbol('SKIP_COLLATION'),
 | |
|     CURSOR_CREATING: Symbol('CURSOR_CREATING'),
 | |
|     MUST_SELECT_SAME_SERVER: Symbol('MUST_SELECT_SAME_SERVER')
 | |
| };
 | |
| /** @internal */
 | |
| const kSession = Symbol('session');
 | |
| /**
 | |
|  * This class acts as a parent class for any operation and is responsible for setting this.options,
 | |
|  * as well as setting and getting a session.
 | |
|  * Additionally, this class implements `hasAspect`, which determines whether an operation has
 | |
|  * a specific aspect.
 | |
|  * @internal
 | |
|  */
 | |
| class AbstractOperation {
 | |
|     constructor(options = {}) {
 | |
|         this.executeAsync = (0, util_1.promisify)((server, session, callback) => {
 | |
|             this.execute(server, session, callback);
 | |
|         });
 | |
|         this.readPreference = this.hasAspect(exports.Aspect.WRITE_OPERATION)
 | |
|             ? read_preference_1.ReadPreference.primary
 | |
|             : read_preference_1.ReadPreference.fromOptions(options) ?? read_preference_1.ReadPreference.primary;
 | |
|         // Pull the BSON serialize options from the already-resolved options
 | |
|         this.bsonOptions = (0, bson_1.resolveBSONOptions)(options);
 | |
|         this[kSession] = options.session != null ? options.session : undefined;
 | |
|         this.options = options;
 | |
|         this.bypassPinningCheck = !!options.bypassPinningCheck;
 | |
|         this.trySecondaryWrite = false;
 | |
|     }
 | |
|     hasAspect(aspect) {
 | |
|         const ctor = this.constructor;
 | |
|         if (ctor.aspects == null) {
 | |
|             return false;
 | |
|         }
 | |
|         return ctor.aspects.has(aspect);
 | |
|     }
 | |
|     get session() {
 | |
|         return this[kSession];
 | |
|     }
 | |
|     clearSession() {
 | |
|         this[kSession] = undefined;
 | |
|     }
 | |
|     get canRetryRead() {
 | |
|         return true;
 | |
|     }
 | |
|     get canRetryWrite() {
 | |
|         return true;
 | |
|     }
 | |
| }
 | |
| exports.AbstractOperation = AbstractOperation;
 | |
| function defineAspects(operation, aspects) {
 | |
|     if (!Array.isArray(aspects) && !(aspects instanceof Set)) {
 | |
|         aspects = [aspects];
 | |
|     }
 | |
|     aspects = new Set(aspects);
 | |
|     Object.defineProperty(operation, 'aspects', {
 | |
|         value: aspects,
 | |
|         writable: false
 | |
|     });
 | |
|     return aspects;
 | |
| }
 | |
| exports.defineAspects = defineAspects;
 | |
| //# sourceMappingURL=operation.js.map
 |