From fee80a2b3acd5b0146291186542668e92ed7cb2a Mon Sep 17 00:00:00 2001 From: Marco Massarotto Date: Thu, 5 Jan 2017 16:15:47 +0000 Subject: [PATCH] Explicitly resolve lowest browser version stop relying on browserlist returning a list sorted by browser version fix #119 --- src/index.js | 6 +- test/fixtures/preset-options/ios-10/actual.js | 1 + .../preset-options/ios-10/expected.js | 1 + .../preset-options/ios-10/options.json | 10 +++ test/fixtures/preset-options/ios-6/actual.js | 1 + .../fixtures/preset-options/ios-6/expected.js | 77 +++++++++++++++++++ .../preset-options/ios-6/options.json | 11 +++ 7 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/preset-options/ios-10/actual.js create mode 100644 test/fixtures/preset-options/ios-10/expected.js create mode 100644 test/fixtures/preset-options/ios-10/options.json create mode 100644 test/fixtures/preset-options/ios-6/actual.js create mode 100644 test/fixtures/preset-options/ios-6/expected.js create mode 100644 test/fixtures/preset-options/ios-6/options.json diff --git a/src/index.js b/src/index.js index 791848c2..857f3cd5 100644 --- a/src/index.js +++ b/src/index.js @@ -77,8 +77,10 @@ const browserNameMap = { const getLowestVersions = (browsers) => { return browsers.reduce((all, browser) => { const [browserName, browserVersion] = browser.split(" "); - if (browserName in browserNameMap) { - all[browserNameMap[browserName]] = parseInt(browserVersion); + const normalizedBrowserName = browserNameMap[browserName]; + const parsedBrowserVersion = parseInt(browserVersion); + if (normalizedBrowserName && !isNaN(parsedBrowserVersion)) { + all[normalizedBrowserName] = Math.min(all[normalizedBrowserName] || Infinity, parsedBrowserVersion); } return all; }, {}); diff --git a/test/fixtures/preset-options/ios-10/actual.js b/test/fixtures/preset-options/ios-10/actual.js new file mode 100644 index 00000000..02d939c5 --- /dev/null +++ b/test/fixtures/preset-options/ios-10/actual.js @@ -0,0 +1 @@ +const a = () => 1; diff --git a/test/fixtures/preset-options/ios-10/expected.js b/test/fixtures/preset-options/ios-10/expected.js new file mode 100644 index 00000000..02d939c5 --- /dev/null +++ b/test/fixtures/preset-options/ios-10/expected.js @@ -0,0 +1 @@ +const a = () => 1; diff --git a/test/fixtures/preset-options/ios-10/options.json b/test/fixtures/preset-options/ios-10/options.json new file mode 100644 index 00000000..25d6c970 --- /dev/null +++ b/test/fixtures/preset-options/ios-10/options.json @@ -0,0 +1,10 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "browsers": ["ios >= 10"] + }, + "modules": false + }] + ] +} diff --git a/test/fixtures/preset-options/ios-6/actual.js b/test/fixtures/preset-options/ios-6/actual.js new file mode 100644 index 00000000..c3fee8a1 --- /dev/null +++ b/test/fixtures/preset-options/ios-6/actual.js @@ -0,0 +1 @@ +import "core-js"; diff --git a/test/fixtures/preset-options/ios-6/expected.js b/test/fixtures/preset-options/ios-6/expected.js new file mode 100644 index 00000000..8fc872b6 --- /dev/null +++ b/test/fixtures/preset-options/ios-6/expected.js @@ -0,0 +1,77 @@ +import "core-js/modules/es6.typed.uint8-clamped-array"; +import "core-js/modules/es6.map"; +import "core-js/modules/es6.set"; +import "core-js/modules/es6.weak-map"; +import "core-js/modules/es6.weak-set"; +import "core-js/modules/es6.reflect.apply"; +import "core-js/modules/es6.reflect.construct"; +import "core-js/modules/es6.reflect.define-property"; +import "core-js/modules/es6.reflect.delete-property"; +import "core-js/modules/es6.reflect.get"; +import "core-js/modules/es6.reflect.get-own-property-descriptor"; +import "core-js/modules/es6.reflect.get-prototype-of"; +import "core-js/modules/es6.reflect.has"; +import "core-js/modules/es6.reflect.is-extensible"; +import "core-js/modules/es6.reflect.own-keys"; +import "core-js/modules/es6.reflect.prevent-extensions"; +import "core-js/modules/es6.reflect.set"; +import "core-js/modules/es6.reflect.set-prototype-of"; +import "core-js/modules/es6.promise"; +import "core-js/modules/es6.symbol"; +import "core-js/modules/es6.object.assign"; +import "core-js/modules/es6.object.is"; +import "core-js/modules/es6.object.set-prototype-of"; +import "core-js/modules/es6.function.name"; +import "core-js/modules/es6.string.raw"; +import "core-js/modules/es6.string.from-code-point"; +import "core-js/modules/es6.string.code-point-at"; +import "core-js/modules/es6.string.repeat"; +import "core-js/modules/es6.string.starts-with"; +import "core-js/modules/es6.string.ends-with"; +import "core-js/modules/es6.string.includes"; +import "core-js/modules/es6.regexp.flags"; +import "core-js/modules/es6.regexp.match"; +import "core-js/modules/es6.regexp.replace"; +import "core-js/modules/es6.regexp.split"; +import "core-js/modules/es6.regexp.search"; +import "core-js/modules/es6.array.from"; +import "core-js/modules/es6.array.of"; +import "core-js/modules/es6.array.copy-within"; +import "core-js/modules/es6.array.find"; +import "core-js/modules/es6.array.find-index"; +import "core-js/modules/es6.array.fill"; +import "core-js/modules/es6.array.iterator"; +import "core-js/modules/es6.number.is-finite"; +import "core-js/modules/es6.number.is-integer"; +import "core-js/modules/es6.number.is-safe-integer"; +import "core-js/modules/es6.number.is-nan"; +import "core-js/modules/es6.number.epsilon"; +import "core-js/modules/es6.number.min-safe-integer"; +import "core-js/modules/es6.number.max-safe-integer"; +import "core-js/modules/es6.math.acosh"; +import "core-js/modules/es6.math.asinh"; +import "core-js/modules/es6.math.atanh"; +import "core-js/modules/es6.math.cbrt"; +import "core-js/modules/es6.math.clz32"; +import "core-js/modules/es6.math.cosh"; +import "core-js/modules/es6.math.expm1"; +import "core-js/modules/es6.math.fround"; +import "core-js/modules/es6.math.hypot"; +import "core-js/modules/es6.math.imul"; +import "core-js/modules/es6.math.log1p"; +import "core-js/modules/es6.math.log10"; +import "core-js/modules/es6.math.log2"; +import "core-js/modules/es6.math.sign"; +import "core-js/modules/es6.math.sinh"; +import "core-js/modules/es6.math.tanh"; +import "core-js/modules/es6.math.trunc"; +import "core-js/modules/es7.array.includes.js"; +import "core-js/modules/es7.object.values"; +import "core-js/modules/es7.object.entries"; +import "core-js/modules/es7.object.get-own-property-descriptors"; +import "core-js/modules/es7.string.pad-start"; +import "core-js/modules/es7.string.pad-end"; +import "core-js/modules/web.timers"; +import "core-js/modules/web.immediate"; +import "core-js/modules/web.dom.iterable"; +import "regenerator-runtime/runtime"; diff --git a/test/fixtures/preset-options/ios-6/options.json b/test/fixtures/preset-options/ios-6/options.json new file mode 100644 index 00000000..9ff144ed --- /dev/null +++ b/test/fixtures/preset-options/ios-6/options.json @@ -0,0 +1,11 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "browsers": ["ios >= 6"] + }, + "modules": false, + "useBuiltIns": true + }] + ] +}