From 724aec0d4a9b333e73d15b86f5b02c37fe29b31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 16 Jan 2020 02:31:26 +0100 Subject: [PATCH] Fix plugin ordering in preset-env --- packages/babel-compat-data/data/plugins.json | 394 +++++++++--------- .../scripts/data/plugin-features.js | 159 ++++--- 2 files changed, 283 insertions(+), 270 deletions(-) diff --git a/packages/babel-compat-data/data/plugins.json b/packages/babel-compat-data/data/plugins.json index de0a613bf234..fc3190fb96fa 100644 --- a/packages/babel-compat-data/data/plugins.json +++ b/packages/babel-compat-data/data/plugins.json @@ -1,13 +1,12 @@ { - "proposal-async-generator-functions": { - "chrome": "63", - "firefox": "57", - "safari": "12", - "node": "10", - "ios": "12", - "samsung": "8.2", - "opera": "50", - "electron": "3.1" + "proposal-nullish-coalescing-operator": { + "chrome": "80", + "firefox": "72", + "opera": "67" + }, + "proposal-optional-chaining": { + "chrome": "80", + "opera": "67" }, "proposal-json-strings": { "chrome": "66", @@ -19,10 +18,25 @@ "opera": "53", "electron": "3.1" }, - "proposal-nullish-coalescing-operator": { - "chrome": "80", - "firefox": "72", - "opera": "67" + "proposal-optional-catch-binding": { + "chrome": "66", + "firefox": "58", + "safari": "11.1", + "node": "10", + "ios": "11.3", + "samsung": "9.2", + "opera": "53", + "electron": "3.1" + }, + "proposal-async-generator-functions": { + "chrome": "63", + "firefox": "57", + "safari": "12", + "node": "10", + "ios": "12", + "samsung": "8.2", + "opera": "50", + "electron": "3.1" }, "proposal-object-rest-spread": { "chrome": "60", @@ -34,20 +48,15 @@ "opera": "47", "electron": "2.1" }, - "proposal-optional-catch-binding": { - "chrome": "66", - "firefox": "58", + "transform-dotall-regex": { + "chrome": "62", "safari": "11.1", - "node": "10", + "node": "8.10", "ios": "11.3", - "samsung": "9.2", - "opera": "53", + "samsung": "8.2", + "opera": "49", "electron": "3.1" }, - "proposal-optional-chaining": { - "chrome": "80", - "opera": "67" - }, "proposal-unicode-property-regex": { "chrome": "64", "safari": "11.1", @@ -57,16 +66,14 @@ "opera": "51", "electron": "3.1" }, - "transform-arrow-functions": { - "chrome": "47", - "edge": "13", - "firefox": "45", - "safari": "10", - "node": "6", - "ios": "10", - "samsung": "5", - "opera": "34", - "electron": "0.36" + "transform-named-capturing-groups-regex": { + "chrome": "64", + "safari": "11.1", + "node": "10", + "ios": "11.3", + "samsung": "9.2", + "opera": "51", + "electron": "3.1" }, "transform-async-to-generator": { "chrome": "55", @@ -79,6 +86,60 @@ "opera": "42", "electron": "1.6" }, + "transform-exponentiation-operator": { + "chrome": "52", + "edge": "14", + "firefox": "52", + "safari": "10.1", + "node": "7", + "ios": "10.3", + "samsung": "6.2", + "opera": "39", + "electron": "1.3" + }, + "transform-template-literals": { + "chrome": "41", + "edge": "13", + "firefox": "34", + "safari": "13", + "node": "4", + "ios": "13", + "samsung": "3.4", + "opera": "28", + "electron": "0.24" + }, + "transform-literals": { + "chrome": "44", + "edge": "12", + "firefox": "53", + "safari": "9", + "node": "4", + "ios": "9", + "samsung": "4", + "opera": "31", + "electron": "0.31" + }, + "transform-function-name": { + "chrome": "51", + "firefox": "53", + "safari": "10", + "node": "6.5", + "ios": "10", + "samsung": "5", + "opera": "38", + "electron": "1.2" + }, + "transform-arrow-functions": { + "chrome": "47", + "edge": "13", + "firefox": "45", + "safari": "10", + "node": "6", + "ios": "10", + "samsung": "5", + "opera": "34", + "electron": "0.36" + }, "transform-block-scoped-functions": { "chrome": "41", "edge": "12", @@ -91,18 +152,18 @@ "opera": "28", "electron": "0.24" }, - "transform-block-scoping": { - "chrome": "49", - "edge": "14", - "firefox": "51", - "safari": "11", - "node": "6", - "ios": "11", + "transform-classes": { + "chrome": "46", + "edge": "13", + "firefox": "45", + "safari": "10", + "node": "5", + "ios": "10", "samsung": "5", - "opera": "36", - "electron": "1" + "opera": "33", + "electron": "0.36" }, - "transform-classes": { + "transform-object-super": { "chrome": "46", "edge": "13", "firefox": "45", @@ -113,6 +174,28 @@ "opera": "33", "electron": "0.36" }, + "transform-shorthand-properties": { + "chrome": "43", + "edge": "12", + "firefox": "33", + "safari": "9", + "node": "4", + "ios": "9", + "samsung": "4", + "opera": "30", + "electron": "0.29" + }, + "transform-duplicate-keys": { + "chrome": "42", + "edge": "12", + "firefox": "34", + "safari": "9", + "node": "4", + "ios": "9", + "samsung": "3.4", + "opera": "29", + "electron": "0.27" + }, "transform-computed-properties": { "chrome": "44", "edge": "12", @@ -124,7 +207,7 @@ "opera": "31", "electron": "0.31" }, - "transform-destructuring": { + "transform-for-of": { "chrome": "51", "edge": "15", "firefox": "53", @@ -135,50 +218,43 @@ "opera": "38", "electron": "1.2" }, - "transform-dotall-regex": { - "chrome": "62", - "safari": "11.1", - "node": "8.10", - "ios": "11.3", - "samsung": "8.2", - "opera": "49", - "electron": "3.1" - }, - "transform-duplicate-keys": { - "chrome": "42", - "edge": "12", - "firefox": "34", - "safari": "9", - "node": "4", - "ios": "9", - "samsung": "3.4", - "opera": "29", - "electron": "0.27" + "transform-sticky-regex": { + "chrome": "49", + "edge": "13", + "firefox": "3", + "safari": "10", + "node": "6", + "ios": "10", + "samsung": "5", + "opera": "36", + "electron": "1" }, - "transform-exponentiation-operator": { - "chrome": "52", - "edge": "14", - "firefox": "52", - "safari": "10.1", - "node": "7", - "ios": "10.3", - "samsung": "6.2", - "opera": "39", - "electron": "1.3" + "transform-unicode-regex": { + "chrome": "50", + "edge": "13", + "firefox": "46", + "safari": "10", + "node": "6", + "ios": "10", + "samsung": "5", + "opera": "37", + "electron": "1.1" }, - "transform-for-of": { - "chrome": "51", - "edge": "15", + "transform-spread": {}, + "transform-parameters": { + "chrome": "49", + "edge": "18", "firefox": "53", "safari": "10", - "node": "6.5", + "node": "6", "ios": "10", "samsung": "5", - "opera": "38", - "electron": "1.2" + "opera": "36", + "electron": "1" }, - "transform-function-name": { + "transform-destructuring": { "chrome": "51", + "edge": "15", "firefox": "53", "safari": "10", "node": "6.5", @@ -187,39 +263,27 @@ "opera": "38", "electron": "1.2" }, - "transform-literals": { - "chrome": "44", + "transform-block-scoping": { + "chrome": "49", + "edge": "14", + "firefox": "51", + "safari": "11", + "node": "6", + "ios": "11", + "samsung": "5", + "opera": "36", + "electron": "1" + }, + "transform-typeof-symbol": { + "chrome": "38", "edge": "12", - "firefox": "53", + "firefox": "36", "safari": "9", - "node": "4", + "node": "0.12", "ios": "9", - "samsung": "4", - "opera": "31", - "electron": "0.31" - }, - "transform-member-expression-literals": { - "chrome": "7", - "opera": "12", - "edge": "12", - "firefox": "2", - "safari": "5.1", - "node": "0.10", - "ie": "9", - "android": "4", - "ios": "6", - "phantom": "2", - "samsung": "2.1", - "electron": "5" - }, - "transform-named-capturing-groups-regex": { - "chrome": "64", - "safari": "11.1", - "node": "10", - "ios": "11.3", - "samsung": "9.2", - "opera": "51", - "electron": "3.1" + "samsung": "3", + "opera": "25", + "electron": "0.2" }, "transform-new-target": { "chrome": "46", @@ -232,29 +296,18 @@ "opera": "33", "electron": "0.36" }, - "transform-object-super": { - "chrome": "46", + "transform-regenerator": { + "chrome": "50", "edge": "13", - "firefox": "45", - "safari": "10", - "node": "5", - "ios": "10", - "samsung": "5", - "opera": "33", - "electron": "0.36" - }, - "transform-parameters": { - "chrome": "49", - "edge": "18", "firefox": "53", "safari": "10", "node": "6", "ios": "10", "samsung": "5", - "opera": "36", - "electron": "1" + "opera": "37", + "electron": "1.1" }, - "transform-property-literals": { + "transform-member-expression-literals": { "chrome": "7", "opera": "12", "edge": "12", @@ -268,16 +321,19 @@ "samsung": "2.1", "electron": "5" }, - "transform-regenerator": { - "chrome": "50", - "edge": "13", - "firefox": "53", - "safari": "10", - "node": "6", - "ios": "10", - "samsung": "5", - "opera": "37", - "electron": "1.1" + "transform-property-literals": { + "chrome": "7", + "opera": "12", + "edge": "12", + "firefox": "2", + "safari": "5.1", + "node": "0.10", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "2", + "samsung": "2.1", + "electron": "5" }, "transform-reserved-words": { "chrome": "13", @@ -292,71 +348,5 @@ "phantom": "2", "samsung": "2.1", "electron": "0.2" - }, - "transform-shorthand-properties": { - "chrome": "43", - "edge": "12", - "firefox": "33", - "safari": "9", - "node": "4", - "ios": "9", - "samsung": "4", - "opera": "30", - "electron": "0.29" - }, - "transform-spread": { - "chrome": "46", - "edge": "13", - "firefox": "36", - "safari": "10", - "node": "5", - "ios": "10", - "samsung": "5", - "opera": "33", - "electron": "0.36" - }, - "transform-sticky-regex": { - "chrome": "49", - "edge": "13", - "firefox": "3", - "safari": "10", - "node": "6", - "ios": "10", - "samsung": "5", - "opera": "36", - "electron": "1" - }, - "transform-template-literals": { - "chrome": "41", - "edge": "13", - "firefox": "34", - "safari": "13", - "node": "4", - "ios": "13", - "samsung": "3.4", - "opera": "28", - "electron": "0.24" - }, - "transform-typeof-symbol": { - "chrome": "38", - "edge": "12", - "firefox": "36", - "safari": "9", - "node": "0.12", - "ios": "9", - "samsung": "3", - "opera": "25", - "electron": "0.2" - }, - "transform-unicode-regex": { - "chrome": "50", - "edge": "13", - "firefox": "46", - "safari": "12", - "node": "6", - "ios": "12", - "samsung": "5", - "opera": "37", - "electron": "1.1" } } diff --git a/packages/babel-compat-data/scripts/data/plugin-features.js b/packages/babel-compat-data/scripts/data/plugin-features.js index e0f20c7d1acf..987364301b19 100644 --- a/packages/babel-compat-data/scripts/data/plugin-features.js +++ b/packages/babel-compat-data/scripts/data/plugin-features.js @@ -1,67 +1,60 @@ -/* eslint sort-keys: "error" */ - -module.exports = { - "proposal-async-generator-functions": "Asynchronous Iterators", - "proposal-json-strings": "JSON superset", - "proposal-nullish-coalescing-operator": "nullish coalescing operator (??)", - "proposal-object-rest-spread": "object rest/spread properties", - "proposal-optional-catch-binding": "optional catch binding", - "proposal-optional-chaining": "optional chaining operator (?.)", - "proposal-unicode-property-regex": "RegExp Unicode Property Escapes", +const es5 = { + "transform-member-expression-literals": + "Object/array literal extensions / Reserved words as property names", + "transform-property-literals": + "Object/array literal extensions / Reserved words as property names", + "transform-reserved-words": "Miscellaneous / Unreserved words", +}; +const es2015 = { + "transform-template-literals": { + features: ["template literals"], + }, + "transform-literals": { + features: ["Unicode code point escapes"], + }, + "transform-function-name": { + features: ['function "name" property'], + }, "transform-arrow-functions": { features: ["arrow functions"], }, - - "transform-async-to-generator": { - features: ["async functions"], - }, - "transform-block-scoped-functions": { features: ["block-level function declaration"], }, - "transform-block-scoping": { - features: ["const", "let"], - }, "transform-classes": { features: ["class", "super"], }, - "transform-computed-properties": { - features: ["object literal extensions / computed properties"], + "transform-object-super": { + features: ["super"], }, - "transform-destructuring": { - features: ["destructuring, assignment", "destructuring, declarations"], + "transform-shorthand-properties": { + features: ["object literal extensions / shorthand properties"], }, - - // We want to apply this prior to unicode regex so that "." and "u" - // are properly handled. - // - // Ref: https://github.com/babel/babel/pull/7065#issuecomment-395959112 - "transform-dotall-regex": "s (dotAll) flag for regular expressions", - "transform-duplicate-keys": { features: ["miscellaneous / duplicate property names in strict mode"], }, - "transform-exponentiation-operator": { - features: ["exponentiation (**) operator"], + "transform-computed-properties": { + features: ["object literal extensions / computed properties"], }, "transform-for-of": { features: ["for..of loops"], }, - "transform-function-name": { - features: ['function "name" property'], - }, - "transform-literals": { - features: ["Unicode code point escapes"], + "transform-sticky-regex": { + features: [ + 'RegExp "y" and "u" flags / "y" flag, lastIndex', + 'RegExp "y" and "u" flags / "y" flag', + ], }, - "transform-member-expression-literals": - "Object/array literal extensions / Reserved words as property names", - "transform-named-capturing-groups-regex": "RegExp named capture groups", - "transform-new-target": { - features: ["new.target"], + "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', + ], }, - "transform-object-super": { - features: ["super"], + "transform-spread": { + features: ["spread (...) operator"], }, "transform-parameters": { features: [ @@ -70,36 +63,66 @@ module.exports = { "destructuring, parameters / defaults, arrow function", ], }, - "transform-property-literals": - "Object/array literal extensions / Reserved words as property names", - "transform-regenerator": { - features: ["generators"], + "transform-destructuring": { + features: ["destructuring, assignment", "destructuring, declarations"], }, - "transform-reserved-words": "Miscellaneous / Unreserved words", - "transform-shorthand-properties": { - features: ["object literal extensions / shorthand properties"], + "transform-block-scoping": { + features: ["const", "let"], }, - "transform-spread": { - features: "spread syntax for iterable objects", + "transform-typeof-symbol": { + features: ["Symbol / typeof support"], }, - "transform-sticky-regex": { - features: [ - 'RegExp "y" and "u" flags / "y" flag, lastIndex', - 'RegExp "y" and "u" flags / "y" flag', - ], + "transform-new-target": { + features: ["new.target"], }, - "transform-template-literals": { - features: ["template literals"], + "transform-regenerator": { + features: ["generators"], }, - "transform-typeof-symbol": { - features: ["Symbol / typeof support"], +}; + +const es2016 = { + "transform-exponentiation-operator": { + features: ["exponentiation (**) operator"], }, - "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', - ], +}; + +const es2017 = { + "transform-async-to-generator": { + features: ["async functions"], }, }; + +const es2018 = { + "proposal-async-generator-functions": "Asynchronous Iterators", + "proposal-object-rest-spread": "object rest/spread properties", + + // We want to apply this prior to unicode regex so that "." and "u" + // are properly handled. + // + // Ref: https://github.com/babel/babel/pull/7065#issuecomment-395959112 + "transform-dotall-regex": "s (dotAll) flag for regular expressions", + "proposal-unicode-property-regex": "RegExp Unicode Property Escapes", + "transform-named-capturing-groups-regex": "RegExp named capture groups", +}; + +const es2019 = { + "proposal-json-strings": "JSON superset", + "proposal-optional-catch-binding": "optional catch binding", +}; + +const es2020 = { + "proposal-nullish-coalescing-operator": "nullish coalescing operator (??)", + "proposal-optional-chaining": "optional chaining operator (?.)", +}; + +// Run plugins for modern features first +module.exports = Object.assign( + {}, + es2020, + es2019, + es2018, + es2017, + es2016, + es2015, + es5 +);