From f5673ca0a1bb5e7df5c218866ac14e04818fd7b2 Mon Sep 17 00:00:00 2001 From: Hand Sonic <8078023+HandSonic@users.noreply.github.com> Date: Wed, 16 Sep 2026 22:46:48 +0800 Subject: [PATCH] feat(mongodb): bson dumps and database backup/restore --- Cargo.lock | 19 + agents/drivers/duckdb/Cargo.lock | 17 + .../document/MongoDatabaseDumpDialog.vue | 438 ++++++++++ .../components/document/MongoImportDialog.vue | 73 +- .../__tests__/MongoDatabaseDumpDialog.spec.ts | 233 +++++ .../__tests__/MongoImportDialog.spec.ts | 54 +- .../src/components/layout/AppDialogs.vue | 8 + .../sidebar/SidebarTreeRuntimeHost.vue | 38 +- .../useSidebarTreeExportRuntime.spec.ts | 33 + .../useSidebarTreeToolRuntime.docs.spec.ts | 24 + .../src/composables/useDialogSources.ts | 20 + .../useSidebarTreeExportRuntime.ts | 10 +- .../composables/useSidebarTreeToolRuntime.ts | 7 + .../i18n/__tests__/mongodbDumpLocales.spec.ts | 26 + apps/desktop/src/i18n/locales/en.ts | 2 + apps/desktop/src/i18n/locales/es.ts | 2 + apps/desktop/src/i18n/locales/it.ts | 2 + apps/desktop/src/i18n/locales/ja.ts | 2 + apps/desktop/src/i18n/locales/ko.ts | 2 + .../src/i18n/locales/mongodbDatabaseDump.ts | 439 ++++++++++ apps/desktop/src/i18n/locales/pt-BR.ts | 2 + apps/desktop/src/i18n/locales/zh-CN.ts | 2 + apps/desktop/src/i18n/locales/zh-TW.ts | 2 + .../__tests__/mongodbDumpPreview.spec.ts | 50 ++ apps/desktop/src/lib/backend/api.ts | 7 + apps/desktop/src/lib/backend/http.ts | 139 +++ .../src/lib/backend/mongodbDumpTypes.ts | 72 ++ apps/desktop/src/lib/backend/tauri.ts | 37 +- apps/desktop/src/stores/connectionStore.ts | 2 + crates/dbx-core/Cargo.toml | 2 + crates/dbx-core/src/db/mongo_driver.rs | 6 +- crates/dbx-core/src/lib.rs | 1 + crates/dbx-core/src/mongodb_dump.rs | 639 ++++++++++++++ crates/dbx-core/src/mongodb_dump/archive.rs | 290 ++++++ crates/dbx-core/src/mongodb_dump/directory.rs | 302 +++++++ crates/dbx-core/src/mongodb_dump/metadata.rs | 190 ++++ crates/dbx-core/src/mongodb_dump/source.rs | 247 ++++++ crates/dbx-core/src/mongodb_dump/stream.rs | 377 ++++++++ crates/dbx-core/src/mongodb_import_export.rs | 347 +++++++- crates/dbx-core/tests/mongodb_dump_restore.rs | 822 ++++++++++++++++++ crates/dbx-web/Cargo.toml | 6 +- crates/dbx-web/src/main.rs | 19 + crates/dbx-web/src/routes/mod.rs | 1 + crates/dbx-web/src/routes/mongodb_dump.rs | 402 +++++++++ .../src/routes/mongodb_import_export.rs | 291 ++++++- crates/dbx-web/tests/mongodb_dump_http.rs | 118 +++ docs/content/docs/mongodb.cn.mdx | 27 +- docs/content/docs/mongodb.mdx | 27 +- docs/mongodb-database-dump-restore.md | 133 +++ docs/mongodb-database-restore-streaming.md | 111 +++ docs/mongodb-database-restore-v2.md | 238 +++++ src-tauri/src/commands/mod.rs | 1 + src-tauri/src/commands/mongodb_dump.rs | 96 ++ src-tauri/src/lib.rs | 6 + 54 files changed, 6355 insertions(+), 106 deletions(-) create mode 100644 apps/desktop/src/components/document/MongoDatabaseDumpDialog.vue create mode 100644 apps/desktop/src/components/document/__tests__/MongoDatabaseDumpDialog.spec.ts create mode 100644 apps/desktop/src/i18n/__tests__/mongodbDumpLocales.spec.ts create mode 100644 apps/desktop/src/i18n/locales/mongodbDatabaseDump.ts create mode 100644 apps/desktop/src/lib/backend/__tests__/mongodbDumpPreview.spec.ts create mode 100644 apps/desktop/src/lib/backend/mongodbDumpTypes.ts create mode 100644 crates/dbx-core/src/mongodb_dump.rs create mode 100644 crates/dbx-core/src/mongodb_dump/archive.rs create mode 100644 crates/dbx-core/src/mongodb_dump/directory.rs create mode 100644 crates/dbx-core/src/mongodb_dump/metadata.rs create mode 100644 crates/dbx-core/src/mongodb_dump/source.rs create mode 100644 crates/dbx-core/src/mongodb_dump/stream.rs create mode 100644 crates/dbx-core/tests/mongodb_dump_restore.rs create mode 100644 crates/dbx-web/src/routes/mongodb_dump.rs create mode 100644 crates/dbx-web/tests/mongodb_dump_http.rs create mode 100644 docs/mongodb-database-dump-restore.md create mode 100644 docs/mongodb-database-restore-streaming.md create mode 100644 docs/mongodb-database-restore-v2.md create mode 100644 src-tauri/src/commands/mongodb_dump.rs diff --git a/Cargo.lock b/Cargo.lock index f4529d9578..d0118c4eae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1701,6 +1701,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" + [[package]] name = "crc16" version = "0.4.0" @@ -2091,6 +2106,7 @@ dependencies = [ "calamine", "cbc 0.1.2", "chrono", + "crc", "csv", "dbx-sqlite-worker", "deadpool-postgres", @@ -2134,6 +2150,7 @@ dependencies = [ "serde_json", "serde_yaml", "serde_yaml_ng", + "sha1 0.10.7", "sha2 0.10.9", "sqlparser", "ssfmt", @@ -2215,6 +2232,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", + "tempfile", "tokio", "tokio-util", "tower-http", @@ -6899,6 +6917,7 @@ dependencies = [ "js-sys", "log", "mime", + "mime_guess", "native-tls", "percent-encoding", "pin-project-lite", diff --git a/agents/drivers/duckdb/Cargo.lock b/agents/drivers/duckdb/Cargo.lock index 6b6600204b..6201b0bc49 100644 --- a/agents/drivers/duckdb/Cargo.lock +++ b/agents/drivers/duckdb/Cargo.lock @@ -954,6 +954,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" + [[package]] name = "crc16" version = "0.4.0" @@ -1243,6 +1258,7 @@ dependencies = [ "calamine", "cbc 0.1.2", "chrono", + "crc", "csv", "dbx-sqlite-worker", "deadpool-postgres", @@ -1282,6 +1298,7 @@ dependencies = [ "serde_json", "serde_yaml", "serde_yaml_ng", + "sha1 0.10.7", "sha2 0.10.9", "sqlparser", "ssfmt", diff --git a/apps/desktop/src/components/document/MongoDatabaseDumpDialog.vue b/apps/desktop/src/components/document/MongoDatabaseDumpDialog.vue new file mode 100644 index 0000000000..660dcf9b40 --- /dev/null +++ b/apps/desktop/src/components/document/MongoDatabaseDumpDialog.vue @@ -0,0 +1,438 @@ + + + diff --git a/apps/desktop/src/components/document/MongoImportDialog.vue b/apps/desktop/src/components/document/MongoImportDialog.vue index 43e63ecb67..a66b187b47 100644 --- a/apps/desktop/src/components/document/MongoImportDialog.vue +++ b/apps/desktop/src/components/document/MongoImportDialog.vue @@ -1,5 +1,5 @@