From c1ea71dc30afcac7c735340c43ee69d27d925e9a Mon Sep 17 00:00:00 2001 From: Alexander Chabin Date: Wed, 27 Jul 2022 06:42:54 +0500 Subject: [PATCH 1/2] Throw an error on wrong region name from Can I Use --- node.js | 7 ++++++- test/country.test.js | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/node.js b/node.js index 5db06a67..c49f26f8 100644 --- a/node.js +++ b/node.js @@ -243,7 +243,12 @@ module.exports = { loadCountry: function loadCountry(usage, country, data) { var code = country.replace(/[^\w-]/g, '') if (!usage[code]) { - var compressed = require('caniuse-lite/data/regions/' + code + '.js') + var compressed + try { + compressed = require('caniuse-lite/data/regions/' + code + '.js') + } catch (e) { + throw new BrowserslistError("Unknown region name `" + code + "`.") + } var usageData = region(compressed) normalizeUsageData(usageData, data) usage[country] = {} diff --git a/test/country.test.js b/test/country.test.js index 4f03001e..9c1f1dd6 100644 --- a/test/country.test.js +++ b/test/country.test.js @@ -1,5 +1,5 @@ let { test } = require('uvu') -let { is, equal } = require('uvu/assert') +let { is, equal, throws } = require('uvu/assert') delete require.cache[require.resolve('..')] let browserslist = require('..') @@ -71,10 +71,18 @@ test('loads country from Can I Use', () => { is(browserslist('> 1% in RU').length > 0, true) }) +test('throw an error on wrong country name from Can I Use', () => { + throws(() => browserslist('> 1% in __'), /Unknown region name/) +}) + test('loads continents from Can I Use', () => { is(browserslist('> 1% in alt-AS').length > 0, true) }) +test('throw an error on wrong continent name from Can I Use', () => { + throws(() => browserslist('> 1% in alt-__'), /Unknown region name/) +}) + test('allows omission of the space between the > and the percentage', () => { is(browserslist('>10% in US').length > 0, true) }) From efabcd076f29bd27a8c812a1c5b99f9e0bafd93a Mon Sep 17 00:00:00 2001 From: Alexander Chabin Date: Wed, 27 Jul 2022 06:45:53 +0500 Subject: [PATCH 2/2] Throw an error on wrong feature name from Can I Use --- node.js | 8 ++++++-- test/feature.test.js | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/node.js b/node.js index c49f26f8..a3c7ef7e 100644 --- a/node.js +++ b/node.js @@ -263,8 +263,12 @@ module.exports = { loadFeature: function loadFeature(features, name) { name = name.replace(/[^\w-]/g, '') if (features[name]) return - - var compressed = require('caniuse-lite/data/features/' + name + '.js') + var compressed + try { + compressed = require('caniuse-lite/data/features/' + name + '.js') + } catch (e) { + throw new BrowserslistError("Unknown feature name `" + name + "`.") + } var stats = feature(compressed).stats features[name] = {} for (var i in stats) { diff --git a/test/feature.test.js b/test/feature.test.js index 44b91aca..43db21ff 100644 --- a/test/feature.test.js +++ b/test/feature.test.js @@ -1,5 +1,5 @@ let { test } = require('uvu') -let { equal, is } = require('uvu/assert') +let { equal, is, throws } = require('uvu/assert') delete require.cache[require.resolve('..')] let browserslist = require('..') @@ -24,6 +24,10 @@ test('load features from Can I Use', () => { is(browserslist('supports objectrtc').length > 0, true) }) +test('throw an error on wrong feature name from Can I Use', () => { + throws(() => browserslist('supports wrong-feature-name'), /Unknown feature name/) +}) + test('selects browsers by feature', () => { browserslist.cache = { rtcpeerconnection: {