browserslist 4.23.3 → 4.24.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
@@ -44,6 +44,8 @@ module.exports = {
44
44
 
45
45
  findConfig: noop,
46
46
 
47
+ findConfigFile: noop,
48
+
47
49
  clearCaches: noop,
48
50
 
49
51
  oldDataWarning: noop,
package/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- var updateDb = require('update-browserslist-db')
4
3
  var fs = require('fs')
4
+ var updateDb = require('update-browserslist-db')
5
5
 
6
6
  var browserslist = require('./')
7
7
  var pkg = require('./package.json')
package/index.d.ts CHANGED
@@ -166,6 +166,17 @@ declare namespace browserslist {
166
166
  opts?: browserslist.Options
167
167
  ): Query[]
168
168
 
169
+ /**
170
+ * Return queries for specific file inside the project.
171
+ *
172
+ * ```js
173
+ * browserslist.loadConfig({
174
+ * file: process.cwd()
175
+ * }) ?? browserslist.defaults
176
+ * ```
177
+ */
178
+ function loadConfig(options: LoadConfigOptions): string[] | undefined
179
+
169
180
  function clearCaches(): void
170
181
 
171
182
  function parseConfig(string: string): Config
@@ -174,13 +185,25 @@ declare namespace browserslist {
174
185
 
175
186
  function findConfig(...pathSegments: string[]): Config | undefined
176
187
 
188
+ function findConfigFile(...pathSegments: string[]): string | undefined
189
+
177
190
  interface LoadConfigOptions {
191
+ /**
192
+ * Path to config file
193
+ * */
178
194
  config?: string
195
+
196
+ /**
197
+ * Path to file inside the project to find Browserslist config
198
+ * in closest folder
199
+ */
179
200
  path?: string
201
+
202
+ /**
203
+ * Environment to choose part of config.
204
+ */
180
205
  env?: string
181
206
  }
182
-
183
- function loadConfig(options: LoadConfigOptions): string[] | undefined
184
207
  }
185
208
 
186
209
  declare global {
package/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  var jsReleases = require('node-releases/data/processed/envs.json')
2
2
  var agents = require('caniuse-lite/dist/unpacker/agents').agents
3
+ var e2c = require('electron-to-chromium/versions')
3
4
  var jsEOL = require('node-releases/data/release-schedule/release-schedule.json')
4
5
  var path = require('path')
5
- var e2c = require('electron-to-chromium/versions')
6
6
 
7
7
  var BrowserslistError = require('./error')
8
- var parse = require('./parse')
9
- var env = require('./node') // Will load browser.js in webpack
8
+ var env = require('./node')
9
+ var parse = require('./parse') // Will load browser.js in webpack
10
10
 
11
11
  var YEAR = 365.259641 * 24 * 60 * 60 * 1000
12
12
  var ANDROID_EVERGREEN_FIRST = '37'
@@ -491,6 +491,7 @@ browserslist.versionAliases = {}
491
491
  browserslist.clearCaches = env.clearCaches
492
492
  browserslist.parseConfig = env.parseConfig
493
493
  browserslist.readConfig = env.readConfig
494
+ browserslist.findConfigFile = env.findConfigFile
494
495
  browserslist.findConfig = env.findConfig
495
496
  browserslist.loadConfig = env.loadConfig
496
497
 
package/node.js CHANGED
@@ -1,14 +1,14 @@
1
1
  var feature = require('caniuse-lite/dist/unpacker/feature').default
2
2
  var region = require('caniuse-lite/dist/unpacker/region').default
3
- var path = require('path')
4
3
  var fs = require('fs')
4
+ var path = require('path')
5
5
 
6
6
  var BrowserslistError = require('./error')
7
7
 
8
8
  var IS_SECTION = /^\s*\[(.+)]\s*$/
9
9
  var CONFIG_PATTERN = /^browserslist-config-/
10
10
  var SCOPED_CONFIG__PATTERN = /@[^/]+(?:\/[^/]+)?\/browserslist-config(?:-|$|\/)/
11
- var TIME_TO_UPDATE_CANIUSE = 6 * 30 * 24 * 60 * 60 * 1000
11
+ var MONTHS_TO_UPDATE_CANIUSE = 6
12
12
  var FORMAT =
13
13
  'Browserslist config should be a string or an array ' +
14
14
  'of strings with browser queries'
@@ -126,6 +126,14 @@ function parsePackage(file) {
126
126
  return list
127
127
  }
128
128
 
129
+ function parsePackageOrReadConfig(file) {
130
+ if (path.basename(file) === 'package.json') {
131
+ return parsePackage(file)
132
+ } else {
133
+ return module.exports.readConfig(file)
134
+ }
135
+ }
136
+
129
137
  function latestReleaseTime(agents) {
130
138
  var latest = 0
131
139
  for (var name in agents) {
@@ -139,6 +147,16 @@ function latestReleaseTime(agents) {
139
147
  return latest * 1000
140
148
  }
141
149
 
150
+ function getMonthsPassed(date) {
151
+ var now = new Date();
152
+ var past = new Date(date);
153
+
154
+ var years = now.getFullYear() - past.getFullYear();
155
+ var months = now.getMonth() - past.getMonth();
156
+
157
+ return years * 12 + months;
158
+ }
159
+
142
160
  function normalizeStats(data, stats) {
143
161
  if (!data) {
144
162
  data = {}
@@ -237,11 +255,7 @@ module.exports = {
237
255
  return process.env.BROWSERSLIST
238
256
  } else if (opts.config || process.env.BROWSERSLIST_CONFIG) {
239
257
  var file = opts.config || process.env.BROWSERSLIST_CONFIG
240
- if (path.basename(file) === 'package.json') {
241
- return pickEnv(parsePackage(file), opts)
242
- } else {
243
- return pickEnv(module.exports.readConfig(file), opts)
244
- }
258
+ return pickEnv(parsePackageOrReadConfig(file), opts)
245
259
  } else if (opts.path) {
246
260
  return pickEnv(module.exports.findConfig(opts.path), opts)
247
261
  } else {
@@ -330,17 +344,8 @@ module.exports = {
330
344
  return module.exports.parseConfig(fs.readFileSync(file))
331
345
  },
332
346
 
333
- findConfig: function findConfig(from) {
334
- from = path.resolve(from)
335
-
336
- var passed = []
347
+ findConfigFile: function findConfigFile(from) {
337
348
  var resolved = eachParent(from, function (dir) {
338
- if (dir in configCache) {
339
- return configCache[dir]
340
- }
341
-
342
- passed.push(dir)
343
-
344
349
  var config = path.join(dir, 'browserslist')
345
350
  var pkg = path.join(dir, 'package.json')
346
351
  var rc = path.join(dir, '.browserslistrc')
@@ -370,16 +375,38 @@ module.exports = {
370
375
  dir + ' contains both .browserslistrc and browserslist'
371
376
  )
372
377
  } else if (isFile(config)) {
373
- return module.exports.readConfig(config)
378
+ return config
374
379
  } else if (isFile(rc)) {
375
- return module.exports.readConfig(rc)
376
- } else {
377
- return pkgBrowserslist
380
+ return rc
381
+ } else if (pkgBrowserslist) {
382
+ return pkg
378
383
  }
379
384
  })
385
+
386
+ return resolved
387
+ },
388
+
389
+ findConfig: function findConfig(from) {
390
+ from = path.resolve(from)
391
+
392
+ var fromDir = isFile(from) ? path.dirname(from) : from
393
+ if (fromDir in configCache) {
394
+ return configCache[fromDir]
395
+ }
396
+
397
+ var resolved
398
+ var configFile = this.findConfigFile(from)
399
+ if (configFile) {
400
+ resolved = parsePackageOrReadConfig(configFile)
401
+ }
402
+
380
403
  if (!process.env.BROWSERSLIST_DISABLE_CACHE) {
381
- passed.forEach(function (dir) {
404
+ var configDir = configFile && path.dirname(configFile)
405
+ eachParent(from, function (dir) {
382
406
  configCache[dir] = resolved
407
+ if (dir === configDir) {
408
+ return null
409
+ }
383
410
  })
384
411
  }
385
412
  return resolved
@@ -399,11 +426,15 @@ module.exports = {
399
426
  if (process.env.BROWSERSLIST_IGNORE_OLD_DATA) return
400
427
 
401
428
  var latest = latestReleaseTime(agentsObj)
402
- var halfYearAgo = Date.now() - TIME_TO_UPDATE_CANIUSE
429
+ var monthsPassed = getMonthsPassed(latest)
430
+ var halfYearAgo = monthsPassed >= MONTHS_TO_UPDATE_CANIUSE
431
+
432
+ if (latest !== 0 && halfYearAgo) {
433
+ var monthWord = monthsPassed > 1 ? 'months' : 'month'
434
+ var monthsOldText = monthsPassed + ' ' + monthWord + ' old.'
403
435
 
404
- if (latest !== 0 && latest < halfYearAgo) {
405
436
  console.warn(
406
- 'Browserslist: caniuse-lite is outdated. Please run:\n' +
437
+ 'Browserslist: caniuse-lite is '+ monthsOldText +' . Please run:\n' +
407
438
  ' npx update-browserslist-db@latest\n' +
408
439
  ' Why you should do it regularly: ' +
409
440
  'https://github.com/browserslist/update-db#readme'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.23.3",
3
+ "version": "4.24.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",
@@ -25,10 +25,10 @@
25
25
  "license": "MIT",
26
26
  "repository": "browserslist/browserslist",
27
27
  "dependencies": {
28
- "caniuse-lite": "^1.0.30001646",
29
- "electron-to-chromium": "^1.5.4",
28
+ "caniuse-lite": "^1.0.30001669",
29
+ "electron-to-chromium": "^1.5.41",
30
30
  "node-releases": "^2.0.18",
31
- "update-browserslist-db": "^1.1.0"
31
+ "update-browserslist-db": "^1.1.1"
32
32
  },
33
33
  "engines": {
34
34
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
package/parse.js CHANGED
@@ -9,7 +9,7 @@ function flatten(array) {
9
9
  }
10
10
 
11
11
  function find(string, predicate) {
12
- for (var n = 1, max = string.length; n <= max; n++) {
12
+ for (var max = string.length, n = 1; n <= max; n++) {
13
13
  var parsed = string.substr(-n, n)
14
14
  if (predicate(parsed, n, max)) {
15
15
  return string.slice(0, -n)