diff --git a/Cargo.lock b/Cargo.lock index 0792c300..ed6b14d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,12 +100,6 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - [[package]] name = "ascii" version = "1.1.0" @@ -114,9 +108,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "ast_node" -version = "3.0.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e2cddd48eafd883890770673b1971faceaf80a185445671abc3ea0c00593ee" +checksum = "2eb025ef00a6da925cf40870b9c8d008526b6004ece399cb0974209720f0b194" dependencies = [ "quote", "swc_macros_common", @@ -406,9 +400,9 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b80d223f51fb001a4100116ec14588d3798caca62e0c42cde7f91ef7c14c5925" +checksum = "30c2f6f65154faed61e45d6578566f9fab9d2a330c35c87366706883701cce51" dependencies = [ "base64", "capacity_builder", @@ -442,7 +436,7 @@ dependencies = [ "swc_visit", "text_lines", "thiserror", - "unicode-width 0.2.1", + "unicode-width", "url", ] @@ -532,9 +526,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.2.9" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ec0dada9dc5ac4733b4175d36f6a150b7dd68fab46db35cb1ef00dd7366acb" +checksum = "9fd0af4161f90b092feb363864a64d7c74e0efc13a15905d0d09df73bb72a123" dependencies = [ "data-url", "encoding_rs", @@ -622,9 +616,9 @@ dependencies = [ [[package]] name = "dprint-swc-ext" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48928f46665a21bca006dc9a02d1329143ef161f7347f2b9430b55519275db8a" +checksum = "33175ddb7a6d418589cab2966bd14a710b3b1139459d3d5ca9edf783c4833f4c" dependencies = [ "num-bigint", "rustc-hash", @@ -736,9 +730,9 @@ dependencies = [ [[package]] name = "from_variant" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308530a56b099da144ebc5d8e179f343ad928fa2b3558d1eb3db9af18d6eff43" +checksum = "e5ff35a391aef949120a0340d690269b3d9f63460a6106e99bd07b961f345ea9" dependencies = [ "swc_macros_common", "syn", @@ -942,14 +936,15 @@ dependencies = [ [[package]] name = "hstr" -version = "2.0.1" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced1416104790052518d199e753d49a7d8130d476c664bc9e53f40cfecb8e615" +checksum = "0c43c0a9e8fbdb3bb9dc8eee85e1e2ac81605418b4c83b6b7413cbf14d56ca5c" dependencies = [ "hashbrown 0.14.5", "new_debug_unreachable", "once_cell", "rustc-hash", + "serde", "triomphe", ] @@ -1917,10 +1912,11 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -1944,11 +1940,20 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -2115,9 +2120,9 @@ dependencies = [ [[package]] name = "swc_atoms" -version = "7.0.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3500dcf04c84606b38464561edc5e46f5132201cb3e23cf9613ed4033d6b1bb2" +checksum = "d4ccbe2ecad10ad7432100f878a107b1d972a8aee83ca53184d00c23a078bb8a" dependencies = [ "hstr", "once_cell", @@ -2126,9 +2131,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "14.0.3" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63fdb58d278e7cd625f671e5371b3e6c0eab56c6e2a995a6f70dd0f7725255d4" +checksum = "259b675d633a26d24efe3802a9d88858c918e6e8f062d3222d3aa02d56a2cf4c" dependencies = [ "anyhow", "ast_node", @@ -2147,15 +2152,15 @@ dependencies = [ "swc_sourcemap", "swc_visit", "tracing", - "unicode-width 0.1.14", + "unicode-width", "url", ] [[package]] name = "swc_config" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94f41e0f3c4c119a06af5e164674b63ae7eb6d7c1c60e46036c4a548f9fbe44" +checksum = "72e90b52ee734ded867104612218101722ad87ff4cf74fe30383bd244a533f97" dependencies = [ "anyhow", "bytes-str", @@ -2179,9 +2184,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "15.0.0" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65c25af97d53cf8aab66a6c68f3418663313fc969ad267fc2a4d19402c329be1" +checksum = "a573a0c72850dec8d4d8085f152d5778af35a2520c3093b242d2d1d50776da7c" dependencies = [ "bitflags", "is-macro", @@ -2199,9 +2204,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "17.0.0" +version = "20.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91da8222bd2e868a6977ef402b3ca5c29a41d18cd84772441d9e06ec95ded1f" +checksum = "ff2a6ee1ec49dda8dedeac54e4147b4e8b3f278d9bb34ab28983257a393d34ed" dependencies = [ "ascii", "compact_str", @@ -2234,15 +2239,13 @@ dependencies = [ [[package]] name = "swc_ecma_lexer" -version = "23.0.1" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c3bd958a5a67e2cc3f74abdd41fda688e54e7a25b866569260ef7018b67972" +checksum = "5e82f7747e052c6ff6e111fa4adeb14e33b46ee6e94fe5ef717601f651db48fc" dependencies = [ - "arrayvec", "bitflags", "either", "num-bigint", - "phf", "rustc-hash", "seq-macro", "serde", @@ -2252,14 +2255,15 @@ dependencies = [ "swc_atoms", "swc_common", "swc_ecma_ast", + "swc_ecma_parser", "tracing", ] [[package]] name = "swc_ecma_loader" -version = "14.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c675d14700c92f12585049b22b02356f1e142f4b0c32a4d0eb4b7a968a4c0c1e" +checksum = "fbcababb48f0d46587a0a854b2c577eb3a56fa99687de558338021e93cd2c8f5" dependencies = [ "anyhow", "pathdiff", @@ -2272,25 +2276,30 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "23.0.0" +version = "27.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9166873bb660bed50b5f422233537d3e946336398570a4a13e57d8c63d6a01c5" +checksum = "7f1a51af1a92cd4904c073b293e491bbc0918400a45d58227b34c961dd6f52d7" dependencies = [ + "bitflags", "either", "num-bigint", + "phf", + "rustc-hash", + "seq-macro", "serde", + "smartstring", + "stacker", "swc_atoms", "swc_common", "swc_ecma_ast", - "swc_ecma_lexer", "tracing", ] [[package]] name = "swc_ecma_transforms_base" -version = "25.0.0" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc6454e1cf587b1d50509116350b503e7d647dbcc41bb5be9bf9a40fd792037" +checksum = "250f6f165578ca4fee47bd57585c1b9597c94bf4ea6591df47f2b5fa5b1883fe" dependencies = [ "better_scoped_tls", "indexmap", @@ -2310,9 +2319,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "25.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48790332195e4163f1f49713a14f91a5614048ca6638c664050fe577c3fad5a" +checksum = "3d3ab35eff4a980e02d708798ae4c35bc017612292adbffe7b7b554df772fdf5" dependencies = [ "swc_common", "swc_ecma_ast", @@ -2335,9 +2344,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "25.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1d5b2190c134d9b5c9b4d8c0d4b23b4fb5c433a7ae470f1c2103b8ff99160c" +checksum = "c2d7748d4112c87ce1885260035e4a43cebfe7661a40174b7d77a0a04760a257" dependencies = [ "either", "rustc-hash", @@ -2353,9 +2362,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "28.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9a3fe915e9b4e289edc78f060b8edda8633bc44234c5cf167e359befa18267" +checksum = "03de12e38e47ac1c96ac576f793ad37a9d7b16fbf4f2203881f89152f2498682" dependencies = [ "base64", "bytes-str", @@ -2377,9 +2386,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "28.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e62c7ec4f9667b9a85270125443fee6a7c2f357272d3d9eafc75a2f6fb0bca9" +checksum = "4408800fdeb541fabf3659db622189a0aeb386f57b6103f9294ff19dfde4f7b0" dependencies = [ "bytes-str", "rustc-hash", @@ -2395,9 +2404,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "21.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83259addd99ed4022aa9fc4d39428c008d3d42533769e1a005529da18cde4568" +checksum = "0fb99e179988cabd473779a4452ab942bcb777176983ca3cbaf22a8f056a65b0" dependencies = [ "indexmap", "num_cpus", @@ -2414,9 +2423,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "15.0.0" +version = "18.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a579aa8f9e212af521588df720ccead079c09fe5c8f61007cf724324aed3a0" +checksum = "a9611a72a4008d62608547a394e5d72a5245413104db096d95a52368a8cc1d63" dependencies = [ "new_debug_unreachable", "num-bigint", @@ -2787,12 +2796,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index d4434ca1..55b59d19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,8 @@ capacity_builder = "0.5.0" chrono = { version = "0.4.42", default-features = false, features = ["serde"] } data-url = "0.3.0" # this is optional in order to support using parsers other than swc -deno_ast = { version = "0.50.0", features = ["emit"], optional = true } -deno_media_type = { version = "0.2.9", features = [ +deno_ast = { version = "0.52.0", features = ["emit"], optional = true } +deno_media_type = { version = "0.3.0", features = [ "decoding", "data_url", "module_specifier", diff --git a/src/ast/dep.rs b/src/ast/dep.rs index 8aaaf9cb..4f8f7489 100644 --- a/src/ast/dep.rs +++ b/src/ast/dep.rs @@ -144,7 +144,6 @@ impl DependencyCollector<'_> { impl Visit for DependencyCollector<'_> { fn visit_import_decl(&mut self, node: &ast::ImportDecl) { - let specifier = node.src.value.clone(); let leading_comments = self.get_leading_comments(node.start()); let kind = if node.type_only { StaticDependencyKind::ImportType @@ -156,7 +155,7 @@ impl Visit for DependencyCollector<'_> { kind, leading_comments, range: node.range(), - specifier, + specifier: node.src.value.to_atom_lossy().into_owned(), specifier_range: node.src.range(), import_attributes: parse_import_attributes(node.with.as_deref()), is_side_effect: node.specifiers.is_empty(), @@ -166,31 +165,30 @@ impl Visit for DependencyCollector<'_> { } fn visit_named_export(&mut self, node: &ast::NamedExport) { - if let Some(src) = &node.src { - let specifier = src.value.clone(); - let leading_comments = self.get_leading_comments(node.start()); - let kind = if node.type_only { - StaticDependencyKind::ExportType - } else { - StaticDependencyKind::Export - }; - self.items.push( - StaticDependencyDescriptor { - kind, - leading_comments, - range: node.range(), - specifier, - specifier_range: src.range(), - import_attributes: parse_import_attributes(node.with.as_deref()), - is_side_effect: false, - } - .into(), - ); - } + let Some(src) = &node.src else { + return; + }; + let leading_comments = self.get_leading_comments(node.start()); + let kind = if node.type_only { + StaticDependencyKind::ExportType + } else { + StaticDependencyKind::Export + }; + self.items.push( + StaticDependencyDescriptor { + kind, + leading_comments, + range: node.range(), + specifier: src.value.to_atom_lossy().into_owned(), + specifier_range: src.range(), + import_attributes: parse_import_attributes(node.with.as_deref()), + is_side_effect: false, + } + .into(), + ); } fn visit_export_all(&mut self, node: &ast::ExportAll) { - let specifier = node.src.value.clone(); let leading_comments = self.get_leading_comments(node.start()); let kind = if node.type_only { StaticDependencyKind::ExportType @@ -202,7 +200,7 @@ impl Visit for DependencyCollector<'_> { kind, leading_comments, range: node.range(), - specifier, + specifier: node.src.value.to_atom_lossy().into_owned(), specifier_range: node.src.range(), import_attributes: parse_import_attributes(node.with.as_deref()), is_side_effect: false, @@ -212,14 +210,13 @@ impl Visit for DependencyCollector<'_> { } fn visit_ts_import_type(&mut self, node: &ast::TsImportType) { - let specifier = node.arg.value.clone(); let leading_comments = self.get_leading_comments(node.start()); self.items.push( StaticDependencyDescriptor { kind: StaticDependencyKind::ImportType, leading_comments, range: node.range(), - specifier, + specifier: node.arg.value.to_atom_lossy().into_owned(), specifier_range: node.arg.range(), import_attributes: node .attributes @@ -254,12 +251,17 @@ impl Visit for DependencyCollector<'_> { let argument = match &*arg.expr { Expr::Lit(ast::Lit::Str(specifier)) => { - DynamicArgument::String(specifier.value.clone()) + DynamicArgument::String(specifier.value.to_atom_lossy().into_owned()) } Expr::Tpl(tpl) => { if tpl.quasis.len() == 1 && tpl.exprs.is_empty() { DynamicArgument::String( - tpl.quasis[0].cooked.as_ref().unwrap().clone(), + tpl.quasis[0] + .cooked + .as_ref() + .unwrap() + .to_atom_lossy() + .into_owned(), ) } else { let mut parts = @@ -267,7 +269,9 @@ impl Visit for DependencyCollector<'_> { for i in 0..tpl.quasis.len() { let cooked = tpl.quasis[i].cooked.as_ref().unwrap(); if !cooked.is_empty() { - parts.push(DynamicTemplatePart::String(cooked.clone())); + parts.push(DynamicTemplatePart::String( + cooked.to_atom_lossy().into_owned(), + )); } if tpl.exprs.get(i).is_some() { parts.push(DynamicTemplatePart::Expr); @@ -292,7 +296,9 @@ impl Visit for DependencyCollector<'_> { visit_bin(parts, left)?; } Expr::Lit(ast::Lit::Str(str)) => { - parts.push(DynamicTemplatePart::String(str.value.clone())); + parts.push(DynamicTemplatePart::String( + str.value.to_atom_lossy().into_owned(), + )); } _ => { if parts.is_empty() { @@ -303,7 +309,9 @@ impl Visit for DependencyCollector<'_> { }; if let Expr::Lit(ast::Lit::Str(str)) = &*bin.right { - parts.push(DynamicTemplatePart::String(str.value.clone())); + parts.push(DynamicTemplatePart::String( + str.value.to_atom_lossy().into_owned(), + )); } else { parts.push(DynamicTemplatePart::Expr); } @@ -345,7 +353,6 @@ impl Visit for DependencyCollector<'_> { if let TsModuleRef::TsExternalModuleRef(module) = &node.module_ref { let leading_comments = self.get_leading_comments(node.start()); let expr = &module.expr; - let specifier = expr.value.clone(); let kind = if node.is_type_only { StaticDependencyKind::ImportType @@ -360,7 +367,7 @@ impl Visit for DependencyCollector<'_> { kind, leading_comments, range: node.range(), - specifier, + specifier: expr.value.to_atom_lossy().into_owned(), specifier_range: expr.range(), import_attributes: Default::default(), is_side_effect: false, @@ -372,7 +379,7 @@ impl Visit for DependencyCollector<'_> { fn visit_ts_module_decl(&mut self, node: &ast::TsModuleDecl) { if let Some(id_str) = node.id.as_str() { - let value_str = id_str.value.as_str(); + let value_str = id_str.value.to_string_lossy(); if !value_str.contains('*') || value_str.starts_with("./") || value_str.starts_with("../") @@ -384,7 +391,7 @@ impl Visit for DependencyCollector<'_> { kind: StaticDependencyKind::MaybeTsModuleAugmentation, leading_comments, range: id_str.range(), - specifier: id_str.value.clone(), + specifier: id_str.value.to_atom_lossy().into_owned(), specifier_range: id_str.range(), import_attributes: Default::default(), is_side_effect: false, @@ -412,16 +419,19 @@ fn parse_import_attributes( && let ast::Prop::KeyValue(key_value) = &**prop { let maybe_key = match &key_value.key { - ast::PropName::Str(key) => Some(key.value.to_string()), - ast::PropName::Ident(ident) => Some(ident.sym.to_string()), + ast::PropName::Str(key) => key.value.as_atom(), + ast::PropName::Ident(ident) => Some(&ident.sym), _ => None, }; if let Some(key) = maybe_key && let ast::Expr::Lit(ast::Lit::Str(str_)) = &*key_value.value + && let Some(value_str) = str_.value.as_str() { - import_attributes - .insert(key, ImportAttribute::Known(str_.value.to_string())); + import_attributes.insert( + key.to_string(), + ImportAttribute::Known(value_str.to_string()), + ); } } } @@ -459,8 +469,11 @@ fn parse_dynamic_import_attributes( _ => return ImportAttributes::Unknown, }; let key = match &key_value.key { - ast::PropName::Str(key) => key.value.to_string(), - ast::PropName::Ident(ident) => ident.sym.to_string(), + ast::PropName::Str(key) => match key.value.as_atom() { + Some(key) => key, + None => return ImportAttributes::Unknown, + }, + ast::PropName::Ident(ident) => &ident.sym, _ => return ImportAttributes::Unknown, }; if key == "with" || key == "assert" && !had_with_key { @@ -501,21 +514,26 @@ fn parse_import_attributes_from_object_lit( _ => return ImportAttributes::Unknown, }; let key = match &key_value.key { - ast::PropName::Str(key) => key.value.to_string(), - ast::PropName::Ident(ident) => ident.sym.to_string(), + ast::PropName::Str(key) => match key.value.as_atom() { + Some(key) => key, + None => return ImportAttributes::Unknown, + }, + ast::PropName::Ident(ident) => &ident.sym, _ => return ImportAttributes::Unknown, }; if let ast::Expr::Lit(value_lit) = &*key_value.value { attributes_map.insert( - key, - if let ast::Lit::Str(str_) = value_lit { - ImportAttribute::Known(str_.value.to_string()) + key.to_string(), + if let ast::Lit::Str(str_) = value_lit + && let Some(value) = str_.value.as_str() + { + ImportAttribute::Known(value.to_string()) } else { ImportAttribute::Unknown }, ); } else { - attributes_map.insert(key, ImportAttribute::Unknown); + attributes_map.insert(key.to_string(), ImportAttribute::Unknown); } } ImportAttributes::Known(attributes_map) diff --git a/src/fast_check/range_finder.rs b/src/fast_check/range_finder.rs index 1581be4a..7d2b1afb 100644 --- a/src/fast_check/range_finder.rs +++ b/src/fast_check/range_finder.rs @@ -672,12 +672,12 @@ impl<'a> PublicRangeFinder<'a> { for re_export_all_node in re_export_all_nodes { log::trace!( "Found re-export all - {}", - re_export_all_node.src.value + re_export_all_node.src.value.to_string_lossy() ); found_ranges.insert(re_export_all_node.span.range()); - let specifier_text = re_export_all_node.src.value.as_str(); + let specifier_text = re_export_all_node.src.value.to_string_lossy(); if let Some(dep_specifier) = self.graph.resolve_dependency( - specifier_text, + &specifier_text, module_info.specifier(), /* prefer types */ true, ) { @@ -735,9 +735,9 @@ impl<'a> PublicRangeFinder<'a> { if named_exports.is_empty() { break; // all done } - let specifier_text = re_export_all_node.src.value.as_str(); + let specifier_text = re_export_all_node.src.value.to_string_lossy(); if let Some(dep_specifier) = self.graph.resolve_dependency( - specifier_text, + &specifier_text, module_info.specifier(), /* prefer types */ true, ) && let Some(module_info) = @@ -753,7 +753,7 @@ impl<'a> PublicRangeFinder<'a> { if found_ranges.insert(re_export_all_node.span.range()) { log::trace!( "Found re-export all - {}", - re_export_all_node.src.value + re_export_all_node.src.value.to_string_lossy() ); } let export_name = export_name.clone(); @@ -790,7 +790,7 @@ impl<'a> PublicRangeFinder<'a> { for re_export_all_node in re_export_all_nodes { log::trace!( "Found re-export all - {}", - re_export_all_node.src.value + re_export_all_node.src.value.to_string_lossy() ); found_ranges.insert(re_export_all_node.span.range()); } diff --git a/src/fast_check/transform.rs b/src/fast_check/transform.rs index 00eb33e1..66765544 100644 --- a/src/fast_check/transform.rs +++ b/src/fast_check/transform.rs @@ -387,13 +387,14 @@ impl<'a> FastCheckTransformer<'a> { fn transform_module_specifier(&mut self, src: &mut Str) { // only do this for relative specifiers (specifiers to specifiers within the package) - if !src.value.starts_with('.') { + let specifier = src.value.to_string_lossy(); + if !specifier.starts_with('.') { return; } let Some(resolved_specifier) = self .graph - .resolve_dependency(&src.value, self.specifier, true) + .resolve_dependency(&specifier, self.specifier, true) else { return; }; @@ -696,7 +697,7 @@ impl<'a> FastCheckTransformer<'a> { { let key = match &method.key { PropName::Ident(i) => Some(i.sym.to_string()), - PropName::Str(s) => Some(s.value.to_string()), + PropName::Str(s) => Some(s.value.to_string_lossy().to_string()), PropName::Num(n) => Some( n.raw .as_ref() diff --git a/src/graph.rs b/src/graph.rs index aaa398e5..1b10f84d 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -1851,6 +1851,8 @@ impl<'a, 'options> ModuleEntryIterator<'a, 'options> { | MediaType::SourceMap | MediaType::Html | MediaType::Sql + | MediaType::Jsonc + | MediaType::Json5 | MediaType::Unknown => false, MediaType::JavaScript | MediaType::Jsx @@ -3050,6 +3052,8 @@ pub(crate) async fn parse_module_source_and_info( | MediaType::SourceMap | MediaType::Html | MediaType::Sql + | MediaType::Jsonc + | MediaType::Json5 | MediaType::Unknown => Err( ModuleErrorKind::UnsupportedMediaType { specifier: opts.specifier, diff --git a/src/symbols/analyzer.rs b/src/symbols/analyzer.rs index 8a44b529..ee83af58 100644 --- a/src/symbols/analyzer.rs +++ b/src/symbols/analyzer.rs @@ -668,10 +668,10 @@ pub enum SymbolNodeRef<'a> { impl<'a> SymbolNodeRef<'a> { /// The local name of the node, if it has a name. pub fn maybe_name(&self) -> Option> { - fn ts_module_name_to_string(module_name: &TsModuleName) -> &str { + fn ts_module_name_to_string(module_name: &TsModuleName) -> Option<&str> { match module_name { - TsModuleName::Ident(ident) => &ident.sym, - TsModuleName::Str(str) => &str.value, + TsModuleName::Ident(ident) => Some(&ident.sym), + TsModuleName::Str(str) => str.value.as_str(), } } @@ -685,7 +685,7 @@ impl<'a> SymbolNodeRef<'a> { fn maybe_prop_name(prop_name: &PropName) -> Option> { match prop_name { PropName::Ident(n) => Some(Cow::Borrowed(&n.sym)), - PropName::Str(n) => Some(Cow::Borrowed(&n.value)), + PropName::Str(n) => n.value.as_str().map(Cow::Borrowed), PropName::Num(n) => Some(Cow::Owned(n.value.to_string())), PropName::Computed(prop_name) => maybe_expr(&prop_name.expr), PropName::BigInt(_) => None, @@ -711,7 +711,7 @@ impl<'a> SymbolNodeRef<'a> { match expr { Expr::Ident(n) => Some(Cow::Borrowed(&n.sym)), Expr::Lit(n) => match n { - Lit::Str(n) => Some(Cow::Borrowed(&n.value)), + Lit::Str(n) => n.value.as_str().map(Cow::Borrowed), Lit::Num(n) => Some(Cow::Owned(n.value.to_string())), Lit::BigInt(n) => Some(Cow::Owned(n.value.to_string())), _ => None, @@ -730,7 +730,7 @@ impl<'a> SymbolNodeRef<'a> { ExportDeclRef::TsEnum(n) => Some(Cow::Borrowed(&n.id.sym)), ExportDeclRef::TsInterface(n) => Some(Cow::Borrowed(&n.id.sym)), ExportDeclRef::TsModule(n) => { - Some(Cow::Borrowed(ts_module_name_to_string(&n.id))) + ts_module_name_to_string(&n.id).map(Cow::Borrowed) } ExportDeclRef::TsTypeAlias(n) => Some(Cow::Borrowed(&n.id.sym)), }, @@ -744,7 +744,7 @@ impl<'a> SymbolNodeRef<'a> { Self::TsEnum(n) => Some(Cow::Borrowed(&n.id.sym)), Self::TsInterface(n) => Some(Cow::Borrowed(&n.id.sym)), Self::TsNamespace(n) => { - Some(Cow::Borrowed(ts_module_name_to_string(&n.id))) + ts_module_name_to_string(&n.id).map(Cow::Borrowed) } Self::TsTypeAlias(n) => Some(Cow::Borrowed(&n.id.sym)), Self::Var(_, _, ident) => Some(Cow::Borrowed(&ident.sym)), @@ -1068,7 +1068,7 @@ impl<'a> ExpandoPropertyRef<'a> { match &Self::maybe_member_expr(expr)?.prop { MemberProp::Ident(ident) => Some(&ident.sym), MemberProp::Computed(prop_name) => match &*prop_name.expr { - Expr::Lit(Lit::Str(str)) => Some(&str.value), + Expr::Lit(Lit::Str(str)) => str.value.as_atom(), _ => None, }, _ => None, @@ -1471,9 +1471,11 @@ impl<'a> ModuleInfoRef<'a> { ) -> Option + use<'a>> { match self { Self::Json(_) => None, - Self::Esm(m) => { - Some(m.re_exports.iter().map(|e| e.value().src.value.as_str())) - } + Self::Esm(m) => Some( + m.re_exports + .iter() + .flat_map(|e| e.value().src.value.as_str()), + ), } } @@ -1636,7 +1638,7 @@ impl std::fmt::Debug for EsModuleInfo { &self .re_exports .iter() - .map(|e| e.value().src.value.as_str()) + .map(|e| e.value().src.value.to_string_lossy()) .collect::>(), ) .field("swc_id_to_symbol_id", &self.swc_id_to_symbol_id) @@ -1940,7 +1942,9 @@ impl SymbolFiller<'_> { .as_ref() .map(|n| match n { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => { + str.value.to_string_lossy().into_owned() + } }) .unwrap_or_else(|| n.local.sym.to_string()); self.builder.ensure_symbol_for_swc_id( @@ -1948,7 +1952,11 @@ impl SymbolFiller<'_> { SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Name(imported_name), - specifier: import_decl.src.value.to_string(), + specifier: import_decl + .src + .value + .to_string_lossy() + .into_owned(), }), n.range(), ), @@ -1961,7 +1969,11 @@ impl SymbolFiller<'_> { SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Name("default".to_string()), - specifier: import_decl.src.value.to_string(), + specifier: import_decl + .src + .value + .to_string_lossy() + .into_owned(), }), n.range(), ), @@ -1974,7 +1986,11 @@ impl SymbolFiller<'_> { SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Star, - specifier: import_decl.src.value.to_string(), + specifier: import_decl + .src + .value + .to_string_lossy() + .into_owned(), }), n.range(), ), @@ -2158,14 +2174,18 @@ impl SymbolFiller<'_> { // with ModuleExportName::Str let imported_name = match &named.orig { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => { + str.value.to_string_lossy().into_owned() + } }; let export_name = named .exported .as_ref() .map(|exported| match exported { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => { + str.value.to_string_lossy().into_owned() + } }) .unwrap_or_else(|| imported_name.clone()); let symbol = @@ -2173,7 +2193,7 @@ impl SymbolFiller<'_> { symbol.add_decl(SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Name(imported_name), - specifier: src.value.to_string(), + specifier: src.value.to_string_lossy().into_owned(), }), named.range(), )); @@ -2191,7 +2211,9 @@ impl SymbolFiller<'_> { if let Some(exported_name) = &named.exported { let exported_name = match exported_name { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => { + str.value.to_string_lossy().into_owned() + } }; let orig_symbol = self .builder @@ -2210,7 +2232,7 @@ impl SymbolFiller<'_> { match &n.src { Some(src) => SymbolDeclKind::FileRef(FileDep { name: FileDepName::Name(orig_ident.sym.to_string()), - specifier: src.value.to_string(), + specifier: src.value.to_string_lossy().into_owned(), }), None => SymbolDeclKind::Target(orig_ident.to_id()), }, @@ -2228,14 +2250,16 @@ impl SymbolFiller<'_> { if let Some(src) = &n.src { let name = match &specifier.name { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => { + str.value.to_string_lossy().into_owned() + } }; let symbol = self.builder.create_new_symbol(module_symbol.symbol_id()); symbol.add_decl(SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Star, - specifier: src.value.to_string(), + specifier: src.value.to_string_lossy().into_owned(), }), specifier.range(), )); @@ -2651,7 +2675,7 @@ impl SymbolFiller<'_> { SymbolDecl::new( SymbolDeclKind::FileRef(FileDep { name: FileDepName::Name("default".to_string()), - specifier: module_ref.expr.value.to_string(), + specifier: module_ref.expr.value.to_string_lossy().to_string(), }), import_equals.range(), ), diff --git a/src/symbols/dep_analyzer.rs b/src/symbols/dep_analyzer.rs index e4eed2fe..f407abe2 100644 --- a/src/symbols/dep_analyzer.rs +++ b/src/symbols/dep_analyzer.rs @@ -542,9 +542,10 @@ impl Visit for DepsFiller { } None => Vec::new(), }; - self - .deps - .push(SymbolNodeDep::ImportType(n.arg.value.to_string(), parts)); + self.deps.push(SymbolNodeDep::ImportType( + n.arg.value.to_string_lossy().to_string(), + parts, + )); n.type_args.visit_with(self); } @@ -594,7 +595,7 @@ fn member_expr_into_id_and_parts( MemberProp::Ident(ident) => Some(ident.sym.to_string()), MemberProp::PrivateName(n) => Some(format!("#{}", n.name)), MemberProp::Computed(n) => match &*n.expr { - Expr::Lit(Lit::Str(str)) => Some(str.value.to_string()), + Expr::Lit(Lit::Str(str)) => str.value.as_str().map(ToOwned::to_owned), _ => None, }, }