mongodb 4.0.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +62 -30
  2. package/lib/bson.js +1 -0
  3. package/lib/bson.js.map +1 -1
  4. package/lib/bulk/common.js +53 -30
  5. package/lib/bulk/common.js.map +1 -1
  6. package/lib/bulk/ordered.js +3 -2
  7. package/lib/bulk/ordered.js.map +1 -1
  8. package/lib/bulk/unordered.js +3 -2
  9. package/lib/bulk/unordered.js.map +1 -1
  10. package/lib/change_stream.js +23 -13
  11. package/lib/change_stream.js.map +1 -1
  12. package/lib/cmap/auth/auth_provider.js +2 -1
  13. package/lib/cmap/auth/auth_provider.js.map +1 -1
  14. package/lib/cmap/auth/gssapi.js +5 -4
  15. package/lib/cmap/auth/gssapi.js.map +1 -1
  16. package/lib/cmap/auth/mongo_credentials.js +9 -5
  17. package/lib/cmap/auth/mongo_credentials.js.map +1 -1
  18. package/lib/cmap/auth/mongocr.js +2 -2
  19. package/lib/cmap/auth/mongocr.js.map +1 -1
  20. package/lib/cmap/auth/mongodb_aws.js +32 -32
  21. package/lib/cmap/auth/mongodb_aws.js.map +1 -1
  22. package/lib/cmap/auth/plain.js +1 -1
  23. package/lib/cmap/auth/plain.js.map +1 -1
  24. package/lib/cmap/auth/scram.js +15 -12
  25. package/lib/cmap/auth/scram.js.map +1 -1
  26. package/lib/cmap/auth/x509.js +2 -2
  27. package/lib/cmap/auth/x509.js.map +1 -1
  28. package/lib/cmap/command_monitoring_events.js +26 -10
  29. package/lib/cmap/command_monitoring_events.js.map +1 -1
  30. package/lib/cmap/commands.js +9 -5
  31. package/lib/cmap/commands.js.map +1 -1
  32. package/lib/cmap/connect.js +23 -9
  33. package/lib/cmap/connect.js.map +1 -1
  34. package/lib/cmap/connection.js +43 -46
  35. package/lib/cmap/connection.js.map +1 -1
  36. package/lib/cmap/connection_pool.js +113 -15
  37. package/lib/cmap/connection_pool.js.map +1 -1
  38. package/lib/cmap/connection_pool_events.js +3 -1
  39. package/lib/cmap/connection_pool_events.js.map +1 -1
  40. package/lib/cmap/errors.js +3 -3
  41. package/lib/cmap/errors.js.map +1 -1
  42. package/lib/cmap/message_stream.js +1 -1
  43. package/lib/cmap/message_stream.js.map +1 -1
  44. package/lib/cmap/metrics.js +62 -0
  45. package/lib/cmap/metrics.js.map +1 -0
  46. package/lib/cmap/stream_description.js +3 -1
  47. package/lib/cmap/stream_description.js.map +1 -1
  48. package/lib/cmap/wire_protocol/compression.js +22 -9
  49. package/lib/cmap/wire_protocol/compression.js.map +1 -1
  50. package/lib/cmap/wire_protocol/shared.js +1 -1
  51. package/lib/cmap/wire_protocol/shared.js.map +1 -1
  52. package/lib/collection.js +23 -18
  53. package/lib/collection.js.map +1 -1
  54. package/lib/connection_string.js +76 -30
  55. package/lib/connection_string.js.map +1 -1
  56. package/lib/cursor/abstract_cursor.js +75 -68
  57. package/lib/cursor/abstract_cursor.js.map +1 -1
  58. package/lib/cursor/aggregation_cursor.js +47 -9
  59. package/lib/cursor/aggregation_cursor.js.map +1 -1
  60. package/lib/cursor/find_cursor.js +53 -13
  61. package/lib/cursor/find_cursor.js.map +1 -1
  62. package/lib/db.js +21 -14
  63. package/lib/db.js.map +1 -1
  64. package/lib/deps.js +16 -5
  65. package/lib/deps.js.map +1 -1
  66. package/lib/encrypter.js +5 -8
  67. package/lib/encrypter.js.map +1 -1
  68. package/lib/error.js +230 -34
  69. package/lib/error.js.map +1 -1
  70. package/lib/explain.js +2 -2
  71. package/lib/explain.js.map +1 -1
  72. package/lib/gridfs/download.js +22 -47
  73. package/lib/gridfs/download.js.map +1 -1
  74. package/lib/gridfs/index.js +4 -3
  75. package/lib/gridfs/index.js.map +1 -1
  76. package/lib/gridfs/upload.js +13 -21
  77. package/lib/gridfs/upload.js.map +1 -1
  78. package/lib/index.js +27 -2
  79. package/lib/index.js.map +1 -1
  80. package/lib/logger.js +3 -2
  81. package/lib/logger.js.map +1 -1
  82. package/lib/mongo_client.js +5 -8
  83. package/lib/mongo_client.js.map +1 -1
  84. package/lib/mongo_types.js.map +1 -1
  85. package/lib/operations/add_user.js +2 -3
  86. package/lib/operations/add_user.js.map +1 -1
  87. package/lib/operations/aggregate.js +12 -9
  88. package/lib/operations/aggregate.js.map +1 -1
  89. package/lib/operations/command.js +5 -7
  90. package/lib/operations/command.js.map +1 -1
  91. package/lib/operations/common_functions.js +1 -1
  92. package/lib/operations/common_functions.js.map +1 -1
  93. package/lib/operations/connect.js +3 -2
  94. package/lib/operations/connect.js.map +1 -1
  95. package/lib/operations/count.js +1 -1
  96. package/lib/operations/count.js.map +1 -1
  97. package/lib/operations/count_documents.js +1 -1
  98. package/lib/operations/count_documents.js.map +1 -1
  99. package/lib/operations/delete.js +5 -5
  100. package/lib/operations/delete.js.map +1 -1
  101. package/lib/operations/distinct.js +2 -2
  102. package/lib/operations/distinct.js.map +1 -1
  103. package/lib/operations/estimated_document_count.js +5 -1
  104. package/lib/operations/estimated_document_count.js.map +1 -1
  105. package/lib/operations/eval.js.map +1 -1
  106. package/lib/operations/execute_operation.js +31 -17
  107. package/lib/operations/execute_operation.js.map +1 -1
  108. package/lib/operations/find.js +13 -9
  109. package/lib/operations/find.js.map +1 -1
  110. package/lib/operations/find_and_modify.js +9 -9
  111. package/lib/operations/find_and_modify.js.map +1 -1
  112. package/lib/operations/indexes.js +8 -3
  113. package/lib/operations/indexes.js.map +1 -1
  114. package/lib/operations/insert.js +5 -3
  115. package/lib/operations/insert.js.map +1 -1
  116. package/lib/operations/is_capped.js +2 -1
  117. package/lib/operations/is_capped.js.map +1 -1
  118. package/lib/operations/list_collections.js +6 -3
  119. package/lib/operations/list_collections.js.map +1 -1
  120. package/lib/operations/map_reduce.js +1 -1
  121. package/lib/operations/map_reduce.js.map +1 -1
  122. package/lib/operations/operation.js +3 -1
  123. package/lib/operations/operation.js.map +1 -1
  124. package/lib/operations/options_operation.js +2 -1
  125. package/lib/operations/options_operation.js.map +1 -1
  126. package/lib/operations/profiling_level.js +4 -2
  127. package/lib/operations/profiling_level.js.map +1 -1
  128. package/lib/operations/set_profiling_level.js +4 -2
  129. package/lib/operations/set_profiling_level.js.map +1 -1
  130. package/lib/operations/update.js +12 -12
  131. package/lib/operations/update.js.map +1 -1
  132. package/lib/operations/validate_collection.js +6 -5
  133. package/lib/operations/validate_collection.js.map +1 -1
  134. package/lib/promise_provider.js +1 -1
  135. package/lib/promise_provider.js.map +1 -1
  136. package/lib/read_preference.js +8 -8
  137. package/lib/read_preference.js.map +1 -1
  138. package/lib/sdam/common.js +12 -10
  139. package/lib/sdam/common.js.map +1 -1
  140. package/lib/sdam/server.js +90 -25
  141. package/lib/sdam/server.js.map +1 -1
  142. package/lib/sdam/server_description.js +9 -4
  143. package/lib/sdam/server_description.js.map +1 -1
  144. package/lib/sdam/server_selection.js +10 -4
  145. package/lib/sdam/server_selection.js.map +1 -1
  146. package/lib/sdam/srv_polling.js +1 -1
  147. package/lib/sdam/srv_polling.js.map +1 -1
  148. package/lib/sdam/topology.js +42 -21
  149. package/lib/sdam/topology.js.map +1 -1
  150. package/lib/sdam/topology_description.js +7 -3
  151. package/lib/sdam/topology_description.js.map +1 -1
  152. package/lib/sessions.js +132 -31
  153. package/lib/sessions.js.map +1 -1
  154. package/lib/sort.js +3 -3
  155. package/lib/sort.js.map +1 -1
  156. package/lib/transactions.js +15 -7
  157. package/lib/transactions.js.map +1 -1
  158. package/lib/utils.js +60 -20
  159. package/lib/utils.js.map +1 -1
  160. package/mongodb.d.ts +523 -138
  161. package/mongodb.ts34.d.ts +480 -141
  162. package/package.json +44 -48
  163. package/src/bson.ts +1 -0
  164. package/src/bulk/common.ts +83 -43
  165. package/src/bulk/ordered.ts +4 -3
  166. package/src/bulk/unordered.ts +4 -3
  167. package/src/change_stream.ts +46 -29
  168. package/src/cmap/auth/auth_provider.ts +3 -2
  169. package/src/cmap/auth/gssapi.ts +15 -5
  170. package/src/cmap/auth/mongo_credentials.ts +22 -8
  171. package/src/cmap/auth/mongocr.ts +3 -3
  172. package/src/cmap/auth/mongodb_aws.ts +52 -39
  173. package/src/cmap/auth/plain.ts +2 -2
  174. package/src/cmap/auth/scram.ts +23 -13
  175. package/src/cmap/auth/x509.ts +3 -3
  176. package/src/cmap/command_monitoring_events.ts +36 -14
  177. package/src/cmap/commands.ts +12 -6
  178. package/src/cmap/connect.ts +42 -12
  179. package/src/cmap/connection.ts +54 -62
  180. package/src/cmap/connection_pool.ts +141 -20
  181. package/src/cmap/connection_pool_events.ts +8 -1
  182. package/src/cmap/errors.ts +3 -4
  183. package/src/cmap/message_stream.ts +2 -4
  184. package/src/cmap/metrics.ts +58 -0
  185. package/src/cmap/stream_description.ts +6 -1
  186. package/src/cmap/wire_protocol/compression.ts +26 -13
  187. package/src/cmap/wire_protocol/shared.ts +4 -2
  188. package/src/collection.ts +75 -70
  189. package/src/connection_string.ts +97 -34
  190. package/src/cursor/abstract_cursor.ts +141 -104
  191. package/src/cursor/aggregation_cursor.ts +34 -20
  192. package/src/cursor/find_cursor.ts +41 -21
  193. package/src/db.ts +19 -18
  194. package/src/deps.ts +110 -22
  195. package/src/encrypter.ts +6 -12
  196. package/src/error.ts +264 -48
  197. package/src/explain.ts +3 -3
  198. package/src/gridfs/download.ts +48 -53
  199. package/src/gridfs/index.ts +5 -4
  200. package/src/gridfs/upload.ts +32 -33
  201. package/src/index.ts +42 -4
  202. package/src/logger.ts +6 -3
  203. package/src/mongo_client.ts +20 -23
  204. package/src/mongo_types.ts +19 -20
  205. package/src/operations/add_user.ts +4 -5
  206. package/src/operations/aggregate.ts +18 -17
  207. package/src/operations/command.ts +7 -10
  208. package/src/operations/common_functions.ts +2 -3
  209. package/src/operations/connect.ts +4 -3
  210. package/src/operations/count.ts +2 -2
  211. package/src/operations/count_documents.ts +2 -2
  212. package/src/operations/delete.ts +8 -6
  213. package/src/operations/distinct.ts +5 -3
  214. package/src/operations/estimated_document_count.ts +5 -1
  215. package/src/operations/eval.ts +1 -1
  216. package/src/operations/execute_operation.ts +41 -20
  217. package/src/operations/find.ts +25 -16
  218. package/src/operations/find_and_modify.ts +12 -10
  219. package/src/operations/indexes.ts +39 -8
  220. package/src/operations/insert.ts +7 -4
  221. package/src/operations/is_capped.ts +3 -2
  222. package/src/operations/list_collections.ts +9 -6
  223. package/src/operations/map_reduce.ts +4 -2
  224. package/src/operations/operation.ts +7 -2
  225. package/src/operations/options_operation.ts +3 -2
  226. package/src/operations/profiling_level.ts +5 -3
  227. package/src/operations/set_profiling_level.ts +9 -3
  228. package/src/operations/update.ts +17 -13
  229. package/src/operations/validate_collection.ts +7 -6
  230. package/src/promise_provider.ts +2 -2
  231. package/src/read_preference.ts +11 -9
  232. package/src/sdam/common.ts +11 -9
  233. package/src/sdam/server.ts +168 -69
  234. package/src/sdam/server_description.ts +16 -4
  235. package/src/sdam/server_selection.ts +15 -7
  236. package/src/sdam/srv_polling.ts +2 -2
  237. package/src/sdam/topology.ts +67 -36
  238. package/src/sdam/topology_description.ts +11 -4
  239. package/src/sessions.ts +194 -37
  240. package/src/sort.ts +6 -4
  241. package/src/transactions.ts +18 -9
  242. package/src/utils.ts +73 -20
  243. package/HISTORY.md +0 -2993
  244. package/lib/operations/find_one.js +0 -34
  245. package/lib/operations/find_one.js.map +0 -1
  246. package/src/operations/find_one.ts +0 -43
