diff --git a/server/get-browsers.js b/server/get-browsers.js index 4c082694..0e6ab900 100644 --- a/server/get-browsers.js +++ b/server/get-browsers.js @@ -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 = [] @@ -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] } @@ -68,10 +72,12 @@ 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 }) } @@ -79,6 +85,13 @@ export default async function getBrowsers(query, region) { 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) } diff --git a/server/index.js b/server/index.js index eea68987..2c480610 100644 --- a/server/index.js +++ b/server/index.js @@ -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 @@ -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' @@ -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 -}