UNPKG

7.64 kBMarkdownView Raw
1# browserslist-useragent-regexp
2
3[![NPM version][npm]][npm-url]
4[![Node version][node]][node-url]
5[![Dependencies status][deps]][deps-url]
6[![Build status][build]][build-url]
7[![Coverage status][coverage]][coverage-url]
8[![Dependabot badge][dependabot]][dependabot-url]
9[![Documentation badge][documentation]][documentation-url]
10
11[npm]: https://img.shields.io/npm/v/browserslist-useragent-regexp.svg
12[npm-url]: https://npmjs.com/package/browserslist-useragent-regexp
13
14[node]: https://img.shields.io/node/v/browserslist-useragent-regexp.svg
15[node-url]: https://nodejs.org
16
17[deps]: https://david-dm.org/browserslist/browserslist-useragent-regexp.svg
18[deps-url]: https://david-dm.org/browserslist/browserslist-useragent-regexp
19
20[build]: http://img.shields.io/travis/com/browserslist/browserslist-useragent-regexp/master.svg
21[build-url]: https://travis-ci.com/browserslist/browserslist-useragent-regexp
22
23[coverage]: https://img.shields.io/coveralls/browserslist/browserslist-useragent-regexp.svg
24[coverage-url]: https://coveralls.io/r/browserslist/browserslist-useragent-regexp
25
26[dependabot]: https://api.dependabot.com/badges/status?host=github&repo=browserslist/browserslist-useragent-regexp
27[dependabot-url]: https://dependabot.com/
28
29[documentation]: https://img.shields.io/badge/API-Documentation-2b7489.svg
30[documentation-url]: https://browserslist.github.io/browserslist-useragent-regexp
31
32A utility to compile [browserslist query](https://github.com/browserslist/browserslist#queries) to a RegExp to test browser useragent. Simplest example: you can detect supported browsers on client-side.
33
341) Create `.browserslistrc` config, for example like this:
35
36```
37last 2 versions
38not dead
39```
40
412) Add script to `package.json`:
42
43```json
44{
45 "scripts": {
46 "supportedBrowsers": "echo \"module.exports = $(browserslist-useragent-regexp --allowHigherVersions);\" > supportedBrowsers.js"
47 }
48}
49```
50
51<details>
52 <summary>for Windows users</summary>
53
54```json
55{
56 "scripts": {
57 "supportedBrowsers": "(echo module.exports = && browserslist-useragent-regexp --allowHigherVersions) > supportedBrowsers.js"
58 }
59}
60```
61
62</details>
63
643) Run this script, to compile RegExp:
65
66```bash
67npm run supportedBrowsers
68# or
69yarn supportedBrowsers
70```
71
72`supportedBrowsers.js`:
73
74```js
75module.exports = /((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(11[_\.](3|4)|12[_\.](0|1))(?:[_\.]\d+)?)|(OperaMini(?:\/att)?\/?(\d+)?(?:\.\d+)?(?:\.\d+)?)|(Opera\/.+Opera Mobi.+Version\/46\.0)|(Opera\/46\.0.+Opera Mobi)|(Opera Mobi.+Opera(?:\/|\s+)46\.0)|(SamsungBrowser\/(8|9)\.2)|(Edge\/(17|18)(?:\.0)?)|(HeadlessChrome(?:\/(72|73)\.0\.\d+)?)|((Chromium|Chrome)\/(72|73)\.0(?:\.\d+)?)|(IEMobile[ \/]11\.0)|(Version\/12\.(0|1)(?:\.\d+)?.*Safari\/)|(Trident\/7\.0)|(Firefox\/(65|66)\.0\.\d+)|(Firefox\/(65|66)\.0(pre|[ab]\d+[a-z]*)?)|(([MS]?IE) 11\.0)/;
76```
77
784) Import RegExp from created file:
79
80```js
81const supportedBrowsers = require('./supportedBrowsers');
82
83if (supportedBrowsers.test(navigator.userAgent)) {
84 alert('Your browser is supported.');
85}
86```
87
88## Install
89
90```bash
91npm i -D browserslist-useragent-regexp
92# or
93yarn add -D browserslist-useragent-regexp
94```
95
96## Why?
97
98As was written in article ["Smart Bundling: Shipping legacy code to only legacy browsers"](https://www.smashingmagazine.com/2018/10/smart-bundling-legacy-code-browsers/): you can determinate, which bundle you should give to browser from server with [`browserslist-useragent`](https://github.com/browserslist/browserslist-useragent). But in this case you must have your own server with special logic. Now, with `browserslist-useragent-regexp`, you can move that to client-side.
99
100Development was inspired by [this proposal from Mathias Bynens](https://twitter.com/mathias/status/1105857829393653761).
101
102[Demo](https://browserslist.github.io/browserslist-useragent-regexp/demo.html) ([sources](https://github.com/browserslist/browserslist-useragent-regexp/blob/7cf6afb7da2b6c77179abb8b8bd1bbcb61cf376a/docs/demo.html#L17-L29), [build script](https://github.com/browserslist/browserslist-useragent-regexp/blob/7cf6afb7da2b6c77179abb8b8bd1bbcb61cf376a/examples/buildDemo.js#L61-L74)).
103
104## CLI
105
106```bash
107npx browserslist-useragent-regexp [query] [...options]
108# or
109yarn exec -- browserslist-useragent-regexp [query] [...options]
110```
111
112| Option | Description | Default |
113|--------|-------------|---------|
114| query | Manually provide a browserslist query. Specifying this overrides the browserslist configuration specified in your project. | |
115| &#x2011;&#x2011;help, -h | Print this message. | |
116| &#x2011;&#x2011;verbose, -v | Print additional info about RegExps. | |
117| &#x2011;&#x2011;ignorePatch | Ignore differences in patch browser numbers. | `true` |
118| &#x2011;&#x2011;ignoreMinor | Ignore differences in minor browser versions. | `false` |
119| &#x2011;&#x2011;allowHigherVersions | 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. | `false` |
120| &#x2011;&#x2011;allowZeroSubversions | Ignore match of patch or patch and minor, if they are 0. | `false` |
121
122## JS API basics
123
124Module exposes two main methods:
125
126### [getUserAgentRegExps(options)](https://browserslist.github.io/browserslist-useragent-regexp/modules/_useragentregexp_useragentregexp_.html#getuseragentregexps)
127
128Compile browserslist query to [RegExps for each browser](#regexp-info-object).
129
130### [getUserAgentRegExp(options)](https://browserslist.github.io/browserslist-useragent-regexp/modules/_useragentregexp_useragentregexp_.html#getuseragentregexp)
131
132Compile browserslist query to one RegExp.
133
134> [Description of all methods you can find in Documentation.](https://browserslist.github.io/browserslist-useragent-regexp/index.html)
135
136#### Options
137
138| Option | Type | Default | Description |
139|--------|------|---------|-------------|
140| browsers | `string \| string[]` | — | Manually provide a browserslist query (or an array of queries). Specifying this overrides the browserslist configuration specified in your project. |
141| env | `string` | — | When multiple browserslist [environments](https://github.com/ai/browserslist#environments) are specified, pick the config belonging to this environment. |
142| ignorePatch | `boolean` | `true` | Ignore differences in patch browser numbers. |
143| ignoreMinor | `boolean` | `false` | Ignore differences in minor browser versions. |
144| 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. |
145| allowZeroSubversions | `boolean` | `false` | Ignore match of patch or patch and minor, if they are 0. |
146
147#### RegExp info object
148
149| Property | Type | Description |
150|----------|------|-------------|
151| family | `string` | Browser family. |
152| requestVersions | `[number, number, number][]` | Versions provided by browserslist. |
153| regExp | `RegExp` | RegExp to match useragent with family and versions. |
154| sourceRegExp | `RegExp` | Original useragent RegExp, without versions. |
155| resultFixedVersion | `[number, number, number] \| null` | Useragent version of RegExp. |
156| resultMinVersion | `[number, number, number] \| null` | Useragent min version of RegExp. |
157| resultMaxVersion | `[number, number, number] \| null` | Useragent max version of RegExp. |
158
159## Other
160
161- [Supported browsers](https://github.com/browserslist/browserslist-useragent#supported-browsers)
162- [Notes](https://github.com/browserslist/browserslist-useragent#notes)
163- [When querying for modern browsers](https://github.com/browserslist/browserslist-useragent#when-querying-for-modern-browsers)