@@ -64,7 +64,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
64
64
  if (typeof options.batchSize === 'number') {
65
65
  this[kOptions].batchSize = options.batchSize;
66
66
  }
67
- if (typeof options.comment !== 'undefined') {
67
+ if (options.comment != null) {
68
68
  this[kOptions].comment = options.comment;
69
69
  }
70
70
  if (typeof options.maxTimeMS === 'number') {
@@ -111,6 +111,9 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
111
111
  get killed() {
112
112
  return this[kKilled];
113
113
  }
114
+ get loadBalanced() {
115
+ return this[kTopology].loadBalanced;
116
+ }
114
117
  /** Returns current buffered documents length */
115
118
  bufferedCount() {
116
119
  return this[kDocuments].length;
@@ -121,7 +124,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
121
124
  }
122
125
  [Symbol.asyncIterator]() {
123
126
  return {
124
- next: () => this.next().then(value => ({ value, done: value === null }))
127
+ next: () => this.next().then(value => value != null ? { value, done: false } : { value: undefined, done: true })
125
128
  };
126
129
  }
127
130
  stream(options) {
@@ -153,7 +156,6 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
153
156
  return done(undefined, true);
154
157
  }
155
158
  next(this, true, (err, doc) => {
156
- // FIXME(NODE):
157
159
  if (err)
158
160
  return done(err);
159
161
  if (doc) {
@@ -168,7 +170,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
168
170
  next(callback) {
169
171
  return utils_1.maybePromise(callback, done => {
170
172
  if (this[kId] === bson_1.Long.ZERO) {
171
- return done(new error_1.MongoDriverError('Cursor is exhausted'));
173
+ return done(new error_1.MongoCursorExhaustedError());
172
174
  }
173
175
  next(this, true, done);
174
176
  });
@@ -176,14 +178,14 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
176
178
  tryNext(callback) {
177
179
  return utils_1.maybePromise(callback, done => {
178
180
  if (this[kId] === bson_1.Long.ZERO) {
179
- return done(new error_1.MongoDriverError('Cursor is exhausted'));
181
+ return done(new error_1.MongoCursorExhaustedError());
180
182
  }
181
183
  next(this, false, done);
182
184
  });
183
185
  }
184
186
  forEach(iterator, callback) {
185
187
  if (typeof iterator !== 'function') {
186
- throw new error_1.MongoDriverError('Missing required parameter `iterator`');
188
+ throw new error_1.MongoInvalidArgumentError('Argument "iterator" must be a function');
187
189
  }
188
190
  return utils_1.maybePromise(callback, done => {
189
191
  const transform = this[kTransform];
@@ -226,39 +228,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
226
228
  options = options !== null && options !== void 0 ? options : {};
227
229
  const needsToEmitClosed = !this[kClosed];
228
230
  this[kClosed] = true;
229
- return utils_1.maybePromise(callback, done => {
230
- const cursorId = this[kId];
231
- const cursorNs = this[kNamespace];
232
- const server = this[kServer];
233
- const session = this[kSession];
234
- if (cursorId == null || server == null || cursorId.isZero() || cursorNs == null) {
235
- if (needsToEmitClosed) {
236
- this[kId] = bson_1.Long.ZERO;
237
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
238
- // @ts-expect-error
239
- this.emit(AbstractCursor.CLOSE);
240
- }
241
- if (session && session.owner === this) {
242
- return session.endSession(done);
243
- }
244
- return done();
245
- }
246
- this[kKilled] = true;
247
- server.killCursors(cursorNs, [cursorId], { ...bson_1.pluckBSONSerializeOptions(this[kOptions]), session }, () => {
248
- if (session && session.owner === this) {
249
- return session.endSession(() => {
250
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
251
- // @ts-expect-error
252
- this.emit(AbstractCursor.CLOSE);
253
- done();
254
- });
255
- }
256
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
257
- // @ts-expect-error
258
- this.emit(AbstractCursor.CLOSE);
259
- done();
260
- });
261
- });
231
+ return utils_1.maybePromise(callback, done => cleanupCursor(this, { needsToEmitClosed }, done));
262
232
  }
263
233
  toArray(callback) {
264
234
  return utils_1.maybePromise(callback, done => {
@@ -295,10 +265,10 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
295
265
  addCursorFlag(flag, value) {
296
266
  assertUninitialized(this);
297
267
  if (!exports.CURSOR_FLAGS.includes(flag)) {
298
- throw new error_1.MongoDriverError(`flag ${flag} is not one of ${exports.CURSOR_FLAGS}`);
268
+ throw new error_1.MongoInvalidArgumentError(`Flag ${flag} is not one of ${exports.CURSOR_FLAGS}`);
299
269
  }
300
270
  if (typeof value !== 'boolean') {
301
- throw new error_1.MongoDriverError(`flag ${flag} must be a boolean value`);
271
+ throw new error_1.MongoInvalidArgumentError(`Flag ${flag} must be a boolean value`);
302
272
  }
303
273
  this[kOptions][flag] = value;
304
274
  return this;
@@ -307,11 +277,12 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
307
277
  * Map all documents using the provided function
308
278
  * If there is a transform set on the cursor, that will be called first and the result passed to
309
279
  * this function's transform.
310
- * @remarks
311
280
  *
312
- * **NOTE:** adding a transform changes the return type of the iteration of this cursor, it **does not** return
313
- * a new instance of a cursor. This means when calling map, you should always assign the result to a new
314
- * variable. Take note of the following example:
281
+ * @remarks
282
+ * **Note for Typescript Users:** adding a transform changes the return type of the iteration of this cursor,
283
+ * it **does not** return a new instance of a cursor. This means when calling map,
284
+ * you should always assign the result to a new variable in order to get a correctly typed cursor variable.
285
+ * Take note of the following example:
315
286
  *
316
287
  * @example
317
288
  * ```typescript
@@ -348,7 +319,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
348
319
  this[kOptions].readPreference = read_preference_1.ReadPreference.fromString(readPreference);
349
320
  }
350
321
  else {
351
- throw new error_1.MongoDriverError('Invalid read preference: ' + readPreference);
322
+ throw new error_1.MongoInvalidArgumentError(`Invalid read preference: ${readPreference}`);
352
323
  }
353
324
  return this;
354
325
  }
@@ -373,7 +344,7 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
373
344
  maxTimeMS(value) {
374
345
  assertUninitialized(this);
375
346
  if (typeof value !== 'number') {
376
- throw new error_1.MongoDriverError('maxTimeMS must be a number');
347
+ throw new error_1.MongoInvalidArgumentError('Argument for maxTimeMS must be a number');
377
348
  }
378
349
  this[kOptions].maxTimeMS = value;
379
350
  return this;
@@ -386,10 +357,10 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
386
357
  batchSize(value) {
387
358
  assertUninitialized(this);
388
359
  if (this[kOptions].tailable) {
389
- throw new error_1.MongoDriverError('Tailable cursors do not support batchSize');
360
+ throw new error_1.MongoTailableCursorError('Tailable cursor does not support batchSize');
390
361
  }
391
362
  if (typeof value !== 'number') {
392
- throw new error_1.MongoDriverError('batchSize requires an integer');
363
+ throw new error_1.MongoInvalidArgumentError('Operation "batchSize" requires an integer');
393
364
  }
394
365
  this[kOptions].batchSize = value;
395
366
  return this;
@@ -423,11 +394,11 @@ class AbstractCursor extends mongo_types_1.TypedEventEmitter {
423
394
  const cursorNs = this[kNamespace];
424
395
  const server = this[kServer];
425
396
  if (cursorId == null) {
426
- callback(new error_1.MongoDriverError('Unable to iterate cursor with no id'));
397
+ callback(new error_1.MongoRuntimeError('Unable to iterate cursor with no id'));
427
398
  return;
428
399
  }
429
400
  if (server == null) {
430
- callback(new error_1.MongoDriverError('Unable to iterate cursor without selected server'));
401
+ callback(new error_1.MongoRuntimeError('Unable to iterate cursor without selected server'));
431
402
  return;
432
403
  }
433
404
  server.getMore(cursorNs, cursorId, {
@@ -503,14 +474,14 @@ function next(cursor, blocking, callback) {
503
474
  // the cursor is now initialized, even if an error occurred or it is dead
504
475
  cursor[kInitialized] = true;
505
476
  if (err || cursorIsDead(cursor)) {
506
- return cleanupCursor(cursor, () => callback(err, nextDocument(cursor)));
477
+ return cleanupCursor(cursor, { error: err }, () => callback(err, nextDocument(cursor)));
507
478
  }
508
479
  next(cursor, blocking, callback);
509
480
  });
510
481
  return;
511
482
  }
512
483
  if (cursorIsDead(cursor)) {
513
- return cleanupCursor(cursor, () => callback(undefined, null));
484
+ return cleanupCursor(cursor, undefined, () => callback(undefined, null));
514
485
  }
515
486
  // otherwise need to call getMore
516
487
  const batchSize = cursor[kOptions].batchSize || 1000;
@@ -523,7 +494,7 @@ function next(cursor, blocking, callback) {
523
494
  cursor[kId] = cursorId;
524
495
  }
525
496
  if (err || cursorIsDead(cursor)) {
526
- return cleanupCursor(cursor, () => callback(err, nextDocument(cursor)));
497
+ return cleanupCursor(cursor, { error: err }, () => callback(err, nextDocument(cursor)));
527
498
  }
528
499
  if (cursor[kDocuments].length === 0 && blocking === false) {
529
500
  return callback(undefined, null);
@@ -535,23 +506,57 @@ function cursorIsDead(cursor) {
535
506
  const cursorId = cursor[kId];
536
507
  return !!cursorId && cursorId.isZero();
537
508
  }
538
- function cleanupCursor(cursor, callback) {
539
- if (cursor[kDocuments].length === 0) {
540
- cursor[kClosed] = true;
541
- cursor.emit(AbstractCursor.CLOSE);
542
- }
509
+ function cleanupCursor(cursor, options, callback) {
510
+ var _a;
511
+ const cursorId = cursor[kId];
512
+ const cursorNs = cursor[kNamespace];
513
+ const server = cursor[kServer];
543
514
  const session = cursor[kSession];
544
- if (session && session.owner === cursor) {
545
- session.endSession(callback);
515
+ const error = options === null || options === void 0 ? void 0 : options.error;
516
+ const needsToEmitClosed = (_a = options === null || options === void 0 ? void 0 : options.needsToEmitClosed) !== null && _a !== void 0 ? _a : cursor[kDocuments].length === 0;
517
+ if (error) {
518
+ if (cursor.loadBalanced && error instanceof error_1.MongoNetworkError) {
519
+ return completeCleanup();
520
+ }
521
+ }
522
+ if (cursorId == null || server == null || cursorId.isZero() || cursorNs == null) {
523
+ if (needsToEmitClosed) {
524
+ cursor[kClosed] = true;
525
+ cursor[kId] = bson_1.Long.ZERO;
526
+ cursor.emit(AbstractCursor.CLOSE);
527
+ }
528
+ if (session) {
529
+ if (session.owner === cursor) {
530
+ return session.endSession({ error }, callback);
531
+ }
532
+ if (!session.inTransaction()) {
533
+ sessions_1.maybeClearPinnedConnection(session, { error });
534
+ }
535
+ }
536
+ return callback();
546
537
  }
547
- else {
548
- callback();
538
+ function completeCleanup() {
539
+ if (session) {
540
+ if (session.owner === cursor) {
541
+ return session.endSession({ error }, () => {
542
+ cursor.emit(AbstractCursor.CLOSE);
543
+ callback();
544
+ });
545
+ }
546
+ if (!session.inTransaction()) {
547
+ sessions_1.maybeClearPinnedConnection(session, { error });
548
+ }
549
+ }
550
+ cursor.emit(AbstractCursor.CLOSE);
551
+ return callback();
549
552
  }
553
+ cursor[kKilled] = true;
554
+ server.killCursors(cursorNs, [cursorId], { ...bson_1.pluckBSONSerializeOptions(cursor[kOptions]), session }, () => completeCleanup());
550
555
  }
551
556
  /** @internal */
552
557
  function assertUninitialized(cursor) {
553
558
  if (cursor[kInitialized]) {
554
- throw new error_1.MongoDriverError('Cursor is already initialized');
559
+ throw new error_1.MongoCursorInUseError();
555
560
  }
556
561
  }
557
562
  exports.assertUninitialized = assertUninitialized;
@@ -585,7 +590,7 @@ function makeCursorStream(cursor) {
585
590
  function readNext() {
586
591
  needToClose = false;
587
592
  next(cursor, true, (err, result) => {
588
- needToClose = err ? !cursor.closed : result !== null;
593
+ needToClose = err ? !cursor.closed : result != null;
589
594
  if (err) {
590
595
  // NOTE: This is questionable, but we have a test backing the behavior. It seems the
591
596
  // desired behavior is that a stream ends cleanly when a user explicitly closes
@@ -597,13 +602,15 @@ function makeCursorStream(cursor) {
597
602
  }
598
603
  // NOTE: This is also perhaps questionable. The rationale here is that these errors tend
599
604
  // to be "operation interrupted", where a cursor has been closed but there is an
600
- // active getMore in-flight.
601
- if (cursor.killed) {
605
+ // active getMore in-flight. This used to check if the cursor was killed but once
606
+ // that changed to happen in cleanup legitimate errors would not destroy the
607
+ // stream. There are change streams test specifically test these cases.
608
+ if (err.message.match(/interrupted/)) {
602
609
  return readable.push(null);
603
610
  }
604
611
  return readable.destroy(err);
605
612
  }
606
- if (result === null) {
613
+ if (result == null) {
607
614
  readable.push(null);
608
615
  }
609
616
  else if (readable.destroyed) {
@@ -1 +1 @@
1
- {"version":3,"file":"abstract_cursor.js","sourceRoot":"","sources":["../../src/cursor/abstract_cursor.ts"],"names":[],"mappings":";;;AAAA,oCAAwE;AACxE,kCAA0F;AAC1F,0CAA4C;AAC5C,oCAA4C;AAC5C,wDAAwE;AAGxE,mCAA6C;AAE7C,kDAA+D;AAC/D,gDAAmE;AAEnE,gBAAgB;AAChB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,gBAAgB;AAChB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,gBAAgB;AAChB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,gBAAgB;AAChB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,gBAAgB;AAChB,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACrC,gBAAgB;AAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,gBAAgB;AAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,gBAAgB;AAChB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,gBAAgB;AAChB,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC3C,gBAAgB;AAChB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,gBAAgB;AAChB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEjC,cAAc;AACD,QAAA,YAAY,GAAG;IAC1B,UAAU;IACV,aAAa;IACb,iBAAiB;IACjB,WAAW;IACX,SAAS;IACT,SAAS;CACD,CAAC;AA+CX,cAAc;AACd,MAAsB,cAGpB,SAAQ,+BAA+B;IA2BvC,gBAAgB;IAChB,YACE,QAAkB,EAClB,SAA2B,EAC3B,UAAiC,EAAE;QAEnC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,6DAA6D;QACpF,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG;YACf,cAAc,EACZ,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,YAAY,gCAAc;gBACxE,CAAC,CAAC,OAAO,CAAC,cAAc;gBACxB,CAAC,CAAC,gCAAc,CAAC,OAAO;YAC5B,GAAG,gCAAyB,CAAC,OAAO,CAAC;SACtC,CAAC;QAEF,MAAM,WAAW,GAAG,0BAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;SAC1C;QAED,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SAC9C;QAED,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;SAC1C;QAED,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SAC9C;QAED,IAAI,OAAO,CAAC,OAAO,YAAY,wBAAa,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;SAClC;IACH,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,aAAwC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,gDAAgD;IAChD,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,yCAAyC;IACzC,qBAAqB,CAAC,MAAe;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;SAClF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAA6B;QAClC,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE;YACtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAExC,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,kBAAS,CAAC;gBACZ,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,CAAC;gBAChB,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ;oBAC1B,IAAI;wBACF,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;wBACrC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;qBAClC;oBAAC,OAAO,GAAG,EAAE;wBACZ,QAAQ,CAAC,GAAG,CAAC,CAAC;qBACf;gBACH,CAAC;aACF,CAAC,CACH,CAAC;SACH;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAID,OAAO,CAAC,QAA4B;QAClC,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,WAAI,CAAC,IAAI,EAAE;gBAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;gBAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;aAC9B;YAED,IAAI,CAAM,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACjC,eAAe;gBACf,IAAI,GAAG;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE1B,IAAI,GAAG,EAAE;oBACP,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACtB,OAAO;iBACR;gBAED,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAKD,IAAI,CAAc,QAA6B;QAC7C,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,WAAI,CAAC,IAAI,EAAE;gBAC3B,OAAO,IAAI,CAAC,IAAI,wBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAAC;aAC1D;YAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAOD,OAAO,CAAc,QAA6B;QAChD,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,WAAI,CAAC,IAAI,EAAE;gBAC3B,OAAO,IAAI,CAAC,IAAI,wBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAAC;aAC1D;YAED,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAUD,OAAO,CACL,QAAoC,EACpC,QAAyB;QAEzB,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAClC,MAAM,IAAI,wBAAgB,CAAC,uCAAuC,CAAC,CAAC;SACrE;QACD,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,IAAI,CAAI,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBAC/B,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,MAAM,CAAC;oBACX,uEAAuE;oBACvE,IAAI;wBACF,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,4CAA4C;qBACrE;oBAAC,OAAO,KAAK,EAAE;wBACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpB;oBAED,IAAI,MAAM,KAAK,KAAK;wBAAE,OAAO,IAAI,EAAE,CAAC;oBAEpC,+EAA+E;oBAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;oBACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;wBAC5C,IAAI;4BACF,MAAM,GAAG,QAAQ,CACf,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAM,CAAC,4CAA4C;6BAC7G,CAAC;yBACH;wBAAC,OAAO,KAAK,EAAE;4BACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;yBACpB;wBACD,IAAI,MAAM,KAAK,KAAK;4BAAE,OAAO,IAAI,EAAE,CAAC;qBACrC;oBAED,SAAS,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,OAAuC,EAAE,QAAmB;QAChE,IAAI,OAAO,OAAO,KAAK,UAAU;YAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;QAExB,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QAErB,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/B,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAC/E,IAAI,iBAAiB,EAAE;oBACrB,IAAI,CAAC,GAAG,CAAC,GAAG,WAAI,CAAC,IAAI,CAAC;oBACtB,6DAA6D;oBAC7D,mBAAmB;oBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;iBACjC;gBAED,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;oBACrC,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACjC;gBAED,OAAO,IAAI,EAAE,CAAC;aACf;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,WAAW,CAChB,QAAQ,EACR,CAAC,QAAQ,CAAC,EACV,EAAE,GAAG,gCAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,EACzD,GAAG,EAAE;gBACH,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;oBACrC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE;wBAC7B,6DAA6D;wBAC7D,mBAAmB;wBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAChC,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,CAAC;iBACJ;gBAED,6DAA6D;gBAC7D,mBAAmB;gBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,EAAE,CAAC;YACT,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAYD,OAAO,CAAc,QAAwB;QAC3C,OAAO,oBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACnC,MAAM,IAAI,GAAQ,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,2DAA2D;gBAC3D,IAAI,CAAI,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBAC/B,IAAI,GAAG;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,GAAG,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAE9C,uEAAuE;oBACvE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEf,+EAA+E;oBAC/E,MAAM,YAAY,GAAG,CAAC,SAAS;wBAC7B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;wBACpE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAQ,CAAC,CAAC,4CAA4C;oBAE7G,IAAI,YAAY,EAAE;wBAChB,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;qBAC5B;oBAED,SAAS,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,IAAgB,EAAE,KAAc;QAC5C,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,oBAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,IAAI,wBAAgB,CAAC,QAAQ,IAAI,kBAAkB,oBAAY,EAAE,CAAC,CAAC;SAC1E;QAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,wBAAgB,CAAC,QAAQ,IAAI,0BAA0B,CAAC,CAAC;SACpE;QAED,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,GAAG,CAAU,SAA8B;QACzC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAA8B,CAAC,CAAC,4CAA4C;QAChH,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE;gBACvB,OAAO,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC;SACH;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;SAC9B;QAED,OAAQ,IAAqC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,cAAkC;QACnD,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,cAAc,YAAY,gCAAc,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,GAAG,cAAc,CAAC;SAChD;aAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,GAAG,gCAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SAC3E;aAAM;YACL,MAAM,IAAI,wBAAgB,CAAC,2BAA2B,GAAG,cAAc,CAAC,CAAC;SAC1E;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,WAA4B;QAC1C,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,mBAAmB,GAAG,0BAAW,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACrE,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,mBAAmB,CAAC;SAClD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,KAAa;QACrB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,wBAAgB,CAAC,4BAA4B,CAAC,CAAC;SAC1D;QAED,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,KAAa;QACrB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;YAC3B,MAAM,IAAI,wBAAgB,CAAC,2CAA2C,CAAC,CAAC;SACzE;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,wBAAgB,CAAC,+BAA+B,CAAC,CAAC;SAC7D;QAED,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACvB,OAAO;SACR;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,OAAO,EAAE;YACX,6EAA6E;YAC7E,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnD,OAAO,CAAC,UAAU,EAAE,CAAC;aACtB;YAED,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;SAC5B;IACH,CAAC;IAaD,gBAAgB;IAChB,QAAQ,CAAC,SAAiB,EAAE,QAA4B;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,QAAQ,CAAC,IAAI,wBAAgB,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACtE,OAAO;SACR;QAED,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,QAAQ,CAAC,IAAI,wBAAgB,CAAC,kDAAkD,CAAC,CAAC,CAAC;YACnF,OAAO;SACR;QAED,MAAM,CAAC,OAAO,CACZ,QAAQ,EACR,QAAQ,EACR;YACE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YACvB,SAAS;SACV,EACD,QAAQ,CACT,CAAC;IACJ,CAAC;;AAniBH,wCAoiBC;AAzgBC,aAAa;AACG,oBAAK,GAAG,OAAgB,CAAC;AA0gB3C,SAAS,YAAY,CAAI,MAAsB;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QAC5D,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IACvC,IAAI,GAAG,EAAE;QACP,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,CAAC,GAAG,CAAM,CAAC;SAC5B;QAED,OAAO,GAAG,CAAC;KACZ;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAI,MAAsB,EAAE,QAAiB,EAAE,QAA4B;IACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KAClC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QACnD,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO;KACR;IAED,IAAI,QAAQ,IAAI,IAAI,EAAE;QACpB,oGAAoG;QACpG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,EAAE;YACrE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;SACvF;QAED,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAClD,IAAI,KAAK,EAAE;gBACT,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;gBAEjC,IAAI,QAAQ,CAAC,MAAM,EAAE;oBACnB,MAAM,CAAC,GAAG,CAAC;wBACT,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ;4BACpC,CAAC,CAAC,WAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BACrC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAEzB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;wBACtB,MAAM,CAAC,UAAU,CAAC,GAAG,UAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;qBAC7C;oBAED,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;iBACjD;qBAAM;oBACL,8EAA8E;oBAC9E,MAAM,CAAC,GAAG,CAAC;wBACT,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ;4BACnC,CAAC,CAAC,WAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;4BACpC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACxB,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;iBACzC;gBAED,+EAA+E;gBAC/E,kFAAkF;gBAClF,cAAc;gBACd,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;oBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,WAAI,CAAC,IAAI,CAAC;oBACxB,uEAAuE;oBACvE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAA0B,CAAC,CAAC;iBACzD;aACF;YAED,yEAAyE;YACzE,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;YAE5B,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC/B,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACzE;YAED,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,OAAO;KACR;IAED,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;QACxB,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;KAC/D;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC;IACrD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC3C,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GACZ,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ;gBACpC,CAAC,CAAC,WAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAEzB,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;SACxB;QAED,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/B,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzE;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE;YACzD,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAClC;QAED,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAsB;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,MAAsB,EAAE,QAAkB;IAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACnC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE;QACvC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KAC9B;SAAM;QACL,QAAQ,EAAE,CAAC;KACZ;AACH,CAAC;AAED,gBAAgB;AAChB,SAAgB,mBAAmB,CAAC,MAAsB;IACxD,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE;QACxB,MAAM,IAAI,wBAAgB,CAAC,+BAA+B,CAAC,CAAC;KAC7D;AACH,CAAC;AAJD,kDAIC;AAED,SAAS,gBAAgB,CAA2B,MAA+B;IACjF,MAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC;QAC5B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,oGAAoG;IAE5H,QAAQ,CAAC,KAAK,GAAG;QACf,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,WAAW,GAAG,KAAK,CAAC;YACpB,WAAW,GAAG,IAAI,CAAC;SACpB;QAED,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,EAAE,CAAC;SACZ;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,QAAQ,GAAG,UAAU,KAAK,EAAE,EAAE;QACrC,IAAI,WAAW,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;SACzD;aAAM;YACL,EAAE,CAAC,KAAK,CAAC,CAAC;SACX;IACH,CAAC,CAAC;IAEF,SAAS,QAAQ;QACf,WAAW,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACjC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;YAErD,IAAI,GAAG,EAAE;gBACP,oFAAoF;gBACpF,qFAAqF;gBACrF,oFAAoF;gBACpF,mEAAmE;gBACnE,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;oBACzC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC5B;gBAED,wFAAwF;gBACxF,sFAAsF;gBACtF,kCAAkC;gBAClC,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC5B;gBAED,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aAC9B;YAED,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;iBAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gBAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;aAChB;iBAAM;gBACL,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACzB,OAAO,QAAQ,EAAE,CAAC;iBACnB;gBAED,OAAO,GAAG,KAAK,CAAC;aACjB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"abstract_cursor.js","sourceRoot":"","sources":["../../src/cursor/abstract_cursor.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,6 @@ const abstract_cursor_1 = require("./abstract_cursor");
6
6
  const execute_operation_1 = require("../operations/execute_operation");
7
7
  const utils_1 = require("../utils");
8
8
  /** @internal */
9
- const kParent = Symbol('parent');
10
- /** @internal */
11
9
  const kPipeline = Symbol('pipeline');
12
10
  /** @internal */
13
11
  const kOptions = Symbol('options');
@@ -20,9 +18,8 @@ const kOptions = Symbol('options');
20
18
  */
21
19
  class AggregationCursor extends abstract_cursor_1.AbstractCursor {
22
20
  /** @internal */
23
- constructor(parent, topology, namespace, pipeline = [], options = {}) {
21
+ constructor(topology, namespace, pipeline = [], options = {}) {
24
22
  super(topology, namespace, options);
25
- this[kParent] = parent;
26
23
  this[kPipeline] = pipeline;
27
24
  this[kOptions] = options;
28
25
  }
@@ -32,7 +29,7 @@ class AggregationCursor extends abstract_cursor_1.AbstractCursor {
32
29
  clone() {
33
30
  const clonedOptions = utils_1.mergeOptions({}, this[kOptions]);
34
31
  delete clonedOptions.session;
35
- return new AggregationCursor(this[kParent], this.topology, this.namespace, this[kPipeline], {
32
+ return new AggregationCursor(this.topology, this.namespace, this[kPipeline], {
36
33
  ...clonedOptions
37
34
  });
38
35
  }
@@ -41,7 +38,7 @@ class AggregationCursor extends abstract_cursor_1.AbstractCursor {
41
38
  }
42
39
  /** @internal */
43
40
  _initialize(session, callback) {
44
- const aggregateOperation = new aggregate_1.AggregateOperation(this[kParent], this[kPipeline], {
41
+ const aggregateOperation = new aggregate_1.AggregateOperation(this.namespace, this[kPipeline], {
45
42
  ...this[kOptions],
46
43
  ...this.cursorOptions,
47
44
  session
@@ -56,9 +53,9 @@ class AggregationCursor extends abstract_cursor_1.AbstractCursor {
56
53
  explain(verbosity, callback) {
57
54
  if (typeof verbosity === 'function')
58
55
  (callback = verbosity), (verbosity = true);
59
- if (verbosity === undefined)
56
+ if (verbosity == null)
60
57
  verbosity = true;
61
- return execute_operation_1.executeOperation(this.topology, new aggregate_1.AggregateOperation(this[kParent], this[kPipeline], {
58
+ return execute_operation_1.executeOperation(this.topology, new aggregate_1.AggregateOperation(this.namespace, this[kPipeline], {
62
59
  ...this[kOptions],
63
60
  ...this.cursorOptions,
64
61
  explain: verbosity
@@ -81,12 +78,53 @@ class AggregationCursor extends abstract_cursor_1.AbstractCursor {
81
78
  this[kPipeline].push({ $match });
82
79
  return this;
83
80
  }
84
- /** Add a out stage to the aggregation pipeline */
81
+ /** Add an out stage to the aggregation pipeline */
85
82
  out($out) {
86
83
  abstract_cursor_1.assertUninitialized(this);
87
84
  this[kPipeline].push({ $out });
88
85
  return this;
89
86
  }
87
+ /**
88
+ * Add a project stage to the aggregation pipeline
89
+ *
90
+ * @remarks
91
+ * In order to strictly type this function you must provide an interface
92
+ * that represents the effect of your projection on the result documents.
93
+ *
94
+ * By default chaining a projection to your cursor changes the returned type to the generic {@link Document} type.
95
+ * You should specify a parameterized type to have assertions on your final results.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * // Best way
100
+ * const docs: AggregationCursor<{ a: number }> = cursor.project<{ a: number }>({ _id: 0, a: true });
101
+ * // Flexible way
102
+ * const docs: AggregationCursor<Document> = cursor.project({ _id: 0, a: true });
103
+ * ```
104
+ *
105
+ * @remarks
106
+ * In order to strictly type this function you must provide an interface
107
+ * that represents the effect of your projection on the result documents.
108
+ *
109
+ * **Note for Typescript Users:** adding a transform changes the return type of the iteration of this cursor,
110
+ * it **does not** return a new instance of a cursor. This means when calling project,
111
+ * you should always assign the result to a new variable in order to get a correctly typed cursor variable.
112
+ * Take note of the following example:
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const cursor: AggregationCursor<{ a: number; b: string }> = coll.aggregate([]);
117
+ * const projectCursor = cursor.project<{ a: number }>({ _id: 0, a: true });
118
+ * const aPropOnlyArray: {a: number}[] = await projectCursor.toArray();
119
+ *
120
+ * // or always use chaining and save the final cursor
121
+ *
122
+ * const cursor = coll.aggregate().project<{ a: string }>({
123
+ * _id: 0,
124
+ * a: { $convert: { input: '$a', to: 'string' }
125
+ * }});
126
+ * ```
127
+ */
90
128
  project($project) {
91
129
  abstract_cursor_1.assertUninitialized(this);
92
130
  this[kPipeline].push({ $project });
@@ -1 +1 @@
1
- {"version":3,"file":"aggregation_cursor.js","sourceRoot":"","sources":["../../src/cursor/aggregation_cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregation_cursor.js","sourceRoot":"","sources":["../../src/cursor/aggregation_cursor.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
30
30
  super(topology, namespace, options);
31
31
  this[kFilter] = filter || {};
32
32
  this[kBuiltOptions] = options;
33
- if (typeof options.sort !== 'undefined') {
33
+ if (options.sort != null) {
34
34
  this[kBuiltOptions].sort = sort_1.formatSort(options.sort);
35
35
  }
36
36
  }
@@ -90,7 +90,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
90
90
  }
91
91
  count(options, callback) {
92
92
  if (typeof options === 'boolean') {
93
- throw new error_1.MongoDriverError('Invalid first parameter to count');
93
+ throw new error_1.MongoInvalidArgumentError('Invalid first parameter to count');
94
94
  }
95
95
  if (typeof options === 'function')
96
96
  (callback = options), (options = {});
@@ -104,7 +104,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
104
104
  explain(verbosity, callback) {
105
105
  if (typeof verbosity === 'function')
106
106
  (callback = verbosity), (verbosity = true);
107
- if (verbosity === undefined)
107
+ if (verbosity == null)
108
108
  verbosity = true;
109
109
  return execute_operation_1.executeOperation(this.topology, new find_1.FindOperation(undefined, this.namespace, this[kFilter], {
110
110
  ...this[kBuiltOptions],
@@ -179,7 +179,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
179
179
  addQueryModifier(name, value) {
180
180
  abstract_cursor_1.assertUninitialized(this);
181
181
  if (name[0] !== '$') {
182
- throw new error_1.MongoDriverError(`${name} is not a valid query modifier`);
182
+ throw new error_1.MongoInvalidArgumentError(`${name} is not a valid query modifier`);
183
183
  }
184
184
  // Strip of the $
185
185
  const field = name.substr(1);
@@ -216,7 +216,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
216
216
  this[kBuiltOptions].showRecordId = value;
217
217
  break;
218
218
  default:
219
- throw new error_1.MongoDriverError(`invalid query modifier: ${name}`);
219
+ throw new error_1.MongoInvalidArgumentError(`Invalid query modifier: ${name}`);
220
220
  }
221
221
  return this;
222
222
  }
@@ -238,7 +238,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
238
238
  maxAwaitTimeMS(value) {
239
239
  abstract_cursor_1.assertUninitialized(this);
240
240
  if (typeof value !== 'number') {
241
- throw new error_1.MongoDriverError('maxAwaitTimeMS must be a number');
241
+ throw new error_1.MongoInvalidArgumentError('Argument for maxAwaitTimeMS must be a number');
242
242
  }
243
243
  this[kBuiltOptions].maxAwaitTimeMS = value;
244
244
  return this;
@@ -251,11 +251,51 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
251
251
  maxTimeMS(value) {
252
252
  abstract_cursor_1.assertUninitialized(this);
253
253
  if (typeof value !== 'number') {
254
- throw new error_1.MongoDriverError('maxTimeMS must be a number');
254
+ throw new error_1.MongoInvalidArgumentError('Argument for maxTimeMS must be a number');
255
255
  }
256
256
  this[kBuiltOptions].maxTimeMS = value;
257
257
  return this;
258
258
  }
259
+ /**
260
+ * Add a project stage to the aggregation pipeline
261
+ *
262
+ * @remarks
263
+ * In order to strictly type this function you must provide an interface
264
+ * that represents the effect of your projection on the result documents.
265
+ *
266
+ * By default chaining a projection to your cursor changes the returned type to the generic
267
+ * {@link Document} type.
268
+ * You should specify a parameterized type to have assertions on your final results.
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * // Best way
273
+ * const docs: FindCursor<{ a: number }> = cursor.project<{ a: number }>({ _id: 0, a: true });
274
+ * // Flexible way
275
+ * const docs: FindCursor<Document> = cursor.project({ _id: 0, a: true });
276
+ * ```
277
+ *
278
+ * @remarks
279
+ *
280
+ * **Note for Typescript Users:** adding a transform changes the return type of the iteration of this cursor,
281
+ * it **does not** return a new instance of a cursor. This means when calling project,
282
+ * you should always assign the result to a new variable in order to get a correctly typed cursor variable.
283
+ * Take note of the following example:
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const cursor: FindCursor<{ a: number; b: string }> = coll.find();
288
+ * const projectCursor = cursor.project<{ a: number }>({ _id: 0, a: true });
289
+ * const aPropOnlyArray: {a: number}[] = await projectCursor.toArray();
290
+ *
291
+ * // or always use chaining and save the final cursor
292
+ *
293
+ * const cursor = coll.find().project<{ a: string }>({
294
+ * _id: 0,
295
+ * a: { $convert: { input: '$a', to: 'string' }
296
+ * }});
297
+ * ```
298
+ */
259
299
  project(value) {
260
300
  abstract_cursor_1.assertUninitialized(this);
261
301
  this[kBuiltOptions].projection = value;
@@ -270,7 +310,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
270
310
  sort(sort, direction) {
271
311
  abstract_cursor_1.assertUninitialized(this);
272
312
  if (this[kBuiltOptions].tailable) {
273
- throw new error_1.MongoDriverError('Tailable cursor does not support sorting');
313
+ throw new error_1.MongoTailableCursorError('Tailable cursor does not support sorting');
274
314
  }
275
315
  this[kBuiltOptions].sort = sort_1.formatSort(sort, direction);
276
316
  return this;
@@ -284,7 +324,7 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
284
324
  allowDiskUse() {
285
325
  abstract_cursor_1.assertUninitialized(this);
286
326
  if (!this[kBuiltOptions].sort) {
287
- throw new error_1.MongoDriverError('allowDiskUse requires a sort specification');
327
+ throw new error_1.MongoInvalidArgumentError('Option "allowDiskUse" requires a sort specification');
288
328
  }
289
329
  this[kBuiltOptions].allowDiskUse = true;
290
330
  return this;
@@ -307,10 +347,10 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
307
347
  limit(value) {
308
348
  abstract_cursor_1.assertUninitialized(this);
309
349
  if (this[kBuiltOptions].tailable) {
310
- throw new error_1.MongoDriverError('Tailable cursor does not support limit');
350
+ throw new error_1.MongoTailableCursorError('Tailable cursor does not support limit');
311
351
  }
312
352
  if (typeof value !== 'number') {
313
- throw new error_1.MongoDriverError('limit requires an integer');
353
+ throw new error_1.MongoInvalidArgumentError('Operation "limit" requires an integer');
314
354
  }
315
355
  this[kBuiltOptions].limit = value;
316
356
  return this;
@@ -323,10 +363,10 @@ class FindCursor extends abstract_cursor_1.AbstractCursor {
323
363
  skip(value) {
324
364
  abstract_cursor_1.assertUninitialized(this);
325
365
  if (this[kBuiltOptions].tailable) {
326
- throw new error_1.MongoDriverError('Tailable cursor does not support skip');
366
+ throw new error_1.MongoTailableCursorError('Tailable cursor does not support skip');
327
367
  }
328
368
  if (typeof value !== 'number') {
329
- throw new error_1.MongoDriverError('skip requires an integer');
369
+ throw new error_1.MongoInvalidArgumentError('Operation "skip" requires an integer');
330
370
  }
331
371
  this[kBuiltOptions].skip = value;
332
372
  return this;