use tracing::instrument;
use crate::{Compilation, incremental::IncrementalPasses};
pub(crate) mod code_splitter;
pub(crate) mod incremental;
pub(crate) mod pass;
#[instrument("Compilation:build_chunk_graph", skip_all)]
pub fn build_chunk_graph(compilation: &mut Compilation) -> rspack_error::Result<()> {
let enable_incremental = compilation
.incremental
.mutations_readable(IncrementalPasses::BUILD_CHUNK_GRAPH);
let mut splitter = if enable_incremental {
std::mem::take(
&mut compilation
.build_chunk_graph_artifact
.code_splitting_cache
.code_splitter,
)
} else {
Default::default()
};
let all_modules = compilation
.get_module_graph()
.modules()
.keys()
.copied()
.collect::<Vec<_>>();
splitter.prepare(&all_modules, compilation)?;
splitter.update_with_compilation(compilation)?;
if !enable_incremental || splitter.chunk_group_infos.is_empty() {
let inputs = splitter.prepare_input_entrypoints_and_modules(&all_modules, compilation)?;
splitter.prepare_entries(inputs, compilation)?;
}
splitter.split(compilation)?;
splitter.remove_orphan(compilation)?;
for module_identifier in all_modules {
compilation.chunk_graph.add_module(module_identifier)
}
compilation
.build_chunk_graph_artifact
.code_splitting_cache
.code_splitter = splitter;
Ok(())
}