rspack_core 0.7.11

rspack core
Documentation
use super::*;
use crate::logger::Logger;

fn get_modules_needing_ids(
  compilation: &Compilation,
  module_ids_artifact: &ModuleIdsArtifact,
) -> IdentifierSet {
  let chunk_graph = &compilation.chunk_graph;
  compilation
    .get_module_graph()
    .modules()
    .values()
    .filter(|m| {
      m.need_id()
        && ChunkGraph::get_module_id(module_ids_artifact, m.identifier()).is_none()
        && chunk_graph.get_number_of_module_chunks(m.identifier()) != 0
    })
    .map(|m| m.identifier())
    .collect()
}

pub async fn module_ids_pass(
  compilation: &mut Compilation,
  plugin_driver: SharedPluginDriver,
) -> Result<()> {
  let logger = compilation.get_logger("rspack.Compilation");
  let start = logger.time("module ids");

  if !compilation
    .incremental
    .passes_enabled(IncrementalPasses::MODULE_IDS)
  {
    compilation.module_ids_artifact.clear();
  }

  let mut module_ids_artifact = mem::take(&mut compilation.module_ids_artifact);

  let modules_needing_ids = get_modules_needing_ids(compilation, &module_ids_artifact);
  plugin_driver
    .compilation_hooks
    .before_module_ids
    .call(compilation, &modules_needing_ids, &mut module_ids_artifact)
    .await
    .map_err(|e| e.wrap_err("caused by plugins in Compilation.hooks.beforeModuleIds"))?;

  compilation.module_ids_artifact = module_ids_artifact;

  let mut diagnostics = vec![];
  let mut module_ids_artifact = mem::take(&mut compilation.module_ids_artifact);
  plugin_driver
    .compilation_hooks
    .module_ids
    .call(compilation, &mut module_ids_artifact, &mut diagnostics)
    .await
    .map_err(|e| e.wrap_err("caused by plugins in Compilation.hooks.moduleIds"))?;
  compilation.module_ids_artifact = module_ids_artifact;
  compilation.extend_diagnostics(diagnostics);
  logger.time_end(start);
  Ok(())
}