Skip to content

Commit 9261717

Browse files
refactor(NODE-7087): remove ModernizedOperation and ModernizedCommandOperation (#4623)
Co-authored-by: Durran Jordan <[email protected]>
1 parent 0aac1fb commit 9261717

40 files changed

+168
-416
lines changed

src/index.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,6 @@ export type {
511511
CollationOptions,
512512
CommandOperation,
513513
CommandOperationOptions,
514-
ModernizedCommandOperation,
515514
OperationParent
516515
} from './operations/command';
517516
export type { CountOptions } from './operations/count';
@@ -544,12 +543,7 @@ export type {
544543
export type { InsertManyResult, InsertOneOptions, InsertOneResult } from './operations/insert';
545544
export type { CollectionInfo, ListCollectionsOptions } from './operations/list_collections';
546545
export type { ListDatabasesOptions, ListDatabasesResult } from './operations/list_databases';
547-
export type {
548-
AbstractOperation,
549-
Hint,
550-
ModernizedOperation,
551-
OperationOptions
552-
} from './operations/operation';
546+
export type { AbstractOperation, Hint, OperationOptions } from './operations/operation';
553547
export type { ProfilingLevelOptions } from './operations/profiling_level';
554548
export type { RemoveUserOptions } from './operations/remove_user';
555549
export type { RenameOptions } from './operations/rename';

src/mongo_client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import {
4444
} from './operations/client_bulk_write/common';
4545
import { ClientBulkWriteExecutor } from './operations/client_bulk_write/executor';
4646
import { executeOperation } from './operations/execute_operation';
47-
import { ModernizedOperation } from './operations/operation';
47+
import { AbstractOperation } from './operations/operation';
4848
import type { ReadConcern, ReadConcernLevel, ReadConcernLike } from './read_concern';
4949
import { ReadPreference, type ReadPreferenceMode } from './read_preference';
5050
import { type AsyncDisposable, configureResourceManagement } from './resource_management';
@@ -792,7 +792,7 @@ export class MongoClient extends TypedEventEmitter<MongoClientEvents> implements
792792
const endSessions = Array.from(this.s.sessionPool.sessions, ({ id }) => id);
793793
if (endSessions.length !== 0) {
794794
try {
795-
class EndSessionsOperation extends ModernizedOperation<void> {
795+
class EndSessionsOperation extends AbstractOperation<void> {
796796
override ns = MongoDBNamespace.fromString('admin.$cmd');
797797
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
798798
override buildCommand(_connection: Connection, _session?: ClientSession): Document {

src/operations/aggregate.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ import { MongoInvalidArgumentError } from '../error';
66
import { type ExplainOptions } from '../explain';
77
import { maxWireVersion, type MongoDBNamespace } from '../utils';
88
import { WriteConcern } from '../write_concern';
9-
import {
10-
type CollationOptions,
11-
type CommandOperationOptions,
12-
ModernizedCommandOperation
13-
} from './command';
9+
import { type CollationOptions, CommandOperation, type CommandOperationOptions } from './command';
1410
import { Aspect, defineAspects, type Hint } from './operation';
1511

1612
/** @internal */
@@ -53,7 +49,7 @@ export interface AggregateOptions extends Omit<CommandOperationOptions, 'explain
5349
}
5450

5551
/** @internal */
56-
export class AggregateOperation extends ModernizedCommandOperation<CursorResponse> {
52+
export class AggregateOperation extends CommandOperation<CursorResponse> {
5753
override SERVER_COMMAND_RESPONSE_TYPE = CursorResponse;
5854
override options: AggregateOptions;
5955
target: string | typeof DB_AGGREGATE_COLLECTION;

src/operations/client_bulk_write/client_bulk_write.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { type Connection } from '../../cmap/connection';
22
import { ClientBulkWriteCursorResponse } from '../../cmap/wire_protocol/responses';
33
import type { ClientSession } from '../../sessions';
44
import { MongoDBNamespace } from '../../utils';
5-
import { ModernizedCommandOperation } from '../command';
5+
import { CommandOperation } from '../command';
66
import { Aspect, defineAspects } from '../operation';
77
import { type ClientBulkWriteCommand, type ClientBulkWriteCommandBuilder } from './command_builder';
88
import { type ClientBulkWriteOptions } from './common';
@@ -11,7 +11,7 @@ import { type ClientBulkWriteOptions } from './common';
1111
* Executes a single client bulk write operation within a potential batch.
1212
* @internal
1313
*/
14-
export class ClientBulkWriteOperation extends ModernizedCommandOperation<ClientBulkWriteCursorResponse> {
14+
export class ClientBulkWriteOperation extends CommandOperation<ClientBulkWriteCursorResponse> {
1515
override SERVER_COMMAND_RESPONSE_TYPE = ClientBulkWriteCursorResponse;
1616

1717
commandBuilder: ClientBulkWriteCommandBuilder;

src/operations/command.ts

Lines changed: 2 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { type Connection } from '..';
22
import type { BSONSerializeOptions, Document } from '../bson';
3-
import { type MongoDBResponseConstructor } from '../cmap/wire_protocol/responses';
43
import { MongoInvalidArgumentError } from '../error';
54
import {
65
decorateWithExplain,
@@ -10,13 +9,13 @@ import {
109
} from '../explain';
1110
import { ReadConcern } from '../read_concern';
1211
import type { ReadPreference } from '../read_preference';
13-
import type { Server, ServerCommandOptions } from '../sdam/server';
12+
import type { ServerCommandOptions } from '../sdam/server';
1413
import type { ClientSession } from '../sessions';
1514
import { type TimeoutContext } from '../timeout';
1615
import { commandSupportsReadConcern, MongoDBNamespace } from '../utils';
1716
import { WriteConcern, type WriteConcernOptions } from '../write_concern';
1817
import type { ReadConcernLike } from './../read_concern';
19-
import { AbstractOperation, Aspect, ModernizedOperation, type OperationOptions } from './operation';
18+
import { AbstractOperation, Aspect, type OperationOptions } from './operation';
2019

2120
/** @public */
2221
export interface CollationOptions {
@@ -117,109 +116,6 @@ export abstract class CommandOperation<T> extends AbstractOperation<T> {
117116
return super.canRetryWrite;
118117
}
119118

120-
public async executeCommand<T extends MongoDBResponseConstructor>(
121-
server: Server,
122-
session: ClientSession | undefined,
123-
cmd: Document,
124-
timeoutContext: TimeoutContext,
125-
responseType: T | undefined
126-
): Promise<typeof responseType extends undefined ? Document : InstanceType<T>>;
127-
128-
public async executeCommand(
129-
server: Server,
130-
session: ClientSession | undefined,
131-
cmd: Document,
132-
timeoutContext: TimeoutContext
133-
): Promise<Document>;
134-
135-
async executeCommand(
136-
server: Server,
137-
session: ClientSession | undefined,
138-
cmd: Document,
139-
timeoutContext: TimeoutContext,
140-
responseType?: MongoDBResponseConstructor
141-
): Promise<Document> {
142-
this.server = server;
143-
144-
const options = {
145-
...this.options,
146-
...this.bsonOptions,
147-
timeoutContext,
148-
readPreference: this.readPreference,
149-
session
150-
};
151-
152-
const inTransaction = this.session && this.session.inTransaction();
153-
154-
if (this.readConcern && commandSupportsReadConcern(cmd) && !inTransaction) {
155-
Object.assign(cmd, { readConcern: this.readConcern });
156-
}
157-
158-
if (this.writeConcern && this.hasAspect(Aspect.WRITE_OPERATION) && !inTransaction) {
159-
WriteConcern.apply(cmd, this.writeConcern);
160-
}
161-
162-
if (
163-
options.collation &&
164-
typeof options.collation === 'object' &&
165-
!this.hasAspect(Aspect.SKIP_COLLATION)
166-
) {
167-
Object.assign(cmd, { collation: options.collation });
168-
}
169-
170-
if (typeof options.maxTimeMS === 'number') {
171-
cmd.maxTimeMS = options.maxTimeMS;
172-
}
173-
174-
if (this.hasAspect(Aspect.EXPLAINABLE) && this.explain) {
175-
cmd = decorateWithExplain(cmd, this.explain);
176-
}
177-
178-
return await server.command(this.ns, cmd, options, responseType);
179-
}
180-
}
181-
182-
/** @internal */
183-
export abstract class ModernizedCommandOperation<T> extends ModernizedOperation<T> {
184-
override options: CommandOperationOptions;
185-
readConcern?: ReadConcern;
186-
writeConcern?: WriteConcern;
187-
explain?: Explain;
188-
189-
constructor(parent?: OperationParent, options?: CommandOperationOptions) {
190-
super(options);
191-
this.options = options ?? {};
192-
193-
// NOTE: this was explicitly added for the add/remove user operations, it's likely
194-
// something we'd want to reconsider. Perhaps those commands can use `Admin`
195-
// as a parent?
196-
const dbNameOverride = options?.dbName || options?.authdb;
197-
if (dbNameOverride) {
198-
this.ns = new MongoDBNamespace(dbNameOverride, '$cmd');
199-
} else {
200-
this.ns = parent
201-
? parent.s.namespace.withCollection('$cmd')
202-
: new MongoDBNamespace('admin', '$cmd');
203-
}
204-
205-
this.readConcern = ReadConcern.fromOptions(options);
206-
this.writeConcern = WriteConcern.fromOptions(options);
207-
208-
if (this.hasAspect(Aspect.EXPLAINABLE)) {
209-
this.explain = Explain.fromOptions(options);
210-
if (this.explain) validateExplainTimeoutOptions(this.options, this.explain);
211-
} else if (options?.explain != null) {
212-
throw new MongoInvalidArgumentError(`Option "explain" is not supported on this command`);
213-
}
214-
}
215-
216-
override get canRetryWrite(): boolean {
217-
if (this.hasAspect(Aspect.EXPLAINABLE)) {
218-
return this.explain == null;
219-
}
220-
return super.canRetryWrite;
221-
}
222-
223119
abstract buildCommandDocument(connection: Connection, session?: ClientSession): Document;
224120

225121
override buildOptions(timeoutContext: TimeoutContext): ServerCommandOptions {

src/operations/count.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { MongoDBResponse } from '../cmap/wire_protocol/responses';
44
import type { Collection } from '../collection';
55
import type { ClientSession } from '../sessions';
66
import type { MongoDBNamespace } from '../utils';
7-
import { type CommandOperationOptions, ModernizedCommandOperation } from './command';
7+
import { CommandOperation, type CommandOperationOptions } from './command';
88
import { Aspect, defineAspects } from './operation';
99

1010
/** @public */
@@ -22,7 +22,7 @@ export interface CountOptions extends CommandOperationOptions {
2222
}
2323

2424
/** @internal */
25-
export class CountOperation extends ModernizedCommandOperation<number> {
25+
export class CountOperation extends CommandOperation<number> {
2626
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
2727
override options: CountOptions;
2828
collectionName?: string;

src/operations/create_collection.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type { PkFactory } from '../mongo_client';
1212
import type { ClientSession } from '../sessions';
1313
import { TimeoutContext } from '../timeout';
1414
import { maxWireVersion } from '../utils';
15-
import { type CommandOperationOptions, ModernizedCommandOperation } from './command';
15+
import { CommandOperation, type CommandOperationOptions } from './command';
1616
import { executeOperation } from './execute_operation';
1717
import { CreateIndexesOperation } from './indexes';
1818
import { Aspect, defineAspects } from './operation';
@@ -112,7 +112,7 @@ const INVALID_QE_VERSION =
112112
'Driver support of Queryable Encryption is incompatible with server. Upgrade server to use Queryable Encryption.';
113113

114114
/** @internal */
115-
export class CreateCollectionOperation extends ModernizedCommandOperation<Collection> {
115+
export class CreateCollectionOperation extends CommandOperation<Collection> {
116116
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
117117
override options: CreateCollectionOptions;
118118
db: Db;

src/operations/delete.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@ import { MongoCompatibilityError, MongoServerError } from '../error';
55
import type { ClientSession } from '../sessions';
66
import { type MongoDBCollectionNamespace, type MongoDBNamespace } from '../utils';
77
import { type WriteConcernOptions } from '../write_concern';
8-
import {
9-
type CollationOptions,
10-
type CommandOperationOptions,
11-
ModernizedCommandOperation
12-
} from './command';
8+
import { type CollationOptions, CommandOperation, type CommandOperationOptions } from './command';
139
import { Aspect, defineAspects, type Hint } from './operation';
1410

1511
/** @public */
@@ -45,7 +41,7 @@ export interface DeleteStatement {
4541
}
4642

4743
/** @internal */
48-
export class DeleteOperation extends ModernizedCommandOperation<Document> {
44+
export class DeleteOperation extends CommandOperation<Document> {
4945
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
5046
override options: DeleteOptions;
5147
statements: DeleteStatement[];

src/operations/distinct.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { type Document } from '../bson';
22
import { type Connection } from '../cmap/connection';
33
import { MongoDBResponse } from '../cmap/wire_protocol/responses';
44
import type { Collection } from '../collection';
5-
import { type CommandOperationOptions, ModernizedCommandOperation } from './command';
5+
import { CommandOperation, type CommandOperationOptions } from './command';
66
import { Aspect, defineAspects } from './operation';
77

88
/** @public */
@@ -25,7 +25,7 @@ export type DistinctOptions = CommandOperationOptions & {
2525
* Return a list of distinct values for the given key across a collection.
2626
* @internal
2727
*/
28-
export class DistinctOperation extends ModernizedCommandOperation<any[] | Document> {
28+
export class DistinctOperation extends CommandOperation<any[] | Document> {
2929
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
3030
override options: DistinctOptions;
3131
collection: Collection;

src/operations/drop.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { Db } from '../db';
66
import { MONGODB_ERROR_CODES } from '../error';
77
import type { ClientSession } from '../sessions';
88
import { TimeoutContext } from '../timeout';
9-
import { type CommandOperationOptions, ModernizedCommandOperation } from './command';
9+
import { CommandOperation, type CommandOperationOptions } from './command';
1010
import { executeOperation } from './execute_operation';
1111
import { Aspect, defineAspects } from './operation';
1212

@@ -17,7 +17,7 @@ export interface DropCollectionOptions extends CommandOperationOptions {
1717
}
1818

1919
/** @internal */
20-
export class DropCollectionOperation extends ModernizedCommandOperation<boolean> {
20+
export class DropCollectionOperation extends CommandOperation<boolean> {
2121
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
2222

2323
override options: DropCollectionOptions;
@@ -107,7 +107,7 @@ export async function dropCollections(
107107
export type DropDatabaseOptions = CommandOperationOptions;
108108

109109
/** @internal */
110-
export class DropDatabaseOperation extends ModernizedCommandOperation<boolean> {
110+
export class DropDatabaseOperation extends CommandOperation<boolean> {
111111
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
112112
override options: DropDatabaseOptions;
113113

0 commit comments

Comments
 (0)