Skip to content

Commit

Permalink
Parse region with browserslist.parse
Browse files Browse the repository at this point in the history
  • Loading branch information
sashachabin committed Jul 27, 2022
1 parent 385caf2 commit 85c1472
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 16 deletions.
29 changes: 21 additions & 8 deletions server/get-browsers.js
Expand Up @@ -7,7 +7,11 @@ let { version: bv } = importJSON('./node_modules/browserslist/package.json')
let { version: cv } = importJSON('./node_modules/caniuse-lite/package.json')
let wikipediaLinks = importJSON('../browsers-data/wikipedia-links.json')

export default async function getBrowsers(query, region) {
const GLOBAL_REGION = 'Global'

export default async function getBrowsers(query) {
let region = parseRegionFromQuery(query)

// TODO Add support `Node > 0` query
let loadBrowsersData = async (resolve, reject) => {
let browsersByQuery = []
Expand All @@ -33,11 +37,11 @@ export default async function getBrowsers(query, region) {

browsersGroupsKeys.push(browser)
let [id, version] = browser.split(' ')
let versionCoverage = region
? await getRegionCoverage(id, version, region)
: getGlobalCoverage(id, version)
let versionCoverage = region === GLOBAL_REGION
? getGlobalCoverage(id, version)
: await getRegionCoverage(id, version, region)

let versionData = [version, roundNumber(versionCoverage)]
let versionData = { version, coverage: roundNumber(versionCoverage) }

if (!browsersGroups[id]) {
browsersGroups[id] = { versions: [versionData] }
Expand Down Expand Up @@ -68,17 +72,26 @@ export default async function getBrowsers(query, region) {

resolve({
query,
region,
region: region || GLOBAL_REGION,
coverage: browserslist.coverage(browsersByQuery, region),
bv,
cv,
versions: {
browserslist: bv,
caniuse: cv
},
browsers
})
}

return new Promise(loadBrowsersData)
}

function parseRegionFromQuery(query) {
let queryParsed = browserslist.parse(query)
// TODO Take the most frequent region in large queries?
let firstQueryRegion = queryParsed.find(x => x.place)
return firstQueryRegion ? firstQueryRegion.place : GLOBAL_REGION
}

function getGlobalCoverage(id, version) {
return getCoverage(caniuseAgents[id].usage_global, version)
}
Expand Down
9 changes: 1 addition & 8 deletions server/index.js
Expand Up @@ -4,7 +4,6 @@ import { URL } from 'url'
import getBrowsers from './get-browsers.js'

const DEFAULT_QUERY = 'defaults'
const GLOBAL_REGION = 'Global'
const PORT = process.env.PORT || 5000

http
Expand All @@ -14,10 +13,9 @@ http
if (url.pathname === '/') {
let query = url.searchParams.get('q') || DEFAULT_QUERY
let queryWithoutQuotes = query.replace(/'/g, '')
let region = extractRegionFromQuery(query) || GLOBAL_REGION

try {
let browsers = await getBrowsers(queryWithoutQuotes, region)
let browsers = await getBrowsers(queryWithoutQuotes)
res.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'text/json'
Expand All @@ -35,8 +33,3 @@ http
}
})
.listen(PORT)

function extractRegionFromQuery(query) {
let queryHasIn = query.match(/ in ((?:alt-)?[A-Za-z]{2})(?:,|$)/)
return queryHasIn ? queryHasIn[1] : undefined
}

0 comments on commit 85c1472

Please sign in to comment.