diff --git a/packages/babel-preset-env/data/built-ins.json b/packages/babel-preset-env/data/built-ins.json index 8e2d257077..990d1e0d60 100644 --- a/packages/babel-preset-env/data/built-ins.json +++ b/packages/babel-preset-env/data/built-ins.json @@ -284,7 +284,7 @@ "edge": "12", "firefox": "2", "safari": "3.1", - "node": "0.12", + "node": "0.10", "ie": "10", "android": "4", "ios": "6", @@ -300,7 +300,7 @@ "node": "0.10", "ie": "9", "android": "4", - "ios": "7", + "ios": "6", "phantom": "2", "electron": "5" }, @@ -320,7 +320,7 @@ "edge": "12", "firefox": "2", "safari": "4", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "6", "phantom": "2", @@ -1091,7 +1091,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1102,7 +1102,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1113,7 +1113,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1124,7 +1124,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1155,7 +1155,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1166,7 +1166,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1177,7 +1177,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1208,7 +1208,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1229,7 +1229,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1280,7 +1280,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1301,7 +1301,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1312,7 +1312,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1323,7 +1323,7 @@ "edge": "12", "firefox": "17", "safari": "6", - "node": "0.12", + "node": "0.10", "android": "4", "ios": "7", "phantom": "2", @@ -1358,7 +1358,7 @@ "edge": "12", "firefox": "15", "safari": "5.1", - "node": "0.12", + "node": "0.10", "ie": "10", "android": "4", "ios": "6", diff --git a/packages/babel-preset-env/scripts/build-data.js b/packages/babel-preset-env/scripts/build-data.js index 7e1b2289f9..cea4a0d5cc 100644 --- a/packages/babel-preset-env/scripts/build-data.js +++ b/packages/babel-preset-env/scripts/build-data.js @@ -193,27 +193,40 @@ const getLowestImplementedVersion = ({ features }, env) => { // // NOTE: when/if compat-table adds a babel7 key, we'll want to update this if (!test.babel6corejs2 && isBuiltIn) { - return "-1"; + return { + version: "0.0.0", + semver: "0.0.0", + implements: true, + }; } - 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 and get version from full string. - .map(test => { - return test.replace("_", ".").replace(env, ""); - }) - // version must be label from the unreleasedLabels (like tp) or number. - .filter( - version => - unreleasedLabelForEnv === version || !isNaN(parseFloat(version)) - ) - .shift() - ); + const reportedVersions = Object.keys(test) + .filter(t => t.startsWith(env)) + .map(t => { + const version = t.replace("_", ".").replace(env, ""); + return { + version, + semver: semver.coerce(version) || version, + // Babel assumes strict mode + implements: tests[i].res[t] === true || tests[i].res[t] === "strict", + }; + }) + // version must be label from the unreleasedLabels (like tp) or number. + .filter( + version => + unreleasedLabelForEnv === version.version || + !isNaN(parseFloat(version.version)) + ) + // Sort in asc order, with unreleasedLabelForEnv coming last. + .sort(({ semver: av }, { semver: bv }) => { + if (av === unreleasedLabelForEnv) return 1; + if (bv === unreleasedLabelForEnv) return -1; + if (semver.gt(av, bv)) return 1; + if (semver.gt(bv, av)) return -1; + return 0; + }); + + return reportedVersions.find(version => version.implements); }); const envFiltered = envTests.filter(t => t); @@ -229,15 +242,16 @@ const getLowestImplementedVersion = ({ features }, env) => { return null; } - return envTests - .map(str => str.replace(env, "")) - .reduce((a, b) => { - if (a === unreleasedLabelForEnv || b === unreleasedLabelForEnv) { - return unreleasedLabelForEnv; - } + return envFiltered.reduce((a, b) => { + if ( + a.semver === unreleasedLabelForEnv || + b.semver === unreleasedLabelForEnv + ) { + return unreleasedLabelForEnv; + } - return semver.lt(semver.coerce(a), semver.coerce(b)) ? b : a; - }); + return semver.lt(a.semver, b.semver) ? b : a; + }); }; const generateData = (environments, features) => { @@ -254,7 +268,7 @@ const generateData = (environments, features) => { const version = getLowestImplementedVersion(options, env); if (version !== null) { - const versionString = version.toString(); + const versionString = version.version; // NOTE(bng): A number of environments in compat-table changed to // include a trailing zero (node10 -> node10_0), so for now stripping