You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
7.9 KiB

3 months ago
  1. ![logo](https://user-images.githubusercontent.com/2213682/146607186-8e13ddef-26a4-4ebf-befd-5aac9d77c090.png)
  2. <div align="center">
  3. [![fundraising](https://opencollective.com/core-js/all/badge.svg?label=fundraising)](https://opencollective.com/core-js) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/zloirock/core-js/blob/master/CONTRIBUTING.md) [![version](https://img.shields.io/npm/v/core-js-compat.svg)](https://www.npmjs.com/package/core-js-compat) [![core-js-compat downloads](https://img.shields.io/npm/dm/core-js-compat.svg?label=npm%20i%20core-js-compat)](https://npm-stat.com/charts.html?package=core-js&package=core-js-pure&package=core-js-compat&from=2014-11-18)
  4. </div>
  5. **I highly recommend reading this: [So, what's next?](https://github.com/zloirock/core-js/blob/master/docs/2023-02-14-so-whats-next.md)**
  6. ---
  7. [`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.
  8. ```js
  9. import compat from 'core-js-compat';
  10. const {
  11. list, // array of required modules
  12. targets, // object with targets for each module
  13. } = compat({
  14. targets: '> 1%', // browserslist query or object of minimum environment versions to support, see below
  15. modules: [ // optional list / filter of modules - regex, string or an array of them:
  16. 'core-js/actual', // - an entry point
  17. 'esnext.array.unique-by', // - a module name (or just a start of a module name)
  18. /^web\./, // - regex that a module name must satisfy
  19. ],
  20. exclude: [ // optional list / filter of modules to exclude, the signature is similar to `modules` option
  21. 'web.atob',
  22. ],
  23. version: '3.40', // used `core-js` version, by default - the latest
  24. inverse: false, // inverse of the result - shows modules that are NOT required for the target environment
  25. });
  26. console.log(targets);
  27. /* =>
  28. {
  29. 'es.error.cause': { ios: '14.5-14.8' },
  30. 'es.aggregate-error.cause': { ios: '14.5-14.8' },
  31. 'es.array.at': { ios: '14.5-14.8' },
  32. 'es.array.find-last': { firefox: '100', ios: '14.5-14.8' },
  33. 'es.array.find-last-index': { firefox: '100', ios: '14.5-14.8' },
  34. 'es.array.includes': { firefox: '100' },
  35. 'es.array.push': { chrome: '100', edge: '101', ios: '14.5-14.8', safari: '15.4' },
  36. 'es.array.unshift': { ios: '14.5-14.8', safari: '15.4' },
  37. 'es.object.has-own': { ios: '14.5-14.8' },
  38. 'es.regexp.flags': { chrome: '100', edge: '101' },
  39. 'es.string.at-alternative': { ios: '14.5-14.8' },
  40. 'es.typed-array.at': { ios: '14.5-14.8' },
  41. 'es.typed-array.find-last': { firefox: '100', ios: '14.5-14.8' },
  42. 'es.typed-array.find-last-index': { firefox: '100', ios: '14.5-14.8' },
  43. 'esnext.array.group': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  44. 'esnext.array.group-by': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  45. 'esnext.array.group-by-to-map': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  46. 'esnext.array.group-to-map': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  47. 'esnext.array.to-reversed': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  48. 'esnext.array.to-sorted': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  49. 'esnext.array.to-spliced': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  50. 'esnext.array.unique-by': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  51. 'esnext.array.with': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  52. 'esnext.typed-array.to-reversed': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  53. 'esnext.typed-array.to-sorted': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  54. 'esnext.typed-array.to-spliced': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  55. 'esnext.typed-array.with': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  56. 'web.dom-exception.stack': { chrome: '100', edge: '101', ios: '14.5-14.8', safari: '15.4' },
  57. 'web.immediate': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' },
  58. 'web.structured-clone': { chrome: '100', edge: '101', firefox: '100', ios: '14.5-14.8', safari: '15.4' }
  59. }
  60. */
  61. ```
  62. ### `targets` option
  63. `targets` could be [a `browserslist` query](https://github.com/browserslist/browserslist) or a targets object that specifies minimum environment versions to support:
  64. ```js
  65. // browserslist query:
  66. 'defaults, not IE 11, maintained node versions';
  67. // object (sure, all those fields optional):
  68. ({
  69. android: '4.0', // Android WebView version
  70. bun: '0.1.2', // Bun version
  71. chrome: '38', // Chrome version
  72. 'chrome-android': '18', // Chrome for Android version
  73. deno: '1.12', // Deno version
  74. edge: '13', // Edge version
  75. electron: '5.0', // Electron framework version
  76. firefox: '15', // Firefox version
  77. 'firefox-android': '4', // Firefox for Android version
  78. hermes: '0.11', // Hermes version
  79. ie: '8', // Internet Explorer version
  80. ios: '13.0', // iOS Safari version
  81. node: 'current', // NodeJS version, you can use 'current' for set it to currently used
  82. opera: '12', // Opera version
  83. 'opera-android': '7', // Opera for Android version
  84. phantom: '1.9', // PhantomJS headless browser version
  85. quest: '5.0', // Meta Quest Browser version
  86. 'react-native': '0.70', // React Native version (default Hermes engine)
  87. rhino: '1.7.13', // Rhino engine version
  88. safari: '14.0', // Safari version
  89. samsung: '14.0', // Samsung Internet version
  90. esmodules: true, // That option set target to minimum supporting ES Modules versions of all browsers
  91. browsers: '> 0.25%', // Browserslist query or object with target browsers
  92. });
  93. ```
  94. ### Additional API:
  95. ```js
  96. // equals of of the method from the example above
  97. require('core-js-compat/compat')({ targets, modules, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
  98. // or
  99. require('core-js-compat').compat({ targets, modules, version }); // => { list: Array<ModuleName>, targets: { [ModuleName]: { [EngineName]: EngineVersion } } }
  100. // full compat data:
  101. require('core-js-compat/data'); // => { [ModuleName]: { [EngineName]: EngineVersion } }
  102. // or
  103. require('core-js-compat').data; // => { [ModuleName]: { [EngineName]: EngineVersion } }
  104. // map of modules by `core-js` entry points:
  105. require('core-js-compat/entries'); // => { [EntryPoint]: Array<ModuleName> }
  106. // or
  107. require('core-js-compat').entries; // => { [EntryPoint]: Array<ModuleName> }
  108. // full list of modules:
  109. require('core-js-compat/modules'); // => Array<ModuleName>
  110. // or
  111. require('core-js-compat').modules; // => Array<ModuleName>
  112. // the subset of modules which available in the passed `core-js` version:
  113. require('core-js-compat/get-modules-list-for-target-version')('3.40'); // => Array<ModuleName>
  114. // or
  115. require('core-js-compat').getModulesListForTargetVersion('3.40'); // => Array<ModuleName>
  116. ```
  117. If you wanna help to improve this data, you could take a look at the related section of [`CONTRIBUTING.md`](https://github.com/zloirock/core-js/blob/master/CONTRIBUTING.md#how-to-update-core-js-compat-data). The visualization of compatibility data and the browser tests runner is available [here](http://zloirock.github.io/core-js/compat/), the example:
  118. ![compat-table](https://user-images.githubusercontent.com/2213682/217452234-ccdcfc5a-c7d3-40d1-ab3f-86902315b8c3.png)