Skip to content

Commit

Permalink
Add support for ios and android queries
Browse files Browse the repository at this point in the history
  • Loading branch information
marcofugaro committed Nov 29, 2021
1 parent 43ff6be commit 523f3a6
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 3 deletions.
36 changes: 36 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,47 @@ function browserslistToEsbuild(browserslistConfig) {
}

const SUPPORTED_ESBUILD_TARGETS = ['es', 'chrome', 'edge', 'firefox', 'ios', 'node', 'safari']

// https://github.com/eBay/browserslist-config/issues/16#issuecomment-863870093
const UNSUPPORTED = ['android 4']

const replaces = {
ios_saf: 'ios',
android: 'chrome',
}

const separator = ' '

return (
browserslist(browserslistConfig)
// filter out the unsupported ones
.filter((b) => !UNSUPPORTED.some((u) => b.startsWith(u)))
// transform into ['chrome', '88']
.map((b) => b.split(separator))
// replace the similar browser
.map((b) => {
if (replaces[b[0]]) {
b[0] = replaces[b[0]]
}

return b
})
// 11.0-12.0 --> 11.0
.map((b) => {
if (b[1].includes('-')) {
b[1] = b[1].slice(0, b[1].indexOf('-'))
}

return b
})
// 11.0 --> 11
.map((b) => {
if (b[1].endsWith('.0')) {
b[1] = b[1].slice(0, -2)
}

return b
})
// only get the ones supported by esbuild
.filter((b) => SUPPORTED_ESBUILD_TARGETS.includes(b[0]))
// only get the oldest version
Expand Down
24 changes: 21 additions & 3 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ const browserslistToEsbuild = require('../src/index.js')
test('works by passing browsers as array', (t) => {
const target = browserslistToEsbuild(['>0.2%', 'not dead', 'not op_mini all'])

t.deepEqual(target, ['chrome79', 'edge92', 'firefox91', 'safari13.1'])
t.deepEqual(target, ['chrome79', 'edge92', 'firefox91', 'ios12.2', 'safari13.1'])
})

test('works by passing browsers as string', (t) => {
const target = browserslistToEsbuild('last 2 versions')

t.deepEqual(target, ['chrome93', 'edge93', 'firefox92', 'safari14.1'])
t.deepEqual(target, ['chrome93', 'edge93', 'firefox92', 'ios14.5', 'safari14.1'])
})

test('works by loading package.json config', (t) => {
Expand All @@ -20,8 +20,26 @@ test('works by loading package.json config', (t) => {
process.chdir(packageJsonDir) // makes process.cwd() go in that folder

process.env.NODE_ENV = 'production'
t.deepEqual(browserslistToEsbuild(), ['chrome79', 'edge92', 'firefox91', 'safari13.1'])
t.deepEqual(browserslistToEsbuild(), ['chrome79', 'edge92', 'firefox91', 'ios12.2', 'safari13.1'])

process.env.NODE_ENV = 'development'
t.deepEqual(browserslistToEsbuild(), ['chrome94', 'firefox93', 'safari15'])
})

test('works with ios', (t) => {
const target = browserslistToEsbuild('ios >= 9')

t.deepEqual(target, ['ios9'])
})

test('works with android and ios', (t) => {
const target = browserslistToEsbuild('ios >= 11, android >= 5')

t.deepEqual(target, ['chrome94', 'ios11'])
})

test('no support for android 4', (t) => {
const target = browserslistToEsbuild('android >= 4')

t.deepEqual(target, ['chrome94'])
})

0 comments on commit 523f3a6

Please sign in to comment.