browserslist 4.8.4 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
+ ## 4.9
5
+ * Add `node X-Y` query support (by Yuping Zuo).
6
+
7
+ ## 4.8.7
8
+ * Fix `last N major versions` (by Valeriy Trubachev).
9
+
10
+ ## 4.8.6
11
+ * Fix `Unknown version 10 of op_mob` error in `mobileToDesktop` option.
12
+
13
+ ## 4.8.5
14
+ * Fix `last N browsers` again after new `caniuse-db` API changes.
15
+
4
16
  ## 4.8.4
5
17
  * Fix released versions detection for queries like `last N browsers`.
6
18
  * Add IE 11 Mobile to `dead` browsers.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright 2014 Andrey Sitnik <andrey@sitnik.ru>
3
+ Copyright 2014 Andrey Sitnik <andrey@sitnik.ru> and other contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
package/README.md CHANGED
@@ -37,7 +37,7 @@ not IE_Mob 11
37
37
  maintained node versions
38
38
  ```
39
39
 
40
- Developers set versions list in queries like `last 2 version`
40
+ Developers set their version lists using queries like `last 2 version`
41
41
  to be free from updating versions manually.
42
42
  Browserslist will use [`caniuse-lite`] with [Can I Use] data for this queries.
43
43
 
@@ -91,12 +91,14 @@ Browserslist will take queries from tool option,
91
91
  by user agent string to match Browserslist.
92
92
  * [`browserslist-browserstack`] runs BrowserStack tests for all browsers
93
93
  in Browserslist config.
94
+ * [`browserslist-adobe-analytics`] use Adobe Analytics data to target browsers.
94
95
  * [`caniuse-api`] returns browsers which support some specific feature.
95
96
  * Run `npx browserslist` in your project directory to see project’s
96
97
  target browsers. This CLI tool is built-in and available in any project
97
98
  with Autoprefixer.
98
99
 
99
100
  [`browserslist-useragent-regexp`]: https://github.com/browserslist/browserslist-useragent-regexp
101
+ [`browserslist-adobe-analytics`]: https://github.com/xeroxinteractive/browserslist-adobe-analytics
100
102
  [`browserslist-useragent-ruby`]: https://github.com/browserslist/browserslist-useragent-ruby
101
103
  [`browserslist-browserstack`]: https://github.com/xeroxinteractive/browserslist-browserstack
102
104
  [`browserslist-ga-export`]: https://github.com/browserslist/browserslist-ga-export
@@ -116,9 +118,9 @@ Browserslist will take queries from tool option,
116
118
  ]
117
119
  ```
118
120
 
119
- * If you want to change the default set of browsers we recommend to combine
121
+ * If you want to change the default set of browsers, we recommend combining
120
122
  `last 2 versions`, `not dead` with a usage number like `> 0.2%`. This is
121
- because `last n versions` on its own does not add popular old versions while
123
+ because `last n versions` on its own does not add popular old versions, while
122
124
  only using a percentage above `0.2%` will in the long run make popular
123
125
  browsers even more popular. We might run into a monopoly and stagnation
124
126
  situation, as we had with Internet Explorer 6. Please use this setting
@@ -537,8 +539,8 @@ These browsers account for 83.1% of all users in custom statistics
537
539
 
538
540
  ## Environment Variables
539
541
 
540
- If some tool use Browserslist inside, you can change browsers settings
541
- by [environment variables]:
542
+ If a tool uses Browserslist inside, you can change the Browserslist settings
543
+ with [environment variables]:
542
544
 
543
545
  * `BROWSERSLIST` with browsers queries.
544
546
 
