summaryrefslogtreecommitdiff
path: root/core/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/error.rs')
-rw-r--r--core/error.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/core/error.rs b/core/error.rs
index 8e6c43482..045dd5a15 100644
--- a/core/error.rs
+++ b/core/error.rs
@@ -2,6 +2,7 @@
use crate::runtime::JsRuntime;
use crate::source_map::apply_source_map;
+use crate::url::Url;
use anyhow::Error;
use std::borrow::Cow;
use std::collections::HashMap;
@@ -431,6 +432,27 @@ pub(crate) fn is_instance_of_error<'s>(
false
}
+const DATA_URL_ABBREV_THRESHOLD: usize = 150;
+
+pub fn format_file_name(file_name: &str) -> String {
+ abbrev_file_name(file_name).unwrap_or_else(|| file_name.to_string())
+}
+
+fn abbrev_file_name(file_name: &str) -> Option<String> {
+ if file_name.len() <= DATA_URL_ABBREV_THRESHOLD {
+ return None;
+ }
+ let url = Url::parse(file_name).ok()?;
+ if url.scheme() != "data" {
+ return None;
+ }
+ let (head, tail) = url.path().split_once(',')?;
+ let len = tail.len();
+ let start = tail.get(0..20)?;
+ let end = tail.get(len - 20..)?;
+ Some(format!("{}:{},{}......{}", url.scheme(), head, start, end))
+}
+
#[cfg(test)]
mod tests {
use super::*;