Skip to content

Commit

Permalink
feat: allow all browserslist options via JS API (#1489)
Browse files Browse the repository at this point in the history
  • Loading branch information
steverep committed Jun 16, 2023
1 parent a067f9a commit 38d1e23
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 24 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,13 @@ Compile browserslist query to one regex.
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| browsers | `string \| string[]` | — | Manually provide a browserslist query (or an array of queries). Specifying this overrides the browserslist configuration specified in your project. |
| env | `string` | — | When multiple browserslist [environments](https://github.com/ai/browserslist#environments) are specified, pick the config belonging to this environment. |
| ignorePatch | `boolean` | `true` | Ignore differences in patch browser numbers. |
| ignoreMinor | `boolean` | `false` | Ignore differences in minor browser versions. |
| allowHigherVersions | `boolean` | `false` | For all the browsers in the browserslist query, return a match if the useragent version is equal to or higher than the one specified in browserslist. |
| allowZeroSubversions | `boolean` | `false` | Ignore match of patch or patch and minor, if they are 0. |
Any of the [`browserslist` API options](https://github.com/browserslist/browserslist#js-api) may also be provided.
#### Regex info object
| Property | Type | Description |
Expand Down
8 changes: 2 additions & 6 deletions src/browsers/browserslist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,9 @@ export function parseBrowsersList(browsersList: string[]) {
export function getBrowsersList(options: BrowserslistRequest = {}) {
const {
browsers,
env,
path
...browserslistOptions
} = options
const browsersList = browserslist(browsers, {
env,
path
})
const browsersList = browserslist(browsers, browserslistOptions)
const parsedBrowsers = parseBrowsersList(browsersList)

return parsedBrowsers
Expand Down
8 changes: 4 additions & 4 deletions src/browsers/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type browserslist from 'browserslist'
import type { Options } from 'browserslist'
import type {
Semver,
RangedSemver
Expand All @@ -8,10 +10,8 @@ export interface Browser {
version: Semver
}

export interface BrowserslistRequest {
browsers?: string | string[]
env?: string
path?: string
export interface BrowserslistRequest extends Options {
browsers?: Parameters<typeof browserslist>[0]
}

export type BrowsersVersions = Map<string, Semver[]>
Expand Down
17 changes: 4 additions & 13 deletions src/useragentRegex/useragentRegex.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { SemverCompareOptions } from '../semver/index.js'
import { getRegexesForBrowsers } from '../useragent/index.js'
import {
getBrowsersList,
Expand All @@ -15,29 +16,19 @@ export const defaultOptions = {
ignorePatch: true,
allowZeroSubversions: false,
allowHigherVersions: false
}
} as const satisfies Required<SemverCompareOptions>

/**
* Get source regexes objects from browserslist query.
* @param options - Browserslist and semver compare options.
* @returns Source regexes objects.
*/
export function getPreUserAgentRegexes(options: UserAgentRegexOptions = {}) {
const {
browsers,
env,
path,
...otherOptions
} = options
const finalOptions = {
...defaultOptions,
...otherOptions
...options
}
const browsersList = getBrowsersList({
browsers,
env,
path
})
const browsersList = getBrowsersList(finalOptions)
const mergedBrowsers = mergeBrowserVersions(browsersList)
const sourceRegexes = getRegexesForBrowsers(mergedBrowsers, finalOptions)
const versionedRegexes = applyVersionsToRegexes(sourceRegexes, finalOptions)
Expand Down

0 comments on commit 38d1e23

Please sign in to comment.