diff --git a/experimental/babel-preset-env/data/built-ins.json b/experimental/babel-preset-env/data/built-ins.json index 5a5b2dfc8d..4901b8f1f6 100644 --- a/experimental/babel-preset-env/data/built-ins.json +++ b/experimental/babel-preset-env/data/built-ins.json @@ -36,6 +36,7 @@ "firefox": 4, "safari": 6, "node": 0.12, + "android": 4.4, "ios": 7 }, "es6.typed.int16-array": { @@ -118,6 +119,7 @@ "chrome": 51, "firefox": 53, "safari": 9, + "node": 6.5, "ios": 9, "opera": 38 }, @@ -126,6 +128,7 @@ "edge": 15, "firefox": 53, "safari": 9, + "node": 6.5, "ios": 9, "opera": 38 }, @@ -134,6 +137,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -142,6 +146,7 @@ "edge": 13, "firefox": 45, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -150,6 +155,7 @@ "edge": 13, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -158,6 +164,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -166,6 +173,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -174,6 +182,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -182,6 +191,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -190,6 +200,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -198,6 +209,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -206,6 +218,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -214,6 +227,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -222,6 +236,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -230,6 +245,7 @@ "edge": 12, "firefox": 42, "safari": 10, + "node": 6, "ios": 10, "opera": 36 }, @@ -246,6 +262,7 @@ "chrome": 51, "firefox": 51, "safari": 10, + "node": 6.5, "ios": 10, "opera": 38 }, @@ -273,6 +290,7 @@ "safari": 9, "node": 0.12, "ie": 11, + "android": 5, "ios": 9, "opera": 21 }, @@ -351,6 +369,7 @@ "chrome": 49, "firefox": 37, "safari": 9, + "node": 6, "ios": 9, "opera": 36 }, @@ -419,7 +438,7 @@ "firefox": 25, "safari": 8, "node": 4, - "ios": 9, + "ios": 8, "opera": 32 }, "es6.array.find-index": { @@ -428,7 +447,7 @@ "firefox": 25, "safari": 8, "node": 4, - "ios": 9, + "ios": 8, "opera": 32 }, "es6.array.fill": { @@ -437,7 +456,7 @@ "firefox": 31, "safari": 8, "node": 4, - "ios": 9, + "ios": 8, "opera": 32 }, "es6.array.iterator": { @@ -446,7 +465,8 @@ "firefox": 28, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.number.is-finite": { @@ -464,6 +484,7 @@ "firefox": 16, "safari": 9, "node": 0.12, + "android": 5, "ios": 9, "opera": 21 }, @@ -473,6 +494,7 @@ "firefox": 32, "safari": 9, "node": 0.12, + "android": 5, "ios": 9, "opera": 21 }, @@ -491,6 +513,7 @@ "firefox": 25, "safari": 9, "node": 0.12, + "android": 5, "ios": 9, "opera": 21 }, @@ -500,6 +523,7 @@ "firefox": 31, "safari": 9, "node": 0.12, + "android": 5, "ios": 9, "opera": 21 }, @@ -509,6 +533,7 @@ "firefox": 31, "safari": 9, "node": 0.12, + "android": 5, "ios": 9, "opera": 21 }, @@ -518,7 +543,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.asinh": { @@ -527,7 +553,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.atanh": { @@ -536,7 +563,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.cbrt": { @@ -545,7 +573,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.clz32": { @@ -554,6 +583,7 @@ "firefox": 31, "safari": 9, "node": 0.12, + "android": 5.1, "ios": 9, "opera": 25 }, @@ -563,7 +593,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.expm1": { @@ -572,7 +603,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.fround": { @@ -581,7 +613,8 @@ "firefox": 26, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.hypot": { @@ -590,7 +623,8 @@ "firefox": 27, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.imul": { @@ -609,7 +643,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.log10": { @@ -618,7 +653,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.log2": { @@ -627,7 +663,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.sign": { @@ -636,6 +673,7 @@ "firefox": 25, "safari": 9, "node": 0.12, + "android": 5.1, "ios": 9, "opera": 25 }, @@ -645,7 +683,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.tanh": { @@ -654,7 +693,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es6.math.trunc": { @@ -663,7 +703,8 @@ "firefox": 25, "safari": 8, "node": 0.12, - "ios": 9, + "android": 5.1, + "ios": 8, "opera": 25 }, "es7.array.includes": { @@ -671,6 +712,7 @@ "edge": 14, "firefox": 43, "safari": 10, + "node": 6, "ios": 10, "opera": 34 }, @@ -678,6 +720,7 @@ "chrome": 54, "edge": 14, "firefox": 47, + "safari": 10.1, "node": 7, "opera": 41 }, @@ -685,6 +728,7 @@ "chrome": 54, "edge": 14, "firefox": 47, + "safari": 10.1, "node": 7, "opera": 41 }, @@ -692,7 +736,7 @@ "chrome": 54, "edge": 15, "firefox": 50, - "safari": 10, + "safari": 10.1, "node": 7, "opera": 41 }, diff --git a/experimental/babel-preset-env/data/plugins.json b/experimental/babel-preset-env/data/plugins.json index 8397e84a86..6630092e3a 100644 --- a/experimental/babel-preset-env/data/plugins.json +++ b/experimental/babel-preset-env/data/plugins.json @@ -40,7 +40,7 @@ "firefox": 34, "safari": 8, "node": 4, - "ios": 9, + "ios": 8, "opera": 31 }, "check-es2015-constants": { @@ -146,6 +146,7 @@ "firefox": 36, "safari": 9, "node": 0.12, + "android": 5.1, "ios": 9, "opera": 25 }, @@ -171,11 +172,14 @@ "chrome": 52, "edge": 14, "firefox": 52, + "safari": 10.1, + "node": 7, "opera": 39 }, "transform-async-to-generator": { "chrome": 55, "firefox": 52, + "safari": 10.1, "node": 7.6, "opera": 42 }, diff --git a/experimental/babel-preset-env/package.json b/experimental/babel-preset-env/package.json index 9286df8635..92f6aa7d8d 100644 --- a/experimental/babel-preset-env/package.json +++ b/experimental/babel-preset-env/package.json @@ -58,7 +58,7 @@ "babel-preset-es2015": "^6.14.0", "babel-register": "^6.14.0", "chai": "^3.0.0", - "compat-table": "kangax/compat-table#291c758ac618fff6bf5bb2113a5aa046189f93e2", + "compat-table": "kangax/compat-table#c38f039b8ea7fadf347d3e300fec3611645e31e9", "eslint": "^3.13.1", "eslint-config-babel": "^5.0.0", "eslint-plugin-flowtype": "^2.29.1", diff --git a/experimental/babel-preset-env/scripts/build-data.js b/experimental/babel-preset-env/scripts/build-data.js index 2bd017cdc6..fd16232fd0 100644 --- a/experimental/babel-preset-env/scripts/build-data.js +++ b/experimental/babel-preset-env/scripts/build-data.js @@ -16,36 +16,6 @@ const es6Data = require("compat-table/data-es6"); const es6PlusData = require("compat-table/data-es2016plus"); const envs = require("compat-table/environments"); -const invertedEqualsEnv = Object.keys(envs) - .filter((b) => envs[b].equals) - .reduce((a, b) => { - if (!a[envs[b].equals]) { - a[envs[b].equals] = [b]; - } else { - a[envs[b].equals].push(b); - } - return a; - }, {}); - -invertedEqualsEnv.safari5 = ["ios6"]; -if (Array.isArray(invertedEqualsEnv.safari6)) { - invertedEqualsEnv.safari6.push("ios7"); -} else { - invertedEqualsEnv.safari6 = ["ios7"]; -} -invertedEqualsEnv.safari8 = ["ios9"]; - -const compatibilityTests = flattenDeep([ - es6Data, - es6PlusData, -].map((data) => - data.tests.map((test) => { - return test.subtests ? - [test, renameTests(test.subtests, (name) => test.name + " / " + name)] : - test; - }) -)); - const environments = [ "chrome", "opera", @@ -62,6 +32,7 @@ const environments = [ const envMap = { safari51: "safari5", safari71_8: "safari8", + safari10_1: "safari10.1", firefox3_5: "firefox3", firefox3_6: "firefox3", node010: "node0.10", @@ -80,6 +51,46 @@ const envMap = { ios51: "ios5.1", }; +const invertedEqualsEnv = Object.keys(envs) + .filter((b) => envs[b].equals) + .reduce((a, b) => { + const checkEnv = envMap[envs[b].equals] || envs[b].equals; + environments.some((env) => { + // go through all environment names to find the the current one + // and try to get the version as integer + const version = parseFloat(checkEnv.replace(env, "")); + if (!isNaN(version)) { + Object.keys(envs).forEach((equals) => { + equals = envMap[equals] || equals; + // Go through all envs from compat-table and get int version + const equalsVersion = parseFloat(equals.replace(env, "")); + // If the current version is smaller than the version that was mentioned + // in `equals` we can add an entry, as older versions should include features + // that newer ones have + if (!isNaN(equalsVersion) && equalsVersion <= version) { + if (!a[equals]) a[equals] = []; + if (a[equals].indexOf(b) >= 0) return; + a[equals].push(b); + } + }); + return true; + } + }); + + return a; + }, {}); + +const compatibilityTests = flattenDeep([ + es6Data, + es6PlusData, +].map((data) => + data.tests.map((test) => { + return test.subtests ? + [test, renameTests(test.subtests, (name) => test.name + " / " + name)] : + test; + }) +)); + const getLowestImplementedVersion = ({ features }, env) => { const tests = flatten(compatibilityTests .filter((test) => { @@ -130,7 +141,7 @@ const getLowestImplementedVersion = ({ features }, env) => { .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, "")))) + .filter((test) => !isNaN(parseFloat(test.replace(env, "")))) .shift(); }); diff --git a/experimental/babel-preset-env/test/debug-fixtures/built-ins/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/built-ins/stdout.txt index 9d85e62916..c25134be0a 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/built-ins/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/built-ins/stdout.txt @@ -39,19 +39,19 @@ Using polyfills: es6.set {"ie":10,"node":6} es6.weak-map {"ie":10,"node":6} es6.weak-set {"ie":10,"node":6} - es6.reflect.apply {"ie":10,"node":6} - es6.reflect.construct {"ie":10,"node":6} - es6.reflect.define-property {"ie":10,"node":6} - es6.reflect.delete-property {"ie":10,"node":6} - es6.reflect.get {"ie":10,"node":6} - es6.reflect.get-own-property-descriptor {"ie":10,"node":6} - es6.reflect.get-prototype-of {"ie":10,"node":6} - es6.reflect.has {"ie":10,"node":6} - es6.reflect.is-extensible {"ie":10,"node":6} - es6.reflect.own-keys {"ie":10,"node":6} - es6.reflect.prevent-extensions {"ie":10,"node":6} - es6.reflect.set {"ie":10,"node":6} - es6.reflect.set-prototype-of {"ie":10,"node":6} + es6.reflect.apply {"ie":10} + es6.reflect.construct {"ie":10} + es6.reflect.define-property {"ie":10} + es6.reflect.delete-property {"ie":10} + es6.reflect.get {"ie":10} + es6.reflect.get-own-property-descriptor {"ie":10} + es6.reflect.get-prototype-of {"ie":10} + es6.reflect.has {"ie":10} + es6.reflect.is-extensible {"ie":10} + es6.reflect.own-keys {"ie":10} + es6.reflect.prevent-extensions {"ie":10} + es6.reflect.set {"ie":10} + es6.reflect.set-prototype-of {"ie":10} es6.promise {"ie":10,"node":6} es6.symbol {"ie":10,"node":6} es6.object.assign {"ie":10} @@ -65,7 +65,7 @@ Using polyfills: es6.string.starts-with {"ie":10} es6.string.ends-with {"ie":10} es6.string.includes {"ie":10} - es6.regexp.flags {"ie":10,"node":6} + es6.regexp.flags {"ie":10} es6.regexp.match {"ie":10} es6.regexp.replace {"ie":10} es6.regexp.split {"ie":10} @@ -101,7 +101,7 @@ Using polyfills: es6.math.sinh {"ie":10} es6.math.tanh {"ie":10} es6.math.trunc {"ie":10} - es7.array.includes {"ie":10,"node":6} + es7.array.includes {"ie":10} es7.object.values {"ie":10,"node":6} es7.object.entries {"ie":10,"node":6} es7.object.get-own-property-descriptors {"ie":10,"node":6} @@ -110,4 +110,4 @@ Using polyfills: web.timers {"chrome":54,"ie":10,"node":6} web.immediate {"chrome":54,"ie":10,"node":6} web.dom.iterable {"chrome":54,"ie":10,"node":6} -src/in.js -> lib/in.js \ No newline at end of file +src/in.js -> lib/in.js diff --git a/experimental/babel-preset-env/test/debug-fixtures/plugins-only/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/plugins-only/stdout.txt index ec43e49e9f..5263ed559f 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/plugins-only/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/plugins-only/stdout.txt @@ -13,6 +13,5 @@ Using plugins: transform-es2015-for-of {"firefox":52} transform-es2015-function-name {"firefox":52} transform-es2015-literals {"firefox":52} - transform-exponentiation-operator {"node":7.4} syntax-trailing-function-commas {"node":7.4} -src/in.js -> lib/in.js \ No newline at end of file +src/in.js -> lib/in.js diff --git a/experimental/babel-preset-env/yarn.lock b/experimental/babel-preset-env/yarn.lock index caf3cede67..61f4c3d5e0 100644 --- a/experimental/babel-preset-env/yarn.lock +++ b/experimental/babel-preset-env/yarn.lock @@ -1067,9 +1067,9 @@ commoner@^0.10.1: q "^1.1.2" recast "^0.11.17" -compat-table@kangax/compat-table#291c758ac618fff6bf5bb2113a5aa046189f93e2: +compat-table@kangax/compat-table#c38f039b8ea7fadf347d3e300fec3611645e31e9: version "0.0.0" - resolved "https://codeload.github.com/kangax/compat-table/tar.gz/291c758ac618fff6bf5bb2113a5aa046189f93e2" + resolved "https://codeload.github.com/kangax/compat-table/tar.gz/c38f039b8ea7fadf347d3e300fec3611645e31e9" dependencies: babel-core latest babel-polyfill latest