Skip to content

Commit

Permalink
fix(NODE-3727): add overloads for BulkOperationBase's execute function (
Browse files Browse the repository at this point in the history
#3018)

Co-authored-by: Daria Pardue <daria.pardue@mongodb.com>
  • Loading branch information
skrtheboss and dariakp committed Nov 2, 2021
1 parent c3149e1 commit 216d194
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/bulk/common.ts
Expand Up @@ -1216,9 +1216,15 @@ export abstract class BulkOperationBase {
return batches;
}

/** An internal helper method. Do not invoke directly. Will be going away in the future */
execute(options?: BulkWriteOptions): Promise<BulkWriteResult>;
execute(callback: Callback<BulkWriteResult>): void;
execute(options: BulkWriteOptions | undefined, callback: Callback<BulkWriteResult>): void;
execute(
options?: BulkWriteOptions,
options?: BulkWriteOptions | Callback<BulkWriteResult>,
callback?: Callback<BulkWriteResult>
): Promise<BulkWriteResult> | void;
execute(
options?: BulkWriteOptions | Callback<BulkWriteResult>,
callback?: Callback<BulkWriteResult>
): Promise<BulkWriteResult> | void {
if (typeof options === 'function') (callback = options), (options = {});
Expand Down
81 changes: 81 additions & 0 deletions test/types/community/bulk/bulk-operation-base.test-d.ts
@@ -0,0 +1,81 @@
import { expectType } from 'tsd';

import {
BulkWriteResult,
MongoClient,
BatchType,
UpdateStatement,
DeleteStatement,
AnyError,
BulkWriteOptions,
Callback,
Document
} from '../../../../src/index';
import { BulkOperationBase, Batch } from '../../../../src/bulk/common';

const client = new MongoClient('');
const db = client.db('test');
const collection = db.collection('test');

class TestBulkOperation extends BulkOperationBase {
constructor() {
super(collection, {}, true);
}

addToOperationsList(
batchType: BatchType,
document: Document | UpdateStatement | DeleteStatement
): this {
this.s.currentBatch = new Batch<Document>(batchType, 0);
this.s.currentBatch.operations.push(document);
return this;
}
}

const bulkOperation = new TestBulkOperation();

// execute

const options: BulkWriteOptions = {};

expectType<Promise<BulkWriteResult>>(bulkOperation.execute());

expectType<Promise<BulkWriteResult>>(bulkOperation.execute(options));

// ensure we can use the bulk operation execute in a callback based wrapper function
function extendedPromiseBasedBulkExecute(
optionalOptions?: BulkWriteOptions
): Promise<BulkWriteResult> {
return bulkOperation.execute(optionalOptions);
}

expectType<Promise<BulkWriteResult>>(extendedPromiseBasedBulkExecute());

expectType<void>(
bulkOperation.execute((error, bulkWriteResult) => {
expectType<AnyError | undefined>(error);
expectType<BulkWriteResult | undefined>(bulkWriteResult);
})
);

expectType<void>(
bulkOperation.execute(options, (error, bulkWriteResult) => {
expectType<AnyError | undefined>(error);
expectType<BulkWriteResult | undefined>(bulkWriteResult);
})
);

// ensure we can use the bulk operation execute in a callback based wrapper function
function extendedCallbackBasedBulkExecute(
callback: Callback<BulkWriteResult>,
optionalOptions?: BulkWriteOptions
): void {
bulkOperation.execute(optionalOptions, callback);
}

expectType<void>(
extendedCallbackBasedBulkExecute((error, bulkWriteResult) => {
expectType<AnyError | undefined>(error);
expectType<BulkWriteResult | undefined>(bulkWriteResult);
})
);

0 comments on commit 216d194

Please sign in to comment.