mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
feat(sourcemap): add x_google_ignoreList (#2928)
This commit is contained in:
parent
5cb3991b67
commit
8662f4f613
2 changed files with 28 additions and 3 deletions
|
|
@ -47,6 +47,12 @@ pub fn encode(sourcemap: &SourceMap) -> Result<String> {
|
|||
.map_err(Error::from)?;
|
||||
buf.push_str("e_source_contents.join(","));
|
||||
}
|
||||
if let Some(x_google_ignore_list) = &sourcemap.x_google_ignore_list {
|
||||
buf.push_str("],\"x_google_ignoreList\":[");
|
||||
let x_google_ignore_list =
|
||||
x_google_ignore_list.iter().map(ToString::to_string).collect::<Vec<_>>();
|
||||
buf.push_str(&x_google_ignore_list.join(","));
|
||||
}
|
||||
buf.push_str("],\"mappings\":\"");
|
||||
buf.push_str(&serialize_sourcemap_mappings(sourcemap));
|
||||
buf.push_str("\"}");
|
||||
|
|
@ -164,7 +170,7 @@ fn test_encode() {
|
|||
#[test]
|
||||
fn test_encode_escape_string() {
|
||||
// '\0' should be escaped.
|
||||
let sm = SourceMap::new(
|
||||
let mut sm = SourceMap::new(
|
||||
None,
|
||||
vec!["\0".into()],
|
||||
None,
|
||||
|
|
@ -173,8 +179,9 @@ fn test_encode_escape_string() {
|
|||
vec![],
|
||||
None,
|
||||
);
|
||||
sm.set_x_google_ignore_list(vec![0]);
|
||||
assert_eq!(
|
||||
sm.to_json_string().unwrap(),
|
||||
r#"{"version":3,"names":["\u0000"],"sources":["\u0000"],"sourcesContent":["\u0000"],"mappings":""}"#
|
||||
r#"{"version":3,"names":["\u0000"],"sources":["\u0000"],"sourcesContent":["\u0000"],"x_google_ignoreList":[0],"mappings":""}"#
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@ pub struct SourceMap {
|
|||
pub(crate) source_contents: Option<Vec<Arc<str>>>,
|
||||
pub(crate) tokens: Vec<Token>,
|
||||
pub(crate) token_chunks: Option<Vec<TokenChunk>>,
|
||||
/// Identifies third-party sources (such as framework code or bundler-generated code), allowing developers to avoid code that they don't want to see or step through, without having to configure this beforehand.
|
||||
/// The `x_google_ignoreList` field refers to the `sources` array, and lists the indices of all the known third-party sources in that source map.
|
||||
/// When parsing the source map, developer tools can use this to determine sections of the code that the browser loads and runs that could be automatically ignore-listed.
|
||||
pub(crate) x_google_ignore_list: Option<Vec<u32>>,
|
||||
}
|
||||
|
||||
#[allow(clippy::cast_possible_truncation)]
|
||||
|
|
@ -29,7 +33,16 @@ impl SourceMap {
|
|||
tokens: Vec<Token>,
|
||||
token_chunks: Option<Vec<TokenChunk>>,
|
||||
) -> Self {
|
||||
Self { file, names, source_root, sources, source_contents, tokens, token_chunks }
|
||||
Self {
|
||||
file,
|
||||
names,
|
||||
source_root,
|
||||
sources,
|
||||
source_contents,
|
||||
tokens,
|
||||
token_chunks,
|
||||
x_google_ignore_list: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Convert `SourceMap` to vlq sourcemap string.
|
||||
|
|
@ -69,6 +82,11 @@ impl SourceMap {
|
|||
self.source_root.as_deref()
|
||||
}
|
||||
|
||||
/// Set `x_google_ignoreList`.
|
||||
pub fn set_x_google_ignore_list(&mut self, x_google_ignore_list: Vec<u32>) {
|
||||
self.x_google_ignore_list = Some(x_google_ignore_list);
|
||||
}
|
||||
|
||||
pub fn get_names(&self) -> impl Iterator<Item = &str> {
|
||||
self.names.iter().map(AsRef::as_ref)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue