From 65aa5c0c1bb5bba1ee74612fcae0463b6fd25d0b Mon Sep 17 00:00:00 2001 From: William Chong Date: Tue, 1 Jul 2025 10:00:22 +0400 Subject: [PATCH 1/3] feat: add support for additional platforms --- src/load.ts | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/load.ts b/src/load.ts index 87f0a47..3ce8061 100644 --- a/src/load.ts +++ b/src/load.ts @@ -1,17 +1,20 @@ -// This module loads the platform-specific build of the addon on -// the current system. The supported platforms are registered in -// the `platforms` object below, whose entries can be managed by -// by the Neon CLI: -// -// https://www.npmjs.com/package/@neon-rs/cli - -module.exports = require('@neon-rs/load').proxy({ - platforms: { - 'win32-x64-msvc': () => require('@kurrent/bridge-win32-x64-msvc'), - 'darwin-x64': () => require('@kurrent/bridge-darwin-x64'), - 'darwin-arm64': () => require('@kurrent/bridge-darwin-arm64'), - 'linux-x64-gnu': () => require('@kurrent/bridge-linux-x64-gnu'), - 'linux-arm64-gnu': () => require('@kurrent/bridge-linux-arm64-gnu') - }, - debug: () => require('../index.node') -}); +// This module loads the platform-specific build of the addon on +// the current system. The supported platforms are registered in +// the `platforms` object below, whose entries can be managed by +// by the Neon CLI: +// +// https://www.npmjs.com/package/@neon-rs/cli + +module.exports = require('@neon-rs/load').proxy({ + platforms: { + 'win32-x64-msvc': () => require('@kurrent/bridge-win32-x64-msvc'), + 'win32-arm64-msvc': () => require('@kurrent/bridge-win32-arm64-msvc'), + 'darwin-x64': () => require('@kurrent/bridge-darwin-x64'), + 'darwin-arm64': () => require('@kurrent/bridge-darwin-arm64'), + 'linux-x64-gnu': () => require('@kurrent/bridge-linux-x64-gnu'), + 'linux-arm64-gnu': () => require('@kurrent/bridge-linux-arm64-gnu'), + 'linux-x64-musl': () => require('@kurrent/bridge-linux-x64-musl'), + 'linux-arm64-musl': () => require('@kurrent/bridge-linux-arm64-musl') + }, + debug: () => require('../index.node') +}); From 912fae07326883f8ab1d1a9a71948a9eb013397d Mon Sep 17 00:00:00 2001 From: William Chong Date: Tue, 1 Jul 2025 10:06:43 +0400 Subject: [PATCH 2/3] chore: upgrade kurrentdb --- Cargo.lock | 134 +++++++++++++++++++++------------------ crates/bridge/Cargo.toml | 2 +- 2 files changed, 73 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ff63f4..848aae8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,11 +119,10 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.9" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ - "async-trait", "axum-core", "bytes", "futures-util", @@ -139,20 +138,19 @@ dependencies = [ "rustversion", "serde", "sync_wrapper", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", ] [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", @@ -378,6 +376,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -549,19 +557,13 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.1", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.15.2" @@ -865,14 +867,10 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "indenter" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" @@ -881,7 +879,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown", ] [[package]] @@ -935,9 +933,9 @@ dependencies = [ [[package]] name = "kurrentdb" -version = "1.0.0-alpha.3" +version = "1.0.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c3848145058bc9f1d253a762e75293e07b6132c677591c8635d6f20bd9707f" +checksum = "b8ca80172a796514d13014d36fd5c9b73f2dbee0391309420276371f2ea2f8af" dependencies = [ "async-stream", "base64", @@ -946,6 +944,7 @@ dependencies = [ "bytes", "chrono", "eventstore-macros", + "eyre", "futures", "http", "hyper", @@ -955,7 +954,7 @@ dependencies = [ "nom", "prost", "prost-types", - "rand", + "rand 0.9.1", "reqwest", "rustls", "rustls-native-certs", @@ -966,7 +965,7 @@ dependencies = [ "tokio-rustls", "tonic", "tonic-build", - "tower 0.5.2", + "tower", "tracing", "url", "urlencoding", @@ -1031,9 +1030,9 @@ checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" @@ -1187,7 +1186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.7.1", + "indexmap", ] [[package]] @@ -1328,7 +1327,7 @@ checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", "getrandom 0.2.15", - "rand", + "rand 0.8.5", "ring", "rustc-hash 2.1.1", "rustls", @@ -1370,8 +1369,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -1381,7 +1390,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -1393,6 +1412,15 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.5.10" @@ -1465,7 +1493,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", - "tower 0.5.2", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1913,11 +1941,10 @@ dependencies = [ [[package]] name = "tonic" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ - "async-stream", "async-trait", "axum", "base64", @@ -1933,12 +1960,11 @@ dependencies = [ "pin-project", "prost", "rustls-native-certs", - "rustls-pemfile", "socket2", "tokio", "tokio-rustls", "tokio-stream", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", "tracing", @@ -1946,9 +1972,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" +checksum = "eac6f67be712d12f0b41328db3137e0d0757645d8904b4cb7d51cd9c2279e847" dependencies = [ "prettyplease", "proc-macro2", @@ -1958,26 +1984,6 @@ dependencies = [ "syn 2.0.99", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower" version = "0.5.2" @@ -1986,11 +1992,15 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", + "indexmap", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] diff --git a/crates/bridge/Cargo.toml b/crates/bridge/Cargo.toml index c9c6de5..146ae4b 100644 --- a/crates/bridge/Cargo.toml +++ b/crates/bridge/Cargo.toml @@ -32,4 +32,4 @@ version = "1" features = ["serde", "v4"] [dependencies.kurrentdb] -version = "1.0.0-alpha.3" +version = "1.0.0-alpha.4" From 537cdf88668f6646c35b57f8886eaa74ac95419f Mon Sep 17 00:00:00 2001 From: William Chong Date: Tue, 1 Jul 2025 10:21:25 +0400 Subject: [PATCH 3/3] feat: add eyre error handling support --- Cargo.lock | 1 + crates/bridge/Cargo.toml | 2 +- crates/bridge/src/error.rs | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 848aae8..6c9a3f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -217,6 +217,7 @@ name = "bridge" version = "0.1.0" dependencies = [ "chrono", + "eyre", "kurrentdb", "lazy_static", "neon", diff --git a/crates/bridge/Cargo.toml b/crates/bridge/Cargo.toml index 146ae4b..388c32c 100644 --- a/crates/bridge/Cargo.toml +++ b/crates/bridge/Cargo.toml @@ -17,7 +17,7 @@ neon = "1" lazy_static = "1" serde_json = "1" serde = "1" - +eyre = "0.6" [dependencies.tokio] version = "1" diff --git a/crates/bridge/src/error.rs b/crates/bridge/src/error.rs index d6e150f..5954f3a 100644 --- a/crates/bridge/src/error.rs +++ b/crates/bridge/src/error.rs @@ -1,5 +1,6 @@ use kurrentdb::Endpoint; use neon::{object::Object, prelude::Context, prelude::JsError, result::JsResult}; +use eyre::Report; #[derive(Debug)] pub enum ErrorKind { @@ -31,6 +32,20 @@ impl From for ErrorKind { } } +impl From for ErrorKind { + fn from(err: Report) -> Self { + if let Some(kdb_err) = err.downcast_ref::() { + return ErrorKind::from(kdb_err.clone()); + } + + if let Some(parse_err) = err.downcast_ref::() { + return ErrorKind::from(parse_err.clone()); + } + + ErrorKind::UnknownError(err.to_string()) + } +} + pub fn create_js_error<'a, C, E>(cx: &mut C, error: E) -> JsResult<'a, JsError> where C: Context<'a>, @@ -45,7 +60,7 @@ where ErrorKind::ParseError(msg) => ("ParseError", msg.clone()), ErrorKind::AccessDeniedError => ("AccessDeniedError", format!("{:?}", kind)), ErrorKind::NotLeaderError(_) => ("NotLeaderError", format!("{:?}", kind)), - ErrorKind::UnknownError(msg) => ("UnknownError", msg.clone()) + ErrorKind::UnknownError(msg) => ("UnknownError", msg.clone()), }; let error = JsError::error(cx, &error_message)?;