You cannot 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
JavaScript
73 lines
2.6 KiB
JavaScript
"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
|