diff --git a/experimental/babel-preset-env/data/builtIns.json b/experimental/babel-preset-env/data/builtIns.json index d22048b829..8b6938e25c 100644 --- a/experimental/babel-preset-env/data/builtIns.json +++ b/experimental/babel-preset-env/data/builtIns.json @@ -100,158 +100,158 @@ }, "es6.map": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.set": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.weak-map": { "chrome": 51, - "opera": 38, "safari": 9, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.weak-set": { "chrome": 51, - "opera": 38, "safari": 9, - "ios": 9 + "ios": 9, + "opera": 38 }, "es6.reflect.apply": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.construct": { "chrome": 49, - "opera": 36, "edge": 13, "firefox": 45, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.define-property": { "chrome": 49, - "opera": 36, "edge": 13, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.delete-property": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.get": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.get-own-property-descriptor": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.get-prototype-of": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.has": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.is-extensible": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.own-keys": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.prevent-extensions": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.set": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.reflect.set-prototype-of": { "chrome": 49, - "opera": 36, "edge": 12, "firefox": 42, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 36 }, "es6.promise": { "chrome": 51, - "opera": 38, "edge": 13, "firefox": 45, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.symbol": { "chrome": 51, - "opera": 38, "firefox": 51, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.object.assign": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 34, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 32 }, "es6.object.is": { "chrome": 19, @@ -264,182 +264,182 @@ }, "es6.object.set-prototype-of": { "chrome": 34, - "opera": 21, "firefox": 31, "safari": 9, "node": 0.12, "ie": 11, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.function.name": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.string.raw": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 34, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.from-code-point": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 29, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.code-point-at": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 29, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.repeat": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 24, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.starts-with": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 29, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.ends-with": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 29, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.string.includes": { "chrome": 41, - "opera": 28, "edge": 12, "firefox": 40, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "es6.regexp.flags": { "chrome": 49, - "opera": 36, "firefox": 37, "safari": 9, - "ios": 9 + "ios": 9, + "opera": 36 }, "es6.regexp.match": { "chrome": 50, - "opera": 37, "firefox": 49, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "es6.regexp.replace": { "chrome": 50, - "opera": 37, "firefox": 49, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "es6.regexp.split": { "chrome": 50, - "opera": 37, "firefox": 49, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "es6.regexp.search": { "chrome": 50, - "opera": 37, "firefox": 49, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "es6.array.from": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "es6.array.of": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 25, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 32 }, "es6.array.copy-within": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 32, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 32 }, "es6.array.find": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 25, "safari": 7, "node": 4, - "ios": 10 + "ios": 10, + "opera": 32 }, "es6.array.find-index": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 25, "safari": 7, "node": 4, - "ios": 10 + "ios": 10, + "opera": 32 }, "es6.array.fill": { "chrome": 45, - "opera": 32, "edge": 12, "firefox": 31, "safari": 7, "node": 4, - "ios": 10 + "ios": 10, + "opera": 32 }, "es6.array.iterator": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 28, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.number.is-finite": { "chrome": 19, @@ -452,21 +452,21 @@ }, "es6.number.is-integer": { "chrome": 34, - "opera": 21, "edge": 12, "firefox": 16, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.number.is-safe-integer": { "chrome": 34, - "opera": 21, "edge": 12, "firefox": 32, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.number.is-nan": { "chrome": 19, @@ -479,212 +479,212 @@ }, "es6.number.epsilon": { "chrome": 34, - "opera": 21, "edge": 12, "firefox": 25, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.number.min-safe-integer": { "chrome": 34, - "opera": 21, "edge": 12, "firefox": 31, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.number.max-safe-integer": { "chrome": 34, - "opera": 21, "edge": 12, "firefox": 31, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 21 }, "es6.math.acosh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.asinh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.atanh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.cbrt": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.clz32": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 31, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 25 }, "es6.math.cosh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.expm1": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.fround": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 26, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.hypot": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 27, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.imul": { "chrome": 30, - "opera": 17, "edge": 12, "firefox": 23, "safari": 7, "node": 0.12, "android": 4.4, - "ios": 8 + "ios": 8, + "opera": 17 }, "es6.math.log1p": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.log10": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.log2": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.sign": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 25 }, "es6.math.sinh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.tanh": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es6.math.trunc": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 25, "safari": 7, "node": 0.12, - "ios": 10 + "ios": 10, + "opera": 25 }, "es7.array.includes.js": { "chrome": 47, - "opera": 34, "edge": 14, "firefox": 43, "safari": 10, - "ios": 10 + "ios": 10, + "opera": 34 }, "es7.object.values": { "chrome": 54, - "opera": 41, "edge": 14, "firefox": 47, - "node": 7 + "node": 7, + "opera": 41 }, "es7.object.entries": { "chrome": 54, - "opera": 41, "edge": 14, "firefox": 47, - "node": 7 + "node": 7, + "opera": 41 }, "es7.object.get-own-property-descriptors": { "chrome": 54, - "opera": 41, "firefox": 50, - "node": 7 + "node": 7, + "opera": 41 }, "es7.string.pad-start": { "firefox": 48, diff --git a/experimental/babel-preset-env/data/plugins.json b/experimental/babel-preset-env/data/plugins.json index 4ac649383e..aa67124b7f 100644 --- a/experimental/babel-preset-env/data/plugins.json +++ b/experimental/babel-preset-env/data/plugins.json @@ -1,174 +1,174 @@ { "transform-es2015-arrow-functions": { "chrome": 47, - "opera": 34, "edge": 13, "firefox": 45, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 34 }, "transform-es2015-block-scoped-functions": { "chrome": 41, - "opera": 28, "firefox": 46, "safari": 10, "node": 4, "ie": 11, - "ios": 10 + "ios": 10, + "opera": 28 }, "transform-es2015-block-scoping": { "chrome": 49, - "opera": 36, "firefox": 51, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 36 }, "transform-es2015-classes": { "chrome": 46, - "opera": 33, "edge": 13, "firefox": 45, "safari": 10, "node": 5, - "ios": 10 + "ios": 10, + "opera": 33 }, "transform-es2015-computed-properties": { "chrome": 44, - "opera": 31, "edge": 12, "firefox": 34, "safari": 7, "node": 4, - "ios": 10 + "ios": 10, + "opera": 31 }, "check-es2015-constants": { "chrome": 49, - "opera": 36, "firefox": 51, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 36 }, "transform-es2015-destructuring": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "transform-es2015-for-of": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "transform-es2015-function-name": { "chrome": 51, - "opera": 38, "safari": 10, "node": 6.5, - "ios": 10 + "ios": 10, + "opera": 38 }, "transform-es2015-literals": { "chrome": 44, - "opera": 31, "edge": 12, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 31 }, "transform-es2015-object-super": { "chrome": 46, - "opera": 33, "edge": 13, "firefox": 45, "safari": 10, "node": 5, - "ios": 10 + "ios": 10, + "opera": 33 }, "transform-es2015-parameters": { "chrome": 49, - "opera": 36, "edge": 14, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 36 }, "transform-es2015-shorthand-properties": { "chrome": 43, - "opera": 30, "edge": 12, "firefox": 33, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 30 }, "transform-es2015-spread": { "chrome": 46, - "opera": 33, "edge": 13, "firefox": 36, "safari": 10, "node": 5, - "ios": 10 + "ios": 10, + "opera": 33 }, "transform-es2015-sticky-regex": { "chrome": 49, - "opera": 36, "edge": 13, "firefox": 3, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 36 }, "transform-es2015-template-literals": { "chrome": 41, - "opera": 28, "edge": 13, "firefox": 34, "safari": 9, "node": 4, - "ios": 9 + "ios": 9, + "opera": 28 }, "transform-es2015-typeof-symbol": { "chrome": 38, - "opera": 25, "edge": 12, "firefox": 36, "safari": 9, "node": 0.12, - "ios": 9 + "ios": 9, + "opera": 25 }, "transform-es2015-unicode-regex": { "chrome": 50, - "opera": 37, "edge": 13, "firefox": 46, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "transform-regenerator": { "chrome": 50, - "opera": 37, "edge": 13, "safari": 10, "node": 6, - "ios": 10 + "ios": 10, + "opera": 37 }, "transform-exponentiation-operator": { "chrome": 52, - "opera": 39, "edge": 14, - "firefox": 52 + "firefox": 52, + "opera": 39 }, "transform-async-to-generator": { "chrome": 55, - "opera": 42, - "firefox": 52 + "firefox": 52, + "opera": 42 }, "syntax-trailing-function-commas": { "edge": 14, diff --git a/experimental/babel-preset-env/package.json b/experimental/babel-preset-env/package.json index 7b68f95a54..fd932cce75 100644 --- a/experimental/babel-preset-env/package.json +++ b/experimental/babel-preset-env/package.json @@ -9,7 +9,7 @@ "main": "lib/index.js", "scripts": { "build": "babel src -d lib", - "build-data": "babel-node ./scripts/build-data.js", + "build-data": "node ./scripts/build-data.js", "dev": "babel -w src -d lib", "lint": "eslint .", "fix": "eslint . --fix", diff --git a/experimental/babel-preset-env/scripts/build-data.js b/experimental/babel-preset-env/scripts/build-data.js index 0f027795b6..0cce166d1c 100644 --- a/experimental/babel-preset-env/scripts/build-data.js +++ b/experimental/babel-preset-env/scripts/build-data.js @@ -1,8 +1,12 @@ +"use strict"; + const fs = require("fs"); const path = require("path"); const flatten = require("lodash/flatten"); const flattenDeep = require("lodash/flattenDeep"); +const mapValues = require("lodash/mapValues"); + const pluginFeatures = require("../data/pluginFeatures"); const builtInFeatures = require("../data/builtInFeatures"); @@ -90,29 +94,29 @@ const getLowestImplementedVersion = ({ features }, env) => { ); let envTests = tests - .map(({ res: test, name, isBuiltIn }, i) => { - // Babel itself doesn't implement the feature correctly, - // don't count against it - // only doing this for built-ins atm - if (!test.babel && isBuiltIn) { - return "-1"; - } + .map(({ res: test, name, isBuiltIn }, i) => { + // Babel itself doesn't implement the feature correctly, + // don't count against it + // only doing this for built-ins atm + if (!test.babel && isBuiltIn) { + return "-1"; + } - // `equals` in compat-table - Object.keys(test).forEach((t) => { - test[invertedEqualsEnv[t]] = test[t]; + // `equals` in compat-table + Object.keys(test).forEach((t) => { + test[invertedEqualsEnv[t]] = test[t]; + }); + + return Object.keys(test) + .filter((t) => t.startsWith(env)) + // Babel assumes strict mode + .filter((test) => tests[i].res[test] === true || tests[i].res[test] === "strict") + // normalize some keys + .map((test) => envMap[test] || test) + .filter((test) => !isNaN(parseInt(test.replace(env, "")))) + .shift(); }); - return Object.keys(test) - .filter((t) => t.startsWith(env)) - // Babel assumes strict mode - .filter((test) => tests[i].res[test] === true || tests[i].res[test] === "strict") - // normalize some keys - .map((test) => envMap[test] || test) - .filter((test) => !isNaN(parseInt(test.replace(env, "")))) - .shift(); - }); - let envFiltered = envTests.filter((t) => t); if (envTests.length > envFiltered.length || envTests.length === 0) { // envTests.forEach((test, i) => { @@ -127,16 +131,12 @@ const getLowestImplementedVersion = ({ features }, env) => { } return envTests - .map((str) => Number(str.replace(env, ""))) - .reduce((a, b) => { return (a < b) ? b : a; }); + .map((str) => Number(str.replace(env, ""))) + .reduce((a, b) => { return (a < b) ? b : a; }); }; -function generateData(features) { - let ret = {}; - - Object.keys(features).forEach((pluginName) => { - let options = features[pluginName]; - +const generateData = (environments, features) => { + return mapValues(features, (options) => { if (!options.features) { options = { features: [options] @@ -149,29 +149,27 @@ function generateData(features) { if (version !== null) { plugin[env] = version; } - - // add opera - if (plugin.chrome) { - if (plugin.chrome >= 28) { - plugin.opera = plugin.chrome - 13; - } else if (plugin.chrome === 5) { - plugin.opera = 12; - } - } }); - ret[pluginName] = plugin; - }); + // add opera + if (plugin.chrome) { + if (plugin.chrome >= 28) { + plugin.opera = plugin.chrome - 13; + } else if (plugin.chrome === 5) { + plugin.opera = 12; + } + } - return ret; -} + return plugin; + }); +}; fs.writeFileSync( path.join(__dirname, "../data/plugins.json"), - JSON.stringify(generateData(pluginFeatures), null, 2) + "\n" + JSON.stringify(generateData(environments, pluginFeatures), null, 2) + "\n" ); fs.writeFileSync( path.join(__dirname, "../data/builtIns.json"), - JSON.stringify(generateData(builtInFeatures), null, 2) + "\n" + JSON.stringify(generateData(environments, builtInFeatures), null, 2) + "\n" );