rspack_core/utils/
runtime.rs1use 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}