diff --git a/index.js b/index.js index af5fe8ba..4f6cc52a 100644 --- a/index.js +++ b/index.js @@ -831,19 +831,24 @@ var QUERIES = [ } var usage = context.customUsage return Object.keys(usage).reduce(function (result, version) { + var percentage = usage[version] + if (percentage == null) { + return result + } + if (sign === '>') { - if (usage[version] > popularity) { + if (percentage > popularity) { result.push(version) } } else if (sign === '<') { - if (usage[version] < popularity) { + if (percentage < popularity) { result.push(version) } } else if (sign === '<=') { - if (usage[version] <= popularity) { + if (percentage <= popularity) { result.push(version) } - } else if (usage[version] >= popularity) { + } else if (percentage >= popularity) { result.push(version) } return result @@ -866,19 +871,24 @@ var QUERIES = [ } var usage = context.customUsage return Object.keys(usage).reduce(function (result, version) { + var percentage = usage[version] + if (percentage == null) { + return result + } + if (sign === '>') { - if (usage[version] > popularity) { + if (percentage > popularity) { result.push(version) } } else if (sign === '<') { - if (usage[version] < popularity) { + if (percentage < popularity) { result.push(version) } } else if (sign === '<=') { - if (usage[version] <= popularity) { + if (percentage <= popularity) { result.push(version) } - } else if (usage[version] >= popularity) { + } else if (percentage >= popularity) { result.push(version) } return result @@ -897,19 +907,24 @@ var QUERIES = [ env.loadCountry(browserslist.usage, place, browserslist.data) var usage = browserslist.usage[place] return Object.keys(usage).reduce(function (result, version) { + var percentage = usage[version] + if (percentage == null) { + return result + } + if (sign === '>') { - if (usage[version] > popularity) { + if (percentage > popularity) { result.push(version) } } else if (sign === '<') { - if (usage[version] < popularity) { + if (percentage < popularity) { result.push(version) } } else if (sign === '<=') { - if (usage[version] <= popularity) { + if (percentage <= popularity) { result.push(version) } - } else if (usage[version] >= popularity) { + } else if (percentage >= popularity) { result.push(version) } return result diff --git a/test/and.test.js b/test/and.test.js index 2391cab7..c00dd97f 100644 --- a/test/and.test.js +++ b/test/and.test.js @@ -1,5 +1,5 @@ let { test } = require('uvu') -let { is, equal } = require('uvu/assert') +let { equal } = require('uvu/assert') let { join } = require('path') delete require.cache[require.resolve('..')] @@ -36,7 +36,7 @@ test('query composition with AND operator', () => { }) test('correctly works with not and one-version browsers as AND query', () => { - is(browserslist('last 1 Baidu version and not <2% in AT').length, 0) + equal(browserslist('last 1 Baidu version and not <2% in AT'), ['baidu 7.12']) }) test('reads config from package.json', () => { diff --git a/test/country.test.js b/test/country.test.js index bcb20169..4f03001e 100644 --- a/test/country.test.js +++ b/test/country.test.js @@ -9,6 +9,7 @@ let originUsage = browserslist.usage test.before.each(() => { browserslist.usage = { US: { + 'chrome 999': null, // unreleased 'ie 8': 1, 'ie 9': 5, 'ie 10': 10.1, diff --git a/test/fixtures/stats.json b/test/fixtures/stats.json index 62d4cd0c..a8353ce2 100644 --- a/test/fixtures/stats.json +++ b/test/fixtures/stats.json @@ -10,7 +10,8 @@ "34": 0.2, "35": 0.7, "36": 2.3, - "37": 3.5 + "37": 3.5, + "999": null } } } diff --git a/test/main.test.js b/test/main.test.js index e02d610a..b313d634 100644 --- a/test/main.test.js +++ b/test/main.test.js @@ -257,7 +257,7 @@ test('uses production environment by default', () => { }) test('correctly works with not and one-version browsers', () => { - is(browserslist('last 1 Baidu version, not <2% in AT').length, 0) + equal(browserslist('last 1 Baidu version, not <2% in AT'), ['baidu 7.12']) }) test.run() diff --git a/test/shareable-stats.test.js b/test/shareable-stats.test.js index 9b9b750a..918432ce 100644 --- a/test/shareable-stats.test.js +++ b/test/shareable-stats.test.js @@ -47,6 +47,15 @@ test('takes stats and queries from shareable config', async () => { equal(browserslist('extends browserslist-config-test2'), ['ie 11']) }) +test('ignores null usage value', async () => { + await mock( + 'browserslist-config-null-test', + undefined, + { chrome: { 90: 3, 999: null } } + ) + equal(browserslist('< 5% in browserslist-config-null-test stats'), ['chrome 90']) +}) + test('works with non-prefixed stats with dangerousExtend', async () => { await mock('pkg', undefined, { chrome: { 78: 6 } }) equal(