summaryrefslogtreecommitdiff
path: root/cli/source_maps.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/source_maps.rs')
-rw-r--r--cli/source_maps.rs26
1 files changed, 17 insertions, 9 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,