Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add compat-data docs #3015

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions docs/compat-data.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
id: babel-compat-data
title: "@babel/compat-data"
---

This package provides compatibility data for various JavaScript features across different browser and runtime environments. It is used by [`@babel/preset-env`](./preset-env.md) internally to determine the required Babel plugins for given [compilation targets](./options.md#targets). The compat data is extracted from the [compat-table project](https://github.com/compat-table/compat-table).

## Install

```shell npm2yarn
npm install --save-dev @babel/compat-data
```

## Usage

### plugins
Copy link
Contributor Author

@JLHwung JLHwung Nov 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't draft the plugin-bugfixes chapter since we might remove the bugfixes option in Babel 8.

```javascript title="my-babel-plugin.js"
import _plugins from "@babel/compat-data/plugins";
const pluginsCompatData = _plugins.default;
```

The `pluginsCompatData` is an object with the Babel plugin short name as key and a compat data entry as value. Each entry is an object with browser name as key and the minimum supported version as value.

For example, `pluginsCompatData["transform-object-rest-spread"]` will return an object:

```javascript title="my-babel-plugin.js"
{
"chrome": "60",
"opera": "47",
"edge": "79",
"firefox": "55",
"safari": "11.1",
"node": "8.3",
"deno": "1",
"ios": "11.3",
"samsung": "8",
"opera_mobile": "44",
"electron": "2.0"
}
```
Here, the minimum Chrome version with object-rest-spread support is `60`. Therefore, `@babel/preset-env` will enable the object-rest-spread transform only if users are compiling to Chrome versions older than `60`, and likewise for other browsers. Check the [source](https://github.com/babel/babel/blob/main/packages/babel-compat-data/data/plugins.json) for supported Babel plugin short names.

If you would like to know whether object-rest-spread is supported for any given `targets`, you don't have to manually compare it against the compat-data entry. Instead, you can use the [`isRequired`](./helper-compilation-targets.md#isrequired) utility from `@babel/helper-compilation-targets`:

```javascript title="my-babel-plugin.js"
import { isRequired } from "@babel/helper-compilation-targets";

module.exports = api => {
// Check if the targets have native object-rest-spread support
const objectRestSpreadSupported = !isRequired(
"transform-object-rest-spread",
api.targets()
);
};
```
1 change: 1 addition & 0 deletions website/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ module.exports = {
"babel-parser",
"babel-core",
"babel-generator",
"babel-compat-data",
"babel-code-frame",
"babel-runtime",
"babel-template",
Expand Down