mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
79e6d775fb
> **PR stack (3 of 3)** > 1. #24739 > 2. #24742 > 3. **#24712 (this PR)** > > Review #24739 and #24742 first. This PR is based on #24742, so GitHub shows only the RegExp behavior change. Stacked on #24742, which exposes strict engine-target capabilities to side-effect analysis. RegExp constructor calls used for engine feature detection were removed by DCE when their pattern was valid according to the current Oxc RegExp parser. A pattern can be valid at build time but still throw a `SyntaxError` on the configured runtime, so removing the call changes the result of surrounding `try`/`catch` checks. RegExp purity now requires both syntactic validity and support from every configured target. Consumers without concrete targets remain conservative, while an explicit target allows the minifier to remove constructors known to be safe for those engines. Target-independent flag validation and pattern compatibility checks now live in `oxc_regular_expression`; side-effect analysis only maps target support to unsupported flags and patterns. String patterns, modern flags, named groups, property escapes, lookbehind, modifiers, invalid flags, and lone-surrogate strings are covered. A RegExp literal with replacement flags is removable only when the target supports both those flags and the dedicated `ES2015RegExpConstructorCanAlterFlags` compatibility feature. Explicitly targeting `esnext` opts into current features. ## Example Input: ```js export function supportsUnicodeRegExp() { try { new RegExp("\\p{Ll}", "u"); return true; } catch { return false; } } ``` Before: ```js export function supportsUnicodeRegExp() { try { return true; } catch { return false; } } ``` After: ```js export function supportsUnicodeRegExp() { try { new RegExp("\\p{Ll}", "u"); return true; } catch { return false; } } ``` Verified with all `oxc_regular_expression`, `oxc_compat`, `oxc_ecmascript`, and `oxc_minifier` tests; the no-feature/`side_effects`/`constant_evaluation` `oxc_ecmascript` matrix; affected-crate clippy; formatting; and diff checks. Fixes rolldown/rolldown#10279. Implemented with AI assistance (OpenAI Codex and Claude). The contributor remains responsible for reviewing, understanding, and submitting these changes under the repository AI usage policy.
1038 lines
23 KiB
JSON
1038 lines
23 KiB
JSON
[
|
|
{
|
|
"name": "MemberExpressionLiterals",
|
|
"es": "ES5",
|
|
"babel": "transform-member-expression-literals",
|
|
"features": ["Object/array literal extensions / Reserved words as property names"],
|
|
"targets": {
|
|
"chrome": "7",
|
|
"opera": "12",
|
|
"edge": "12",
|
|
"firefox": "2",
|
|
"safari": "5.1",
|
|
"node": "0.4",
|
|
"deno": "1",
|
|
"ie": "9",
|
|
"android": "4",
|
|
"ios": "6",
|
|
"samsung": "1",
|
|
"rhino": "1.7.13",
|
|
"opera_mobile": "12",
|
|
"electron": "0.20"
|
|
}
|
|
},
|
|
{
|
|
"name": "PropertyLiterals",
|
|
"es": "ES5",
|
|
"babel": "transform-property-literals",
|
|
"features": ["Object/array literal extensions / Reserved words as property names"],
|
|
"targets": {
|
|
"chrome": "7",
|
|
"opera": "12",
|
|
"edge": "12",
|
|
"firefox": "2",
|
|
"safari": "5.1",
|
|
"node": "0.4",
|
|
"deno": "1",
|
|
"ie": "9",
|
|
"android": "4",
|
|
"ios": "6",
|
|
"samsung": "1",
|
|
"rhino": "1.7.13",
|
|
"opera_mobile": "12",
|
|
"electron": "0.20"
|
|
}
|
|
},
|
|
{
|
|
"name": "ReservedWords",
|
|
"es": "ES5",
|
|
"babel": "transform-reserved-words",
|
|
"features": ["Miscellaneous / Unreserved words"],
|
|
"targets": {
|
|
"chrome": "13",
|
|
"opera": "10.50",
|
|
"edge": "12",
|
|
"firefox": "2",
|
|
"safari": "3.1",
|
|
"node": "0.6",
|
|
"deno": "1",
|
|
"ie": "9",
|
|
"android": "4.4",
|
|
"ios": "6",
|
|
"samsung": "1",
|
|
"rhino": "1.7.13",
|
|
"opera_mobile": "10.1",
|
|
"electron": "0.20"
|
|
}
|
|
},
|
|
{
|
|
"name": "Parameters",
|
|
"babel": "transform-parameters",
|
|
"features": [
|
|
"default function parameters",
|
|
"rest parameters",
|
|
"destructuring, parameters / aliased defaults, arrow function",
|
|
"destructuring, parameters / shorthand defaults, arrow function",
|
|
"destructuring, parameters / duplicate identifier"
|
|
],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "49",
|
|
"opera": "36",
|
|
"edge": "18",
|
|
"firefox": "53",
|
|
"safari": "16.3",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "16.3",
|
|
"samsung": "5",
|
|
"opera_mobile": "36",
|
|
"electron": "0.37"
|
|
}
|
|
},
|
|
{
|
|
"name": "TemplateLiterals",
|
|
"babel": "transform-template-literals",
|
|
"features": ["template literals"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "62",
|
|
"opera": "49",
|
|
"edge": "79",
|
|
"firefox": "53",
|
|
"safari": "13",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "13",
|
|
"samsung": "8",
|
|
"opera_mobile": "46",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "Literals",
|
|
"babel": "transform-literals",
|
|
"features": ["Unicode code point escapes"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "44",
|
|
"opera": "31",
|
|
"edge": "12",
|
|
"firefox": "53",
|
|
"safari": "9",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "9",
|
|
"samsung": "4",
|
|
"rhino": "1.7.15",
|
|
"opera_mobile": "32",
|
|
"electron": "0.30"
|
|
}
|
|
},
|
|
{
|
|
"name": "FunctionName",
|
|
"babel": "transform-function-name",
|
|
"features": ["function \"name\" property"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "51",
|
|
"opera": "38",
|
|
"edge": "79",
|
|
"firefox": "53",
|
|
"safari": "10",
|
|
"node": "6.5",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "41",
|
|
"electron": "1.2"
|
|
}
|
|
},
|
|
{
|
|
"name": "ArrowFunctions",
|
|
"babel": "transform-arrow-functions",
|
|
"features": [
|
|
"arrow functions / 0 parameters",
|
|
"arrow functions / 1 parameter, no brackets",
|
|
"arrow functions / multiple parameters",
|
|
"arrow functions / lexical \"this\" binding",
|
|
"arrow functions / \"this\" unchanged by call or apply",
|
|
"arrow functions / can't be bound, can be curried",
|
|
"arrow functions / lexical \"arguments\" binding",
|
|
"arrow functions / no line break between params and =>",
|
|
"arrow functions / correct precedence",
|
|
"arrow functions / no \"prototype\" property"
|
|
],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "47",
|
|
"opera": "34",
|
|
"edge": "13",
|
|
"firefox": "43",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"rhino": "1.7.13",
|
|
"opera_mobile": "34",
|
|
"electron": "0.36"
|
|
}
|
|
},
|
|
{
|
|
"name": "BlockScopedFunctions",
|
|
"babel": "transform-block-scoped-functions",
|
|
"features": ["block-level function declaration"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "41",
|
|
"opera": "28",
|
|
"edge": "12",
|
|
"firefox": "46",
|
|
"safari": "10",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ie": "11",
|
|
"ios": "10",
|
|
"samsung": "3.4",
|
|
"opera_mobile": "28",
|
|
"electron": "0.21"
|
|
}
|
|
},
|
|
{
|
|
"name": "Classes",
|
|
"babel": "transform-classes",
|
|
"features": [
|
|
"class",
|
|
"super",
|
|
"arrow functions / lexical \"super\" binding in constructors",
|
|
"arrow functions / lexical \"super\" binding in methods"
|
|
],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "46",
|
|
"opera": "33",
|
|
"edge": "13",
|
|
"firefox": "45",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "33",
|
|
"electron": "0.36"
|
|
}
|
|
},
|
|
{
|
|
"name": "ObjectSuper",
|
|
"babel": "transform-object-super",
|
|
"features": ["super"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "46",
|
|
"opera": "33",
|
|
"edge": "13",
|
|
"firefox": "45",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "33",
|
|
"electron": "0.36"
|
|
}
|
|
},
|
|
{
|
|
"name": "ShorthandProperties",
|
|
"babel": "transform-shorthand-properties",
|
|
"features": ["object literal extensions / shorthand properties"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "43",
|
|
"opera": "30",
|
|
"edge": "12",
|
|
"firefox": "33",
|
|
"safari": "9",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "9",
|
|
"samsung": "4",
|
|
"rhino": "1.7.14",
|
|
"opera_mobile": "30",
|
|
"electron": "0.27"
|
|
}
|
|
},
|
|
{
|
|
"name": "DuplicateKeys",
|
|
"babel": "transform-duplicate-keys",
|
|
"features": ["miscellaneous / duplicate property names in strict mode"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "42",
|
|
"opera": "29",
|
|
"edge": "12",
|
|
"firefox": "34",
|
|
"safari": "9",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "9",
|
|
"samsung": "3.4",
|
|
"opera_mobile": "29",
|
|
"electron": "0.25"
|
|
}
|
|
},
|
|
{
|
|
"name": "ComputedProperties",
|
|
"babel": "transform-computed-properties",
|
|
"features": ["object literal extensions / computed properties"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "44",
|
|
"opera": "31",
|
|
"edge": "12",
|
|
"firefox": "34",
|
|
"safari": "7.1",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "8",
|
|
"samsung": "4",
|
|
"rhino": "1.8",
|
|
"opera_mobile": "32",
|
|
"electron": "0.30"
|
|
}
|
|
},
|
|
{
|
|
"name": "ForOf",
|
|
"babel": "transform-for-of",
|
|
"features": ["for..of loops"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "51",
|
|
"opera": "38",
|
|
"edge": "15",
|
|
"firefox": "53",
|
|
"safari": "10",
|
|
"node": "6.5",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "41",
|
|
"electron": "1.2"
|
|
}
|
|
},
|
|
{
|
|
"name": "StickyRegex",
|
|
"babel": "transform-sticky-regex",
|
|
"features": [
|
|
"RegExp \"y\" and \"u\" flags / \"y\" flag, lastIndex",
|
|
"RegExp \"y\" and \"u\" flags / \"y\" flag"
|
|
],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "49",
|
|
"opera": "36",
|
|
"edge": "13",
|
|
"firefox": "3",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"rhino": "1.7.15",
|
|
"opera_mobile": "36",
|
|
"electron": "0.37"
|
|
}
|
|
},
|
|
{
|
|
"name": "UnicodeEscapes",
|
|
"babel": "transform-unicode-escapes",
|
|
"features": ["Unicode code point escapes"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "44",
|
|
"opera": "31",
|
|
"edge": "12",
|
|
"firefox": "53",
|
|
"safari": "9",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "9",
|
|
"samsung": "4",
|
|
"rhino": "1.7.15",
|
|
"opera_mobile": "32",
|
|
"electron": "0.30"
|
|
}
|
|
},
|
|
{
|
|
"name": "UnicodeRegex",
|
|
"babel": "transform-unicode-regex",
|
|
"features": [
|
|
"RegExp \"y\" and \"u\" flags / \"u\" flag, case folding",
|
|
"RegExp \"y\" and \"u\" flags / \"u\" flag, Unicode code point escapes",
|
|
"RegExp \"y\" and \"u\" flags / \"u\" flag, non-BMP Unicode characters",
|
|
"RegExp \"y\" and \"u\" flags / \"u\" flag"
|
|
],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "50",
|
|
"opera": "37",
|
|
"edge": "13",
|
|
"firefox": "46",
|
|
"safari": "12",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "12",
|
|
"samsung": "5",
|
|
"opera_mobile": "37",
|
|
"electron": "1.1"
|
|
}
|
|
},
|
|
{
|
|
"name": "RegExpConstructorCanAlterFlags",
|
|
"babel": null,
|
|
"features": ["miscellaneous / RegExp constructor can alter flags"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "49",
|
|
"opera": "36",
|
|
"edge": "12",
|
|
"firefox": "39",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"rhino": "1.8",
|
|
"opera_mobile": "36",
|
|
"electron": "0.37"
|
|
}
|
|
},
|
|
{
|
|
"name": "Spread",
|
|
"babel": "transform-spread",
|
|
"features": ["spread syntax for iterable objects", "class", "super"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "46",
|
|
"opera": "33",
|
|
"edge": "13",
|
|
"firefox": "45",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "33",
|
|
"electron": "0.36"
|
|
}
|
|
},
|
|
{
|
|
"name": "Destructuring",
|
|
"babel": "transform-destructuring",
|
|
"features": ["destructuring, assignment", "destructuring, declarations"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "51",
|
|
"opera": "38",
|
|
"edge": "15",
|
|
"firefox": "53",
|
|
"safari": "10",
|
|
"node": "6.5",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "41",
|
|
"electron": "1.2"
|
|
}
|
|
},
|
|
{
|
|
"name": "BlockScoping",
|
|
"babel": "transform-block-scoping",
|
|
"features": ["const", "let", "generators"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "50",
|
|
"opera": "37",
|
|
"edge": "14",
|
|
"firefox": "53",
|
|
"safari": "11",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "11",
|
|
"samsung": "5",
|
|
"opera_mobile": "37",
|
|
"electron": "1.1"
|
|
}
|
|
},
|
|
{
|
|
"name": "TypeofSymbol",
|
|
"babel": "transform-typeof-symbol",
|
|
"features": ["Symbol / typeof support"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "38",
|
|
"opera": "25",
|
|
"edge": "12",
|
|
"firefox": "36",
|
|
"safari": "9",
|
|
"node": "4.0",
|
|
"deno": "1",
|
|
"ios": "9",
|
|
"samsung": "3",
|
|
"rhino": "1.7.13",
|
|
"opera_mobile": "25",
|
|
"electron": "0.20"
|
|
}
|
|
},
|
|
{
|
|
"name": "NewTarget",
|
|
"babel": "transform-new-target",
|
|
"features": ["new.target", "arrow functions / lexical \"new.target\" binding"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "46",
|
|
"opera": "33",
|
|
"edge": "14",
|
|
"firefox": "41",
|
|
"safari": "10",
|
|
"node": "5.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "33",
|
|
"electron": "0.36"
|
|
}
|
|
},
|
|
{
|
|
"name": "Regenerator",
|
|
"babel": "transform-regenerator",
|
|
"features": ["generators"],
|
|
"es": "ES2015",
|
|
"targets": {
|
|
"chrome": "50",
|
|
"opera": "37",
|
|
"edge": "13",
|
|
"firefox": "53",
|
|
"safari": "10",
|
|
"node": "6.0",
|
|
"deno": "1",
|
|
"ios": "10",
|
|
"samsung": "5",
|
|
"opera_mobile": "37",
|
|
"electron": "1.1"
|
|
}
|
|
},
|
|
{
|
|
"name": "ExponentiationOperator",
|
|
"babel": "transform-exponentiation-operator",
|
|
"features": ["exponentiation (**) operator"],
|
|
"es": "ES2016",
|
|
"targets": {
|
|
"chrome": "52",
|
|
"opera": "39",
|
|
"edge": "14",
|
|
"firefox": "52",
|
|
"safari": "10.1",
|
|
"node": "7.0",
|
|
"deno": "1",
|
|
"ios": "10.3",
|
|
"samsung": "6",
|
|
"rhino": "1.7.14",
|
|
"opera_mobile": "41",
|
|
"electron": "1.3"
|
|
}
|
|
},
|
|
{
|
|
"name": "AsyncToGenerator",
|
|
"babel": "transform-async-to-generator",
|
|
"features": ["async functions"],
|
|
"es": "ES2017",
|
|
"targets": {
|
|
"chrome": "55",
|
|
"opera": "42",
|
|
"edge": "15",
|
|
"firefox": "52",
|
|
"safari": "11",
|
|
"node": "7.6",
|
|
"deno": "1",
|
|
"ios": "11",
|
|
"samsung": "6",
|
|
"opera_mobile": "42",
|
|
"electron": "1.6"
|
|
}
|
|
},
|
|
{
|
|
"name": "AsyncGeneratorFunctions",
|
|
"babel": "transform-async-generator-functions",
|
|
"features": ["Asynchronous Iterators"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "63",
|
|
"opera": "50",
|
|
"edge": "79",
|
|
"firefox": "57",
|
|
"safari": "12",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "12",
|
|
"samsung": "8",
|
|
"opera_mobile": "46",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "ObjectRestSpread",
|
|
"babel": "transform-object-rest-spread",
|
|
"features": ["object rest/spread properties"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "60",
|
|
"opera": "47",
|
|
"edge": "79",
|
|
"firefox": "55",
|
|
"safari": "11.1",
|
|
"node": "8.3",
|
|
"deno": "1",
|
|
"ios": "11.3",
|
|
"samsung": "8",
|
|
"opera_mobile": "44",
|
|
"electron": "2.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "DotallRegex",
|
|
"babel": "transform-dotall-regex",
|
|
"features": ["s (dotAll) flag for regular expressions"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "62",
|
|
"opera": "49",
|
|
"edge": "79",
|
|
"firefox": "78",
|
|
"safari": "11.1",
|
|
"node": "8.10",
|
|
"deno": "1",
|
|
"ios": "11.3",
|
|
"samsung": "8",
|
|
"rhino": "1.7.15",
|
|
"opera_mobile": "46",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "UnicodePropertyRegex",
|
|
"babel": "transform-unicode-property-regex",
|
|
"features": ["RegExp Unicode Property Escapes / basic"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "64",
|
|
"opera": "51",
|
|
"edge": "79",
|
|
"firefox": "78",
|
|
"safari": "11.1",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "11.3",
|
|
"samsung": "9",
|
|
"opera_mobile": "47",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "NamedCapturingGroupsRegex",
|
|
"babel": "transform-named-capturing-groups-regex",
|
|
"features": ["RegExp named capture groups"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "64",
|
|
"opera": "51",
|
|
"edge": "79",
|
|
"firefox": "78",
|
|
"safari": "11.1",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "11.3",
|
|
"samsung": "9",
|
|
"opera_mobile": "47",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "LookbehindRegex",
|
|
"babel": null,
|
|
"features": ["RegExp Lookbehind Assertions"],
|
|
"es": "ES2018",
|
|
"targets": {
|
|
"chrome": "62",
|
|
"opera": "49",
|
|
"edge": "79",
|
|
"firefox": "78",
|
|
"safari": "16.4",
|
|
"node": "8.10",
|
|
"deno": "1",
|
|
"ios": "16.4",
|
|
"samsung": "8",
|
|
"opera_mobile": "46",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "JsonStrings",
|
|
"babel": "transform-json-strings",
|
|
"features": ["JSON superset"],
|
|
"es": "ES2019",
|
|
"targets": {
|
|
"chrome": "66",
|
|
"opera": "53",
|
|
"edge": "79",
|
|
"firefox": "62",
|
|
"safari": "12",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "12",
|
|
"samsung": "9",
|
|
"rhino": "1.7.14",
|
|
"opera_mobile": "47",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "OptionalCatchBinding",
|
|
"babel": "transform-optional-catch-binding",
|
|
"features": ["optional catch binding"],
|
|
"es": "ES2019",
|
|
"targets": {
|
|
"chrome": "66",
|
|
"opera": "53",
|
|
"edge": "79",
|
|
"firefox": "58",
|
|
"safari": "11.1",
|
|
"node": "10.0",
|
|
"deno": "1",
|
|
"ios": "11.3",
|
|
"samsung": "9",
|
|
"opera_mobile": "47",
|
|
"electron": "3.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "NullishCoalescingOperator",
|
|
"babel": "transform-nullish-coalescing-operator",
|
|
"features": ["nullish coalescing operator (??)"],
|
|
"es": "ES2020",
|
|
"targets": {
|
|
"chrome": "80",
|
|
"opera": "67",
|
|
"edge": "80",
|
|
"firefox": "72",
|
|
"safari": "13.1",
|
|
"node": "14.0",
|
|
"deno": "1",
|
|
"ios": "13.4",
|
|
"samsung": "13",
|
|
"rhino": "1.8",
|
|
"opera_mobile": "57",
|
|
"electron": "8.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "OptionalChaining",
|
|
"babel": "transform-optional-chaining",
|
|
"features": ["optional chaining operator (?.)"],
|
|
"es": "ES2020",
|
|
"targets": {
|
|
"chrome": "91",
|
|
"opera": "77",
|
|
"edge": "91",
|
|
"firefox": "74",
|
|
"safari": "13.1",
|
|
"node": "16.1",
|
|
"deno": "1.9",
|
|
"ios": "13.4",
|
|
"samsung": "16",
|
|
"opera_mobile": "64",
|
|
"electron": "13.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "BigInt",
|
|
"babel": null,
|
|
"features": ["BigInt / basic functionality"],
|
|
"es": "ES2020",
|
|
"targets": {
|
|
"chrome": "67",
|
|
"opera": "54",
|
|
"edge": "79",
|
|
"firefox": "68",
|
|
"safari": "14",
|
|
"node": "10.4",
|
|
"deno": "1",
|
|
"ios": "14",
|
|
"samsung": "9",
|
|
"rhino": "1.7.14",
|
|
"opera_mobile": "48",
|
|
"electron": "4.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "NumericSeparator",
|
|
"babel": "transform-numeric-separator",
|
|
"features": ["numeric separators"],
|
|
"es": "ES2021",
|
|
"targets": {
|
|
"chrome": "75",
|
|
"opera": "62",
|
|
"edge": "79",
|
|
"firefox": "70",
|
|
"safari": "13",
|
|
"node": "12.5",
|
|
"deno": "1",
|
|
"ios": "13",
|
|
"samsung": "11",
|
|
"rhino": "1.7.14",
|
|
"opera_mobile": "54",
|
|
"electron": "6.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "LogicalAssignmentOperators",
|
|
"babel": "transform-logical-assignment-operators",
|
|
"features": ["Logical Assignment"],
|
|
"es": "ES2021",
|
|
"targets": {
|
|
"chrome": "85",
|
|
"opera": "71",
|
|
"edge": "85",
|
|
"firefox": "79",
|
|
"safari": "14",
|
|
"node": "15.0",
|
|
"deno": "1.2",
|
|
"ios": "14",
|
|
"samsung": "14",
|
|
"opera_mobile": "60",
|
|
"electron": "10.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "ClassStaticBlock",
|
|
"babel": "transform-class-static-block",
|
|
"features": ["Class static initialization blocks"],
|
|
"es": "ES2022",
|
|
"targets": {
|
|
"chrome": "94",
|
|
"opera": "80",
|
|
"edge": "94",
|
|
"firefox": "93",
|
|
"safari": "16.4",
|
|
"node": "16.11",
|
|
"deno": "1.14",
|
|
"ios": "16.4",
|
|
"samsung": "17",
|
|
"opera_mobile": "66",
|
|
"electron": "15.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "PrivatePropertyInObject",
|
|
"babel": "transform-private-property-in-object",
|
|
"features": ["Ergonomic brand checks for private fields"],
|
|
"es": "ES2022",
|
|
"targets": {
|
|
"chrome": "91",
|
|
"opera": "77",
|
|
"edge": "91",
|
|
"firefox": "90",
|
|
"safari": "15",
|
|
"node": "16.4",
|
|
"deno": "1.9",
|
|
"ios": "15",
|
|
"samsung": "16",
|
|
"opera_mobile": "64",
|
|
"electron": "13.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "ClassProperties",
|
|
"babel": "transform-class-properties",
|
|
"features": [
|
|
"static class fields",
|
|
"instance class fields / public instance class fields",
|
|
"instance class fields / private instance class fields basic support",
|
|
"instance class fields / computed instance class fields",
|
|
"instance class fields / resolving identifier in parent scope"
|
|
],
|
|
"es": "ES2022",
|
|
"targets": {
|
|
"chrome": "98",
|
|
"opera": "84",
|
|
"edge": "98",
|
|
"firefox": "90",
|
|
"safari": "16",
|
|
"node": "12.0",
|
|
"deno": "1.18",
|
|
"ios": "16",
|
|
"samsung": "11",
|
|
"opera_mobile": "53",
|
|
"electron": "17.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "PrivateMethods",
|
|
"babel": "transform-private-methods",
|
|
"features": ["private class methods"],
|
|
"es": "ES2022",
|
|
"targets": {
|
|
"chrome": "84",
|
|
"opera": "70",
|
|
"edge": "84",
|
|
"firefox": "90",
|
|
"safari": "15",
|
|
"node": "14.6",
|
|
"deno": "1",
|
|
"ios": "15",
|
|
"samsung": "14",
|
|
"opera_mobile": "60",
|
|
"electron": "10.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "MatchIndicesRegex",
|
|
"babel": null,
|
|
"features": ["RegExp Match Indices (`hasIndices` / `d` flag) / constructor supports it"],
|
|
"es": "ES2022",
|
|
"targets": {
|
|
"chrome": "90",
|
|
"opera": "76",
|
|
"edge": "90",
|
|
"firefox": "91",
|
|
"safari": "15",
|
|
"node": "16.0",
|
|
"deno": "1.8",
|
|
"ios": "15",
|
|
"samsung": "15",
|
|
"opera_mobile": "64",
|
|
"electron": "13.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "UnicodeSetsRegex",
|
|
"babel": "transform-unicode-sets-regex",
|
|
"features": [
|
|
"RegExp `v` flag / set notations",
|
|
"RegExp `v` flag / properties of Strings",
|
|
"RegExp `v` flag / constructor supports it",
|
|
"RegExp `v` flag / shows up in flags"
|
|
],
|
|
"es": "ES2024",
|
|
"targets": {
|
|
"chrome": "112",
|
|
"opera": "98",
|
|
"edge": "112",
|
|
"firefox": "116",
|
|
"safari": "17",
|
|
"node": "20.0",
|
|
"deno": "1.32",
|
|
"ios": "17",
|
|
"samsung": "23",
|
|
"opera_mobile": "75",
|
|
"electron": "24.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "DuplicateNamedCapturingGroupsRegex",
|
|
"babel": "transform-duplicate-named-capturing-groups-regex",
|
|
"features": ["Duplicate named capturing groups"],
|
|
"es": "ES2025",
|
|
"targets": {
|
|
"chrome": "126",
|
|
"opera": "112",
|
|
"edge": "126",
|
|
"firefox": "129",
|
|
"safari": "17.4",
|
|
"node": "23.0",
|
|
"ios": "17.4",
|
|
"electron": "31.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "RegexpModifiers",
|
|
"babel": "transform-regexp-modifiers",
|
|
"features": ["RegExp Pattern Modifiers"],
|
|
"es": "ES2025",
|
|
"targets": {
|
|
"chrome": "125",
|
|
"opera": "111",
|
|
"edge": "125",
|
|
"firefox": "132",
|
|
"node": "23.0",
|
|
"samsung": "27",
|
|
"electron": "31.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "ExplicitResourceManagement",
|
|
"babel": "transform-explicit-resource-management",
|
|
"features": ["Explicit Resource Management"],
|
|
"es": "ES2026",
|
|
"targets": {
|
|
"chrome": "134",
|
|
"edge": "134",
|
|
"firefox": "141",
|
|
"node": "24.0"
|
|
}
|
|
},
|
|
{
|
|
"name": "ExportNamespaceFrom",
|
|
"babel": "transform-export-namespace-from",
|
|
"targets": {
|
|
"chrome": "72",
|
|
"opera": "60",
|
|
"edge": "79",
|
|
"firefox": "80",
|
|
"safari": "14.1",
|
|
"node": "13.2",
|
|
"deno": "1.0",
|
|
"ios": "14.5",
|
|
"samsung": "11.0",
|
|
"opera_mobile": "51",
|
|
"electron": "5.0"
|
|
},
|
|
"es": "ES2020"
|
|
},
|
|
{
|
|
"name": "ArbitraryModuleNamespaceNames",
|
|
"targets": {
|
|
"chrome": "88",
|
|
"opera": "74",
|
|
"edge": "88",
|
|
"firefox": "87",
|
|
"safari": "14.1",
|
|
"node": "16.0",
|
|
"deno": "1.6",
|
|
"ios": "14.5",
|
|
"samsung": "15.0",
|
|
"opera_mobile": "63",
|
|
"electron": "12.0"
|
|
},
|
|
"es": "ES2020"
|
|
},
|
|
{
|
|
"name": "TopLevelAwait",
|
|
"babel": null,
|
|
"targets": {
|
|
"chrome": "89",
|
|
"opera": "75",
|
|
"edge": "89",
|
|
"firefox": "89",
|
|
"safari": "15.0",
|
|
"node": "14.8",
|
|
"deno": "1.0",
|
|
"ios": "15.0",
|
|
"samsung": "15.0",
|
|
"opera_mobile": "63",
|
|
"electron": "12.0"
|
|
},
|
|
"es": "ES2022"
|
|
}
|
|
]
|