Skip to main content

rspack_core/utils/
runtime.rs

1use rspack_util::fx_hash::FxIndexMap;
2use rustc_hash::FxHashSet as HashSet;
3
4use crate::{EntryData, EntryOptions, RuntimeSpec};
5
6pub fn get_entry_runtime(
7  name: &str,
8  options: &EntryOptions,
9  entries: &FxIndexMap<String, EntryData>,
10) -> RuntimeSpec {
11  if let Some(depend_on) = &options.depend_on {
12    let mut result: RuntimeSpec = Default::default();
13    let mut queue = vec![];
14    queue.extend(depend_on.clone());
15
16    let mut visited = HashSet::<String>::default();
17
18    while let Some(name) = queue.pop() {
19      if visited.contains(&name) {
20        continue;
21      }
22      visited.insert(name.clone());
23      let Some(EntryData { options, .. }) = entries.get(&name) else {
24        continue;
25      };
26
27      if let Some(depend_on) = &options.depend_on {
28        for depend in depend_on {
29          queue.push(depend.clone());
30        }
31      } else {
32        result.extend(&RuntimeSpec::from_entry(&name, options.runtime.as_ref()));
33      }
34    }
35    result
36  } else {
37    RuntimeSpec::from_entry(name, options.runtime.as_ref())
38  }
39}