mirror of
https://github.com/denoland/deno.git
synced 2025-08-02 18:12:39 +00:00
fix(cli/fmt_errors): Abbreviate long data URLs in stack traces (#12127)
Co-authored-by: Mike White <mike.white@auctane.com>
This commit is contained in:
parent
f840906943
commit
75ca013f07
9 changed files with 80 additions and 22 deletions
|
@ -5,13 +5,40 @@ use crate::colors::italic_bold;
|
|||
use crate::colors::red;
|
||||
use crate::colors::yellow;
|
||||
use deno_core::error::{AnyError, JsError, JsStackFrame};
|
||||
use deno_core::url::Url;
|
||||
use std::error::Error;
|
||||
use std::fmt;
|
||||
use std::ops::Deref;
|
||||
|
||||
const SOURCE_ABBREV_THRESHOLD: usize = 150;
|
||||
const DATA_URL_ABBREV_THRESHOLD: usize = 150;
|
||||
|
||||
// Keep in sync with `runtime/js/40_error_stack.js`.
|
||||
pub fn format_file_name(file_name: &str) -> String {
|
||||
if file_name.len() > DATA_URL_ABBREV_THRESHOLD {
|
||||
if let Ok(url) = Url::parse(file_name) {
|
||||
if url.scheme() == "data" {
|
||||
let data_path = url.path();
|
||||
if let Some(data_pieces) = data_path.split_once(',') {
|
||||
let data_length = data_pieces.1.len();
|
||||
if let Some(data_start) = data_pieces.1.get(0..20) {
|
||||
if let Some(data_end) = data_pieces.1.get(data_length - 20..) {
|
||||
return format!(
|
||||
"{}:{},{}......{}",
|
||||
url.scheme(),
|
||||
data_pieces.0,
|
||||
data_start,
|
||||
data_end
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
file_name.to_string()
|
||||
}
|
||||
|
||||
// Keep in sync with `/core/error.js`.
|
||||
pub fn format_location(frame: &JsStackFrame) -> String {
|
||||
let _internal = frame
|
||||
.file_name
|
||||
|
@ -22,7 +49,7 @@ pub fn format_location(frame: &JsStackFrame) -> String {
|
|||
}
|
||||
let mut result = String::new();
|
||||
if let Some(file_name) = &frame.file_name {
|
||||
result += &cyan(&file_name).to_string();
|
||||
result += &cyan(&format_file_name(file_name)).to_string();
|
||||
} else {
|
||||
if frame.is_eval {
|
||||
result +=
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue