mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
feat(transformer): add es target to engineTargets (#7193)
This commit is contained in:
parent
c82b273154
commit
3a20b906f4
7 changed files with 123 additions and 75 deletions
|
|
@ -37,6 +37,8 @@ pub enum Engine {
|
|||
OperaMobile,
|
||||
// TODO:
|
||||
Android,
|
||||
// Special Value for ESXXXX target.
|
||||
Es,
|
||||
}
|
||||
|
||||
impl FromStr for Engine {
|
||||
|
|
@ -105,6 +107,9 @@ impl EngineTargets {
|
|||
pub fn should_enable(&self, engine_targets: &EngineTargets) -> bool {
|
||||
for (engine, version) in &engine_targets.0 {
|
||||
if let Some(v) = self.0.get(engine) {
|
||||
if *engine == Engine::Es && v <= version {
|
||||
return true;
|
||||
}
|
||||
if v < version {
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use crate::{
|
|||
EngineTargets,
|
||||
};
|
||||
|
||||
use super::{babel::BabelEnvOptions, ESFeature, ESTarget};
|
||||
use super::{babel::BabelEnvOptions, ESFeature};
|
||||
|
||||
#[derive(Debug, Default, Clone, Deserialize)]
|
||||
#[serde(try_from = "BabelEnvOptions")]
|
||||
|
|
@ -100,67 +100,21 @@ impl EnvOptions {
|
|||
///
|
||||
/// [browserslist]: <https://github.com/browserslist/browserslist>
|
||||
pub fn from_browserslist_query(query: &str) -> Result<Self, Error> {
|
||||
Self::try_from(BabelEnvOptions {
|
||||
targets: EngineTargets::try_from_query(query)?,
|
||||
..BabelEnvOptions::default()
|
||||
})
|
||||
.map_err(|err| Error::msg(err))
|
||||
EngineTargets::try_from_query(query).map(Self::from)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ESTarget> for EnvOptions {
|
||||
fn from(target: ESTarget) -> Self {
|
||||
Self {
|
||||
regexp: RegExpOptions {
|
||||
sticky_flag: target < ESTarget::ES2015,
|
||||
unicode_flag: target < ESTarget::ES2015,
|
||||
unicode_property_escapes: target < ESTarget::ES2018,
|
||||
dot_all_flag: target < ESTarget::ES2015,
|
||||
named_capture_groups: target < ESTarget::ES2018,
|
||||
look_behind_assertions: target < ESTarget::ES2018,
|
||||
match_indices: target < ESTarget::ES2022,
|
||||
set_notation: target < ESTarget::ES2024,
|
||||
},
|
||||
es2015: ES2015Options {
|
||||
arrow_function: (target < ESTarget::ES2015).then(ArrowFunctionsOptions::default),
|
||||
},
|
||||
es2016: ES2016Options { exponentiation_operator: target < ESTarget::ES2016 },
|
||||
es2017: ES2017Options { async_to_generator: target < ESTarget::ES2017 },
|
||||
es2018: ES2018Options {
|
||||
object_rest_spread: (target < ESTarget::ES2018)
|
||||
.then(ObjectRestSpreadOptions::default),
|
||||
async_generator_functions: target < ESTarget::ES2018,
|
||||
},
|
||||
es2019: ES2019Options { optional_catch_binding: target < ESTarget::ES2019 },
|
||||
es2020: ES2020Options {
|
||||
nullish_coalescing_operator: target < ESTarget::ES2020,
|
||||
big_int: target < ESTarget::ES2020,
|
||||
},
|
||||
es2021: ES2021Options { logical_assignment_operators: target < ESTarget::ES2021 },
|
||||
es2022: ES2022Options {
|
||||
class_static_block: target < ESTarget::ES2022,
|
||||
class_properties: (target < ESTarget::ES2022).then(ClassPropertiesOptions::default),
|
||||
},
|
||||
}
|
||||
impl From<BabelEnvOptions> for EnvOptions {
|
||||
fn from(o: BabelEnvOptions) -> Self {
|
||||
Self::from(o.targets)
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<BabelEnvOptions> for EnvOptions {
|
||||
type Error = String;
|
||||
|
||||
fn try_from(o: BabelEnvOptions) -> Result<Self, Self::Error> {
|
||||
Self::try_from(o.targets)
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<EngineTargets> for EnvOptions {
|
||||
type Error = String;
|
||||
|
||||
impl From<EngineTargets> for EnvOptions {
|
||||
#[allow(clippy::enum_glob_use)]
|
||||
/// If there are any errors in the `options.targets``, they will be returned as a list of errors.
|
||||
fn try_from(o: EngineTargets) -> Result<Self, Self::Error> {
|
||||
fn from(o: EngineTargets) -> Self {
|
||||
use ESFeature::*;
|
||||
Ok(Self {
|
||||
Self {
|
||||
regexp: RegExpOptions {
|
||||
sticky_flag: o.has_feature(ES2015StickyRegex),
|
||||
unicode_flag: o.has_feature(ES2015UnicodeRegex),
|
||||
|
|
@ -196,6 +150,6 @@ impl TryFrom<EngineTargets> for EnvOptions {
|
|||
class_static_block: o.has_feature(ES2022ClassStaticBlock),
|
||||
class_properties: o.has_feature(ES2022ClassProperties).then(Default::default),
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Auto generated by `tasks/compat_data/src/lib.rs`.
|
||||
#![allow(clippy::enum_glob_use)]
|
||||
#![allow(clippy::enum_glob_use, clippy::match_same_arms)]
|
||||
use super::{Engine, EngineTargets};
|
||||
use browserslist::Version;
|
||||
use rustc_hash::FxHashMap;
|
||||
|
|
@ -77,6 +77,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(10u32, 50u32, 0u32)),
|
||||
(Ios, Version(6u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(5u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -96,6 +97,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(12u32, 0u32, 0u32)),
|
||||
(Ios, Version(6u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(5u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -115,6 +117,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(12u32, 0u32, 0u32)),
|
||||
(Ios, Version(6u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(5u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -131,6 +134,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(36u32, 0u32, 0u32)),
|
||||
(Ios, Version(16u32, 3u32, 0u32)),
|
||||
(Edge, Version(18u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -147,6 +151,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(37u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -163,6 +168,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(33u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(14u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -180,6 +186,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(25u32, 0u32, 0u32)),
|
||||
(Ios, Version(9u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -196,6 +203,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(37u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 0u32, 0u32)),
|
||||
(Edge, Version(14u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -212,6 +220,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(38u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(15u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -228,6 +237,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(33u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -244,6 +254,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(37u32, 0u32, 0u32)),
|
||||
(Ios, Version(12u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -261,6 +272,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(31u32, 0u32, 0u32)),
|
||||
(Ios, Version(9u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -278,6 +290,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(36u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -294,6 +307,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(38u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(15u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -310,6 +324,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(31u32, 0u32, 0u32)),
|
||||
(Ios, Version(8u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -326,6 +341,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(29u32, 0u32, 0u32)),
|
||||
(Ios, Version(9u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -343,6 +359,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(30u32, 0u32, 0u32)),
|
||||
(Ios, Version(9u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -359,6 +376,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(33u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -375,6 +393,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(33u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -392,6 +411,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(28u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -409,6 +429,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(34u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -425,6 +446,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(38u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 0u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -442,6 +464,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(31u32, 0u32, 0u32)),
|
||||
(Ios, Version(9u32, 0u32, 0u32)),
|
||||
(Edge, Version(12u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -458,6 +481,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(28u32, 0u32, 0u32)),
|
||||
(Ios, Version(13u32, 0u32, 0u32)),
|
||||
(Edge, Version(13u32, 0u32, 0u32)),
|
||||
(Es, Version(2015u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -475,6 +499,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(39u32, 0u32, 0u32)),
|
||||
(Ios, Version(10u32, 3u32, 0u32)),
|
||||
(Edge, Version(14u32, 0u32, 0u32)),
|
||||
(Es, Version(2016u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -491,6 +516,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(42u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 0u32, 0u32)),
|
||||
(Edge, Version(15u32, 0u32, 0u32)),
|
||||
(Es, Version(2017u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -507,6 +533,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(51u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 3u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -523,6 +550,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(51u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 3u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -540,6 +568,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(49u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 3u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -556,6 +585,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(49u32, 0u32, 0u32)),
|
||||
(Ios, Version(16u32, 4u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -572,6 +602,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(47u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 3u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -588,6 +619,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(50u32, 0u32, 0u32)),
|
||||
(Ios, Version(12u32, 0u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -604,6 +636,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(53u32, 0u32, 0u32)),
|
||||
(Ios, Version(11u32, 3u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2018u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -621,6 +654,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(53u32, 0u32, 0u32)),
|
||||
(Ios, Version(12u32, 0u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2019u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -637,6 +671,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(77u32, 0u32, 0u32)),
|
||||
(Ios, Version(13u32, 4u32, 0u32)),
|
||||
(Edge, Version(91u32, 0u32, 0u32)),
|
||||
(Es, Version(2019u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -653,6 +688,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(67u32, 0u32, 0u32)),
|
||||
(Ios, Version(13u32, 4u32, 0u32)),
|
||||
(Edge, Version(80u32, 0u32, 0u32)),
|
||||
(Es, Version(2020u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -669,6 +705,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(71u32, 0u32, 0u32)),
|
||||
(Ios, Version(14u32, 0u32, 0u32)),
|
||||
(Edge, Version(85u32, 0u32, 0u32)),
|
||||
(Es, Version(2020u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -686,6 +723,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(54u32, 0u32, 0u32)),
|
||||
(Ios, Version(14u32, 0u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2020u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -703,6 +741,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(62u32, 0u32, 0u32)),
|
||||
(Ios, Version(13u32, 0u32, 0u32)),
|
||||
(Edge, Version(79u32, 0u32, 0u32)),
|
||||
(Es, Version(2021u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -719,6 +758,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(70u32, 0u32, 0u32)),
|
||||
(Ios, Version(15u32, 0u32, 0u32)),
|
||||
(Edge, Version(84u32, 0u32, 0u32)),
|
||||
(Es, Version(2022u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -735,6 +775,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(84u32, 0u32, 0u32)),
|
||||
(Ios, Version(16u32, 0u32, 0u32)),
|
||||
(Edge, Version(98u32, 0u32, 0u32)),
|
||||
(Es, Version(2022u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -751,6 +792,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(77u32, 0u32, 0u32)),
|
||||
(Ios, Version(15u32, 0u32, 0u32)),
|
||||
(Edge, Version(91u32, 0u32, 0u32)),
|
||||
(Es, Version(2022u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -767,6 +809,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(80u32, 0u32, 0u32)),
|
||||
(Ios, Version(16u32, 4u32, 0u32)),
|
||||
(Edge, Version(94u32, 0u32, 0u32)),
|
||||
(Es, Version(2022u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -783,6 +826,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(76u32, 0u32, 0u32)),
|
||||
(Ios, Version(15u32, 0u32, 0u32)),
|
||||
(Edge, Version(90u32, 0u32, 0u32)),
|
||||
(Es, Version(2022u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -798,6 +842,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(98u32, 0u32, 0u32)),
|
||||
(Ios, Version(17u32, 0u32, 0u32)),
|
||||
(Edge, Version(112u32, 0u32, 0u32)),
|
||||
(Es, Version(2024u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -809,6 +854,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(111u32, 0u32, 0u32)),
|
||||
(Node, Version(23u32, 0u32, 0u32)),
|
||||
(Firefox, Version(132u32, 0u32, 0u32)),
|
||||
(Es, Version(2025u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
(
|
||||
|
|
@ -822,6 +868,7 @@ pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
|||
(Opera, Version(112u32, 0u32, 0u32)),
|
||||
(Ios, Version(17u32, 4u32, 0u32)),
|
||||
(Edge, Version(126u32, 0u32, 0u32)),
|
||||
(Es, Version(2025u32, 0, 0)),
|
||||
])),
|
||||
),
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use std::{fmt, str::FromStr};
|
||||
|
||||
use browserslist::Version;
|
||||
use cow_utils::CowUtils;
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)]
|
||||
|
|
@ -15,6 +16,7 @@ pub enum ESTarget {
|
|||
ES2022,
|
||||
ES2023,
|
||||
ES2024,
|
||||
ES2025,
|
||||
#[default]
|
||||
ESNext,
|
||||
}
|
||||
|
|
@ -35,6 +37,7 @@ impl FromStr for ESTarget {
|
|||
"es2022" => Ok(Self::ES2022),
|
||||
"es2023" => Ok(Self::ES2023),
|
||||
"es2024" => Ok(Self::ES2024),
|
||||
"es2025" => Ok(Self::ES2025),
|
||||
"esnext" => Ok(Self::ESNext),
|
||||
_ => Err(format!("Invalid target \"{s}\".")),
|
||||
}
|
||||
|
|
@ -55,8 +58,29 @@ impl fmt::Display for ESTarget {
|
|||
Self::ES2022 => "es2022",
|
||||
Self::ES2023 => "es2023",
|
||||
Self::ES2024 => "es2024",
|
||||
Self::ES2025 => "es2025",
|
||||
Self::ESNext => "esnext",
|
||||
};
|
||||
write!(f, "{s}",)
|
||||
}
|
||||
}
|
||||
|
||||
impl ESTarget {
|
||||
pub fn version(&self) -> Version {
|
||||
match self {
|
||||
Self::ES5 => Version(5, 0, 0),
|
||||
Self::ES2015 => Version(2015, 0, 0),
|
||||
Self::ES2016 => Version(2016, 0, 0),
|
||||
Self::ES2017 => Version(2017, 0, 0),
|
||||
Self::ES2018 => Version(2018, 0, 0),
|
||||
Self::ES2019 => Version(2019, 0, 0),
|
||||
Self::ES2020 => Version(2020, 0, 0),
|
||||
Self::ES2021 => Version(2021, 0, 0),
|
||||
Self::ES2022 => Version(2022, 0, 0),
|
||||
Self::ES2023 => Version(2023, 0, 0),
|
||||
Self::ES2024 => Version(2024, 0, 0),
|
||||
Self::ES2025 => Version(2025, 0, 0),
|
||||
Self::ESNext => Version(9999, 0, 0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,7 +92,9 @@ impl TransformOptions {
|
|||
|
||||
impl From<ESTarget> for TransformOptions {
|
||||
fn from(target: ESTarget) -> Self {
|
||||
Self { env: EnvOptions::from(target), ..Self::default() }
|
||||
let mut engine_targets = EngineTargets::default();
|
||||
engine_targets.insert(Engine::Es, target.version());
|
||||
Self { env: EnvOptions::from(engine_targets), ..Self::default() }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,14 +5,13 @@ use oxc_transformer::{ESTarget, EnvOptions, TransformOptions};
|
|||
#[test]
|
||||
fn targets() {
|
||||
let cases = [
|
||||
// ("() => {}"),
|
||||
// ("a ** b"),
|
||||
// ("async function foo() {}"),
|
||||
// ("({ ...x })"),
|
||||
// ("try {} catch {}"),
|
||||
// ("a ?? b"),
|
||||
// ("a ||= b"),
|
||||
// ("class foo { static {} }"),
|
||||
("() => {}"),
|
||||
("a ** b"),
|
||||
("async function foo() {}"),
|
||||
("({ ...x })"),
|
||||
("try {} catch {}"),
|
||||
("a ?? b"),
|
||||
("a ||= b"),
|
||||
"1n ** 2n",
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::fs;
|
||||
use std::{fs, str::FromStr};
|
||||
|
||||
use oxc_tasks_common::project_root;
|
||||
use oxc_transformer::EngineTargets;
|
||||
|
|
@ -27,24 +27,31 @@ pub fn generate() {
|
|||
let content = fs::read_to_string(path).unwrap();
|
||||
let items = serde_json::from_str::<Vec<Item>>(&content).unwrap();
|
||||
|
||||
let es_features = items.iter().map(Item::es_name);
|
||||
let es_features = items.iter().map(Item::es_name).collect::<Vec<_>>();
|
||||
|
||||
// let es_targets = items.iter().map(|item| quote::format_ident!("{}", item.es));
|
||||
|
||||
let features = items.iter().map(|item| {
|
||||
let key = item.es_name();
|
||||
let targets = item.targets.iter().map(|(engine, version)| {
|
||||
let engine = quote::format_ident!("{engine:?}");
|
||||
let (a, b, c) = (version.0, version.1, version.2);
|
||||
quote! {
|
||||
(#engine, Version(#a, #b, #c))
|
||||
}
|
||||
});
|
||||
let es_version = u32::from_str(item.es.trim_start_matches("ES")).unwrap();
|
||||
let targets = item
|
||||
.targets
|
||||
.iter()
|
||||
.map(|(engine, version)| {
|
||||
let engine = quote::format_ident!("{engine:?}");
|
||||
let (a, b, c) = (version.0, version.1, version.2);
|
||||
quote! {
|
||||
(#engine, Version(#a, #b, #c))
|
||||
}
|
||||
})
|
||||
.chain([quote! { (Es, Version(#es_version, 0, 0)) }]);
|
||||
quote! {
|
||||
(#key, EngineTargets::new(FxHashMap::from_iter([#(#targets),*])))
|
||||
}
|
||||
});
|
||||
|
||||
let code = quote! {
|
||||
#![allow(clippy::enum_glob_use)]
|
||||
#![allow(clippy::enum_glob_use, clippy::match_same_arms)]
|
||||
|
||||
use browserslist::Version;
|
||||
use rustc_hash::FxHashMap;
|
||||
|
|
@ -57,6 +64,16 @@ pub fn generate() {
|
|||
#(#es_features,)*
|
||||
}
|
||||
|
||||
// use ESTarget::*;
|
||||
|
||||
// impl ESFeature {
|
||||
// pub fn es_target(&self) -> ESTarget {
|
||||
// match self {
|
||||
// #(#es_features => #es_targets,)*
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
pub fn features() -> &'static FxHashMap<ESFeature, EngineTargets> {
|
||||
use ESFeature::*;
|
||||
use Engine::*;
|
||||
|
|
|
|||
Loading…
Reference in a new issue