browserslist 0.3.0 → 0.4.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/.eslintrc +21 -0
- package/ChangeLog.md +13 -0
- package/README.md +8 -3
- package/index.js +89 -63
- package/package.json +7 -8
package/.eslintrc
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rules": {
|
|
3
|
+
"no-unused-expressions": [0],
|
|
4
|
+
"no-underscore-dangle": [0],
|
|
5
|
+
"no-reserved-keys": [2],
|
|
6
|
+
"no-multi-spaces": [0],
|
|
7
|
+
"no-extra-parens": [2],
|
|
8
|
+
"no-unused-vars": [2],
|
|
9
|
+
"no-loop-func": [0],
|
|
10
|
+
"key-spacing": [0],
|
|
11
|
+
"max-len": [2],
|
|
12
|
+
"strict": [0],
|
|
13
|
+
"indent": [2],
|
|
14
|
+
"quotes": [2, "single", "avoid-escape"],
|
|
15
|
+
"curly": [0]
|
|
16
|
+
},
|
|
17
|
+
"env": {
|
|
18
|
+
"mocha": true,
|
|
19
|
+
"node": true
|
|
20
|
+
}
|
|
21
|
+
}
|
package/ChangeLog.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## 0.4
|
|
2
|
+
* Add `config` option and `BROWSERSLIST_CONFIG` environment variable support.
|
|
3
|
+
* Add symlink config support.
|
|
4
|
+
|
|
5
|
+
## 0.3.3
|
|
6
|
+
* Fix DynJS compatibility (by Nick Howes).
|
|
7
|
+
|
|
8
|
+
## 0.3.2
|
|
9
|
+
* Fix joined versions on versions query (by Vincent De Oliveira).
|
|
10
|
+
|
|
11
|
+
## 0.3.1
|
|
12
|
+
* Fix global variable leak (by Peter Müller).
|
|
13
|
+
|
|
1
14
|
## 0.3
|
|
2
15
|
* Takes criterias from `BROWSERSLIST` environment variable.
|
|
3
16
|
|
package/README.md
CHANGED
|
@@ -11,8 +11,8 @@ with a usage of over 5% in global usage statistics:
|
|
|
11
11
|
|
|
12
12
|
```js
|
|
13
13
|
browserslist('last 1 version, > 5%');
|
|
14
|
-
//=> ['and_chr
|
|
15
|
-
// 'ie 11', 'ie_mob 11', 'ios_saf 8.1', 'opera 27', 'safari 8']
|
|
14
|
+
//=> ['and_chr 41', 'chrome 41', 'chrome 40', 'firefox 37', 'firefox 36',
|
|
15
|
+
// 'ie 11', 'ie_mob 11', 'ios_saf 8.1-8.3', 'opera 27', 'safari 8']
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Browserslist will use browsers criterias from:
|
|
@@ -31,7 +31,7 @@ Browserslist will use browsers criterias from:
|
|
|
31
31
|
|
|
32
32
|
## Queries
|
|
33
33
|
|
|
34
|
-
You can specify the
|
|
34
|
+
You can specify the versions by queries (case insensitive):
|
|
35
35
|
|
|
36
36
|
* `last 2 versions`: the last 2 versions for each major browser.
|
|
37
37
|
* `last 2 Chrome versions`: the last 2 versions of Chrome browser.
|
|
@@ -47,6 +47,9 @@ You can specify the browsers by queries (case insensitive):
|
|
|
47
47
|
Blackberry and Android WebView will not be used in `last n versions`.
|
|
48
48
|
You should add them by name.
|
|
49
49
|
|
|
50
|
+
Browserslist works with separated versions of browsers. To use all versions
|
|
51
|
+
of some browsers you can use `Firefox > 0`, but it is a very bad way.
|
|
52
|
+
|
|
50
53
|
[two-letter country code]: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
|
|
51
54
|
|
|
52
55
|
## Browsers
|
|
@@ -100,3 +103,5 @@ split by a new line. You can write a comment after `#`:
|
|
|
100
103
|
Last 2 versions
|
|
101
104
|
IE 8 # sorry
|
|
102
105
|
```
|
|
106
|
+
|
|
107
|
+
You can specify direct path to config by `config` option.
|
package/index.js
CHANGED
|
@@ -5,30 +5,28 @@ var fs = require('fs');
|
|
|
5
5
|
var uniq = function (array) {
|
|
6
6
|
var filtered = [];
|
|
7
7
|
for ( var i = 0; i < array.length; i++ ) {
|
|
8
|
-
if ( filtered.indexOf(array[i])
|
|
8
|
+
if ( filtered.indexOf(array[i]) === -1 ) filtered.push(array[i]);
|
|
9
9
|
}
|
|
10
10
|
return filtered;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
normalizeVersion = function (data, version) {
|
|
14
|
-
if ( data.versions.indexOf(version) != -1 ) {
|
|
15
|
-
return version;
|
|
16
|
-
} else {
|
|
17
|
-
var alias = browserslist.versionAliases[data.name][version];
|
|
18
|
-
if ( alias ) return alias;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
13
|
// Return array of browsers by selection queries:
|
|
23
14
|
//
|
|
24
15
|
// browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8']
|
|
25
16
|
var browserslist = function (selections, opts) {
|
|
26
|
-
if ( typeof
|
|
17
|
+
if ( typeof opts === 'undefined' ) opts = { };
|
|
27
18
|
|
|
28
|
-
if ( typeof
|
|
19
|
+
if ( typeof selections === 'undefined' || selections === null ) {
|
|
29
20
|
|
|
30
21
|
if ( process.env.BROWSERSLIST ) {
|
|
31
22
|
selections = process.env.BROWSERSLIST;
|
|
23
|
+
} else if ( opts.config || process.env.BROWSERSLIST_CONFIG ) {
|
|
24
|
+
var file = opts.config || process.env.BROWSERSLIST_CONFIG;
|
|
25
|
+
if ( fs.existsSync(file) && fs.statSync(file).isFile() ) {
|
|
26
|
+
selections = browserslist.parseConfig( fs.readFileSync(file) );
|
|
27
|
+
} else {
|
|
28
|
+
throw 'Can\'t read ' + file + ' config';
|
|
29
|
+
}
|
|
32
30
|
} else {
|
|
33
31
|
var config = browserslist.readConfig(opts.path);
|
|
34
32
|
if ( config !== false ) {
|
|
@@ -39,7 +37,7 @@ var browserslist = function (selections, opts) {
|
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
|
|
42
|
-
if ( typeof
|
|
40
|
+
if ( typeof selections === 'string' ) {
|
|
43
41
|
selections = selections.split(/,\s*/);
|
|
44
42
|
}
|
|
45
43
|
|
|
@@ -69,14 +67,44 @@ var browserslist = function (selections, opts) {
|
|
|
69
67
|
return uniq(result).sort(function (name1, name2) {
|
|
70
68
|
name1 = name1.split(' ');
|
|
71
69
|
name2 = name2.split(' ');
|
|
72
|
-
if ( name1[0]
|
|
73
|
-
|
|
70
|
+
if ( name1[0] === name2[0] ) {
|
|
71
|
+
var d = parseFloat(name2[1]) - parseFloat(name1[1]);
|
|
72
|
+
if ( d > 0 ) {
|
|
73
|
+
return 1;
|
|
74
|
+
} else if ( d < 0 ) {
|
|
75
|
+
return -1;
|
|
76
|
+
} else {
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
74
79
|
} else {
|
|
75
80
|
return name1[0].localeCompare(name2[0]);
|
|
76
81
|
}
|
|
77
82
|
});
|
|
78
83
|
};
|
|
79
84
|
|
|
85
|
+
// Helpers
|
|
86
|
+
|
|
87
|
+
var normalizeVersion = function (data, version) {
|
|
88
|
+
if ( data.versions.indexOf(version) !== -1 ) {
|
|
89
|
+
return version;
|
|
90
|
+
} else {
|
|
91
|
+
var alias = browserslist.versionAliases[data.name][version];
|
|
92
|
+
if ( alias ) return alias;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
var normalize = function (versions) {
|
|
97
|
+
return versions.filter(function (version) {
|
|
98
|
+
return typeof version === 'string';
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
var fillUsage = function (result, name, data) {
|
|
103
|
+
for ( var i in data ) {
|
|
104
|
+
result[name + ' ' + i] = data[i];
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
80
108
|
// Will be filled by Can I Use data below
|
|
81
109
|
browserslist.data = { };
|
|
82
110
|
browserslist.usage = {
|
|
@@ -116,8 +144,13 @@ browserslist.versionAliases = { };
|
|
|
116
144
|
browserslist.byName = function (name) {
|
|
117
145
|
name = name.toLowerCase();
|
|
118
146
|
name = browserslist.aliases[name] || name;
|
|
147
|
+
return browserslist.data[name];
|
|
148
|
+
};
|
|
119
149
|
|
|
120
|
-
|
|
150
|
+
// Get browser data by alias or case insensitive name and throw error
|
|
151
|
+
// on unknown browser
|
|
152
|
+
browserslist.checkName = function (name) {
|
|
153
|
+
var data = browserslist.byName(name);
|
|
121
154
|
if ( !data ) throw 'Unknown browser ' + name;
|
|
122
155
|
return data;
|
|
123
156
|
};
|
|
@@ -126,14 +159,14 @@ browserslist.byName = function (name) {
|
|
|
126
159
|
browserslist.readConfig = function (from) {
|
|
127
160
|
if ( from === false ) return false;
|
|
128
161
|
if ( !fs.readFileSync ) return false;
|
|
129
|
-
if ( typeof
|
|
162
|
+
if ( typeof from === 'undefined' ) from = '.';
|
|
130
163
|
|
|
131
164
|
var dirs = path.resolve(from).split(path.sep);
|
|
132
|
-
var config
|
|
165
|
+
var config;
|
|
133
166
|
while ( dirs.length ) {
|
|
134
167
|
config = dirs.concat(['browserslist']).join(path.sep);
|
|
135
168
|
|
|
136
|
-
if ( fs.existsSync(config) && fs.
|
|
169
|
+
if ( fs.existsSync(config) && fs.statSync(config).isFile() ) {
|
|
137
170
|
return browserslist.parseConfig( fs.readFileSync(config) );
|
|
138
171
|
}
|
|
139
172
|
|
|
@@ -149,10 +182,10 @@ browserslist.parseConfig = function (string) {
|
|
|
149
182
|
.replace(/#[^\n]*/g, '')
|
|
150
183
|
.split(/\n/)
|
|
151
184
|
.map(function (i) {
|
|
152
|
-
|
|
185
|
+
return i.trim();
|
|
153
186
|
})
|
|
154
187
|
.filter(function (i) {
|
|
155
|
-
|
|
188
|
+
return i !== '';
|
|
156
189
|
});
|
|
157
190
|
};
|
|
158
191
|
|
|
@@ -164,6 +197,7 @@ browserslist.queries = {
|
|
|
164
197
|
var selected = [];
|
|
165
198
|
browserslist.major.forEach(function (name) {
|
|
166
199
|
var data = browserslist.byName(name);
|
|
200
|
+
if ( !data ) return;
|
|
167
201
|
var array = data.released.slice(-versions);
|
|
168
202
|
|
|
169
203
|
array = array.map(function (v) {
|
|
@@ -178,7 +212,7 @@ browserslist.queries = {
|
|
|
178
212
|
lastByBrowser: {
|
|
179
213
|
regexp: /^last (\d+) (\w+) versions?$/i,
|
|
180
214
|
select: function (versions, name) {
|
|
181
|
-
var data = browserslist.
|
|
215
|
+
var data = browserslist.checkName(name);
|
|
182
216
|
return data.released.slice(-versions).map(function (v) {
|
|
183
217
|
return data.name + ' ' + v;
|
|
184
218
|
});
|
|
@@ -231,28 +265,31 @@ browserslist.queries = {
|
|
|
231
265
|
versions: {
|
|
232
266
|
regexp: /^(\w+) (>=?|<=?)\s*([\d\.]+)/,
|
|
233
267
|
select: function (name, sign, version) {
|
|
234
|
-
var data = browserslist.
|
|
235
|
-
|
|
268
|
+
var data = browserslist.checkName(name);
|
|
269
|
+
var alias = normalizeVersion(data, version);
|
|
270
|
+
if ( alias ) {
|
|
271
|
+
version = alias;
|
|
272
|
+
}
|
|
273
|
+
version = parseFloat(version);
|
|
236
274
|
|
|
237
275
|
var filter;
|
|
238
|
-
if ( sign
|
|
276
|
+
if ( sign === '>' ) {
|
|
239
277
|
filter = function (v) {
|
|
240
278
|
return parseFloat(v) > version;
|
|
241
279
|
};
|
|
242
|
-
} else if ( sign
|
|
280
|
+
} else if ( sign === '>=' ) {
|
|
243
281
|
filter = function (v) {
|
|
244
282
|
return parseFloat(v) >= version;
|
|
245
283
|
};
|
|
246
|
-
} else if ( sign
|
|
284
|
+
} else if ( sign === '<' ) {
|
|
247
285
|
filter = function (v) {
|
|
248
286
|
return parseFloat(v) < version;
|
|
249
287
|
};
|
|
250
|
-
} else if ( sign
|
|
288
|
+
} else if ( sign === '<=' ) {
|
|
251
289
|
filter = function (v) {
|
|
252
290
|
return parseFloat(v) <= version;
|
|
253
291
|
};
|
|
254
292
|
}
|
|
255
|
-
|
|
256
293
|
return data.released.filter(filter).map(function (v) {
|
|
257
294
|
return data.name + ' ' + v;
|
|
258
295
|
});
|
|
@@ -261,7 +298,7 @@ browserslist.queries = {
|
|
|
261
298
|
|
|
262
299
|
esr: {
|
|
263
300
|
regexp: /^(firefox|ff|fx) esr$/i,
|
|
264
|
-
select: function (
|
|
301
|
+
select: function () {
|
|
265
302
|
return ['firefox 31'];
|
|
266
303
|
}
|
|
267
304
|
},
|
|
@@ -269,12 +306,12 @@ browserslist.queries = {
|
|
|
269
306
|
direct: {
|
|
270
307
|
regexp: /^(\w+) ([\d\.]+)$/,
|
|
271
308
|
select: function (name, version) {
|
|
272
|
-
var data = browserslist.
|
|
309
|
+
var data = browserslist.checkName(name);
|
|
273
310
|
var alias = normalizeVersion(data, version);
|
|
274
311
|
if ( alias ) {
|
|
275
312
|
version = alias;
|
|
276
313
|
} else {
|
|
277
|
-
if ( version.indexOf('.')
|
|
314
|
+
if ( version.indexOf('.') === -1 ) {
|
|
278
315
|
alias = version + '.0';
|
|
279
316
|
} else if ( /\.0$/.test(version) ) {
|
|
280
317
|
alias = version.replace(/\.0$/, '');
|
|
@@ -286,7 +323,6 @@ browserslist.queries = {
|
|
|
286
323
|
throw 'Unknown version ' + version + ' of ' + name;
|
|
287
324
|
}
|
|
288
325
|
}
|
|
289
|
-
|
|
290
326
|
return [data.name + ' ' + version];
|
|
291
327
|
}
|
|
292
328
|
}
|
|
@@ -295,38 +331,28 @@ browserslist.queries = {
|
|
|
295
331
|
|
|
296
332
|
// Get and convert Can I Use data
|
|
297
333
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
browserslist.versionAliases[name] = { };
|
|
319
|
-
for ( var i = 0; i < caniuse[name].versions.length; i++ ) {
|
|
320
|
-
if ( !caniuse[name].versions[i] ) continue;
|
|
321
|
-
var full = caniuse[name].versions[i];
|
|
322
|
-
|
|
323
|
-
if ( full.indexOf('-') != -1 ) {
|
|
324
|
-
var interval = full.split('-');
|
|
325
|
-
for ( var j = 0; j < interval.length; j++ ) {
|
|
326
|
-
browserslist.versionAliases[name][ interval[j] ] = full;
|
|
334
|
+
(function () {
|
|
335
|
+
for ( var name in caniuse ) {
|
|
336
|
+
browserslist.data[name] = {
|
|
337
|
+
name: name,
|
|
338
|
+
versions: normalize(caniuse[name].versions),
|
|
339
|
+
released: normalize(caniuse[name].versions.slice(0, -3))
|
|
340
|
+
};
|
|
341
|
+
fillUsage(browserslist.usage.global, name, caniuse[name].usage_global);
|
|
342
|
+
|
|
343
|
+
browserslist.versionAliases[name] = { };
|
|
344
|
+
for ( var i = 0; i < caniuse[name].versions.length; i++ ) {
|
|
345
|
+
if ( !caniuse[name].versions[i] ) continue;
|
|
346
|
+
var full = caniuse[name].versions[i];
|
|
347
|
+
|
|
348
|
+
if ( full.indexOf('-') !== -1 ) {
|
|
349
|
+
var interval = full.split('-');
|
|
350
|
+
for ( var j = 0; j < interval.length; j++ ) {
|
|
351
|
+
browserslist.versionAliases[name][ interval[j] ] = full;
|
|
352
|
+
}
|
|
327
353
|
}
|
|
328
354
|
}
|
|
329
355
|
}
|
|
330
|
-
}
|
|
356
|
+
})();
|
|
331
357
|
|
|
332
358
|
module.exports = browserslist;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Get browsers versions that matches given criterias like in Autoprefixer",
|
|
5
5
|
"keywords": ["caniuse", "browsers"],
|
|
6
6
|
"author": "Andrey Sitnik <andrey@sitnik.ru>",
|
|
@@ -10,15 +10,14 @@
|
|
|
10
10
|
"url": "https://github.com/ai/browserslist.git"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"caniuse-db": "^1.0.
|
|
13
|
+
"caniuse-db": "^1.0.30000153"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"
|
|
17
|
-
"gulp-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"gulp": "3.8.11"
|
|
16
|
+
"gulp-eslint": "0.11.1",
|
|
17
|
+
"gulp-mocha": "2.0.1",
|
|
18
|
+
"mocha": "2.2.4",
|
|
19
|
+
"chai": "2.3.0",
|
|
20
|
+
"gulp": "3.8.11"
|
|
22
21
|
},
|
|
23
22
|
"scripts": {
|
|
24
23
|
"test": "gulp"
|