oxygen-cli 1.40.2-beta.1 → 1.40.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.
- package/CHANGELOG.md +1750 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +1 -2
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +1 -5
- package/build/lib/cli.js +1 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +1 -9
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +52 -33
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +73 -42
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +5 -13
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/package.json +137 -139
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
- package/build/ox_modules/module-mongo.js +0 -302
- package/log.txt +0 -1614
- package/reports/2025-06-08_231627/report.html +0 -440
- package/reports/2025-06-09_223615/report.html +0 -440
- package/transpiled/mongodb/etc/prepare.js +0 -18
- package/transpiled/mongodb/lib/admin.js +0 -182
- package/transpiled/mongodb/lib/beta.js +0 -26
- package/transpiled/mongodb/lib/bson.js +0 -220
- package/transpiled/mongodb/lib/bulk/common.js +0 -1041
- package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
- package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
- package/transpiled/mongodb/lib/change_stream.js +0 -517
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
- package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
- package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
- package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
- package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
- package/transpiled/mongodb/lib/cmap/commands.js +0 -605
- package/transpiled/mongodb/lib/cmap/connect.js +0 -418
- package/transpiled/mongodb/lib/cmap/connection.js +0 -673
- package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
- package/transpiled/mongodb/lib/cmap/errors.js +0 -128
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
- package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
- package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
- package/transpiled/mongodb/lib/collection.js +0 -852
- package/transpiled/mongodb/lib/connection_string.js +0 -1452
- package/transpiled/mongodb/lib/constants.js +0 -162
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
- package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
- package/transpiled/mongodb/lib/db.js +0 -467
- package/transpiled/mongodb/lib/deps.js +0 -174
- package/transpiled/mongodb/lib/encrypter.js +0 -129
- package/transpiled/mongodb/lib/error.js +0 -1550
- package/transpiled/mongodb/lib/explain.js +0 -122
- package/transpiled/mongodb/lib/gridfs/download.js +0 -369
- package/transpiled/mongodb/lib/gridfs/index.js +0 -240
- package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
- package/transpiled/mongodb/lib/index.js +0 -975
- package/transpiled/mongodb/lib/mongo_client.js +0 -626
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
- package/transpiled/mongodb/lib/mongo_logger.js +0 -812
- package/transpiled/mongodb/lib/mongo_types.js +0 -71
- package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
- package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
- package/transpiled/mongodb/lib/operations/collections.js +0 -49
- package/transpiled/mongodb/lib/operations/command.js +0 -102
- package/transpiled/mongodb/lib/operations/count.js +0 -60
- package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
- package/transpiled/mongodb/lib/operations/delete.js +0 -134
- package/transpiled/mongodb/lib/operations/distinct.js +0 -77
- package/transpiled/mongodb/lib/operations/drop.js +0 -102
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
- package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
- package/transpiled/mongodb/lib/operations/find.js +0 -197
- package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
- package/transpiled/mongodb/lib/operations/get_more.js +0 -84
- package/transpiled/mongodb/lib/operations/indexes.js +0 -197
- package/transpiled/mongodb/lib/operations/insert.js +0 -138
- package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
- package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
- package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
- package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
- package/transpiled/mongodb/lib/operations/operation.js +0 -88
- package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
- package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
- package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
- package/transpiled/mongodb/lib/operations/rename.js +0 -48
- package/transpiled/mongodb/lib/operations/run_command.js +0 -64
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
- package/transpiled/mongodb/lib/operations/stats.js +0 -39
- package/transpiled/mongodb/lib/operations/update.js +0 -218
- package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
- package/transpiled/mongodb/lib/read_concern.js +0 -92
- package/transpiled/mongodb/lib/read_preference.js +0 -215
- package/transpiled/mongodb/lib/resource_management.js +0 -74
- package/transpiled/mongodb/lib/sdam/common.js +0 -53
- package/transpiled/mongodb/lib/sdam/events.js +0 -177
- package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
- package/transpiled/mongodb/lib/sdam/server.js +0 -463
- package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
- package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
- package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
- package/transpiled/mongodb/lib/sdam/topology.js +0 -833
- package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
- package/transpiled/mongodb/lib/sessions.js +0 -988
- package/transpiled/mongodb/lib/sort.js +0 -123
- package/transpiled/mongodb/lib/timeout.js +0 -349
- package/transpiled/mongodb/lib/transactions.js +0 -149
- package/transpiled/mongodb/lib/utils.js +0 -1502
- package/transpiled/mongodb/lib/write_concern.js +0 -115
|
@@ -1,1041 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.BulkOperationBase = exports.BulkWriteShimOperation = exports.FindOperators = exports.MongoBulkWriteError = exports.WriteError = exports.WriteConcernError = exports.BulkWriteResult = exports.Batch = exports.BatchType = void 0;
|
|
7
|
-
exports.mergeBatchResults = mergeBatchResults;
|
|
8
|
-
|
|
9
|
-
const bson_1 = require("../bson");
|
|
10
|
-
|
|
11
|
-
const error_1 = require("../error");
|
|
12
|
-
|
|
13
|
-
const delete_1 = require("../operations/delete");
|
|
14
|
-
|
|
15
|
-
const execute_operation_1 = require("../operations/execute_operation");
|
|
16
|
-
|
|
17
|
-
const insert_1 = require("../operations/insert");
|
|
18
|
-
|
|
19
|
-
const operation_1 = require("../operations/operation");
|
|
20
|
-
|
|
21
|
-
const update_1 = require("../operations/update");
|
|
22
|
-
|
|
23
|
-
const utils_1 = require("../utils");
|
|
24
|
-
|
|
25
|
-
const write_concern_1 = require("../write_concern");
|
|
26
|
-
/** @public */
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
exports.BatchType = Object.freeze({
|
|
30
|
-
INSERT: 1,
|
|
31
|
-
UPDATE: 2,
|
|
32
|
-
DELETE: 3
|
|
33
|
-
});
|
|
34
|
-
/**
|
|
35
|
-
* Keeps the state of a unordered batch so we can rewrite the results
|
|
36
|
-
* correctly after command execution
|
|
37
|
-
*
|
|
38
|
-
* @public
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
class Batch {
|
|
42
|
-
constructor(batchType, originalZeroIndex) {
|
|
43
|
-
this.originalZeroIndex = originalZeroIndex;
|
|
44
|
-
this.currentIndex = 0;
|
|
45
|
-
this.originalIndexes = [];
|
|
46
|
-
this.batchType = batchType;
|
|
47
|
-
this.operations = [];
|
|
48
|
-
this.size = 0;
|
|
49
|
-
this.sizeBytes = 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
exports.Batch = Batch;
|
|
55
|
-
/**
|
|
56
|
-
* @public
|
|
57
|
-
* The result of a bulk write.
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
class BulkWriteResult {
|
|
61
|
-
static generateIdMap(ids) {
|
|
62
|
-
const idMap = {};
|
|
63
|
-
|
|
64
|
-
for (const doc of ids) {
|
|
65
|
-
idMap[doc.index] = doc._id;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return idMap;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Create a new BulkWriteResult instance
|
|
72
|
-
* @internal
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
constructor(bulkResult, isOrdered) {
|
|
77
|
-
this.result = bulkResult;
|
|
78
|
-
this.insertedCount = this.result.nInserted ?? 0;
|
|
79
|
-
this.matchedCount = this.result.nMatched ?? 0;
|
|
80
|
-
this.modifiedCount = this.result.nModified ?? 0;
|
|
81
|
-
this.deletedCount = this.result.nRemoved ?? 0;
|
|
82
|
-
this.upsertedCount = this.result.upserted.length ?? 0;
|
|
83
|
-
this.upsertedIds = BulkWriteResult.generateIdMap(this.result.upserted);
|
|
84
|
-
this.insertedIds = BulkWriteResult.generateIdMap(this.getSuccessfullyInsertedIds(bulkResult, isOrdered));
|
|
85
|
-
Object.defineProperty(this, 'result', {
|
|
86
|
-
value: this.result,
|
|
87
|
-
enumerable: false
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
/** Evaluates to true if the bulk operation correctly executes */
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
get ok() {
|
|
94
|
-
return this.result.ok;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Returns document_ids that were actually inserted
|
|
98
|
-
* @internal
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
getSuccessfullyInsertedIds(bulkResult, isOrdered) {
|
|
103
|
-
if (bulkResult.writeErrors.length === 0) return bulkResult.insertedIds;
|
|
104
|
-
|
|
105
|
-
if (isOrdered) {
|
|
106
|
-
return bulkResult.insertedIds.slice(0, bulkResult.writeErrors[0].index);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return bulkResult.insertedIds.filter(({
|
|
110
|
-
index
|
|
111
|
-
}) => !bulkResult.writeErrors.some(writeError => index === writeError.index));
|
|
112
|
-
}
|
|
113
|
-
/** Returns the upserted id at the given index */
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
getUpsertedIdAt(index) {
|
|
117
|
-
return this.result.upserted[index];
|
|
118
|
-
}
|
|
119
|
-
/** Returns raw internal result */
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
getRawResponse() {
|
|
123
|
-
return this.result;
|
|
124
|
-
}
|
|
125
|
-
/** Returns true if the bulk operation contains a write error */
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
hasWriteErrors() {
|
|
129
|
-
return this.result.writeErrors.length > 0;
|
|
130
|
-
}
|
|
131
|
-
/** Returns the number of write errors from the bulk operation */
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
getWriteErrorCount() {
|
|
135
|
-
return this.result.writeErrors.length;
|
|
136
|
-
}
|
|
137
|
-
/** Returns a specific write error object */
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
getWriteErrorAt(index) {
|
|
141
|
-
return index < this.result.writeErrors.length ? this.result.writeErrors[index] : undefined;
|
|
142
|
-
}
|
|
143
|
-
/** Retrieve all write errors */
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
getWriteErrors() {
|
|
147
|
-
return this.result.writeErrors;
|
|
148
|
-
}
|
|
149
|
-
/** Retrieve the write concern error if one exists */
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
getWriteConcernError() {
|
|
153
|
-
if (this.result.writeConcernErrors.length === 0) {
|
|
154
|
-
return;
|
|
155
|
-
} else if (this.result.writeConcernErrors.length === 1) {
|
|
156
|
-
// Return the error
|
|
157
|
-
return this.result.writeConcernErrors[0];
|
|
158
|
-
} else {
|
|
159
|
-
// Combine the errors
|
|
160
|
-
let errmsg = '';
|
|
161
|
-
|
|
162
|
-
for (let i = 0; i < this.result.writeConcernErrors.length; i++) {
|
|
163
|
-
const err = this.result.writeConcernErrors[i];
|
|
164
|
-
errmsg = errmsg + err.errmsg; // TODO: Something better
|
|
165
|
-
|
|
166
|
-
if (i === 0) errmsg = errmsg + ' and ';
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return new WriteConcernError({
|
|
170
|
-
errmsg,
|
|
171
|
-
code: error_1.MONGODB_ERROR_CODES.WriteConcernTimeout
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
toString() {
|
|
177
|
-
return `BulkWriteResult(${bson_1.EJSON.stringify(this.result)})`;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
isOk() {
|
|
181
|
-
return this.result.ok === 1;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
exports.BulkWriteResult = BulkWriteResult;
|
|
187
|
-
/**
|
|
188
|
-
* An error representing a failure by the server to apply the requested write concern to the bulk operation.
|
|
189
|
-
* @public
|
|
190
|
-
* @category Error
|
|
191
|
-
*/
|
|
192
|
-
|
|
193
|
-
class WriteConcernError {
|
|
194
|
-
constructor(error) {
|
|
195
|
-
this.serverError = error;
|
|
196
|
-
}
|
|
197
|
-
/** Write concern error code. */
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
get code() {
|
|
201
|
-
return this.serverError.code;
|
|
202
|
-
}
|
|
203
|
-
/** Write concern error message. */
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
get errmsg() {
|
|
207
|
-
return this.serverError.errmsg;
|
|
208
|
-
}
|
|
209
|
-
/** Write concern error info. */
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
get errInfo() {
|
|
213
|
-
return this.serverError.errInfo;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
toJSON() {
|
|
217
|
-
return this.serverError;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
toString() {
|
|
221
|
-
return `WriteConcernError(${this.errmsg})`;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
exports.WriteConcernError = WriteConcernError;
|
|
227
|
-
/**
|
|
228
|
-
* An error that occurred during a BulkWrite on the server.
|
|
229
|
-
* @public
|
|
230
|
-
* @category Error
|
|
231
|
-
*/
|
|
232
|
-
|
|
233
|
-
class WriteError {
|
|
234
|
-
constructor(err) {
|
|
235
|
-
this.err = err;
|
|
236
|
-
}
|
|
237
|
-
/** WriteError code. */
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
get code() {
|
|
241
|
-
return this.err.code;
|
|
242
|
-
}
|
|
243
|
-
/** WriteError original bulk operation index. */
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
get index() {
|
|
247
|
-
return this.err.index;
|
|
248
|
-
}
|
|
249
|
-
/** WriteError message. */
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
get errmsg() {
|
|
253
|
-
return this.err.errmsg;
|
|
254
|
-
}
|
|
255
|
-
/** WriteError details. */
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
get errInfo() {
|
|
259
|
-
return this.err.errInfo;
|
|
260
|
-
}
|
|
261
|
-
/** Returns the underlying operation that caused the error */
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
getOperation() {
|
|
265
|
-
return this.err.op;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
toJSON() {
|
|
269
|
-
return {
|
|
270
|
-
code: this.err.code,
|
|
271
|
-
index: this.err.index,
|
|
272
|
-
errmsg: this.err.errmsg,
|
|
273
|
-
op: this.err.op
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
toString() {
|
|
278
|
-
return `WriteError(${JSON.stringify(this.toJSON())})`;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
exports.WriteError = WriteError;
|
|
284
|
-
/** Merges results into shared data structure */
|
|
285
|
-
|
|
286
|
-
function mergeBatchResults(batch, bulkResult, err, result) {
|
|
287
|
-
// If we have an error set the result to be the err object
|
|
288
|
-
if (err) {
|
|
289
|
-
result = err;
|
|
290
|
-
} else if (result && result.result) {
|
|
291
|
-
result = result.result;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
if (result == null) {
|
|
295
|
-
return;
|
|
296
|
-
} // Do we have a top level error stop processing and return
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (result.ok === 0 && bulkResult.ok === 1) {
|
|
300
|
-
bulkResult.ok = 0;
|
|
301
|
-
const writeError = {
|
|
302
|
-
index: 0,
|
|
303
|
-
code: result.code || 0,
|
|
304
|
-
errmsg: result.message,
|
|
305
|
-
errInfo: result.errInfo,
|
|
306
|
-
op: batch.operations[0]
|
|
307
|
-
};
|
|
308
|
-
bulkResult.writeErrors.push(new WriteError(writeError));
|
|
309
|
-
return;
|
|
310
|
-
} else if (result.ok === 0 && bulkResult.ok === 0) {
|
|
311
|
-
return;
|
|
312
|
-
} // If we have an insert Batch type
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if (isInsertBatch(batch) && result.n) {
|
|
316
|
-
bulkResult.nInserted = bulkResult.nInserted + result.n;
|
|
317
|
-
} // If we have an insert Batch type
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
if (isDeleteBatch(batch) && result.n) {
|
|
321
|
-
bulkResult.nRemoved = bulkResult.nRemoved + result.n;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
let nUpserted = 0; // We have an array of upserted values, we need to rewrite the indexes
|
|
325
|
-
|
|
326
|
-
if (Array.isArray(result.upserted)) {
|
|
327
|
-
nUpserted = result.upserted.length;
|
|
328
|
-
|
|
329
|
-
for (let i = 0; i < result.upserted.length; i++) {
|
|
330
|
-
bulkResult.upserted.push({
|
|
331
|
-
index: result.upserted[i].index + batch.originalZeroIndex,
|
|
332
|
-
_id: result.upserted[i]._id
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
} else if (result.upserted) {
|
|
336
|
-
nUpserted = 1;
|
|
337
|
-
bulkResult.upserted.push({
|
|
338
|
-
index: batch.originalZeroIndex,
|
|
339
|
-
_id: result.upserted
|
|
340
|
-
});
|
|
341
|
-
} // If we have an update Batch type
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
if (isUpdateBatch(batch) && result.n) {
|
|
345
|
-
const nModified = result.nModified;
|
|
346
|
-
bulkResult.nUpserted = bulkResult.nUpserted + nUpserted;
|
|
347
|
-
bulkResult.nMatched = bulkResult.nMatched + (result.n - nUpserted);
|
|
348
|
-
|
|
349
|
-
if (typeof nModified === 'number') {
|
|
350
|
-
bulkResult.nModified = bulkResult.nModified + nModified;
|
|
351
|
-
} else {
|
|
352
|
-
bulkResult.nModified = 0;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
if (Array.isArray(result.writeErrors)) {
|
|
357
|
-
for (let i = 0; i < result.writeErrors.length; i++) {
|
|
358
|
-
const writeError = {
|
|
359
|
-
index: batch.originalIndexes[result.writeErrors[i].index],
|
|
360
|
-
code: result.writeErrors[i].code,
|
|
361
|
-
errmsg: result.writeErrors[i].errmsg,
|
|
362
|
-
errInfo: result.writeErrors[i].errInfo,
|
|
363
|
-
op: batch.operations[result.writeErrors[i].index]
|
|
364
|
-
};
|
|
365
|
-
bulkResult.writeErrors.push(new WriteError(writeError));
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
if (result.writeConcernError) {
|
|
370
|
-
bulkResult.writeConcernErrors.push(new WriteConcernError(result.writeConcernError));
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
async function executeCommands(bulkOperation, options) {
|
|
375
|
-
if (bulkOperation.s.batches.length === 0) {
|
|
376
|
-
return new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
for (const batch of bulkOperation.s.batches) {
|
|
380
|
-
const finalOptions = (0, utils_1.resolveOptions)(bulkOperation, { ...options,
|
|
381
|
-
ordered: bulkOperation.isOrdered
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
if (finalOptions.bypassDocumentValidation !== true) {
|
|
385
|
-
delete finalOptions.bypassDocumentValidation;
|
|
386
|
-
} // Is the bypassDocumentValidation options specific
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
if (bulkOperation.s.bypassDocumentValidation === true) {
|
|
390
|
-
finalOptions.bypassDocumentValidation = true;
|
|
391
|
-
} // Is the checkKeys option disabled
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
if (bulkOperation.s.checkKeys === false) {
|
|
395
|
-
finalOptions.checkKeys = false;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
if (finalOptions.retryWrites) {
|
|
399
|
-
if (isUpdateBatch(batch)) {
|
|
400
|
-
finalOptions.retryWrites = finalOptions.retryWrites && !batch.operations.some(op => op.multi);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (isDeleteBatch(batch)) {
|
|
404
|
-
finalOptions.retryWrites = finalOptions.retryWrites && !batch.operations.some(op => op.limit === 0);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
const operation = isInsertBatch(batch) ? new insert_1.InsertOperation(bulkOperation.s.namespace, batch.operations, finalOptions) : isUpdateBatch(batch) ? new update_1.UpdateOperation(bulkOperation.s.namespace, batch.operations, finalOptions) : isDeleteBatch(batch) ? new delete_1.DeleteOperation(bulkOperation.s.namespace, batch.operations, finalOptions) : null;
|
|
409
|
-
if (operation == null) throw new error_1.MongoRuntimeError(`Unknown batchType: ${batch.batchType}`);
|
|
410
|
-
let thrownError = null;
|
|
411
|
-
let result;
|
|
412
|
-
|
|
413
|
-
try {
|
|
414
|
-
result = await (0, execute_operation_1.executeOperation)(bulkOperation.s.collection.client, operation, finalOptions.timeoutContext);
|
|
415
|
-
} catch (error) {
|
|
416
|
-
thrownError = error;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
if (thrownError != null) {
|
|
420
|
-
if (thrownError instanceof error_1.MongoWriteConcernError) {
|
|
421
|
-
mergeBatchResults(batch, bulkOperation.s.bulkResult, thrownError, result);
|
|
422
|
-
const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
|
|
423
|
-
throw new MongoBulkWriteError({
|
|
424
|
-
message: thrownError.result.writeConcernError.errmsg,
|
|
425
|
-
code: thrownError.result.writeConcernError.code
|
|
426
|
-
}, writeResult);
|
|
427
|
-
} else {
|
|
428
|
-
// Error is a driver related error not a bulk op error, return early
|
|
429
|
-
throw new MongoBulkWriteError(thrownError, new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered));
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
mergeBatchResults(batch, bulkOperation.s.bulkResult, thrownError, result);
|
|
434
|
-
const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
|
|
435
|
-
bulkOperation.handleWriteError(writeResult);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
bulkOperation.s.batches.length = 0;
|
|
439
|
-
const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
|
|
440
|
-
bulkOperation.handleWriteError(writeResult);
|
|
441
|
-
return writeResult;
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* An error indicating an unsuccessful Bulk Write
|
|
445
|
-
* @public
|
|
446
|
-
* @category Error
|
|
447
|
-
*/
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
class MongoBulkWriteError extends error_1.MongoServerError {
|
|
451
|
-
/**
|
|
452
|
-
* **Do not use this constructor!**
|
|
453
|
-
*
|
|
454
|
-
* Meant for internal use only.
|
|
455
|
-
*
|
|
456
|
-
* @remarks
|
|
457
|
-
* This class is only meant to be constructed within the driver. This constructor is
|
|
458
|
-
* not subject to semantic versioning compatibility guarantees and may change at any time.
|
|
459
|
-
*
|
|
460
|
-
* @public
|
|
461
|
-
**/
|
|
462
|
-
constructor(error, result) {
|
|
463
|
-
super(error);
|
|
464
|
-
this.writeErrors = [];
|
|
465
|
-
if (error instanceof WriteConcernError) this.err = error;else if (!(error instanceof Error)) {
|
|
466
|
-
this.message = error.message;
|
|
467
|
-
this.code = error.code;
|
|
468
|
-
this.writeErrors = error.writeErrors ?? [];
|
|
469
|
-
}
|
|
470
|
-
this.result = result;
|
|
471
|
-
Object.assign(this, error);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
get name() {
|
|
475
|
-
return 'MongoBulkWriteError';
|
|
476
|
-
}
|
|
477
|
-
/** Number of documents inserted. */
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
get insertedCount() {
|
|
481
|
-
return this.result.insertedCount;
|
|
482
|
-
}
|
|
483
|
-
/** Number of documents matched for update. */
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
get matchedCount() {
|
|
487
|
-
return this.result.matchedCount;
|
|
488
|
-
}
|
|
489
|
-
/** Number of documents modified. */
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
get modifiedCount() {
|
|
493
|
-
return this.result.modifiedCount;
|
|
494
|
-
}
|
|
495
|
-
/** Number of documents deleted. */
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
get deletedCount() {
|
|
499
|
-
return this.result.deletedCount;
|
|
500
|
-
}
|
|
501
|
-
/** Number of documents upserted. */
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
get upsertedCount() {
|
|
505
|
-
return this.result.upsertedCount;
|
|
506
|
-
}
|
|
507
|
-
/** Inserted document generated Id's, hash key is the index of the originating operation */
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
get insertedIds() {
|
|
511
|
-
return this.result.insertedIds;
|
|
512
|
-
}
|
|
513
|
-
/** Upserted document generated Id's, hash key is the index of the originating operation */
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
get upsertedIds() {
|
|
517
|
-
return this.result.upsertedIds;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
exports.MongoBulkWriteError = MongoBulkWriteError;
|
|
523
|
-
/**
|
|
524
|
-
* A builder object that is returned from {@link BulkOperationBase#find}.
|
|
525
|
-
* Is used to build a write operation that involves a query filter.
|
|
526
|
-
*
|
|
527
|
-
* @public
|
|
528
|
-
*/
|
|
529
|
-
|
|
530
|
-
class FindOperators {
|
|
531
|
-
/**
|
|
532
|
-
* Creates a new FindOperators object.
|
|
533
|
-
* @internal
|
|
534
|
-
*/
|
|
535
|
-
constructor(bulkOperation) {
|
|
536
|
-
this.bulkOperation = bulkOperation;
|
|
537
|
-
}
|
|
538
|
-
/** Add a multiple update operation to the bulk operation */
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
update(updateDocument) {
|
|
542
|
-
const currentOp = buildCurrentOp(this.bulkOperation);
|
|
543
|
-
return this.bulkOperation.addToOperationsList(exports.BatchType.UPDATE, (0, update_1.makeUpdateStatement)(currentOp.selector, updateDocument, { ...currentOp,
|
|
544
|
-
multi: true
|
|
545
|
-
}));
|
|
546
|
-
}
|
|
547
|
-
/** Add a single update operation to the bulk operation */
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
updateOne(updateDocument) {
|
|
551
|
-
if (!(0, utils_1.hasAtomicOperators)(updateDocument, this.bulkOperation.bsonOptions)) {
|
|
552
|
-
throw new error_1.MongoInvalidArgumentError('Update document requires atomic operators');
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
const currentOp = buildCurrentOp(this.bulkOperation);
|
|
556
|
-
return this.bulkOperation.addToOperationsList(exports.BatchType.UPDATE, (0, update_1.makeUpdateStatement)(currentOp.selector, updateDocument, { ...currentOp,
|
|
557
|
-
multi: false
|
|
558
|
-
}));
|
|
559
|
-
}
|
|
560
|
-
/** Add a replace one operation to the bulk operation */
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
replaceOne(replacement) {
|
|
564
|
-
if ((0, utils_1.hasAtomicOperators)(replacement)) {
|
|
565
|
-
throw new error_1.MongoInvalidArgumentError('Replacement document must not use atomic operators');
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
const currentOp = buildCurrentOp(this.bulkOperation);
|
|
569
|
-
return this.bulkOperation.addToOperationsList(exports.BatchType.UPDATE, (0, update_1.makeUpdateStatement)(currentOp.selector, replacement, { ...currentOp,
|
|
570
|
-
multi: false
|
|
571
|
-
}));
|
|
572
|
-
}
|
|
573
|
-
/** Add a delete one operation to the bulk operation */
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
deleteOne() {
|
|
577
|
-
const currentOp = buildCurrentOp(this.bulkOperation);
|
|
578
|
-
return this.bulkOperation.addToOperationsList(exports.BatchType.DELETE, (0, delete_1.makeDeleteStatement)(currentOp.selector, { ...currentOp,
|
|
579
|
-
limit: 1
|
|
580
|
-
}));
|
|
581
|
-
}
|
|
582
|
-
/** Add a delete many operation to the bulk operation */
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
delete() {
|
|
586
|
-
const currentOp = buildCurrentOp(this.bulkOperation);
|
|
587
|
-
return this.bulkOperation.addToOperationsList(exports.BatchType.DELETE, (0, delete_1.makeDeleteStatement)(currentOp.selector, { ...currentOp,
|
|
588
|
-
limit: 0
|
|
589
|
-
}));
|
|
590
|
-
}
|
|
591
|
-
/** Upsert modifier for update bulk operation, noting that this operation is an upsert. */
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
upsert() {
|
|
595
|
-
if (!this.bulkOperation.s.currentOp) {
|
|
596
|
-
this.bulkOperation.s.currentOp = {};
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
this.bulkOperation.s.currentOp.upsert = true;
|
|
600
|
-
return this;
|
|
601
|
-
}
|
|
602
|
-
/** Specifies the collation for the query condition. */
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
collation(collation) {
|
|
606
|
-
if (!this.bulkOperation.s.currentOp) {
|
|
607
|
-
this.bulkOperation.s.currentOp = {};
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
this.bulkOperation.s.currentOp.collation = collation;
|
|
611
|
-
return this;
|
|
612
|
-
}
|
|
613
|
-
/** Specifies arrayFilters for UpdateOne or UpdateMany bulk operations. */
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
arrayFilters(arrayFilters) {
|
|
617
|
-
if (!this.bulkOperation.s.currentOp) {
|
|
618
|
-
this.bulkOperation.s.currentOp = {};
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
this.bulkOperation.s.currentOp.arrayFilters = arrayFilters;
|
|
622
|
-
return this;
|
|
623
|
-
}
|
|
624
|
-
/** Specifies hint for the bulk operation. */
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
hint(hint) {
|
|
628
|
-
if (!this.bulkOperation.s.currentOp) {
|
|
629
|
-
this.bulkOperation.s.currentOp = {};
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
this.bulkOperation.s.currentOp.hint = hint;
|
|
633
|
-
return this;
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
exports.FindOperators = FindOperators;
|
|
639
|
-
/**
|
|
640
|
-
* TODO(NODE-4063)
|
|
641
|
-
* BulkWrites merge complexity is implemented in executeCommands
|
|
642
|
-
* This provides a vehicle to treat bulkOperations like any other operation (hence "shim")
|
|
643
|
-
* We would like this logic to simply live inside the BulkWriteOperation class
|
|
644
|
-
* @internal
|
|
645
|
-
*/
|
|
646
|
-
|
|
647
|
-
class BulkWriteShimOperation extends operation_1.AbstractOperation {
|
|
648
|
-
constructor(bulkOperation, options) {
|
|
649
|
-
super(options);
|
|
650
|
-
this.bulkOperation = bulkOperation;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
get commandName() {
|
|
654
|
-
return 'bulkWrite';
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
async execute(_server, session, timeoutContext) {
|
|
658
|
-
if (this.options.session == null) {
|
|
659
|
-
// An implicit session could have been created by 'executeOperation'
|
|
660
|
-
// So if we stick it on finalOptions here, each bulk operation
|
|
661
|
-
// will use this same session, it'll be passed in the same way
|
|
662
|
-
// an explicit session would be
|
|
663
|
-
this.options.session = session;
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
return await executeCommands(this.bulkOperation, { ...this.options,
|
|
667
|
-
timeoutContext
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
exports.BulkWriteShimOperation = BulkWriteShimOperation;
|
|
674
|
-
/** @public */
|
|
675
|
-
|
|
676
|
-
class BulkOperationBase {
|
|
677
|
-
/**
|
|
678
|
-
* Create a new OrderedBulkOperation or UnorderedBulkOperation instance
|
|
679
|
-
* @internal
|
|
680
|
-
*/
|
|
681
|
-
constructor(collection, options, isOrdered) {
|
|
682
|
-
this.collection = collection; // determine whether bulkOperation is ordered or unordered
|
|
683
|
-
|
|
684
|
-
this.isOrdered = isOrdered;
|
|
685
|
-
const topology = (0, utils_1.getTopology)(collection);
|
|
686
|
-
options = options == null ? {} : options; // TODO Bring from driver information in hello
|
|
687
|
-
// Get the namespace for the write operations
|
|
688
|
-
|
|
689
|
-
const namespace = collection.s.namespace; // Used to mark operation as executed
|
|
690
|
-
|
|
691
|
-
const executed = false; // Current item
|
|
692
|
-
|
|
693
|
-
const currentOp = undefined; // Set max byte size
|
|
694
|
-
|
|
695
|
-
const hello = topology.lastHello(); // If we have autoEncryption on, batch-splitting must be done on 2mb chunks, but single documents
|
|
696
|
-
// over 2mb are still allowed
|
|
697
|
-
|
|
698
|
-
const usingAutoEncryption = !!(topology.s.options && topology.s.options.autoEncrypter);
|
|
699
|
-
const maxBsonObjectSize = hello && hello.maxBsonObjectSize ? hello.maxBsonObjectSize : 1024 * 1024 * 16;
|
|
700
|
-
const maxBatchSizeBytes = usingAutoEncryption ? 1024 * 1024 * 2 : maxBsonObjectSize;
|
|
701
|
-
const maxWriteBatchSize = hello && hello.maxWriteBatchSize ? hello.maxWriteBatchSize : 1000; // Calculates the largest possible size of an Array key, represented as a BSON string
|
|
702
|
-
// element. This calculation:
|
|
703
|
-
// 1 byte for BSON type
|
|
704
|
-
// # of bytes = length of (string representation of (maxWriteBatchSize - 1))
|
|
705
|
-
// + 1 bytes for null terminator
|
|
706
|
-
|
|
707
|
-
const maxKeySize = (maxWriteBatchSize - 1).toString(10).length + 2; // Final options for retryable writes
|
|
708
|
-
|
|
709
|
-
let finalOptions = Object.assign({}, options);
|
|
710
|
-
finalOptions = (0, utils_1.applyRetryableWrites)(finalOptions, collection.s.db); // Final results
|
|
711
|
-
|
|
712
|
-
const bulkResult = {
|
|
713
|
-
ok: 1,
|
|
714
|
-
writeErrors: [],
|
|
715
|
-
writeConcernErrors: [],
|
|
716
|
-
insertedIds: [],
|
|
717
|
-
nInserted: 0,
|
|
718
|
-
nUpserted: 0,
|
|
719
|
-
nMatched: 0,
|
|
720
|
-
nModified: 0,
|
|
721
|
-
nRemoved: 0,
|
|
722
|
-
upserted: []
|
|
723
|
-
}; // Internal state
|
|
724
|
-
|
|
725
|
-
this.s = {
|
|
726
|
-
// Final result
|
|
727
|
-
bulkResult,
|
|
728
|
-
// Current batch state
|
|
729
|
-
currentBatch: undefined,
|
|
730
|
-
currentIndex: 0,
|
|
731
|
-
// ordered specific
|
|
732
|
-
currentBatchSize: 0,
|
|
733
|
-
currentBatchSizeBytes: 0,
|
|
734
|
-
// unordered specific
|
|
735
|
-
currentInsertBatch: undefined,
|
|
736
|
-
currentUpdateBatch: undefined,
|
|
737
|
-
currentRemoveBatch: undefined,
|
|
738
|
-
batches: [],
|
|
739
|
-
// Write concern
|
|
740
|
-
writeConcern: write_concern_1.WriteConcern.fromOptions(options),
|
|
741
|
-
// Max batch size options
|
|
742
|
-
maxBsonObjectSize,
|
|
743
|
-
maxBatchSizeBytes,
|
|
744
|
-
maxWriteBatchSize,
|
|
745
|
-
maxKeySize,
|
|
746
|
-
// Namespace
|
|
747
|
-
namespace,
|
|
748
|
-
// Topology
|
|
749
|
-
topology,
|
|
750
|
-
// Options
|
|
751
|
-
options: finalOptions,
|
|
752
|
-
// BSON options
|
|
753
|
-
bsonOptions: (0, bson_1.resolveBSONOptions)(options),
|
|
754
|
-
// Current operation
|
|
755
|
-
currentOp,
|
|
756
|
-
// Executed
|
|
757
|
-
executed,
|
|
758
|
-
// Collection
|
|
759
|
-
collection,
|
|
760
|
-
// Fundamental error
|
|
761
|
-
err: undefined,
|
|
762
|
-
// check keys
|
|
763
|
-
checkKeys: typeof options.checkKeys === 'boolean' ? options.checkKeys : false
|
|
764
|
-
}; // bypass Validation
|
|
765
|
-
|
|
766
|
-
if (options.bypassDocumentValidation === true) {
|
|
767
|
-
this.s.bypassDocumentValidation = true;
|
|
768
|
-
}
|
|
769
|
-
}
|
|
770
|
-
/**
|
|
771
|
-
* Add a single insert document to the bulk operation
|
|
772
|
-
*
|
|
773
|
-
* @example
|
|
774
|
-
* ```ts
|
|
775
|
-
* const bulkOp = collection.initializeOrderedBulkOp();
|
|
776
|
-
*
|
|
777
|
-
* // Adds three inserts to the bulkOp.
|
|
778
|
-
* bulkOp
|
|
779
|
-
* .insert({ a: 1 })
|
|
780
|
-
* .insert({ b: 2 })
|
|
781
|
-
* .insert({ c: 3 });
|
|
782
|
-
* await bulkOp.execute();
|
|
783
|
-
* ```
|
|
784
|
-
*/
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
insert(document) {
|
|
788
|
-
(0, utils_1.maybeAddIdToDocuments)(this.collection, document, {
|
|
789
|
-
forceServerObjectId: this.shouldForceServerObjectId()
|
|
790
|
-
});
|
|
791
|
-
return this.addToOperationsList(exports.BatchType.INSERT, document);
|
|
792
|
-
}
|
|
793
|
-
/**
|
|
794
|
-
* Builds a find operation for an update/updateOne/delete/deleteOne/replaceOne.
|
|
795
|
-
* Returns a builder object used to complete the definition of the operation.
|
|
796
|
-
*
|
|
797
|
-
* @example
|
|
798
|
-
* ```ts
|
|
799
|
-
* const bulkOp = collection.initializeOrderedBulkOp();
|
|
800
|
-
*
|
|
801
|
-
* // Add an updateOne to the bulkOp
|
|
802
|
-
* bulkOp.find({ a: 1 }).updateOne({ $set: { b: 2 } });
|
|
803
|
-
*
|
|
804
|
-
* // Add an updateMany to the bulkOp
|
|
805
|
-
* bulkOp.find({ c: 3 }).update({ $set: { d: 4 } });
|
|
806
|
-
*
|
|
807
|
-
* // Add an upsert
|
|
808
|
-
* bulkOp.find({ e: 5 }).upsert().updateOne({ $set: { f: 6 } });
|
|
809
|
-
*
|
|
810
|
-
* // Add a deletion
|
|
811
|
-
* bulkOp.find({ g: 7 }).deleteOne();
|
|
812
|
-
*
|
|
813
|
-
* // Add a multi deletion
|
|
814
|
-
* bulkOp.find({ h: 8 }).delete();
|
|
815
|
-
*
|
|
816
|
-
* // Add a replaceOne
|
|
817
|
-
* bulkOp.find({ i: 9 }).replaceOne({writeConcern: { j: 10 }});
|
|
818
|
-
*
|
|
819
|
-
* // Update using a pipeline (requires Mongodb 4.2 or higher)
|
|
820
|
-
* bulk.find({ k: 11, y: { $exists: true }, z: { $exists: true } }).updateOne([
|
|
821
|
-
* { $set: { total: { $sum: [ '$y', '$z' ] } } }
|
|
822
|
-
* ]);
|
|
823
|
-
*
|
|
824
|
-
* // All of the ops will now be executed
|
|
825
|
-
* await bulkOp.execute();
|
|
826
|
-
* ```
|
|
827
|
-
*/
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
find(selector) {
|
|
831
|
-
if (!selector) {
|
|
832
|
-
throw new error_1.MongoInvalidArgumentError('Bulk find operation must specify a selector');
|
|
833
|
-
} // Save a current selector
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
this.s.currentOp = {
|
|
837
|
-
selector: selector
|
|
838
|
-
};
|
|
839
|
-
return new FindOperators(this);
|
|
840
|
-
}
|
|
841
|
-
/** Specifies a raw operation to perform in the bulk write. */
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
raw(op) {
|
|
845
|
-
if (op == null || typeof op !== 'object') {
|
|
846
|
-
throw new error_1.MongoInvalidArgumentError('Operation must be an object with an operation key');
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
if ('insertOne' in op) {
|
|
850
|
-
const forceServerObjectId = this.shouldForceServerObjectId();
|
|
851
|
-
const document = op.insertOne && op.insertOne.document == null ? // TODO(NODE-6003): remove support for omitting the `documents` subdocument in bulk inserts
|
|
852
|
-
op.insertOne : op.insertOne.document;
|
|
853
|
-
(0, utils_1.maybeAddIdToDocuments)(this.collection, document, {
|
|
854
|
-
forceServerObjectId
|
|
855
|
-
});
|
|
856
|
-
return this.addToOperationsList(exports.BatchType.INSERT, document);
|
|
857
|
-
}
|
|
858
|
-
|
|
859
|
-
if ('replaceOne' in op || 'updateOne' in op || 'updateMany' in op) {
|
|
860
|
-
if ('replaceOne' in op) {
|
|
861
|
-
if ('q' in op.replaceOne) {
|
|
862
|
-
throw new error_1.MongoInvalidArgumentError('Raw operations are not allowed');
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
const updateStatement = (0, update_1.makeUpdateStatement)(op.replaceOne.filter, op.replaceOne.replacement, { ...op.replaceOne,
|
|
866
|
-
multi: false
|
|
867
|
-
});
|
|
868
|
-
|
|
869
|
-
if ((0, utils_1.hasAtomicOperators)(updateStatement.u)) {
|
|
870
|
-
throw new error_1.MongoInvalidArgumentError('Replacement document must not use atomic operators');
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
return this.addToOperationsList(exports.BatchType.UPDATE, updateStatement);
|
|
874
|
-
}
|
|
875
|
-
|
|
876
|
-
if ('updateOne' in op) {
|
|
877
|
-
if ('q' in op.updateOne) {
|
|
878
|
-
throw new error_1.MongoInvalidArgumentError('Raw operations are not allowed');
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
const updateStatement = (0, update_1.makeUpdateStatement)(op.updateOne.filter, op.updateOne.update, { ...op.updateOne,
|
|
882
|
-
multi: false
|
|
883
|
-
});
|
|
884
|
-
|
|
885
|
-
if (!(0, utils_1.hasAtomicOperators)(updateStatement.u, this.bsonOptions)) {
|
|
886
|
-
throw new error_1.MongoInvalidArgumentError('Update document requires atomic operators');
|
|
887
|
-
}
|
|
888
|
-
|
|
889
|
-
return this.addToOperationsList(exports.BatchType.UPDATE, updateStatement);
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
if ('updateMany' in op) {
|
|
893
|
-
if ('q' in op.updateMany) {
|
|
894
|
-
throw new error_1.MongoInvalidArgumentError('Raw operations are not allowed');
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
const updateStatement = (0, update_1.makeUpdateStatement)(op.updateMany.filter, op.updateMany.update, { ...op.updateMany,
|
|
898
|
-
multi: true
|
|
899
|
-
});
|
|
900
|
-
|
|
901
|
-
if (!(0, utils_1.hasAtomicOperators)(updateStatement.u, this.bsonOptions)) {
|
|
902
|
-
throw new error_1.MongoInvalidArgumentError('Update document requires atomic operators');
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
return this.addToOperationsList(exports.BatchType.UPDATE, updateStatement);
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
if ('deleteOne' in op) {
|
|
910
|
-
if ('q' in op.deleteOne) {
|
|
911
|
-
throw new error_1.MongoInvalidArgumentError('Raw operations are not allowed');
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
return this.addToOperationsList(exports.BatchType.DELETE, (0, delete_1.makeDeleteStatement)(op.deleteOne.filter, { ...op.deleteOne,
|
|
915
|
-
limit: 1
|
|
916
|
-
}));
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
if ('deleteMany' in op) {
|
|
920
|
-
if ('q' in op.deleteMany) {
|
|
921
|
-
throw new error_1.MongoInvalidArgumentError('Raw operations are not allowed');
|
|
922
|
-
}
|
|
923
|
-
|
|
924
|
-
return this.addToOperationsList(exports.BatchType.DELETE, (0, delete_1.makeDeleteStatement)(op.deleteMany.filter, { ...op.deleteMany,
|
|
925
|
-
limit: 0
|
|
926
|
-
}));
|
|
927
|
-
} // otherwise an unknown operation was provided
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
throw new error_1.MongoInvalidArgumentError('bulkWrite only supports insertOne, updateOne, updateMany, deleteOne, deleteMany');
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
get length() {
|
|
934
|
-
return this.s.currentIndex;
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
get bsonOptions() {
|
|
938
|
-
return this.s.bsonOptions;
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
get writeConcern() {
|
|
942
|
-
return this.s.writeConcern;
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
get batches() {
|
|
946
|
-
const batches = [...this.s.batches];
|
|
947
|
-
|
|
948
|
-
if (this.isOrdered) {
|
|
949
|
-
if (this.s.currentBatch) batches.push(this.s.currentBatch);
|
|
950
|
-
} else {
|
|
951
|
-
if (this.s.currentInsertBatch) batches.push(this.s.currentInsertBatch);
|
|
952
|
-
if (this.s.currentUpdateBatch) batches.push(this.s.currentUpdateBatch);
|
|
953
|
-
if (this.s.currentRemoveBatch) batches.push(this.s.currentRemoveBatch);
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
return batches;
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
async execute(options = {}) {
|
|
960
|
-
if (this.s.executed) {
|
|
961
|
-
throw new error_1.MongoBatchReExecutionError();
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
const writeConcern = write_concern_1.WriteConcern.fromOptions(options);
|
|
965
|
-
|
|
966
|
-
if (writeConcern) {
|
|
967
|
-
this.s.writeConcern = writeConcern;
|
|
968
|
-
} // If we have current batch
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
if (this.isOrdered) {
|
|
972
|
-
if (this.s.currentBatch) this.s.batches.push(this.s.currentBatch);
|
|
973
|
-
} else {
|
|
974
|
-
if (this.s.currentInsertBatch) this.s.batches.push(this.s.currentInsertBatch);
|
|
975
|
-
if (this.s.currentUpdateBatch) this.s.batches.push(this.s.currentUpdateBatch);
|
|
976
|
-
if (this.s.currentRemoveBatch) this.s.batches.push(this.s.currentRemoveBatch);
|
|
977
|
-
} // If we have no operations in the bulk raise an error
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
if (this.s.batches.length === 0) {
|
|
981
|
-
throw new error_1.MongoInvalidArgumentError('Invalid BulkOperation, Batch cannot be empty');
|
|
982
|
-
}
|
|
983
|
-
|
|
984
|
-
this.s.executed = true;
|
|
985
|
-
const finalOptions = { ...this.s.options,
|
|
986
|
-
...options
|
|
987
|
-
};
|
|
988
|
-
const operation = new BulkWriteShimOperation(this, finalOptions);
|
|
989
|
-
return await (0, execute_operation_1.executeOperation)(this.s.collection.client, operation, finalOptions.timeoutContext);
|
|
990
|
-
}
|
|
991
|
-
/**
|
|
992
|
-
* Handles the write error before executing commands
|
|
993
|
-
* @internal
|
|
994
|
-
*/
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
handleWriteError(writeResult) {
|
|
998
|
-
if (this.s.bulkResult.writeErrors.length > 0) {
|
|
999
|
-
const msg = this.s.bulkResult.writeErrors[0].errmsg ? this.s.bulkResult.writeErrors[0].errmsg : 'write operation failed';
|
|
1000
|
-
throw new MongoBulkWriteError({
|
|
1001
|
-
message: msg,
|
|
1002
|
-
code: this.s.bulkResult.writeErrors[0].code,
|
|
1003
|
-
writeErrors: this.s.bulkResult.writeErrors
|
|
1004
|
-
}, writeResult);
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
const writeConcernError = writeResult.getWriteConcernError();
|
|
1008
|
-
|
|
1009
|
-
if (writeConcernError) {
|
|
1010
|
-
throw new MongoBulkWriteError(writeConcernError, writeResult);
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
|
-
shouldForceServerObjectId() {
|
|
1015
|
-
return this.s.options.forceServerObjectId === true || this.s.collection.s.db.options?.forceServerObjectId === true;
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
}
|
|
1019
|
-
|
|
1020
|
-
exports.BulkOperationBase = BulkOperationBase;
|
|
1021
|
-
|
|
1022
|
-
function isInsertBatch(batch) {
|
|
1023
|
-
return batch.batchType === exports.BatchType.INSERT;
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
function isUpdateBatch(batch) {
|
|
1027
|
-
return batch.batchType === exports.BatchType.UPDATE;
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
function isDeleteBatch(batch) {
|
|
1031
|
-
return batch.batchType === exports.BatchType.DELETE;
|
|
1032
|
-
}
|
|
1033
|
-
|
|
1034
|
-
function buildCurrentOp(bulkOp) {
|
|
1035
|
-
let {
|
|
1036
|
-
currentOp
|
|
1037
|
-
} = bulkOp.s;
|
|
1038
|
-
bulkOp.s.currentOp = undefined;
|
|
1039
|
-
if (!currentOp) currentOp = {};
|
|
1040
|
-
return currentOp;
|
|
1041
|
-
}
|