update-browserslist-db 1.0.3 → 1.0.6

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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Update Browserslist DB
2
2
 
3
- <img width="120" height="120" alt="Browserslist logo by Anton Lovchikov"
4
- src="https://browserslist.github.io/browserslist/logo.svg" align="right">
3
+ <img width="120" height="120" alt="Browserslist logo by Anton Popov"
4
+ src="https://browsersl.ist/logo.svg" align="right">
5
5
 
6
6
  CLI tool to update `caniuse-lite` with browsers DB
7
7
  from [Browserslist](https://github.com/browserslist/browserslist/) config.
@@ -0,0 +1,16 @@
1
+ let { execSync } = require('child_process')
2
+ let pico = require('picocolors')
3
+
4
+ try {
5
+ let version = parseInt(execSync('npm -v'))
6
+ if (version <= 6) {
7
+ process.stderr.write(
8
+ pico.red(
9
+ 'Update npm or call ' +
10
+ pico.yellow('npx browserslist@latest --update-db') +
11
+ '\n'
12
+ )
13
+ )
14
+ process.exit(1)
15
+ }
16
+ } catch (e) {}
package/cli.js CHANGED
@@ -3,6 +3,7 @@
3
3
  let { readFileSync } = require('fs')
4
4
  let { join } = require('path')
5
5
 
6
+ require('./check-npm-version')
6
7
  let updateDb = require('./')
7
8
 
8
9
  const ROOT = __dirname
package/index.js CHANGED
@@ -4,6 +4,18 @@ let pico = require('picocolors')
4
4
  let path = require('path')
5
5
  let fs = require('fs')
6
6
 
7
+ const DEFAULT_INDENT = ' '
8
+ const INDENT_REGEXP = /^(\s*)[^\s]/m
9
+
10
+ function detectIndent(text) {
11
+ try {
12
+ return INDENT_REGEXP.exec(text)[1] || DEFAULT_INDENT
13
+ } catch (e) {
14
+ /* c8 ignore next 2 */
15
+ return DEFAULT_INDENT
16
+ }
17
+ }
18
+
7
19
  function BrowserslistUpdateError(message) {
8
20
  this.name = 'BrowserslistUpdateError'
9
21
  this.message = message
@@ -71,64 +83,40 @@ function getLatestInfo(lock) {
71
83
  )
72
84
  }
73
85
 
74
- function getBrowsersList() {
75
- let spawn = childProcess.spawnSync('npx', ['browserslist'])
76
- if (spawn.status !== 0) throw new Error(spawn.stderr.toString())
77
- return spawn.stdout
78
- .toString()
79
- .trim()
80
- .split('\n')
81
- .map(line => {
82
- return line.trim().split(' ')
83
- })
84
- .reduce((result, entry) => {
85
- if (!result[entry[0]]) {
86
- result[entry[0]] = []
87
- }
88
- result[entry[0]].push(entry[1])
89
- return result
90
- }, {})
86
+ function getBrowsers() {
87
+ let browserslist = require('browserslist')
88
+ return browserslist().reduce((result, entry) => {
89
+ if (!result[entry[0]]) {
90
+ result[entry[0]] = []
91
+ }
92
+ result[entry[0]].push(entry[1])
93
+ return result
94
+ }, {})
91
95
  }
92
96
 
93
- function diffBrowsersLists(old, current) {
97
+ function diffBrowsers(old, current) {
94
98
  let browsers = Object.keys(old).concat(
95
- Object.keys(current).filter(browser => {
96
- return old[browser] === undefined
97
- })
99
+ Object.keys(current).filter(browser => old[browser] === undefined)
98
100
  )
99
101
  return browsers
100
102
  .map(browser => {
101
103
  let oldVersions = old[browser] || []
102
104
  let currentVersions = current[browser] || []
103
- let intersection = oldVersions.filter(version => {
104
- return currentVersions.indexOf(version) !== -1
105
- })
106
- let addedVersions = currentVersions.filter(version => {
107
- return intersection.indexOf(version) === -1
108
- })
109
- let removedVersions = oldVersions.filter(version => {
110
- return intersection.indexOf(version) === -1
111
- })
112
- return removedVersions
113
- .map(version => {
114
- return pico.red('- ' + browser + ' ' + version)
115
- })
116
- .concat(
117
- addedVersions.map(version => {
118
- return pico.green('+ ' + browser + ' ' + version)
119
- })
120
- )
105
+ let common = oldVersions.filter(v => currentVersions.includes(v))
106
+ let added = currentVersions.filter(v => !common.includes(v))
107
+ let removed = oldVersions.filter(v => !common.includes(v))
108
+ return removed
109
+ .map(v => pico.red('- ' + browser + ' ' + v))
110
+ .concat(added.map(v => pico.green('+ ' + browser + ' ' + v)))
121
111
  })
122
- .reduce((result, array) => {
123
- return result.concat(array)
124
- }, [])
112
+ .reduce((result, array) => result.concat(array), [])
125
113
  .join('\n')
126
114
  }
127
115
 
128
116
  function updateNpmLockfile(lock, latest) {
129
117
  let metadata = { latest, versions: [] }
130
118
  let content = deletePackage(JSON.parse(lock.content), metadata)
131
- metadata.content = JSON.stringify(content, null, ' ')
119
+ metadata.content = JSON.stringify(content, null, detectIndent(lock.content))
132
120
  return metadata
133
121
  }
134
122
 
@@ -177,11 +165,7 @@ function updateYarnLockfile(lock, latest) {
177
165
  }
178
166
  }
179
167
  })
