mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-07 04:12:59 +00:00
This exposes the `LANCEDB_LOG` environment variable in node, so that users can now turn on logging. In addition, fixes a bug where only the top-level error from Rust was being shown. This PR makes sure the full error chain is included in the error message. In the future, will improve this so the error chain is set on the [cause](https://nodejs.org/api/errors.html#errorcause) property of JS errors https://github.com/lancedb/lancedb/issues/1779 Fixes #1774
38 lines
997 B
Rust
38 lines
997 B
Rust
pub type Result<T> = napi::Result<T>;
|
|
|
|
pub trait NapiErrorExt<T> {
|
|
/// Convert to a napi error using from_reason(err.to_string())
|
|
fn default_error(self) -> Result<T>;
|
|
}
|
|
|
|
impl<T> NapiErrorExt<T> for std::result::Result<T, lancedb::Error> {
|
|
fn default_error(self) -> Result<T> {
|
|
self.map_err(|err| convert_error(&err))
|
|
}
|
|
}
|
|
|
|
pub fn convert_error(err: &dyn std::error::Error) -> napi::Error {
|
|
let mut message = err.to_string();
|
|
|
|
// Append causes
|
|
let mut cause = err.source();
|
|
let mut indent = 2;
|
|
while let Some(err) = cause {
|
|
let cause_message = format!("Caused by: {}", err);
|
|
message.push_str(&indent_string(&cause_message, indent));
|
|
|
|
cause = err.source();
|
|
indent += 2;
|
|
}
|
|
|
|
napi::Error::from_reason(message)
|
|
}
|
|
|
|
fn indent_string(s: &str, amount: usize) -> String {
|
|
let indent = " ".repeat(amount);
|
|
s.lines()
|
|
.map(|line| format!("{}{}", indent, line))
|
|
.collect::<Vec<_>>()
|
|
.join("\n")
|
|
}
|