swc_ecma_preset_env/corejs3/
data.rs

1use preset_env_base::version::Version;
2
3use crate::util::SwcFold;
4
5pub static POSSIBLE_GLOBAL_OBJECTS: &[&str] = &["global", "globalThis", "self", "window"];
6
7include!(concat!(env!("OUT_DIR"), "/corejs3_data/lib.rs"));
8
9pub fn modules_by_version(query: &str) -> Option<Version> {
10    let idx = DATA_INDEX.get(query)?;
11    Some(VERSIONS[idx as usize])
12}
13
14pub fn esnext_fallback(module: &str) -> Option<&'static str> {
15    let base_name = module.strip_prefix("es.")?;
16    let esnext_name = format!("esnext.{base_name}");
17
18    let esnext_id = ESNEXT_FALLBACK_SET.get(esnext_name.as_str())?;
19    let esnext_module = crate::util::PooledStr(esnext_id).as_str();
20
21    if esnext_module == esnext_name {
22        Some(esnext_module)
23    } else {
24        None
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn test_esnext_fallback() {
34        let result = esnext_fallback("es.object.group-by");
35        assert_eq!(result, Some("esnext.object.group-by"));
36
37        let result = esnext_fallback("es.nonexistent.module");
38        assert_eq!(result, None);
39
40        let result = esnext_fallback("esnext.object.group-by");
41        assert_eq!(result, None);
42    }
43}