@depup/mongodb 7.1.0-depup.0

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 (396) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +33 -0
  3. package/etc/prepare.js +12 -0
  4. package/lib/admin.js +136 -0
  5. package/lib/admin.js.map +1 -0
  6. package/lib/bson.js +85 -0
  7. package/lib/bson.js.map +1 -0
  8. package/lib/bulk/common.js +835 -0
  9. package/lib/bulk/common.js.map +1 -0
  10. package/lib/bulk/ordered.js +67 -0
  11. package/lib/bulk/ordered.js.map +1 -0
  12. package/lib/bulk/unordered.js +92 -0
  13. package/lib/bulk/unordered.js.map +1 -0
  14. package/lib/change_stream.js +513 -0
  15. package/lib/change_stream.js.map +1 -0
  16. package/lib/client-side-encryption/auto_encrypter.js +272 -0
  17. package/lib/client-side-encryption/auto_encrypter.js.map +1 -0
  18. package/lib/client-side-encryption/client_encryption.js +609 -0
  19. package/lib/client-side-encryption/client_encryption.js.map +1 -0
  20. package/lib/client-side-encryption/errors.js +138 -0
  21. package/lib/client-side-encryption/errors.js.map +1 -0
  22. package/lib/client-side-encryption/mongocryptd_manager.js +85 -0
  23. package/lib/client-side-encryption/mongocryptd_manager.js.map +1 -0
  24. package/lib/client-side-encryption/providers/aws.js +23 -0
  25. package/lib/client-side-encryption/providers/aws.js.map +1 -0
  26. package/lib/client-side-encryption/providers/azure.js +132 -0
  27. package/lib/client-side-encryption/providers/azure.js.map +1 -0
  28. package/lib/client-side-encryption/providers/gcp.js +16 -0
  29. package/lib/client-side-encryption/providers/gcp.js.map +1 -0
  30. package/lib/client-side-encryption/providers/index.js +43 -0
  31. package/lib/client-side-encryption/providers/index.js.map +1 -0
  32. package/lib/client-side-encryption/state_machine.js +427 -0
  33. package/lib/client-side-encryption/state_machine.js.map +1 -0
  34. package/lib/cmap/auth/auth_provider.js +51 -0
  35. package/lib/cmap/auth/auth_provider.js.map +1 -0
  36. package/lib/cmap/auth/aws4.js +161 -0
  37. package/lib/cmap/auth/aws4.js.map +1 -0
  38. package/lib/cmap/auth/aws_temporary_credentials.js +103 -0
  39. package/lib/cmap/auth/aws_temporary_credentials.js.map +1 -0
  40. package/lib/cmap/auth/gssapi.js +155 -0
  41. package/lib/cmap/auth/gssapi.js.map +1 -0
  42. package/lib/cmap/auth/mongo_credentials.js +169 -0
  43. package/lib/cmap/auth/mongo_credentials.js.map +1 -0
  44. package/lib/cmap/auth/mongodb_aws.js +128 -0
  45. package/lib/cmap/auth/mongodb_aws.js.map +1 -0
  46. package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +84 -0
  47. package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js.map +1 -0
  48. package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +62 -0
  49. package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js.map +1 -0
  50. package/lib/cmap/auth/mongodb_oidc/callback_workflow.js +141 -0
  51. package/lib/cmap/auth/mongodb_oidc/callback_workflow.js.map +1 -0
  52. package/lib/cmap/auth/mongodb_oidc/command_builders.js +44 -0
  53. package/lib/cmap/auth/mongodb_oidc/command_builders.js.map +1 -0
  54. package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +39 -0
  55. package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js.map +1 -0
  56. package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +122 -0
  57. package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js.map +1 -0
  58. package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +32 -0
  59. package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js.map +1 -0
  60. package/lib/cmap/auth/mongodb_oidc/token_cache.js +52 -0
  61. package/lib/cmap/auth/mongodb_oidc/token_cache.js.map +1 -0
  62. package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +23 -0
  63. package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js.map +1 -0
  64. package/lib/cmap/auth/mongodb_oidc.js +73 -0
  65. package/lib/cmap/auth/mongodb_oidc.js.map +1 -0
  66. package/lib/cmap/auth/plain.js +26 -0
  67. package/lib/cmap/auth/plain.js.map +1 -0
  68. package/lib/cmap/auth/providers.js +22 -0
  69. package/lib/cmap/auth/providers.js.map +1 -0
  70. package/lib/cmap/auth/scram.js +254 -0
  71. package/lib/cmap/auth/scram.js.map +1 -0
  72. package/lib/cmap/auth/x509.js +36 -0
  73. package/lib/cmap/auth/x509.js.map +1 -0
  74. package/lib/cmap/command_monitoring_events.js +223 -0
  75. package/lib/cmap/command_monitoring_events.js.map +1 -0
  76. package/lib/cmap/commands.js +535 -0
  77. package/lib/cmap/commands.js.map +1 -0
  78. package/lib/cmap/connect.js +381 -0
  79. package/lib/cmap/connect.js.map +1 -0
  80. package/lib/cmap/connection.js +571 -0
  81. package/lib/cmap/connection.js.map +1 -0
  82. package/lib/cmap/connection_pool.js +558 -0
  83. package/lib/cmap/connection_pool.js.map +1 -0
  84. package/lib/cmap/connection_pool_events.js +190 -0
  85. package/lib/cmap/connection_pool_events.js.map +1 -0
  86. package/lib/cmap/errors.js +108 -0
  87. package/lib/cmap/errors.js.map +1 -0
  88. package/lib/cmap/handshake/client_metadata.js +242 -0
  89. package/lib/cmap/handshake/client_metadata.js.map +1 -0
  90. package/lib/cmap/metrics.js +62 -0
  91. package/lib/cmap/metrics.js.map +1 -0
  92. package/lib/cmap/stream_description.js +70 -0
  93. package/lib/cmap/stream_description.js.map +1 -0
  94. package/lib/cmap/wire_protocol/compression.js +178 -0
  95. package/lib/cmap/wire_protocol/compression.js.map +1 -0
  96. package/lib/cmap/wire_protocol/constants.js +21 -0
  97. package/lib/cmap/wire_protocol/constants.js.map +1 -0
  98. package/lib/cmap/wire_protocol/on_data.js +111 -0
  99. package/lib/cmap/wire_protocol/on_data.js.map +1 -0
  100. package/lib/cmap/wire_protocol/on_demand/document.js +222 -0
  101. package/lib/cmap/wire_protocol/on_demand/document.js.map +1 -0
  102. package/lib/cmap/wire_protocol/responses.js +315 -0
  103. package/lib/cmap/wire_protocol/responses.js.map +1 -0
  104. package/lib/cmap/wire_protocol/shared.js +35 -0
  105. package/lib/cmap/wire_protocol/shared.js.map +1 -0
  106. package/lib/collection.js +751 -0
  107. package/lib/collection.js.map +1 -0
  108. package/lib/connection_string.js +1090 -0
  109. package/lib/connection_string.js.map +1 -0
  110. package/lib/constants.js +170 -0
  111. package/lib/constants.js.map +1 -0
  112. package/lib/cursor/abstract_cursor.js +924 -0
  113. package/lib/cursor/abstract_cursor.js.map +1 -0
  114. package/lib/cursor/aggregation_cursor.js +164 -0
  115. package/lib/cursor/aggregation_cursor.js.map +1 -0
  116. package/lib/cursor/change_stream_cursor.js +104 -0
  117. package/lib/cursor/change_stream_cursor.js.map +1 -0
  118. package/lib/cursor/client_bulk_write_cursor.js +52 -0
  119. package/lib/cursor/client_bulk_write_cursor.js.map +1 -0
  120. package/lib/cursor/explainable_cursor.js +36 -0
  121. package/lib/cursor/explainable_cursor.js.map +1 -0
  122. package/lib/cursor/find_cursor.js +399 -0
  123. package/lib/cursor/find_cursor.js.map +1 -0
  124. package/lib/cursor/list_collections_cursor.js +34 -0
  125. package/lib/cursor/list_collections_cursor.js.map +1 -0
  126. package/lib/cursor/list_indexes_cursor.js +32 -0
  127. package/lib/cursor/list_indexes_cursor.js.map +1 -0
  128. package/lib/cursor/list_search_indexes_cursor.js +14 -0
  129. package/lib/cursor/list_search_indexes_cursor.js.map +1 -0
  130. package/lib/cursor/run_command_cursor.js +94 -0
  131. package/lib/cursor/run_command_cursor.js.map +1 -0
  132. package/lib/db.js +419 -0
  133. package/lib/db.js.map +1 -0
  134. package/lib/deps.js +112 -0
  135. package/lib/deps.js.map +1 -0
  136. package/lib/encrypter.js +106 -0
  137. package/lib/encrypter.js.map +1 -0
  138. package/lib/error.js +1380 -0
  139. package/lib/error.js.map +1 -0
  140. package/lib/explain.js +59 -0
  141. package/lib/explain.js.map +1 -0
  142. package/lib/gridfs/download.js +305 -0
  143. package/lib/gridfs/download.js.map +1 -0
  144. package/lib/gridfs/index.js +164 -0
  145. package/lib/gridfs/index.js.map +1 -0
  146. package/lib/gridfs/upload.js +358 -0
  147. package/lib/gridfs/upload.js.map +1 -0
  148. package/lib/index.js +193 -0
  149. package/lib/index.js.map +1 -0
  150. package/lib/mongo_client.js +557 -0
  151. package/lib/mongo_client.js.map +1 -0
  152. package/lib/mongo_client_auth_providers.js +80 -0
  153. package/lib/mongo_client_auth_providers.js.map +1 -0
  154. package/lib/mongo_logger.js +655 -0
  155. package/lib/mongo_logger.js.map +1 -0
  156. package/lib/mongo_types.js +56 -0
  157. package/lib/mongo_types.js.map +1 -0
  158. package/lib/operations/aggregate.js +90 -0
  159. package/lib/operations/aggregate.js.map +1 -0
  160. package/lib/operations/client_bulk_write/client_bulk_write.js +51 -0
  161. package/lib/operations/client_bulk_write/client_bulk_write.js.map +1 -0
  162. package/lib/operations/client_bulk_write/command_builder.js +340 -0
  163. package/lib/operations/client_bulk_write/command_builder.js.map +1 -0
  164. package/lib/operations/client_bulk_write/common.js +3 -0
  165. package/lib/operations/client_bulk_write/common.js.map +1 -0
  166. package/lib/operations/client_bulk_write/executor.js +120 -0
  167. package/lib/operations/client_bulk_write/executor.js.map +1 -0
  168. package/lib/operations/client_bulk_write/results_merger.js +204 -0
  169. package/lib/operations/client_bulk_write/results_merger.js.map +1 -0
  170. package/lib/operations/command.js +83 -0
  171. package/lib/operations/command.js.map +1 -0
  172. package/lib/operations/count.js +45 -0
  173. package/lib/operations/count.js.map +1 -0
  174. package/lib/operations/create_collection.js +109 -0
  175. package/lib/operations/create_collection.js.map +1 -0
  176. package/lib/operations/delete.js +125 -0
  177. package/lib/operations/delete.js.map +1 -0
  178. package/lib/operations/distinct.js +61 -0
  179. package/lib/operations/distinct.js.map +1 -0
  180. package/lib/operations/drop.js +93 -0
  181. package/lib/operations/drop.js.map +1 -0
  182. package/lib/operations/end_sessions.js +34 -0
  183. package/lib/operations/end_sessions.js.map +1 -0
  184. package/lib/operations/estimated_document_count.js +41 -0
  185. package/lib/operations/estimated_document_count.js.map +1 -0
  186. package/lib/operations/execute_operation.js +239 -0
  187. package/lib/operations/execute_operation.js.map +1 -0
  188. package/lib/operations/find.js +148 -0
  189. package/lib/operations/find.js.map +1 -0
  190. package/lib/operations/find_and_modify.js +158 -0
  191. package/lib/operations/find_and_modify.js.map +1 -0
  192. package/lib/operations/get_more.js +62 -0
  193. package/lib/operations/get_more.js.map +1 -0
  194. package/lib/operations/indexes.js +186 -0
  195. package/lib/operations/indexes.js.map +1 -0
  196. package/lib/operations/insert.js +70 -0
  197. package/lib/operations/insert.js.map +1 -0
  198. package/lib/operations/kill_cursors.js +43 -0
  199. package/lib/operations/kill_cursors.js.map +1 -0
  200. package/lib/operations/list_collections.js +53 -0
  201. package/lib/operations/list_collections.js.map +1 -0
  202. package/lib/operations/list_databases.js +40 -0
  203. package/lib/operations/list_databases.js.map +1 -0
  204. package/lib/operations/operation.js +102 -0
  205. package/lib/operations/operation.js.map +1 -0
  206. package/lib/operations/profiling_level.js +43 -0
  207. package/lib/operations/profiling_level.js.map +1 -0
  208. package/lib/operations/remove_user.js +27 -0
  209. package/lib/operations/remove_user.js.map +1 -0
  210. package/lib/operations/rename.js +38 -0
  211. package/lib/operations/rename.js.map +1 -0
  212. package/lib/operations/run_command.js +47 -0
  213. package/lib/operations/run_command.js.map +1 -0
  214. package/lib/operations/search_indexes/create.js +33 -0
  215. package/lib/operations/search_indexes/create.js.map +1 -0
  216. package/lib/operations/search_indexes/drop.js +43 -0
  217. package/lib/operations/search_indexes/drop.js.map +1 -0
  218. package/lib/operations/search_indexes/update.js +35 -0
  219. package/lib/operations/search_indexes/update.js.map +1 -0
  220. package/lib/operations/set_profiling_level.js +53 -0
  221. package/lib/operations/set_profiling_level.js.map +1 -0
  222. package/lib/operations/stats.js +27 -0
  223. package/lib/operations/stats.js.map +1 -0
  224. package/lib/operations/update.js +188 -0
  225. package/lib/operations/update.js.map +1 -0
  226. package/lib/operations/validate_collection.js +37 -0
  227. package/lib/operations/validate_collection.js.map +1 -0
  228. package/lib/read_concern.js +73 -0
  229. package/lib/read_concern.js.map +1 -0
  230. package/lib/read_preference.js +191 -0
  231. package/lib/read_preference.js.map +1 -0
  232. package/lib/sdam/common.js +49 -0
  233. package/lib/sdam/common.js.map +1 -0
  234. package/lib/sdam/events.js +146 -0
  235. package/lib/sdam/events.js.map +1 -0
  236. package/lib/sdam/monitor.js +544 -0
  237. package/lib/sdam/monitor.js.map +1 -0
  238. package/lib/sdam/server.js +404 -0
  239. package/lib/sdam/server.js.map +1 -0
  240. package/lib/sdam/server_description.js +204 -0
  241. package/lib/sdam/server_description.js.map +1 -0
  242. package/lib/sdam/server_selection.js +294 -0
  243. package/lib/sdam/server_selection.js.map +1 -0
  244. package/lib/sdam/server_selection_events.js +85 -0
  245. package/lib/sdam/server_selection_events.js.map +1 -0
  246. package/lib/sdam/srv_polling.js +108 -0
  247. package/lib/sdam/srv_polling.js.map +1 -0
  248. package/lib/sdam/topology.js +652 -0
  249. package/lib/sdam/topology.js.map +1 -0
  250. package/lib/sdam/topology_description.js +383 -0
  251. package/lib/sdam/topology_description.js.map +1 -0
  252. package/lib/sessions.js +892 -0
  253. package/lib/sessions.js.map +1 -0
  254. package/lib/sort.js +103 -0
  255. package/lib/sort.js.map +1 -0
  256. package/lib/timeout.js +296 -0
  257. package/lib/timeout.js.map +1 -0
  258. package/lib/transactions.js +135 -0
  259. package/lib/transactions.js.map +1 -0
  260. package/lib/utils.js +1163 -0
  261. package/lib/utils.js.map +1 -0
  262. package/lib/write_concern.js +100 -0
  263. package/lib/write_concern.js.map +1 -0
  264. package/mongodb.d.ts +9018 -0
  265. package/package.json +197 -0
  266. package/src/admin.ts +173 -0
  267. package/src/bson.ts +149 -0
  268. package/src/bulk/common.ts +1251 -0
  269. package/src/bulk/ordered.ts +83 -0
  270. package/src/bulk/unordered.ts +115 -0
  271. package/src/change_stream.ts +1160 -0
  272. package/src/client-side-encryption/auto_encrypter.ts +469 -0
  273. package/src/client-side-encryption/client_encryption.ts +1150 -0
  274. package/src/client-side-encryption/errors.ts +144 -0
  275. package/src/client-side-encryption/mongocryptd_manager.ts +100 -0
  276. package/src/client-side-encryption/providers/aws.ts +33 -0
  277. package/src/client-side-encryption/providers/azure.ts +181 -0
  278. package/src/client-side-encryption/providers/gcp.ts +16 -0
  279. package/src/client-side-encryption/providers/index.ts +207 -0
  280. package/src/client-side-encryption/state_machine.ts +651 -0
  281. package/src/cmap/auth/auth_provider.ts +77 -0
  282. package/src/cmap/auth/aws4.ts +207 -0
  283. package/src/cmap/auth/aws_temporary_credentials.ts +129 -0
  284. package/src/cmap/auth/gssapi.ts +203 -0
  285. package/src/cmap/auth/mongo_credentials.ts +292 -0
  286. package/src/cmap/auth/mongodb_aws.ts +179 -0
  287. package/src/cmap/auth/mongodb_oidc/automated_callback_workflow.ts +88 -0
  288. package/src/cmap/auth/mongodb_oidc/azure_machine_workflow.ts +73 -0
  289. package/src/cmap/auth/mongodb_oidc/callback_workflow.ts +188 -0
  290. package/src/cmap/auth/mongodb_oidc/command_builders.ts +53 -0
  291. package/src/cmap/auth/mongodb_oidc/gcp_machine_workflow.ts +46 -0
  292. package/src/cmap/auth/mongodb_oidc/human_callback_workflow.ts +141 -0
  293. package/src/cmap/auth/mongodb_oidc/k8s_machine_workflow.ts +31 -0
  294. package/src/cmap/auth/mongodb_oidc/token_cache.ts +62 -0
  295. package/src/cmap/auth/mongodb_oidc/token_machine_workflow.ts +22 -0
  296. package/src/cmap/auth/mongodb_oidc.ts +185 -0
  297. package/src/cmap/auth/plain.ts +25 -0
  298. package/src/cmap/auth/providers.ts +22 -0
  299. package/src/cmap/auth/scram.ts +344 -0
  300. package/src/cmap/auth/x509.ts +43 -0
  301. package/src/cmap/command_monitoring_events.ts +316 -0
  302. package/src/cmap/commands.ts +788 -0
  303. package/src/cmap/connect.ts +518 -0
  304. package/src/cmap/connection.ts +931 -0
  305. package/src/cmap/connection_pool.ts +831 -0
  306. package/src/cmap/connection_pool_events.ts +300 -0
  307. package/src/cmap/errors.ts +119 -0
  308. package/src/cmap/handshake/client_metadata.ts +353 -0
  309. package/src/cmap/metrics.ts +58 -0
  310. package/src/cmap/stream_description.ts +96 -0
  311. package/src/cmap/wire_protocol/compression.ts +211 -0
  312. package/src/cmap/wire_protocol/constants.ts +17 -0
  313. package/src/cmap/wire_protocol/on_data.ts +139 -0
  314. package/src/cmap/wire_protocol/on_demand/document.ts +358 -0
  315. package/src/cmap/wire_protocol/responses.ts +393 -0
  316. package/src/cmap/wire_protocol/shared.ts +48 -0
  317. package/src/collection.ts +1314 -0
  318. package/src/connection_string.ts +1297 -0
  319. package/src/constants.ts +176 -0
  320. package/src/cursor/abstract_cursor.ts +1247 -0
  321. package/src/cursor/aggregation_cursor.ts +245 -0
  322. package/src/cursor/change_stream_cursor.ts +171 -0
  323. package/src/cursor/client_bulk_write_cursor.ts +83 -0
  324. package/src/cursor/explainable_cursor.ts +51 -0
  325. package/src/cursor/find_cursor.ts +497 -0
  326. package/src/cursor/list_collections_cursor.ts +50 -0
  327. package/src/cursor/list_indexes_cursor.ts +37 -0
  328. package/src/cursor/list_search_indexes_cursor.ts +20 -0
  329. package/src/cursor/run_command_cursor.ts +178 -0
  330. package/src/db.ts +621 -0
  331. package/src/deps.ts +227 -0
  332. package/src/encrypter.ts +127 -0
  333. package/src/error.ts +1567 -0
  334. package/src/explain.ts +124 -0
  335. package/src/gridfs/download.ts +483 -0
  336. package/src/gridfs/index.ts +264 -0
  337. package/src/gridfs/upload.ts +537 -0
  338. package/src/index.ts +633 -0
  339. package/src/mongo_client.ts +1155 -0
  340. package/src/mongo_client_auth_providers.ts +87 -0
  341. package/src/mongo_logger.ts +1081 -0
  342. package/src/mongo_types.ts +678 -0
  343. package/src/operations/aggregate.ts +153 -0
  344. package/src/operations/client_bulk_write/client_bulk_write.ts +72 -0
  345. package/src/operations/client_bulk_write/command_builder.ts +487 -0
  346. package/src/operations/client_bulk_write/common.ts +276 -0
  347. package/src/operations/client_bulk_write/executor.ts +149 -0
  348. package/src/operations/client_bulk_write/results_merger.ts +260 -0
  349. package/src/operations/command.ts +171 -0
  350. package/src/operations/count.ts +74 -0
  351. package/src/operations/create_collection.ts +218 -0
  352. package/src/operations/delete.ts +183 -0
  353. package/src/operations/distinct.ts +92 -0
  354. package/src/operations/drop.ts +130 -0
  355. package/src/operations/end_sessions.ts +44 -0
  356. package/src/operations/estimated_document_count.ts +61 -0
  357. package/src/operations/execute_operation.ts +319 -0
  358. package/src/operations/find.ts +254 -0
  359. package/src/operations/find_and_modify.ts +319 -0
  360. package/src/operations/get_more.ts +108 -0
  361. package/src/operations/indexes.ts +418 -0
  362. package/src/operations/insert.ts +108 -0
  363. package/src/operations/kill_cursors.ts +64 -0
  364. package/src/operations/list_collections.ts +108 -0
  365. package/src/operations/list_databases.ts +68 -0
  366. package/src/operations/operation.ts +181 -0
  367. package/src/operations/profiling_level.ts +46 -0
  368. package/src/operations/remove_user.ts +36 -0
  369. package/src/operations/rename.ts +60 -0
  370. package/src/operations/run_command.ts +79 -0
  371. package/src/operations/search_indexes/create.ts +56 -0
  372. package/src/operations/search_indexes/drop.ts +58 -0
  373. package/src/operations/search_indexes/update.ts +45 -0
  374. package/src/operations/set_profiling_level.ts +74 -0
  375. package/src/operations/stats.ts +37 -0
  376. package/src/operations/update.ts +318 -0
  377. package/src/operations/validate_collection.ts +50 -0
  378. package/src/read_concern.ts +88 -0
  379. package/src/read_preference.ts +256 -0
  380. package/src/sdam/common.ts +74 -0
  381. package/src/sdam/events.ts +219 -0
  382. package/src/sdam/monitor.ts +771 -0
  383. package/src/sdam/server.ts +595 -0
  384. package/src/sdam/server_description.ts +297 -0
  385. package/src/sdam/server_selection.ts +415 -0
  386. package/src/sdam/server_selection_events.ts +142 -0
  387. package/src/sdam/srv_polling.ts +146 -0
  388. package/src/sdam/topology.ts +1100 -0
  389. package/src/sdam/topology_description.ts +548 -0
  390. package/src/sessions.ts +1244 -0
  391. package/src/sort.ts +141 -0
  392. package/src/timeout.ts +405 -0
  393. package/src/transactions.ts +181 -0
  394. package/src/utils.ts +1434 -0
  395. package/src/write_concern.ts +183 -0
  396. package/tsconfig.json +46 -0
