browserslist 4.9.1 → 4.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/README.md +1 -1
- package/cli.js +18 -11
- package/node.js +1 -8
- package/package.json +5 -4
- package/update-db.js +131 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ not IE_Mob 11
|
|
|
37
37
|
maintained node versions
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Developers set their version lists using queries like `last 2
|
|
40
|
+
Developers set their version lists using queries like `last 2 versions`
|
|
41
41
|
to be free from updating versions manually.
|
|
42
42
|
Browserslist will use [`caniuse-lite`] with [Can I Use] data for this queries.
|
|
43
43
|
|
package/cli.js
CHANGED
|
@@ -3,19 +3,22 @@
|
|
|
3
3
|
var fs = require('fs')
|
|
4
4
|
|
|
5
5
|
var browserslist = require('./')
|
|
6
|
+
var updateDb = require('./update-db')
|
|
6
7
|
var pkg = require('./package.json')
|
|
8
|
+
|
|
7
9
|
var args = process.argv.slice(2)
|
|
8
10
|
|
|
9
11
|
var USAGE = 'Usage:\n' +
|
|
10
|
-
'
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
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 --update-db'
|
|
19
22
|
|
|
20
23
|
function isArg (arg) {
|
|
21
24
|
return args.some(function (str) {
|
|
@@ -24,14 +27,18 @@ function isArg (arg) {
|
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
function error (msg) {
|
|
27
|
-
process.stderr.write(
|
|
30
|
+
process.stderr.write('browserslist: ' + msg + '\n')
|
|
28
31
|
process.exit(1)
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
if (isArg('--help') || isArg('-h')) {
|
|
32
35
|
process.stdout.write(pkg.description + '.\n\n' + USAGE + '\n')
|
|
33
36
|
} else if (isArg('--version') || isArg('-v')) {
|
|
34
|
-
process.stdout.write(
|
|
37
|
+
process.stdout.write('browserslist ' + pkg.version + '\n')
|
|
38
|
+
} else if (isArg('--update-db')) {
|
|
39
|
+
updateDb(function (str) {
|
|
40
|
+
process.stdout.write(str)
|
|
41
|
+
})
|
|
35
42
|
} else {
|
|
36
43
|
var mode = 'browsers'
|
|
37
44
|
var opts = { }
|
package/node.js
CHANGED
|
@@ -342,14 +342,7 @@ module.exports = {
|
|
|
342
342
|
var halfYearAgo = Date.now() - TIME_TO_UPDATE_CANIUSE
|
|
343
343
|
|
|
344
344
|
if (latest !== 0 && latest < halfYearAgo) {
|
|
345
|
-
var command = '
|
|
346
|
-
eachParent(__filename, function (dir) {
|
|
347
|
-
var pckg = path.join(dir, 'package.json')
|
|
348
|
-
var yarnLock = path.join(dir, 'yarn.lock')
|
|
349
|
-
if (isFile(pckg) && isFile(yarnLock)) {
|
|
350
|
-
command = 'yarn upgrade'
|
|
351
|
-
}
|
|
352
|
-
})
|
|
345
|
+
var command = 'npx browserslist --update-db'
|
|
353
346
|
console.warn(
|
|
354
347
|
'Browserslist: caniuse-lite is outdated. ' +
|
|
355
348
|
'Please run the following command: `' + command + '`'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.10.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,9 +15,10 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"repository": "browserslist/browserslist",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"caniuse-lite": "^1.0.
|
|
19
|
-
"electron-to-chromium": "^1.3.
|
|
20
|
-
"node-releases": "^1.1.
|
|
18
|
+
"caniuse-lite": "^1.0.30001035",
|
|
19
|
+
"electron-to-chromium": "^1.3.378",
|
|
20
|
+
"node-releases": "^1.1.52",
|
|
21
|
+
"pkg-up": "^3.1.0"
|
|
21
22
|
},
|
|
22
23
|
"bin": "./cli.js",
|
|
23
24
|
"browser": {
|
package/update-db.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
var childProcess = require('child_process')
|
|
2
|
+
var pkgUp = require('pkg-up')
|
|
3
|
+
var path = require('path')
|
|
4
|
+
var fs = require('fs')
|
|
5
|
+
|
|
6
|
+
var BrowserslistError = require('./error')
|
|
7
|
+
|
|
8
|
+
function detectLockfile () {
|
|
9
|
+
var packagePath = pkgUp.sync()
|
|
10
|
+
if (!packagePath) {
|
|
11
|
+
throw new BrowserslistError(
|
|
12
|
+
'Cannot find package.json. ' +
|
|
13
|
+
'Is it a right project to run npx browserslist --update-db?'
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
var rootDir = path.dirname(packagePath)
|
|
18
|
+
var lockfileNpm = path.join(rootDir, 'package-lock.json')
|
|
19
|
+
var lockfileYarn = path.join(rootDir, 'yarn.lock')
|
|
20
|
+
var lockfilePnpm = path.join(rootDir, 'pnpm-lock.yaml')
|
|
21
|
+
|
|
22
|
+
if (fs.existsSync(lockfileNpm)) {
|
|
23
|
+
return { mode: 'npm', file: lockfileNpm }
|
|
24
|
+
} else if (fs.existsSync(lockfileYarn)) {
|
|
25
|
+
return { mode: 'yarn', file: lockfileYarn }
|
|
26
|
+
} else if (fs.existsSync(lockfilePnpm)) {
|
|
27
|
+
return { mode: 'pnpm', file: lockfilePnpm }
|
|
28
|
+
} else {
|
|
29
|
+
throw new BrowserslistError(
|
|
30
|
+
'No lockfile found. Run "npm install", "yarn install" or "pnpm install"'
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function getCurrentVersion (lock) {
|
|
36
|
+
var match
|
|
37
|
+
if (lock.mode === 'npm') {
|
|
38
|
+
var dependencies = JSON.parse(lock.content).dependencies
|
|
39
|
+
if (dependencies && dependencies['caniuse-lite']) {
|
|
40
|
+
return dependencies['caniuse-lite'].version
|
|
41
|
+
}
|
|
42
|
+
} else if (lock.mode === 'yarn') {
|
|
43
|
+
match = /caniuse-lite@[^:]+:\n\s+version\s+"([^"]+)"/.exec(lock.content)
|
|
44
|
+
if (match[1]) return match[1]
|
|
45
|
+
} else if (lock.mode === 'pnpm') {
|
|
46
|
+
match = /\/caniuse-lite\/([^:]+):/.exec(lock.content)
|
|
47
|
+
if (match[1]) return match[1]
|
|
48
|
+
}
|
|
49
|
+
return null
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getLastestInfo () {
|
|
53
|
+
return JSON.parse(
|
|
54
|
+
childProcess.execSync('npm show caniuse-lite --json').toString()
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function updateLockfile (lock, latest) {
|
|
59
|
+
if (lock.mode === 'npm') {
|
|
60
|
+
var fixed = deletePackage(JSON.parse(lock.content))
|
|
61
|
+
return JSON.stringify(fixed, null, ' ')
|
|
62
|
+
} else {
|
|
63
|
+
var lines = lock.content.split('\n')
|
|
64
|
+
var i
|
|
65
|
+
if (lock.mode === 'yarn') {
|
|
66
|
+
for (i = 0; i < lines.length; i++) {
|
|
67
|
+
if (lines[i].indexOf('caniuse-lite@') !== -1) {
|
|
68
|
+
lines[i + 1] = lines[i + 1].replace(
|
|
69
|
+
/version "[^"]+"/, 'version "' + latest.version + '"'
|
|
70
|
+
)
|
|
71
|
+
lines[i + 2] = lines[i + 2].replace(
|
|
72
|
+
/resolved "[^"]+"/, 'resolved "' + latest.dist.tarball + '"'
|
|
73
|
+
)
|
|
74
|
+
lines[i + 3] = lines[i + 3].replace(
|
|
75
|
+
/integrity .+/, 'integrity ' + latest.dist.integrity
|
|
76
|
+
)
|
|
77
|
+
i += 4
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} else if (lock.mode === 'pnpm') {
|
|
81
|
+
for (i = 0; i < lines.length; i++) {
|
|
82
|
+
if (lines[i].indexOf('caniuse-lite:') >= 0) {
|
|
83
|
+
lines[i] = lines[i].replace(/: .*$/, ': ' + latest.version)
|
|
84
|
+
} else if (lines[i].indexOf('/caniuse-lite') >= 0) {
|
|
85
|
+
lines[i] = lines[i].replace(/\/[^/:]+:/, '/' + latest.version + ':')
|
|
86
|
+
for (i = i + 1; i < lines.length; i++) {
|
|
87
|
+
if (lines[i].indexOf('integrity: ') !== -1) {
|
|
88
|
+
lines[i] = lines[i].replace(
|
|
89
|
+
/integrity: .+/, 'integrity: ' + latest.dist.integrity
|
|
90
|
+
)
|
|
91
|
+
} else if (lines[i].indexOf(' /') !== -1) {
|
|
92
|
+
break
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n')
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function deletePackage (node) {
|
|
103
|
+
if (node.dependencies) {
|
|
104
|
+
delete node.dependencies['caniuse-lite']
|
|
105
|
+
for (var i in node.dependencies) {
|
|
106
|
+
node.dependencies[i] = deletePackage(node.dependencies[i])
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return node
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
module.exports = function updateDB (print) {
|
|
113
|
+
var lock = detectLockfile()
|
|
114
|
+
lock.content = fs.readFileSync(lock.file).toString()
|
|
115
|
+
|
|
116
|
+
var current = getCurrentVersion(lock)
|
|
117
|
+
var latest = getLastestInfo()
|
|
118
|
+
|
|
119
|
+
if (typeof current === 'string') {
|
|
120
|
+
print('Current version: ' + current + '\n')
|
|
121
|
+
}
|
|
122
|
+
print(
|
|
123
|
+
'New version: ' + latest.version + '\n' +
|
|
124
|
+
'Updating caniuse-lite…\n'
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
fs.writeFileSync(lock.file, updateLockfile(lock, latest))
|
|
128
|
+
childProcess.execSync(lock.mode + ' install')
|
|
129
|
+
|
|
130
|
+
print('caniuse-lite has been successfully updated')
|
|
131
|
+
}
|