| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.CommandOperation = void 0;
- const constants_1 = require("../cmap/wire_protocol/constants");
- const error_1 = require("../error");
- const explain_1 = require("../explain");
- const read_concern_1 = require("../read_concern");
- const utils_1 = require("../utils");
- const write_concern_1 = require("../write_concern");
- const operation_1 = require("./operation");
- /** @internal */
- class CommandOperation extends operation_1.AbstractOperation {
- constructor(parent, options) {
- super(options);
- this.options = options ?? {};
- // NOTE: this was explicitly added for the add/remove user operations, it's likely
- // something we'd want to reconsider. Perhaps those commands can use `Admin`
- // as a parent?
- const dbNameOverride = options?.dbName || options?.authdb;
- if (dbNameOverride) {
- this.ns = new utils_1.MongoDBNamespace(dbNameOverride, '$cmd');
- }
- else {
- this.ns = parent
- ? parent.s.namespace.withCollection('$cmd')
- : new utils_1.MongoDBNamespace('admin', '$cmd');
- }
- this.readConcern = read_concern_1.ReadConcern.fromOptions(options);
- this.writeConcern = write_concern_1.WriteConcern.fromOptions(options);
- if (this.hasAspect(operation_1.Aspect.EXPLAINABLE)) {
- this.explain = explain_1.Explain.fromOptions(options);
- if (this.explain)
- (0, explain_1.validateExplainTimeoutOptions)(this.options, this.explain);
- }
- else if (options?.explain != null) {
- throw new error_1.MongoInvalidArgumentError(`Option "explain" is not supported on this command`);
- }
- }
- get canRetryWrite() {
- if (this.hasAspect(operation_1.Aspect.EXPLAINABLE)) {
- return this.explain == null;
- }
- return super.canRetryWrite;
- }
- buildOptions(timeoutContext) {
- return {
- ...this.options,
- ...this.bsonOptions,
- timeoutContext,
- readPreference: this.readPreference,
- session: this.session
- };
- }
- buildCommand(connection, session) {
- const command = this.buildCommandDocument(connection, session);
- const inTransaction = this.session && this.session.inTransaction();
- if (this.readConcern && (0, utils_1.commandSupportsReadConcern)(command) && !inTransaction) {
- Object.assign(command, { readConcern: this.readConcern });
- }
- if (this.writeConcern && this.hasAspect(operation_1.Aspect.WRITE_OPERATION) && !inTransaction) {
- write_concern_1.WriteConcern.apply(command, this.writeConcern);
- }
- if (this.options.collation &&
- typeof this.options.collation === 'object' &&
- !this.hasAspect(operation_1.Aspect.SKIP_COLLATION)) {
- Object.assign(command, { collation: this.options.collation });
- }
- if (typeof this.options.maxTimeMS === 'number') {
- command.maxTimeMS = this.options.maxTimeMS;
- }
- if (this.options.rawData != null &&
- this.hasAspect(operation_1.Aspect.SUPPORTS_RAW_DATA) &&
- (0, utils_1.maxWireVersion)(connection) >= constants_1.MIN_SUPPORTED_RAW_DATA_WIRE_VERSION) {
- command.rawData = this.options.rawData;
- }
- if (this.hasAspect(operation_1.Aspect.EXPLAINABLE) && this.explain) {
- return (0, explain_1.decorateWithExplain)(command, this.explain);
- }
- return command;
- }
- }
- exports.CommandOperation = CommandOperation;
- //# sourceMappingURL=command.js.map
|