diff options
-rw-r--r-- | cli/source_maps.rs | 26 | ||||
-rw-r--r-- | cli/tests/error_026_remote_import_error.ts | 1 | ||||
-rw-r--r-- | cli/tests/error_026_remote_import_error.ts.out | 7 | ||||
-rw-r--r-- | cli/tests/import_data_url_error_stack.ts.out | 9 | ||||
-rw-r--r-- | cli/tests/inline_js_source_map_2.js.out | 2 | ||||
-rw-r--r-- | cli/tests/integration_tests.rs | 7 |
6 files changed, 37 insertions, 15 deletions
diff --git a/cli/source_maps.rs b/cli/source_maps.rs index beee37e64..4820d8c80 100644 --- a/cli/source_maps.rs +++ b/cli/source_maps.rs @@ -3,6 +3,7 @@ //! This mod provides functions to remap a `JsError` based on a source map. use deno_core::error::JsError; +use deno_core::ModuleSpecifier; use sourcemap::SourceMap; use std::collections::HashMap; use std::str; @@ -110,7 +111,7 @@ pub fn get_orig_position<G: SourceMapGetter>( ) -> (String, i64, i64, Option<String>) { let maybe_source_map = get_mappings(&file_name, mappings_map, getter.clone()); let default_pos = - (file_name, line_number, column_number, source_line.clone()); + (file_name.clone(), line_number, column_number, source_line); // Lookup expects 0-based line and column numbers, but ours are 1-based. let line_number = line_number - 1; @@ -123,7 +124,16 @@ pub fn get_orig_position<G: SourceMapGetter>( None => default_pos, Some(token) => match token.get_source() { None => default_pos, - Some(original) => { + Some(source_file_name) => { + // The `source_file_name` written by tsc in the source map is + // sometimes only the basename of the URL, or has unwanted `<`/`>` + // around it. Use the `file_name` we get from V8 if + // `source_file_name` does not parse as a URL. + let file_name = match ModuleSpecifier::resolve_url(source_file_name) + { + Ok(m) => m.to_string(), + Err(_) => file_name, + }; let maybe_source_line = if let Some(source_view) = token.get_source_view() { source_view.get_line(token.get_src_line()) @@ -133,18 +143,16 @@ pub fn get_orig_position<G: SourceMapGetter>( let source_line = if let Some(source_line) = maybe_source_line { Some(source_line.to_string()) - } else if let Some(source_line) = getter.get_source_line( - original, - // Getter expects 0-based line numbers, but ours are 1-based. - token.get_src_line() as usize, - ) { + } else if let Some(source_line) = + getter.get_source_line(&file_name, token.get_src_line() as usize) + { Some(source_line) } else { - source_line + None }; ( - original.to_string(), + file_name, i64::from(token.get_src_line()) + 1, i64::from(token.get_src_col()) + 1, source_line, diff --git a/cli/tests/error_026_remote_import_error.ts b/cli/tests/error_026_remote_import_error.ts new file mode 100644 index 000000000..1ab600cfa --- /dev/null +++ b/cli/tests/error_026_remote_import_error.ts @@ -0,0 +1 @@ +import "http://localhost:4545/cli/tests/error_001.ts"; diff --git a/cli/tests/error_026_remote_import_error.ts.out b/cli/tests/error_026_remote_import_error.ts.out new file mode 100644 index 000000000..e2d6545ef --- /dev/null +++ b/cli/tests/error_026_remote_import_error.ts.out @@ -0,0 +1,7 @@ +[WILDCARD]error: Uncaught Error: bad + throw Error("bad"); + ^ + at foo (http://localhost:4545/cli/tests/error_001.ts:2:9) + at bar (http://localhost:4545/cli/tests/error_001.ts:6:3) + at http://localhost:4545/cli/tests/error_001.ts:9:1 +[WILDCARD] diff --git a/cli/tests/import_data_url_error_stack.ts.out b/cli/tests/import_data_url_error_stack.ts.out index ca8b906da..466c1beed 100644 --- a/cli/tests/import_data_url_error_stack.ts.out +++ b/cli/tests/import_data_url_error_stack.ts.out @@ -1,5 +1,6 @@ -error: Uncaught Error: Hello 2 - throw new Error(`Hello ${A.C}`); +[WILDCARD]error: Uncaught Error: Hello 2 + throw new Error(`Hello ${A.C}`); ^ - at a (72554b3efdc211ba4aa0b62629589f048e7d4afe7b0576f35ff340ce0ea8f9b8.ts:8:10) - at import_data_url_error_stack.ts:3:1 + at a (data:application/typescript;base64,ZW51bSBBIHsKICBBLAogIEIsCiAgQywKIH0KIAogZXhwb3J0IGZ1bmN0aW9uIGEoKSB7CiAgIHRocm93IG5ldyBFcnJvcihgSGVsbG8gJHtBLkN9YCk7CiB9CiA=:8:10) + at file:///[WILDCARD]/cli/tests/import_data_url_error_stack.ts:3:1 +[WILDCARD] diff --git a/cli/tests/inline_js_source_map_2.js.out b/cli/tests/inline_js_source_map_2.js.out index 008eb0657..13e50bac4 100644 --- a/cli/tests/inline_js_source_map_2.js.out +++ b/cli/tests/inline_js_source_map_2.js.out @@ -1,4 +1,2 @@ error: Uncaught Error: Hello world! -throw new Error("Hello world!"); - ^ at http://localhost:4545/cli/tests/inline_js_source_map_2.ts:6:7 diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 5fa7c904f..7c0df57b7 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -3012,6 +3012,13 @@ console.log("finish"); exit_code: 1, }); + itest!(error_026_remote_import_error { + args: "run error_026_remote_import_error.ts", + output: "error_026_remote_import_error.ts.out", + exit_code: 1, + http_server: true, + }); + itest!(error_missing_module_named_import { args: "run --reload error_missing_module_named_import.ts", output: "error_missing_module_named_import.ts.out", |