Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Throw errors on wrong feature and region names from Can I Use #714

Merged
merged 2 commits into from Jul 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 12 additions & 3 deletions node.js
Expand Up @@ -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] = {}
Expand All @@ -258,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) {
Expand Down
10 changes: 9 additions & 1 deletion 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('..')
Expand Down Expand Up @@ -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)
})
Expand Down
6 changes: 5 additions & 1 deletion 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('..')
Expand All @@ -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: {
Expand Down