package/src/db.ts ADDED
@@ -0,0 +1,621 @@
1
+ import { Admin } from './admin';
2
+ import { type BSONSerializeOptions, type Document, resolveBSONOptions } from './bson';
3
+ import { ChangeStream, type ChangeStreamDocument, type ChangeStreamOptions } from './change_stream';
4
+ import { Collection, type CollectionOptions } from './collection';
5
+ import * as CONSTANTS from './constants';
6
+ import { AggregationCursor } from './cursor/aggregation_cursor';
7
+ import { ListCollectionsCursor } from './cursor/list_collections_cursor';
8
+ import { RunCommandCursor, type RunCursorCommandOptions } from './cursor/run_command_cursor';
9
+ import { MongoInvalidArgumentError } from './error';
10
+ import type { MongoClient, PkFactory } from './mongo_client';
11
+ import type { Abortable, TODO_NODE_3286 } from './mongo_types';
12
+ import type { AggregateOptions } from './operations/aggregate';
13
+ import { type CreateCollectionOptions, createCollections } from './operations/create_collection';
14
+ import {
15
+ type DropCollectionOptions,
16
+ dropCollections,
17
+ DropDatabaseOperation,
18
+ type DropDatabaseOptions
19
+ } from './operations/drop';
20
+ import { executeOperation } from './operations/execute_operation';
21
+ import {
22
+ CreateIndexesOperation,
23
+ type CreateIndexesOptions,
24
+ type IndexDescriptionCompact,
25
+ type IndexDescriptionInfo,
26
+ type IndexInformationOptions,
27
+ type IndexSpecification
28
+ } from './operations/indexes';
29
+ import type { CollectionInfo, ListCollectionsOptions } from './operations/list_collections';
30
+ import { ProfilingLevelOperation, type ProfilingLevelOptions } from './operations/profiling_level';
31
+ import { RemoveUserOperation, type RemoveUserOptions } from './operations/remove_user';
32
+ import { RenameOperation, type RenameOptions } from './operations/rename';
33
+ import { RunCommandOperation, type RunCommandOptions } from './operations/run_command';
34
+ import {
35
+ type ProfilingLevel,
36
+ SetProfilingLevelOperation,
37
+ type SetProfilingLevelOptions
38
+ } from './operations/set_profiling_level';
39
+ import { DbStatsOperation, type DbStatsOptions } from './operations/stats';
40
+ import { ReadConcern } from './read_concern';
41
+ import { ReadPreference, type ReadPreferenceLike } from './read_preference';
42
+ import { DEFAULT_PK_FACTORY, filterOptions, MongoDBNamespace, resolveOptions } from './utils';
43
+ import { WriteConcern, type WriteConcernOptions } from './write_concern';
44
+
45
+ // Allowed parameters
46
+ const DB_OPTIONS_ALLOW_LIST = [
47
+ 'writeConcern',
48
+ 'readPreference',
49
+ 'readPreferenceTags',
50
+ 'native_parser',
51
+ 'forceServerObjectId',
52
+ 'pkFactory',
53
+ 'serializeFunctions',
54
+ 'raw',
55
+ 'authSource',
56
+ 'ignoreUndefined',
57
+ 'readConcern',
58
+ 'retryMiliSeconds',
59
+ 'numberOfRetries',
60
+ 'useBigInt64',
61
+ 'promoteBuffers',
62
+ 'promoteLongs',
63
+ 'bsonRegExp',
64
+ 'enableUtf8Validation',
65
+ 'promoteValues',
66
+ 'compression',
67
+ 'retryWrites',
68
+ 'timeoutMS'
69
+ ];
70
+
71
+ /** @internal */
72
+ export interface DbPrivate {
73
+ options?: DbOptions;
74
+ readPreference?: ReadPreference;
75
+ pkFactory: PkFactory;
76
+ readConcern?: ReadConcern;
77
+ bsonOptions: BSONSerializeOptions;
78
+ writeConcern?: WriteConcern;
79
+ namespace: MongoDBNamespace;
80
+ }
81
+
82
+ /** @public */
83
+ export interface DbOptions extends BSONSerializeOptions, WriteConcernOptions {
84
+ /** If the database authentication is dependent on another databaseName. */
85
+ authSource?: string;
86
+ /** Force server to assign _id values instead of driver. */
87
+ forceServerObjectId?: boolean;
88
+ /** The preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). */
89
+ readPreference?: ReadPreferenceLike;
90
+ /** A primary key factory object for generation of custom _id keys. */
91
+ pkFactory?: PkFactory;
92
+ /** Specify a read concern for the collection. (only MongoDB 3.2 or higher supported) */
93
+ readConcern?: ReadConcern;
94
+ /** Should retry failed writes */
95
+ retryWrites?: boolean;
96
+ /**
97
+ * @experimental
98
+ * Specifies the time an operation will run until it throws a timeout error
99
+ */
100
+ timeoutMS?: number;
101
+ }
102
+
103
+ /**
104
+ * The **Db** class is a class that represents a MongoDB Database.
105
+ * @public
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * import { MongoClient } from 'mongodb';
110
+ *
111
+ * interface Pet {
112
+ * name: string;
113
+ * kind: 'dog' | 'cat' | 'fish';
114
+ * }
115
+ *
116
+ * const client = new MongoClient('mongodb://localhost:27017');
117
+ * const db = client.db();
118
+ *
119
+ * // Create a collection that validates our union
120
+ * await db.createCollection<Pet>('pets', {
121
+ * validator: { $expr: { $in: ['$kind', ['dog', 'cat', 'fish']] } }
122
+ * })
123
+ * ```
124
+ */
125
+ export class Db {
126
+ /** @internal */
127
+ s: DbPrivate;
128
+
129
+ /**
130
+ * Gets the MongoClient associated with the Db.
131
+ * @public
132
+ */
133
+ readonly client: MongoClient;
134
+
135
+ public static SYSTEM_NAMESPACE_COLLECTION = CONSTANTS.SYSTEM_NAMESPACE_COLLECTION;
136
+ public static SYSTEM_INDEX_COLLECTION = CONSTANTS.SYSTEM_INDEX_COLLECTION;
137
+ public static SYSTEM_PROFILE_COLLECTION = CONSTANTS.SYSTEM_PROFILE_COLLECTION;
138
+ public static SYSTEM_USER_COLLECTION = CONSTANTS.SYSTEM_USER_COLLECTION;
139
+ public static SYSTEM_COMMAND_COLLECTION = CONSTANTS.SYSTEM_COMMAND_COLLECTION;
140
+ public static SYSTEM_JS_COLLECTION = CONSTANTS.SYSTEM_JS_COLLECTION;
141
+
142
+ /**
143
+ * Creates a new Db instance.
144
+ *
145
+ * Db name cannot contain a dot, the server may apply more restrictions when an operation is run.
146
+ *
147
+ * @param client - The MongoClient for the database.
148
+ * @param databaseName - The name of the database this instance represents.
149
+ * @param options - Optional settings for Db construction.
150
+ */
151
+ constructor(client: MongoClient, databaseName: string, options?: DbOptions) {
152
+ options = options ?? {};
153
+
154
+ // Filter the options
155
+ options = filterOptions(options, DB_OPTIONS_ALLOW_LIST);
156
+
157
+ // Ensure there are no dots in database name
158
+ if (typeof databaseName === 'string' && databaseName.includes('.')) {
159
+ throw new MongoInvalidArgumentError(`Database names cannot contain the character '.'`);
160
+ }
161
+
162
+ // Internal state of the db object
163
+ this.s = {
164
+ // Options
165
+ options,
166
+ // Unpack read preference
167
+ readPreference: ReadPreference.fromOptions(options),
168
+ // Merge bson options
169
+ bsonOptions: resolveBSONOptions(options, client),
170
+ // Set up the primary key factory or fallback to ObjectId
171
+ pkFactory: options?.pkFactory ?? DEFAULT_PK_FACTORY,
172
+ // ReadConcern
173
+ readConcern: ReadConcern.fromOptions(options),
174
+ writeConcern: WriteConcern.fromOptions(options),
175
+ // Namespace
176
+ namespace: new MongoDBNamespace(databaseName)
177
+ };
178
+
179
+ this.client = client;
180
+ }
181
+
182
+ get databaseName(): string {
183
+ return this.s.namespace.db;
184
+ }
185
+
186
+ // Options
187
+ get options(): DbOptions | undefined {
188
+ return this.s.options;
189
+ }
190
+
191
+ /**
192
+ * Check if a secondary can be used (because the read preference is *not* set to primary)
193
+ */
194
+ get secondaryOk(): boolean {
195
+ return this.s.readPreference?.preference !== 'primary' || false;
196
+ }
197
+
198
+ get readConcern(): ReadConcern | undefined {
199
+ return this.s.readConcern;
200
+ }
201
+
202
+ /**
203
+ * The current readPreference of the Db. If not explicitly defined for
204
+ * this Db, will be inherited from the parent MongoClient
205
+ */
206
+ get readPreference(): ReadPreference {
207
+ if (this.s.readPreference == null) {
208
+ return this.client.readPreference;
209
+ }
210
+
211
+ return this.s.readPreference;
212
+ }
213
+
214
+ get bsonOptions(): BSONSerializeOptions {
215
+ return this.s.bsonOptions;
216
+ }
217
+
218
+ // get the write Concern
219
+ get writeConcern(): WriteConcern | undefined {
220
+ return this.s.writeConcern;
221
+ }
222
+
223
+ get namespace(): string {
224
+ return this.s.namespace.toString();
225
+ }
226
+
227
+ public get timeoutMS(): number | undefined {
228
+ return this.s.options?.timeoutMS;
229
+ }
230
+
231
+ /**
232
+ * Create a new collection on a server with the specified options. Use this to create capped collections.
233
+ * More information about command options available at https://www.mongodb.com/docs/manual/reference/command/create/
234
+ *
235
+ * Collection namespace validation is performed server-side.
236
+ *
237
+ * @param name - The name of the collection to create
238
+ * @param options - Optional settings for the command
239
+ */
240
+ async createCollection<TSchema extends Document = Document>(
241
+ name: string,
242
+ options?: CreateCollectionOptions
243
+ ): Promise<Collection<TSchema>> {
244
+ options = resolveOptions(this, options);
245
+ return await createCollections<TSchema>(this, name, options);
246
+ }
247
+
248
+ /**
249
+ * Execute a command
250
+ *
251
+ * @remarks
252
+ * This command does not inherit options from the MongoClient.
253
+ *
254
+ * The driver will ensure the following fields are attached to the command sent to the server:
255
+ * - `lsid` - sourced from an implicit session or options.session
256
+ * - `$readPreference` - defaults to primary or can be configured by options.readPreference
257
+ * - `$db` - sourced from the name of this database
258
+ *
259
+ * If the client has a serverApi setting:
260
+ * - `apiVersion`
261
+ * - `apiStrict`
262
+ * - `apiDeprecationErrors`
263
+ *
264
+ * When in a transaction:
265
+ * - `readConcern` - sourced from readConcern set on the TransactionOptions
266
+ * - `writeConcern` - sourced from writeConcern set on the TransactionOptions
267
+ *
268
+ * Attaching any of the above fields to the command will have no effect as the driver will overwrite the value.
269
+ *
270
+ * @param command - The command to run
271
+ * @param options - Optional settings for the command
272
+ */
273
+ async command(command: Document, options?: RunCommandOptions & Abortable): Promise<Document> {
274
+ // Intentionally, we do not inherit options from parent for this operation.
275
+ return await executeOperation(
276
+ this.client,
277
+ new RunCommandOperation(
278
+ this.s.namespace,
279
+ command,
280
+ resolveOptions(undefined, {
281
+ ...resolveBSONOptions(options),
282
+ timeoutMS: options?.timeoutMS ?? this.timeoutMS,
283
+ session: options?.session,
284
+ readPreference: options?.readPreference,
285
+ signal: options?.signal
286
+ })
287
+ )
288
+ );
289
+ }
290
+
291
+ /**
292
+ * Execute an aggregation framework pipeline against the database.
293
+ *
294
+ * @param pipeline - An array of aggregation stages to be executed
295
+ * @param options - Optional settings for the command
296
+ */
297
+ aggregate<T extends Document = Document>(
298
+ pipeline: Document[] = [],
299
+ options?: AggregateOptions
300
+ ): AggregationCursor<T> {
301
+ return new AggregationCursor(
302
+ this.client,
303
+ this.s.namespace,
304
+ pipeline,
305
+ resolveOptions(this, options)
306
+ );
307
+ }
308
+
309
+ /** Return the Admin db instance */
310
+ admin(): Admin {
311
+ return new Admin(this);
312
+ }
313
+
314
+ /**
315
+ * Returns a reference to a MongoDB Collection. If it does not exist it will be created implicitly.
316
+ *
317
+ * Collection namespace validation is performed server-side.
318
+ *
319
+ * @param name - the collection name we wish to access.
320
+ * @returns return the new Collection instance
321
+ */
322
+ collection<TSchema extends Document = Document>(
323
+ name: string,
324
+ options: CollectionOptions = {}
325
+ ): Collection<TSchema> {
326
+ if (typeof options === 'function') {
327
+ throw new MongoInvalidArgumentError('The callback form of this helper has been removed.');
328
+ }
329
+ return new Collection<TSchema>(this, name, resolveOptions(this, options));
330
+ }
331
+
332
+ /**
333
+ * Get all the db statistics.
334
+ *
335
+ * @param options - Optional settings for the command
336
+ */
337
+ async stats(options?: DbStatsOptions): Promise<Document> {
338
+ return await executeOperation(
339
+ this.client,
340
+ new DbStatsOperation(this, resolveOptions(this, options))
341
+ );
342
+ }
343
+
344
+ /**
345
+ * List all collections of this database with optional filter
346
+ *
347
+ * @param filter - Query to filter collections by
348
+ * @param options - Optional settings for the command
349
+ */
350
+ listCollections(
351
+ filter: Document,
352
+ options: Exclude<ListCollectionsOptions, 'nameOnly'> & { nameOnly: true } & Abortable
353
+ ): ListCollectionsCursor<Pick<CollectionInfo, 'name' | 'type'>>;
354
+ listCollections(
355
+ filter: Document,
356
+ options: Exclude<ListCollectionsOptions, 'nameOnly'> & { nameOnly: false } & Abortable
357
+ ): ListCollectionsCursor<CollectionInfo>;
358
+ listCollections<
359
+ T extends Pick<CollectionInfo, 'name' | 'type'> | CollectionInfo =
360
+ | Pick<CollectionInfo, 'name' | 'type'>
361
+ | CollectionInfo
362
+ >(filter?: Document, options?: ListCollectionsOptions & Abortable): ListCollectionsCursor<T>;
363
+ listCollections<
364
+ T extends Pick<CollectionInfo, 'name' | 'type'> | CollectionInfo =
365
+ | Pick<CollectionInfo, 'name' | 'type'>
366
+ | CollectionInfo
367
+ >(
368
+ filter: Document = {},
369
+ options: ListCollectionsOptions & Abortable = {}
370
+ ): ListCollectionsCursor<T> {
371
+ return new ListCollectionsCursor<T>(this, filter, resolveOptions(this, options));
372
+ }
373
+
374
+ /**
375
+ * Rename a collection.
376
+ *
377
+ * @remarks
378
+ * This operation does not inherit options from the MongoClient.
379
+ *
380
+ * @param fromCollection - Name of current collection to rename
381
+ * @param toCollection - New name of of the collection
382
+ * @param options - Optional settings for the command
383
+ */
384
+ async renameCollection<TSchema extends Document = Document>(
385
+ fromCollection: string,
386
+ toCollection: string,
387
+ options?: RenameOptions
388
+ ): Promise<Collection<TSchema>> {
389
+ // Intentionally, we do not inherit options from parent for this operation.
390
+ return await executeOperation(
391
+ this.client,
392
+ new RenameOperation(
393
+ this.collection<TSchema>(fromCollection) as TODO_NODE_3286,
394
+ toCollection,
395
+ resolveOptions(undefined, {
396
+ ...options,
397
+ readPreference: ReadPreference.primary
398
+ })
399
+ ) as TODO_NODE_3286
400
+ );
401
+ }
402
+
403
+ /**
404
+ * Drop a collection from the database, removing it permanently. New accesses will create a new collection.
405
+ *
406
+ * @param name - Name of collection to drop
407
+ * @param options - Optional settings for the command
408
+ */
409
+ async dropCollection(name: string, options?: DropCollectionOptions): Promise<boolean> {
410
+ options = resolveOptions(this, options);
411
+ return await dropCollections(this, name, options);
412
+ }
413
+
414
+ /**
415
+ * Drop a database, removing it permanently from the server.
416
+ *
417
+ * @param options - Optional settings for the command
418
+ */
419
+ async dropDatabase(options?: DropDatabaseOptions): Promise<boolean> {
420
+ return await executeOperation(
421
+ this.client,
422
+ new DropDatabaseOperation(this, resolveOptions(this, options))
423
+ );
424
+ }
425
+
426
+ /**
427
+ * Fetch all collections for the current db.
428
+ *
429
+ * @param options - Optional settings for the command
430
+ */
431
+ async collections(options?: ListCollectionsOptions): Promise<Collection[]> {
432
+ options = resolveOptions(this, options);
433
+ const collections = await this.listCollections({}, { ...options, nameOnly: true }).toArray();
434
+
435
+ return collections
436
+ .filter(
437
+ // Filter collections removing any illegal ones
438
+ ({ name }) => !name.includes('$')
439
+ )
440
+ .map(({ name }) => new Collection(this, name, this.s.options));
441
+ }
442
+
443
+ /**
444
+ * Creates an index on the db and collection.
445
+ *
446
+ * @param name - Name of the collection to create the index on.
447
+ * @param indexSpec - Specify the field to index, or an index specification
448
+ * @param options - Optional settings for the command
449
+ */
450
+ async createIndex(
451
+ name: string,
452
+ indexSpec: IndexSpecification,
453
+ options?: CreateIndexesOptions
454
+ ): Promise<string> {
455
+ const indexes = await executeOperation(
456
+ this.client,
457
+ CreateIndexesOperation.fromIndexSpecification(this, name, indexSpec, options)
458
+ );
459
+ return indexes[0];
460
+ }
461
+
462
+ /**
463
+ * Remove a user from a database
464
+ *
465
+ * @param username - The username to remove
466
+ * @param options - Optional settings for the command
467
+ */
468
+ async removeUser(username: string, options?: RemoveUserOptions): Promise<boolean> {
469
+ return await executeOperation(
470
+ this.client,
471
+ new RemoveUserOperation(this, username, resolveOptions(this, options))
472
+ );
473
+ }
474
+
475
+ /**
476
+ * Set the current profiling level of MongoDB
477
+ *
478
+ * @param level - The new profiling level (off, slow_only, all).
479
+ * @param options - Optional settings for the command
480
+ */
481
+ async setProfilingLevel(
482
+ level: ProfilingLevel,
483
+ options?: SetProfilingLevelOptions
484
+ ): Promise<ProfilingLevel> {
485
+ return await executeOperation(
486
+ this.client,
487
+ new SetProfilingLevelOperation(this, level, resolveOptions(this, options))
488
+ );
489
+ }
490
+
491
+ /**
492
+ * Retrieve the current profiling Level for MongoDB
493
+ *
494
+ * @param options - Optional settings for the command
495
+ */
496
+ async profilingLevel(options?: ProfilingLevelOptions): Promise<string> {
497
+ return await executeOperation(
498
+ this.client,
499
+ new ProfilingLevelOperation(this, resolveOptions(this, options))
500
+ );
501
+ }
502
+
503
+ /**
504
+ * Retrieves this collections index info.
505
+ *
506
+ * @param name - The name of the collection.
507
+ * @param options - Optional settings for the command
508
+ */
509
+ indexInformation(
510
+ name: string,
511
+ options: IndexInformationOptions & { full: true }
512
+ ): Promise<IndexDescriptionInfo[]>;
513
+ indexInformation(
514
+ name: string,
515
+ options: IndexInformationOptions & { full?: false }
516
+ ): Promise<IndexDescriptionCompact>;
517
+ indexInformation(
518
+ name: string,
519
+ options: IndexInformationOptions
520
+ ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]>;
521
+ indexInformation(name: string): Promise<IndexDescriptionCompact>;
522
+ async indexInformation(
523
+ name: string,
524
+ options?: IndexInformationOptions
525
+ ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]> {
526
+ return await this.collection(name).indexInformation(resolveOptions(this, options));
527
+ }
528
+
529
+ /**
530
+ * Create a new Change Stream, watching for new changes (insertions, updates,
531
+ * replacements, deletions, and invalidations) in this database. Will ignore all
532
+ * changes to system collections.
533
+ *
534
+ * @remarks
535
+ * watch() accepts two generic arguments for distinct use cases:
536
+ * - The first is to provide the schema that may be defined for all the collections within this database
537
+ * - The second is to override the shape of the change stream document entirely, if it is not provided the type will default to ChangeStreamDocument of the first argument
538
+ *
539
+ * @remarks
540
+ * When `timeoutMS` is configured for a change stream, it will have different behaviour depending
541
+ * on whether the change stream is in iterator mode or emitter mode. In both cases, a change
542
+ * stream will time out if it does not receive a change event within `timeoutMS` of the last change
543
+ * event.
544
+ *
545
+ * Note that if a change stream is consistently timing out when watching a collection, database or
546
+ * client that is being changed, then this may be due to the server timing out before it can finish
547
+ * processing the existing oplog. To address this, restart the change stream with a higher
548
+ * `timeoutMS`.
549
+ *
550
+ * If the change stream times out the initial aggregate operation to establish the change stream on
551
+ * the server, then the client will close the change stream. If the getMore calls to the server
552
+ * time out, then the change stream will be left open, but will throw a MongoOperationTimeoutError
553
+ * when in iterator mode and emit an error event that returns a MongoOperationTimeoutError in
554
+ * emitter mode.
555
+ *
556
+ * To determine whether or not the change stream is still open following a timeout, check the
557
+ * {@link ChangeStream.closed} getter.
558
+ *
559
+ * @example
560
+ * In iterator mode, if a next() call throws a timeout error, it will attempt to resume the change stream.
561
+ * The next call can just be retried after this succeeds.
562
+ * ```ts
563
+ * const changeStream = collection.watch([], { timeoutMS: 100 });
564
+ * try {
565
+ * await changeStream.next();
566
+ * } catch (e) {
567
+ * if (e instanceof MongoOperationTimeoutError && !changeStream.closed) {
568
+ * await changeStream.next();
569
+ * }
570
+ * throw e;
571
+ * }
572
+ * ```
573
+ *
574
+ * @example
575
+ * In emitter mode, if the change stream goes `timeoutMS` without emitting a change event, it will
576
+ * emit an error event that returns a MongoOperationTimeoutError, but will not close the change
577
+ * stream unless the resume attempt fails. There is no need to re-establish change listeners as
578
+ * this will automatically continue emitting change events once the resume attempt completes.
579
+ *
580
+ * ```ts
581
+ * const changeStream = collection.watch([], { timeoutMS: 100 });
582
+ * changeStream.on('change', console.log);
583
+ * changeStream.on('error', e => {
584
+ * if (e instanceof MongoOperationTimeoutError && !changeStream.closed) {
585
+ * // do nothing
586
+ * } else {
587
+ * changeStream.close();
588
+ * }
589
+ * });
590
+ * ```
591
+ * @param pipeline - An array of {@link https://www.mongodb.com/docs/manual/reference/operator/aggregation-pipeline/|aggregation pipeline stages} through which to pass change stream documents. This allows for filtering (using $match) and manipulating the change stream documents.
592
+ * @param options - Optional settings for the command
593
+ * @typeParam TSchema - Type of the data being detected by the change stream
594
+ * @typeParam TChange - Type of the whole change stream document emitted
595
+ */
596
+ watch<
597
+ TSchema extends Document = Document,
598
+ TChange extends Document = ChangeStreamDocument<TSchema>
599
+ >(pipeline: Document[] = [], options: ChangeStreamOptions = {}): ChangeStream<TSchema, TChange> {
600
+ // Allow optionally not specifying a pipeline
601
+ if (!Array.isArray(pipeline)) {
602
+ options = pipeline;
603
+ pipeline = [];
604
+ }
605
+
606
+ return new ChangeStream<TSchema, TChange>(this, pipeline, resolveOptions(this, options));
607
+ }
608
+
609
+ /**
610
+ * A low level cursor API providing basic driver functionality:
611
+ * - ClientSession management
612
+ * - ReadPreference for server selection
613
+ * - Running getMores automatically when a local batch is exhausted
614
+ *
615
+ * @param command - The command that will start a cursor on the server.
616
+ * @param options - Configurations for running the command, bson options will apply to getMores
617
+ */
618
+ runCursorCommand(command: Document, options?: RunCursorCommandOptions): RunCommandCursor {
619
+ return new RunCommandCursor(this, command, options);
620
+ }
621
+ }