Skip to content

Commit 216d194

Browse files
skrthebossdariakp
andcommitted
fix(NODE-3727): add overloads for BulkOperationBase's execute function (#3018)
Co-authored-by: Daria Pardue <[email protected]>
1 parent c3149e1 commit 216d194

File tree

2 files changed

+89
-2
lines changed

2 files changed

+89
-2
lines changed

src/bulk/common.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1216,9 +1216,15 @@ export abstract class BulkOperationBase {
12161216
return batches;
12171217
}
12181218

1219-
/** An internal helper method. Do not invoke directly. Will be going away in the future */
1219+
execute(options?: BulkWriteOptions): Promise<BulkWriteResult>;
1220+
execute(callback: Callback<BulkWriteResult>): void;
1221+
execute(options: BulkWriteOptions | undefined, callback: Callback<BulkWriteResult>): void;
12201222
execute(
1221-
options?: BulkWriteOptions,
1223+
options?: BulkWriteOptions | Callback<BulkWriteResult>,
1224+
callback?: Callback<BulkWriteResult>
1225+
): Promise<BulkWriteResult> | void;
1226+
execute(
1227+
options?: BulkWriteOptions | Callback<BulkWriteResult>,
12221228
callback?: Callback<BulkWriteResult>
12231229
): Promise<BulkWriteResult> | void {
12241230
if (typeof options === 'function') (callback = options), (options = {});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { expectType } from 'tsd';
2+
3+
import {
4+
BulkWriteResult,
5+
MongoClient,
6+
BatchType,
7+
UpdateStatement,
8+
DeleteStatement,
9+
AnyError,
10+
BulkWriteOptions,
11+
Callback,
12+
Document
13+
} from '../../../../src/index';
14+
import { BulkOperationBase, Batch } from '../../../../src/bulk/common';
15+
16+
const client = new MongoClient('');
17+
const db = client.db('test');
18+
const collection = db.collection('test');
19+
20+
class TestBulkOperation extends BulkOperationBase {
21+
constructor() {
22+
super(collection, {}, true);
23+
}
24+
25+
addToOperationsList(
26+
batchType: BatchType,
27+
document: Document | UpdateStatement | DeleteStatement
28+
): this {
29+
this.s.currentBatch = new Batch<Document>(batchType, 0);
30+
this.s.currentBatch.operations.push(document);
31+
return this;
32+
}
33+
}
34+
35+
const bulkOperation = new TestBulkOperation();
36+
37+
// execute
38+
39+
const options: BulkWriteOptions = {};
40+
41+
expectType<Promise<BulkWriteResult>>(bulkOperation.execute());
42+
43+
expectType<Promise<BulkWriteResult>>(bulkOperation.execute(options));
44+
45+
// ensure we can use the bulk operation execute in a callback based wrapper function
46+
function extendedPromiseBasedBulkExecute(
47+
optionalOptions?: BulkWriteOptions
48+
): Promise<BulkWriteResult> {
49+
return bulkOperation.execute(optionalOptions);
50+
}
51+
52+
expectType<Promise<BulkWriteResult>>(extendedPromiseBasedBulkExecute());
53+
54+
expectType<void>(
55+
bulkOperation.execute((error, bulkWriteResult) => {
56+
expectType<AnyError | undefined>(error);
57+
expectType<BulkWriteResult | undefined>(bulkWriteResult);
58+
})
59+
);
60+
61+
expectType<void>(
62+
bulkOperation.execute(options, (error, bulkWriteResult) => {
63+
expectType<AnyError | undefined>(error);
64+
expectType<BulkWriteResult | undefined>(bulkWriteResult);
65+
})
66+
);
67+
68+
// ensure we can use the bulk operation execute in a callback based wrapper function
69+
function extendedCallbackBasedBulkExecute(
70+
callback: Callback<BulkWriteResult>,
71+
optionalOptions?: BulkWriteOptions
72+
): void {
73+
bulkOperation.execute(optionalOptions, callback);
74+
}
75+
76+
expectType<void>(
77+
extendedCallbackBasedBulkExecute((error, bulkWriteResult) => {
78+
expectType<AnyError | undefined>(error);
79+
expectType<BulkWriteResult | undefined>(bulkWriteResult);
80+
})
81+
);

0 commit comments

Comments
 (0)