core-js-compat 3.21.1 → 3.22.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/README.md CHANGED
@@ -3,42 +3,52 @@
3
3
  [`core-js-compat` package](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat) contains data about the necessity of [`core-js`](https://github.com/zloirock/core-js) modules and API for getting a list of required core-js modules by browserslist query.
4
4
 
5
5
  ```js
6
+ import compat from 'core-js-compat';
7
+
6
8
  const {
7
- list, // array of required modules
8
- targets, // object with targets for each module
9
- } = require('core-js-compat')({
10
- targets: '> 2.5%', // browserslist query or object of minimum environment versions to support
11
- filter: /^(es|web)\./, // optional filter - string-prefix, regexp or list of modules
12
- version: '3.21', // used `core-js` version, by default - the latest
9
+ list, // array of required modules
10
+ targets, // object with targets for each module
11
+ } = compat({
12
+ targets: '> 1%', // browserslist query or object of minimum environment versions to support, see below
13
+ modules: [ // optional list / filter of modules - regex, sting or an array of them:
14
+ 'core-js/actual', // - an entry point
15
+ 'esnext.array.unique-by', // - a module name (or just a start of a module name)
16
+ /^web\./, // - regex that a module name must satisfy
17
+ ],
18
+ exclude: [ // optional list / filter of modules to exclude, the signature is similar to `modules` option
19
+ 'web.atob',
20
+ ],
21
+ version: '3.22', // used `core-js` version, by default - the latest
13
22
  });
14
23
 
15
24
  console.log(targets);
16
25
  /* =>
17
26
  {
18
- 'es.symbol.match-all': { ios: '12.2-12.4' },
19
- 'es.array.unscopables.flat': { ios: '12.2-12.4' },
20
- 'es.array.unscopables.flat-map': { ios: '12.2-12.4' },
21
- 'es.math.hypot': { chrome: '77' },
22
- 'es.promise.all-settled': { firefox: '69', ios: '12.2-12.4' },
23
- 'es.promise.finally': { ios: '12.2-12.4' },
24
- 'es.string.match-all': { chrome: '77', firefox: '69', ios: '12.2-12.4' },
25
- 'es.string.replace': { firefox: '69', ios: '12.2-12.4' },
26
- 'es.typed-array.float32-array': { ios: '12.2-12.4' },
27
- 'es.typed-array.float64-array': { ios: '12.2-12.4' },
28
- 'es.typed-array.int8-array': { ios: '12.2-12.4' },
29
- 'es.typed-array.int16-array': { ios: '12.2-12.4' },
30
- 'es.typed-array.int32-array': { ios: '12.2-12.4' },
31
- 'es.typed-array.uint8-array': { ios: '12.2-12.4' },
32
- 'es.typed-array.uint8-clamped-array': { ios: '12.2-12.4' },
33
- 'es.typed-array.uint16-array': { ios: '12.2-12.4' },
34
- 'es.typed-array.uint32-array': { ios: '12.2-12.4' },
35
- 'es.typed-array.from': { ios: '12.2-12.4' },
36
- 'es.typed-array.of': { ios: '12.2-12.4' },
37
- 'web.dom-collections.iterator': { ios: '12.2-12.4' },
38
- 'web.immediate': { chrome: '77', firefox: '69', ios: '12.2-12.4' },
39
- 'web.url': { ios: '12.2-12.4' },
40
- 'web.url.to-json': { ios: '12.2-12.4' },
41
- 'web.url-search-params': { ios: '12.2-12.4' }
27
+ 'es.error.cause': { ios: '14.5-14.8', samsung: '16.0' },
28
+ 'es.aggregate-error.cause': { ios: '14.5-14.8', samsung: '16.0' },
29
+ 'es.array.at': { ios: '14.5-14.8' },
30
+ 'es.object.has-own': { ios: '14.5-14.8', samsung: '16.0' },
31
+ 'es.string.at-alternative': { ios: '14.5-14.8' },
32
+ 'es.typed-array.at': { ios: '14.5-14.8' },
33
+ 'es.typed-array.set': { samsung: '16.0' },
34
+ 'esnext.array.find-last': { firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
35
+ 'esnext.array.find-last-index': { firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
36
+ 'esnext.array.group-by': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
37
+ 'esnext.array.group-by-to-map': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
38
+ 'esnext.array.to-reversed': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
39
+ 'esnext.array.to-sorted': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
40
+ 'esnext.array.to-spliced': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
41
+ 'esnext.array.unique-by': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
42
+ 'esnext.array.with': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
43
+ 'esnext.typed-array.find-last': { firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
44
+ 'esnext.typed-array.find-last-index': { firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
45
+ 'esnext.typed-array.to-reversed': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
46
+ 'esnext.typed-array.to-sorted': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
47
+ 'esnext.typed-array.to-spliced': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
48
+ 'esnext.typed-array.with': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
49
+ 'web.dom-exception.stack': { chrome: '98', edge: '99', ios: '14.5-14.8', samsung: '16.0' },
50
+ 'web.immediate': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' },
51
+ 'web.structured-clone': { chrome: '98', edge: '99', firefox: '98', ios: '14.5-14.8', samsung: '16.0' }
42
52
  }
43
53
  */
44
54
  ```
@@ -74,9 +84,9 @@ console.log(targets);
74
84
 
75
85
  ```js
76
86
  // equals of of the method from the example above
77
- require('core-js-compat/compat')({ targets, filter, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
87
+ require('core-js-compat/compat')({ targets, modules, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
78
88
  // or
79
- require('core-js-compat').compat({ targets, filter, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
89
+ require('core-js-compat').compat({ targets, modules, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
80
90
 
81
91
  // full compat data:
82
92
  require('core-js-compat/data'); // => { [ModuleName]: { [EngineName]: EngineVersion } }
@@ -94,9 +104,9 @@ require('core-js-compat/modules'); // => Array<ModuleName>
94
104
  require('core-js-compat').modules; // => Array<ModuleName>
95
105
 
96
106
  // the subset of modules which available in the passed `core-js` version:
97
- require('core-js-compat/get-modules-list-for-target-version')('3.21'); // => Array<ModuleName>
107
+ require('core-js-compat/get-modules-list-for-target-version')('3.22'); // => Array<ModuleName>
98
108
  // or
99
- require('core-js-compat').getModulesListForTargetVersion('3.21'); // => Array<ModuleName>
109
+ require('core-js-compat').getModulesListForTargetVersion('3.22'); // => Array<ModuleName>
100
110
  ```
101
111
 
102
112
  If you want to add new / update data about modules required for target engines, [follow this instruction](https://github.com/zloirock/core-js/blob/master/CONTRIBUTING.md#updating-core-js-compat-data).
package/compat.js CHANGED
@@ -1,19 +1,34 @@
1
1
  'use strict';
2
- const { compare, has, intersection } = require('./helpers');
2
+ const { compare, filterOutStabilizedProposals, has, intersection } = require('./helpers');
3
3
  const data = require('./data');
4
+ const entries = require('./entries');
4
5
  const getModulesListForTargetVersion = require('./get-modules-list-for-target-version');
5
- const modules = require('./modules');
6
+ const allModules = require('./modules');
6
7
  const targetsParser = require('./targets-parser');
7
8
 
8
- function checkModule(name, targets) {
9
- if (!has(data, name)) throw new TypeError(`Incorrect module: ${ name }`);
9
+ function getModules(filter) {
10
+ if (typeof filter == 'string') {
11
+ if (has(entries, filter)) return entries[filter];
12
+ return allModules.filter(it => it.startsWith(filter));
13
+ } else if (filter instanceof RegExp) return allModules.filter(it => filter.test(it));
14
+ throw TypeError('Wrong filter!');
15
+ }
10
16
 
11
- const requirements = data[name];
17
+ function normalizeModules(option) {
18
+ // TODO: use `.flatMap` in core-js@4
19
+ return new Set(Array.isArray(option) ? [].concat.apply([], option.map(getModules)) : getModules(option));
20
+ }
21
+
22
+ function checkModule(name, targets) {
12
23
  const result = {
13
- required: false,
24
+ required: !targets,
14
25
  targets: {},
15
26
  };
16
27
 
28
+ if (!targets) return result;
29
+
30
+ const requirements = data[name];
31
+
17
32
  for (const [engine, version] of targets) {
18
33
  if (!has(requirements, engine) || compare(version, '<', requirements[engine])) {
19
34
  result.required = true;
@@ -24,28 +39,35 @@ function checkModule(name, targets) {
24
39
  return result;
25
40
  }
26
41
 
27
- module.exports = function ({ targets, filter, version }) {
28
- const parsedTargets = targetsParser(targets);
42
+ module.exports = function ({
43
+ filter = null, // TODO: Obsolete, remove from `core-js@4`
44
+ modules = null,
45
+ exclude = [],
46
+ targets = null,
47
+ version = null,
48
+ } = {}) {
49
+ if (modules == null) modules = filter;
50
+
51
+ const parsedTargets = targets ? targetsParser(targets) : null;
29
52
 
30
53
  const result = {
31
54
  list: [],
32
55
  targets: {},
33
56
  };
34
57
 
35
- let $modules = Array.isArray(filter) ? filter : modules;
58
+ exclude = normalizeModules(exclude);
36
59
 
37
- if (filter instanceof RegExp) {
38
- $modules = $modules.filter(it => filter.test(it));
39
- } else if (typeof filter == 'string') {
40
- $modules = $modules.filter(it => it.startsWith(filter));
41
- }
60
+ modules = modules ? [...normalizeModules(modules)] : allModules;
42
61
 
43
- if (version) {
44
- $modules = intersection($modules, getModulesListForTargetVersion(version));
45
- }
62
+ if (exclude.size) modules = modules.filter(it => !exclude.has(it));
46
63
 
47
- for (const key of $modules) {
64
+ modules = intersection(modules, version ? getModulesListForTargetVersion(version) : allModules);
65
+
66
+ modules = filterOutStabilizedProposals(modules);
67
+
68
+ for (const key of modules) {
48
69
  const check = checkModule(key, parsedTargets);
70
+
49
71
  if (check.required) {
50
72
  result.list.push(key);
51
73
  result.targets[key] = check.targets;
package/data.json CHANGED
@@ -231,7 +231,8 @@
231
231
  "node": "16.11",
232
232
  "opera": "80",
233
233
  "opera_mobile": "66",
234
- "safari": "15.0"
234
+ "safari": "15.0",
235
+ "samsung": "17.0"
235
236
  },
236
237
  "es.error.to-string": {
237
238
  "android": "4.4.3",
@@ -274,7 +275,8 @@
274
275
  "node": "16.11",
275
276
  "opera": "80",
276
277
  "opera_mobile": "66",
277
- "safari": "15.0"
278
+ "safari": "15.0",
279
+ "samsung": "17.0"
278
280
  },
279
281
  "es.array.at": {
280
282
  "android": "92",
@@ -1707,7 +1709,8 @@
1707
1709
  "node": "16.9",
1708
1710
  "opera": "79",
1709
1711
  "opera_mobile": "66",
1710
- "safari": "15.4"
1712
+ "safari": "15.4",
1713
+ "samsung": "17.0"
1711
1714
  },
1712
1715
  "es.object.is": {
1713
1716
  "android": "4.1",
@@ -3202,7 +3205,8 @@
3202
3205
  "node": "17.0",
3203
3206
  "opera": "81",
3204
3207
  "opera_mobile": "67",
3205
- "safari": "14.1"
3208
+ "safari": "14.1",
3209
+ "samsung": "17.0"
3206
3210
  },
3207
3211
  "es.typed-array.slice": {
3208
3212
  "android": "45",
@@ -3375,6 +3379,7 @@
3375
3379
  "electron": "17.0",
3376
3380
  "ios": "15.4",
3377
3381
  "opera": "83",
3382
+ "opera_mobile": "68",
3378
3383
  "safari": "15.4"
3379
3384
  },
3380
3385
  "esnext.array.find-last-index": {
@@ -3385,6 +3390,7 @@
3385
3390
  "electron": "17.0",
3386
3391
  "ios": "15.4",
3387
3392
  "opera": "83",
3393
+ "opera_mobile": "68",
3388
3394
  "safari": "15.4"
3389
3395
  },
3390
3396
  "esnext.array.group-by": {},
@@ -3493,7 +3499,8 @@
3493
3499
  "node": "16.9",
3494
3500
  "opera": "79",
3495
3501
  "opera_mobile": "66",
3496
- "safari": "15.4"
3502
+ "safari": "15.4",
3503
+ "samsung": "17.0"
3497
3504
  },
3498
3505
  "esnext.object.iterate-entries": {},
3499
3506
  "esnext.object.iterate-keys": {},
@@ -3618,6 +3625,7 @@
3618
3625
  "electron": "17.0",
3619
3626
  "ios": "15.4",
3620
3627
  "opera": "83",
3628
+ "opera_mobile": "68",
3621
3629
  "safari": "15.4"
3622
3630
  },
3623
3631
  "esnext.typed-array.find-last-index": {
@@ -3628,6 +3636,7 @@
3628
3636
  "electron": "17.0",
3629
3637
  "ios": "15.4",
3630
3638
  "opera": "83",
3639
+ "opera_mobile": "68",
3631
3640
  "safari": "15.4"
3632
3641
  },
3633
3642
  "esnext.typed-array.group-by": {},
@@ -3649,11 +3658,10 @@
3649
3658
  "android": "37",
3650
3659
  "chrome": "34",
3651
3660
  "deno": "1.0",
3652
- "edge": "13",
3661
+ "edge": "16",
3653
3662
  "electron": "0.20",
3654
3663
  "firefox": "27",
3655
3664
  "ios": "10.3",
3656
- "node": "17.5",
3657
3665
  "opera": "10.5",
3658
3666
  "opera_mobile": "10.5",
3659
3667
  "safari": "10.1",
@@ -3663,10 +3671,9 @@
3663
3671
  "android": "3.0",
3664
3672
  "chrome": "4",
3665
3673
  "deno": "1.0",
3666
- "edge": "12",
3674
+ "edge": "16",
3667
3675
  "electron": "0.20",
3668
- "firefox": "1",
3669
- "ie": "10",
3676
+ "firefox": "27",
3670
3677
  "ios": "1.0",
3671
3678
  "node": "17.5",
3672
3679
  "opera": "10.5",
@@ -3720,7 +3727,7 @@
3720
3727
  "samsung": "5.0"
3721
3728
  },
3722
3729
  "web.dom-exception.stack": {
3723
- "deno": "1.7",
3730
+ "deno": "1.15",
3724
3731
  "firefox": "37",
3725
3732
  "node": "17.0"
3726
3733
  },