"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReadConcern = exports.ReadConcernLevel = void 0;
/** @public */
exports.ReadConcernLevel = Object.freeze({
local: 'local',
majority: 'majority',
linearizable: 'linearizable',
available: 'available',
snapshot: 'snapshot'
});
/**
* The MongoDB ReadConcern, which allows for control of the consistency and isolation properties
* of the data read from replica sets and replica set shards.
* @public
*
* @see https://docs.mongodb.com/manual/reference/read-concern/index.html
*/
class ReadConcern {
/** Constructs a ReadConcern from the read concern level.*/
constructor(level) {
var _a;
/**
* A spec test exists that allows level to be any string.
* "invalid readConcern with out stage"
* @see ./test/spec/crud/v2/aggregate-out-readConcern.json
* @see https://github.com/mongodb/specifications/blob/master/source/read-write-concern/read-write-concern.rst#unknown-levels-and-additional-options-for-string-based-readconcerns
*/
this.level = (_a = exports.ReadConcernLevel[level]) !== null && _a !== void 0 ? _a : level;
}
/**
* Construct a ReadConcern given an options object.
*
* @param options - The options object from which to extract the write concern.
*/
static fromOptions(options) {
if (options == null) {
return;
}
if (options.readConcern) {
const { readConcern } = options;
if (readConcern instanceof ReadConcern) {
return readConcern;
}
else if (typeof readConcern === 'string') {
return new ReadConcern(readConcern);
}
else if ('level' in readConcern && readConcern.level) {
return new ReadConcern(readConcern.level);
}
}
if (options.level) {
return new ReadConcern(options.level);
}
return;
}
static get MAJORITY() {
return exports.ReadConcernLevel.majority;
}
static get AVAILABLE() {
return exports.ReadConcernLevel.available;
}
static get LINEARIZABLE() {
return exports.ReadConcernLevel.linearizable;
}
static get SNAPSHOT() {
return exports.ReadConcernLevel.snapshot;
}
toJSON() {
return { level: this.level };
}
}
exports.ReadConcern = ReadConcern;
//# sourceMappingURL=read_concern.js.map