Skip to content

Commit ceead71

Browse files
authored
feat: support for es2022 (#20)
1 parent 6acabe3 commit ceead71

3 files changed

Lines changed: 33 additions & 14 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ console.log(esVersion); // 2017
3636

3737
```ts
3838
// Only supports ES5 ~ ES2021
39-
type ESVersion = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021;
39+
type ESVersion = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022;
4040

4141
function browserslistToESVersion(browsers: string[]): ESVersion;
4242
```
4343

4444
## Data source
4545

46+
- https://caniuse.com/?search=es2022
4647
- https://caniuse.com/?search=es2021
4748
- https://caniuse.com/?search=es2020
4849
- https://caniuse.com/?search=es2019

src/index.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
import browserslist from 'browserslist';
22

3-
export type ESVersion = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021;
3+
export type ESVersion =
4+
| 5
5+
| 2015
6+
| 2016
7+
| 2017
8+
| 2018
9+
| 2019
10+
| 2020
11+
| 2021
12+
| 2022;
413

5-
// The minimal version for [es2015, es2016, es2017, es2018, es2019, es2020, es2021]
14+
// The minimal version for [es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022]
615
const ES_VERSIONS_MAP: Record<string, number[]> = {
7-
chrome: [51, 52, 57, 64, 73, 80, 85],
8-
edge: [15, 15, 15, 79, 79, 80, 85],
9-
safari: [10, 10.3, 11, 16.4, 17, 17, 17],
10-
firefox: [54, 54, 54, 78, 78, 80, 80],
11-
opera: [38, 39, 44, 51, 60, 67, 71],
12-
samsung: [5, 6.2, 6.2, 8.2, 11.1, 13, 14],
16+
chrome: [51, 52, 57, 64, 73, 80, 85, 94],
17+
edge: [15, 15, 15, 79, 79, 80, 85, 94],
18+
safari: [10, 10.3, 11, 16.4, 17, 17, 17, 17],
19+
firefox: [54, 54, 54, 78, 78, 80, 80, 93],
20+
opera: [38, 39, 44, 51, 60, 67, 71, 80],
21+
samsung: [5, 6.2, 6.2, 8.2, 11.1, 13, 14, 17],
1322
};
1423

1524
const aliases: Record<string, string> = {
@@ -27,7 +36,7 @@ export function browserslistToESVersion(browsers: string[]): ESVersion {
2736
ignoreUnknownVersions: true,
2837
});
2938

30-
let esVersion: ESVersion = 2021;
39+
let esVersion: ESVersion = 2022;
3140

3241
for (const item of projectBrowsers) {
3342
const pairs = item.split(' ');
@@ -71,6 +80,8 @@ export function browserslistToESVersion(browsers: string[]): ESVersion {
7180
esVersion = Math.min(2019, esVersion) as ESVersion;
7281
} else if (version < versions[6]) {
7382
esVersion = Math.min(2020, esVersion) as ESVersion;
83+
} else if (version < versions[7]) {
84+
esVersion = Math.min(2021, esVersion) as ESVersion;
7485
}
7586
}
7687

test/index.test.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ test('should get ECMA version correctly', () => {
1111
assert.strictEqual(browserslistToESVersion(['Edge >= 79']), 2019);
1212
assert.strictEqual(browserslistToESVersion(['Edge >= 80']), 2020);
1313
assert.strictEqual(browserslistToESVersion(['Edge >= 85']), 2021);
14+
assert.strictEqual(browserslistToESVersion(['Edge >= 94']), 2022);
1415

1516
// Firefox
1617
assert.strictEqual(browserslistToESVersion(['firefox >= 50']), 5);
1718
assert.strictEqual(browserslistToESVersion(['firefox >= 54']), 2017);
1819
assert.strictEqual(browserslistToESVersion(['firefox >= 78']), 2019);
1920
assert.strictEqual(browserslistToESVersion(['firefox >= 85']), 2021);
21+
assert.strictEqual(browserslistToESVersion(['firefox >= 93']), 2022);
2022

2123
// Chrome
2224
assert.strictEqual(browserslistToESVersion(['Chrome >= 33']), 5);
@@ -26,6 +28,7 @@ test('should get ECMA version correctly', () => {
2628
assert.strictEqual(browserslistToESVersion(['Chrome >= 73']), 2019);
2729
assert.strictEqual(browserslistToESVersion(['Chrome >= 80']), 2020);
2830
assert.strictEqual(browserslistToESVersion(['Chrome >= 85']), 2021);
31+
assert.strictEqual(browserslistToESVersion(['Chrome >= 94']), 2022);
2932

3033
// Opera
3134
assert.strictEqual(browserslistToESVersion(['opera >= 30']), 5);
@@ -36,6 +39,7 @@ test('should get ECMA version correctly', () => {
3639
assert.strictEqual(browserslistToESVersion(['opera >= 60']), 2019);
3740
assert.strictEqual(browserslistToESVersion(['opera >= 67']), 2020);
3841
assert.strictEqual(browserslistToESVersion(['opera >= 71']), 2021);
42+
assert.strictEqual(browserslistToESVersion(['opera >= 80']), 2022);
3943

4044
// Samsung
4145
assert.strictEqual(browserslistToESVersion(['samsung >= 4']), 5);
@@ -45,11 +49,14 @@ test('should get ECMA version correctly', () => {
4549
assert.strictEqual(browserslistToESVersion(['samsung >= 11.1']), 2019);
4650
assert.strictEqual(browserslistToESVersion(['samsung >= 13']), 2020);
4751
assert.strictEqual(browserslistToESVersion(['samsung >= 14']), 2021);
52+
assert.strictEqual(browserslistToESVersion(['samsung >= 17']), 2022);
4853

4954
// Safari
5055
assert.strictEqual(browserslistToESVersion(['safari >= 10']), 2015);
5156
assert.strictEqual(browserslistToESVersion(['safari >= 10.3']), 2017);
5257
assert.strictEqual(browserslistToESVersion(['safari >= 11']), 2017);
58+
assert.strictEqual(browserslistToESVersion(['safari >= 16.4']), 2018);
59+
assert.strictEqual(browserslistToESVersion(['safari >= 17']), 2022);
5360

5461
// iOS
5562
assert.strictEqual(browserslistToESVersion(['iOS 8']), 5);
@@ -88,7 +95,7 @@ test('should get ECMA version correctly', () => {
8895
'last 1 firefox version',
8996
'last 1 safari version',
9097
]),
91-
2021,
98+
2022,
9299
);
93100
assert.strictEqual(
94101
browserslistToESVersion([
@@ -111,7 +118,7 @@ test('should get ECMA version correctly', () => {
111118
assert.strictEqual(browserslistToESVersion(['ios_saf 11']), 2017);
112119

113120
// https://github.com/browserslist/browserslist/issues/682
114-
assert.strictEqual(browserslistToESVersion(['and_ff >= 78']), 2021);
115-
assert.strictEqual(browserslistToESVersion(['and_chr >= 53']), 2021);
116-
assert.strictEqual(browserslistToESVersion(['ChromeAndroid >= 53']), 2021);
121+
assert.strictEqual(browserslistToESVersion(['and_ff >= 78']), 2022);
122+
assert.strictEqual(browserslistToESVersion(['and_chr >= 53']), 2022);
123+
assert.strictEqual(browserslistToESVersion(['ChromeAndroid >= 53']), 2022);
117124
});

0 commit comments

Comments
 (0)