browserslist 4.17.3 → 4.18.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/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,7 +203,7 @@ 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)
@@ -218,7 +215,7 @@ function filterByYear (since, context) {
218
215
  }, [])
219
216
  }
220
217
 
221
- function cloneData (data) {
218
+ function cloneData(data) {
222
219
  return {
223
220
  name: data.name,
224
221
  versions: data.versions,
@@ -227,14 +224,14 @@ function cloneData (data) {
227
224
  }
228
225
  }
229
226
 
230
- function mapVersions (data, map) {
227
+ function mapVersions(data, map) {
231
228
  data.versions = data.versions.map(function (i) {
232
229
  return map[i] || i
233
230
  })
234
231
  data.released = data.versions.map(function (i) {
235
232
  return map[i] || i
236
233
  })
237
- var fixedDate = { }
234
+ var fixedDate = {}
238
235
  for (var i in data.releaseDate) {
239
236
  fixedDate[map[i] || i] = data.releaseDate[i]
240
237
  }
@@ -242,7 +239,7 @@ function mapVersions (data, map) {
242
239
  return data
243
240
  }
244
241
 
245
- function byName (name, context) {
242
+ function byName(name, context) {
246
243
  name = name.toLowerCase()
247
244
  name = browserslist.aliases[name] || name
248
245
  if (context.mobileToDesktop && browserslist.desktopNames[name]) {
@@ -261,34 +258,38 @@ function byName (name, context) {
261
258
  return browserslist.data[name]
262
259
  }
263
260
 
264
- function normalizeAndroidVersions (androidVersions, chromeVersions) {
261
+ function normalizeAndroidVersions(androidVersions, chromeVersions) {
265
262
  var firstEvergreen = ANDROID_EVERGREEN_FIRST
266
263
  var last = chromeVersions[chromeVersions.length - 1]
267
264
  return androidVersions
268
- .filter(function (version) { return /^(?:[2-4]\.|[34]$)/.test(version) })
265
+ .filter(function (version) {
266
+ return /^(?:[2-4]\.|[34]$)/.test(version)
267
+ })
269
268
  .concat(chromeVersions.slice(firstEvergreen - last - 1))
270
269
  }
271
270
 
272
- function normalizeAndroidData (android, chrome) {
271
+ function normalizeAndroidData(android, chrome) {
273
272
  android.released = normalizeAndroidVersions(android.released, chrome.released)
274
273
  android.versions = normalizeAndroidVersions(android.versions, chrome.versions)
275
274
  return android
276
275
  }
277
276
 
278
- function checkName (name, context) {
277
+ function checkName(name, context) {
279
278
  var data = byName(name, context)
280
279
  if (!data) throw new BrowserslistError('Unknown browser ' + name)
281
280
  return data
282
281
  }
283
282
 
284
- function unknownQuery (query) {
283
+ function unknownQuery(query) {
285
284
  return new BrowserslistError(
286
- 'Unknown browser query `' + query + '`. ' +
287
- 'Maybe you are using old Browserslist or made typo in query.'
285
+ 'Unknown browser query `' +
286
+ query +
287
+ '`. ' +
288
+ 'Maybe you are using old Browserslist or made typo in query.'
288
289
  )
289
290
  }
290
291
 
291
- function filterAndroid (list, versions, context) {
292
+ function filterAndroid(list, versions, context) {
292
293
  if (context.mobileToDesktop) return list
293
294
  var released = browserslist.data.android.released
294
295
  var last = released[released.length - 1]
@@ -308,7 +309,7 @@ function filterAndroid (list, versions, context) {
308
309
  * the select function in `queries`.
309
310
  * @returns {string[]} A list of browsers
310
311
  */
311
- function resolve (queries, context) {
312
+ function resolve(queries, context) {
312
313
  if (Array.isArray(queries)) {
313
314
  queries = flatten(queries.map(parse))
314
315
  } else {
@@ -323,7 +324,10 @@ function resolve (queries, context) {
323
324
  if (index === 0) {
324
325
  throw new BrowserslistError(
325
326
  'Write any browsers query (for instance, `defaults`) ' +
326
- 'before `' + selection + '`')
327
+ 'before `' +
328
+ selection +
329
+ '`'
330
+ )
327
331
  }
328
332
  selection = selection.slice(4)
329
333
  }
@@ -356,7 +360,7 @@ function resolve (queries, context) {
356
360
  case QUERY_OR:
357
361
  default:
358
362
  if (isExclude) {
359
- var filter = { }
363
+ var filter = {}
360
364
  array.forEach(function (j) {
361
365
  filter[j] = true
362
366
  })
@@ -373,7 +377,7 @@ function resolve (queries, context) {
373
377
  }, [])
374
378
  }
375
379
 
376
- var cache = { }
380
+ var cache = {}
377
381
 
378
382
  /**
379
383
  * Return array of browsers by selection queries.
@@ -400,8 +404,8 @@ var cache = { }
400
404
  * @example
401
405
  * browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8']
402
406
  */
403
- function browserslist (queries, opts) {
404
- if (typeof opts === 'undefined') opts = { }
407
+ function browserslist(queries, opts) {
408
+ if (typeof opts === 'undefined') opts = {}
405
409
 
406
410
  if (typeof opts.path === 'undefined') {
407
411
  opts.path = path.resolve ? path.resolve('.') : '.'
@@ -418,7 +422,8 @@ function browserslist (queries, opts) {
418
422
 
419
423
  if (!(typeof queries === 'string' || Array.isArray(queries))) {
420
424
  throw new BrowserslistError(
421
- 'Browser queries must be an array or string. Got ' + typeof queries + '.')
425
+ 'Browser queries must be an array or string. Got ' + typeof queries + '.'
426
+ )
422
427
  }
423
428
 
424
429
  var context = {
@@ -432,7 +437,7 @@ function browserslist (queries, opts) {
432
437
  env.oldDataWarning(browserslist.data)
433
438
  var stats = env.getStat(opts, browserslist.data)
434
439
  if (stats) {
435
- context.customUsage = { }
440
+ context.customUsage = {}
436
441
  for (var browser in stats) {
437
442
  fillUsage(context.customUsage, browser, stats[browser])
438
443
  }
@@ -461,7 +466,7 @@ function browserslist (queries, opts) {
461
466
  return result
462
467
  }
463
468
 
464
- function parse (queries) {
469
+ function parse(queries) {
465
470
  var qs = []
466
471
  do {
467
472
  queries = doMatch(queries, qs)
@@ -469,7 +474,7 @@ function parse (queries) {
469
474
  return qs
470
475
  }
471
476
 
472
- function doMatch (string, qs) {
477
+ function doMatch(string, qs) {
473
478
  var or = /^(?:,\s*|\s+or\s+)(.*)/i
474
479
  var and = /^\s+and\s+(.*)/i
475
480
 
@@ -488,7 +493,7 @@ function doMatch (string, qs) {
488
493
  })
489
494
  }
490
495
 
491
- function find (string, predicate) {
496
+ function find(string, predicate) {
492
497
  for (var n = 1, max = string.length; n <= max; n++) {
493
498
  var parsed = string.substr(-n, n)
494
499
  if (predicate(parsed, n, max)) {
@@ -498,7 +503,7 @@ function find (string, predicate) {
498
503
  return ''
499
504
  }
500
505
 
501
- function flatten (array) {
506
+ function flatten(array) {
502
507
  if (!Array.isArray(array)) return [array]
503
508
  return array.reduce(function (a, b) {
504
509
  return a.concat(flatten(b))
@@ -506,20 +511,15 @@ function flatten (array) {
506
511
  }
507
512
 
508
513
  // Will be filled by Can I Use data below
509
- browserslist.cache = { }
510
- browserslist.data = { }
514
+ browserslist.cache = {}
515
+ browserslist.data = {}
511
516
  browserslist.usage = {
512
- global: { },
517
+ global: {},
513
518
  custom: null
514
519
  }
515
520
 
516
521
  // Default browsers query
517
- browserslist.defaults = [
518
- '> 0.5%',
519
- 'last 2 versions',
520
- 'Firefox ESR',
521
- 'not dead'
522
- ]
522
+ browserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
523
523
 
524
524
  // Browser names aliases
525
525
  browserslist.aliases = {
@@ -548,7 +548,7 @@ browserslist.desktopNames = {
548
548
  }
549
549
 
550
550
  // Aliases to work with joined versions like `ios_saf 7.0-7.1`
551
- browserslist.versionAliases = { }
551
+ browserslist.versionAliases = {}
552
552
 
553
553
  browserslist.clearCaches = env.clearCaches
554
554
  browserslist.parseConfig = env.parseConfig
@@ -597,7 +597,7 @@ browserslist.coverage = function (browsers, stats) {
597
597
  if ('dataByBrowser' in stats) {
598
598
  stats = stats.dataByBrowser
599
599
  }
600
- data = { }
600
+ data = {}
601
601
  for (var name in stats) {
602
602
  for (var version in stats[name]) {
603
603
  data[name + ' ' + version] = stats[name][version]
@@ -614,7 +614,7 @@ browserslist.coverage = function (browsers, stats) {
614
614
  }, 0)
615
615
  }
616
616
 
617
- function nodeQuery (context, version) {
617
+ function nodeQuery(context, version) {
618
618
  var nodeReleases = jsReleases.filter(function (i) {
619
619
  return i.name === 'nodejs'
620
620
  })
@@ -631,22 +631,20 @@ function nodeQuery (context, version) {
631
631
  return ['node ' + matched[matched.length - 1].version]
632
632
  }
633
633
 
634
- function sinceQuery (context, year, month, date) {
634
+ function sinceQuery(context, year, month, date) {
635
635
  year = parseInt(year)
636
636
  month = parseInt(month || '01') - 1
637
637
  date = parseInt(date || '01')
638
638
  return filterByYear(Date.UTC(year, month, date, 0, 0, 0), context)
639
639
  }
640
640
 
641
- function coverQuery (context, coverage, statMode) {
641
+ function coverQuery(context, coverage, statMode) {
642
642
  coverage = parseFloat(coverage)
643
643
  var usage = browserslist.usage.global
644
644
  if (statMode) {
645
645
  if (statMode.match(/^my\s+stats$/)) {
646
646
  if (!context.customUsage) {
647
- throw new BrowserslistError(
648
- 'Custom usage statistics was not provided'
649
- )
647
+ throw new BrowserslistError('Custom usage statistics was not provided')
650
648
  }
651
649
  usage = context.customUsage
652
650
  } else {
@@ -986,7 +984,7 @@ var QUERIES = [
986
984
  var data = checkName(name, context)
987
985
  from = parseFloat(normalizeVersion(data, from) || from)
988
986
  to = parseFloat(normalizeVersion(data, to) || to)
989
- function filter (v) {
987
+ function filter(v) {
990
988
  var parsed = parseFloat(v)
991
989
  return parsed >= from && parsed <= to
992
990
  }
@@ -1180,11 +1178,11 @@ var QUERIES = [
1180
1178
  }
1181
1179
  }
1182
1180
  }
1183
- ];
1181
+ ]
1184
1182
 
1185
1183
  // Get and convert Can I Use data
1186
1184
 
1187
- (function () {
1185
+ ;(function () {
1188
1186
  for (var name in agents) {
1189
1187
  var browser = agents[name]
1190
1188
  browserslist.data[name] = {
@@ -1195,7 +1193,7 @@ var QUERIES = [
1195
1193
  }
1196
1194
  fillUsage(browserslist.usage.global, name, browser.usage_global)
1197
1195
 
1198
- browserslist.versionAliases[name] = { }
1196
+ browserslist.versionAliases[name] = {}
1199
1197
  for (var i = 0; i < browser.versions.length; i++) {
1200
1198
  var full = browser.versions[i]
1201
1199
  if (!full) continue
@@ -1210,6 +1208,6 @@ var QUERIES = [
1210
1208
  }
1211
1209
 
1212
1210
  browserslist.versionAliases.op_mob['59'] = '58'
1213
- }())
1211
+ })()
1214
1212
 
1215
1213
  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.3",
3
+ "version": "4.18.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,11 +15,11 @@
15
15
  "license": "MIT",
16
16
  "repository": "browserslist/browserslist",
17
17
  "dependencies": {
18
- "caniuse-lite": "^1.0.30001264",
19
- "electron-to-chromium": "^1.3.857",
18
+ "caniuse-lite": "^1.0.30001280",
19
+ "electron-to-chromium": "^1.3.896",
20
20
  "escalade": "^3.1.1",
21
- "node-releases": "^1.1.77",
22
- "picocolors": "^0.2.1"
21
+ "node-releases": "^2.0.1",
22
+ "picocolors": "^1.0.0"
23
23
  },
24
24
  "engines": {
25
25
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
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 {