diff --git a/Cargo.lock b/Cargo.lock index 22098f255636..5d1d4327ee3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4949,14 +4949,14 @@ dependencies = [ [[package]] name = "rspack_sources" version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede63b6f16d4421a0b06e89d3b01839d8d27f11c0dd4a4c7e7c93b1ad5a66770" +source = "git+https://github.com/SyMind/rspack-sources.git?rev=1cbefbd08acf0225a9eae9bb4e01084b6886f650#1cbefbd08acf0225a9eae9bb4e01084b6886f650" dependencies = [ "dashmap 6.1.0", "dyn-clone", "itertools 0.13.0", "memchr", "rustc-hash", + "self_cell", "serde", "serde_json", "simd-json", @@ -5174,6 +5174,12 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "self_cell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" + [[package]] name = "semver" version = "1.0.24" diff --git a/Cargo.toml b/Cargo.toml index 4e69ef1baff0..af06635aeec8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,7 +83,7 @@ regex-syntax = { version = "0.8.5", default-features = false, features = regress = { version = "0.10.4", default-features = false, features = ["pattern"] } ropey = { version = "1.6.1", default-features = false } rspack_resolver = { features = ["package_json_raw_json_api", "yarn_pnp"], version = "0.6.3", default-features = false } -rspack_sources = { version = "=0.4.11", default-features = false } +rspack_sources = { git = "https://github.com/SyMind/rspack-sources.git", rev = "1cbefbd08acf0225a9eae9bb4e01084b6886f650", default-features = false } rustc-hash = { version = "2.1.0", default-features = false } ryu-js = { version = "1.0.2", default-features = false } scopeguard = { version = "1.2.0", default-features = false } diff --git a/crates/rspack_binding_api/src/source.rs b/crates/rspack_binding_api/src/source.rs index 55a4f2ef4d9a..360216b9fe6f 100644 --- a/crates/rspack_binding_api/src/source.rs +++ b/crates/rspack_binding_api/src/source.rs @@ -26,7 +26,7 @@ impl<'s> From> for BoxSource { match value.source { Either::A(string) => { if let Some(map) = value.map { - match SourceMap::from_slice(map.as_ref()).ok() { + match SourceMap::from_json(map).ok() { Some(source_map) => SourceMapSource::new(WithoutOriginalOptions { value: string, name: "inmemory://from js", @@ -55,7 +55,7 @@ impl From for BoxSource { match value.source { Either::A(string) => { if let Some(map) = value.map { - match SourceMap::from_slice(map.as_ref()).ok() { + match SourceMap::from_json(map).ok() { Some(source_map) => SourceMapSource::new(WithoutOriginalOptions { value: string, name: "inmemory://from js", diff --git a/crates/rspack_binding_api/src/swc.rs b/crates/rspack_binding_api/src/swc.rs index 6f2b0d8d4e58..96dbccc65cd9 100644 --- a/crates/rspack_binding_api/src/swc.rs +++ b/crates/rspack_binding_api/src/swc.rs @@ -17,9 +17,10 @@ impl From for TransformOutput { fn from(value: CompilerTransformOutput) -> Self { Self { code: value.code, - map: value - .map - .map(|v| serde_json::to_string(&v).expect("failed to serialize transformOutput.map")), + map: value.map.map(|v| { + v.to_json() + .expect("failed to serialize transformOutput.map") + }), diagnostics: value.diagnostics, } } diff --git a/crates/rspack_cacheable/src/with/as_preset/rspack_sources/mod.rs b/crates/rspack_cacheable/src/with/as_preset/rspack_sources/mod.rs index 2b633cbd5401..1ce51b52ff4d 100644 --- a/crates/rspack_cacheable/src/with/as_preset/rspack_sources/mod.rs +++ b/crates/rspack_cacheable/src/with/as_preset/rspack_sources/mod.rs @@ -70,7 +70,7 @@ where deserializer: &mut D, ) -> Result { let CacheableSource { buffer, map } = field.deserialize(deserializer)?; - if let Some(map) = &map + if let Some(map) = map && let Ok(source_map) = SourceMap::from_json(map) { return Ok( diff --git a/crates/rspack_core/src/utils/extract_source_map.rs b/crates/rspack_core/src/utils/extract_source_map.rs index 9ca78728def9..f04bcfea2e98 100644 --- a/crates/rspack_core/src/utils/extract_source_map.rs +++ b/crates/rspack_core/src/utils/extract_source_map.rs @@ -302,7 +302,10 @@ pub async fn extract_source_map( }; // Get sources from SourceMap and take ownership - let sources = source_map.sources().to_vec(); + let sources = source_map + .sources() + .map(|s| s.to_string()) + .collect::>(); let source_root = source_map.source_root().map(|s| s.to_string()); // Pre-collect all source content to avoid borrowing issues diff --git a/crates/rspack_loader_swc/src/lib.rs b/crates/rspack_loader_swc/src/lib.rs index ae5af09f5838..295b1b00dc05 100644 --- a/crates/rspack_loader_swc/src/lib.rs +++ b/crates/rspack_loader_swc/src/lib.rs @@ -159,7 +159,6 @@ impl SwcLoader { map.set_sources( map .sources() - .iter() .map(|source| { let source_path = Path::new(source); if source_path.is_relative() { diff --git a/crates/rspack_plugin_devtool/src/eval_source_map_dev_tool_plugin.rs b/crates/rspack_plugin_devtool/src/eval_source_map_dev_tool_plugin.rs index fa1bea17966b..2790eaced7a7 100644 --- a/crates/rspack_plugin_devtool/src/eval_source_map_dev_tool_plugin.rs +++ b/crates/rspack_plugin_devtool/src/eval_source_map_dev_tool_plugin.rs @@ -109,7 +109,7 @@ async fn eval_source_map_devtool_plugin_render_module_content( let source = &origin_source.source(); { - let modules = map.sources().iter().map(|source| { + let modules = map.sources().map(|source| { if let Some(stripped) = source.strip_prefix("webpack://") { let source = make_paths_absolute(compilation.options.context.as_str(), stripped); let identifier = ModuleIdentifier::from(source.as_str()); diff --git a/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs b/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs index 61fbe1651603..e02fab6a3ae9 100644 --- a/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs +++ b/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs @@ -226,13 +226,7 @@ impl SourceMapDevToolPlugin { let source_map_modules = mapped_sources .par_iter() .filter_map(|(file, _asset, source_map)| source_map.as_ref().map(|s| (file, s))) - .flat_map(|(file, source_map)| { - source_map - .sources() - .iter() - .map(|i| (file, i)) - .collect::>() - }) + .flat_map(|(file, source_map)| source_map.sources().map(|i| (file, i)).collect::>()) .map(|(file, source)| { let module_or_source = if let Some(stripped) = source.strip_prefix("webpack://") { let source = make_paths_absolute(compilation.options.context.as_str(), stripped); @@ -415,7 +409,6 @@ impl SourceMapDevToolPlugin { source_map.set_sources( source_map .sources() - .iter() .map(|source| { let module_or_source = source_map_modules .get(source) diff --git a/crates/rspack_plugin_rsdoctor/src/module_graph.rs b/crates/rspack_plugin_rsdoctor/src/module_graph.rs index 9ac2d85cc9cb..1f5ac5c40ab7 100644 --- a/crates/rspack_plugin_rsdoctor/src/module_graph.rs +++ b/crates/rspack_plugin_rsdoctor/src/module_graph.rs @@ -141,8 +141,8 @@ pub fn collect_module_original_sources( .source() .and_then(|s| s.map(&MapOptions::default())) .and_then(|s| { - let idx = s.sources().iter().position(|s| s.eq(&resource))?; - let source = s.sources_content().get(idx)?; + let idx = s.sources().position(|s| s.eq(&resource))?; + let source = s.get_source_content(idx)?; Some(RsdoctorModuleOriginalSource { module: *module_ukey, source: source.to_string(),