diff --git a/Cargo.lock b/Cargo.lock index b25fecd19..a8635013a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1783,6 +1783,7 @@ dependencies = [ "napi-derive", "oxc_allocator", "oxc_codegen", + "oxc_diagnostics", "oxc_isolated_declarations", "oxc_parser", "oxc_span", diff --git a/napi/transform/Cargo.toml b/napi/transform/Cargo.toml index 6d63835d8..d2099b423 100644 --- a/napi/transform/Cargo.toml +++ b/napi/transform/Cargo.toml @@ -27,6 +27,7 @@ oxc_span = { workspace = true } oxc_codegen = { workspace = true } oxc_isolated_declarations = { workspace = true } oxc_transformer = { workspace = true } +oxc_diagnostics = { workspace = true } napi = { workspace = true } napi-derive = { workspace = true } diff --git a/napi/transform/src/lib.rs b/napi/transform/src/lib.rs index 1bcabab17..99bfeab12 100644 --- a/napi/transform/src/lib.rs +++ b/napi/transform/src/lib.rs @@ -1,9 +1,12 @@ pub mod transformer; +use std::sync::Arc; + use napi_derive::napi; use oxc_allocator::Allocator; use oxc_codegen::CodeGenerator; +use oxc_diagnostics::{Error, NamedSource}; use oxc_isolated_declarations::IsolatedDeclarations; use oxc_parser::Parser; use oxc_span::SourceType; @@ -18,7 +21,7 @@ pub struct IsolatedDeclarationsResult { #[allow(clippy::needless_pass_by_value)] #[napi] pub fn isolated_declaration(filename: String, source_text: String) -> IsolatedDeclarationsResult { - let source_type = SourceType::from_path(filename).unwrap_or_default().with_typescript(true); + let source_type = SourceType::from_path(&filename).unwrap_or_default().with_typescript(true); let allocator = Allocator::default(); let parser_ret = Parser::new(&allocator, &source_text, source_type).parse(); let transformed_ret = IsolatedDeclarations::new(&allocator).build(&parser_ret.program); @@ -26,12 +29,14 @@ pub fn isolated_declaration(filename: String, source_text: String) -> IsolatedDe let mut errors = vec![]; if !parser_ret.errors.is_empty() || !transformed_ret.errors.is_empty() { + let source = Arc::new(NamedSource::new(filename, source_text.to_string())); errors.extend( parser_ret .errors .into_iter() .chain(transformed_ret.errors) - .map(|error| error.message.to_string()), + .map(|diagnostic| Error::from(diagnostic).with_source_code(Arc::clone(&source))) + .map(|error| format!("{error:?}")), ); } diff --git a/napi/transform/test.mjs b/napi/transform/test.mjs index f82e2b644..c7bbcc6e8 100644 --- a/napi/transform/test.mjs +++ b/napi/transform/test.mjs @@ -6,7 +6,10 @@ console.log(`Testing on ${process.platform}-${process.arch}`) test(oxc.isolatedDeclaration("test.ts", "class A {}"), "declare class A {}\n"); function test(ret, expected) { - console.log(ret); + console.log(ret.sourceText); + for (const error of ret.errors) { + console.log(error) + } assert.equal(ret.sourceText, expected); assert(ret.errors.length == 0); }