package/index.js CHANGED
@@ -53,7 +53,11 @@ function getMajor (version) {
53
53
 
54
54
  function getMajorVersions (released, number) {
55
55
  if (released.length === 0) return []
56
- var minimum = getMajor(released[released.length - 1]) - parseInt(number) + 1
56
+ var majorVersions = uniq(released.map(getMajor))
57
+ var minimum = majorVersions[majorVersions.length - number]
58
+ if (!minimum) {
59
+ return released
60
+ }
57
61
  var selected = []
58
62
  for (var i = released.length - 1; i >= 0; i--) {
59
63
  if (minimum > getMajor(released[i])) break
@@ -144,6 +148,43 @@ function compareSemver (a, b) {
144
148
  )
145
149
  }
146
150
 
151
+ // this follows the npm-like semver behavior
152
+ function semverFilterLoose (operator, range) {
153
+ range = range.split('.').map(parseSimpleInt)
154
+ if (typeof range[1] === 'undefined') {
155
+ range[1] = 'x'
156
+ }
157
+ // ignore any patch version because we only return minor versions
158
+ // range[2] = 'x'
159
+ switch (operator) {
160
+ case '<=':
161
+ return function (version) {
162
+ version = version.split('.').map(parseSimpleInt)
163
+ return compareSemverLoose(version, range) <= 0
164
+ }
165
+ default:
166
+ case '>=':
167
+ return function (version) {
168
+ version = version.split('.').map(parseSimpleInt)
169
+ return compareSemverLoose(version, range) >= 0
170
+ }
171
+ }
172
+ }
173
+
174
+ // this follows the npm-like semver behavior
175
+ function compareSemverLoose (version, range) {
176
+ if (version[0] !== range[0]) {
177
+ return version[0] < range[0] ? -1 : +1
178
+ }
179
+ if (range[1] === 'x') {
180
+ return 0
181
+ }
182
+ if (version[1] !== range[1]) {
183
+ return version[1] < range[1] ? -1 : +1
184
+ }
185
+ return 0
186
+ }
187
+
147
188
  function resolveVersion (data, version) {
148
189
  if (data.versions.indexOf(version) !== -1) {
149
190
  return version
@@ -186,6 +227,21 @@ function cloneData (data) {
186
227
  }
187
228
  }
188
229
 
230
+ function mapVersions (data, map) {
231
+ data.versions = data.versions.map(function (i) {
232
+ return map[i] || i
233
+ })
234
+ data.released = data.versions.map(function (i) {
235
+ return map[i] || i
236
+ })
237
+ var fixedDate = { }
238
+ for (var i in data.releaseDate) {
239
+ fixedDate[map[i] || i] = data.releaseDate[i]
240
+ }
241
+ data.releaseDate = fixedDate
242
+ return data
243
+ }
244
+
189
245
  function byName (name, context) {
190
246
  name = name.toLowerCase()
191
247
  name = browserslist.aliases[name] || name
@@ -196,6 +252,9 @@ function byName (name, context) {
196
252
  } else {
197
253
  var cloned = cloneData(desktop)
198
254
  cloned.name = name
255
+ if (name === 'op_mob') {
256
+ cloned = mapVersions(cloned, { '10.0-10.1': '10' })
257
+ }
199
258
  return cloned
200
259
  }
201
260
  }
@@ -848,6 +907,31 @@ var QUERIES = [
848
907
  })
849
908
  }
850
909
  },
910
+ {
911
+ regexp: /^node\s+([\d.]+)\s*-\s*([\d.]+)$/i,
912
+ select: function (context, from, to) {
913
+ var nodeVersions = jsReleases.filter(function (i) {
914
+ return i.name === 'nodejs'
915
+ }).map(function (i) {
916
+ return i.version
917
+ })
918
+ var semverRegExp = /^(0|[1-9]\d*)(\.(0|[1-9]\d*)){0,2}$/
919
+ if (!semverRegExp.test(from)) {
920
+ throw new BrowserslistError(
921
+ 'Unknown version ' + from + ' of Node.js')
922
+ }
923
+ if (!semverRegExp.test(to)) {
924
+ throw new BrowserslistError(
925
+ 'Unknown version ' + to + ' of Node.js')
926
+ }
927
+ return nodeVersions
928
+ .filter(semverFilterLoose('>=', from))
929
+ .filter(semverFilterLoose('<=', to))
930
+ .map(function (v) {
931
+ return 'node ' + v
932
+ })
933
+ }
934
+ },
851
935
  {
852
936
  regexp: /^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i,
853
937
  select: function (context, name, from, to) {
@@ -1051,7 +1135,7 @@ var QUERIES = [
1051
1135
  browserslist.data[name] = {
1052
1136
  name: name,
1053
1137
  versions: normalize(agents[name].versions),
1054
- released: normalize(agents[name].versions.slice(0, -2)),
1138
+ released: normalize(agents[name].versions.slice(0, -3)),
1055
1139
  releaseDate: agents[name].release_date
1056
1140
  }
1057
1141
  fillUsage(browserslist.usage.global, name, browser.usage_global)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.8.4",
3
+ "version": "4.9.0",
4
4
  "description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
5
5
  "keywords": [
6
6
  "caniuse",
@@ -15,9 +15,9 @@
15
15
  "license": "MIT",
16
16
  "repository": "browserslist/browserslist",
17
17
  "dependencies": {
18
- "caniuse-lite": "^1.0.30001021",
19
- "electron-to-chromium": "^1.3.338",
20
- "node-releases": "^1.1.46"
18
+ "caniuse-lite": "^1.0.30001030",
19
+ "electron-to-chromium": "^1.3.361",
20
+ "node-releases": "^1.1.50"
21
21
  },
22
22
  "bin": "./cli.js",
23
23
  "browser": {
@@ -26,9 +26,5 @@
26
26
  },
27
27
  "eslintIgnore": [
28
28
  "test/fixtures"
29
- ],
30
- "sharec": {
31
- "config": "@logux/sharec-config",
32
- "version": "0.5.6"
33
- }
29
+ ]
34
30
  }