From 3f08a40412d89bd54222ad51fc1aaeb508e2e5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 3 May 2022 19:45:57 +0200 Subject: refactor: add core.formatLocationFilename, remove op_format_filename (#14474) This commit moves "op_format_location" to "core/ops_builtin.rs" and removes "Deno.core.createPrepareStackTrace" in favor of "Deno.core.prepareStackTrace". Co-authored-by: Aaron O'Mullan --- core/error.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'core/error.rs') 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 { + 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::*; -- cgit v1.2.3