browserslist 2.3.3 → 2.4.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,9 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
+ ## 2.4
5
+ * Add `last n major versions` query (by John Sanders).
6
+
4
7
  ## 2.3.3
5
8
  * Fix browsers support.
6
9
 
package/README.md CHANGED
@@ -79,6 +79,10 @@ You can specify the versions by queries (case insensitive):
79
79
 
80
80
  * `last 2 versions`: the last 2 versions for each browser.
81
81
  * `last 2 Chrome versions`: the last 2 versions of Chrome browser.
82
+ * `last 2 major versions`: all minor/patch releases of the current
83
+ and previous major versions.
84
+ * `last 2 iOS major versions`: all minor/patch releases of the current
85
+ and previous major versions of iOS Safari.
82
86
  * `> 5%` or `>= 5%`: versions selected by global usage statistics.
83
87
  * `> 5% in US`: uses USA usage statistics. It accepts [two-letter country code].
84
88
  * `> 5% in alt-AS`: uses Asia region usage statistics. List of all region codes
package/index.js CHANGED
@@ -11,6 +11,27 @@ function normalize (versions) {
11
11
  })
12
12
  }
13
13
 
14
+ function nameMapper (name) {
15
+ return function mapName (version) {
16
+ return name + ' ' + version
17
+ }
18
+ }
19
+
20
+ function getMajor (version) {
21
+ return parseInt(version.split('.')[0])
22
+ }
23
+
24
+ function getMajorVersions (released, number) {
25
+ if (released.length === 0) return []
26
+ var minimum = getMajor(released[released.length - 1]) - parseInt(number) + 1
27
+ var selected = []
28
+ for (var i = released.length - 1; i >= 0; i--) {
29
+ if (minimum > getMajor(released[i])) break
30
+ selected.unshift(released[i])
31
+ }
32
+ return selected
33
+ }
34
+
14
35
  var env = process.env
15
36
 
16
37
  // eslint-disable-next-line security/detect-unsafe-regex
@@ -461,6 +482,21 @@ browserslist.clearCaches = function () {
461
482
  }
462
483
 
463
484
  var QUERIES = [
485
+ {
486
+ regexp: /^last\s+(\d+)\s+major versions?$/i,
487
+ select: function (context, versions) {
488
+ var selected = []
489
+ Object.keys(agents).forEach(function (name) {
490
+ var data = byName(name)
491
+ if (!data) return
492
+ var array = getMajorVersions(data.released, versions)
493
+
494
+ array = array.map(nameMapper(data.name))
495
+ selected = selected.concat(array)
496
+ })
497
+ return selected
498
+ }
499
+ },
464
500
  {
465
501
  regexp: /^last\s+(\d+)\s+versions?$/i,
466
502
  select: function (context, versions) {
@@ -470,21 +506,25 @@ var QUERIES = [
470
506
  if (!data) return
471
507
  var array = data.released.slice(-versions)
472
508
 
473
- array = array.map(function (v) {
474
- return data.name + ' ' + v
475
- })
509
+ array = array.map(nameMapper(data.name))
476
510
  selected = selected.concat(array)
477
511
  })
478
512
  return selected
479
513
  }
480
514
  },
515
+ {
516
+ regexp: /^last\s+(\d+)\s+(\w+)\s+major versions?$/i,
517
+ select: function (context, versions, name) {
518
+ var data = checkName(name)
519
+ var validVersions = getMajorVersions(data.released, versions)
520
+ return validVersions.map(nameMapper(data.name))
521
+ }
522
+ },
481
523
  {
482
524
  regexp: /^last\s+(\d+)\s+(\w+)\s+versions?$/i,
483
525
  select: function (context, versions, name) {
484
526
  var data = checkName(name)
485
- return data.released.slice(-versions).map(function (v) {
486
- return data.name + ' ' + v
487
- })
527
+ return data.released.slice(-versions).map(nameMapper(data.name))
488
528
  }
489
529
  },
490
530
  {
@@ -498,9 +538,7 @@ var QUERIES = [
498
538
  return data.released.indexOf(v) === -1
499
539
  })
500
540
 
501
- array = array.map(function (v) {
502
- return data.name + ' ' + v
503
- })
541
+ array = array.map(nameMapper(data.name))
504
542
  selected = selected.concat(array)
505
543
  })
506
544
  return selected
@@ -512,9 +550,7 @@ var QUERIES = [
512
550
  var data = checkName(name)
513
551
  return data.versions.filter(function (v) {
514
552
  return data.released.indexOf(v) === -1
515
- }).map(function (v) {
516
- return data.name + ' ' + v
517
- })
553
+ }).map(nameMapper(data.name))
518
554
  }
519
555
  },
520
556
  {
@@ -620,9 +656,7 @@ var QUERIES = [
620
656
  return parsed >= from && parsed <= to
621
657
  }
622
658
 
623
- return data.released.filter(filter).map(function (v) {
624
- return data.name + ' ' + v
625
- })
659
+ return data.released.filter(filter).map(nameMapper(data.name))
626
660
  }
627
661
  },
628
662
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "2.3.3",
3
+ "version": "2.4.0",
4
4
  "description": "Share browsers list between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
5
5
  "keywords": [
6
6
  "caniuse",
@@ -10,13 +10,13 @@
10
10
  "license": "MIT",
11
11
  "repository": "ai/browserslist",
12
12
  "dependencies": {
13
- "caniuse-lite": "^1.0.30000715",
13
+ "caniuse-lite": "^1.0.30000718",
14
14
  "electron-to-chromium": "^1.3.18"
15
15
  },
16
16
  "bin": "./cli.js",
17
17
  "devDependencies": {
18
18
  "cross-spawn": "^5.1.0",
19
- "eslint": "^4.4.1",
19
+ "eslint": "^4.5.0",
20
20
  "eslint-config-logux": "^16.0.0",
21
21
  "eslint-config-standard": "^10.2.1",
22
22
  "eslint-plugin-es5": "^1.1.0",
@@ -27,9 +27,9 @@
27
27
  "eslint-plugin-security": "^1.4.0",
28
28
  "eslint-plugin-standard": "^3.0.1",
29
29
  "jest": "^20.0.4",
30
- "lint-staged": "^4.0.3",
30
+ "lint-staged": "^4.0.4",
31
31
  "pre-commit": "^1.1.3",
32
- "size-limit": "^0.9.0",
32
+ "size-limit": "^0.10.0",
33
33
  "yaspeller-ci": "^0.6.0"
34
34
  },
35
35
  "eslintConfig": {