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 +2 -2
- package/check-npm-version.js +16 -0
- package/cli.js +1 -0
- package/index.js +45 -64
- package/package.json +1 -1
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
|
|
4
|
-
src="https://
|
|
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
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
|
|
75
|
-
let
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
.
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
282
|
-
let
|
|
265
|
+
let listError
|
|
266
|
+
let oldList
|
|
283
267
|
try {
|
|
284
|
-
|
|
268
|
+
oldList = getBrowsers()
|
|
285
269
|
} catch (e) {
|
|
286
|
-
|
|
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
|
|
302
|
-
if (!
|
|
285
|
+
let newList
|
|
286
|
+
if (!listError) {
|
|
303
287
|
try {
|
|
304
|
-
|
|
288
|
+
newList = getBrowsers()
|
|
305
289
|
} catch (e) /* c8 ignore start */ {
|
|
306
|
-
|
|
290
|
+
listError = e
|
|
307
291
|
} /* c8 ignore end */
|
|
308
292
|
}
|
|
309
293
|
|
|
310
|
-
if (
|
|
294
|
+
if (listError) {
|
|
311
295
|
print(
|
|
312
296
|
pico.red(
|
|
313
297
|
'\n' +
|
|
314
|
-
|
|
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
|
|
322
|
-
|
|
323
|
-
currentBrowsersList
|
|
324
|
-
)
|
|
325
|
-
if (targetBrowserChanges) {
|
|
305
|
+
let changes = diffBrowsers(oldList, newList)
|
|
306
|
+
if (changes) {
|
|
326
307
|
print('\nTarget browser changes:\n')
|
|
327
|
-
print(
|
|
308
|
+
print(changes + '\n')
|
|
328
309
|
} else {
|
|
329
310
|
print('\n' + pico.green('No target browser changes') + '\n')
|
|
330
311
|
}
|