From dddbaec4583dc4496f134b7286876132405eeba6 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 5 May 2025 16:25:15 -0500 Subject: [PATCH 01/11] feat: support workspaces and use deno_resolver --- Cargo.lock | 127 +++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 ++ rs-lib/Cargo.toml | 4 +- wasm/Cargo.toml | 2 + wasm/src/lib.rs | 43 +++++++++++++--- 5 files changed, 169 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4603188..6c445b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -196,6 +196,16 @@ dependencies = [ "syn", ] +[[package]] +name = "bstr" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -373,6 +383,33 @@ dependencies = [ "url", ] +[[package]] +name = "deno_config" +version = "0.54.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a3ff33a35a2e995bfea372cbe9fe0990a735e27988a787277a1c6ee15d1b1a" +dependencies = [ + "boxed_error", + "capacity_builder", + "deno_error", + "deno_package_json", + "deno_path_util", + "deno_semver", + "glob", + "ignore", + "import_map", + "indexmap 2.2.5", + "jsonc-parser", + "log", + "percent-encoding", + "phf", + "serde", + "serde_json", + "sys_traits", + "thiserror", + "url", +] + [[package]] name = "deno_error" version = "0.5.6" @@ -467,6 +504,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "deno_package_json" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236bc2d6d6c06b68cbde960542e13501cf833c975f221a012da619f714c57123" +dependencies = [ + "boxed_error", + "deno_error", + "deno_path_util", + "deno_semver", + "indexmap 2.2.5", + "serde", + "serde_json", + "sys_traits", + "thiserror", + "url", +] + [[package]] name = "deno_path_util" version = "0.3.2" @@ -550,8 +605,10 @@ version = "0.0.0" dependencies = [ "anyhow", "console_error_panic_hook", + "deno_config", "deno_error", "deno_node_transform", + "deno_path_util", "getrandom", "js-sys", "serde", @@ -800,6 +857,25 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "globset" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + [[package]] name = "h2" version = "0.3.21" @@ -1082,6 +1158,23 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "import_map" version = "0.21.0" @@ -1718,6 +1811,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.22" @@ -1814,12 +1916,13 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.114" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "indexmap 2.2.5", "itoa", + "memchr", "ryu", "serde", ] @@ -2356,6 +2459,16 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tinystr" version = "0.7.6" @@ -2569,6 +2682,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" diff --git a/Cargo.toml b/Cargo.toml index 4dd8790..a2e9092 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,5 +12,8 @@ members = [ ] [workspace.dependencies] +deno_config = "0.54.2" deno_error = "0.5.6" +deno_path_util = "0.3.2" +serde_json = { version = "1.0.140", features = ["preserve_order"] } sys_traits = { version = "0.1.9", features = ["real"] } diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index 1592c06..2824d47 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -18,7 +18,7 @@ base64 = "0.13.1" deno_ast = { version = "0.46.6", features = ["transforms", "view", "visit", "utils"] } deno_error.workspace = true deno_graph = { version = "0.90.0", features = [], default-features = false } -deno_path_util = "0.3.2" +deno_path_util.workspace = true deno_semver = "0.7.1" futures = "0.3.25" import_map = { version = "0.21.0", features = ["ext"] } @@ -28,7 +28,7 @@ pathdiff = "0.2.1" regex = "1.7" reqwest = { version = "0.11", features = ["rustls"], optional = true } serde = { version = "1.0.159", features = ["derive"], optional = true } -serde_json = "1.0.96" +serde_json.workspace = true sys_traits.workspace = true tokio = { version = "1", features = ["full"], optional = true } diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index 118c216..ce504e7 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -12,7 +12,9 @@ default = ["console_error_panic_hook"] [dependencies] anyhow = "1.0.51" +deno_config.workspace = true deno_error.workspace = true +deno_path_util.workspace = true dnt = { path = "../rs-lib", default-features = false, features = ["serialization"], package="deno_node_transform" } getrandom = { version = "*", features = ["js"] } js-sys = "=0.3.69" diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index d5be375..b00360d 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -7,7 +7,10 @@ use std::future::Future; use std::rc::Rc; use std::sync::Arc; +use anyhow::Context; use anyhow::Result; +use deno_config::workspace::WorkspaceDiscoverOptions; +use deno_config::workspace::WorkspaceDiscoverStart; use deno_error::JsErrorBox; use dnt::LoadError; use dnt::MappedSpecifier; @@ -76,6 +79,7 @@ pub struct TransformOptions { pub test_shims: Vec, pub mappings: HashMap, pub target: ScriptTarget, + pub cwd: ModuleSpecifier, pub import_map: Option, } @@ -83,12 +87,41 @@ pub struct TransformOptions { pub async fn transform(options: JsValue) -> Result { set_panic_hook(); + transform_inner(options) + .await + // need to include the anyhow context + .map_err(|err| format!("{:#}", err).into()) +} + +async fn transform_inner(options: JsValue) -> Result { #[allow(deprecated)] - let options: TransformOptions = options.into_serde().unwrap(); + let options: TransformOptions = options.into_serde()?; // todo(dsherret): try using this again sometime in the future... it errored // with "invalid type: unit value, expected a boolean" and didn't say exactly // where it errored. // let options: TransformOptions = serde_wasm_bindgen::from_value(options)?; + let cwd = deno_path_util::url_to_file_path(&options.cwd)?; + let maybe_config_path = match options.import_map.as_ref() { + Some(import_map) => Some(deno_path_util::url_to_file_path(&import_map)?), + None => None, + }; + let cwd = [cwd]; + let workspace_directory = + deno_config::workspace::WorkspaceDirectory::discover( + &sys_traits::impls::RealSys, + match maybe_config_path.as_ref() { + Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), + None => WorkspaceDiscoverStart::Paths(&cwd), + }, + &WorkspaceDiscoverOptions { + additional_config_file_names: &[], + deno_json_cache: None, + pkg_json_cache: None, + workspace_cache: None, + discover_pkg_json: true, + maybe_vendor_override: None, + }, + )?; let result = dnt::transform(dnt::TransformOptions { entry_points: parse_module_specifiers(options.entry_points)?, @@ -100,19 +133,17 @@ pub async fn transform(options: JsValue) -> Result { target: options.target, import_map: options.import_map, }) - .await - .map_err(|err| format!("{:#}", err))?; // need to include the anyhow context - + .await?; Ok(serde_wasm_bindgen::to_value(&result).unwrap()) } fn parse_module_specifiers( values: Vec, -) -> Result, JsValue> { +) -> Result, anyhow::Error> { let mut specifiers = Vec::new(); for value in values { let entry_point = dnt::ModuleSpecifier::parse(&value) - .map_err(|err| format!("Error parsing {}. {}", value, err))?; + .with_context(|| format!("Error parsing {}.", value))?; specifiers.push(entry_point); } Ok(specifiers) From a355d2d25a669601ce7d6e56e2226f41e6c83da5 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 5 May 2025 16:32:21 -0500 Subject: [PATCH 02/11] fix --- wasm/src/lib.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index b00360d..40c2fbc 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -79,7 +79,6 @@ pub struct TransformOptions { pub test_shims: Vec, pub mappings: HashMap, pub target: ScriptTarget, - pub cwd: ModuleSpecifier, pub import_map: Option, } @@ -100,18 +99,23 @@ async fn transform_inner(options: JsValue) -> Result { // with "invalid type: unit value, expected a boolean" and didn't say exactly // where it errored. // let options: TransformOptions = serde_wasm_bindgen::from_value(options)?; - let cwd = deno_path_util::url_to_file_path(&options.cwd)?; let maybe_config_path = match options.import_map.as_ref() { Some(import_map) => Some(deno_path_util::url_to_file_path(&import_map)?), None => None, }; - let cwd = [cwd]; + let entry_points = parse_module_specifiers(options.entry_points)?; + let paths = entry_points + .iter() + .filter_map(|e| { + deno_path_util::url_to_file_path(&deno_path_util::url_parent(e)).ok() + }) + .collect::>(); let workspace_directory = deno_config::workspace::WorkspaceDirectory::discover( &sys_traits::impls::RealSys, match maybe_config_path.as_ref() { Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), - None => WorkspaceDiscoverStart::Paths(&cwd), + None => WorkspaceDiscoverStart::Paths(&paths), }, &WorkspaceDiscoverOptions { additional_config_file_names: &[], @@ -124,7 +128,7 @@ async fn transform_inner(options: JsValue) -> Result { )?; let result = dnt::transform(dnt::TransformOptions { - entry_points: parse_module_specifiers(options.entry_points)?, + entry_points, test_entry_points: parse_module_specifiers(options.test_entry_points)?, shims: options.shims, test_shims: options.test_shims, From a13e2d22993b782bd4c9e3836f29c13e0a554822 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 10:32:27 -0500 Subject: [PATCH 03/11] move down into crate --- Cargo.lock | 2 + mod.ts | 2 + rs-lib/Cargo.toml | 2 + rs-lib/src/lib.rs | 47 ++++++++++++++++- rs-lib/tests/integration/test_builder.rs | 44 +++++++++++----- transform.ts | 1 + wasm/src/lib.rs | 67 +++++++++--------------- 7 files changed, 107 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c445b6..3dbda90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -486,6 +486,7 @@ dependencies = [ "anyhow", "base64 0.13.1", "deno_ast", + "deno_config", "deno_error", "deno_graph", "deno_path_util", @@ -2399,6 +2400,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3374191d43a934854e99a46cd47f8124369e690353e0f8db42769218d083690" dependencies = [ "js-sys", + "parking_lot", "wasm-bindgen", ] diff --git a/mod.ts b/mod.ts index b6e9838..6a20936 100644 --- a/mod.ts +++ b/mod.ts @@ -209,6 +209,7 @@ export async function build(options: BuildOptions): Promise { ? "inline" : options.declaration ?? "inline", }; + const cwd = Deno.cwd(); const declarationMap = options.declarationMap ?? (!!options.declaration && !options.skipSourceOutput); const packageManager = options.packageManager ?? "npm"; @@ -587,6 +588,7 @@ export async function build(options: BuildOptions): Promise { target: scriptTarget, importMap: options.importMap, internalWasmUrl: options.internalWasmUrl, + cwd: path.toFileUrl(cwd).toString(), }); } diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index 2824d47..e3dc080 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -16,6 +16,7 @@ serialization = ["serde"] anyhow = "1.0.70" base64 = "0.13.1" deno_ast = { version = "0.46.6", features = ["transforms", "view", "visit", "utils"] } +deno_config.workspace = true deno_error.workspace = true deno_graph = { version = "0.90.0", features = [], default-features = false } deno_path_util.workspace = true @@ -34,3 +35,4 @@ tokio = { version = "1", features = ["full"], optional = true } [dev-dependencies] pretty_assertions = "1.3.0" +sys_traits = { workspace = true, features = ["memory"] } diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 26777be..9255a42 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -19,6 +19,8 @@ use analyze::get_ignore_line_indexes; use anyhow::bail; use deno_ast::apply_text_changes; use deno_ast::TextChange; +use deno_config::workspace::WorkspaceDiscoverOptions; +use deno_config::workspace::WorkspaceDiscoverStart; use deno_graph::Module; use deno_semver::npm::NpmPackageReqReference; use graph::ModuleGraphOptions; @@ -29,6 +31,9 @@ use polyfills::build_polyfill_file; use polyfills::polyfills_for_target; use polyfills::Polyfill; use specifiers::Specifiers; +use sys_traits::FsMetadata; +use sys_traits::FsRead; +use sys_traits::FsReadDir; use utils::get_relative_specifier; use utils::prepend_statement_to_text; use visitors::fill_polyfills; @@ -246,6 +251,7 @@ pub struct TransformOptions { pub target: ScriptTarget, /// Optional import map. pub import_map: Option, + pub cwd: PathBuf, } struct EnvironmentContext<'a> { @@ -258,11 +264,50 @@ struct EnvironmentContext<'a> { used_shim: bool, } -pub async fn transform(options: TransformOptions) -> Result { +pub async fn transform( + sys: &(impl FsMetadata + FsRead + FsReadDir), + options: TransformOptions, +) -> Result { if options.entry_points.is_empty() { anyhow::bail!("at least one entry point must be specified"); } + let paths = options + .entry_points + .iter() + .filter_map(|e| { + deno_path_util::url_to_file_path(&deno_path_util::url_parent(e)).ok() + }) + .collect::>(); + let maybe_config_path = match options.import_map.as_ref() { + Some(import_map) => Some(deno_path_util::url_to_file_path(&import_map)?), + None => None, + }; + let cwd = [options.cwd]; + + let workspace_directory = + deno_config::workspace::WorkspaceDirectory::discover( + &sys_traits::impls::RealSys, + match maybe_config_path.as_ref() { + Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), + None => { + if paths.is_empty() { + WorkspaceDiscoverStart::Paths(&cwd) + } else { + WorkspaceDiscoverStart::Paths(&paths) + } + } + }, + &WorkspaceDiscoverOptions { + additional_config_file_names: &[], + deno_json_cache: None, + pkg_json_cache: None, + workspace_cache: None, + discover_pkg_json: true, + maybe_vendor_override: None, + }, + )?; + let (module_graph, specifiers) = crate::graph::ModuleGraph::build_with_specifiers(ModuleGraphOptions { entry_points: options diff --git a/rs-lib/tests/integration/test_builder.rs b/rs-lib/tests/integration/test_builder.rs index d8063ce..950b390 100644 --- a/rs-lib/tests/integration/test_builder.rs +++ b/rs-lib/tests/integration/test_builder.rs @@ -14,6 +14,8 @@ use deno_node_transform::ScriptTarget; use deno_node_transform::Shim; use deno_node_transform::TransformOptions; use deno_node_transform::TransformOutput; +use sys_traits::impls::InMemorySys; +use sys_traits::EnvCurrentDir; use super::InMemoryLoader; @@ -27,6 +29,7 @@ pub struct TestBuilder { test_shims: Vec, target: ScriptTarget, import_map: Option, + sys: InMemorySys, } impl TestBuilder { @@ -42,9 +45,18 @@ impl TestBuilder { test_shims: Default::default(), target: ScriptTarget::ES5, import_map: None, + sys: Default::default(), } } + pub fn with_sys( + &mut self, + mut action: impl FnMut(&mut InMemorySys), + ) -> &mut Self { + action(&mut self.sys); + self + } + pub fn with_loader( &mut self, mut action: impl FnMut(&mut InMemoryLoader), @@ -173,20 +185,24 @@ impl TestBuilder { .iter() .map(|p| ModuleSpecifier::parse(p).unwrap()), ); - transform(TransformOptions { - entry_points, - test_entry_points: self - .test_entry_points - .iter() - .map(|p| ModuleSpecifier::parse(p).unwrap()) - .collect(), - shims: self.shims.clone(), - test_shims: self.test_shims.clone(), - loader: Some(Rc::new(self.loader.clone())), - specifier_mappings: self.specifier_mappings.clone(), - target: self.target, - import_map: self.import_map.clone(), - }) + transform( + &self.sys, + TransformOptions { + entry_points, + test_entry_points: self + .test_entry_points + .iter() + .map(|p| ModuleSpecifier::parse(p).unwrap()) + .collect(), + shims: self.shims.clone(), + test_shims: self.test_shims.clone(), + loader: Some(Rc::new(self.loader.clone())), + specifier_mappings: self.specifier_mappings.clone(), + target: self.target, + import_map: self.import_map.clone(), + cwd: self.sys.env_current_dir().unwrap(), + }, + ) .await } } diff --git a/transform.ts b/transform.ts index 7096237..34a5558 100644 --- a/transform.ts +++ b/transform.ts @@ -75,6 +75,7 @@ export interface TransformOptions { /// Path or url to the import map. importMap?: string; internalWasmUrl?: string; + cwd: string; } /** Dependency in a package.json file. */ diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index 40c2fbc..afcac5c 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -9,8 +9,6 @@ use std::sync::Arc; use anyhow::Context; use anyhow::Result; -use deno_config::workspace::WorkspaceDiscoverOptions; -use deno_config::workspace::WorkspaceDiscoverStart; use deno_error::JsErrorBox; use dnt::LoadError; use dnt::MappedSpecifier; @@ -80,6 +78,7 @@ pub struct TransformOptions { pub mappings: HashMap, pub target: ScriptTarget, pub import_map: Option, + pub cwd: ModuleSpecifier, } #[wasm_bindgen] @@ -99,44 +98,21 @@ async fn transform_inner(options: JsValue) -> Result { // with "invalid type: unit value, expected a boolean" and didn't say exactly // where it errored. // let options: TransformOptions = serde_wasm_bindgen::from_value(options)?; - let maybe_config_path = match options.import_map.as_ref() { - Some(import_map) => Some(deno_path_util::url_to_file_path(&import_map)?), - None => None, - }; - let entry_points = parse_module_specifiers(options.entry_points)?; - let paths = entry_points - .iter() - .filter_map(|e| { - deno_path_util::url_to_file_path(&deno_path_util::url_parent(e)).ok() - }) - .collect::>(); - let workspace_directory = - deno_config::workspace::WorkspaceDirectory::discover( - &sys_traits::impls::RealSys, - match maybe_config_path.as_ref() { - Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), - None => WorkspaceDiscoverStart::Paths(&paths), - }, - &WorkspaceDiscoverOptions { - additional_config_file_names: &[], - deno_json_cache: None, - pkg_json_cache: None, - workspace_cache: None, - discover_pkg_json: true, - maybe_vendor_override: None, - }, - )?; - let result = dnt::transform(dnt::TransformOptions { - entry_points, - test_entry_points: parse_module_specifiers(options.test_entry_points)?, - shims: options.shims, - test_shims: options.test_shims, - loader: Some(Rc::new(JsLoader {})), - specifier_mappings: options.mappings, - target: options.target, - import_map: options.import_map, - }) + let result = dnt::transform( + &sys_traits::impls::RealSys, + dnt::TransformOptions { + entry_points: parse_module_specifiers(options.entry_points)?, + test_entry_points: parse_module_specifiers(options.test_entry_points)?, + shims: options.shims, + test_shims: options.test_shims, + loader: Some(Rc::new(JsLoader {})), + specifier_mappings: options.mappings, + target: options.target, + import_map: options.import_map, + cwd: deno_path_util::url_to_file_path(&options.cwd)?, + }, + ) .await?; Ok(serde_wasm_bindgen::to_value(&result).unwrap()) } @@ -144,11 +120,16 @@ async fn transform_inner(options: JsValue) -> Result { fn parse_module_specifiers( values: Vec, ) -> Result, anyhow::Error> { - let mut specifiers = Vec::new(); + let mut specifiers = Vec::with_capacity(values.len()); for value in values { - let entry_point = dnt::ModuleSpecifier::parse(&value) - .with_context(|| format!("Error parsing {}.", value))?; - specifiers.push(entry_point); + specifiers.push(parse_module_specifier(&value)?); } Ok(specifiers) } + +fn parse_module_specifier( + value: &str, +) -> Result { + ModuleSpecifier::parse(&value) + .with_context(|| format!("Error parsing {}.", value)) +} From eed6b4060ccfdac0e722b8022b624a5794065c2b Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 10:55:38 -0500 Subject: [PATCH 04/11] fix existing tests --- rs-lib/src/lib.rs | 27 +++++++++-------- rs-lib/tests/integration/in_memory_loader.rs | 31 ++++++++++++++------ rs-lib/tests/integration/test_builder.rs | 11 +++---- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 9255a42..8ad1b5f 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -279,25 +279,26 @@ pub async fn transform( deno_path_util::url_to_file_path(&deno_path_util::url_parent(e)).ok() }) .collect::>(); - let maybe_config_path = match options.import_map.as_ref() { - Some(import_map) => Some(deno_path_util::url_to_file_path(&import_map)?), + let maybe_import_map = match options.import_map.as_ref() { + Some(import_map) => deno_path_util::url_to_file_path(&import_map).ok(), None => None, }; let cwd = [options.cwd]; + let discover_start = match maybe_import_map.as_ref() { + Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), + None => { + if paths.is_empty() { + WorkspaceDiscoverStart::Paths(&cwd) + } else { + WorkspaceDiscoverStart::Paths(&paths) + } + } + }; let workspace_directory = deno_config::workspace::WorkspaceDirectory::discover( - &sys_traits::impls::RealSys, - match maybe_config_path.as_ref() { - Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), - None => { - if paths.is_empty() { - WorkspaceDiscoverStart::Paths(&cwd) - } else { - WorkspaceDiscoverStart::Paths(&paths) - } - } - }, + sys, + discover_start, &WorkspaceDiscoverOptions { additional_config_file_names: &[], deno_json_cache: None, diff --git a/rs-lib/tests/integration/in_memory_loader.rs b/rs-lib/tests/integration/in_memory_loader.rs index 4ee6f31..957ef8a 100644 --- a/rs-lib/tests/integration/in_memory_loader.rs +++ b/rs-lib/tests/integration/in_memory_loader.rs @@ -1,8 +1,8 @@ // Copyright 2018-2024 the Deno authors. MIT license. use std::collections::HashMap; +use std::io::ErrorKind; use std::path::Path; -use std::path::PathBuf; use std::pin::Pin; use std::sync::Arc; @@ -17,6 +17,10 @@ use futures::Future; use deno_node_transform::LoadResponse; use deno_node_transform::Loader; use deno_node_transform::ModuleSpecifier; +use sys_traits::impls::InMemorySys; +use sys_traits::FsCreateDirAll; +use sys_traits::FsRead; +use sys_traits::FsWrite; type RemoteFileText = String; type RemoteFileHeaders = Option>; @@ -24,14 +28,16 @@ type RemoteFileResult = Result<(RemoteFileText, RemoteFileHeaders), String>; #[derive(Clone)] pub struct InMemoryLoader { - local_files: HashMap, + pub sys: InMemorySys, remote_files: HashMap, } impl InMemoryLoader { pub fn new() -> Self { + let sys = InMemorySys::default(); + sys.fs_create_dir_all("/").unwrap(); Self { - local_files: HashMap::new(), + sys, remote_files: HashMap::new(), } } @@ -41,9 +47,9 @@ impl InMemoryLoader { path: impl AsRef, text: impl AsRef, ) -> &mut Self { - self - .local_files - .insert(path.as_ref().to_path_buf(), text.as_ref().to_string()); + let parent_dir = path.as_ref().parent().unwrap(); + self.sys.fs_create_dir_all(parent_dir).unwrap(); + self.sys.fs_write(path, text.as_ref().as_bytes()).unwrap(); self } @@ -100,10 +106,17 @@ impl Loader for InMemoryLoader { > { if specifier.scheme() == "file" { let file_path = url_to_file_path(&specifier).unwrap(); - let result = self.local_files.get(&file_path).map(ToOwned::to_owned); + let result = self.sys.fs_read_to_string(&file_path); return Box::pin(async move { - Ok(result.map(|result| LoadResponse { - content: result.into_bytes(), + let maybe_data = match result { + Ok(data) => Some(data), + Err(err) if err.kind() == ErrorKind::NotFound => None, + Err(err) => { + return Err(LoadError::Other(Arc::new(JsErrorBox::from_err(err)))) + } + }; + Ok(maybe_data.map(|result| LoadResponse { + content: result.into_owned().into_bytes(), headers: None, specifier, })) diff --git a/rs-lib/tests/integration/test_builder.rs b/rs-lib/tests/integration/test_builder.rs index 950b390..f6f7388 100644 --- a/rs-lib/tests/integration/test_builder.rs +++ b/rs-lib/tests/integration/test_builder.rs @@ -29,14 +29,12 @@ pub struct TestBuilder { test_shims: Vec, target: ScriptTarget, import_map: Option, - sys: InMemorySys, } impl TestBuilder { pub fn new() -> Self { - let loader = InMemoryLoader::new(); Self { - loader, + loader: InMemoryLoader::new(), entry_point: "file:///mod.ts".to_string(), additional_entry_points: Vec::new(), test_entry_points: Vec::new(), @@ -45,7 +43,6 @@ impl TestBuilder { test_shims: Default::default(), target: ScriptTarget::ES5, import_map: None, - sys: Default::default(), } } @@ -53,7 +50,7 @@ impl TestBuilder { &mut self, mut action: impl FnMut(&mut InMemorySys), ) -> &mut Self { - action(&mut self.sys); + action(&mut self.loader.sys); self } @@ -186,7 +183,7 @@ impl TestBuilder { .map(|p| ModuleSpecifier::parse(p).unwrap()), ); transform( - &self.sys, + &self.loader.sys, TransformOptions { entry_points, test_entry_points: self @@ -200,7 +197,7 @@ impl TestBuilder { specifier_mappings: self.specifier_mappings.clone(), target: self.target, import_map: self.import_map.clone(), - cwd: self.sys.env_current_dir().unwrap(), + cwd: self.loader.sys.env_current_dir().unwrap(), }, ) .await From b96572d8e5df9c6ff6bcf2c8d0777a735c8908a3 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 14:15:12 -0500 Subject: [PATCH 05/11] fix tests --- Cargo.lock | 1092 ++++++++++++------ Cargo.toml | 7 +- rs-lib/Cargo.toml | 2 + rs-lib/src/lib.rs | 64 +- rs-lib/tests/integration/in_memory_loader.rs | 4 +- rs-lib/tests/integration/test_builder.rs | 2 +- wasm/Cargo.toml | 8 +- wasm/src/lib.rs | 2 +- 8 files changed, 788 insertions(+), 393 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3dbda90..84353ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -56,9 +56,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "arrayvec" @@ -84,11 +84,17 @@ dependencies = [ "syn", ] +[[package]] +name = "async-once-cell" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" + [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", @@ -97,25 +103,31 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] +[[package]] +name = "base32" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" + [[package]] name = "base64" version = "0.13.1" @@ -161,9 +173,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "bitvec" @@ -217,9 +229,15 @@ dependencies = [ [[package]] name = "bytes" -version = "1.4.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cache_control" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf2a5fb3207c12b5d208ebc145f967fea5cac41a021c37417ccc31ba40f39ee" [[package]] name = "capacity_builder" @@ -254,11 +272,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ - "libc", + "shlex", ] [[package]] @@ -267,6 +285,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "num-traits", +] + [[package]] name = "compact_str" version = "0.7.1" @@ -292,9 +319,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -302,19 +329,44 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crypto-common" version = "0.1.6" @@ -325,17 +377,30 @@ dependencies = [ "typenum", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "debugid" @@ -378,11 +443,40 @@ dependencies = [ "swc_visit", "swc_visit_macros", "text_lines", - "thiserror", + "thiserror 2.0.12", "unicode-width 0.2.0", "url", ] +[[package]] +name = "deno_cache_dir" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869a62459ded73382e018c7c58a07df170ba5f5befb67e18ee10494e769efe2a" +dependencies = [ + "async-trait", + "base32", + "base64 0.21.7", + "boxed_error", + "cache_control", + "chrono", + "data-url", + "deno_error", + "deno_media_type", + "deno_path_util", + "http 1.3.1", + "indexmap", + "log", + "once_cell", + "parking_lot", + "serde", + "serde_json", + "sha2", + "sys_traits", + "thiserror 1.0.69", + "url", +] + [[package]] name = "deno_config" version = "0.54.2" @@ -398,7 +492,7 @@ dependencies = [ "glob", "ignore", "import_map", - "indexmap 2.2.5", + "indexmap", "jsonc-parser", "log", "percent-encoding", @@ -406,7 +500,7 @@ dependencies = [ "serde", "serde_json", "sys_traits", - "thiserror", + "thiserror 2.0.12", "url", ] @@ -452,7 +546,7 @@ dependencies = [ "encoding_rs", "futures", "import_map", - "indexmap 2.2.5", + "indexmap", "log", "monch", "once_cell", @@ -462,11 +556,24 @@ dependencies = [ "serde_json", "sha2", "sys_traits", - "thiserror", + "thiserror 2.0.12", "url", "wasm_dep_analyzer", ] +[[package]] +name = "deno_lockfile" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a03d93aa789e2652a644e3e71638b4e21faafad5f7392dc8f126589d158695" +dependencies = [ + "async-trait", + "deno_semver", + "serde", + "serde_json", + "thiserror 2.0.12", +] + [[package]] name = "deno_media_type" version = "0.2.8" @@ -490,6 +597,7 @@ dependencies = [ "deno_error", "deno_graph", "deno_path_util", + "deno_resolver", "deno_semver", "futures", "import_map", @@ -503,6 +611,28 @@ dependencies = [ "serde_json", "sys_traits", "tokio", + "url", +] + +[[package]] +name = "deno_npm" +version = "0.33.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5217eb9aaebd02e92baeea7b474ca3f663b611204ccbfba11f8d296be08abe69" +dependencies = [ + "async-trait", + "capacity_builder", + "deno_error", + "deno_lockfile", + "deno_semver", + "futures", + "indexmap", + "log", + "monch", + "serde", + "serde_json", + "thiserror 2.0.12", + "url", ] [[package]] @@ -515,11 +645,11 @@ dependencies = [ "deno_error", "deno_path_util", "deno_semver", - "indexmap 2.2.5", + "indexmap", "serde", "serde_json", "sys_traits", - "thiserror", + "thiserror 2.0.12", "url", ] @@ -532,7 +662,40 @@ dependencies = [ "deno_error", "percent-encoding", "sys_traits", - "thiserror", + "thiserror 2.0.12", + "url", +] + +[[package]] +name = "deno_resolver" +version = "0.35.0" +dependencies = [ + "anyhow", + "async-once-cell", + "async-trait", + "base32", + "boxed_error", + "deno_cache_dir", + "deno_config", + "deno_error", + "deno_media_type", + "deno_npm", + "deno_package_json", + "deno_path_util", + "deno_semver", + "deno_terminal", + "deno_unsync", + "futures", + "import_map", + "indexmap", + "log", + "node_resolver", + "once_cell", + "parking_lot", + "serde", + "serde_json", + "sys_traits", + "thiserror 2.0.12", "url", ] @@ -549,7 +712,7 @@ dependencies = [ "monch", "once_cell", "serde", - "thiserror", + "thiserror 2.0.12", "url", ] @@ -565,10 +728,11 @@ dependencies = [ [[package]] name = "deno_unsync" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ee1607db298c8f12124b345a52d5f2f504a7504c9d535f1d8f07127b237010" +checksum = "d774fd83f26b24f0805a6ab8b26834a0d06ceac0db517b769b1e4633c96a2057" dependencies = [ + "futures", "parking_lot", "tokio", ] @@ -610,7 +774,7 @@ dependencies = [ "deno_error", "deno_node_transform", "deno_path_util", - "getrandom", + "getrandom 0.2.16", "js-sys", "serde", "serde-wasm-bindgen", @@ -647,51 +811,40 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ - "cc", "libc", + "windows-sys 0.59.0", ] [[package]] name = "fastrand" -version = "2.0.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fnv" @@ -742,9 +895,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -757,9 +910,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -767,15 +920,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -784,15 +937,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -801,21 +954,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -841,22 +994,34 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + [[package]] name = "gimli" -version = "0.28.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -866,42 +1031,36 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata", + "regex-syntax", ] [[package]] name = "h2" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 1.9.3", + "http 0.2.12", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" @@ -912,11 +1071,23 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hipstr" @@ -945,9 +1116,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -956,20 +1138,20 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -979,22 +1161,22 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2", "tokio", "tower-service", "tracing", @@ -1161,17 +1343,16 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "ignore" -version = "0.4.20" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ + "crossbeam-deque", "globset", - "lazy_static", "log", "memchr", - "regex", + "regex-automata", "same-file", - "thread_local", "walkdir", "winapi-util", ] @@ -1184,49 +1365,39 @@ checksum = "1215d4d92511fbbdaea50e750e91f2429598ef817f02b579158e92803b52c00a" dependencies = [ "boxed_error", "deno_error", - "indexmap 2.2.5", + "indexmap", "log", "percent-encoding", "serde", "serde_json", - "thiserror", + "thiserror 2.0.12", "url", ] [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.2.5" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.3", "serde", ] [[package]] name = "ipnet" -version = "2.8.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-macro" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2069faacbe981460232f880d26bf3c7634e322d49053aa48c27e3ae642f728f1" +checksum = "1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4" dependencies = [ - "Inflector", + "heck", "proc-macro2", "quote", "syn", @@ -1256,23 +1427,46 @@ dependencies = [ "serde_json", ] +[[package]] +name = "lazy-regex" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn", +] + [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" @@ -1282,9 +1476,9 @@ checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1292,15 +1486,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1310,22 +1504,22 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.8" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", - "windows-sys", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] @@ -1336,11 +1530,10 @@ checksum = "b52c1b33ff98142aecea13138bd399b68aa7ab5d9546c300988c345004001eea" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1358,13 +1551,38 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "node_resolver" +version = "0.42.0" +dependencies = [ + "anyhow", + "async-trait", + "boxed_error", + "dashmap", + "deno_config", + "deno_error", + "deno_media_type", + "deno_package_json", + "deno_path_util", + "deno_semver", + "futures", + "lazy-regex", + "once_cell", + "path-clean", + "regex", + "serde", + "serde_json", + "sys_traits", + "thiserror 2.0.12", + "url", +] + [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", "serde", @@ -1372,19 +1590,18 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -1401,9 +1618,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.0" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1416,11 +1633,11 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.56" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -1442,15 +1659,15 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.91" +version = "0.9.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac" +checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" dependencies = [ "cc", "libc", @@ -1495,22 +1712,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] +[[package]] +name = "path-clean" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" + [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "percent-encoding" @@ -1520,9 +1743,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", "phf_shared", @@ -1530,9 +1753,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", "rand", @@ -1540,9 +1763,9 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ "phf_generator", "phf_shared", @@ -1553,18 +1776,18 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher", + "siphasher 1.0.1", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1574,15 +1797,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", "yansi", @@ -1599,9 +1822,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" dependencies = [ "cc", ] @@ -1635,6 +1858,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -1658,18 +1887,18 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", ] [[package]] name = "regex" -version = "1.10.3" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1679,9 +1908,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1690,15 +1919,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", "bytes", @@ -1706,7 +1935,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-tls", @@ -1719,9 +1948,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -1734,24 +1966,23 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.20" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", + "cfg-if", + "getrandom 0.2.16", "libc", - "once_cell", - "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -1761,22 +1992,22 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.8" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.6" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", @@ -1784,11 +2015,20 @@ dependencies = [ "sct", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -1802,15 +2042,15 @@ checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "ryu-js" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5" +checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" [[package]] name = "same-file" @@ -1823,11 +2063,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1844,9 +2084,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -1854,11 +2094,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "core-foundation", "core-foundation-sys", "libc", @@ -1867,9 +2107,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1921,7 +2161,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.2.5", + "indexmap", "itoa", "memchr", "ryu", @@ -1942,20 +2182,26 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -1966,6 +2212,12 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" @@ -1977,9 +2229,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smartstring" @@ -1994,22 +2246,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.3" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -2030,12 +2272,6 @@ dependencies = [ "url", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "sptr" version = "0.3.2" @@ -2050,15 +2286,15 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "cddb07e32ddb770749da91081d8d0ac3a16f1a569a18b20348cd371f5dead06b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2122,14 +2358,14 @@ dependencies = [ "once_cell", "rustc-hash", "serde", - "siphasher", + "siphasher 0.3.11", "sourcemap", "swc_allocator", "swc_atoms", "swc_eq_ignore_macros", "swc_visit", "tracing", - "unicode-width 0.1.13", + "unicode-width 0.1.14", "url", ] @@ -2139,7 +2375,7 @@ version = "8.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4062a54522a9c02d2b68cc09282774b87121cd48693b0e67ae8c18b31b709866" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "is-macro", "num-bigint", "once_cell", @@ -2196,7 +2432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d9ed10e3efa2230d0b3d0ad63c2e67d9b40c3892f31a865ad14d6fa881e0e9" dependencies = [ "arrayvec", - "bitflags 2.6.0", + "bitflags 2.9.0", "either", "new_debug_unreachable", "num-bigint", @@ -2236,7 +2472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "398f4105e5fa3dedcefc58d068a5b2d8330cd4a36c4ae1ef2da83ed0a3e3c61f" dependencies = [ "arrayvec", - "bitflags 2.6.0", + "bitflags 2.9.0", "either", "new_debug_unreachable", "num-bigint", @@ -2262,8 +2498,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b46e3a36213d78fb4233e596b8a5c81c6cdafe02d03d780eed006c983aa0a724" dependencies = [ "better_scoped_tls", - "bitflags 2.6.0", - "indexmap 2.2.5", + "bitflags 2.9.0", + "indexmap", "once_cell", "par-core", "phf", @@ -2285,7 +2521,7 @@ version = "12.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7c499ba586b784be6dfbdd76ebd3cfdbabaf43a5bda162a11fe7dd326670b62" dependencies = [ - "indexmap 2.2.5", + "indexmap", "num_cpus", "once_cell", "par-core", @@ -2328,9 +2564,9 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f486687bfb7b5c560868f69ed2d458b880cebc9babebcb67e49f31b55c5bf847" +checksum = "27e18fbfe83811ffae2bb23727e45829a0d19c6870bced7c0f545cc99ad248dd" dependencies = [ "proc-macro2", "quote", @@ -2367,7 +2603,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "swc_macros_common 0.3.13", + "swc_macros_common 0.3.14", "syn", ] @@ -2382,6 +2618,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "synstructure" version = "0.13.2" @@ -2399,9 +2641,33 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3374191d43a934854e99a46cd47f8124369e690353e0f8db42769218d083690" dependencies = [ + "getrandom 0.2.16", "js-sys", + "libc", "parking_lot", "wasm-bindgen", + "windows-sys 0.59.0", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -2412,15 +2678,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", - "redox_syscall", + "getrandom 0.3.2", + "once_cell", "rustix", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -2441,20 +2707,29 @@ dependencies = [ "serde", ] +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.12", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -2462,13 +2737,14 @@ dependencies = [ ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "thiserror-impl" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ - "cfg-if", - "once_cell", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2483,28 +2759,27 @@ dependencies = [ [[package]] name = "tokio" -version = "1.32.0" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.3", + "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", @@ -2523,29 +2798,28 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2554,9 +2828,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -2565,18 +2839,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] [[package]] name = "triomphe" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" dependencies = [ "serde", "stable_deref_trait", @@ -2584,9 +2858,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typed-arena" @@ -2596,33 +2870,33 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-id" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" +checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" [[package]] name = "unicode-id-start" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea" +checksum = "2f322b60f6b9736017344fa0635d64be2f458fbc04eef65f6be22976dd1ffd5b" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" @@ -2632,9 +2906,9 @@ checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -2662,9 +2936,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.10.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" [[package]] name = "vcpkg" @@ -2674,9 +2948,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vsimd" @@ -2709,6 +2983,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -2784,57 +3067,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eeee3bdea6257cc36d756fa745a70f9d393571e47d69e0ed97581676a5369ca" dependencies = [ "deno_error", - "thiserror", + "thiserror 2.0.12", ] [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "winapi" -version = "0.3.9" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "windows-sys 0.59.0", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.6" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "winapi", + "windows-targets 0.48.5", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2843,13 +3122,29 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -2858,42 +3153,90 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winreg" version = "0.50.0" @@ -2901,7 +3244,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", ] [[package]] @@ -2927,9 +3279,9 @@ dependencies = [ [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" diff --git a/Cargo.toml b/Cargo.toml index a2e9092..03fda88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,12 @@ members = [ [workspace.dependencies] deno_config = "0.54.2" -deno_error = "0.5.6" +deno_error = { version = "0.5.6", features = ["serde", "serde_json", "url"] } deno_path_util = "0.3.2" +deno_resolver = { version = "0.35.0" } serde_json = { version = "1.0.140", features = ["preserve_order"] } sys_traits = { version = "0.1.9", features = ["real"] } +url = { version = "2.5.4", features =["serde"] } + +[patch.crates-io] +deno_resolver = { path = "../deno/resolvers/deno" } \ No newline at end of file diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index e3dc080..fc88eaf 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -20,6 +20,7 @@ deno_config.workspace = true deno_error.workspace = true deno_graph = { version = "0.90.0", features = [], default-features = false } deno_path_util.workspace = true +deno_resolver.workspace = true deno_semver = "0.7.1" futures = "0.3.25" import_map = { version = "0.21.0", features = ["ext"] } @@ -32,6 +33,7 @@ serde = { version = "1.0.159", features = ["derive"], optional = true } serde_json.workspace = true sys_traits.workspace = true tokio = { version = "1", features = ["full"], optional = true } +url.workspace = true [dev-dependencies] pretty_assertions = "1.3.0" diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 8ad1b5f..c61f01d 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -22,6 +22,11 @@ use deno_ast::TextChange; use deno_config::workspace::WorkspaceDiscoverOptions; use deno_config::workspace::WorkspaceDiscoverStart; use deno_graph::Module; +use deno_resolver::factory::ConfigDiscoveryOption; +use deno_resolver::factory::ResolverFactoryOptions; +use deno_resolver::factory::WorkspaceFactoryOptions; +use deno_resolver::factory::WorkspaceFactorySys; +use deno_resolver::NodeResolverOptions; use deno_semver::npm::NpmPackageReqReference; use graph::ModuleGraphOptions; use mappings::Mappings; @@ -34,6 +39,7 @@ use specifiers::Specifiers; use sys_traits::FsMetadata; use sys_traits::FsRead; use sys_traits::FsReadDir; +use sys_traits::ThreadSleep; use utils::get_relative_specifier; use utils::prepend_statement_to_text; use visitors::fill_polyfills; @@ -265,7 +271,7 @@ struct EnvironmentContext<'a> { } pub async fn transform( - sys: &(impl FsMetadata + FsRead + FsReadDir), + sys: impl WorkspaceFactorySys, options: TransformOptions, ) -> Result { if options.entry_points.is_empty() { @@ -283,31 +289,53 @@ pub async fn transform( Some(import_map) => deno_path_util::url_to_file_path(&import_map).ok(), None => None, }; - let cwd = [options.cwd]; - let discover_start = match maybe_import_map.as_ref() { - Some(config_path) => WorkspaceDiscoverStart::ConfigFile(&config_path), + let config_discovery = match maybe_import_map.as_ref() { + Some(config_path) => ConfigDiscoveryOption::Path(config_path.clone()), None => { if paths.is_empty() { - WorkspaceDiscoverStart::Paths(&cwd) + ConfigDiscoveryOption::DiscoverCwd } else { - WorkspaceDiscoverStart::Paths(&paths) + ConfigDiscoveryOption::Discover { start_paths: paths } } } }; - let workspace_directory = - deno_config::workspace::WorkspaceDirectory::discover( - sys, - discover_start, - &WorkspaceDiscoverOptions { - additional_config_file_names: &[], - deno_json_cache: None, - pkg_json_cache: None, - workspace_cache: None, - discover_pkg_json: true, - maybe_vendor_override: None, + let factory = deno_resolver::factory::WorkspaceFactory::new( + sys, + options.cwd, + WorkspaceFactoryOptions { + additional_config_file_names: &[], + config_discovery, + deno_dir_path_provider: None, + is_package_manager_subcommand: false, + node_modules_dir: None, + no_npm: false, + npm_process_state: None, + vendor: None, + }, + ); + + let workspace_dir = factory.workspace_directory(); + let resolver_factory = deno_resolver::factory::ResolverFactory::new( + Rc::new(factory), + ResolverFactoryOptions { + npm_system_info: Default::default(), + node_resolver_options: NodeResolverOptions { + conditions_from_resolution_mode: Default::default(), + typescript_version: None, }, - )?; + node_resolution_cache: None, + package_json_cache: None, + package_json_dep_resolution: Some( + deno_resolver::workspace::PackageJsonDepResolution::Enabled, + ), + // todo: use options.import_map here + specified_import_map: None, + bare_node_builtins: true, + unstable_sloppy_imports: true, + }, + ); + let deno_resolver = resolver_factory.deno_resolver().await?; let (module_graph, specifiers) = crate::graph::ModuleGraph::build_with_specifiers(ModuleGraphOptions { diff --git a/rs-lib/tests/integration/in_memory_loader.rs b/rs-lib/tests/integration/in_memory_loader.rs index 957ef8a..79f3ca1 100644 --- a/rs-lib/tests/integration/in_memory_loader.rs +++ b/rs-lib/tests/integration/in_memory_loader.rs @@ -18,6 +18,7 @@ use deno_node_transform::LoadResponse; use deno_node_transform::Loader; use deno_node_transform::ModuleSpecifier; use sys_traits::impls::InMemorySys; +use sys_traits::EnvSetVar; use sys_traits::FsCreateDirAll; use sys_traits::FsRead; use sys_traits::FsWrite; @@ -35,7 +36,8 @@ pub struct InMemoryLoader { impl InMemoryLoader { pub fn new() -> Self { let sys = InMemorySys::default(); - sys.fs_create_dir_all("/").unwrap(); + sys.env_set_var("DENO_DIR", "/.deno"); + sys.fs_create_dir_all("/.deno").unwrap(); Self { sys, remote_files: HashMap::new(), diff --git a/rs-lib/tests/integration/test_builder.rs b/rs-lib/tests/integration/test_builder.rs index f6f7388..0a66a17 100644 --- a/rs-lib/tests/integration/test_builder.rs +++ b/rs-lib/tests/integration/test_builder.rs @@ -183,7 +183,7 @@ impl TestBuilder { .map(|p| ModuleSpecifier::parse(p).unwrap()), ); transform( - &self.loader.sys, + self.loader.sys.clone(), TransformOptions { entry_points, test_entry_points: self diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index ce504e7..00d79db 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -18,7 +18,6 @@ deno_path_util.workspace = true dnt = { path = "../rs-lib", default-features = false, features = ["serialization"], package="deno_node_transform" } getrandom = { version = "*", features = ["js"] } js-sys = "=0.3.69" -sys_traits = { workspace = true, features = ["real", "wasm"] } wasm-bindgen = { version = "=0.2.92", features = ["serde-serialize"] } wasm-bindgen-futures = "=0.4.42" @@ -30,3 +29,10 @@ console_error_panic_hook = { version = "0.1.6", optional = true } serde = { version = "1.0", features = ["derive"] } serde-wasm-bindgen = "=0.5.0" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +sys_traits = { workspace = true, features = ["real", "wasm"] } + +# get this compiling when using `cargo check/test` +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +sys_traits = { workspace = true, features = ["real", "getrandom", "libc", "winapi"] } diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index afcac5c..fcbf16a 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -100,7 +100,7 @@ async fn transform_inner(options: JsValue) -> Result { // let options: TransformOptions = serde_wasm_bindgen::from_value(options)?; let result = dnt::transform( - &sys_traits::impls::RealSys, + sys_traits::impls::RealSys, dnt::TransformOptions { entry_points: parse_module_specifiers(options.entry_points)?, test_entry_points: parse_module_specifiers(options.test_entry_points)?, From cae62baf48b40b2272cfe2cb708eb21811d1fcbe Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 15:19:35 -0500 Subject: [PATCH 06/11] update to use deno_resolver --- Cargo.lock | 3 + Cargo.toml | 3 +- rs-lib/Cargo.toml | 1 + rs-lib/src/graph.rs | 124 ++++++------------- rs-lib/src/lib.rs | 71 +++++++++-- rs-lib/src/loader/default_loader.rs | 1 + rs-lib/src/loader/mod.rs | 4 +- rs-lib/src/polyfills/mod.rs | 2 +- rs-lib/tests/integration/in_memory_loader.rs | 2 +- wasm/src/lib.rs | 3 +- 10 files changed, 112 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 84353ca..32dd931 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -591,6 +591,7 @@ name = "deno_node_transform" version = "0.6.0" dependencies = [ "anyhow", + "async-trait", "base64 0.13.1", "deno_ast", "deno_config", @@ -678,6 +679,7 @@ dependencies = [ "deno_cache_dir", "deno_config", "deno_error", + "deno_graph", "deno_media_type", "deno_npm", "deno_package_json", @@ -1561,6 +1563,7 @@ dependencies = [ "dashmap", "deno_config", "deno_error", + "deno_graph", "deno_media_type", "deno_package_json", "deno_path_util", diff --git a/Cargo.toml b/Cargo.toml index 03fda88..ab89d2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,10 +12,11 @@ members = [ ] [workspace.dependencies] +async-trait = "0.1.88" deno_config = "0.54.2" deno_error = { version = "0.5.6", features = ["serde", "serde_json", "url"] } deno_path_util = "0.3.2" -deno_resolver = { version = "0.35.0" } +deno_resolver = { version = "0.35.0", features = ["graph"] } serde_json = { version = "1.0.140", features = ["preserve_order"] } sys_traits = { version = "0.1.9", features = ["real"] } url = { version = "2.5.4", features =["serde"] } diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index fc88eaf..e3f0c10 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -14,6 +14,7 @@ serialization = ["serde"] [dependencies] anyhow = "1.0.70" +async-trait.workspace = true base64 = "0.13.1" deno_ast = { version = "0.46.6", features = ["transforms", "view", "visit", "utils"] } deno_config.workspace = true diff --git a/rs-lib/src/graph.rs b/rs-lib/src/graph.rs index 1541060..230418e 100644 --- a/rs-lib/src/graph.rs +++ b/rs-lib/src/graph.rs @@ -13,29 +13,39 @@ use crate::specifiers::get_specifiers; use crate::specifiers::Specifiers; use crate::MappedSpecifier; -use anyhow::anyhow; use anyhow::bail; -use anyhow::Context; use anyhow::Result; use deno_ast::ModuleSpecifier; use deno_ast::ParsedSource; -use deno_error::JsErrorBox; -use deno_graph::source::CacheSetting; -use deno_graph::source::ResolutionKind; -use deno_graph::source::ResolveError; +use deno_config::workspace::WorkspaceDirectory; use deno_graph::CapturingModuleAnalyzer; use deno_graph::Module; use deno_graph::ParsedSourceStore; -use deno_graph::Range; -use import_map::ImportMapOptions; +use deno_resolver::factory::WorkspaceFactorySys; +use deno_resolver::graph::DenoGraphResolver; +use deno_resolver::npm::DenoInNpmPackageChecker; +use deno_resolver::npm::NpmResolver; +use deno_resolver::workspace::ScopedJsxImportSourceConfig; +use deno_resolver::DenoIsBuiltInNodeModuleChecker; +use deno_resolver::DenoResolver; use sys_traits::impls::RealSys; -pub struct ModuleGraphOptions<'a> { +pub type DntDenoResolver = DenoResolver< + DenoInNpmPackageChecker, + DenoIsBuiltInNodeModuleChecker, + NpmResolver, + TSys, +>; + +pub struct ModuleGraphOptions<'a, TSys: WorkspaceFactorySys> { pub entry_points: Vec, pub test_entry_points: Vec, - pub loader: Option>, + pub loader: Rc, + pub resolver: Rc>, pub specifier_mappings: &'a HashMap, - pub import_map: Option, + pub cjs_tracker: + deno_resolver::cjs::CjsTracker, + pub workspace_dir: Rc, } /// Wrapper around deno_graph::ModuleGraph. @@ -45,32 +55,31 @@ pub struct ModuleGraph { } impl ModuleGraph { - pub async fn build_with_specifiers( - options: ModuleGraphOptions<'_>, + pub async fn build_with_specifiers( + options: ModuleGraphOptions<'_, TSys>, ) -> Result<(Self, Specifiers)> { - let loader = options.loader.unwrap_or_else(|| { - #[cfg(feature = "tokio-loader")] - return Rc::new(crate::loader::DefaultLoader::new()); - #[cfg(not(feature = "tokio-loader"))] - panic!("You must provide a loader or use the 'tokio-loader' feature.") - }); - let resolver = match options.import_map { - Some(import_map_url) => Some( - ImportMapResolver::load(&import_map_url, &*loader) - .await - .context("Error loading import map.")?, - ), - None => None, - }; + let resolver = options.resolver; + let loader = options.loader; let loader = SourceLoader::new( loader, get_all_specifier_mappers(), options.specifier_mappings, ); + let graph_resolver = DenoGraphResolver::new( + resolver, + Default::default(), + Box::new(|_diagnostic, _referrer, _pos| {}), + ); + let scoped_jsx_import_source_config = + ScopedJsxImportSourceConfig::from_workspace_dir(&options.workspace_dir)?; let source_parser = ScopeAnalysisParser; let capturing_analyzer = CapturingModuleAnalyzer::new(Some(Box::new(source_parser)), None); let mut graph = deno_graph::ModuleGraph::new(deno_graph::GraphKind::All); + let graph_resolver = graph_resolver.as_graph_resolver( + &options.cjs_tracker, + &scoped_jsx_import_source_config, + ); graph .build( options @@ -84,7 +93,7 @@ impl ModuleGraph { is_dynamic: false, skip_dynamic_deps: false, imports: Default::default(), - resolver: resolver.as_ref().map(|r| r.as_resolver()), + resolver: Some(&graph_resolver), locker: None, module_analyzer: &capturing_analyzer, reporter: None, @@ -185,7 +194,7 @@ impl ModuleGraph { let specifier = self.graph.resolve(specifier); self .capturing_analyzer - .get_parsed_source(&specifier) + .get_parsed_source(specifier) .unwrap_or_else(|| { panic!( "dnt bug - Did not find parsed source for specifier: {}", @@ -202,7 +211,7 @@ impl ModuleGraph { self .graph .resolve_dependency(value, referrer, /* prefer_types */ false) - .map(|url| url.clone()) + .cloned() .or_else(|| { let value_lower = value.to_lowercase(); if value_lower.starts_with("https://") @@ -236,58 +245,3 @@ fn format_specifiers_for_message( .collect::>() .join("\n") } - -#[derive(Debug)] -struct ImportMapResolver(import_map::ImportMap); - -impl ImportMapResolver { - pub async fn load( - import_map_url: &ModuleSpecifier, - loader: &dyn Loader, - ) -> Result { - let response = loader - .load(import_map_url.clone(), CacheSetting::Use, None) - .await? - .ok_or_else(|| anyhow!("Could not find {}", import_map_url))?; - let value = jsonc_parser::parse_to_serde_value( - &String::from_utf8(response.content)?, - &jsonc_parser::ParseOptions { - allow_comments: true, - allow_loose_object_property_names: true, - allow_trailing_commas: true, - }, - )? - .unwrap_or_else(|| serde_json::Value::Object(Default::default())); - let result = import_map::parse_from_value_with_options( - import_map_url.clone(), - value, - ImportMapOptions { - address_hook: None, - expand_imports: true, - }, - )?; - // if !result.diagnostics.is_empty() { - // todo: surface diagnostics maybe? It seems like this should not be hard error according to import map spec - // bail!("Import map diagnostics:\n{}", result.diagnostics.into_iter().map(|d| format!(" - {}", d)).collect::>().join("\n")); - //} - Ok(ImportMapResolver(result.import_map)) - } - - pub fn as_resolver(&self) -> &dyn deno_graph::source::Resolver { - self - } -} - -impl deno_graph::source::Resolver for ImportMapResolver { - fn resolve( - &self, - specifier: &str, - referrer_range: &Range, - _kind: ResolutionKind, - ) -> Result { - self - .0 - .resolve(specifier, &referrer_range.specifier) - .map_err(|err| ResolveError::Other(JsErrorBox::from_err(err))) - } -} diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index c61f01d..718c6b2 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -19,13 +19,14 @@ use analyze::get_ignore_line_indexes; use anyhow::bail; use deno_ast::apply_text_changes; use deno_ast::TextChange; -use deno_config::workspace::WorkspaceDiscoverOptions; -use deno_config::workspace::WorkspaceDiscoverStart; use deno_graph::Module; +use deno_resolver::cjs::CjsTracker; use deno_resolver::factory::ConfigDiscoveryOption; use deno_resolver::factory::ResolverFactoryOptions; +use deno_resolver::factory::SpecifiedImportMapProvider; use deno_resolver::factory::WorkspaceFactoryOptions; use deno_resolver::factory::WorkspaceFactorySys; +use deno_resolver::workspace::SpecifiedImportMap; use deno_resolver::NodeResolverOptions; use deno_semver::npm::NpmPackageReqReference; use graph::ModuleGraphOptions; @@ -36,10 +37,6 @@ use polyfills::build_polyfill_file; use polyfills::polyfills_for_target; use polyfills::Polyfill; use specifiers::Specifiers; -use sys_traits::FsMetadata; -use sys_traits::FsRead; -use sys_traits::FsReadDir; -use sys_traits::ThreadSleep; use utils::get_relative_specifier; use utils::prepend_statement_to_text; use visitors::fill_polyfills; @@ -260,6 +257,40 @@ pub struct TransformOptions { pub cwd: PathBuf, } +#[derive(Debug)] +struct ImportMapProvider { + url: ModuleSpecifier, + loader: Rc, +} + +#[async_trait::async_trait(?Send)] +impl SpecifiedImportMapProvider for ImportMapProvider { + async fn get(&self) -> Result, anyhow::Error> { + let Some(response) = self + .loader + .load(self.url.clone(), CacheSetting::Use, None) + .await? + else { + return Ok(None); + }; + let Some(value) = jsonc_parser::parse_to_serde_value( + &String::from_utf8(response.content)?, + &jsonc_parser::ParseOptions { + allow_comments: true, + allow_loose_object_property_names: true, + allow_trailing_commas: true, + }, + )? + else { + return Ok(None); + }; + Ok(Some(SpecifiedImportMap { + base_url: response.specifier, + value, + })) + } +} + struct EnvironmentContext<'a> { environment: TransformOutputEnvironment, searching_polyfills: Vec>, @@ -286,7 +317,7 @@ pub async fn transform( }) .collect::>(); let maybe_import_map = match options.import_map.as_ref() { - Some(import_map) => deno_path_util::url_to_file_path(&import_map).ok(), + Some(import_map) => deno_path_util::url_to_file_path(import_map).ok(), None => None, }; let config_discovery = match maybe_import_map.as_ref() { @@ -315,7 +346,13 @@ pub async fn transform( }, ); - let workspace_dir = factory.workspace_directory(); + let workspace_dir = factory.workspace_directory()?.clone(); + let loader = options.loader.unwrap_or_else(|| { + #[cfg(feature = "tokio-loader")] + return Rc::new(crate::loader::DefaultLoader::new()); + #[cfg(not(feature = "tokio-loader"))] + panic!("You must provide a loader or use the 'tokio-loader' feature.") + }); let resolver_factory = deno_resolver::factory::ResolverFactory::new( Rc::new(factory), ResolverFactoryOptions { @@ -330,12 +367,22 @@ pub async fn transform( deno_resolver::workspace::PackageJsonDepResolution::Enabled, ), // todo: use options.import_map here - specified_import_map: None, + specified_import_map: options.import_map.map(|url| { + Box::new(ImportMapProvider { + url, + loader: loader.clone(), + }) as Box + }), bare_node_builtins: true, unstable_sloppy_imports: true, }, ); let deno_resolver = resolver_factory.deno_resolver().await?; + let cjs_tracker = CjsTracker::new( + resolver_factory.in_npm_package_checker()?.clone(), + resolver_factory.pkg_json_resolver().clone(), + deno_resolver::cjs::IsCjsResolutionMode::ImplicitTypeCommonJs, + ); let (module_graph, specifiers) = crate::graph::ModuleGraph::build_with_specifiers(ModuleGraphOptions { @@ -357,8 +404,10 @@ pub async fn transform( ) .collect(), specifier_mappings: &options.specifier_mappings, - loader: options.loader, - import_map: options.import_map, + loader, + resolver: deno_resolver.clone(), + cjs_tracker, + workspace_dir, }) .await?; diff --git a/rs-lib/src/loader/default_loader.rs b/rs-lib/src/loader/default_loader.rs index 506d0b8..c5a92d7 100644 --- a/rs-lib/src/loader/default_loader.rs +++ b/rs-lib/src/loader/default_loader.rs @@ -16,6 +16,7 @@ use futures::Future; use crate::LoadResponse; use crate::Loader; +#[derive(Debug)] pub struct DefaultLoader {} impl DefaultLoader { diff --git a/rs-lib/src/loader/mod.rs b/rs-lib/src/loader/mod.rs index 3ef5923..4b618d6 100644 --- a/rs-lib/src/loader/mod.rs +++ b/rs-lib/src/loader/mod.rs @@ -36,7 +36,7 @@ pub struct LoadResponse { pub content: Vec, } -pub trait Loader { +pub trait Loader: std::fmt::Debug { fn load( &self, url: ModuleSpecifier, @@ -79,7 +79,7 @@ impl<'a> SourceLoader<'a> { } } -impl<'a> deno_graph::source::Loader for SourceLoader<'a> { +impl deno_graph::source::Loader for SourceLoader<'_> { fn load( &self, specifier: &ModuleSpecifier, diff --git a/rs-lib/src/polyfills/mod.rs b/rs-lib/src/polyfills/mod.rs index 53742a5..97b0743 100644 --- a/rs-lib/src/polyfills/mod.rs +++ b/rs-lib/src/polyfills/mod.rs @@ -41,7 +41,7 @@ pub struct PolyfillVisitContext<'a, 'b> { pub top_level_decls: &'a HashSet, } -impl<'a, 'b> PolyfillVisitContext<'a, 'b> { +impl PolyfillVisitContext<'_, '_> { pub fn has_global_property_access( &self, node: Node, diff --git a/rs-lib/tests/integration/in_memory_loader.rs b/rs-lib/tests/integration/in_memory_loader.rs index 79f3ca1..1e1405a 100644 --- a/rs-lib/tests/integration/in_memory_loader.rs +++ b/rs-lib/tests/integration/in_memory_loader.rs @@ -27,7 +27,7 @@ type RemoteFileText = String; type RemoteFileHeaders = Option>; type RemoteFileResult = Result<(RemoteFileText, RemoteFileHeaders), String>; -#[derive(Clone)] +#[derive(Debug, Clone)] pub struct InMemoryLoader { pub sys: InMemorySys, remote_files: HashMap, diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index fcbf16a..e1d5910 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -28,6 +28,7 @@ extern "C" { ) -> JsValue; } +#[derive(Debug)] struct JsLoader; impl dnt::Loader for JsLoader { @@ -130,6 +131,6 @@ fn parse_module_specifiers( fn parse_module_specifier( value: &str, ) -> Result { - ModuleSpecifier::parse(&value) + ModuleSpecifier::parse(value) .with_context(|| format!("Error parsing {}.", value)) } From 5d234989db305a9e4c9b7a68baa642e4316afb37 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 15:54:46 -0500 Subject: [PATCH 07/11] update to latest --- rs-lib/src/graph.rs | 2 +- rs-lib/src/lib.rs | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/rs-lib/src/graph.rs b/rs-lib/src/graph.rs index 230418e..a2af550 100644 --- a/rs-lib/src/graph.rs +++ b/rs-lib/src/graph.rs @@ -44,7 +44,7 @@ pub struct ModuleGraphOptions<'a, TSys: WorkspaceFactorySys> { pub resolver: Rc>, pub specifier_mappings: &'a HashMap, pub cjs_tracker: - deno_resolver::cjs::CjsTracker, + Rc>, pub workspace_dir: Rc, } diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 718c6b2..15f9307 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -20,7 +20,6 @@ use anyhow::bail; use deno_ast::apply_text_changes; use deno_ast::TextChange; use deno_graph::Module; -use deno_resolver::cjs::CjsTracker; use deno_resolver::factory::ConfigDiscoveryOption; use deno_resolver::factory::ResolverFactoryOptions; use deno_resolver::factory::SpecifiedImportMapProvider; @@ -356,6 +355,8 @@ pub async fn transform( let resolver_factory = deno_resolver::factory::ResolverFactory::new( Rc::new(factory), ResolverFactoryOptions { + is_cjs_resolution_mode: + deno_resolver::cjs::IsCjsResolutionMode::ImplicitTypeCommonJs, npm_system_info: Default::default(), node_resolver_options: NodeResolverOptions { conditions_from_resolution_mode: Default::default(), @@ -378,11 +379,7 @@ pub async fn transform( }, ); let deno_resolver = resolver_factory.deno_resolver().await?; - let cjs_tracker = CjsTracker::new( - resolver_factory.in_npm_package_checker()?.clone(), - resolver_factory.pkg_json_resolver().clone(), - deno_resolver::cjs::IsCjsResolutionMode::ImplicitTypeCommonJs, - ); + let cjs_tracker = resolver_factory.cjs_tracker()?.clone(); let (module_graph, specifiers) = crate::graph::ModuleGraph::build_with_specifiers(ModuleGraphOptions { From 07d26928cfa62ab96508f07c0dc2c8acd820d040 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 6 May 2025 16:41:33 -0500 Subject: [PATCH 08/11] add test --- README.md | 11 ++--- mod.ts | 3 ++ rs-lib/src/graph.rs | 29 ++++++++---- rs-lib/src/lib.rs | 18 ++++---- rs-lib/tests/integration/test_builder.rs | 8 ++++ rs-lib/tests/integration_test.rs | 39 ++++++++++++++++ tests/integration.test.ts | 58 +++++++++++++++++++++++- tests/workspace_project/add/deno.json | 3 ++ tests/workspace_project/add/mod.ts | 7 +++ tests/workspace_project/deno.json | 6 +++ transform.ts | 1 + wasm/src/lib.rs | 2 + 12 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 tests/workspace_project/add/deno.json create mode 100644 tests/workspace_project/add/mod.ts create mode 100644 tests/workspace_project/deno.json diff --git a/README.md b/README.md index 5207921..a23a52b 100644 --- a/README.md +++ b/README.md @@ -606,22 +606,17 @@ await build({ }); ``` -### Import Map / deno.json Support +### deno.json Support -To use an import map or deno.json file with `"imports"` and/or `"scopes"`, add -an `importMap` entry to your build object: +Starting in dnt 0.42, the deno.json is auto-discovered. A config file can be explicitly specified by the `configFile` key: ```ts await build({ // ...etc... - importMap: "deno.json", + configFile: import.meta.resolve("../deno.json"), }); ``` -Note there is no support for the deno.json `importMap` key. Either embed that in -your deno.json or specify the import map in this property directly. Also note -that the deno.json is not auto-discovered—you must explicitly specify it. - ### GitHub Actions - Npm Publish on Tag 1. Ensure your build script accepts a version as a CLI argument and sets that in diff --git a/mod.ts b/mod.ts index 6a20936..24cb728 100644 --- a/mod.ts +++ b/mod.ts @@ -122,6 +122,8 @@ export interface BuildOptions { mappings?: SpecifierMappings; /** Package.json output. You may override dependencies and dev dependencies in here. */ package: PackageJson; + /** Path or url to a deno.json. */ + configFile?: string; /** Path or url to import map. */ importMap?: string; /** Package manager used to install dependencies and run npm scripts. @@ -587,6 +589,7 @@ export async function build(options: BuildOptions): Promise { mappings: options.mappings, target: scriptTarget, importMap: options.importMap, + configFile: options.configFile, internalWasmUrl: options.internalWasmUrl, cwd: path.toFileUrl(cwd).toString(), }); diff --git a/rs-lib/src/graph.rs b/rs-lib/src/graph.rs index a2af550..e94fa02 100644 --- a/rs-lib/src/graph.rs +++ b/rs-lib/src/graph.rs @@ -16,10 +16,14 @@ use crate::MappedSpecifier; use anyhow::bail; use anyhow::Result; use deno_ast::ModuleSpecifier; +use deno_ast::ParseDiagnostic; use deno_ast::ParsedSource; use deno_config::workspace::WorkspaceDirectory; use deno_graph::CapturingModuleAnalyzer; +use deno_graph::EsParser; +use deno_graph::JsModule; use deno_graph::Module; +use deno_graph::ParseOptions; use deno_graph::ParsedSourceStore; use deno_resolver::factory::WorkspaceFactorySys; use deno_resolver::graph::DenoGraphResolver; @@ -190,17 +194,22 @@ impl ModuleGraph { }) } - pub fn get_parsed_source(&self, specifier: &ModuleSpecifier) -> ParsedSource { - let specifier = self.graph.resolve(specifier); - self + pub fn get_parsed_source( + &self, + js_module: &JsModule, + ) -> Result { + match self .capturing_analyzer - .get_parsed_source(specifier) - .unwrap_or_else(|| { - panic!( - "dnt bug - Did not find parsed source for specifier: {}", - specifier - ); - }) + .get_parsed_source(&js_module.specifier) + { + Some(parsed_source) => Ok(parsed_source), + None => self.capturing_analyzer.parse_program(ParseOptions { + specifier: &js_module.specifier, + source: js_module.source.clone(), + media_type: js_module.media_type, + scope_analysis: false, + }), + } } pub fn resolve_dependency( diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 15f9307..fa55ac8 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -251,7 +251,7 @@ pub struct TransformOptions { /// Version of ECMAScript that the final code will target. /// This controls whether certain polyfills should occur. pub target: ScriptTarget, - /// Optional import map. + pub config_file: Option, pub import_map: Option, pub cwd: PathBuf, } @@ -315,11 +315,14 @@ pub async fn transform( deno_path_util::url_to_file_path(&deno_path_util::url_parent(e)).ok() }) .collect::>(); - let maybe_import_map = match options.import_map.as_ref() { - Some(import_map) => deno_path_util::url_to_file_path(import_map).ok(), - None => None, + let maybe_config_path = match &options.config_file { + Some(config_file) => Some(deno_path_util::url_to_file_path(config_file)?), + None => options + .import_map + .as_ref() + .and_then(|import_map| deno_path_util::url_to_file_path(import_map).ok()), }; - let config_discovery = match maybe_import_map.as_ref() { + let config_discovery = match maybe_config_path.as_ref() { Some(config_path) => ConfigDiscoveryOption::Path(config_path.clone()), None => { if paths.is_empty() { @@ -367,7 +370,6 @@ pub async fn transform( package_json_dep_resolution: Some( deno_resolver::workspace::PackageJsonDepResolution::Enabled, ), - // todo: use options.import_map here specified_import_map: options.import_map.map(|url| { Box::new(ImportMapProvider { url, @@ -476,8 +478,8 @@ pub async fn transform( }; let file_text = match module { - Module::Js(_) => { - let parsed_source = module_graph.get_parsed_source(specifier); + Module::Js(module) => { + let parsed_source = module_graph.get_parsed_source(module)?; let text_changes = parsed_source .with_view(|program| -> Result> { let ignore_line_indexes = get_ignore_line_indexes( diff --git a/rs-lib/tests/integration/test_builder.rs b/rs-lib/tests/integration/test_builder.rs index 0a66a17..7528299 100644 --- a/rs-lib/tests/integration/test_builder.rs +++ b/rs-lib/tests/integration/test_builder.rs @@ -28,6 +28,7 @@ pub struct TestBuilder { shims: Vec, test_shims: Vec, target: ScriptTarget, + config_file: Option, import_map: Option, } @@ -42,6 +43,7 @@ impl TestBuilder { shims: Default::default(), test_shims: Default::default(), target: ScriptTarget::ES5, + config_file: None, import_map: None, } } @@ -79,6 +81,11 @@ impl TestBuilder { self } + pub fn set_config_file(&mut self, url: impl AsRef) -> &mut Self { + self.import_map = Some(ModuleSpecifier::parse(url.as_ref()).unwrap()); + self + } + pub fn set_import_map(&mut self, url: impl AsRef) -> &mut Self { self.import_map = Some(ModuleSpecifier::parse(url.as_ref()).unwrap()); self @@ -196,6 +203,7 @@ impl TestBuilder { loader: Some(Rc::new(self.loader.clone())), specifier_mappings: self.specifier_mappings.clone(), target: self.target, + config_file: self.config_file.clone(), import_map: self.import_map.clone(), cwd: self.loader.sys.env_current_dir().unwrap(), }, diff --git a/rs-lib/tests/integration_test.rs b/rs-lib/tests/integration_test.rs index 8832706..c357faa 100644 --- a/rs-lib/tests/integration_test.rs +++ b/rs-lib/tests/integration_test.rs @@ -1403,6 +1403,45 @@ async fn transform_import_map() { ); } +#[tokio::test] +async fn transform_config_file() { + let result = TestBuilder::new() + .with_loader(|loader| { + loader + .add_local_file( + "/mod.ts", + "import * as remote from 'localhost/mod.ts';", + ) + .add_local_file( + "/deno.json", + r#"{ + // test comments + "imports": { + "localhost/": "/subdir/" + } +}"#, + ) + .add_local_file( + "/subdir/mod.ts", + "import * as myOther from './other.ts';", + ) + .add_local_file("/subdir/other.ts", "export function test() {}"); + }) + .set_config_file("file:///deno.json") + .transform() + .await + .unwrap(); + + assert_files!( + result.main.files, + &[ + ("mod.ts", "import * as remote from './subdir/mod.js';",), + ("subdir/mod.ts", "import * as myOther from './other.js';",), + ("subdir/other.ts", "export function test() {}",) + ] + ); +} + #[tokio::test] async fn transform_multiple_entry_points() { let result = TestBuilder::new() diff --git a/tests/integration.test.ts b/tests/integration.test.ts index e6cedc9..d04704c 100644 --- a/tests/integration.test.ts +++ b/tests/integration.test.ts @@ -1132,6 +1132,61 @@ pnpm-lock.yaml }); }); +Deno.test("should build workspace project", async () => { + for (const configFile of [import.meta.resolve("./workspace_project/deno.json"), undefined]) { + await runTest("workspace_project", { + entryPoints: ["./add/mod.ts"], + outDir: "./npm", + typeCheck: "both", + shims: { + ...getAllShimOptions(false), + }, + configFile, + package: { + name: "add", + version: "1.0.0", + }, + compilerOptions: { + lib: ["ESNext", "DOM"], + importHelpers: true, + }, + }, (output) => { + output.assertNotExists("script/mod.js.map"); + output.assertNotExists("esm/mod.js.map"); + assertEquals(output.packageJson, { + name: "add", + version: "1.0.0", + main: "./script/mod.js", + module: "./esm/mod.js", + exports: { + ".": { + import: "./esm/mod.js", + require: "./script/mod.js", + }, + }, + scripts: { + test: "node test_runner.js", + }, + dependencies: { + tslib: versions.tsLib, + }, + devDependencies: { + picocolors: versions.picocolors, + }, + _generatedBy: "dnt@dev", + }); + assertEquals( + output.npmIgnore, + `/src/ +/test_runner.js +yarn.lock +pnpm-lock.yaml +`, + ); + }); + } +}); + export interface Output { packageJson: any; npmIgnore: string; @@ -1157,7 +1212,8 @@ async function runTest( | "test_project" | "tla_project" | "web_socket_project" - | "using_decl_project", + | "using_decl_project" + | "workspace_project", options: BuildOptions, checkOutput?: (output: Output) => Promise | void, ) { diff --git a/tests/workspace_project/add/deno.json b/tests/workspace_project/add/deno.json new file mode 100644 index 0000000..7c51c5c --- /dev/null +++ b/tests/workspace_project/add/deno.json @@ -0,0 +1,3 @@ +{ + "exports": "./mod.ts" +} diff --git a/tests/workspace_project/add/mod.ts b/tests/workspace_project/add/mod.ts new file mode 100644 index 0000000..1d8ff00 --- /dev/null +++ b/tests/workspace_project/add/mod.ts @@ -0,0 +1,7 @@ +import { assertEquals } from "@std/assert"; + +export function add(a: number, b: number) { + const value = a + b; + assertEquals(value, a + b); + return value; +} \ No newline at end of file diff --git a/tests/workspace_project/deno.json b/tests/workspace_project/deno.json new file mode 100644 index 0000000..a185254 --- /dev/null +++ b/tests/workspace_project/deno.json @@ -0,0 +1,6 @@ +{ + "workspace": ["./add"], + "imports": { + "@std/assert": "jsr:@std/assert@1.0.0" + } +} \ No newline at end of file diff --git a/transform.ts b/transform.ts index 34a5558..ac058fb 100644 --- a/transform.ts +++ b/transform.ts @@ -74,6 +74,7 @@ export interface TransformOptions { target: ScriptTarget; /// Path or url to the import map. importMap?: string; + configFile?: string; internalWasmUrl?: string; cwd: string; } diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index e1d5910..7a9db24 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -79,6 +79,7 @@ pub struct TransformOptions { pub mappings: HashMap, pub target: ScriptTarget, pub import_map: Option, + pub config_file: Option, pub cwd: ModuleSpecifier, } @@ -111,6 +112,7 @@ async fn transform_inner(options: JsValue) -> Result { specifier_mappings: options.mappings, target: options.target, import_map: options.import_map, + config_file: options.config_file, cwd: deno_path_util::url_to_file_path(&options.cwd)?, }, ) From e3cc19c1dfc07495628a9b1c88a3ed2747ca3564 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 7 May 2025 10:38:52 -0500 Subject: [PATCH 09/11] update to latest --- rs-lib/src/graph.rs | 21 +++------------------ rs-lib/src/lib.rs | 1 + 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/rs-lib/src/graph.rs b/rs-lib/src/graph.rs index e94fa02..9f9e7d1 100644 --- a/rs-lib/src/graph.rs +++ b/rs-lib/src/graph.rs @@ -26,26 +26,16 @@ use deno_graph::Module; use deno_graph::ParseOptions; use deno_graph::ParsedSourceStore; use deno_resolver::factory::WorkspaceFactorySys; -use deno_resolver::graph::DenoGraphResolver; +use deno_resolver::graph::DefaultDenoResolverRc; use deno_resolver::npm::DenoInNpmPackageChecker; -use deno_resolver::npm::NpmResolver; use deno_resolver::workspace::ScopedJsxImportSourceConfig; -use deno_resolver::DenoIsBuiltInNodeModuleChecker; -use deno_resolver::DenoResolver; use sys_traits::impls::RealSys; -pub type DntDenoResolver = DenoResolver< - DenoInNpmPackageChecker, - DenoIsBuiltInNodeModuleChecker, - NpmResolver, - TSys, ->; - pub struct ModuleGraphOptions<'a, TSys: WorkspaceFactorySys> { pub entry_points: Vec, pub test_entry_points: Vec, pub loader: Rc, - pub resolver: Rc>, + pub resolver: DefaultDenoResolverRc, pub specifier_mappings: &'a HashMap, pub cjs_tracker: Rc>, @@ -69,18 +59,13 @@ impl ModuleGraph { get_all_specifier_mappers(), options.specifier_mappings, ); - let graph_resolver = DenoGraphResolver::new( - resolver, - Default::default(), - Box::new(|_diagnostic, _referrer, _pos| {}), - ); let scoped_jsx_import_source_config = ScopedJsxImportSourceConfig::from_workspace_dir(&options.workspace_dir)?; let source_parser = ScopeAnalysisParser; let capturing_analyzer = CapturingModuleAnalyzer::new(Some(Box::new(source_parser)), None); let mut graph = deno_graph::ModuleGraph::new(deno_graph::GraphKind::All); - let graph_resolver = graph_resolver.as_graph_resolver( + let graph_resolver = resolver.as_graph_resolver( &options.cjs_tracker, &scoped_jsx_import_source_config, ); diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index fa55ac8..09f24e7 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -378,6 +378,7 @@ pub async fn transform( }), bare_node_builtins: true, unstable_sloppy_imports: true, + on_mapped_resolution_diagnostic: None, }, ); let deno_resolver = resolver_factory.deno_resolver().await?; From 4039035bea57f989970a9143b3613e89afc64bbe Mon Sep 17 00:00:00 2001 From: David Sherret Date: Thu, 8 May 2025 11:35:56 -0500 Subject: [PATCH 10/11] make build on ci --- Cargo.lock | 2 ++ Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 32dd931..d7f6d57 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -670,6 +670,7 @@ dependencies = [ [[package]] name = "deno_resolver" version = "0.35.0" +source = "git+https://github.com/denoland/deno?rev=59ffc1987c67f570e2081457c898efe51c872945#59ffc1987c67f570e2081457c898efe51c872945" dependencies = [ "anyhow", "async-once-cell", @@ -1556,6 +1557,7 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "node_resolver" version = "0.42.0" +source = "git+https://github.com/denoland/deno?rev=59ffc1987c67f570e2081457c898efe51c872945#59ffc1987c67f570e2081457c898efe51c872945" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index ab89d2e..05d4b1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,4 +22,4 @@ sys_traits = { version = "0.1.9", features = ["real"] } url = { version = "2.5.4", features =["serde"] } [patch.crates-io] -deno_resolver = { path = "../deno/resolvers/deno" } \ No newline at end of file +deno_resolver = { git = "https://github.com/denoland/deno", rev = "59ffc1987c67f570e2081457c898efe51c872945" } From 00e34723841b7eb1ba6d5fc50ae3bd83e2520632 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Thu, 8 May 2025 11:37:55 -0500 Subject: [PATCH 11/11] update --- README.md | 3 ++- tests/integration.test.ts | 7 ++++++- tests/workspace_project/add/mod.ts | 2 +- tests/workspace_project/deno.json | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a23a52b..14252e5 100644 --- a/README.md +++ b/README.md @@ -608,7 +608,8 @@ await build({ ### deno.json Support -Starting in dnt 0.42, the deno.json is auto-discovered. A config file can be explicitly specified by the `configFile` key: +Starting in dnt 0.42, the deno.json is auto-discovered. A config file can be +explicitly specified by the `configFile` key: ```ts await build({ diff --git a/tests/integration.test.ts b/tests/integration.test.ts index d04704c..e3e5bc8 100644 --- a/tests/integration.test.ts +++ b/tests/integration.test.ts @@ -1133,7 +1133,12 @@ pnpm-lock.yaml }); Deno.test("should build workspace project", async () => { - for (const configFile of [import.meta.resolve("./workspace_project/deno.json"), undefined]) { + for ( + const configFile of [ + import.meta.resolve("./workspace_project/deno.json"), + undefined, + ] + ) { await runTest("workspace_project", { entryPoints: ["./add/mod.ts"], outDir: "./npm", diff --git a/tests/workspace_project/add/mod.ts b/tests/workspace_project/add/mod.ts index 1d8ff00..a8f01ee 100644 --- a/tests/workspace_project/add/mod.ts +++ b/tests/workspace_project/add/mod.ts @@ -4,4 +4,4 @@ export function add(a: number, b: number) { const value = a + b; assertEquals(value, a + b); return value; -} \ No newline at end of file +} diff --git a/tests/workspace_project/deno.json b/tests/workspace_project/deno.json index a185254..59b5a32 100644 --- a/tests/workspace_project/deno.json +++ b/tests/workspace_project/deno.json @@ -3,4 +3,4 @@ "imports": { "@std/assert": "jsr:@std/assert@1.0.0" } -} \ No newline at end of file +}