diff --git a/_redirects b/_redirects
index 79bef5c1d..8ca5e4688 100644
--- a/_redirects
+++ b/_redirects
@@ -65,21 +65,23 @@ https://babel.netlify.com/* https://babeljs.io/:splat 301!
/docs/plugins/external-helpers/ /docs/babel-plugin-external-helpers
# Plugins renamed from -proposal- to -transform-
-/docs/babel-plugin-proposal-class-static-block /docs/babel-plugin-transform-class-static-block
-/docs/babel-plugin-proposal-private-property-in-object /docs/babel-plugin-transform-private-property-in-object
-/docs/babel-plugin-proposal-class-properties /docs/babel-plugin-transform-class-properties
-/docs/babel-plugin-proposal-private-methods /docs/babel-plugin-transform-private-methods
-/docs/babel-plugin-proposal-numeric-separator /docs/babel-plugin-transform-numeric-separator
-/docs/babel-plugin-proposal-logical-assignment-operators /docs/babel-plugin-transform-logical-assignment-operators
-/docs/babel-plugin-proposal-nullish-coalescing-operator /docs/babel-plugin-transform-nullish-coalescing-operator
-/docs/babel-plugin-proposal-optional-chaining /docs/babel-plugin-transform-optional-chaining
-/docs/babel-plugin-proposal-json-strings /docs/babel-plugin-transform-json-strings
-/docs/babel-plugin-proposal-optional-catch-binding /docs/babel-plugin-transform-optional-catch-binding
-/docs/babel-plugin-proposal-async-generator-functions /docs/babel-plugin-transform-async-generator-functions
-/docs/babel-plugin-proposal-object-rest-spread /docs/babel-plugin-transform-object-rest-spread
-/docs/babel-plugin-proposal-unicode-property-regex /docs/babel-plugin-transform-unicode-property-regex
-/docs/babel-plugin-proposal-unicode-sets-regex /docs/babel-plugin-transform-unicode-sets-regex
-/docs/babel-plugin-proposal-export-namespace-from /docs/babel-plugin-transform-export-namespace-from
+/docs/babel-plugin-proposal-class-static-block /docs/babel-plugin-transform-class-static-block
+/docs/babel-plugin-proposal-private-property-in-object /docs/babel-plugin-transform-private-property-in-object
+/docs/babel-plugin-proposal-class-properties /docs/babel-plugin-transform-class-properties
+/docs/babel-plugin-proposal-private-methods /docs/babel-plugin-transform-private-methods
+/docs/babel-plugin-proposal-numeric-separator /docs/babel-plugin-transform-numeric-separator
+/docs/babel-plugin-proposal-dynamic-import /docs/babel-plugin-transform-dynamic-import
+/docs/babel-plugin-proposal-logical-assignment-operators /docs/babel-plugin-transform-logical-assignment-operators
+/docs/babel-plugin-proposal-nullish-coalescing-operator /docs/babel-plugin-transform-nullish-coalescing-operator
+/docs/babel-plugin-proposal-optional-chaining /docs/babel-plugin-transform-optional-chaining
+/docs/babel-plugin-proposal-json-strings /docs/babel-plugin-transform-json-strings
+/docs/babel-plugin-proposal-optional-catch-binding /docs/babel-plugin-transform-optional-catch-binding
+/docs/babel-plugin-proposal-async-generator-functions /docs/babel-plugin-transform-async-generator-functions
+/docs/babel-plugin-proposal-object-rest-spread /docs/babel-plugin-transform-object-rest-spread
+/docs/babel-plugin-proposal-unicode-property-regex /docs/babel-plugin-transform-unicode-property-regex
+/docs/babel-plugin-proposal-unicode-sets-regex /docs/babel-plugin-transform-unicode-sets-regex
+/docs/babel-plugin-proposal-export-namespace-from /docs/babel-plugin-transform-export-namespace-from
+/docs/babel-plugin-proposal-duplicate-named-capturing-groups-regex /docs/babel-plugin-transform-duplicate-named-capturing-groups-regex
# Legacy redirects
/docs/en/babel-plugin-transform-decorators /docs/babel-plugin-proposal-decorators
@@ -92,8 +94,9 @@ https://babel.netlify.com/* https://babeljs.io/:splat 301!
/docs/en/next/tools/* /setup
# Blog rewrites
+/7.25.0 /blog/2024/07/26/7.25.0
/7.24.0 /blog/2024/02/28/7.24.0
-/7.23.0 /blog/2023/09/25/7.22.0
+/7.23.0 /blog/2023/09/25/7.23.0
/7.22.0 /blog/2023/05/26/7.22.0
/7.21.0 /blog/2023/02/20/7.21.0
/7.20.0 /blog/2022/10/27/7.20.0
@@ -139,3 +142,6 @@ https://babel.netlify.com/* https://babeljs.io/:splat 301!
# Docusaurus v1 compat
/docs/en/* /docs/:splat
+
+# CircleCI CORS
+/circleci/api/* https://circleci.com/api/v1.1/project/github/babel/babel/:splat 200
diff --git a/docs/assumptions.md b/docs/assumptions.md
index d6b244cc6..5e9d66e8e 100644
--- a/docs/assumptions.md
+++ b/docs/assumptions.md
@@ -434,8 +434,6 @@ class Child extends Parent {
"mutableTemplateObject": true,
"noClassCalls": true,
"noDocumentAll": true,
- "noObjectSuper": true,
- "noUndeclaredVariablesCheck": true,
"objectRestNoSymbols": true,
"privateFieldsAsProperties": true,
"pureGetters": true,
diff --git a/docs/features-timeline.md b/docs/features-timeline.md
index 2275b44be..7aa6aa72d 100644
--- a/docs/features-timeline.md
+++ b/docs/features-timeline.md
@@ -9,6 +9,15 @@ Which major new features did we introduce in each Babel version? This page inclu
Additionally, use this timeline to track some other important efforts, such as the [babel-polyfills](https://github.com/babel/babel-polyfills) project.
+
+
+## Babel 7.25.0
+
+[blog post](https://babeljs.io/blog/2024/07/26/7.25.0)
+
+- Enable the Stage 4 [duplicated named capturing groups](https://github.com/tc39/proposal-duplicate-named-capturing-groups/) proposal by default
+
+
## Babel 7.24.0
diff --git a/docs/generator.md b/docs/generator.md
index 7fe578ec2..8a121bcdf 100644
--- a/docs/generator.md
+++ b/docs/generator.md
@@ -3,7 +3,7 @@ id: babel-generator
title: "@babel/generator"
---
-> Turns an AST into code.
+> Turns Babel AST into code.
## Install
@@ -33,6 +33,25 @@ const output = generate(
The symbols like white spaces or new line characters are not preserved in the AST. When Babel generator prints code from the AST, the output format is not guaranteed.
:::
+### Parser plugins support
+Babel generator supports all the listed [Babel parser plugins](./parser.md#plugins) except `estree`. Note that parser plugins do not transform the code. For example,
+if you pass JSX `` to babel generator, the result will still contain the `div` JSX element.
+
+```js title="JavaScript"
+import { parse } from "@babel/parser";
+import generate from "@babel/generator";
+
+const code = "const Example = () =>
");
+```
+
## Options
diff --git a/docs/helper-environment-visitor.md b/docs/helper-environment-visitor.md
index 41daeceb6..2ec23ecc4 100644
--- a/docs/helper-environment-visitor.md
+++ b/docs/helper-environment-visitor.md
@@ -74,7 +74,7 @@ if (path.isMethod()) {
Suppose we are migrating from vanilla JavaScript to ES Modules. Now that the `this` keyword is equivalent to `undefined` at the top level of an ESModule ([spec](https://tc39.es/ecma262/#sec-module-environment-records-getthisbinding)), we want to replace all top-level `this` to [`globalThis`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis):
-```js title=input.js
+```js title="input.js"
// replace this expression to `globalThis.foo = "top"`
this.foo = "top";
diff --git a/docs/node.md b/docs/node.md
index e37ec7d6f..04e170840 100644
--- a/docs/node.md
+++ b/docs/node.md
@@ -72,15 +72,29 @@ NODE_NO_READLINE=1 rlwrap --always-readline npx babel-node
### Usage
```sh title="Shell"
-babel-node [options] [ -e script | script.js ] [arguments]
+babel-node [options] [ -e script | [--] script.js ] [arguments]
```
+:::babel7
+
When arguments for user script have names conflicting with node options, double dash placed before script name can be used to resolve ambiguities
```sh title="Shell"
npx babel-node --inspect --presets @babel/preset-env -- script.js --inspect
```
+:::
+
+:::babel8
+
+Options for Node.js and Babel must be placed before the file name, while arguments for the script (that will be available as `process.argv`) must be placed after.
+
+```sh title="Shell"
+npx babel-node --arg-for-babel script.js --arg-for-script.js
+```
+
+:::
+
### Options
| Option | Default | Description |
diff --git a/docs/options.md b/docs/options.md
index f9d87333d..7511466b4 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -282,7 +282,7 @@ babelrcRoots: [
### `plugins`
-Type: `Array` ([`PluginEntry`](#plugin-preset-entries))
+Type: `Array` ([`PluginEntry`](#pluginpreset-entries))
Default: `[]`
An array of plugins to activate when processing this file. For more information on how
@@ -295,7 +295,7 @@ representation of a plugin or preset, you should use [`babel.createConfigItem()`
### `presets`
-Type: `Array` ([`PresetEntry`](#plugin-preset-entries))
+Type: `Array` ([`PresetEntry`](#pluginpreset-entries))
Default: `[]`
An array of presets to activate when processing this file. For more information on how
@@ -365,7 +365,7 @@ If a minor version is not specified, Babel will interpret it as `MAJOR.0`. For e
#### No targets
-:::babel7
+::::babel7
When no targets are specified: Babel will assume you are targeting the oldest browsers possible. For example, `@babel/preset-env` will transform all ES2015-ES2020 code to be ES5 compatible.
@@ -389,7 +389,7 @@ Because of this, Babel's behavior is different than [browserslist](https://githu
We recognize this isn’t ideal and will be revisiting this in Babel v8.
-:::
+::::
:::babel8
@@ -612,7 +612,8 @@ Default: `false`
- `"inline"` to generate a sourcemap and append it as a data URL to the end of the code, but not include it in the result object.
- `"both"` is the same as inline, but will include the map in the result object.
-`@babel/cli` overloads some of these to also affect how maps are written to disk:
+Options in configuration files have no effect on whether `@babel/cli` writes files separate `.map` files to disk.
+When the `--source-maps` CLI option is passed to `@babel/cli` it will also control whether `.map` files are written:
- `true` will write the map to a `.map` file on disk
- `"inline"` will write the file directly, so it will have a `data:` containing the map
diff --git a/docs/parser.md b/docs/parser.md
index 91cb21e6b..fe326f9ba 100644
--- a/docs/parser.md
+++ b/docs/parser.md
@@ -32,15 +32,16 @@ mind. When in doubt, use `.parse()`.
History
-| Version | Changes |
-| --- | --- |
-| `v7.23.0` | Added `createImportExpressions` |
-| `v7.21.0` | Added `allowNewTargetOutsideFunction` and `annexb` |
-| `v7.16.0` | Added `startColumn` |
-| `v7.15.0` | Added `attachComment` |
-| `v7.7.0` | Added `errorRecovery` |
-| `v7.5.0` | Added `allowUndeclaredExports` |
-| `v7.2.0` | Added `createParenthesizedExpressions` |
+| Version | Changes |
+| --------- | -------------------------------------------------- |
+| `v7.23.0` | Added `createImportExpressions` |
+| `v7.21.0` | Added `allowNewTargetOutsideFunction` and `annexB` |
+| `v7.16.0` | Added `startColumn` |
+| `v7.15.0` | Added `attachComment` |
+| `v7.7.0` | Added `errorRecovery` |
+| `v7.5.0` | Added `allowUndeclaredExports` |
+| `v7.2.0` | Added `createParenthesizedExpressions` |
+
- **allowImportExportEverywhere**: By default, `import` and `export`
@@ -74,7 +75,7 @@ mind. When in doubt, use `.parse()`.
- **attachComment**: By default, Babel attaches comments to adjacent AST nodes. When this option is set to `false`, comments are not attached. It can provide up to 30% performance improvement when the input code has _many_ comments. `@babel/eslint-parser` will set it for you. It is not recommended to use `attachComment: false` with Babel transform, as doing so removes all the comments in output code, and renders annotations such as `/* istanbul ignore next */` nonfunctional.
-- **annexb**: By default, Babel parses JavaScript according to [ECMAScript's Annex B "_Additional ECMAScript Features for Web Browsers_"](https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers) syntax. When this option is set to `false`, Babel will parse syntax without the extensions specific to Annex B.
+- **annexB**: By default, Babel parses JavaScript according to [ECMAScript's Annex B "_Additional ECMAScript Features for Web Browsers_"](https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers) syntax. When this option is set to `false`, Babel will parse syntax without the extensions specific to Annex B.
- **createImportExpressions**: By default, the parser parses dynamic import `import()` as call expression nodes. When this option is set to `true`, `ImportExpression` AST nodes are created instead. This option will default to `true` in Babel 8.
@@ -118,10 +119,11 @@ It is based on [ESTree spec][] with the following deviations:
- [Program][] and [BlockStatement][] contain additional `directives` field with [Directive][] and [DirectiveLiteral][]
- [ClassMethod][], [ClassPrivateMethod][], [ObjectProperty][], and [ObjectMethod][] value property's properties in [FunctionExpression][] is coerced/brought into the main method node.
- [ChainExpression][] is replaced with [OptionalMemberExpression][] and [OptionalCallExpression][]
-- [ImportExpression][] is replaced with a [CallExpression][] whose `callee` is an [Import] node.
+- [ImportExpression][] is replaced with a [CallExpression][] whose `callee` is an [Import] node. This change will be reversed in Babel 8.
+- [ExportAllDeclaration][] with `exported` field is replaced with an [ExportNamedDeclaration][] containing an [ExportNamespaceSpecifier][] node.
-:::tip
-There is now an `estree` plugin which reverts these deviations
+:::note
+The `estree` plugin can revert these deviations. Use it only if you are passing Babel AST to other ESTree-compliant tools.
:::
AST for JSX code is based on [Facebook JSX AST][].
@@ -134,6 +136,7 @@ AST for JSX code is based on [Facebook JSX AST][].
[propertydefinition]: https://github.com/estree/estree/blob/master/es2022.md#propertydefinition
[chainexpression]: https://github.com/estree/estree/blob/master/es2020.md#chainexpression
[importexpression]: https://github.com/estree/estree/blob/master/es2020.md#importexpression
+[exportalldeclaration]: https://github.com/estree/estree/blob/master/es2020.md#exportalldeclaration
[privateidentifier]: https://github.com/estree/estree/blob/master/es2022.md#privateidentifier
[stringliteral]: https://github.com/babel/babel/tree/main/packages/babel-parser/ast/spec.md#stringliteral
[numericliteral]: https://github.com/babel/babel/tree/main/packages/babel-parser/ast/spec.md#numericliteral
@@ -157,7 +160,9 @@ AST for JSX code is based on [Facebook JSX AST][].
[optionalcallexpression]: https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#optionalcallexpression
[callexpression]: https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#callexpression
[import]: https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#import
-[facebook jsx ast]: https://github.com/facebook/jsx/blob/master/AST.md
+[exportnameddeclaration]: https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#exportnameddeclaration
+[exportnamespacespecifier]: https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#exportnamespacespecifier
+[facebook jsx ast]: https://github.com/facebook/jsx/blob/main/AST.md
### Semver
@@ -190,52 +195,30 @@ require("@babel/parser").parse("code", {
#### Language extensions
-
History
-| Version | Changes |
-| --- | --- |
+| Version | Changes |
+| -------- | ------------------- |
| `v7.6.0` | Added `v8intrinsic` |
-
-
-| Name | Code Example |
-|------|--------------|
-| `flow` ([repo](https://github.com/facebook/flow)) | `var a: string = "";` |
-| `flowComments` ([docs](https://flow.org/en/docs/types/comments/)) | /*:: type Foo = \{...}; */ |
-| `jsx` ([repo](https://facebook.github.io/jsx/)) | `{s}` |
-| `typescript` ([repo](https://github.com/Microsoft/TypeScript)) | `var a: string = "";` |
-| `v8intrinsic` | `%DebugPrint(foo);` |
+
+| Name | Code Example |
+| ----------------------------------------------------------------- | ----------------------------------------- |
+| `flow` ([repo](https://github.com/facebook/flow)) | `var a: string = "";` |
+| `flowComments` ([docs](https://flow.org/en/docs/types/comments/)) | /\*:: type Foo = \{...}; \*/ |
+| `jsx` ([repo](https://facebook.github.io/jsx/)) | `{s}` |
+| `typescript` ([repo](https://github.com/Microsoft/TypeScript)) | `var a: string = "";` |
+| `v8intrinsic` | `%DebugPrint(foo);` |
#### ECMAScript [proposals](https://github.com/babel/proposals)
-
- History
-
-| Version | Changes |
-| --- | --- |
-| `v7.23.0` | Added `sourcePhaseImports`, `deferredImportEvaluation`, `optionalChainingAssign` |
-| `v7.22.0` | Enabled `regexpUnicodeSets` by default, added `importAttributes` |
-| `v7.20.0` | Added `explicitResourceManagement`, `importReflection` |
-| `v7.17.0` | Added `regexpUnicodeSets`, `destructuringPrivate`, `decoratorAutoAccessors` |
-| `v7.15.0` | Added `hack` to the `proposal` option of `pipelineOperator`. Moved `topLevelAwait`, `privateIn` to Latest ECMAScript features |
-| `v7.14.0` | Added `asyncDoExpressions`. Moved `classProperties`, `classPrivateProperties`, `classPrivateMethods`, `moduleStringNames` to Latest ECMAScript features |
-| `v7.13.0` | Added `moduleBlocks` |
-| `v7.12.0` | Added `classStaticBlock`, `moduleStringNames` |
-| `v7.11.0` | Added `decimal` |
-| `v7.10.0` | Added `privateIn` |
-| `v7.9.0` | Added `recordAndTuple` |
-| `v7.7.0` | Added `topLevelAwait` |
-| `v7.4.0` | Added `partialApplication` |
-| `v7.2.0` | Added `classPrivateMethods` |
-
+:::babel8
| Name | Code Example |
| -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `asyncDoExpressions` ([proposal](https://github.com/tc39/proposal-async-do-expressions)) | `async do { await requestAPI().json() }` |
-| `decimal` ([proposal](https://github.com/tc39/proposal-decimal)) | `0.3m` |
| `decorators` ([proposal](https://github.com/tc39/proposal-decorators)) `decorators-legacy` | `@a class A {}` |
| `decoratorAutoAccessors` ([proposal](https://github.com/tc39/proposal-decorators)) | `class Example { @reactive accessor myBool = false; }` |
| `deferredImportEvaluation` ([proposal](https://github.com/tc39/proposal-defer-import-eval)) | `import defer * as ns from "dep";` |
@@ -245,8 +228,7 @@ require("@babel/parser").parse("code", {
| `exportDefaultFrom` ([proposal](https://github.com/tc39/ecmascript-export-default-from)) | `export v from "mod"` |
| `functionBind` ([proposal](https://github.com/zenparsing/es-function-bind)) | `a::b`, `::console.log` |
| `functionSent` ([proposal](https://github.com/tc39/proposal-function.sent)) | `function.sent` |
-| `importAttributes` ([proposal](https://github.com/tc39/proposal-import-attributes)) `importAssertions` (⚠️ deprecated) | `import json from "./foo.json" with { type: "json" };` |
-| `importReflection` ([proposal](https://github.com/tc39/proposal-import-reflection)) | `import module foo from "./foo.wasm";` |
+| `importAttributes` ([proposal](https://github.com/tc39/proposal-import-attributes)) | `import json from "./foo.json" with { type: "json" };` |
| `moduleBlocks` ([proposal](https://github.com/tc39/proposal-js-module-blocks)) | `let m = module { export let y = 1; };` |
| `optionalChainingAssign` ([proposal](https://github.com/tc39/proposal-optional-chaining-assignment)) | `x?.prop = 2` |
| `partialApplication` ([proposal](https://github.com/babel/proposals/issues/32)) | `f(?, a)` |
@@ -255,6 +237,55 @@ require("@babel/parser").parse("code", {
| `sourcePhaseImports` ([proposal](https://github.com/tc39/proposal-source-phase-imports)) | `import source x from "./x"` |
| `throwExpressions` ([proposal](https://github.com/babel/proposals/issues/23)) | `() => throw new Error("")` |
+:::
+
+:::babel7
+
+
+ History
+
+| Version | Changes |
+| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `v7.23.0` | Added `sourcePhaseImports`, `deferredImportEvaluation`, `optionalChainingAssign` |
+| `v7.22.0` | Enabled `regexpUnicodeSets` by default, added `importAttributes` |
+| `v7.20.0` | Added `explicitResourceManagement`, `importReflection` |
+| `v7.17.0` | Added `regexpUnicodeSets`, `destructuringPrivate`, `decoratorAutoAccessors` |
+| `v7.15.0` | Added `hack` to the `proposal` option of `pipelineOperator`. Moved `topLevelAwait`, `privateIn` to Latest ECMAScript features |
+| `v7.14.0` | Added `asyncDoExpressions`. Moved `classProperties`, `classPrivateProperties`, `classPrivateMethods`, `moduleStringNames` to Latest ECMAScript features |
+| `v7.13.0` | Added `moduleBlocks` |
+| `v7.12.0` | Added `classStaticBlock`, `moduleStringNames` |
+| `v7.11.0` | Added `decimal` |
+| `v7.10.0` | Added `privateIn` |
+| `v7.9.0` | Added `recordAndTuple` |
+| `v7.7.0` | Added `topLevelAwait` |
+| `v7.4.0` | Added `partialApplication` |
+| `v7.2.0` | Added `classPrivateMethods` |
+
+
+
+| Name | Code Example |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `asyncDoExpressions` ([proposal](https://github.com/tc39/proposal-async-do-expressions)) | `async do { await requestAPI().json() }` |
+| `decimal` ([proposal](https://github.com/tc39/proposal-decimal)) | `0.3m` |
+| `decorators` ([proposal](https://github.com/tc39/proposal-decorators)) `decorators-legacy` | `@a class A {}` |
+| `decoratorAutoAccessors` ([proposal](https://github.com/tc39/proposal-decorators)) | `class Example { @reactive accessor myBool = false; }` |
+| `deferredImportEvaluation` ([proposal](https://github.com/tc39/proposal-defer-import-eval)) | `import defer * as ns from "dep";` |
+| `destructuringPrivate` ([proposal](https://github.com/tc39/proposal-destructuring-private)) | `class Example { #x = 1; method() { const { #x: x } = this; } }` |
+| `doExpressions` ([proposal](https://github.com/tc39/proposal-do-expressions)) | `var a = do { if (true) { 'hi'; } };` |
+| `explicitResourceManagement` ([proposal](https://github.com/tc39/proposal-explicit-resource-management)) | `using reader = getReader()` |
+| `exportDefaultFrom` ([proposal](https://github.com/tc39/ecmascript-export-default-from)) | `export v from "mod"` |
+| `functionBind` ([proposal](https://github.com/zenparsing/es-function-bind)) | `a::b`, `::console.log` |
+| `functionSent` ([proposal](https://github.com/tc39/proposal-function.sent)) | `function.sent` |
+| `importAttributes` ([proposal](https://github.com/tc39/proposal-import-attributes)) `importAssertions` (⚠️ deprecated) | `import json from "./foo.json" with { type: "json" };` |
+| `importReflection` ([proposal](https://github.com/tc39/proposal-import-reflection)) | `import module foo from "./foo.wasm";` |
+| `moduleBlocks` ([proposal](https://github.com/tc39/proposal-js-module-blocks)) | `let m = module { export let y = 1; };` |
+| `optionalChainingAssign` ([proposal](https://github.com/tc39/proposal-optional-chaining-assignment)) | `x?.prop = 2` |
+| `partialApplication` ([proposal](https://github.com/babel/proposals/issues/32)) | `f(?, a)` |
+| `pipelineOperator` ([proposal](https://github.com/babel/proposals/issues/29)) | a |> b |
+| `recordAndTuple` ([proposal](https://github.com/tc39/proposal-record-tuple)) | `#{x: 1}`, `#[1, 2]` |
+| `sourcePhaseImports` ([proposal](https://github.com/tc39/proposal-source-phase-imports)) | `import source x from "./x"` |
+| `throwExpressions` ([proposal](https://github.com/babel/proposals/issues/23)) | `() => throw new Error("")` |
+
#### Latest ECMAScript features
The following features are already enabled on the latest version of `@babel/parser`, and cannot be disabled because they are part of the language.
@@ -273,7 +304,7 @@ You should enable these features only if you are using an older version.
| `logicalAssignment` ([proposal](https://github.com/tc39/proposal-logical-assignment)) | `a &&= b` |
| `moduleStringNames` ([proposal](https://github.com/tc39/ecma262/pull/2154)) | `import { "😄" as smile } from "emoji";` |
| `nullishCoalescingOperator` ([proposal](https://github.com/babel/proposals/issues/14)) | `a ?? b` |
-| `numericSeparator` ([proposal](https://github.com/tc39/proposal-numeric-separator)) | `1_000_000` |
+| `numericSeparator` ([proposal](https://github.com/tc39/proposal-numeric-separator)) | `1_000_000` |
| `objectRestSpread` ([proposal](https://github.com/tc39/proposal-object-rest-spread)) | `var a = { b, ...c };` |
| `optionalCatchBinding` ([proposal](https://github.com/babel/proposals/issues/7)) | `try {throw 0;} catch{do();}` |
| `optionalChaining` ([proposal](https://github.com/tc39/proposal-optional-chaining)) | `a?.b` |
@@ -281,18 +312,21 @@ You should enable these features only if you are using an older version.
| `regexpUnicodeSets` ([proposal](https://github.com/tc39/proposal-regexp-set-notation)) | `/[\p{Decimal_Number}--[0-9]]/v;` |
| `topLevelAwait` ([proposal](https://github.com/tc39/proposal-top-level-await/)) | `await promise` in modules |
+:::
+
#### Plugins options
History
-| Version | Changes |
-| --- | --- |
+| Version | Changes |
+| -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `7.21.0` | The default behavior of the `decorators`' `decoratorsBeforeExport` option is to allow decorators either before or after the `export` keyword. |
| `7.19.0` | The `syntaxType` option of the `recordAndTuple` plugin defaults to `hash`; added `allowCallParenthesized` option for the `decorators` plugin. |
-| `7.17.0` | Added `@@` and `^^` to the `topicToken` option of the `hack` pipeline operator |
-| `7.16.0` | Added `disallowAmbiguousJSXLike` for `typescript` plugin. Added `^` to the `topicToken` option of the `hack` pipeline operators |
-| `7.14.0` | Added `dts` for `typescript` plugin |
+| `7.17.0` | Added `@@` and `^^` to the `topicToken` option of the `hack` pipeline operator |
+| `7.16.0` | Added `disallowAmbiguousJSXLike` for `typescript` plugin. Added `^` to the `topicToken` option of the `hack` pipeline operators |
+| `7.14.0` | Added `dts` for `typescript` plugin |
+
@@ -305,7 +339,11 @@ When a plugin is specified multiple times, only the first options are considered
- `deprecatedAssertSyntax` (`boolean`, defaults to `false`)
- When `true`, allow parsing import attributes using the [deprecated](https://tc39.es/proposal-import-attributes/#sec-deprecated-assert-keyword-for-import-attributes) `assert` keyword. This matches the syntax originally supported by the `importAssertions` parser plugin.
+ When `true`, allow parsing an old version of the import attributes, which used the `assert` keyword instead of `with`.
+
+ :::babel7
+ This matches the syntax originally supported by the `importAssertions` parser plugin.
+ :::
- `decorators`:
@@ -315,20 +353,21 @@ When a plugin is specified multiple times, only the first options are considered
- `decoratorsBeforeExport` (`boolean`)
- By default decorators on exported classes can be placed either before or after the `export` keyword. When this option is set, decorators will only be allowed in the specified position.
+ By default decorators on exported classes can be placed either before or after the `export` keyword. When this option is set, decorators will only be allowed in the specified position.
- ```js title="JavaScript"
- // decoratorsBeforeExport: true
- @dec
- export class C {}
+ ```js title="JavaScript"
+ // decoratorsBeforeExport: true
+ @dec
+ export class C {}
- // decoratorsBeforeExport: false
- export @dec class C {}
- ```
+ // decoratorsBeforeExport: false
+ export @dec class C {}
+ ```
- :::caution
-This option is deprecated and will be removed in a future version. Code that is valid when this option is explicitly set to `true` or `false` is also valid when this option is not set.
-:::
+ :::caution
+
+ This option is deprecated and will be removed in a future version. Code that is valid when this option is explicitly set to `true` or `false` is also valid when this option is not set.
+ :::
- `optionalChainingAssign`:
@@ -380,9 +419,10 @@ This option is deprecated and will be removed in a future version. Code that is
History
-| Version | Changes |
-| --- | --- |
+| Version | Changes |
+| --------- | ----------------- |
| `v7.14.0` | Added error codes |
+
Error codes are useful for handling the errors thrown by `@babel/parser`.
diff --git a/docs/plugin-bugfix-firefox-class-in-computed-class-key.md b/docs/plugin-bugfix-firefox-class-in-computed-class-key.md
new file mode 100644
index 000000000..84082a515
--- /dev/null
+++ b/docs/plugin-bugfix-firefox-class-in-computed-class-key.md
@@ -0,0 +1,45 @@
+---
+id: babel-plugin-bugfix-firefox-class-in-computed-class-key
+title: "@babel/plugin-bugfix-firefox-class-in-computed-class-key"
+sidebar_label: bugfix-firefox-class-in-computed-class-key
+---
+
+This bugfix plugin transforms classes inside computed keys of other classes to workaround a [SpiderMonkey bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1887677) with private class elements.
+
+:::tip
+This plugin is included in `@babel/preset-env`, and Babel will automatically enable this plugin for you when your `targets` are affected by the browser bug.
+:::
+
+:::warning
+Terser versions older than 5.30.2 will undo the transform done by this plugin. Make sure to use at least version 5.30.2, or set the Terser's [`compress.inline`](https://terser.org/docs/options/#compress-options) option to `false`.
+:::
+
+## Installation
+
+```shell npm2yarn
+npm install --save-dev @babel/plugin-bugfix-firefox-class-in-computed-class-key
+```
+
+## Usage
+
+### With a configuration file (Recommended)
+
+```json title="babel.config.json"
+{
+ "plugins": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key"]
+}
+```
+
+### Via CLI
+
+```sh title="Shell"
+babel --plugins @babel/plugin-bugfix-firefox-class-in-computed-class-key script.js
+```
+
+### Via Node API
+
+```js title="JavaScript"
+require("@babel/core").transformSync("code", {
+ plugins: ["@babel/plugin-bugfix-firefox-class-in-computed-class-key"],
+});
+```
diff --git a/docs/plugin-bugfix-safari-class-field-initializer-scope.md b/docs/plugin-bugfix-safari-class-field-initializer-scope.md
new file mode 100644
index 000000000..d5f21096e
--- /dev/null
+++ b/docs/plugin-bugfix-safari-class-field-initializer-scope.md
@@ -0,0 +1,41 @@
+---
+id: babel-plugin-bugfix-safari-class-field-initializer-scope
+title: "@babel/plugin-bugfix-safari-class-field-initializer-scope"
+sidebar_label: bugfix-safari-class-field-initializer-scope
+---
+
+This bugfix plugin wraps some class field initializers with an IIFE to workaround [a WebKit bug](https://webkit.org/b/236843) which affects Safari 15.
+
+:::tip
+This plugin is included in `@babel/preset-env`, and Babel will automatically enable this plugin for you when your `targets` are affected by the browser bug.
+:::
+
+## Installation
+
+```shell npm2yarn
+npm install --save-dev @babel/plugin-bugfix-safari-class-field-initializer-scope
+```
+
+## Usage
+
+### With a configuration file (Recommended)
+
+```json title="babel.config.json"
+{
+ "plugins": ["@babel/plugin-bugfix-safari-class-field-initializer-scope"]
+}
+```
+
+### Via CLI
+
+```sh title="Shell"
+babel --plugins @babel/plugin-bugfix-safari-class-field-initializer-scope script.js
+```
+
+### Via Node API
+
+```js title="JavaScript"
+require("@babel/core").transformSync("code", {
+ plugins: ["@babel/plugin-bugfix-safari-class-field-initializer-scope"],
+});
+```
diff --git a/docs/plugin-proposal-decorators.md b/docs/plugin-proposal-decorators.md
index 63b6e8dda..559dbe948 100644
--- a/docs/plugin-proposal-decorators.md
+++ b/docs/plugin-proposal-decorators.md
@@ -110,7 +110,7 @@ Selects the decorators proposal to use:
`"2023-11"`, `"2023-05"`, `"2023-01"`, `"2022-03"`, `"2021-12"`, `"2018-09"` or `"legacy"`.
Selects the decorators proposal to use:
-- `"2023-11"` is the proposal version after the updates that reached consensus in the November 2023 TC30 meetings, intergrating [this change](https://github.com/pzuraq/ecma262/pull/12)
+- `"2023-11"` is the proposal version after the updates that reached consensus in the November 2023 TC39 meetings, intergrating [this change](https://github.com/pzuraq/ecma262/pull/12)
- `"2023-05"` is the proposal version after the updates that reached consensus in the March and May 2023 TC39 meetings, integrating [these changes](https://github.com/pzuraq/ecma262/compare/e86128e13b63a3c2efc3728f76c8332756752b02...c4465e44d514c6c1dba810487ec2721ccd6b08f9).
- `"2023-01"` is the proposal version after the updates that reached consensus in the January 2023 TC39 meeting, integrating [`pzuraq/ecma262#4`](https://github.com/pzuraq/ecma262/pull/4).
- `"2022-03"` is the proposal version that reached consensus for Stage 3 in the March 2022 TC39 meeting. You can read more about it at [`tc39/proposal-decorators@8ca65c046d`](https://github.com/tc39/proposal-decorators/tree/8ca65c046dd5e9aa3846a1fe5df343a6f7efd9f8).
diff --git a/docs/plugin-proposal-duplicate-named-capturing-groups-regex.md b/docs/plugin-proposal-duplicate-named-capturing-groups-regex.md
index 2bfeb8052..608b7e36a 100644
--- a/docs/plugin-proposal-duplicate-named-capturing-groups-regex.md
+++ b/docs/plugin-proposal-duplicate-named-capturing-groups-regex.md
@@ -1,9 +1,15 @@
---
-id: babel-plugin-proposal-duplicate-named-capturing-groups-regex
-title: "@babel/plugin-proposal-duplicate-named-capturing-groups-regex"
+id: babel-plugin-transform-duplicate-named-capturing-groups-regex
+title: "@babel/plugin-transform-duplicate-named-capturing-groups-regex"
sidebar_label: duplicate-named-capturing-groups-regex
---
+:::info
+This plugin is included in `@babel/preset-env`, in [ES2025](https://github.com/tc39/proposals/blob/master/finished-proposals.md).
+:::
+
+This plugin transforms regular expression _literals_ to support duplicate named capturing groups. It does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
## Examples
**In**
@@ -28,7 +34,7 @@ console.log(re.exec("02-1999").groups.year);
## Installation
```shell npm2yarn
-npm install --save-dev @babel/plugin-proposal-duplicate-named-capturing-groups-regex
+npm install --save-dev @babel/plugin-transform-duplicate-named-capturing-groups-regex
```
## Usage
@@ -37,21 +43,21 @@ npm install --save-dev @babel/plugin-proposal-duplicate-named-capturing-groups-r
```json title="babel.config.json"
{
- "plugins": ["@babel/plugin-proposal-duplicate-named-capturing-groups-regex"]
+ "plugins": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex"]
}
```
### Via CLI
```sh title="Shell"
-babel --plugins @babel/plugin-proposal-duplicate-named-capturing-groups-regex script.js
+babel --plugins @babel/plugin-transform-duplicate-named-capturing-groups-regex script.js
```
### Via Node API
```js title="JavaScript"
require("@babel/core").transformSync("code", {
- plugins: ["@babel/plugin-proposal-duplicate-named-capturing-groups-regex"],
+ plugins: ["@babel/plugin-transform-duplicate-named-capturing-groups-regex"],
});
```
diff --git a/docs/plugin-proposal-import-attributes-to-assertions.md b/docs/plugin-proposal-import-attributes-to-assertions.md
index cc87cd0a0..4d076e99d 100644
--- a/docs/plugin-proposal-import-attributes-to-assertions.md
+++ b/docs/plugin-proposal-import-attributes-to-assertions.md
@@ -6,7 +6,7 @@ sidebar_label: import-attributes-to-assertions
:::caution
-This plugin will generate code that is not compatible with the current ECMAScript specification or with any currently proposed addition to it. Only use it when you are shipping native ES modules and you need compatibility exclusively with tools that don't support the Import Attributes syntax (`import pkg from "./package.json" with { type: "json" }`) but support the old Import Assertions syntax (`import pkg from "./package.json" assert { type: "json" }`), such as Chrome 91+ and Node.js 17.2+.
+This plugin will generate code that is not compatible with the current ECMAScript specification or with any currently proposed addition to it. Only use it when you are shipping native ES modules and you need compatibility exclusively with tools that don't support the Import Attributes syntax (`import pkg from "./package.json" with { type: "json" }`) but support the old Import Assertions syntax (`import pkg from "./package.json" assert { type: "json" }`), such as Chrome `91 - 122` and Node.js `^16.14 || ^18 || ^20 < 20.10`.
:::
diff --git a/docs/plugin-proposal-json-modules.md b/docs/plugin-proposal-json-modules.md
index 795bac5fd..1f579ca49 100644
--- a/docs/plugin-proposal-json-modules.md
+++ b/docs/plugin-proposal-json-modules.md
@@ -72,9 +72,7 @@ npm install --save-dev @babel/plugin-proposal-json-modules
```json title="babel.config.json"
{
- "plugins": [
- "@babel/plugin-proposal-json-modules"
- ]
+ "plugins": ["@babel/plugin-proposal-json-modules"]
}
```
@@ -88,12 +86,38 @@ babel --plugins=@babel/plugin-proposal-json-modules script.js
```js title="JavaScript"
require("@babel/core").transformSync("code", {
- plugins: [
- "@babel/plugin-proposal-json-modules"
- ],
+ plugins: ["@babel/plugin-proposal-json-modules"],
});
```
+## Options
+
+### `uncheckedRequire`
+
+Type: `boolean`
+Default: `false`
+Added in `v7.25.0`
+
+When set to `true`, the plugin will generate a simpler output by using `require` directly to import the JSON file. When targeting CommonJS, this option leads to output that is easier to analyze for bundlers but doesn't check that the module being imported is actually JSON:
+
+**In**
+
+```js
+import data from "./data.json" with { type: "json" };
+```
+
+**Out (without `uncheckedRequire: true`)**
+
+```js
+const data = JSON.parse(require("fs").readFileSync(require.resolve("./data.json")));
+```
+
+**Out (with `uncheckedRequire: true`)**
+
+```js
+const data = require("./data.json");
+```
+
## References
- [Proposal: JSON Modules](https://github.com/tc39/proposal-json-modules/)
diff --git a/docs/plugin-proposal-optional-chaining-assign.md b/docs/plugin-proposal-optional-chaining-assign.md
index e359b4b48..9a687e226 100644
--- a/docs/plugin-proposal-optional-chaining-assign.md
+++ b/docs/plugin-proposal-optional-chaining-assign.md
@@ -34,10 +34,12 @@ npm install --save-dev @babel/plugin-proposal-optional-chaining-assign
```json title="babel.config.json"
{
"plugins": [
- "@babel/plugin-proposal-optional-chaining-assign",
- {
- "version": "2023-07"
- }
+ [
+ "@babel/plugin-proposal-optional-chaining-assign",
+ {
+ "version": "2023-07"
+ }
+ ]
]
}
```
diff --git a/docs/plugin-transform-dotall-regex.md b/docs/plugin-transform-dotall-regex.md
index 7b5dcd09d..625e885ee 100644
--- a/docs/plugin-transform-dotall-regex.md
+++ b/docs/plugin-transform-dotall-regex.md
@@ -8,6 +8,8 @@ sidebar_label: dotall-regex
This plugin is included in `@babel/preset-env`, in [ES2018](https://github.com/tc39/proposals/blob/master/finished-proposals.md)
:::
+This plugin transforms regular expression _literals_ to support the `/s` flag. It does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
## Example
**In**
diff --git a/docs/plugin-proposal-dynamic-import.md b/docs/plugin-transform-dynamic-import.md
similarity index 88%
rename from docs/plugin-proposal-dynamic-import.md
rename to docs/plugin-transform-dynamic-import.md
index 439f68779..89c0c478b 100644
--- a/docs/plugin-proposal-dynamic-import.md
+++ b/docs/plugin-transform-dynamic-import.md
@@ -1,6 +1,6 @@
---
-id: babel-plugin-proposal-dynamic-import
-title: "@babel/plugin-proposal-dynamic-import"
+id: babel-plugin-transform-dynamic-import
+title: "@babel/plugin-transform-dynamic-import"
sidebar_label: dynamic-import
---
@@ -74,7 +74,7 @@ will be transformed to
## Installation
```shell npm2yarn
-npm install --save-dev @babel/plugin-proposal-dynamic-import
+npm install --save-dev @babel/plugin-transform-dynamic-import
```
## Usage
@@ -84,7 +84,7 @@ npm install --save-dev @babel/plugin-proposal-dynamic-import
```json title="babel.config.json"
{
"plugins": [
- "@babel/plugin-proposal-dynamic-import",
+ "@babel/plugin-transform-dynamic-import",
"@babel/plugin-transform-modules-commonjs"
]
}
@@ -93,7 +93,7 @@ npm install --save-dev @babel/plugin-proposal-dynamic-import
### Via CLI
```sh title="Shell"
-babel --plugins=@babel/plugin-proposal-dynamic-import,@babel/plugin-transform-modules-amd script.js
+babel --plugins=@babel/plugin-transform-dynamic-import,@babel/plugin-transform-modules-amd script.js
```
### Via Node API
@@ -101,7 +101,7 @@ babel --plugins=@babel/plugin-proposal-dynamic-import,@babel/plugin-transform-mo
```js title="JavaScript"
require("@babel/core").transformSync("code", {
plugins: [
- "@babel/plugin-proposal-dynamic-import",
+ "@babel/plugin-transform-dynamic-import",
"@babel/plugin-transform-modules-systemjs"
],
});
diff --git a/docs/plugin-transform-named-capturing-groups-regex.md b/docs/plugin-transform-named-capturing-groups-regex.md
index 500b78389..bec9a6c0b 100644
--- a/docs/plugin-transform-named-capturing-groups-regex.md
+++ b/docs/plugin-transform-named-capturing-groups-regex.md
@@ -11,6 +11,8 @@ functionalities. If you need to support older browsers, use either
the `runtime: false` option or import a proper polyfill (e.g. `core-js`).
:::
+This plugin transforms regular expression _literals_ to support named capturing groups. It does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
## Examples
**In**
diff --git a/docs/plugin-transform-runtime.md b/docs/plugin-transform-runtime.md
index e71d55d0a..b866e1a6a 100644
--- a/docs/plugin-transform-runtime.md
+++ b/docs/plugin-transform-runtime.md
@@ -5,10 +5,14 @@ title: "@babel/plugin-transform-runtime"
A plugin that enables the re-use of Babel's injected helper code to save on codesize.
+::::babel7
+
:::note
Instance methods such as `"foobar".includes("foo")` will only work with `core-js@3`. If you need to polyfill them, you can directly import `"core-js"` or use `@babel/preset-env`'s `useBuiltIns` option.
:::
+::::
+
## Installation
Install it as development dependency.
@@ -35,10 +39,14 @@ Babel uses very small helpers for common functions such as `_extend`. By default
This is where the `@babel/plugin-transform-runtime` plugin comes in: all of the helpers will reference the module `@babel/runtime` to avoid duplication across your compiled output. The runtime will be compiled into your build.
+::::babel7
+
Another purpose of this transformer is to create a sandboxed environment for your code. If you directly import [core-js](https://github.com/zloirock/core-js) or [@babel/polyfill](polyfill.md) and the built-ins it provides such as `Promise`, `Set` and `Map`, those will pollute the global scope. While this might be ok for an app or a command line tool, it becomes a problem if your code is a library which you intend to publish for others to use or if you can't exactly control the environment in which your code will run.
The transformer will alias these built-ins to `core-js` so you can use them seamlessly without having to require the polyfill.
+::::
+
See the [technical details](#technical-details) section for more information on how this works and the types of transformations that occur.
## Usage
@@ -90,6 +98,21 @@ require("@babel/core").transformSync("code", {
## Options
+
+### `absoluteRuntime`
+
+`boolean` or `string`, defaults to `false`.
+
+This allows users to run `transform-runtime` broadly across a whole project. By default, `transform-runtime` imports from `@babel/runtime/foo` directly, but that only works if `@babel/runtime` is in the `node_modules` of the file that is being compiled. This can be problematic for nested `node_modules`, npm-linked modules, or CLIs that reside outside the user's project, among other cases. To avoid worrying about how the runtime module's location is resolved, this allows users to resolve the runtime once up front, and then insert absolute paths to the runtime into the output code.
+
+Using absolute paths is not desirable if files are compiled for use at a later time, but in contexts where a file is compiled and then immediately consumed, they can be quite helpful.
+
+:::tip
+You can read more about configuring plugin options [here](https://babeljs.io/docs/en/plugins#plugin-options)
+:::
+
+::::babel7
+
### `corejs`
`false`, `2`, `3` or `{ version: 2 | 3, proposals: boolean }`, defaults to `false`.
@@ -118,6 +141,12 @@ This option requires changing the dependency used to provide the necessary runti
| `2` | `npm install --save @babel/runtime-corejs2` |
| `3` | `npm install --save @babel/runtime-corejs3` |
+:::caution
+
+The `corejs` option will be removed in Babel 8. To inject polyfills, you can use [`babel-plugin-polyfill-corejs3`](https://github.com/babel/babel-polyfills/blob/main/packages/babel-plugin-polyfill-corejs3/README.md) or [`babel-plugin-polyfill-corejs2`](https://github.com/babel/babel-polyfills/blob/main/packages/babel-plugin-polyfill-corejs2/README.md) directly.
+
+:::
+
### `helpers`
`boolean`, defaults to `true`.
@@ -126,6 +155,14 @@ Toggles whether or not inlined Babel helpers (`classCallCheck`, `extends`, etc.)
For more information, see [Helper aliasing](#helper-aliasing).
+:::caution
+
+The `helpers` option will be removed in Babel 8, as this plugin will only be used to inject helpers (including `regeneratorRuntime`, which will be handled as any other Babel helper).
+
+:::
+
+::::
+
### `moduleName`
@@ -147,42 +184,22 @@ This option controls which package of helpers `@babel/plugin-transform-runtime`
Note that specifying the [`corejs`](#corejs) option will internally enable the corresponding `babel-plugin-polyfill-corejs*` plugin, thus it has an effect on the final module name.
-### `polyfill`
-
-:::danger
-This option was removed in v7.
-:::
+::::babel7
### `regenerator`
`boolean`, defaults to `true`.
-Toggles whether or not generator functions are transformed to use a regenerator runtime that does not pollute the global scope.
+In older Babel version, this option used to toggles whether or not generator functions were transformed to use a regenerator runtime that does not pollute the global scope.
For more information, see [Regenerator aliasing](#regenerator-aliasing).
-### `useBuiltIns`
-
-:::danger
-This option was removed in v7.
+:::caution
+The `regenerator` option will be removed in Babel 8, as it will not be necessary anymore.
:::
### `useESModules`
-::::babel8
-
-:::danger
-This option was removed in v8.
-:::
-
-::::
-
-::::babel7
-
-:::caution
-This option has been deprecated and will be removed in Babel 8: starting from version `7.13.0`, `@babel/runtime`'s `package.json` uses `"exports"` option to automatically choose between CJS and ESM helpers.
-:::
-
`boolean`, defaults to `false`.
@@ -219,46 +236,59 @@ export default function(instance, Constructor) {
}
```
+:::caution
+The `useESModules` option has been deprecated and will be removed in Babel 8: starting from version `7.13.0`, `@babel/runtime`'s `package.json` uses `"exports"` option to automatically choose between CJS and ESM helpers.
+:::
+
::::
-### `absoluteRuntime`
+### `version`
-`boolean` or `string`, defaults to `false`.
+::::babel7
-This allows users to run `transform-runtime` broadly across a whole project. By default, `transform-runtime` imports from `@babel/runtime/foo` directly, but that only works if `@babel/runtime` is in the `node_modules` of the file that is being compiled. This can be problematic for nested `node_modules`, npm-linked modules, or CLIs that reside outside the user's project, among other cases. To avoid worrying about how the runtime module's location is resolved, this allows users to resolve the runtime once up front, and then insert absolute paths to the runtime into the output code.
+By default transform-runtime assumes that `@babel/runtime@7.0.0` is installed. If you have later versions of
+`@babel/runtime` (or their corejs counterparts e.g. `@babel/runtime-corejs3`) installed or listed as a dependency, transform-runtime can use more advanced features.
-Using absolute paths is not desirable if files are compiled for use at a later time, but in contexts where a file is compiled and then immediately consumed, they can be quite helpful.
+For example if you depend on `@babel/runtime@^7.24.0` you can transpile your code with
-:::tip
-You can read more about configuring plugin options [here](https://babeljs.io/docs/en/plugins#plugin-options)
-:::
+```json title="babel.config.json"
+{
+ "plugins": [
+ ["@babel/plugin-transform-runtime", {
+ "version": "^7.24.0"
+ }]
+ ]
+}
+```
-### `version`
+::::
-By default transform-runtime assumes that `@babel/runtime@7.0.0` is installed. If you have later versions of
+::::babel8
+
+By default transform-runtime assumes that `@babel/runtime@8.0.0` is installed. If you have later versions of
`@babel/runtime` (or their corejs counterparts e.g. `@babel/runtime-corejs3`) installed or listed as a dependency, transform-runtime can use more advanced features.
-For example if you depend on `@babel/runtime-corejs2@7.7.4` you can transpile your code with
+
+For example if you depend on `@babel/runtime@^8.1.0` you can transpile your code with
```json title="babel.config.json"
{
"plugins": [
- [
- "@babel/plugin-transform-runtime",
- {
- "absoluteRuntime": false,
- "corejs": 2,
- "version": "^7.7.4"
- }
- ]
+ ["@babel/plugin-transform-runtime", {
+ "version": "^8.1.0"
+ }]
]
}
```
+::::
+
which results in a smaller bundle size.
## Technical details
+::::babel7
+
The `transform-runtime` transformer plugin does three things:
- Automatically requires `@babel/runtime/regenerator` when you use generators/async functions (toggleable with the `regenerator` option).
@@ -381,6 +411,8 @@ without worrying about where they come from.
### Helper aliasing
+::::
+
Usually Babel will place helpers at the top of your file to do common tasks to avoid
duplicating the code around in the current file. Sometimes these helpers can get a
little bulky and add unnecessary duplication across files. The `runtime`
@@ -425,3 +457,18 @@ var Person = function Person() {
(0, _classCallCheck3.default)(this, Person);
};
```
+
+## Removed options
+
+:::babel8
+
+The following options were removed in Babel 8.0.0:
+- `corejs`
+- `helpers`
+- `regenerator`
+
+:::
+
+The following options were removed in Babel 7.0.0:
+- `useBuiltIns`
+- `polyfill`
diff --git a/docs/plugin-transform-typescript.md b/docs/plugin-transform-typescript.md
index 6a8111118..35abf8095 100644
--- a/docs/plugin-transform-typescript.md
+++ b/docs/plugin-transform-typescript.md
@@ -116,7 +116,7 @@ Forcibly enables `jsx` parsing. Otherwise angle brackets will be treated as Type
### `jsxPragma`
-`string`, defaults to `React`
+`string`, defaults to `React.createElement`
Replace the function used when compiling JSX expressions. This is so that we know that the import is not a type import, and should not be removed.
diff --git a/docs/plugin-transform-unicode-property-regex.md b/docs/plugin-transform-unicode-property-regex.md
index 6ae8bf6c4..41322b416 100644
--- a/docs/plugin-transform-unicode-property-regex.md
+++ b/docs/plugin-transform-unicode-property-regex.md
@@ -8,6 +8,8 @@ sidebar_label: unicode-property-regex
This plugin is included in `@babel/preset-env`, in [ES2018](https://github.com/tc39/proposals/blob/master/finished-proposals.md)
:::
+This plugin transforms regular expression _literals_ to support the `\p{...}` escapes. It does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
[Here’s an online demo.](https://mothereff.in/regexpu#input=var+regex+%3D+/%5Cp%7BScript_Extensions%3DGreek%7D/u%3B&unicodePropertyEscape=1)
## Installation
diff --git a/docs/plugin-transform-unicode-regex.md b/docs/plugin-transform-unicode-regex.md
index 949337ce2..a1a20f2cc 100644
--- a/docs/plugin-transform-unicode-regex.md
+++ b/docs/plugin-transform-unicode-regex.md
@@ -8,6 +8,8 @@ sidebar_label: unicode-regex
This plugin is included in `@babel/preset-env`
:::
+This plugin transforms regular expression _literals_ to support the `/u` flag. It does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
## Example
**In**
diff --git a/docs/plugin-transform-unicode-sets-regex.md b/docs/plugin-transform-unicode-sets-regex.md
index f0c20856e..60257c035 100644
--- a/docs/plugin-transform-unicode-sets-regex.md
+++ b/docs/plugin-transform-unicode-sets-regex.md
@@ -10,23 +10,27 @@ This plugin is included in `@babel/preset-env`, in [ES2024](https://github.com/t
This plugin transforms regular expressions using the `v` flag, introduced by the [RegExp set notation + properties of strings](https://github.com/tc39/proposal-regexp-set-notation) proposal, to regular expressions that use the `u` flag.
+It only transforms `/.../v` syntax and it does not patch the `new RegExp` constructor, since its arguments cannot be pre-transformed statically: to handle runtime behavior of functions/classes, you will need to use a polyfill instead.
+
## Example
### Intersection
+
```js title="input.js"
-/[\p{ASCII}&&\p{Decimal_Number}]/v
+/[\p{ASCII}&&\p{Decimal_Number}]/v;
```
will be transformed to
```js title="output.js"
-/[0-9]/u
+/[0-9]/u;
```
### Difference
+
```js title="input.js"
// Non-ASCII white spaces
-/[\p{White_Space}--\p{ASCII}]/v
+/[\p{White_Space}--\p{ASCII}]/v;
```
will be transformed to
@@ -36,6 +40,7 @@ will be transformed to
```
### Property of Strings
+
```js title="input.js"
/^\p{Emoji_Keycap_Sequence}$/v.test("*\uFE0F\u20E3");
// true
@@ -49,9 +54,10 @@ will be transformed to
```
Here is [a list of supported properties](https://github.com/tc39/proposal-regexp-unicode-sequence-properties#proposed-solution). Note that using property of strings with `u`-flag will error.
+
```js title="input.js"
// highlight-error-next-line
-/\p{Emoji_Keycap_Sequence}/u
+/\p{Emoji_Keycap_Sequence}/u;
// Error: Properties of strings are only supported when using the unicodeSets (v) flag.
```
diff --git a/docs/plugins-list.md b/docs/plugins-list.md
index 5f530b06a..8cb656b46 100644
--- a/docs/plugins-list.md
+++ b/docs/plugins-list.md
@@ -11,7 +11,6 @@ sidebar_label: 插件列表
#### Stage 3
- [decorators](plugin-proposal-decorators.md)
-- [duplicate-named-capturing-groups-regex](plugin-proposal-duplicate-named-capturing-groups-regex.md)
- [json-modules](plugin-proposal-json-modules.md)
- [import-wasm-source](plugin-proposal-import-wasm-source.md)
- [regexp-modifiers](plugin-proposal-regexp-modifiers.md)
@@ -27,6 +26,10 @@ sidebar_label: 插件列表
- [throw-expressions](plugin-proposal-throw-expressions.md)
- [record-and-tuple](plugin-proposal-record-and-tuple.md)
+### ES2025
+
+- [duplicate-named-capturing-groups-regex](plugin-proposal-duplicate-named-capturing-groups-regex.md)
+
### ES2024
- [unicode-sets-regex](plugin-transform-unicode-sets-regex.md)
@@ -37,7 +40,6 @@ sidebar_label: 插件列表
- [class-static-block](plugin-transform-class-static-block.md)
- [private-property-in-object](plugin-transform-private-property-in-object.md)
- [private-methods](plugin-transform-private-methods.md)
-- [syntax-top-level-await](plugin-syntax-top-level-await.md)
### ES2021
@@ -46,12 +48,10 @@ sidebar_label: 插件列表
### ES2020
+- [dynamic-import](plugin-transform-dynamic-import.md)
- [export-namespace-from](plugin-transform-export-namespace-from.md)
- [nullish-coalescing-operator](plugin-transform-nullish-coalescing-operator.md)
- [optional-chaining](plugin-transform-optional-chaining.md)
-- [syntax-dynamic-import](plugin-syntax-dynamic-import.md)
-- [syntax-import-meta](plugin-syntax-import-meta.md)
-- [syntax-bigint](plugin-syntax-bigint.md)
### ES2019
diff --git a/docs/preset-env.md b/docs/preset-env.md
index 75d3fcef4..2c21bc2a8 100644
--- a/docs/preset-env.md
+++ b/docs/preset-env.md
@@ -487,15 +487,15 @@ The following are currently supported:
**Features**
-- [Class static block](https://github.com/tc39/proposal-class-static-block)
-- [Import assertions](https://github.com/tc39/proposal-import-assertions) (parsing only)
-- [Private field brand checks](https://github.com/tc39/proposal-private-fields-in-in)
+- [Import attributes](https://github.com/tc39/proposal-import-attributes) (parsing only)
**Materialized Features**
These features were behind `shippedProposals` flag in older Babel versions. They are now generally available.
- [class properties](https://github.com/tc39/proposal-class-fields)
+- [Class static block](https://github.com/tc39/proposal-class-static-block)
- [numeric separator](https://github.com/tc39/proposal-numeric-separator)
+- [Private field brand checks](https://github.com/tc39/proposal-private-fields-in-in)
- [private methods](https://github.com/tc39/proposal-private-methods)
> You can read more about configuring preset options [here](https://babeljs.io/docs/en/presets#preset-options)
diff --git a/docs/preset-react.md b/docs/preset-react.md
index 320829d13..748594af6 100644
--- a/docs/preset-react.md
+++ b/docs/preset-react.md
@@ -22,7 +22,11 @@ title: "@babel/preset-react"
## 安装
+<<<<<<< HEAD
> 您可以查看 React [开始页面](https://facebook.github.io/react/docs/hello-world.html)
+=======
+> You can also check out the React [Getting Started page](https://react.dev/learn/installation)
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
```shell npm2yarn
npm install --save-dev @babel/preset-react
@@ -176,7 +180,7 @@ Replace the function used when compiling JSX expressions. It should be a qualifi
Replace the component used when compiling JSX fragments. It should be a valid JSX tag name.
-:::babel7
+::::babel7
#### `useBuiltIns`
@@ -200,7 +204,7 @@ This option will be removed in Babel 8. Set `useSpread` to `true` if you are tar
When spreading props, use inline object with spread elements directly instead of Babel's extend helper or `Object.assign`.
-:::
+::::
### babel.config.js
diff --git a/docs/preset-typescript.md b/docs/preset-typescript.md
index b2ce2a5a2..93bb8901e 100644
--- a/docs/preset-typescript.md
+++ b/docs/preset-typescript.md
@@ -205,7 +205,7 @@ Added in: `v7.23.0`
When set to `true`, Babel will rewrite `.ts`/`.mts`/`.cts` extensions in import declarations to `.js`/`.mjs`/`.cjs`.
-This option, when used together with TypeScript's [`allowImportingTsExtension`](https://www.typescriptlang.org/tsconfig#allowImportingTsExtensions) option, allows to write complete relative specifiers in import declaratoinss while using the same extension used by the source files.
+This option, when used together with TypeScript's [`allowImportingTsExtension`](https://www.typescriptlang.org/tsconfig#allowImportingTsExtensions) option, allows to write complete relative specifiers in import declarations while using the same extension used by the source files.
As an example, given this project structure (where `src` contains the source files, and `dist` the compiled files):
```
diff --git a/docs/types.md b/docs/types.md
index 118a30256..e1f59ccc7 100644
--- a/docs/types.md
+++ b/docs/types.md
@@ -290,8 +290,8 @@ See also `t.isCallExpression(node, opts)` and `t.assertCallExpression(node, opts
AST Node `CallExpression` shape:
- `callee`: `Expression | Super | V8IntrinsicIdentifier` (required)
-- `arguments`: `Array` (required)
-- `optional`: `true | false` (default: `null`, excluded from builder function)
+- `arguments`: `Array` (required)
+- `optional`: `boolean` (default: `null`, excluded from builder function)
- `typeArguments`: `TypeParameterInstantiation` (default: `null`, excluded from builder function)
- `typeParameters`: `TSTypeParameterInstantiation` (default: `null`, excluded from builder function)
@@ -1856,7 +1856,7 @@ AST Node `MemberExpression` shape:
- `object`: `Expression | Super` (required)
- `property`: if computed then `Expression` else `Identifier` (required)
- `computed`: `boolean` (default: `false`)
-- `optional`: `true | false` (default: `null`)
+- `optional`: `boolean` (default: `null`)
Aliases: [`Standardized`](#standardized), [`Expression`](#expression), [`LVal`](#lval)
@@ -1915,8 +1915,8 @@ See also `t.isNewExpression(node, opts)` and `t.assertNewExpression(node, opts)`
AST Node `NewExpression` shape:
- `callee`: `Expression | Super | V8IntrinsicIdentifier` (required)
-- `arguments`: `Array` (required)
-- `optional`: `true | false` (default: `null`, excluded from builder function)
+- `arguments`: `Array` (required)
+- `optional`: `boolean` (default: `null`, excluded from builder function)
- `typeArguments`: `TypeParameterInstantiation` (default: `null`, excluded from builder function)
- `typeParameters`: `TSTypeParameterInstantiation` (default: `null`, excluded from builder function)
@@ -2232,7 +2232,7 @@ See also `t.isOptionalCallExpression(node, opts)` and `t.assertOptionalCallExpre
AST Node `OptionalCallExpression` shape:
- `callee`: `Expression` (required)
-- `arguments`: `Array` (required)
+- `arguments`: `Array` (required)
- `optional`: `boolean` (required)
- `typeArguments`: `TypeParameterInstantiation` (default: `null`, excluded from builder function)
- `typeParameters`: `TSTypeParameterInstantiation` (default: `null`, excluded from builder function)
diff --git a/docs/v8-migration-api.md b/docs/v8-migration-api.md
index 73845fb16..49600228f 100644
--- a/docs/v8-migration-api.md
+++ b/docs/v8-migration-api.md
@@ -33,7 +33,7 @@ Check out the [v8-migration guide](v8-migration.md) for other user-level changes
// AST in Babel 8
{
type: "ImportExpression",
- source: StringLitera("foo"),
+ source: StringLiteral("foo"),
options: Identifier("options")
}
```
@@ -77,6 +77,39 @@ Check out the [v8-migration guide](v8-migration.md) for other user-level changes
- For `node.parameters` in Babel 7, use `node.params` in Babel 8
- For `node.typeAnnotation` in Babel 7, use `node.returnType` in Babel 8
+![medium](https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg)
+
+- Split `typeParameter` of `TSMappedType` ([#16733](https://github.com/babel/babel/pull/16733)).
+
+ For a `TSMappedType` node, the `typeParameter` attribute is split into `key` and `constraint` attributes.
+ This is to align the AST for TS nodes with `@typescript-eslint`.
+
+ ```ts
+ // Example input
+ let map1: { [P in string]: number; };
+
+ // AST in Babel 7
+ {
+ type: "TSMappedType",
+ typeParameter: {
+ type: "TypeParameter",
+ name: Identifier("P"),
+ constraint: TSStringKeyword()
+ },
+ typeAnnotation: TSNumberKeyword(),
+ }
+
+ // AST in Babel 8
+ {
+ type: "TSMappedType",
+ key: Identifier("P"),
+ constraint: TSStringKeyword()
+ typeAnnotation: TSNumberKeyword(),
+ }
+ ```
+
+ __Migration__: If you have a customized plugin accessing `typeParameter` of a `TSMappedType` node, use `node.key` and `node.constraint` in Babel 8.
+
![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
- Don't generate `TSParenthesizedType` unless `createParenthesizedExpression` is enabled([#9546](https://github.com/babel/babel/issues/9546), [#12608](https://github.com/babel/babel/pull/12608))
@@ -284,8 +317,37 @@ Check out the [v8-migration guide](v8-migration.md) for other user-level changes
**Migration**: Adapt to the new token design. If you want to restore to the Babel 7 behaviour, manually transform them to the Babel 7 tokens ([example](https://github.com/babel/babel/blob/7e60a93897f9a134506251ea51269faf4d02a86c/packages/babel-parser/src/parser/statement.ts#L116-L188)).
+- Remove `extra.shorthand` from `ObjectProperty` nodes ([#16521](https://github.com/babel/babel/pull/16521))
+
+ **Migration**: Use `node.shorthand` rather than `node.extra.shorthand`.
+
### `@babel/traverse`
+![medium](https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg)
+
+- Remove some `NodePath` methods ([#16655](https://github.com/babel/babel/pull/16655))
+
+ __Migration__:
+ `hoist`, `updateSiblingKeys`, `call`, `setScope`, `resync`, `popContext`, `pushContext`, `setup`, `setKey`
+ These methods are meant to be private so there is no real migration approach. But if your plugin / build is broken by this change, feel free to open an issue and tell us how you use these methods and we can see what we can do after Babel 8 is released.
+
+ `is`, `isnt`, `has`, `equals`
+ Access `path.node` instead.
+ ```diff
+ - functionExpressionPath.equals("id", idNode)
+ + functionExpressionPath.node.id === idNode
+
+ - functionExpressionPath.is("id")
+ - functionExpressionPath.has("id")
+ + functionExpressionPath.node.id
+
+ - functionExpressionPath.has("arguments")
+ + !!functionExpressionPath.node.arguments.length
+
+ - functionExpressionPath.isnt("async")
+ + !functionExpressionPath.node.async
+ ```
+
![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
- Remove `block` argument from `Scope#rename` ([#15288](https://github.com/babel/babel/pull/15288))
@@ -303,6 +365,33 @@ Check out the [v8-migration guide](v8-migration.md) for other user-level changes
__Migration__: Adapt to the new behaviour. You can use `NodePath#shouldSkip` to check whether a NodePath has been skipped before calling `NodePath#requeue()`.
+- Remove methods starting with `_` ([#16504](https://github.com/babel/babel/pull/16504))
+
+ ```
+ _assertUnremoved
+ _call
+ _callRemovalHooks
+ _containerInsert
+ _containerInsertAfter
+ _containerInsertBefore
+ _getKey
+ _getPattern
+ _getQueueContexts
+ _getTypeAnnotation
+ _markRemoved
+ _remove
+ _removeFromScope
+ _replaceWith
+ _resolve
+ _resyncKey
+ _resyncList
+ _resyncParent
+ _resyncRemoved
+ _verifyNodeList
+ ```
+
+ __Migration__: These methods are meant to be private so there is no real migration approach. But if your plugin / build is broken by this change, feel free to open an issue and tell us how you use these methods and we can see what we can do after Babel 8 is released.
+
### `@babel/compat-data`
![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
diff --git a/docs/v8-migration.md b/docs/v8-migration.md
index bc751c055..cb5ce403a 100644
--- a/docs/v8-migration.md
+++ b/docs/v8-migration.md
@@ -13,9 +13,9 @@ Refer users to this document when upgrading to Babel 8 from Babel 7. If you are
### Node.js support
-All Babel 8 packages require Node.js `^16.20.0 || ^18.16.0 || >=20.0.0`.
+All Babel 8 packages require Node.js `^18.20.0 || ^20.17.0 || >=22.8.0`.
-We highly encourage you to use a newer version of Node.js (LTS v18) since the previous versions are not maintained.
+We highly encourage you to use a newer version of Node.js (LTS v20) since the previous versions are not maintained.
See [nodejs/Release](https://github.com/nodejs/Release) for more information.
This just means Babel _itself_ won't run on older versions of Node. It can still _output_ code that runs on old Node versions.
@@ -105,6 +105,9 @@ The following syntax plugins are no longer needed, you can safely remove them fr
- `@babel/plugin-syntax-trailing-function-commas`
- `@babel/plugin-syntax-unicode-sets-regex`
+The following plugins are discontinued and their functionality is not available anymore:
+- `@babel/plugin-syntax-import-assertions`. Use `@babel/plugin-syntax-import-attributes` instead, and see the [`@babel/parser`](#configuration-change-parser) section for more information.
+
## Configuration Changes
### `@babel/core` {#configuration-change-preset-core}
@@ -176,7 +179,7 @@ The following syntax plugins are no longer needed, you can safely remove them fr
- Remove `useSpread` and `useBuiltIns` options ([#12593](https://github.com/babel/babel/pull/12593))
**Migration**: Babel 8 always compiles JSX spread elements to object spread:
- ```jsx title=input.jsx
+ ```jsx title="input.jsx"
// transforms to
jsx("div", { ...props })
@@ -305,12 +308,35 @@ The following syntax plugins are no longer needed, you can safely remove them fr
### `@babel/parser` {#configuration-change-parser}
-![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
+![medium](https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg)
- Remove `estree` plugin option `classFeatures` ([#13752](https://github.com/babel/babel/pull/13752))
**Migration**: Remove the option from your config, since it's now enabled by default. Previously the `classFeatures` plugin enables `@babel/parser` to produce class properties AST compatible with ESLint 8, following the ESTree specification. In Babel 8 the `eslint-parser` only works with ESLint 8 and above.
+ - Remove `decimal` plugin option [#16741](https://github.com/babel/babel/pull/16741)
+
+ **Migration**: Migrate your project to the latest proposal and remove the plugin from your config since the latest proposal doesn't have syntax anymore.
+
+ ```diff title="example.js"
+ - 1.03m
+ + new Decimal("1.03")
+ - decimal1 + decimal2
+ + decimal1.add(decimal2)
+ ```
+
+- Remove `importAssertions` parser plugin ([#16770](https://github.com/babel/babel/pull/16770))
+
+ This plugin was for an old version of the import attributes proposal, using the `assert` keyword instead of `with`. The proposal moved ahead without the `assert` keyword.
+
+ **Migration**: Replace the plugin with `importAttributes`. If you are still using the `assert` keyword it's recommended that you migrate to `with`: if it's not possible to do so, you can use the `["importAttributes", { deprecatedAssertSyntax: true }]` option.`
+
+- Remove `importReflection` parser plugin ([#16808](https://github.com/babel/babel/pull/16808))
+
+ The "import reflection" proposal does not exist anymore, and it was superseeded by the "source phase imports" proposal, which uses the `source` modifier for imports instead of `module`.
+
+ **Migration**: Replace the plugin with `sourcePhaseImports`, and migrate your code to use `source` instead of `module` in import declarations.
+
### `@babel/generator` {#configuration-change-generator}
![medium](https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg)
@@ -403,12 +429,22 @@ The following syntax plugins are no longer needed, you can safely remove them fr
### `@babel/plugin-transform-runtime`
+![medium](https://img.shields.io/badge/risk%20of%20breakage%3F-medium-yellow.svg)
+
+- The `corejs` option has been removed ([#16311](https://github.com/babel/babel/pull/16311))
+
+ **Migration**: To inject polyfills, you can use [`babel-plugin-polyfill-corejs3`](https://github.com/babel/babel-polyfills/blob/main/packages/babel-plugin-polyfill-corejs3/README.md) or [babel-plugin-polyfill-corejs2](https://github.com/babel/babel-polyfills/blob/main/packages/babel-plugin-polyfill-corejs2/README.md) directly.
+
![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
- The `useESModules` option has been removed ([#16141](https://github.com/babel/babel/pull/16141))
**Migration**: Delete it from your configuration. `@babel/runtime` will now automatically expose ES modules when needed, using `package.json#exports`.
+- The `runtime` and `helpers` options have been removed ([#16311](https://github.com/babel/babel/pull/16311))
+
+ **Migration**: Delete them from your configuration: `@babel/runtime` will now always import helpers. If you don't want to inject imports to helpers, remove `@babel/plugin-transform-runtime` from your config.
+
### `@babel/node`
![low](https://img.shields.io/badge/risk%20of%20breakage%3F-low-yellowgreen.svg)
@@ -416,6 +452,8 @@ The following syntax plugins are no longer needed, you can safely remove them fr
- The `-gc` and `-d` command-line flags have been removed ([#15956](https://github.com/babel/babel/pull/15956))
**Migration**: Use the `--expose-gc` and `--inspect` Node.js flags respectively. Note that although `-d` was short for `--debug`, the latter has been [deprecated since Node.js 7.7.0](https://nodejs.org/en/docs/guides/debugging-getting-started#legacy-debugger).
+- Command-line flags for Node.js and Babel must now be passed _before_ the filename, while flags for the script itself must be passed after. ([#16706](https://github.com/babel/babel/pull/16706))
+
## Compilation Changes
### Default target
@@ -455,7 +493,7 @@ The following syntax plugins are no longer needed, you can safely remove them fr
- [Disallow sequence expressions inside JSX attributes](https://github.com/babel/babel/issues/8604) ([#12447](https://github.com/babel/babel/pull/12447))
**Migration**: Find and replace the following code patterns. You can start the migration prior to Babel 8:
- ```diff title=input.jsx
+ ```diff title="input.jsx"
- // Invalid
+ // Valid
```
@@ -463,7 +501,7 @@ The following syntax plugins are no longer needed, you can safely remove them fr
- [Disallow `{`, `}`, `<` and `>` in JSX text](https://github.com/babel/babel/issues/11042) ([#12451](https://github.com/babel/babel/pull/12451))
**Migration**: Use `{'{'}`, `{'}'}`, `{'<'}` and `{'>'}` instead. Find and replace the following code patterns. You can start the migration prior to Babel 8:
- ```diff title=input.jsx
+ ```diff title="input.jsx"
-
">" is greater than.
+
"{'>'}" is greater than.
```
@@ -477,7 +515,7 @@ The following syntax plugins are no longer needed, you can safely remove them fr
**Migration**:
Use the new `declare` syntax, introduced in TypeScript 3.7, if you don't want fields to be initialized to `undefined`:
- ```ts title=input.ts
+ ```ts title="input.ts"
class A {
foo: string | void; // initialized to undefined
declare bar: number; // type-only, will be removed
@@ -492,7 +530,7 @@ The following syntax plugins are no longer needed, you can safely remove them fr
**Migration**:
Use the new `declare` syntax, introduced in Flow 0.120, if you don't want fields to be initialized to `undefined`:
- ```flow title=input.js
+ ```flow title="input.js"
class A {
foo: string | void; // initialized to undefined
declare bar: number; // type-only, will be removed
diff --git a/js/repl/CircleCI.ts b/js/repl/CircleCI.ts
index f542dcdb8..57e25c197 100644
--- a/js/repl/CircleCI.ts
+++ b/js/repl/CircleCI.ts
@@ -1,11 +1,7 @@
import fetch from "unfetch";
-async function sendRequest(
- repo: string | undefined | null,
- uri: string
-): Promise {
- const urlRepo = repo && repo.length ? repo : "babel/babel";
- const fullURL = `https://circleci.com/api/v1.1/project/github/${urlRepo}/${uri}`;
+async function sendRequest(uri: string): Promise {
+ const fullURL = `/circleci/api/${uri}`;
let response;
try {
response = await fetch(fullURL).then((res) => res.json());
@@ -21,14 +17,11 @@ async function sendRequest(
}
export async function loadBuildArtifacts(
- repo: string | undefined | null,
regExp: RegExp,
- build: number | string,
- // eslint-disable-line no-unused-vars
- cb: (url: string, error?: string) => Promise
+ build: number | string
): Promise {
try {
- const response = await sendRequest(repo, `${build}/artifacts`);
+ const response = await sendRequest(`${build}/artifacts`);
const artifacts = response.filter((x) => regExp.test(x.path));
if (!artifacts || artifacts.length === 0) {
throw new Error(
@@ -42,14 +35,12 @@ export async function loadBuildArtifacts(
}
export async function loadLatestBuildNumberForBranch(
- repo: string | undefined | null,
branch: string,
jobName: string,
limit: number = 30
): Promise {
try {
const response = await sendRequest(
- repo,
`tree/${branch}?limit=${limit}&filter=successful`
);
if (!response) throw new Error("No builds found");
diff --git a/js/repl/PluginConfig.ts b/js/repl/PluginConfig.ts
index 5e4feac97..940951d04 100644
--- a/js/repl/PluginConfig.ts
+++ b/js/repl/PluginConfig.ts
@@ -93,7 +93,6 @@ const replDefaults: ReplState = {
builtIns: false,
spec: false,
loose: false,
- circleciRepo: "",
code: "",
debug: false,
evaluate: false,
diff --git a/js/repl/Repl.tsx b/js/repl/Repl.tsx
index 6ec7e9079..ffdf20e83 100644
--- a/js/repl/Repl.tsx
+++ b/js/repl/Repl.tsx
@@ -653,7 +653,6 @@ class Repl extends React.Component {
corejs: envConfig.corejs,
spec: envConfig.isSpecEnabled,
loose: envConfig.isLooseEnabled,
- circleciRepo: state.babel.circleciRepo,
code: state.code,
debug: state.debugEnvPreset,
modules: envConfig.modules,
diff --git a/js/repl/UriUtils.ts b/js/repl/UriUtils.ts
index b989985d4..37da34cb6 100644
--- a/js/repl/UriUtils.ts
+++ b/js/repl/UriUtils.ts
@@ -14,7 +14,6 @@ const URL_KEYS = [
"forceAllTransforms",
"modules",
"shippedProposals",
- "circleciRepo",
"evaluate",
"fileSize",
"timeTravel",
diff --git a/js/repl/loadBundle.ts b/js/repl/loadBundle.ts
index fe60f3983..a4f6092da 100644
--- a/js/repl/loadBundle.ts
+++ b/js/repl/loadBundle.ts
@@ -62,18 +62,12 @@ export default async function loadBundle(
// to main, we map /build/7.0 and /build/master to
// /build/main for backwards compatibility.
build = await loadLatestBuildNumberForBranch(
- state.circleciRepo,
build === "7.0" || build === "master" ? "main" : build,
"build-standalone"
);
}
const regExp = new RegExp(`${packageName}/${packageFile}$`);
- const url = await loadBuildArtifacts(
- state.circleciRepo,
- regExp,
- build,
- doLoad
- );
+ const url = await loadBuildArtifacts(regExp, build);
return doLoad(url);
} catch (ex) {
return doLoad(null, ex.message);
diff --git a/js/repl/past-versions.json b/js/repl/past-versions.json
index 7352befe1..255288f09 100644
--- a/js/repl/past-versions.json
+++ b/js/repl/past-versions.json
@@ -1,5 +1,8 @@
[
- "8.0.0-alpha.2",
+ "8.0.0-alpha.12",
+ "7.24.10",
+ "7.23.10",
+ "7.22.20",
"7.21.9",
"7.20.15",
"7.19.6",
diff --git a/js/repl/replUtils.ts b/js/repl/replUtils.ts
index 420b70754..062a80a47 100644
--- a/js/repl/replUtils.ts
+++ b/js/repl/replUtils.ts
@@ -66,7 +66,6 @@ export const persistedStateToBabelState = (
): BabelState => ({
availablePresets: [],
build: persistedState.build,
- circleciRepo: persistedState.circleciRepo,
didError: false,
isLoaded: false,
isLoading: true,
diff --git a/js/repl/types.ts b/js/repl/types.ts
index 6796de14d..1f18be6ed 100644
--- a/js/repl/types.ts
+++ b/js/repl/types.ts
@@ -75,7 +75,6 @@ export type BabelState = LazyLoadedState & {
availablePresets: Array;
build: any;
errorMessage?: string;
- circleciRepo: string;
config: PluginConfig;
version: any;
};
@@ -84,7 +83,6 @@ export type EnvState = LazyLoadedState & {
availablePresets: Array;
build: number;
errorMessage?: string;
- circleciRepo: string;
config: PluginConfig;
version: any;
isEnabled: boolean;
@@ -129,7 +127,6 @@ export type ReplState = {
corejs?: string | false;
spec: boolean;
loose: boolean;
- circleciRepo: string;
code: string;
debug: boolean;
evaluate: boolean;
diff --git a/package.json b/package.json
index a7aaccf8b..30b23f085 100644
--- a/package.json
+++ b/package.json
@@ -39,11 +39,11 @@
"author": "",
"license": "MIT",
"devDependencies": {
- "@babel/core": "8.0.0-alpha.2",
- "@babel/eslint-parser": "8.0.0-alpha.2",
- "@babel/preset-env": "8.0.0-alpha.2",
- "@babel/preset-react": "8.0.0-alpha.2",
- "@babel/preset-typescript": "8.0.0-alpha.2",
+ "@babel/core": "^8.0.0-alpha.12",
+ "@babel/eslint-parser": "^8.0.0-alpha.12",
+ "@babel/preset-env": "^8.0.0-alpha.12",
+ "@babel/preset-react": "^8.0.0-alpha.12",
+ "@babel/preset-typescript": "^8.0.0-alpha.12",
"@codemirror/lang-javascript": "6.2.1",
"@codemirror/theme-one-dark": "6.1.2",
"@emotion/babel-plugin": "^11.11.0",
@@ -52,7 +52,7 @@
"@types/react": "^17.0.2",
"@typescript-eslint/eslint-plugin": "^6.3.0",
"@typescript-eslint/parser": "^6.3.0",
- "babel-loader": "^9.1.3",
+ "babel-loader": "^9.2.1",
"codemirror": "6.0.1",
"cross-env": "^7.0.3",
"eslint": "^8.47.0",
@@ -76,13 +76,13 @@
"rollup": "^3.28.0",
"terser-webpack-plugin": "^5.3.9",
"typescript": "^5.1.6",
- "webpack": "^5.88.2",
+ "webpack": "^5.94.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1",
"worker-loader": "^3.0.8"
},
"dependencies": {
- "@babel/generator": "8.0.0-alpha.2",
+ "@babel/generator": "^8.0.0-alpha.12",
"@emotion/css": "^11.10.6",
"algoliasearch": "^4.12.0",
"buffer": "^5.7.1",
diff --git a/website/blog/2015-01-12-6to5-esnext.md b/website/blog/2015-01-12-6to5-esnext.md
index 7037a1c91..e6c2d5220 100644
--- a/website/blog/2015-01-12-6to5-esnext.md
+++ b/website/blog/2015-01-12-6to5-esnext.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6to5 + esnext"
-author: James Kyle
-authorURL: https://twitter.com/thejameskyle
+authors: james_kyle
date: 2015-01-12 10:40:00
categories: announcements
share_text: "6to5 + esnext: Joining Forces"
diff --git a/website/blog/2015-01-27-2to3.md b/website/blog/2015-01-27-2to3.md
index c9b98b32d..eb5fb85e8 100644
--- a/website/blog/2015-01-27-2to3.md
+++ b/website/blog/2015-01-27-2to3.md
@@ -1,8 +1,7 @@
---
layout: post
title: "2to3"
-author: James Kyle
-authorURL: https://twitter.com/thejameskyle
+authors: james_kyle
date: 2015-01-27 11:40:00
categories: announcements
share_text: "6to5: 2to3"
diff --git a/website/blog/2015-02-15-not-born-to-die.md b/website/blog/2015-02-15-not-born-to-die.md
index 0cf805773..c27146663 100644
--- a/website/blog/2015-02-15-not-born-to-die.md
+++ b/website/blog/2015-02-15-not-born-to-die.md
@@ -1,8 +1,13 @@
---
layout: post
+<<<<<<< HEAD
title: "并非出生而逐渐走向灭亡"
author: James Kyle
authorURL: https://twitter.com/thejameskyle
+=======
+title: "Not Born to Die"
+authors: james_kyle
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
date: 2015-02-15 9:18:00
categories: announcements
share_text: "Not Born to Die: 6to5 has been renamed to Babel"
diff --git a/website/blog/2015-02-23-babel-loves-react.md b/website/blog/2015-02-23-babel-loves-react.md
index 7ccf1f3c2..561684594 100644
--- a/website/blog/2015-02-23-babel-loves-react.md
+++ b/website/blog/2015-02-23-babel-loves-react.md
@@ -1,8 +1,13 @@
---
layout: post
+<<<<<<< HEAD
title: "Babel 喜爱 React"
author: James Kyle
authorURL: https://twitter.com/thejameskyle
+=======
+title: "Babel <3 React"
+authors: james_kyle
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
date: 2015-02-23 10:00:00
categories: announcements
share_text: "Babel <3 React"
diff --git a/website/blog/2015-03-31-5.0.0.md b/website/blog/2015-03-31-5.0.0.md
index 72d6dd5a0..1035718b7 100644
--- a/website/blog/2015-03-31-5.0.0.md
+++ b/website/blog/2015-03-31-5.0.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "5.0.0 Released"
-author: Sebastian McKenzie
-authorURL: https://twitter.com/sebmck
+authors: sebastian
date: 2015-03-31 10:00:00
categories: announcements
share_text: "5.0.0 Released"
diff --git a/website/blog/2015-05-14-function-bind.md b/website/blog/2015-05-14-function-bind.md
index 3321424dd..1051cf2b5 100644
--- a/website/blog/2015-05-14-function-bind.md
+++ b/website/blog/2015-05-14-function-bind.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Function Bind Syntax"
-author: James Kyle
-authorURL: https://twitter.com/thejameskyle
+authors: james_kyle
date: 2015-05-14 19:30:00
categories: announcements
share_text: "New in Babel 5.4: Function Bind Syntax"
@@ -47,7 +46,7 @@ _val = takeWhile.call(_val, x => x.strength > 100);
_val = forEach.call(_val, x => console.log(x));
```
-> **Note:** Babel's [output](/repl/#?experimental=true&evaluate=false&loose=false&spec=false&playground=false&code=import%20%7B%20map%2C%20takeWhile%2C%20forEach%20%7D%20from%20%22iterlib%22%3B%0A%0AgetPlayers()%0A%3A%3Amap(x%20%3D%3E%20x.character())%0A%3A%3AtakeWhile(x%20%3D%3E%20x.strength%20%3E%20100)%0A%3A%3AforEach(x%20%3D%3E%20console.log(x))%3B)
+> **Note:** Babel's [output](https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=JYWwDg9gTgLgBAbziAhmANHGKDWBTAdQAtgAbPTAM2gFEUBjIuAXzkqghDgCJgY8opYACNuAbgBQEgOZ4YABVIoAngIDOACgCUEgFy7UYDQA84AXgB8cYwDpGKKA35RtO_dnzEyeE-au21GCg8ADtpGCYrAEYABhi3XWooOkZfSzh6CBC1CHIbUghpEy0tMSA&debug=false&forceAllTransforms=false&modules=false&shippedProposals=false&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Creact%2Cstage-2&prettier=false&targets=&version=7.25.6&externalPlugins=%40babel%2Fplugin-proposal-function-bind%407.24.7&assumptions=%7B%7D)
> looks different than this in order to be more concise.
Using a jquery-like library of virtual methods:
diff --git a/website/blog/2015-07-07-react-on-es6-plus.md b/website/blog/2015-07-07-react-on-es6-plus.md
index 949fc0e65..2d1b26c1e 100644
--- a/website/blog/2015-07-07-react-on-es6-plus.md
+++ b/website/blog/2015-07-07-react-on-es6-plus.md
@@ -1,8 +1,7 @@
---
layout: post
title: "React on ES6+"
-author: Steven Luscher
-authorURL: https://twitter.com/steveluscher
+authors: steven_luscher
date: 2015-06-07 17:00:00
categories: announcements
share_text: "React on ES6+"
diff --git a/website/blog/2015-10-29-6.0.0.md b/website/blog/2015-10-29-6.0.0.md
index 9027991a4..1baf1331d 100644
--- a/website/blog/2015-10-29-6.0.0.md
+++ b/website/blog/2015-10-29-6.0.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.0.0 Released"
-author: James Kyle
-authorURL: https://twitter.com/thejameskyle
+authors: james_kyle
date: 2015-10-29 17:00:00
categories: announcements
share_text: "6.0.0"
diff --git a/website/blog/2015-10-31-setting-up-babel-6.md b/website/blog/2015-10-31-setting-up-babel-6.md
index d1b1186bf..e4e64d512 100644
--- a/website/blog/2015-10-31-setting-up-babel-6.md
+++ b/website/blog/2015-10-31-setting-up-babel-6.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Setting up Babel 6"
-author: James Kyle
-authorURL: https://twitter.com/thejameskyle
+authors: james_kyle
date: 2015-10-31 17:30:00
categories: announcements
share_text: "Setting up Babel 6"
diff --git a/website/blog/2015-11-03-babel-doctor.md b/website/blog/2015-11-03-babel-doctor.md
index 8bf8a55f0..3922a2bcc 100644
--- a/website/blog/2015-11-03-babel-doctor.md
+++ b/website/blog/2015-11-03-babel-doctor.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Babel Doctor"
-author: Sebastian McKenzie
-authorURL: https://twitter.com/sebmck
+authors: sebastian
date: 2015-11-3 10:30:00
categories: announcements
share_text: "Babel Doctor"
diff --git a/website/blog/2016-08-24-6.14.0.md b/website/blog/2016-08-24-6.14.0.md
index afc7f6efc..072418dd2 100644
--- a/website/blog/2016-08-24-6.14.0.md
+++ b/website/blog/2016-08-24-6.14.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.14.0 Released"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-08-24 09:30:00
categories: announcements
share_text: "6.14.0"
diff --git a/website/blog/2016-08-26-babili.md b/website/blog/2016-08-26-babili.md
index 735704755..2b017732c 100644
--- a/website/blog/2016-08-26-babili.md
+++ b/website/blog/2016-08-26-babili.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Babili (babel-minify)"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-08-30 10:50:00
categories: announcements
share_text: "Babili (babel-minify)"
diff --git a/website/blog/2016-09-28-6.16.0.md b/website/blog/2016-09-28-6.16.0.md
index be9c7850c..da95e6a0b 100644
--- a/website/blog/2016-09-28-6.16.0.md
+++ b/website/blog/2016-09-28-6.16.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.16.0 Released"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-09-28 3:45:00
categories: announcements
share_text: "6.16.0"
diff --git a/website/blog/2016-10-24-6.18.0.md b/website/blog/2016-10-24-6.18.0.md
index e9f184424..af6cd0e45 100644
--- a/website/blog/2016-10-24-6.18.0.md
+++ b/website/blog/2016-10-24-6.18.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.18.0 Released"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-10-24 3:45:00
categories: announcements
share_text: "6.18.0"
diff --git a/website/blog/2016-11-16-6.19.0.md b/website/blog/2016-11-16-6.19.0.md
index 83087d775..9ad47c312 100644
--- a/website/blog/2016-11-16-6.19.0.md
+++ b/website/blog/2016-11-16-6.19.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.19.0 Released"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-11-16 11:00:00
categories: announcements
share_text: "6.19.0"
diff --git a/website/blog/2016-12-07-the-state-of-babel.md b/website/blog/2016-12-07-the-state-of-babel.md
index 7f3e5a5cf..17787dff6 100644
--- a/website/blog/2016-12-07-the-state-of-babel.md
+++ b/website/blog/2016-12-07-the-state-of-babel.md
@@ -1,8 +1,7 @@
---
layout: post
title: "The State of Babel"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2016-12-07 14:30:00
categories: announcements
share_text: "The State of Babel"
diff --git a/website/blog/2017-02-13-6.23.0.md b/website/blog/2017-02-13-6.23.0.md
index 368675c4d..1a1c88efd 100644
--- a/website/blog/2017-02-13-6.23.0.md
+++ b/website/blog/2017-02-13-6.23.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "6.23.0 Released"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2017-02-13 20:00:00
categories: announcements
share_text: "6.23.0"
diff --git a/website/blog/2017-03-01-upgrade-to-babel-7-for-tool-authors.md b/website/blog/2017-03-01-upgrade-to-babel-7-for-tool-authors.md
index 601ce925d..7829722b5 100644
--- a/website/blog/2017-03-01-upgrade-to-babel-7-for-tool-authors.md
+++ b/website/blog/2017-03-01-upgrade-to-babel-7-for-tool-authors.md
@@ -1,7 +1,7 @@
---
layout: post
title: "Upgrade to Babel 7 for Tool Authors (WIP)"
-author: Sven SAULEAU, Henry Zhu
+authors: [sven, henry]
date: 2017-02-29 11:00:00
categories: announcements
share_text: "Upgrade to Babel 7 for Tool Authors"
@@ -16,4 +16,6 @@ We are moving the migration guide to a docs page instead of a blog post!
## Check out [v7-migration-api](https://babeljs.io/docs/en/next/v7-migration-api)!
+
+
Refer users to this document for those that create tools that depend on Babel (such as Babel plugins).
diff --git a/website/blog/2017-03-01-upgrade-to-babel-7.md b/website/blog/2017-03-01-upgrade-to-babel-7.md
index dd82256ba..5342693d3 100644
--- a/website/blog/2017-03-01-upgrade-to-babel-7.md
+++ b/website/blog/2017-03-01-upgrade-to-babel-7.md
@@ -1,7 +1,7 @@
---
layout: post
title: "Upgrade to Babel 7 (moved)"
-author: Sven SAULEAU, Henry Zhu
+authors: [sven, henry]
date: 2017-02-29 11:00:00
categories: announcements
share_text: "Upgrade to Babel 7"
@@ -14,3 +14,5 @@ custom_js_with_timestamps:
We are moving the migration guide to a docs page instead of a blog post!
## Check out [v7-migration](https://babeljs.io/docs/en/next/v7-migration)!
+
+
\ No newline at end of file
diff --git a/website/blog/2017-08-09-babel-and-summer-of-code.md b/website/blog/2017-08-09-babel-and-summer-of-code.md
index 6fc67cc08..d55c66a6c 100644
--- a/website/blog/2017-08-09-babel-and-summer-of-code.md
+++ b/website/blog/2017-08-09-babel-and-summer-of-code.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Babel and Summer of Code 2017"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2017-08-09 12:00:00
categories: announcements
share_text: "Babel and Summer of Code 2017"
diff --git a/website/blog/2017-08-11-gsoc-peey-1.md b/website/blog/2017-08-11-gsoc-peey-1.md
index 26fbc4c19..70c29a2e6 100644
--- a/website/blog/2017-08-11-gsoc-peey-1.md
+++ b/website/blog/2017-08-11-gsoc-peey-1.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Personal Experiences at Babel #1 — A PR with Unusually High Number of Reviews"
-author: "Peeyush Kushwaha"
-authorURL: https://twitter.com/PeeyFTW
+authors: peeyush_kushwaha
slug: personal-experiences-at-babel-1-a-pr-with-unusually-high-number-of-reviews
date: 2017-08-11 12:00:00
custom_js_with_timestamps:
diff --git a/website/blog/2017-08-16-gsoc-karl-1.md b/website/blog/2017-08-16-gsoc-karl-1.md
index 463940d7d..41632727d 100644
--- a/website/blog/2017-08-16-gsoc-karl-1.md
+++ b/website/blog/2017-08-16-gsoc-karl-1.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Contributing to Babel: Three Lessons to Remember"
-author: "Karl Cheng"
-authorURL: https://twitter.com/qantas94heavy
+authors: karl_cheng
slug: contributing-to-babel-three-lessons-to-remember
date: 2017-08-16 14:00:00
custom_js_with_timestamps:
diff --git a/website/blog/2017-09-11-zero-config-with-babel-macros.md b/website/blog/2017-09-11-zero-config-with-babel-macros.md
index c075e5f45..d7897c08f 100644
--- a/website/blog/2017-09-11-zero-config-with-babel-macros.md
+++ b/website/blog/2017-09-11-zero-config-with-babel-macros.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Zero-config code transformation with babel-plugin-macros"
-author: Kent C. Dodds
-authorURL: https://twitter.com/kentcdodds
+authors: kent_c_dodds
date: 2017-09-11 11:00:00
categories: announcements
share_text: "Zero-config code transformation with babel-plugin-macros"
diff --git a/website/blog/2017-09-12-planning-for-7.0.md b/website/blog/2017-09-12-planning-for-7.0.md
index 2afc3a12b..810236a74 100644
--- a/website/blog/2017-09-12-planning-for-7.0.md
+++ b/website/blog/2017-09-12-planning-for-7.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Planning for 7.0"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2017-09-12 10:00:00
categories: announcements
share_text: "Planning for 7.0"
diff --git a/website/blog/2017-10-05-babel-turns-three.md b/website/blog/2017-10-05-babel-turns-three.md
index 481be3d72..c79edbf5f 100644
--- a/website/blog/2017-10-05-babel-turns-three.md
+++ b/website/blog/2017-10-05-babel-turns-three.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Babel Turns Three"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2017-10-05 13:00:00
categories: announcements
share_text: "Babel Turns Three"
diff --git a/website/blog/2017-12-27-nearing-the-7.0-release.md b/website/blog/2017-12-27-nearing-the-7.0-release.md
index 4f6e258a8..1fbf3ab96 100644
--- a/website/blog/2017-12-27-nearing-the-7.0-release.md
+++ b/website/blog/2017-12-27-nearing-the-7.0-release.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Nearing the 7.0 Release"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2017-12-27 21:00:00
categories: announcements
share_text: "Nearing the 7.0 Release"
diff --git a/website/blog/2018-06-26-on-consuming-and-publishing-es2015+-packages.md b/website/blog/2018-06-26-on-consuming-and-publishing-es2015+-packages.md
index ab01f0b9f..dbd9c63c9 100644
--- a/website/blog/2018-06-26-on-consuming-and-publishing-es2015+-packages.md
+++ b/website/blog/2018-06-26-on-consuming-and-publishing-es2015+-packages.md
@@ -1,8 +1,7 @@
---
layout: post
title: "On Consuming (and Publishing) ES2015+ Packages"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2018-06-26 12:00:00
categories: announcements
share_text: "On Consuming (and Publishing) ES2015+ Packages"
diff --git a/website/blog/2018-07-16-announcing-babels-new-partnership-with-trivago.md b/website/blog/2018-07-16-announcing-babels-new-partnership-with-trivago.md
index b548e6c5a..fe02e4c14 100644
--- a/website/blog/2018-07-16-announcing-babels-new-partnership-with-trivago.md
+++ b/website/blog/2018-07-16-announcing-babels-new-partnership-with-trivago.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Announcing Babel's New Partnership with trivago!"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2018-07-16 12:30:00
categories: announcements
share_text: "Announcing Babel's New Partnership with trivago!"
diff --git a/website/blog/2018-07-19-whats-happening-with-the-pipeline-proposal.md b/website/blog/2018-07-19-whats-happening-with-the-pipeline-proposal.md
index c2491ee08..b44cd0e15 100644
--- a/website/blog/2018-07-19-whats-happening-with-the-pipeline-proposal.md
+++ b/website/blog/2018-07-19-whats-happening-with-the-pipeline-proposal.md
@@ -1,8 +1,7 @@
---
layout: post
title: "What's Happening With the Pipeline (|>) Proposal?"
-author: James DiGioia
-authorURL: https://twitter.com/JamesDiGioia
+authors: james_digioia
date: 2018-07-19 12:00:00
categories: announcements
share_text: "What's Happening With the Pipeline (|>) Proposal?"
diff --git a/website/blog/2018-07-27-removing-babels-stage-presets.md b/website/blog/2018-07-27-removing-babels-stage-presets.md
index 3b97a1405..93dbb868b 100644
--- a/website/blog/2018-07-27-removing-babels-stage-presets.md
+++ b/website/blog/2018-07-27-removing-babels-stage-presets.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Removing Babel's Stage Presets"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2018-07-27 12:00:00
categories: announcements
share_text: "Removing Babel's Stage Presets"
diff --git a/website/blog/2018-08-27-7.0.0.md b/website/blog/2018-08-27-7.0.0.md
index 06ddf7140..2c6d6b9bc 100644
--- a/website/blog/2018-08-27-7.0.0.md
+++ b/website/blog/2018-08-27-7.0.0.md
@@ -1,8 +1,13 @@
---
layout: post
+<<<<<<< HEAD
title: "Babel 7 发布"
author: Henry Zhu
authorURL: https://twitter.com/left_pad
+=======
+title: "Babel 7 Released"
+authors: henry
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
date: 2018-08-27 18:00:00
categories: announcements
share_text: "Babel 7 发布"
diff --git a/website/blog/2018-09-17-7.1.0.md b/website/blog/2018-09-17-7.1.0.md
index 1a3d5bff4..3b92d9837 100644
--- a/website/blog/2018-09-17-7.1.0.md
+++ b/website/blog/2018-09-17-7.1.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.1.0 Released: Decorators, Private Static Fields"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2018-09-17 12:00:00
categories: announcements
share_text: "Babel 7.1.0 Released"
diff --git a/website/blog/2018-09-17-decorators.md b/website/blog/2018-09-17-decorators.md
index dda327b6d..4be4b1d99 100644
--- a/website/blog/2018-09-17-decorators.md
+++ b/website/blog/2018-09-17-decorators.md
@@ -1,8 +1,13 @@
---
layout: post
+<<<<<<< HEAD
title: "在 Babel 中支持 TC39 标准的装饰器"
author: Nicolò Ribaudo
authorURL: https://twitter.com/NicoloRibaudo
+=======
+title: "TC39 Standards Track Decorators in Babel"
+authors: nicolò
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
date: 2018-09-17 12:00:00
categories: announcements
share_text: "在 Babel 中支持 TC39 标准的装饰器"
diff --git a/website/blog/2018-12-03-7.2.0.md b/website/blog/2018-12-03-7.2.0.md
index b8b06245a..2cd15f1fb 100644
--- a/website/blog/2018-12-03-7.2.0.md
+++ b/website/blog/2018-12-03-7.2.0.md
@@ -1,9 +1,15 @@
---
layout: post
+<<<<<<< HEAD
title: "7.2.0 发布:私有实例方法(Private Instance Methods)"
author: Nicolò Ribaudo
authorURL: https://twitter.com/NicoloRibaudo
date: 2018-12-03 12:00:00
+=======
+title: "7.2.0 Released: Private Instance Methods"
+authors: nicolò
+date: 2018-12-03 12:00:00
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
categories: announcements
share_text: "Babel 7.2.0 发布"
---
diff --git a/website/blog/2019-01-21-7.3.0.md b/website/blog/2019-01-21-7.3.0.md
index 29e3f49e9..90a7edb2d 100644
--- a/website/blog/2019-01-21-7.3.0.md
+++ b/website/blog/2019-01-21-7.3.0.md
@@ -1,9 +1,15 @@
---
layout: post
+<<<<<<< HEAD
title: "7.3.0 Released: Named capturing groups, private instance accessors and smart pipelines"
author: Nicolò Ribaudo
authorURL: https://twitter.com/NicoloRibaudo
date: 2019-01-21 16:00:00
+=======
+title: "7.3.0 Released: Named capturing groups, private instance accessors and smart pipelines"
+authors: nicolò
+date: 2019-01-21 16:00:00
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
categories: announcements
share_text: "Babel 7.3.0 Released"
---
diff --git a/website/blog/2019-03-19-7.4.0.md b/website/blog/2019-03-19-7.4.0.md
index effea5668..29ff76e8c 100644
--- a/website/blog/2019-03-19-7.4.0.md
+++ b/website/blog/2019-03-19-7.4.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.4.0 Released: core-js 3, static private methods and partial application"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2019-03-19 21:30:00
categories: announcements
share_text: "Babel 7.4.0 Released"
diff --git a/website/blog/2019-07-02-the-babel-podcast.md b/website/blog/2019-07-02-the-babel-podcast.md
index c7b41373a..388d025cb 100644
--- a/website/blog/2019-07-02-the-babel-podcast.md
+++ b/website/blog/2019-07-02-the-babel-podcast.md
@@ -1,8 +1,7 @@
---
layout: post
title: "The Babel Podcast"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2019-07-02 0:00:00
categories: announcements
share_text: "The Babel Podcast"
diff --git a/website/blog/2019-07-03-7.5.0.md b/website/blog/2019-07-03-7.5.0.md
index fd941b485..d2fcd8fe8 100644
--- a/website/blog/2019-07-03-7.5.0.md
+++ b/website/blog/2019-07-03-7.5.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.5.0 Released: dynamic import and F# pipelines"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2019-07-03 0:00:00
categories: announcements
share_text: "Babel 7.5.0 Released"
diff --git a/website/blog/2019-09-05-7.6.0.md b/website/blog/2019-09-05-7.6.0.md
index baf49b9bb..5a416cd66 100644
--- a/website/blog/2019-09-05-7.6.0.md
+++ b/website/blog/2019-09-05-7.6.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.6.0 Released: Private static accessors and V8 intrinsic syntax"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2019-09-06 0:00:00
categories: announcements
share_text: "Babel 7.6.0 Released"
diff --git a/website/blog/2019-11-05-7.7.0.md b/website/blog/2019-11-05-7.7.0.md
index f116b0bc1..57ba79a50 100644
--- a/website/blog/2019-11-05-7.7.0.md
+++ b/website/blog/2019-11-05-7.7.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.7.0 Released: Error recovery and TypeScript 3.7"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2019-11-05 10:00:00
categories: announcements
share_text: "Babel 7.7.0 Released"
diff --git a/website/blog/2019-11-08-babels-funding-plans.md b/website/blog/2019-11-08-babels-funding-plans.md
index 233c6b9dd..bf2863bfa 100644
--- a/website/blog/2019-11-08-babels-funding-plans.md
+++ b/website/blog/2019-11-08-babels-funding-plans.md
@@ -1,8 +1,7 @@
---
layout: post
title: "Babel's Funding Plans"
-author: Henry Zhu
-authorURL: https://twitter.com/left_pad
+authors: henry
date: 2019-11-08 12:00:00
categories: announcements
share_text: "Babel's Funding Plans"
diff --git a/website/blog/2020-01-11-7.8.0.md b/website/blog/2020-01-11-7.8.0.md
index 7436cb867..acbb438ae 100644
--- a/website/blog/2020-01-11-7.8.0.md
+++ b/website/blog/2020-01-11-7.8.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.8.0 Released: ECMAScript 2020, .mjs configuration files and @babel/cli improvements"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2020-01-11 20:00:00
categories: announcements
share_text: "Babel 7.8.0 Released"
diff --git a/website/blog/2020-03-16-7.9.0.md b/website/blog/2020-03-16-7.9.0.md
index 3f36e3d12..37e05117a 100644
--- a/website/blog/2020-03-16-7.9.0.md
+++ b/website/blog/2020-03-16-7.9.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.9.0 Released: Smaller preset-env output, Typescript 3.8 support and a new JSX transform"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2020-03-20 0:00:00
categories: announcements
share_text: "Babel 7.9.0 Released"
diff --git a/website/blog/2020-05-25-7.10.0.md b/website/blog/2020-05-25-7.10.0.md
index 15c93ff01..9ba4cf399 100644
--- a/website/blog/2020-05-25-7.10.0.md
+++ b/website/blog/2020-05-25-7.10.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.10.0 Released: Class Fields in preset-env, '#private in' checks and better React tree-shaking"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2020-05-25 0:00:00
categories: announcements
share_text: "Babel 7.10.0 Released"
diff --git a/website/blog/2020-07-13-the-state-of-babel-eslint.md b/website/blog/2020-07-13-the-state-of-babel-eslint.md
index 1bfd187a4..8e6d297d4 100644
--- a/website/blog/2020-07-13-the-state-of-babel-eslint.md
+++ b/website/blog/2020-07-13-the-state-of-babel-eslint.md
@@ -1,8 +1,7 @@
---
layout: post
title: "The State of babel-eslint"
-author: Kai Cataldo
-authorURL: https://kaicataldo.com
+authors: kai
date: 2020-07-13 0:00:00
categories: announcements
share_text: "The State of babel-eslint"
diff --git a/website/blog/2020-07-30-7.11.0.md b/website/blog/2020-07-30-7.11.0.md
index 81c2cc189..ebeeee4dc 100644
--- a/website/blog/2020-07-30-7.11.0.md
+++ b/website/blog/2020-07-30-7.11.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.11.0 Released: ECMAScript 2021 support in preset-env, TypeScript 4.0 support, printing config and the future of `babel-eslint`"
-author: Huáng Jùnliàng
-authorURL: https://twitter.com/JLHwung
+authors: jùnliàng
date: 2020-07-30 0:00:00
categories: announcements
share_text: "Babel 7.11.0 Released"
diff --git a/website/blog/2020-10-15-7.12.0.md b/website/blog/2020-10-15-7.12.0.md
index 334c08901..2a850eb15 100644
--- a/website/blog/2020-10-15-7.12.0.md
+++ b/website/blog/2020-10-15-7.12.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.12.0 Released: TypeScript 4.1, strings as import/export names, and class static blocks"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2020-10-12 0:00:00
categories: announcements
share_text: "Babel 7.12.0 Released"
diff --git a/website/blog/2021-02-22-7.13.0.md b/website/blog/2021-02-22-7.13.0.md
index 4c568ecd1..e6f307db3 100644
--- a/website/blog/2021-02-22-7.13.0.md
+++ b/website/blog/2021-02-22-7.13.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.13.0 Released: Records and Tuples, granular compiler assumptions, and top-level targets"
-author: Nicolò Ribaudo
-authorURL: https://twitter.com/NicoloRibaudo
+authors: nicolò
date: 2021-01-01 0:00:00
categories: announcements
share_text: "Babel 7.13.0 Released"
diff --git a/website/blog/2021-04-29-7.14.0.md b/website/blog/2021-04-29-7.14.0.md
index c40fc87d7..d6f014ba4 100644
--- a/website/blog/2021-04-29-7.14.0.md
+++ b/website/blog/2021-04-29-7.14.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.14.0 Released: New class features enabled by default, TypeScript 4.3, and better CommonJS interop"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2021-04-29 0:00:00
categories: announcements
share_text: "Babel 7.14.0 Released"
diff --git a/website/blog/2021-05-10-funding-update.md b/website/blog/2021-05-10-funding-update.md
index 59d7abe83..458f596e8 100644
--- a/website/blog/2021-05-10-funding-update.md
+++ b/website/blog/2021-05-10-funding-update.md
@@ -1,7 +1,7 @@
---
layout: post
title: "Babel is used by millions, so why are we running out of money?"
-author: Babel Core Team
+authors: team
date: 2021-05-10 0:00:00
categories: announcements
image: https://i.imgur.com/tJ9p4uS.png
diff --git a/website/blog/2021-07-26-7.15.0.md b/website/blog/2021-07-26-7.15.0.md
index 858ea10ef..88c7af7c7 100644
--- a/website/blog/2021-07-26-7.15.0.md
+++ b/website/blog/2021-07-26-7.15.0.md
@@ -1,9 +1,15 @@
---
layout: post
+<<<<<<< HEAD
title: "7.15.0 发布:支持 Hack-style 管道, TypeScript 枚举常量和 Rhino 目标"
author: Babel Team
authorURL: https://twitter.com/babeljs
date: 2021-07-26 0:00:00
+=======
+title: "7.15.0 Released: Hack-style pipelines, TypeScript const enums and Rhino target support"
+authors: team
+date: 2021-07-26 0:00:00
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
categories: announcements
share_text: "Babel 7.15.0 已发布"
---
diff --git a/website/blog/2021-10-29-7.16.0.md b/website/blog/2021-10-29-7.16.0.md
index 7b6bff24a..b6ec48af4 100644
--- a/website/blog/2021-10-29-7.16.0.md
+++ b/website/blog/2021-10-29-7.16.0.md
@@ -1,8 +1,13 @@
---
layout: post
+<<<<<<< HEAD
title: "7.16.0 发布: ESLint 8 和 TypeScript 4.5"
author: Babel Team
authorURL: https://twitter.com/babeljs
+=======
+title: "7.16.0 Released: ESLint 8 and TypeScript 4.5"
+authors: team
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01
date: 2021-10-29 0:00:00
categories: announcements
share_text: "Babel 7.16.0 发布"
diff --git a/website/blog/2022-02-02-7.17.0.md b/website/blog/2022-02-02-7.17.0.md
index 8bebd3406..1ce112b42 100644
--- a/website/blog/2022-02-02-7.17.0.md
+++ b/website/blog/2022-02-02-7.17.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.17.0 Released: RegExp 'v' mode and ... 🥁 decorators!"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2022-02-02 0:00:00
categories: announcements
share_text: "Babel 7.17.0 Released"
diff --git a/website/blog/2022-05-19-7.18.0.md b/website/blog/2022-05-19-7.18.0.md
index 953b5e2e0..e9167938a 100644
--- a/website/blog/2022-05-19-7.18.0.md
+++ b/website/blog/2022-05-19-7.18.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.18.0 Released: Destructuring private elements and TypeScript 4.7"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2022-05-19 0:00:00
categories: announcements
share_text: "Babel 7.18.0 Released"
diff --git a/website/blog/2022-09-05-7.19.0.md b/website/blog/2022-09-05-7.19.0.md
index fa1e5e49d..a7c744879 100644
--- a/website/blog/2022-09-05-7.19.0.md
+++ b/website/blog/2022-09-05-7.19.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.19.0 Released: Stage 3 decorators and more RegExp features!"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2022-09-05 0:00:00
categories: announcements
share_text: "Babel 7.19.0 Released"
diff --git a/website/blog/2022-10-27-7.20.0.md b/website/blog/2022-10-27-7.20.0.md
index ca642f795..914549b6f 100644
--- a/website/blog/2022-10-27-7.20.0.md
+++ b/website/blog/2022-10-27-7.20.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.20.0 Released: Deno target and TypeScript 4.9"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2022-10-27 0:00:00
categories: announcements
share_text: "Babel 7.20.0 Released"
diff --git a/website/blog/2023-02-20-7.21.0.md b/website/blog/2023-02-20-7.21.0.md
index 3ffaec391..bbb252624 100644
--- a/website/blog/2023-02-20-7.21.0.md
+++ b/website/blog/2023-02-20-7.21.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.21.0 Released: Inline RegExp modifiers, TypeScript 5.0, and Decorators updates"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2023-02-20 0:00:00
categories: announcements
share_text: "Babel 7.21.0 Released"
diff --git a/website/blog/2023-05-26-7.22.0.md b/website/blog/2023-05-26-7.22.0.md
index 80e50c08b..ce34e6887 100644
--- a/website/blog/2023-05-26-7.22.0.md
+++ b/website/blog/2023-05-26-7.22.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.22.0 Released: Explicit Resource Management support and Import Attributes parsing"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2023-05-26 0:00:00
categories: announcements
share_text: "Babel 7.22.0 Released"
diff --git a/website/blog/2023-09-25-7.23.0.md b/website/blog/2023-09-25-7.23.0.md
index 0ae0f44f6..5614983a8 100644
--- a/website/blog/2023-09-25-7.23.0.md
+++ b/website/blog/2023-09-25-7.23.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.23.0 Released: Decorator Metadata and many new `import` features!"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2023-09-25 0:00:00
categories: announcements
share_text: "Babel 7.23.0 Released"
diff --git a/website/blog/2023-10-16-cve-2023-45133.md b/website/blog/2023-10-16-cve-2023-45133.md
index 6c312413b..4088ac08a 100644
--- a/website/blog/2023-10-16-cve-2023-45133.md
+++ b/website/blog/2023-10-16-cve-2023-45133.md
@@ -1,8 +1,7 @@
---
layout: post
title: "CVE-2023-45133: Finding an Arbitrary Code Execution Vulnerability In Babel"
-author: William Khem Marquez
-authorURL: https://github.com/SteakEnthusiast/
+authors: william_khem_marquez
date: 2023-10-18 0:00:00
share_text: "CVE-2023-45133: Finding an Arbitrary Code Execution Vulnerability In Babel"
---
diff --git a/website/blog/2024-02-28-7.24.0.md b/website/blog/2024-02-28-7.24.0.md
index 6a7b9a32e..7109991fb 100644
--- a/website/blog/2024-02-28-7.24.0.md
+++ b/website/blog/2024-02-28-7.24.0.md
@@ -1,8 +1,7 @@
---
layout: post
title: "7.24.0 Released: Decorator updates and JSON modules imports"
-author: Babel Team
-authorURL: https://twitter.com/babeljs
+authors: team
date: 2024-02-28 0:00:00
categories: announcements
share_text: "Babel 7.24.0 Released"
diff --git a/website/blog/2024-07-26-7.25.0.md b/website/blog/2024-07-26-7.25.0.md
new file mode 100644
index 000000000..6159353fb
--- /dev/null
+++ b/website/blog/2024-07-26-7.25.0.md
@@ -0,0 +1,107 @@
+---
+layout: post
+title: "7.25.0 Released: Safari bugfixes and duplicated named capturing groups"
+authors: team
+date: 2024-07-26 0:00:00
+categories: announcements
+share_text: "Babel 7.25.0 Released"
+---
+
+Babel 7.25.0 is out!
+
+`@babel/preset-env` now supports the [duplicated named capturing groups](https://github.com/tc39/proposal-duplicate-named-capturing-groups) proposal for Regular Expressions by default, as well as a bugfix for class fields when targeting Safari. This version also improves support for compiling [JSON module imports](https://babeljs.io/docs/babel-plugin-proposal-json-modules) to CommonJS, and adds support for config files to `@babel/node`'s `--eval` mode.
+
+You can read the whole changelog [on GitHub](https://github.com/babel/babel/releases/tag/v7.25.0).
+
+
+
+> If you or your company want to support Babel and the evolution of JavaScript, but aren't sure how, you can donate to us on our [Open Collective](https://github.com/babel/babel?sponsor=1) and, better yet, work with us on the implementation of [new ECMAScript proposals](https://github.com/babel/proposals) directly! As a volunteer-driven project, we rely on the community's support to fund our efforts in supporting the wide range of JavaScript users. Reach out at [team@babeljs.io](mailto:team@babeljs.io) if you'd like to discuss more!
+
+## Highlights
+
+### Duplicated named capturing groups ([#16445](https://github.com/babel/babel/pull/16445))
+
+The [duplicated named capturing groups](https://github.com/tc39/proposal-duplicate-named-capturing-groups) proposal allows re-using the same name for groups in alternative branches within a regular expression. For example, a RegExp that matches dates either in the `dd/mm/yyyy` or `yyyy-mm-dd` format could be written as
+
+```javascript
+let re =
+ /(?\d\d)\/(?\d\d)\/(?\d\d\d\d)|(?\d\d\d\d)-(?\d\d)-(?\d\d)/;
+
+"21/12/2023".match(re).groups.day; // 21
+"2023-12-21".match(re).groups.day; // 21
+```
+
+The proposal reached Stage 4 in the April 2024 TC39 meeting, and will be included in the next version of the JavaScript standard. It is thus now enabled by default in `@babel/preset-env` (when needed based on your [targets](https://babeljs.io/docs/options#targets)), and you can safely remove `@babel/plugin-proposal-duplicate-named-capturing-groups-regex` from your configuration.
+
+If for any reason you still need to explicitly list the plugin, it has now been renamed to `@babel/plugin-transform-duplicate-named-capturing-groups-regex` as the proposal became a standard language feature.
+
+### Simplify JSON modules imports in CommonJS ([#16579](https://github.com/babel/babel/pull/16579))
+
+After introducing support for transforming [JSON modules](https://github.com/tc39/proposal-json-modules) imports in Babel 7.24.0, we realized that the generated output was not friendly to CommonJS bundlers.
+
+Given this code:
+
+```javascript
+import myConfig from "./config.json" with { type: "json" };
+```
+
+[`@babel/plugin-proposal-json-modules`](https://babeljs.io/docs/babel-plugin-proposal-json-modules) would compile it to the following, when targeting CommonJS on Node.js:
+
+```javascript
+const myConfig = JSON.parse(
+ require("fs").readFileSync(require.resolve("./config.json"))
+);
+```
+
+The `JSON.parse` + `readFileSync` combination is necessary to ensure that `config.json` is indeed a JSON file, and not a `config.json.js` file trying to sneakily execute some code while being loaded.
+
+`@babel/plugin-proposal-json-modules` has now an `uncheckedRequire` option to simplify the output, at the cost of less validation. You can enable it in your configuration:
+
+```json title="babel.config.json"
+{
+ "plugins": [
+ ["@babel/plugin-proposal-json-modules", { "uncheckedRequire": true }]
+ ]
+}
+```
+
+and Babel will generate the following code:
+
+```javascript
+const myConfig = require("./config.json");
+```
+
+### `@babel/plugin-bugfix-safari-class-field-initializer-scope` ([#16569](https://github.com/babel/babel/pull/16569))
+
+Safari versions older than 16 have [a bug](https://bugs.webkit.org/show_bug.cgi?id=236843) when using parentheses around expressions in class fields. For example, the following code would throw an error:
+
+```javascript
+{
+ let a = [3];
+ new class {
+ c = (a)[0];
+ };
+}
+```
+
+This is especially problematic when using Webpack or when compiling to CommonJS, as they add parentheses when transforming imports. For example, this input code:
+
+```javascript
+import { hello } from "./dep";
+
+class A {
+ prop = hello();
+}
+```
+
+would become
+
+```javascript
+var _dep = /* ... */;
+
+class A {
+ prop = (0, _dep.hello)();
+}
+```
+
+[David Taylor](https://github.com/davidtaylorhq) implemented a fix (thanks!) in the new `@babel/plugin-bugfix-safari-class-field-initializer-scope` package, which is enabled by default in `@babel/preset-env` when your targets include Safari versions older than 16.
diff --git a/website/blog/authors.yml b/website/blog/authors.yml
new file mode 100644
index 000000000..552349680
--- /dev/null
+++ b/website/blog/authors.yml
@@ -0,0 +1,56 @@
+team:
+ name: Babel Team
+ url: https://twitter.com/babeljs
+ email: team@babeljs.io
+
+henry:
+ name: Henry Zhu
+ url: https://twitter.com/left_pad
+
+james_kyle:
+ name: James Kyle
+ url: https://twitter.com/thejameskyle
+
+james_digioia:
+ name: James DiGioia
+ url: https://twitter.com/JamesDiGioia
+
+jùnliàng:
+ name: Huáng Jùnliàng
+ url: https://twitter.com/JLHwung
+
+kai:
+ name: Kai Cataldo
+ url: https://kaicataldo.com
+
+karl_cheng:
+ name: Karl Cheng
+ url: https://twitter.com/qantas94heavy
+
+kent_c_dodds:
+ name: Kent C. Dodds
+ url: https://twitter.com/kentcdodds
+
+nicolò:
+ name: Nicolò Ribaudo
+ url: https://twitter.com/NicoloRibaudo
+
+peeyush_kushwaha:
+ name: "Peeyush Kushwaha"
+ url: https://twitter.com/PeeyFTW
+
+sebastian:
+ name: Sebastian McKenzie
+ url: https://twitter.com/sebmck
+
+steven_luscher:
+ name: Steven Luscher
+ url: https://twitter.com/steveluscher
+
+sven:
+ name: Sven SAULEAU
+ url: https://twitter.com/svensauleau
+
+william_khem_marquez:
+ name: William Khem Marquez
+ url: https://github.com/SteakEnthusiast/
\ No newline at end of file
diff --git a/website/data/sponsors.yml b/website/data/sponsors.yml
index db876b998..108db20f5 100644
--- a/website/data/sponsors.yml
+++ b/website/data/sponsors.yml
@@ -1,3 +1,9 @@
+- name: Igalia
+ url: https://www.igalia.com/
+ image: https://images.opencollective.com/igalia/1c2e7cb/logo/256.png
+ type: opencollective
+ tier: base-support-sponsor
+ yearly: 30000 # There is not actual amount, but we need a large enough amount to fit in the tier
- name: Coinbase
url: https://github.com/coinbase
image: https://avatars.githubusercontent.com/u/1885080?s=200&v=4
@@ -16,3 +22,9 @@
type: opencollective
tier: gold-sponsors
monthly: 1000
+- name: Route Planner
+ url: https://route4me.com/
+ image: https://github.com/user-attachments/assets/002949fe-aa5e-4311-b77f-7f2c905e91f5
+ type: opencollective
+ tier: silver-sponsors
+ monthly: 500
diff --git a/website/data/tools/node/usage.md b/website/data/tools/node/usage.md
index bd621077b..7329b6234 100644
--- a/website/data/tools/node/usage.md
+++ b/website/data/tools/node/usage.md
@@ -6,6 +6,10 @@ require("@babel/core").transform("code", {
+<<<<<<< HEAD
关于 Babel 的完整 API 文档请查阅使用文档。
+=======
+ Explore the @babel/core documentation for the full API.
+>>>>>>> ecb084b3c333321595b7219a51969a3db521cf01