180
- let content = blocks
181
- .map(lines => {
182
- return lines.join('\n')
183
- })
184
- .join('')
168
+ let content = blocks.map(lines => lines.join('\n')).join('')
185
169
  return { content, versions }
186
170
  }
187
171
 
@@ -278,12 +262,12 @@ module.exports = function updateDB(print = defaultPrint) {
278
262
  let lock = detectLockfile()
279
263
  let latest = getLatestInfo(lock)
280
264
 
281
- let browsersListRetrievalError
282
- let oldBrowsersList
265
+ let listError
266
+ let oldList
283
267
  try {
284
- oldBrowsersList = getBrowsersList()
268
+ oldList = getBrowsers()
285
269
  } catch (e) {
286
- browsersListRetrievalError = e
270
+ listError = e
287
271
  }
288
272
 
289
273
  print('Latest version: ' + pico.bold(pico.green(latest.version)) + '\n')
@@ -298,33 +282,30 @@ module.exports = function updateDB(print = defaultPrint) {
298
282
 
299
283
  print('caniuse-lite has been successfully updated\n')
300
284
 
301
- let currentBrowsersList
302
- if (!browsersListRetrievalError) {
285
+ let newList
286
+ if (!listError) {
303
287
  try {
304
- currentBrowsersList = getBrowsersList()
288
+ newList = getBrowsers()
305
289
  } catch (e) /* c8 ignore start */ {
306
- browsersListRetrievalError = e
290
+ listError = e
307
291
  } /* c8 ignore end */
308
292
  }
309
293
 
310
- if (browsersListRetrievalError) {
294
+ if (listError) {
311
295
  print(
312
296
  pico.red(
313
297
  '\n' +
314
- browsersListRetrievalError.message +
298
+ listError.stack +
315
299
  '\n\n' +
316
300
  'Problem with browser list retrieval.\n' +
317
301
  'Target browser changes won’t be shown.\n'
318
302
  )
319
303
  )
320
304
  } else {
321
- let targetBrowserChanges = diffBrowsersLists(
322
- oldBrowsersList,
323
- currentBrowsersList
324
- )
325
- if (targetBrowserChanges) {
305
+ let changes = diffBrowsers(oldList, newList)
306
+ if (changes) {
326
307
  print('\nTarget browser changes:\n')
327
- print(targetBrowserChanges + '\n')
308
+ print(changes + '\n')
328
309
  } else {
329
310
  print('\n' + pico.green('No target browser changes') + '\n')
330
311
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "update-browserslist-db",
3
- "version": "1.0.3",
3
+ "version": "1.0.6",
4
4
  "description": "CLI tool to update caniuse-lite to refresh target browsers from Browserslist config",
5
5
  "keywords": [
6
6
  "caniuse",