use napi::anyhow::anyhow; use napi_derive::napi; use serde_json::Value; #[napi] pub fn evaluate_expression_sync(expression: String, context: Option) -> napi::Result { let ctx = context.unwrap_or(Value::Null); Ok( zen_expression::evaluate_expression(expression.as_str(), &ctx) .map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?, ) } #[allow(dead_code)] #[napi] pub fn evaluate_unary_expression_sync(expression: String, context: Value) -> napi::Result { Ok( zen_expression::evaluate_unary_expression(expression.as_str(), &context) .map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?, ) } #[allow(dead_code)] #[napi] pub fn render_template_sync(template: String, context: Value) -> napi::Result { Ok(zen_tmpl::render(template.as_str(), &context) .map_err(|e| anyhow!(serde_json::to_string(&e).unwrap_or_else(|_| e.to_string())))?) } #[allow(dead_code)] #[napi] pub async fn evaluate_expression( expression: String, context: Option, ) -> napi::Result { napi::tokio::spawn(async move { evaluate_expression_sync(expression, context) }) .await .map_err(|_| anyhow!("Hook timed out"))? } #[allow(dead_code)] #[napi] pub async fn evaluate_unary_expression(expression: String, context: Value) -> napi::Result { napi::tokio::spawn(async move { evaluate_unary_expression_sync(expression, context) }) .await .map_err(|_| anyhow!("Hook timed out"))? } #[allow(dead_code)] #[napi] pub async fn render_template(template: String, context: Value) -> napi::Result { napi::tokio::spawn(async move { render_template_sync(template, context) }) .await .map_err(|_| anyhow!("Hook timed out"))? }