Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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