Skip to content

Commit edb9ce1

Browse files
authored
fix browserslist support queries (#1042)
1 parent c21025a commit edb9ce1

17 files changed

+679
-235
lines changed

plugin-packs/postcss-preset-env/.tape.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ postcssTape(plugin)({
8383
stage: 0
8484
}
8585
},
86+
'basic:supports-query': {
87+
message: 'supports { browsers: "defaults and supports css-variables" } usage',
88+
options: {
89+
browsers: 'defaults and supports css-variables'
90+
}
91+
},
8692
'basic:stage0': {
8793
message: 'supports { stage: 0 } usage',
8894
options: {

plugin-packs/postcss-preset-env/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Unreleased (minor)
44

55
- Added `env` option to control which [browserslist environment](https://github.com/browserslist/browserslist#configuring-for-different-environments) to target
6+
- Fix [browserslist supports queries](https://github.com/browserslist/browserslist#full-list)
67

78
### 9.0.0
89

plugin-packs/postcss-preset-env/dist/index.cjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

plugin-packs/postcss-preset-env/dist/index.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Matches the browsers that have support stats in cssdb.
2+
export const browsersWithSupportStats = [
3+
'and_chr',
4+
'and_ff',
5+
'android',
6+
'chrome',
7+
'edge',
8+
'firefox',
9+
'ie',
10+
'ios_saf',
11+
'op_mini',
12+
'op_mob',
13+
'opera',
14+
'safari',
15+
'samsung',
16+
];

plugin-packs/postcss-preset-env/src/lib/format-feature.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import getOptionsForBrowsersByFeature from './get-options-for-browsers-by-feature.mjs';
2-
import getUnsupportedBrowsersByFeature from './get-unsupported-browsers-by-feature.mjs';
2+
import { getUnsupportedBrowsersByFeature } from './get-unsupported-browsers-by-feature.mjs';
33
import { OUT_OF_RANGE_STAGE } from './stage.mjs';
44
import { insertAfterKey, insertBeforeKey, pluginKey } from '../own-keys/keys.mjs';
55
import { pluginsById } from '../plugins/plugins-by-id.mjs';

plugin-packs/postcss-preset-env/src/lib/get-options-for-browsers-by-feature.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import browserslist from 'browserslist';
2-
import getUnsupportedBrowsersByFeature from './get-unsupported-browsers-by-feature.mjs';
2+
import { getUnsupportedBrowsersByFeature } from './get-unsupported-browsers-by-feature.mjs';
33

44
// add extra options for certain browsers by feature
55
export default function getOptionsForBrowsersByFeature(browsers, feature, cssdbList, options, logger) {

plugin-packs/postcss-preset-env/src/lib/get-unsupported-browsers-by-feature.mjs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,7 @@
1-
const browsers = [
2-
'and_chr',
3-
'and_ff',
4-
'and_qq',
5-
'and_uc',
6-
'android',
7-
'baidu',
8-
'chrome',
9-
'edge',
10-
'firefox',
11-
'ie',
12-
'ie_mob',
13-
'ios_saf',
14-
'kaios',
15-
'op_mini',
16-
'op_mob',
17-
'opera',
18-
'safari',
19-
'samsung',
20-
];
1+
import { browsersWithSupportStats } from './browsers-with-supports-stats.mjs';
212

223
// return a list of browsers that do not support the feature
23-
export default function getUnsupportedBrowsersByFeature(feature) {
4+
export function getUnsupportedBrowsersByFeature(feature) {
245
if (!feature) {
256
return [];
267
}
@@ -32,7 +13,7 @@ export default function getUnsupportedBrowsersByFeature(feature) {
3213

3314
const query = [];
3415

35-
browsers.forEach(browser => {
16+
browsersWithSupportStats.forEach(browser => {
3617
if (browser === 'op_mini' && (typeof feature.browser_support[browser] === 'undefined')) {
3718
// Opera Mini is always "op_mini all"
3819
query.push('op_mini all');

plugin-packs/postcss-preset-env/src/lib/list-features.mjs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { formatPolyfillableFeature, formatStagedFeature } from './format-feature
66
import { clamp } from '../util/clamp.mjs';
77
import { intOrZero } from '../util/int-or-zero.mjs';
88
import { insertAfterKey, insertBeforeKey } from '../own-keys/keys.mjs';
9+
import { browsersWithSupportStats } from './browsers-with-supports-stats.mjs';
910

1011
export function listFeatures(cssdbList, options, sharedOptions, logger) {
1112
// initialize options
@@ -84,7 +85,9 @@ export function listFeatures(cssdbList, options, sharedOptions, logger) {
8485
});
8586

8687
// browsers supported by the configuration
87-
const supportedBrowsers = browserslist(browsers, { env: env, ignoreUnknownVersions: true });
88+
const supportedBrowsers = browserslist(browsers, { env: env, ignoreUnknownVersions: true }).filter((x) => {
89+
return browsersWithSupportStats.includes(x.split(' ')[0]);
90+
});
8891

8992
// - features supported by the stage
9093
// - features with `true` or with options
Lines changed: 43 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import getUnsupportedBrowsersByFeature from '../../lib/get-unsupported-browsers-by-feature.mjs';
2+
import { getUnsupportedBrowsersByFeature } from '../../lib/get-unsupported-browsers-by-feature.mjs';
33
import { strict as assert } from 'assert';
44

55
assert.deepStrictEqual(
@@ -15,143 +15,77 @@ assert.deepStrictEqual(
1515
assert.deepStrictEqual(
1616
getUnsupportedBrowsersByFeature({ browser_support: { firefox: 30 }}),
1717
[
18-
'and_chr >= 1',
19-
'and_ff >= 1',
20-
'and_qq >= 1',
21-
'and_uc >= 1',
22-
'android >= 1',
23-
'baidu >= 1',
24-
'chrome >= 1',
25-
'edge >= 1',
26-
'firefox >= 1',
27-
'ie >= 1',
28-
'ie_mob >= 1',
29-
'ios_saf >= 1',
30-
'kaios >= 1',
31-
'op_mini all',
32-
'op_mob >= 1',
33-
'opera >= 1',
34-
'safari >= 1',
18+
'and_chr >= 1', 'and_ff >= 1',
19+
'android >= 1', 'chrome >= 1',
20+
'edge >= 1', 'firefox >= 1',
21+
'ie >= 1', 'ios_saf >= 1',
22+
'op_mini all', 'op_mob >= 1',
23+
'opera >= 1', 'safari >= 1',
3524
'samsung >= 1',
3625
],
3726
);
3827

3928
assert.deepStrictEqual(
4029
getUnsupportedBrowsersByFeature({ browser_support: { firefox: 'Beta' }}),
4130
[
42-
'and_chr >= 1',
43-
'and_ff >= 1',
44-
'and_qq >= 1',
45-
'and_uc >= 1',
46-
'android >= 1',
47-
'baidu >= 1',
48-
'chrome >= 1',
49-
'edge >= 1',
50-
'firefox >= 1',
51-
'ie >= 1',
52-
'ie_mob >= 1',
53-
'ios_saf >= 1',
54-
'kaios >= 1',
55-
'op_mini all',
56-
'op_mob >= 1',
57-
'opera >= 1',
58-
'safari >= 1',
31+
'and_chr >= 1', 'and_ff >= 1',
32+
'android >= 1', 'chrome >= 1',
33+
'edge >= 1', 'firefox >= 1',
34+
'ie >= 1', 'ios_saf >= 1',
35+
'op_mini all', 'op_mob >= 1',
36+
'opera >= 1', 'safari >= 1',
5937
'samsung >= 1',
6038
],
6139
);
6240

6341
assert.deepStrictEqual(
6442
getUnsupportedBrowsersByFeature({ browser_support: { firefox: 'Beta 5' }}),
6543
[
66-
'and_chr >= 1',
67-
'and_ff >= 1',
68-
'and_qq >= 1',
69-
'and_uc >= 1',
70-
'android >= 1',
71-
'baidu >= 1',
72-
'chrome >= 1',
73-
'edge >= 1',
74-
'firefox >= 1',
75-
'ie >= 1',
76-
'ie_mob >= 1',
77-
'ios_saf >= 1',
78-
'kaios >= 1',
79-
'op_mini all',
80-
'op_mob >= 1',
81-
'opera >= 1',
82-
'safari >= 1',
44+
'and_chr >= 1', 'and_ff >= 1',
45+
'android >= 1', 'chrome >= 1',
46+
'edge >= 1', 'firefox >= 1',
47+
'ie >= 1', 'ios_saf >= 1',
48+
'op_mini all', 'op_mob >= 1',
49+
'opera >= 1', 'safari >= 1',
8350
'samsung >= 1',
8451
],
8552
);
8653

8754
assert.deepStrictEqual(
8855
getUnsupportedBrowsersByFeature({ browser_support: { firefox: '5 Beta' }}),
8956
[
90-
'and_chr >= 1',
91-
'and_ff >= 1',
92-
'and_qq >= 1',
93-
'and_uc >= 1',
94-
'android >= 1',
95-
'baidu >= 1',
96-
'chrome >= 1',
97-
'edge >= 1',
98-
'firefox >= 1',
99-
'ie >= 1',
100-
'ie_mob >= 1',
101-
'ios_saf >= 1',
102-
'kaios >= 1',
103-
'op_mini all',
104-
'op_mob >= 1',
105-
'opera >= 1',
106-
'safari >= 1',
57+
'and_chr >= 1', 'and_ff >= 1',
58+
'android >= 1', 'chrome >= 1',
59+
'edge >= 1', 'firefox >= 1',
60+
'ie >= 1', 'ios_saf >= 1',
61+
'op_mini all', 'op_mob >= 1',
62+
'opera >= 1', 'safari >= 1',
10763
'samsung >= 1',
10864
],
10965
);
11066

11167
assert.deepStrictEqual(
11268
getUnsupportedBrowsersByFeature({ browser_support: { unknown: 30 }}),
11369
[
114-
'and_chr >= 1',
115-
'and_ff >= 1',
116-
'and_qq >= 1',
117-
'and_uc >= 1',
118-
'android >= 1',
119-
'baidu >= 1',
120-
'chrome >= 1',
121-
'edge >= 1',
122-
'firefox >= 1',
123-
'ie >= 1',
124-
'ie_mob >= 1',
125-
'ios_saf >= 1',
126-
'kaios >= 1',
127-
'op_mini all',
128-
'op_mob >= 1',
129-
'opera >= 1',
130-
'safari >= 1',
70+
'and_chr >= 1', 'and_ff >= 1',
71+
'android >= 1', 'chrome >= 1',
72+
'edge >= 1', 'firefox >= 1',
73+
'ie >= 1', 'ios_saf >= 1',
74+
'op_mini all', 'op_mob >= 1',
75+
'opera >= 1', 'safari >= 1',
13176
'samsung >= 1',
13277
],
13378
);
13479

13580
assert.deepStrictEqual(
13681
getUnsupportedBrowsersByFeature({ browser_support: { firefox: '30' }}),
13782
[
138-
'and_chr >= 1',
139-
'and_ff >= 1',
140-
'and_qq >= 1',
141-
'and_uc >= 1',
142-
'android >= 1',
143-
'baidu >= 1',
144-
'chrome >= 1',
145-
'edge >= 1',
146-
'firefox < 30',
147-
'ie >= 1',
148-
'ie_mob >= 1',
149-
'ios_saf >= 1',
150-
'kaios >= 1',
151-
'op_mini all',
152-
'op_mob >= 1',
153-
'opera >= 1',
154-
'safari >= 1',
83+
'and_chr >= 1', 'and_ff >= 1',
84+
'android >= 1', 'chrome >= 1',
85+
'edge >= 1', 'firefox < 30',
86+
'ie >= 1', 'ios_saf >= 1',
87+
'op_mini all', 'op_mob >= 1',
88+
'opera >= 1', 'safari >= 1',
15589
'samsung >= 1',
15690
],
15791
);
@@ -172,23 +106,12 @@ assert.deepStrictEqual(
172106
'samsung': '15',
173107
}}),
174108
[
175-
'and_chr < 97',
176-
'and_ff < 95',
177-
'and_qq >= 1',
178-
'and_uc >= 1',
179-
'android < 97',
180-
'baidu >= 1',
181-
'chrome < 89',
182-
'edge < 89',
183-
'firefox < 66',
184-
'ie >= 1',
185-
'ie_mob >= 1',
186-
'ios_saf < 15',
187-
'kaios >= 1',
188-
'op_mini all',
189-
'op_mob < 64',
190-
'opera < 76',
191-
'safari < 15',
109+
'and_chr < 97', 'and_ff < 95',
110+
'android < 97', 'chrome < 89',
111+
'edge < 89', 'firefox < 66',
112+
'ie >= 1', 'ios_saf < 15',
113+
'op_mini all', 'op_mob < 64',
114+
'opera < 76', 'safari < 15',
192115
'samsung < 15',
193116
],
194117
);

plugin-packs/postcss-preset-env/src/test/lib/list-features/client-side.mjs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ assert.deepStrictEqual(
1212
{
1313
browsers: [
1414
'and_chr < 18', 'and_ff < 4',
15-
'and_qq >= 1', 'and_uc >= 1',
16-
'android < 65', 'baidu >= 1',
17-
'chrome < 1', 'edge < 79',
18-
'firefox < 1', 'ie >= 1',
19-
'ie_mob >= 1', 'ios_saf < 1',
20-
'kaios >= 1', 'op_mini all',
21-
'op_mob < 14', 'opera < 15',
22-
'safari < 3', 'samsung < 1.0',
15+
'android < 65', 'chrome < 1',
16+
'edge < 79', 'firefox < 1',
17+
'ie >= 1', 'ios_saf < 1',
18+
'op_mini all', 'op_mob < 14',
19+
'opera < 15', 'safari < 3',
20+
'samsung < 1.0',
2321
],
2422
pluginOptions: {
2523
subFeatures: {
@@ -50,14 +48,12 @@ assert.deepStrictEqual(
5048
{
5149
browsers: [
5250
'and_chr < 18', 'and_ff < 4',
53-
'and_qq >= 1', 'and_uc >= 1',
54-
'android < 65', 'baidu >= 1',
55-
'chrome < 1', 'edge < 79',
56-
'firefox < 1', 'ie >= 1',
57-
'ie_mob >= 1', 'ios_saf < 1',
58-
'kaios >= 1', 'op_mini all',
59-
'op_mob < 14', 'opera < 15',
60-
'safari < 3', 'samsung < 1.0',
51+
'android < 65', 'chrome < 1',
52+
'edge < 79', 'firefox < 1',
53+
'ie >= 1', 'ios_saf < 1',
54+
'op_mini all', 'op_mob < 14',
55+
'opera < 15', 'safari < 3',
56+
'samsung < 1.0',
6157
],
6258
vendors_implementations: 3,
6359
pluginOptions: {
@@ -69,14 +65,12 @@ assert.deepStrictEqual(
6965
{
7066
browsers: [
7167
'and_chr >= 1', 'and_ff >= 1',
72-
'and_qq >= 1', 'and_uc >= 1',
73-
'android >= 1', 'baidu >= 1',
74-
'chrome >= 1', 'edge >= 1',
75-
'firefox >= 1', 'ie >= 1',
76-
'ie_mob >= 1', 'ios_saf >= 1',
77-
'kaios >= 1', 'op_mini all',
78-
'op_mob >= 1', 'opera >= 1',
79-
'safari >= 1', 'samsung >= 1',
68+
'android >= 1', 'chrome >= 1',
69+
'edge >= 1', 'firefox >= 1',
70+
'ie >= 1', 'ios_saf >= 1',
71+
'op_mini all', 'op_mob >= 1',
72+
'opera >= 1', 'safari >= 1',
73+
'samsung >= 1',
8074
],
8175
vendors_implementations: 0,
8276
pluginOptions: { enableProgressiveCustomProperties: false },

0 commit comments

Comments
 (0)