Skip to content

Commit

Permalink
Simplify getBrowsers() function (browserslist#438)
Browse files Browse the repository at this point in the history
* Remove unused the check for unique browsers

* Replace `return Promise(cb)` to `async` function

* Add simple coverage test `>1%`
  • Loading branch information
sashachabin committed Aug 19, 2022
1 parent ba782a6 commit 159cc9f
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 82 deletions.
140 changes: 58 additions & 82 deletions server/lib/get-browsers.js
Expand Up @@ -10,98 +10,74 @@ export const QUERY_DEFAULTS = 'defaults'
export const REGION_GLOBAL = 'Global'

export default async function getBrowsers(query, region) {
let loadBrowsersData = async (resolve, reject) => {
let browsersByQuery = []

try {
browsersByQuery = browserslist(query)
} catch (error) {
reject(
error.browserslist
? error
: new Error(`Unknown browser query \`${query}\`.`)
)
return
}
let browsersByQuery = []

let browsersGroups = {}
let browsersGroupsKeys = []
try {
browsersByQuery = browserslist(query)
} catch (error) {
throw error.browserslist
? error
: new Error(`Unknown browser query \`${query}\`.`)
}

for (let browser of browsersByQuery) {
if (browsersGroupsKeys.includes(browser)) {
return
}
let browsersNames = {}
for (let browser of browsersByQuery) {
let [id, version] = browser.split(' ')
let versionCoverage = null

browsersGroupsKeys.push(browser)
let [id, version] = browser.split(' ')
let versionCoverage = null

if (id !== 'node') {
try {
versionCoverage =
region === REGION_GLOBAL
? getGlobalCoverage(id, version)
: await getRegionCoverage(id, version, region)
} catch (error) {
reject(error)
}
}
if (id !== 'node') {
versionCoverage =
region === REGION_GLOBAL
? getGlobalCoverage(id, version)
: await getRegionCoverage(id, version, region)
}

let versionData = { [`${version}`]: roundNumber(versionCoverage) }
let versionData = { [`${version}`]: roundNumber(versionCoverage) }

if (!browsersGroups[id]) {
browsersGroups[id] = { versions: versionData }
} else {
Object.assign(browsersGroups[id].versions, versionData)
}
if (!browsersNames[id]) {
browsersNames[id] = { versions: versionData }
} else {
Object.assign(browsersNames[id].versions, versionData)
}
}

let browsers = Object.entries(browsersGroups)
.map(([id, { versions }]) => {
let name
let coverage

// The Node.js is not in the Can I Use db
if (id === 'node') {
name = 'Node'
coverage = null
} else {
name = caniuseAgents[id].browser
coverage = roundNumber(
Object.values(versions).reduce((a, b) => a + b, 0)
)
}

return {
id,
name,
coverage,
versions
}
})
.sort((a, b) => b.coverage - a.coverage)

let coverage

try {
coverage = roundNumber(browserslist.coverage(browsersByQuery, region))
} catch (error) {
reject(error)
}
let browsers = Object.entries(browsersNames)
.map(([id, { versions }]) => {
let name
let coverage

resolve({
query,
region,
coverage,
versions: {
browserslist: bv,
caniuse: cv
},
browsers
// The Node.js is not in the Can I Use db
if (id === 'node') {
name = 'Node'
coverage = null
} else {
name = caniuseAgents[id].browser
coverage = roundNumber(
Object.values(versions).reduce((a, b) => a + b, 0)
)
}

return {
id,
name,
coverage,
versions
}
})
.sort((a, b) => b.coverage - a.coverage)

let coverage = roundNumber(browserslist.coverage(browsersByQuery, region))

return {
query,
region,
coverage,
versions: {
browserslist: bv,
caniuse: cv
},
browsers
}

return new Promise(loadBrowsersData)
}

function getGlobalCoverage(id, version) {
Expand Down
9 changes: 9 additions & 0 deletions server/test/browsers.test.js
Expand Up @@ -14,6 +14,15 @@ test('Throws error for wrong browserslist `query`', async () => {
match(error.message, /Unknown browser query/)
})

test('Returns multiple browser names and versions by `>1%` query', async () => {
let data = await getBrowsers('>1%', 'Global')
let browsersNames = data.browsers
let browsersVersions = Object.keys(browsersNames[0])

ok(browsersNames.length > 0)
ok(browsersVersions.length > 0)
})

test('Throws error for wrong Can I Use `region`', async () => {
let error
try {
Expand Down

0 comments on commit 159cc9f

Please sign in to comment.