browserslist 4.17.4 → 4.18.1

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/browser.js CHANGED
@@ -1,36 +1,40 @@
1
1
  var BrowserslistError = require('./error')
2
2
 
3
- function noop () { }
3
+ function noop() {}
4
4
 
5
5
  module.exports = {
6
- loadQueries: function loadQueries () {
6
+ loadQueries: function loadQueries() {
7
7
  throw new BrowserslistError(
8
- 'Sharable configs are not supported in client-side build of Browserslist')
8
+ 'Sharable configs are not supported in client-side build of Browserslist'
9
+ )
9
10
  },
10
11
 
11
- getStat: function getStat (opts) {
12
+ getStat: function getStat(opts) {
12
13
  return opts.stats
13
14
  },
14
15
 
15
- loadConfig: function loadConfig (opts) {
16
+ loadConfig: function loadConfig(opts) {
16
17
  if (opts.config) {
17
18
  throw new BrowserslistError(
18
- 'Browserslist config are not supported in client-side build')
19
+ 'Browserslist config are not supported in client-side build'
20
+ )
19
21
  }
20
22
  },
21
23
 
22
- loadCountry: function loadCountry () {
24
+ loadCountry: function loadCountry() {
23
25
  throw new BrowserslistError(
24
26
  'Country statistics are not supported ' +
25
- 'in client-side build of Browserslist')
27
+ 'in client-side build of Browserslist'
28
+ )
26
29
  },
27
30
 
28
- loadFeature: function loadFeature () {
31
+ loadFeature: function loadFeature() {
29
32
  throw new BrowserslistError(
30
- 'Supports queries are not available in client-side build of Browserslist')
33
+ 'Supports queries are not available in client-side build of Browserslist'
34
+ )
31
35
  },
32
36
 
33
- currentNode: function currentNode (resolve, context) {
37
+ currentNode: function currentNode(resolve, context) {
34
38
  return resolve(['maintained node versions'], context)[0]
35
39
  },
36
40
 
package/cli.js CHANGED
@@ -8,26 +8,28 @@ var pkg = require('./package.json')
8
8
 
9
9
  var args = process.argv.slice(2)
10
10
 
11
- var USAGE = 'Usage:\n' +
12
- ' npx browserslist\n' +
13
- ' npx browserslist "QUERIES"\n' +
14
- ' npx browserslist --json "QUERIES"\n' +
15
- ' npx browserslist --config="path/to/browserlist/file"\n' +
16
- ' npx browserslist --coverage "QUERIES"\n' +
17
- ' npx browserslist --coverage=US "QUERIES"\n' +
18
- ' npx browserslist --coverage=US,RU,global "QUERIES"\n' +
19
- ' npx browserslist --env="environment name defined in config"\n' +
20
- ' npx browserslist --stats="path/to/browserlist/stats/file"\n' +
21
- ' npx browserslist --mobile-to-desktop\n' +
22
- ' npx browserslist --update-db'
23
-
24
- function isArg (arg) {
11
+ var USAGE =
12
+ 'Usage:\n' +
13
+ ' npx browserslist\n' +
14
+ ' npx browserslist "QUERIES"\n' +
15
+ ' npx browserslist --json "QUERIES"\n' +
16
+ ' npx browserslist --config="path/to/browserlist/file"\n' +
17
+ ' npx browserslist --coverage "QUERIES"\n' +
18
+ ' npx browserslist --coverage=US "QUERIES"\n' +
19
+ ' npx browserslist --coverage=US,RU,global "QUERIES"\n' +
20
+ ' npx browserslist --env="environment name defined in config"\n' +
21
+ ' npx browserslist --stats="path/to/browserlist/stats/file"\n' +
22
+ ' npx browserslist --mobile-to-desktop\n' +
23
+ ' npx browserslist --ignore-unknown-versions' +
24
+ ' npx browserslist --update-db'
25
+
26
+ function isArg(arg) {
25
27
  return args.some(function (str) {
26
28
  return str === arg || str.indexOf(arg + '=') === 0
27
29
  })
28
30
  }
29
31
 
30
- function error (msg) {
32
+ function error(msg) {
31
33
  process.stderr.write('browserslist: ' + msg + '\n')
32
34
  process.exit(1)
33
35
  }
@@ -42,7 +44,7 @@ if (isArg('--help') || isArg('-h')) {
42
44
  })
43
45
  } else {
44
46
  var mode = 'browsers'
45
- var opts = { }
47
+ var opts = {}
46
48
  var queries
47
49
  var areas
48
50
 
@@ -75,6 +77,8 @@ if (isArg('--help') || isArg('-h')) {
75
77
  mode = 'json'
76
78
  } else if (name === '--mobile-to-desktop') {
77
79
  opts.mobileToDesktop = true
80
+ } else if (name === '--ignore-unknown-versions') {
81
+ opts.ignoreUnknownVersions = true
78
82
  } else {
79
83
  error('Unknown arguments ' + args[i] + '.\n\n' + USAGE)
80
84
  }
@@ -138,7 +142,7 @@ if (isArg('--help') || isArg('-h')) {
138
142
  data.coverage = coverage.reduce(function (object, j) {
139
143
  object[j[0]] = j[1]
140
144
  return object
141
- }, { })
145
+ }, {})
142
146
  }
143
147
  process.stdout.write(JSON.stringify(data, null, ' ') + '\n')
144
148
  }
package/error.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  declare class BrowserslistError extends Error {
2
- constructor(message: any);
3
- name: 'BrowserslistError';
4
- browserslist: true;
2
+ constructor(message: any)
3
+ name: 'BrowserslistError'
4
+ browserslist: true
5
5
  }
6
6
 
7
- export = BrowserslistError;
7
+ export = BrowserslistError
package/error.js CHANGED
@@ -1,4 +1,4 @@
1
- function BrowserslistError (message) {
1
+ function BrowserslistError(message) {
2
2
  this.name = 'BrowserslistError'
3
3
  this.message = message
4
4
  this.browserslist = true
package/index.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * @param queries Browser queries.
9
9
  * @returns Array with browser names in Can I Use.
10
10
  */
11
- declare function browserslist (
11
+ declare function browserslist(
12
12
  queries?: string | readonly string[] | null,
13
13
  opts?: browserslist.Options
14
14
  ): string[]
@@ -136,15 +136,15 @@ declare namespace browserslist {
136
136
  * @param stats Which statistics should be used.
137
137
  * @returns Total market coverage for all selected browsers.
138
138
  */
139
- function coverage (browsers: readonly string[], stats?: StatsOptions): number
139
+ function coverage(browsers: readonly string[], stats?: StatsOptions): number
140
140
 
141
- function clearCaches (): void
141
+ function clearCaches(): void
142
142
 
143
- function parseConfig (string: string): Config
143
+ function parseConfig(string: string): Config
144
144
 
145
- function readConfig (file: string): Config
145
+ function readConfig(file: string): Config
146
146
 
147
- function findConfig (...pathSegments: string[]): Config | undefined
147
+ function findConfig(...pathSegments: string[]): Config | undefined
148
148
 
149
149
  interface LoadConfigOptions {
150
150
  config?: string
@@ -152,7 +152,7 @@ declare namespace browserslist {
152
152
  env?: string
153
153
  }
154
154
 
155
- function loadConfig (options: LoadConfigOptions): string[] | undefined
155
+ function loadConfig(options: LoadConfigOptions): string[] | undefined
156
156
  }
157
157
 
158
158
  declare global {
package/index.js CHANGED
@@ -13,45 +13,42 @@ var ANDROID_EVERGREEN_FIRST = 37
13
13
  var QUERY_OR = 1
14
14
  var QUERY_AND = 2
15
15
 
16
- function isVersionsMatch (versionA, versionB) {
16
+ function isVersionsMatch(versionA, versionB) {
17
17
  return (versionA + '.').indexOf(versionB + '.') === 0
18
18
  }
19
19
 
20
- function isEolReleased (name) {
20
+ function isEolReleased(name) {
21
21
  var version = name.slice(1)
22
22
  return jsReleases.some(function (i) {
23
23
  return isVersionsMatch(i.version, version)
24
24
  })
25
25
  }
26
26
 
27
- function normalize (versions) {
27
+ function normalize(versions) {
28
28
  return versions.filter(function (version) {
29
29
  return typeof version === 'string'
30
30
  })
31
31
  }
32
32
 
33
- function normalizeElectron (version) {
33
+ function normalizeElectron(version) {
34
34
  var versionToUse = version
35
35
  if (version.split('.').length === 3) {
36
- versionToUse = version
37
- .split('.')
38
- .slice(0, -1)
39
- .join('.')
36
+ versionToUse = version.split('.').slice(0, -1).join('.')
40
37
  }
41
38
  return versionToUse
42
39
  }
43
40
 
44
- function nameMapper (name) {
45
- return function mapName (version) {
41
+ function nameMapper(name) {
42
+ return function mapName(version) {
46
43
  return name + ' ' + version
47
44
  }
48
45
  }
49
46
 
50
- function getMajor (version) {
47
+ function getMajor(version) {
51
48
  return parseInt(version.split('.')[0])
52
49
  }
53
50
 
54
- function getMajorVersions (released, number) {
51
+ function getMajorVersions(released, number) {
55
52
  if (released.length === 0) return []
56
53
  var majorVersions = uniq(released.map(getMajor))
57
54
  var minimum = majorVersions[majorVersions.length - number]
@@ -66,7 +63,7 @@ function getMajorVersions (released, number) {
66
63
  return selected
67
64
  }
68
65
 
69
- function uniq (array) {
66
+ function uniq(array) {
70
67
  var filtered = []
71
68
  for (var i = 0; i < array.length; i++) {
72
69
  if (filtered.indexOf(array[i]) === -1) filtered.push(array[i])
@@ -76,13 +73,13 @@ function uniq (array) {
76
73
 
77
74
  // Helpers
78
75
 
79
- function fillUsage (result, name, data) {
76
+ function fillUsage(result, name, data) {
80
77
  for (var i in data) {
81
78
  result[name + ' ' + i] = data[i]
82
79
  }
83
80
  }
84
81
 
85
- function generateFilter (sign, version) {
82
+ function generateFilter(sign, version) {
86
83
  version = parseFloat(version)
87
84
  if (sign === '>') {
88
85
  return function (v) {
@@ -103,7 +100,7 @@ function generateFilter (sign, version) {
103
100
  }
104
101
  }
105
102
 
106
- function generateSemverFilter (sign, version) {
103
+ function generateSemverFilter(sign, version) {
107
104
  version = version.split('.').map(parseSimpleInt)
108
105
  version[1] = version[1] || 0
109
106
  version[2] = version[2] || 0
@@ -130,17 +127,17 @@ function generateSemverFilter (sign, version) {
130
127
  }
131
128
  }
132
129
 
133
- function parseSimpleInt (x) {
130
+ function parseSimpleInt(x) {
134
131
  return parseInt(x)
135
132
  }
136
133
 
137
- function compare (a, b) {
134
+ function compare(a, b) {
138
135
  if (a < b) return -1
139
136
  if (a > b) return +1
140
137
  return 0
141
138
  }
142
139
 
143
- function compareSemver (a, b) {
140
+ function compareSemver(a, b) {
144
141
  return (
145
142
  compare(parseInt(a[0]), parseInt(b[0])) ||
146
143
  compare(parseInt(a[1] || '0'), parseInt(b[1] || '0')) ||
@@ -149,7 +146,7 @@ function compareSemver (a, b) {
149
146
  }
150
147
 
151
148
  // this follows the npm-like semver behavior
152
- function semverFilterLoose (operator, range) {
149
+ function semverFilterLoose(operator, range) {
153
150
  range = range.split('.').map(parseSimpleInt)
154
151
  if (typeof range[1] === 'undefined') {
155
152
  range[1] = 'x'
@@ -162,8 +159,8 @@ function semverFilterLoose (operator, range) {
162
159
  version = version.split('.').map(parseSimpleInt)
163
160
  return compareSemverLoose(version, range) <= 0
164
161
  }
165
- default:
166
162
  case '>=':
163
+ default:
167
164
  return function (version) {
168
165
  version = version.split('.').map(parseSimpleInt)
169
166
  return compareSemverLoose(version, range) >= 0
@@ -172,7 +169,7 @@ function semverFilterLoose (operator, range) {
172
169
  }
173
170
 
174
171
  // this follows the npm-like semver behavior
175
- function compareSemverLoose (version, range) {
172
+ function compareSemverLoose(version, range) {
176
173
  if (version[0] !== range[0]) {
177
174
  return version[0] < range[0] ? -1 : +1
178
175
  }
@@ -185,7 +182,7 @@ function compareSemverLoose (version, range) {
185
182
  return 0
186
183
  }
187
184
 
188
- function resolveVersion (data, version) {
185
+ function resolveVersion(data, version) {
189
186
  if (data.versions.indexOf(version) !== -1) {
190
187
  return version
191
188
  } else if (browserslist.versionAliases[data.name][version]) {
@@ -195,7 +192,7 @@ function resolveVersion (data, version) {
195
192
  }
196
193
  }
197
194
 
198
- function normalizeVersion (data, version) {
195
+ function normalizeVersion(data, version) {
199
196
  var resolved = resolveVersion(data, version)
200
197
  if (resolved) {
201
198
  return resolved
@@ -206,19 +203,20 @@ function normalizeVersion (data, version) {
206
203
  }
207
204
  }
208
205
 
209
- function filterByYear (since, context) {
206
+ function filterByYear(since, context) {
210
207
  since = since / 1000
211
208
  return Object.keys(agents).reduce(function (selected, name) {
212
209
  var data = byName(name, context)
213
210
  if (!data) return selected
214
211
  var versions = Object.keys(data.releaseDate).filter(function (v) {
215
- return data.releaseDate[v] >= since
212
+ var date = data.releaseDate[v]
213
+ return date !== null && date >= since
216
214
  })
217
215
  return selected.concat(versions.map(nameMapper(data.name)))
218
216
  }, [])
219
217
  }
220
218
 
221
- function cloneData (data) {
219
+ function cloneData(data) {
222
220
  return {
223
221
  name: data.name,
224
222
  versions: data.versions,
@@ -227,14 +225,14 @@ function cloneData (data) {
227
225
  }
228
226
  }
229
227
 
230
- function mapVersions (data, map) {
228
+ function mapVersions(data, map) {
231
229
  data.versions = data.versions.map(function (i) {
232
230
  return map[i] || i
233
231
  })
234
232
  data.released = data.versions.map(function (i) {
235
233
  return map[i] || i
236
234
  })
237
- var fixedDate = { }
235
+ var fixedDate = {}
238
236
  for (var i in data.releaseDate) {
239
237
  fixedDate[map[i] || i] = data.releaseDate[i]
240
238
  }
@@ -242,7 +240,7 @@ function mapVersions (data, map) {
242
240
  return data
243
241
  }
244
242
 
245
- function byName (name, context) {
243
+ function byName(name, context) {
246
244
  name = name.toLowerCase()
247
245
  name = browserslist.aliases[name] || name
248
246
  if (context.mobileToDesktop && browserslist.desktopNames[name]) {
@@ -261,34 +259,38 @@ function byName (name, context) {
261
259
  return browserslist.data[name]
262
260
  }
263
261
 
264
- function normalizeAndroidVersions (androidVersions, chromeVersions) {
262
+ function normalizeAndroidVersions(androidVersions, chromeVersions) {
265
263
  var firstEvergreen = ANDROID_EVERGREEN_FIRST
266
264
  var last = chromeVersions[chromeVersions.length - 1]
267
265
  return androidVersions
268
- .filter(function (version) { return /^(?:[2-4]\.|[34]$)/.test(version) })
266
+ .filter(function (version) {
267
+ return /^(?:[2-4]\.|[34]$)/.test(version)
268
+ })
269
269
  .concat(chromeVersions.slice(firstEvergreen - last - 1))
270
270
  }
271
271
 
272
- function normalizeAndroidData (android, chrome) {
272
+ function normalizeAndroidData(android, chrome) {
273
273
  android.released = normalizeAndroidVersions(android.released, chrome.released)
274
274
  android.versions = normalizeAndroidVersions(android.versions, chrome.versions)
275
275
  return android
276
276
  }
277
277
 
278
- function checkName (name, context) {
278
+ function checkName(name, context) {
279
279
  var data = byName(name, context)
280
280
  if (!data) throw new BrowserslistError('Unknown browser ' + name)
281
281
  return data
282
282
  }
283
283
 
284
- function unknownQuery (query) {
284
+ function unknownQuery(query) {
285
285
  return new BrowserslistError(
286
- 'Unknown browser query `' + query + '`. ' +
287
- 'Maybe you are using old Browserslist or made typo in query.'
286
+ 'Unknown browser query `' +
287
+ query +
288
+ '`. ' +
289
+ 'Maybe you are using old Browserslist or made typo in query.'
288
290
  )
289
291
  }
290
292
 
291
- function filterAndroid (list, versions, context) {
293
+ function filterAndroid(list, versions, context) {
292
294
  if (context.mobileToDesktop) return list
293
295
  var released = browserslist.data.android.released
294
296
  var last = released[released.length - 1]
@@ -308,7 +310,7 @@ function filterAndroid (list, versions, context) {
308
310
  * the select function in `queries`.
309
311
  * @returns {string[]} A list of browsers
310
312
  */
311
- function resolve (queries, context) {
313
+ function resolve(queries, context) {
312
314
  if (Array.isArray(queries)) {
313
315
  queries = flatten(queries.map(parse))
314
316
  } else {
@@ -323,7 +325,10 @@ function resolve (queries, context) {
323
325
  if (index === 0) {
324
326
  throw new BrowserslistError(
325
327
  'Write any browsers query (for instance, `defaults`) ' +
326
- 'before `' + selection + '`')
328
+ 'before `' +
329
+ selection +
330
+ '`'
331
+ )
327
332
  }
328
333
  selection = selection.slice(4)
329
334
  }
@@ -356,7 +361,7 @@ function resolve (queries, context) {
356
361
  case QUERY_OR:
357
362
  default:
358
363
  if (isExclude) {
359
- var filter = { }
364
+ var filter = {}
360
365
  array.forEach(function (j) {
361
366
  filter[j] = true
362
367
  })
@@ -373,7 +378,7 @@ function resolve (queries, context) {
373
378
  }, [])
374
379
  }
375
380
 
376
- var cache = { }
381
+ var cache = {}
377
382
 
378
383
  /**
379
384
  * Return array of browsers by selection queries.
@@ -400,8 +405,8 @@ var cache = { }
400
405
  * @example
401
406
  * browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8']
402
407
  */
403
- function browserslist (queries, opts) {
404
- if (typeof opts === 'undefined') opts = { }
408
+ function browserslist(queries, opts) {
409
+ if (typeof opts === 'undefined') opts = {}
405
410
 
406
411
  if (typeof opts.path === 'undefined') {
407
412
  opts.path = path.resolve ? path.resolve('.') : '.'
@@ -418,7 +423,8 @@ function browserslist (queries, opts) {
418
423
 
419
424
  if (!(typeof queries === 'string' || Array.isArray(queries))) {
420
425
  throw new BrowserslistError(
421
- 'Browser queries must be an array or string. Got ' + typeof queries + '.')
426
+ 'Browser queries must be an array or string. Got ' + typeof queries + '.'
427
+ )
422
428
  }
423
429
 
424
430
  var context = {
@@ -432,7 +438,7 @@ function browserslist (queries, opts) {
432
438
  env.oldDataWarning(browserslist.data)
433
439
  var stats = env.getStat(opts, browserslist.data)
434
440
  if (stats) {
435
- context.customUsage = { }
441
+ context.customUsage = {}
436
442
  for (var browser in stats) {
437
443
  fillUsage(context.customUsage, browser, stats[browser])
438
444
  }
@@ -461,7 +467,7 @@ function browserslist (queries, opts) {
461
467
  return result
462
468
  }
463
469
 
464
- function parse (queries) {
470
+ function parse(queries) {
465
471
  var qs = []
466
472
  do {
467
473
  queries = doMatch(queries, qs)
@@ -469,7 +475,7 @@ function parse (queries) {
469
475
  return qs
470
476
  }
471
477
 
472
- function doMatch (string, qs) {
478
+ function doMatch(string, qs) {
473
479
  var or = /^(?:,\s*|\s+or\s+)(.*)/i
474
480
  var and = /^\s+and\s+(.*)/i
475
481
 
@@ -488,7 +494,7 @@ function doMatch (string, qs) {
488
494
  })
489
495
  }
490
496
 
491
- function find (string, predicate) {
497
+ function find(string, predicate) {
492
498
  for (var n = 1, max = string.length; n <= max; n++) {
493
499
  var parsed = string.substr(-n, n)
494
500
  if (predicate(parsed, n, max)) {
@@ -498,7 +504,7 @@ function find (string, predicate) {
498
504
  return ''
499
505
  }
500
506
 
501
- function flatten (array) {
507
+ function flatten(array) {
502
508
  if (!Array.isArray(array)) return [array]
503
509
  return array.reduce(function (a, b) {
504
510
  return a.concat(flatten(b))
@@ -506,20 +512,15 @@ function flatten (array) {
506
512
  }
507
513
 
508
514
  // Will be filled by Can I Use data below
509
- browserslist.cache = { }
510
- browserslist.data = { }
515
+ browserslist.cache = {}
516
+ browserslist.data = {}
511
517
  browserslist.usage = {
512
- global: { },
518
+ global: {},
513
519
  custom: null
514
520
  }
515
521
 
516
522
  // Default browsers query
517
- browserslist.defaults = [
518
- '> 0.5%',
519
- 'last 2 versions',
520
- 'Firefox ESR',
521
- 'not dead'
522
- ]
523
+ browserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
523
524
 
524
525
  // Browser names aliases
525
526
  browserslist.aliases = {
@@ -548,7 +549,7 @@ browserslist.desktopNames = {
548
549
  }
549
550
 
550
551
  // Aliases to work with joined versions like `ios_saf 7.0-7.1`
551
- browserslist.versionAliases = { }
552
+ browserslist.versionAliases = {}
552
553
 
553
554
  browserslist.clearCaches = env.clearCaches
554
555
  browserslist.parseConfig = env.parseConfig
@@ -597,7 +598,7 @@ browserslist.coverage = function (browsers, stats) {
597
598
  if ('dataByBrowser' in stats) {
598
599
  stats = stats.dataByBrowser
599
600
  }
600
- data = { }
601
+ data = {}
601
602
  for (var name in stats) {
602
603
  for (var version in stats[name]) {
603
604
  data[name + ' ' + version] = stats[name][version]
@@ -614,7 +615,7 @@ browserslist.coverage = function (browsers, stats) {
614
615
  }, 0)
615
616
  }
616
617
 
617
- function nodeQuery (context, version) {
618
+ function nodeQuery(context, version) {
618
619
  var nodeReleases = jsReleases.filter(function (i) {
619
620
  return i.name === 'nodejs'
620
621
  })
@@ -631,22 +632,20 @@ function nodeQuery (context, version) {
631
632
  return ['node ' + matched[matched.length - 1].version]
632
633
  }
633
634
 
634
- function sinceQuery (context, year, month, date) {
635
+ function sinceQuery(context, year, month, date) {
635
636
  year = parseInt(year)
636
637
  month = parseInt(month || '01') - 1
637
638
  date = parseInt(date || '01')
638
639
  return filterByYear(Date.UTC(year, month, date, 0, 0, 0), context)
639
640
  }
640
641
 
641
- function coverQuery (context, coverage, statMode) {
642
+ function coverQuery(context, coverage, statMode) {
642
643
  coverage = parseFloat(coverage)
643
644
  var usage = browserslist.usage.global
644
645
  if (statMode) {
645
- if (statMode.match(/^my\s+stats$/)) {
646
+ if (statMode.match(/^my\s+stats$/i)) {
646
647
  if (!context.customUsage) {
647
- throw new BrowserslistError(
648
- 'Custom usage statistics was not provided'
649
- )
648
+ throw new BrowserslistError('Custom usage statistics was not provided')
650
649
  }
651
650
  usage = context.customUsage
652
651
  } else {
@@ -918,11 +917,11 @@ var QUERIES = [
918
917
  }
919
918
  },
920
919
  {
921
- regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%$/,
920
+ regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%$/i,
922
921
  select: coverQuery
923
922
  },
924
923
  {
925
- regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/,
924
+ regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/i,
926
925
  select: coverQuery
927
926
  },
928
927
  {
@@ -986,7 +985,7 @@ var QUERIES = [
986
985
  var data = checkName(name, context)
987
986
  from = parseFloat(normalizeVersion(data, from) || from)
988
987
  to = parseFloat(normalizeVersion(data, to) || to)
989
- function filter (v) {
988
+ function filter(v) {
990
989
  var parsed = parseFloat(v)
991
990
  return parsed >= from && parsed <= to
992
991
  }
@@ -1180,11 +1179,11 @@ var QUERIES = [
1180
1179
  }
1181
1180
  }
1182
1181
  }
1183
- ];
1182
+ ]
1184
1183
 
1185
1184
  // Get and convert Can I Use data
1186
1185
 
1187
- (function () {
1186
+ ;(function () {
1188
1187
  for (var name in agents) {
1189
1188
  var browser = agents[name]
1190
1189
  browserslist.data[name] = {
@@ -1195,7 +1194,7 @@ var QUERIES = [
1195
1194
  }
1196
1195
  fillUsage(browserslist.usage.global, name, browser.usage_global)
1197
1196
 
1198
- browserslist.versionAliases[name] = { }
1197
+ browserslist.versionAliases[name] = {}
1199
1198
  for (var i = 0; i < browser.versions.length; i++) {
1200
1199
  var full = browser.versions[i]
1201
1200
  if (!full) continue
@@ -1210,6 +1209,6 @@ var QUERIES = [
1210
1209
  }
1211
1210
 
1212
1211
  browserslist.versionAliases.op_mob['59'] = '58'
1213
- }())
1212
+ })()
1214
1213
 
1215
1214
  module.exports = browserslist
package/node.js CHANGED
@@ -9,29 +9,33 @@ var IS_SECTION = /^\s*\[(.+)]\s*$/
9
9
  var CONFIG_PATTERN = /^browserslist-config-/
10
10
  var SCOPED_CONFIG__PATTERN = /@[^/]+\/browserslist-config(-|$|\/)/
11
11
  var TIME_TO_UPDATE_CANIUSE = 6 * 30 * 24 * 60 * 60 * 1000
12
- var FORMAT = 'Browserslist config should be a string or an array ' +
13
- 'of strings with browser queries'
12
+ var FORMAT =
13
+ 'Browserslist config should be a string or an array ' +
14
+ 'of strings with browser queries'
14
15
 
15
16
  var dataTimeChecked = false
16
- var filenessCache = { }
17
- var configCache = { }
18
- function checkExtend (name) {
17
+ var filenessCache = {}
18
+ var configCache = {}
19
+ function checkExtend(name) {
19
20
  var use = ' Use `dangerousExtend` option to disable.'
20
21
  if (!CONFIG_PATTERN.test(name) && !SCOPED_CONFIG__PATTERN.test(name)) {
21
22
  throw new BrowserslistError(
22
- 'Browserslist config needs `browserslist-config-` prefix. ' + use)
23
+ 'Browserslist config needs `browserslist-config-` prefix. ' + use
24
+ )
23
25
  }
24
26
  if (name.replace(/^@[^/]+\//, '').indexOf('.') !== -1) {
25
27
  throw new BrowserslistError(
26
- '`.` not allowed in Browserslist config name. ' + use)
28
+ '`.` not allowed in Browserslist config name. ' + use
29
+ )
27
30
  }
28
31
  if (name.indexOf('node_modules') !== -1) {
29
32
  throw new BrowserslistError(
30
- '`node_modules` not allowed in Browserslist config.' + use)
33
+ '`node_modules` not allowed in Browserslist config.' + use
34
+ )
31
35
  }
32
36
  }
33
37
 
34
- function isFile (file) {
38
+ function isFile(file) {
35
39
  if (file in filenessCache) {
36
40
  return filenessCache[file]
37
41
  }
@@ -42,7 +46,7 @@ function isFile (file) {
42
46
  return result
43
47
  }
44
48
 
45
- function eachParent (file, callback) {
49
+ function eachParent(file, callback) {
46
50
  var dir = isFile(file) ? path.dirname(file) : file
47
51
  var loc = path.resolve(dir)
48
52
  do {
@@ -52,7 +56,7 @@ function eachParent (file, callback) {
52
56
  return undefined
53
57
  }
54
58
 
55
- function check (section) {
59
+ function check(section) {
56
60
  if (Array.isArray(section)) {
57
61
  for (var i = 0; i < section.length; i++) {
58
62
  if (typeof section[i] !== 'string') {
@@ -64,7 +68,7 @@ function check (section) {
64
68
  }
65
69
  }
66
70
 
67
- function pickEnv (config, opts) {
71
+ function pickEnv(config, opts) {
68
72
  if (typeof config !== 'object') return config
69
73
 
70
74
  var name
@@ -81,7 +85,7 @@ function pickEnv (config, opts) {
81
85
  return config[name] || config.defaults
82
86
  }
83
87
 
84
- function parsePackage (file) {
88
+ function parsePackage(file) {
85
89
  var config = JSON.parse(fs.readFileSync(file))
86
90
  if (config.browserlist && !config.browserslist) {
87
91
  throw new BrowserslistError(
@@ -99,10 +103,10 @@ function parsePackage (file) {
99
103
  return list
100
104
  }
101
105
 
102
- function latestReleaseTime (agents) {
106
+ function latestReleaseTime(agents) {
103
107
  var latest = 0
104
108
  for (var name in agents) {
105
- var dates = agents[name].releaseDate || { }
109
+ var dates = agents[name].releaseDate || {}
106
110
  for (var key in dates) {
107
111
  if (latest < dates[key]) {
108
112
  latest = dates[key]
@@ -112,7 +116,7 @@ function latestReleaseTime (agents) {
112
116
  return latest * 1000
113
117
  }
114
118
 
115
- function normalizeStats (data, stats) {
119
+ function normalizeStats(data, stats) {
116
120
  if (!data) {
117
121
  data = {}
118
122
  }
@@ -122,16 +126,12 @@ function normalizeStats (data, stats) {
122
126
 
123
127
  if (typeof stats !== 'object') return undefined
124
128
 
125
- var normalized = { }
129
+ var normalized = {}
126
130
  for (var i in stats) {
127
131
  var versions = Object.keys(stats[i])
128
- if (
129
- versions.length === 1 &&
130
- data[i] &&
131
- data[i].versions.length === 1
132
- ) {
132
+ if (versions.length === 1 && data[i] && data[i].versions.length === 1) {
133
133
  var normal = data[i].versions[0]
134
- normalized[i] = { }
134
+ normalized[i] = {}
135
135
  normalized[i][normal] = stats[i][versions[0]]
136
136
  } else {
137
137
  normalized[i] = stats[i]
@@ -141,7 +141,7 @@ function normalizeStats (data, stats) {
141
141
  return normalized
142
142
  }
143
143
 
144
- function normalizeUsageData (usageData, data) {
144
+ function normalizeUsageData(usageData, data) {
145
145
  for (var browser in usageData) {
146
146
  var browserUsage = usageData[browser]
147
147
  // eslint-disable-next-line max-len
@@ -156,12 +156,11 @@ function normalizeUsageData (usageData, data) {
156
156
  }
157
157
 
158
158
  module.exports = {
159
- loadQueries: function loadQueries (ctx, name) {
159
+ loadQueries: function loadQueries(ctx, name) {
160
160
  if (!ctx.dangerousExtend && !process.env.BROWSERSLIST_DANGEROUS_EXTEND) {
161
161
  checkExtend(name)
162
162
  }
163
- // eslint-disable-next-line security/detect-non-literal-require
164
- var queries = require(require.resolve(name, { paths: ['.'] }))
163
+ var queries = require(require.resolve(name, { paths: ['.', ctx.path] }))
165
164
  if (queries) {
166
165
  if (Array.isArray(queries)) {
167
166
  return queries
@@ -171,26 +170,25 @@ module.exports = {
171
170
  }
172
171
  }
173
172
  throw new BrowserslistError(
174
- '`' + name + '` config exports not an array of queries' +
175
- ' or an object of envs'
173
+ '`' +
174
+ name +
175
+ '` config exports not an array of queries' +
176
+ ' or an object of envs'
176
177
  )
177
178
  },
178
179
 
179
- loadStat: function loadStat (ctx, name, data) {
180
+ loadStat: function loadStat(ctx, name, data) {
180
181
  if (!ctx.dangerousExtend && !process.env.BROWSERSLIST_DANGEROUS_EXTEND) {
181
182
  checkExtend(name)
182
183
  }
183
- // eslint-disable-next-line security/detect-non-literal-require
184
- var stats = require(
185
- require.resolve(
186
- path.join(name, 'browserslist-stats.json'),
187
- { paths: ['.'] }
188
- )
189
- )
184
+ var stats = require(require.resolve(
185
+ path.join(name, 'browserslist-stats.json'),
186
+ { paths: ['.'] }
187
+ ))
190
188
  return normalizeStats(data, stats)
191
189
  },
192
190
 
193
- getStat: function getStat (opts, data) {
191
+ getStat: function getStat(opts, data) {
194
192
  var stats
195
193
  if (opts.stats) {
196
194
  stats = opts.stats
@@ -206,13 +204,13 @@ module.exports = {
206
204
  try {
207
205
  stats = JSON.parse(fs.readFileSync(stats))
208
206
  } catch (e) {
209
- throw new BrowserslistError('Can\'t read ' + stats)
207
+ throw new BrowserslistError("Can't read " + stats)
210
208
  }
211
209
  }
212
210
  return normalizeStats(data, stats)
213
211
  },
214
212
 
215
- loadConfig: function loadConfig (opts) {
213
+ loadConfig: function loadConfig(opts) {
216
214
  if (process.env.BROWSERSLIST) {
217
215
  return process.env.BROWSERSLIST
218
216
  } else if (opts.config || process.env.BROWSERSLIST_CONFIG) {
@@ -229,14 +227,13 @@ module.exports = {
229
227
  }
230
228
  },
231
229
 
232
- loadCountry: function loadCountry (usage, country, data) {
230
+ loadCountry: function loadCountry(usage, country, data) {
233
231
  var code = country.replace(/[^\w-]/g, '')
234
232
  if (!usage[code]) {
235
- // eslint-disable-next-line security/detect-non-literal-require
236
233
  var compressed = require('caniuse-lite/data/regions/' + code + '.js')
237
234
  var usageData = region(compressed)
238
235
  normalizeUsageData(usageData, data)
239
- usage[country] = { }
236
+ usage[country] = {}
240
237
  for (var i in usageData) {
241
238
  for (var j in usageData[i]) {
242
239
  usage[country][i + ' ' + j] = usageData[i][j]
@@ -245,14 +242,13 @@ module.exports = {
245
242
  }
246
243
  },
247
244
 
248
- loadFeature: function loadFeature (features, name) {
245
+ loadFeature: function loadFeature(features, name) {
249
246
  name = name.replace(/[^\w-]/g, '')
250
247
  if (features[name]) return
251
248
 
252
- // eslint-disable-next-line security/detect-non-literal-require
253
249
  var compressed = require('caniuse-lite/data/features/' + name + '.js')
254
250
  var stats = feature(compressed).stats
255
- features[name] = { }
251
+ features[name] = {}
256
252
  for (var i in stats) {
257
253
  for (var j in stats[i]) {
258
254
  features[name][i + ' ' + j] = stats[i][j]
@@ -260,11 +256,12 @@ module.exports = {
260
256
  }
261
257
  },
262
258
 
263
- parseConfig: function parseConfig (string) {
259
+ parseConfig: function parseConfig(string) {
264
260
  var result = { defaults: [] }
265
261
  var sections = ['defaults']
266
262
 
267
- string.toString()
263
+ string
264
+ .toString()
268
265
  .replace(/#[^\n]*/g, '')
269
266
  .split(/\n|,/)
270
267
  .map(function (line) {
@@ -294,14 +291,14 @@ module.exports = {
294
291
  return result
295
292
  },
296
293
 
297
- readConfig: function readConfig (file) {
294
+ readConfig: function readConfig(file) {
298
295
  if (!isFile(file)) {
299
- throw new BrowserslistError('Can\'t read ' + file + ' config')
296
+ throw new BrowserslistError("Can't read " + file + ' config')
300
297
  }
301
298
  return module.exports.parseConfig(fs.readFileSync(file))
302
299
  },
303
300
 
304
- findConfig: function findConfig (from) {
301
+ findConfig: function findConfig(from) {
305
302
  from = path.resolve(from)
306
303
 
307
304
  var passed = []
@@ -356,15 +353,15 @@ module.exports = {
356
353
  return resolved
357
354
  },
358
355
 
359
- clearCaches: function clearCaches () {
356
+ clearCaches: function clearCaches() {
360
357
  dataTimeChecked = false
361
- filenessCache = { }
362
- configCache = { }
358
+ filenessCache = {}
359
+ configCache = {}
363
360
 
364
- this.cache = { }
361
+ this.cache = {}
365
362
  },
366
363
 
367
- oldDataWarning: function oldDataWarning (agentsObj) {
364
+ oldDataWarning: function oldDataWarning(agentsObj) {
368
365
  if (dataTimeChecked) return
369
366
  dataTimeChecked = true
370
367
  if (process.env.BROWSERSLIST_IGNORE_OLD_DATA) return
@@ -375,14 +372,14 @@ module.exports = {
375
372
  if (latest !== 0 && latest < halfYearAgo) {
376
373
  console.warn(
377
374
  'Browserslist: caniuse-lite is outdated. Please run:\n' +
378
- ' npx browserslist@latest --update-db\n' +
379
- ' Why you should do it regularly: ' +
380
- 'https://github.com/browserslist/browserslist#browsers-data-updating'
375
+ ' npx browserslist@latest --update-db\n' +
376
+ ' Why you should do it regularly: ' +
377
+ 'https://github.com/browserslist/browserslist#browsers-data-updating'
381
378
  )
382
379
  }
383
380
  },
384
381
 
385
- currentNode: function currentNode () {
382
+ currentNode: function currentNode() {
386
383
  return 'node ' + process.versions.node
387
384
  }
388
385
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.17.4",
3
+ "version": "4.18.1",
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,10 +15,10 @@
15
15
  "license": "MIT",
16
16
  "repository": "browserslist/browserslist",
17
17
  "dependencies": {
18
- "caniuse-lite": "^1.0.30001265",
19
- "electron-to-chromium": "^1.3.867",
18
+ "caniuse-lite": "^1.0.30001280",
19
+ "electron-to-chromium": "^1.3.896",
20
20
  "escalade": "^3.1.1",
21
- "node-releases": "^2.0.0",
21
+ "node-releases": "^2.0.1",
22
22
  "picocolors": "^1.0.0"
23
23
  },
24
24
  "engines": {
package/update-db.js CHANGED
@@ -6,7 +6,7 @@ var fs = require('fs')
6
6
 
7
7
  var BrowserslistError = require('./error')
8
8
 
9
- function detectLockfile () {
9
+ function detectLockfile() {
10
10
  var packageDir = escalade('.', function (dir, names) {
11
11
  return names.indexOf('package.json') !== -1 ? dir : ''
12
12
  })
@@ -14,7 +14,7 @@ function detectLockfile () {
14
14
  if (!packageDir) {
15
15
  throw new BrowserslistError(
16
16
  'Cannot find package.json. ' +
17
- 'Is this the right directory to run `npx browserslist --update-db` in?'
17
+ 'Is this the right directory to run `npx browserslist --update-db` in?'
18
18
  )
19
19
  }
20
20
 
@@ -40,7 +40,7 @@ function detectLockfile () {
40
40
  )
41
41
  }
42
42
 
43
- function getLatestInfo (lock) {
43
+ function getLatestInfo(lock) {
44
44
  if (lock.mode === 'yarn') {
45
45
  if (lock.version === 1) {
46
46
  return JSON.parse(
@@ -57,8 +57,10 @@ function getLatestInfo (lock) {
57
57
  )
58
58
  }
59
59
 
60
- function getBrowsersList () {
61
- return childProcess.execSync('npx browserslist').toString()
60
+ function getBrowsersList() {
61
+ return childProcess
62
+ .execSync('npx browserslist')
63
+ .toString()
62
64
  .trim()
63
65
  .split('\n')
64
66
  .map(function (line) {
@@ -73,44 +75,49 @@ function getBrowsersList () {
73
75
  }, {})
74
76
  }
75
77
 
76
- function diffBrowsersLists (old, current) {
78
+ function diffBrowsersLists(old, current) {
77
79
  var browsers = Object.keys(old).concat(
78
80
  Object.keys(current).filter(function (browser) {
79
81
  return old[browser] === undefined
80
82
  })
81
83
  )
82
- return browsers.map(function (browser) {
83
- var oldVersions = old[browser] || []
84
- var currentVersions = current[browser] || []
85
- var intersection = oldVersions.filter(function (version) {
86
- return currentVersions.indexOf(version) !== -1
87
- })
88
- var addedVersions = currentVersions.filter(function (version) {
89
- return intersection.indexOf(version) === -1
90
- })
91
- var removedVersions = oldVersions.filter(function (version) {
92
- return intersection.indexOf(version) === -1
84
+ return browsers
85
+ .map(function (browser) {
86
+ var oldVersions = old[browser] || []
87
+ var currentVersions = current[browser] || []
88
+ var intersection = oldVersions.filter(function (version) {
89
+ return currentVersions.indexOf(version) !== -1
90
+ })
91
+ var addedVersions = currentVersions.filter(function (version) {
92
+ return intersection.indexOf(version) === -1
93
+ })
94
+ var removedVersions = oldVersions.filter(function (version) {
95
+ return intersection.indexOf(version) === -1
96
+ })
97
+ return removedVersions
98
+ .map(function (version) {
99
+ return pico.red('- ' + browser + ' ' + version)
100
+ })
101
+ .concat(
102
+ addedVersions.map(function (version) {
103
+ return pico.green('+ ' + browser + ' ' + version)
104
+ })
105
+ )
93
106
  })
94
- return removedVersions.map(function (version) {
95
- return pico.red('- ' + browser + ' ' + version)
96
- }).concat(addedVersions.map(function (version) {
97
- return pico.green('+ ' + browser + ' ' + version)
98
- }))
99
- })
100
107
  .reduce(function (result, array) {
101
108
  return result.concat(array)
102
109
  }, [])
103
110
  .join('\n')
104
111
  }
105
112
 
106
- function updateNpmLockfile (lock, latest) {
113
+ function updateNpmLockfile(lock, latest) {
107
114
  var metadata = { latest: latest, versions: [] }
108
115
  var content = deletePackage(JSON.parse(lock.content), metadata)
109
116
  metadata.content = JSON.stringify(content, null, ' ')
110
117
  return metadata
111
118
  }
112
119
 
113
- function deletePackage (node, metadata) {
120
+ function deletePackage(node, metadata) {
114
121
  if (node.dependencies) {
115
122
  if (node.dependencies['caniuse-lite']) {
116
123
  var version = node.dependencies['caniuse-lite'].version
@@ -124,9 +131,9 @@ function deletePackage (node, metadata) {
124
131
  return node
125
132
  }
126
133
 
127
- var yarnVersionRe = new RegExp('version "(.*?)"')
134
+ var yarnVersionRe = /version "(.*?)"/
128
135
 
129
- function updateYarnLockfile (lock, latest) {
136
+ function updateYarnLockfile(lock, latest) {
130
137
  var blocks = lock.content.split(/(\n{2,})/).map(function (block) {
131
138
  return block.split('\n')
132
139
  })
@@ -137,24 +144,31 @@ function updateYarnLockfile (lock, latest) {
137
144
  versions[match[1]] = true
138
145
  if (match[1] !== latest.version) {
139
146
  lines[1] = lines[1].replace(
140
- /version "[^"]+"/, 'version "' + latest.version + '"'
147
+ /version "[^"]+"/,
148
+ 'version "' + latest.version + '"'
141
149
  )
142
150
  lines[2] = lines[2].replace(
143
- /resolved "[^"]+"/, 'resolved "' + latest.dist.tarball + '"'
151
+ /resolved "[^"]+"/,
152
+ 'resolved "' + latest.dist.tarball + '"'
144
153
  )
145
- lines[3] = latest.dist.integrity ? lines[3].replace(
146
- /integrity .+/, 'integrity ' + latest.dist.integrity
147
- ) : ''
154
+ lines[3] = latest.dist.integrity
155
+ ? lines[3].replace(
156
+ /integrity .+/,
157
+ 'integrity ' + latest.dist.integrity
158
+ )
159
+ : ''
148
160
  }
149
161
  }
150
162
  })
151
- var content = blocks.map(function (lines) {
152
- return lines.join('\n')
153
- }).join('')
163
+ var content = blocks
164
+ .map(function (lines) {
165
+ return lines.join('\n')
166
+ })
167
+ .join('')
154
168
  return { content: content, versions: versions }
155
169
  }
156
170
 
157
- function updatePnpmLockfile (lock, latest) {
171
+ function updatePnpmLockfile(lock, latest) {
158
172
  var versions = {}
159
173
  var lines = lock.content.split('\n')
160
174
  var i
@@ -164,7 +178,19 @@ function updatePnpmLockfile (lock, latest) {
164
178
  for (i = 0; i < lines.length; i++) {
165
179
  if (lines[i].indexOf('caniuse-lite:') >= 0) {
166
180
  lineParts = lines[i].split(/:\s?/, 2)
167
- versions[lineParts[1]] = true
181
+ if (lineParts[1].indexOf('/') >= 0) {
182
+ var sublineParts = lineParts[1].split(/([/:])/)
183
+ for (j = 0; j < sublineParts.length; j++) {
184
+ if (sublineParts[j].indexOf('caniuse-lite') >= 0) {
185
+ versions[sublineParts[j + 2]] = true
186
+ sublineParts[j + 2] = latest.version
187
+ break
188
+ }
189
+ }
190
+ lineParts[1] = sublineParts.join('')
191
+ } else {
192
+ versions[lineParts[1]] = true
193
+ }
168
194
  lines[i] = lineParts[0] + ': ' + latest.version
169
195
  } else if (lines[i].indexOf('/caniuse-lite') >= 0) {
170
196
  lineParts = lines[i].split(/([/:])/)
@@ -179,7 +205,8 @@ function updatePnpmLockfile (lock, latest) {
179
205
  for (i = i + 1; i < lines.length; i++) {
180
206
  if (lines[i].indexOf('integrity: ') !== -1) {
181
207
  lines[i] = lines[i].replace(
182
- /integrity: .+/, 'integrity: ' + latest.dist.integrity
208
+ /integrity: .+/,
209
+ 'integrity: ' + latest.dist.integrity
183
210
  )
184
211
  } else if (lines[i].indexOf(' /') !== -1) {
185
212
  break
@@ -190,7 +217,7 @@ function updatePnpmLockfile (lock, latest) {
190
217
  return { content: lines.join('\n'), versions: versions }
191
218
  }
192
219
 
193
- function updateLockfile (lock, latest) {
220
+ function updateLockfile(lock, latest) {
194
221
  if (!lock.content) lock.content = fs.readFileSync(lock.file).toString()
195
222
 
196
223
  if (lock.mode === 'npm') {
@@ -201,14 +228,16 @@ function updateLockfile (lock, latest) {
201
228
  return updatePnpmLockfile(lock, latest)
202
229
  }
203
230
 
204
- function updatePackageManually (print, lock, latest) {
231
+ function updatePackageManually(print, lock, latest) {
205
232
  var lockfileData = updateLockfile(lock, latest)
206
233
  var caniuseVersions = Object.keys(lockfileData.versions).sort()
207
- if (caniuseVersions.length === 1 &&
208
- caniuseVersions[0] === latest.version) {
234
+ if (caniuseVersions.length === 1 && caniuseVersions[0] === latest.version) {
209
235
  print(
210
- 'Installed version: ' + pico.bold(pico.green(latest.version)) + '\n' +
211
- pico.bold(pico.green('caniuse-lite is up to date')) + '\n'
236
+ 'Installed version: ' +
237
+ pico.bold(pico.green(latest.version)) +
238
+ '\n' +
239
+ pico.bold(pico.green('caniuse-lite is up to date')) +
240
+ '\n'
212
241
  )
213
242
  return
214
243
  }
@@ -218,17 +247,18 @@ function updatePackageManually (print, lock, latest) {
218
247
  }
219
248
  print(
220
249
  'Installed version' +
221
- (caniuseVersions.length === 1 ? ': ' : 's: ') +
222
- pico.bold(pico.red(caniuseVersions.join(', '))) +
223
- '\n' +
224
- 'Removing old caniuse-lite from lock file\n'
250
+ (caniuseVersions.length === 1 ? ': ' : 's: ') +
251
+ pico.bold(pico.red(caniuseVersions.join(', '))) +
252
+ '\n' +
253
+ 'Removing old caniuse-lite from lock file\n'
225
254
  )
226
255
  fs.writeFileSync(lock.file, lockfileData.content)
227
256
 
228
257
  var install = lock.mode === 'yarn' ? 'yarn add -W' : lock.mode + ' install'
229
258
  print(
230
259
  'Installing new caniuse-lite version\n' +
231
- pico.yellow('$ ' + install + ' caniuse-lite') + '\n'
260
+ pico.yellow('$ ' + install + ' caniuse-lite') +
261
+ '\n'
232
262
  )
233
263
  try {
234
264
  childProcess.execSync(install + ' caniuse-lite')
@@ -236,9 +266,12 @@ function updatePackageManually (print, lock, latest) {
236
266
  print(
237
267
  pico.red(
238
268
  '\n' +
239
- e.stack + '\n\n' +
240
- 'Problem with `' + install + ' caniuse-lite` call. ' +
241
- 'Run it manually.\n'
269
+ e.stack +
270
+ '\n\n' +
271
+ 'Problem with `' +
272
+ install +
273
+ ' caniuse-lite` call. ' +
274
+ 'Run it manually.\n'
242
275
  )
243
276
  )
244
277
  process.exit(1)
@@ -247,12 +280,13 @@ function updatePackageManually (print, lock, latest) {
247
280
  var del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall'
248
281
  print(
249
282
  'Cleaning package.json dependencies from caniuse-lite\n' +
250
- pico.yellow('$ ' + del + ' caniuse-lite') + '\n'
283
+ pico.yellow('$ ' + del + ' caniuse-lite') +
284
+ '\n'
251
285
  )
252
286
  childProcess.execSync(del + ' caniuse-lite')
253
287
  }
254
288
 
255
- module.exports = function updateDB (print) {
289
+ module.exports = function updateDB(print) {
256
290
  var lock = detectLockfile()
257
291
  var latest = getLatestInfo(lock)
258
292
 
@@ -264,15 +298,14 @@ module.exports = function updateDB (print) {
264
298
  browsersListRetrievalError = e
265
299
  }
266
300
 
267
- print(
268
- 'Latest version: ' + pico.bold(pico.green(latest.version)) + '\n'
269
- )
301
+ print('Latest version: ' + pico.bold(pico.green(latest.version)) + '\n')
270
302
 
271
303
  if (lock.mode === 'yarn' && lock.version !== 1) {
272
304
  var update = 'yarn up -R'
273
305
  print(
274
306
  'Updating caniuse-lite version\n' +
275
- pico.yellow('$ ' + update + ' caniuse-lite') + '\n'
307
+ pico.yellow('$ ' + update + ' caniuse-lite') +
308
+ '\n'
276
309
  )
277
310
  try {
278
311
  childProcess.execSync(update + ' caniuse-lite')
@@ -280,9 +313,12 @@ module.exports = function updateDB (print) {
280
313
  print(
281
314
  pico.red(
282
315
  '\n' +
283
- e.stack + '\n\n' +
284
- 'Problem with `' + update + ' caniuse-lite` call. ' +
285
- 'Run it manually.\n'
316
+ e.stack +
317
+ '\n\n' +
318
+ 'Problem with `' +
319
+ update +
320
+ ' caniuse-lite` call. ' +
321
+ 'Run it manually.\n'
286
322
  )
287
323
  )
288
324
  process.exit(1)
@@ -306,9 +342,10 @@ module.exports = function updateDB (print) {
306
342
  print(
307
343
  pico.red(
308
344
  '\n' +
309
- browsersListRetrievalError.stack + '\n\n' +
310
- 'Problem with browser list retrieval.\n' +
311
- 'Target browser changes won’t be shown.\n'
345
+ browsersListRetrievalError.stack +
346
+ '\n\n' +
347
+ 'Problem with browser list retrieval.\n' +
348
+ 'Target browser changes won’t be shown.\n'
312
349
  )
313
350
  )
314
351
  } else {