diff --git a/.changes/improve-esm-detection.md b/.changes/improve-esm-detection.md new file mode 100644 index 000000000..e1c4b8185 --- /dev/null +++ b/.changes/improve-esm-detection.md @@ -0,0 +1,5 @@ +--- +"tauri-codegen": patch +--- + +Improve ESM detection with regexes. diff --git a/core/tauri-codegen/Cargo.toml b/core/tauri-codegen/Cargo.toml index 7ce0339d2..c88d8cc5b 100644 --- a/core/tauri-codegen/Cargo.toml +++ b/core/tauri-codegen/Cargo.toml @@ -22,3 +22,4 @@ thiserror = "1" walkdir = "2" zstd = "0.9" kuchiki = "0.8" +regex = "1" diff --git a/core/tauri-codegen/src/embedded_assets.rs b/core/tauri-codegen/src/embedded_assets.rs index c43b91fb5..0812264b4 100644 --- a/core/tauri-codegen/src/embedded_assets.rs +++ b/core/tauri-codegen/src/embedded_assets.rs @@ -5,6 +5,7 @@ use kuchiki::traits::*; use proc_macro2::TokenStream; use quote::{quote, ToTokens, TokenStreamExt}; +use regex::RegexSet; use std::{ collections::HashMap, ffi::OsStr, @@ -187,11 +188,24 @@ impl EmbeddedAssets { .any(|e| path.extension() == Some(OsStr::new(e))); if is_javascript { let js = String::from_utf8_lossy(&input).into_owned(); - input = if [ - "import{", "import*", "import ", "export{", "export*", "export ", - ] - .iter() - .any(|t| js.contains(t)) + input = if RegexSet::new(&[ + // import keywords + "import\\{", + "import \\{", + "import\\*", + "import \\*", + "import (\"|');?$", + "import\\(", + "import (.|\n)+ from (\"|')([A-Za-z\\-]+)(\"|')", + // export keywords + "export\\{", + "export \\{", + "export\\*", + "export \\*", + "export (default|class|let|const|function)", + ]) + .unwrap() + .is_match(&js) { format!( r#"