From 0aa46154ab8e44f1b3faac65f281a2e0fdb0480a Mon Sep 17 00:00:00 2001 From: Diego Reis Date: Thu, 8 May 2025 10:32:46 -0300 Subject: [PATCH] bind/js: Add conversion from js types to limbo types --- bindings/javascript/src/lib.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 804d8fffd..c8214b79d 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -219,6 +219,39 @@ fn to_js_value(env: &napi::Env, value: &limbo_core::OwnedValue) -> napi::Result< } } +fn from_js_value(env: &napi::Env, value: JsUnknown) -> napi::Result { + match value.get_type()? { + napi::ValueType::Undefined | napi::ValueType::Null | napi::ValueType::Unknown => { + Ok(limbo_core::OwnedValue::Null) + } + napi::ValueType::Boolean => { + let b = value.coerce_to_bool()?.get_value()?; + Ok(limbo_core::OwnedValue::Integer(b as i64)) + } + napi::ValueType::Number => { + let num = value.coerce_to_number()?.get_double()?; + if num.fract() == 0.0 { + Ok(limbo_core::OwnedValue::Integer(num as i64)) + } else { + Ok(limbo_core::OwnedValue::Float(num)) + } + } + napi::ValueType::String => { + let s = value.coerce_to_string()?; + Ok(limbo_core::OwnedValue::Text(Text::from_str( + s.into_utf8()?.as_str()?, + ))) + } + napi::ValueType::Symbol + | napi::ValueType::Object + | napi::ValueType::Function + | napi::ValueType::External => Err(napi::Error::new( + napi::Status::GenericFailure, + "Unsupported type", + )), + } +} + struct DatabaseFile { file: Arc, }