diff --git a/crates/rspack_core/src/artifacts/async_modules_artifact.rs b/crates/rspack_core/src/artifacts/async_modules_artifact.rs new file mode 100644 index 000000000000..de7c389c845c --- /dev/null +++ b/crates/rspack_core/src/artifacts/async_modules_artifact.rs @@ -0,0 +1,47 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::IdentifierSet; + +#[derive(Debug, Default, Clone)] +pub struct AsyncModulesArtifact(IdentifierSet); + +impl Deref for AsyncModulesArtifact { + type Target = IdentifierSet; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for AsyncModulesArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From for AsyncModulesArtifact { + fn from(value: IdentifierSet) -> Self { + Self(value) + } +} + +impl From for IdentifierSet { + fn from(value: AsyncModulesArtifact) -> Self { + value.0 + } +} + +impl FromIterator<::Item> for AsyncModulesArtifact { + fn from_iter::Item>>(iter: T) -> Self { + Self(IdentifierSet::from_iter(iter)) + } +} + +impl IntoIterator for AsyncModulesArtifact { + type Item = ::Item; + type IntoIter = ::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/artifacts/cgc_runtime_requirements_artifact.rs b/crates/rspack_core/src/artifacts/cgc_runtime_requirements_artifact.rs new file mode 100644 index 000000000000..97736e8d5332 --- /dev/null +++ b/crates/rspack_core/src/artifacts/cgc_runtime_requirements_artifact.rs @@ -0,0 +1,55 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::UkeyMap; + +use crate::{ChunkUkey, RuntimeGlobals}; + +#[derive(Debug, Default, Clone)] +pub struct CgcRuntimeRequirementsArtifact(UkeyMap); + +impl Deref for CgcRuntimeRequirementsArtifact { + type Target = UkeyMap; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for CgcRuntimeRequirementsArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From> for CgcRuntimeRequirementsArtifact { + fn from(value: UkeyMap) -> Self { + Self(value) + } +} + +impl From for UkeyMap { + fn from(value: CgcRuntimeRequirementsArtifact) -> Self { + value.0 + } +} + +impl FromIterator< as IntoIterator>::Item> + for CgcRuntimeRequirementsArtifact +{ + fn from_iter< + T: IntoIterator as IntoIterator>::Item>, + >( + iter: T, + ) -> Self { + Self(UkeyMap::from_iter(iter)) + } +} + +impl IntoIterator for CgcRuntimeRequirementsArtifact { + type Item = as IntoIterator>::Item; + type IntoIter = as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/artifacts/chunk_render_artifact.rs b/crates/rspack_core/src/artifacts/chunk_render_artifact.rs new file mode 100644 index 000000000000..31e98c9cdf94 --- /dev/null +++ b/crates/rspack_core/src/artifacts/chunk_render_artifact.rs @@ -0,0 +1,55 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::UkeyMap; + +use crate::{ChunkRenderResult, ChunkUkey}; + +#[derive(Debug, Default, Clone)] +pub struct ChunkRenderArtifact(UkeyMap); + +impl Deref for ChunkRenderArtifact { + type Target = UkeyMap; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for ChunkRenderArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From> for ChunkRenderArtifact { + fn from(value: UkeyMap) -> Self { + Self(value) + } +} + +impl From for UkeyMap { + fn from(value: ChunkRenderArtifact) -> Self { + value.0 + } +} + +impl FromIterator< as IntoIterator>::Item> + for ChunkRenderArtifact +{ + fn from_iter< + T: IntoIterator as IntoIterator>::Item>, + >( + iter: T, + ) -> Self { + Self(UkeyMap::from_iter(iter)) + } +} + +impl IntoIterator for ChunkRenderArtifact { + type Item = as IntoIterator>::Item; + type IntoIter = as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/artifacts/dependencies_diagnostics_artifact.rs b/crates/rspack_core/src/artifacts/dependencies_diagnostics_artifact.rs new file mode 100644 index 000000000000..92889c2960c0 --- /dev/null +++ b/crates/rspack_core/src/artifacts/dependencies_diagnostics_artifact.rs @@ -0,0 +1,58 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::IdentifierMap; +use rspack_error::Diagnostic; + +#[derive(Debug, Default, Clone)] +pub struct DependenciesDiagnosticsArtifact(IdentifierMap>); + +impl DependenciesDiagnosticsArtifact { + pub fn into_values(self) -> impl Iterator> { + self.0.into_values() + } +} + +impl Deref for DependenciesDiagnosticsArtifact { + type Target = IdentifierMap>; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for DependenciesDiagnosticsArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From>> for DependenciesDiagnosticsArtifact { + fn from(value: IdentifierMap>) -> Self { + Self(value) + } +} + +impl From for IdentifierMap> { + fn from(value: DependenciesDiagnosticsArtifact) -> Self { + value.0 + } +} + +impl FromIterator<> as IntoIterator>::Item> + for DependenciesDiagnosticsArtifact +{ + fn from_iter> as IntoIterator>::Item>>( + iter: T, + ) -> Self { + Self(IdentifierMap::from_iter(iter)) + } +} + +impl IntoIterator for DependenciesDiagnosticsArtifact { + type Item = > as IntoIterator>::Item; + type IntoIter = > as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/artifacts/imported_by_defer_modules_artifact.rs b/crates/rspack_core/src/artifacts/imported_by_defer_modules_artifact.rs new file mode 100644 index 000000000000..48c168a25eee --- /dev/null +++ b/crates/rspack_core/src/artifacts/imported_by_defer_modules_artifact.rs @@ -0,0 +1,47 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::IdentifierSet; + +#[derive(Debug, Default, Clone)] +pub struct ImportedByDeferModulesArtifact(IdentifierSet); + +impl Deref for ImportedByDeferModulesArtifact { + type Target = IdentifierSet; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for ImportedByDeferModulesArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From for ImportedByDeferModulesArtifact { + fn from(value: IdentifierSet) -> Self { + Self(value) + } +} + +impl From for IdentifierSet { + fn from(value: ImportedByDeferModulesArtifact) -> Self { + value.0 + } +} + +impl FromIterator<::Item> for ImportedByDeferModulesArtifact { + fn from_iter::Item>>(iter: T) -> Self { + Self(IdentifierSet::from_iter(iter)) + } +} + +impl IntoIterator for ImportedByDeferModulesArtifact { + type Item = ::Item; + type IntoIter = ::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/artifacts/mod.rs b/crates/rspack_core/src/artifacts/mod.rs index bdc364889edf..211fef3e38c6 100644 --- a/crates/rspack_core/src/artifacts/mod.rs +++ b/crates/rspack_core/src/artifacts/mod.rs @@ -1,31 +1,31 @@ -use rspack_collections::{IdentifierMap, IdentifierSet, UkeyMap}; -use rspack_error::Diagnostic; - -use crate::{ChunkRenderResult, ChunkUkey, ModuleId, RuntimeGlobals}; - +mod async_modules_artifact; +mod cgc_runtime_requirements_artifact; mod cgm_hash_artifact; mod cgm_runtime_requirement_artifact; mod chunk_hashes_artifact; mod chunk_ids_artifact; +mod chunk_render_artifact; mod chunk_render_cache_artifact; mod code_generation_results; +mod dependencies_diagnostics_artifact; +mod imported_by_defer_modules_artifact; mod module_graph_cache_artifact; +mod module_ids_artifact; mod module_static_cache_artifact; mod side_effects_do_optimize_artifact; +pub use async_modules_artifact::AsyncModulesArtifact; +pub use cgc_runtime_requirements_artifact::CgcRuntimeRequirementsArtifact; pub use cgm_hash_artifact::*; pub use cgm_runtime_requirement_artifact::*; pub use chunk_hashes_artifact::*; pub use chunk_ids_artifact::*; +pub use chunk_render_artifact::ChunkRenderArtifact; pub use chunk_render_cache_artifact::ChunkRenderCacheArtifact; pub use code_generation_results::*; +pub use dependencies_diagnostics_artifact::DependenciesDiagnosticsArtifact; +pub use imported_by_defer_modules_artifact::ImportedByDeferModulesArtifact; pub use module_graph_cache_artifact::*; +pub use module_ids_artifact::ModuleIdsArtifact; pub use module_static_cache_artifact::*; pub use side_effects_do_optimize_artifact::*; - -pub type AsyncModulesArtifact = IdentifierSet; -pub type ImportedByDeferModulesArtifact = IdentifierSet; -pub type DependenciesDiagnosticsArtifact = IdentifierMap>; -pub type ModuleIdsArtifact = IdentifierMap; -pub type CgcRuntimeRequirementsArtifact = UkeyMap; -pub type ChunkRenderArtifact = UkeyMap; diff --git a/crates/rspack_core/src/artifacts/module_ids_artifact.rs b/crates/rspack_core/src/artifacts/module_ids_artifact.rs new file mode 100644 index 000000000000..22ed6e161c7c --- /dev/null +++ b/crates/rspack_core/src/artifacts/module_ids_artifact.rs @@ -0,0 +1,51 @@ +use std::ops::{Deref, DerefMut}; + +use rspack_collections::IdentifierMap; + +use crate::ModuleId; + +#[derive(Debug, Default, Clone)] +pub struct ModuleIdsArtifact(IdentifierMap); + +impl Deref for ModuleIdsArtifact { + type Target = IdentifierMap; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for ModuleIdsArtifact { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl From> for ModuleIdsArtifact { + fn from(value: IdentifierMap) -> Self { + Self(value) + } +} + +impl From for IdentifierMap { + fn from(value: ModuleIdsArtifact) -> Self { + value.0 + } +} + +impl FromIterator< as IntoIterator>::Item> for ModuleIdsArtifact { + fn from_iter as IntoIterator>::Item>>( + iter: T, + ) -> Self { + Self(IdentifierMap::from_iter(iter)) + } +} + +impl IntoIterator for ModuleIdsArtifact { + type Item = as IntoIterator>::Item; + type IntoIter = as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} diff --git a/crates/rspack_core/src/compilation/create_chunk_assets/mod.rs b/crates/rspack_core/src/compilation/create_chunk_assets/mod.rs index d26ec44ff4b4..69a7fe2074c6 100644 --- a/crates/rspack_core/src/compilation/create_chunk_assets/mod.rs +++ b/crates/rspack_core/src/compilation/create_chunk_assets/mod.rs @@ -100,7 +100,7 @@ impl Compilation { }) .await; - let mut chunk_render_results: UkeyMap = Default::default(); + let mut chunk_render_results = ChunkRenderArtifact::default(); for result in results { let item = result.to_rspack_result()?; let (key, value) = item?; diff --git a/crates/rspack_core/src/compilation/finish_modules/mod.rs b/crates/rspack_core/src/compilation/finish_modules/mod.rs index ce70e2d0d57f..7d972011f6e5 100644 --- a/crates/rspack_core/src/compilation/finish_modules/mod.rs +++ b/crates/rspack_core/src/compilation/finish_modules/mod.rs @@ -161,7 +161,8 @@ impl Compilation { .collect::>(); (*module_identifier, diagnostics) }) - .collect(); + .collect::>>() + .into(); let all_modules_diagnostics = if has_mutations { dependencies_diagnostics_artifact.extend(dependencies_diagnostics); dependencies_diagnostics_artifact.clone()