From a946c5e62fbbaba95c6f3191a11a9c288e404320 Mon Sep 17 00:00:00 2001 From: Yokubjon-J Date: Fri, 25 Mar 2022 02:25:53 +0500 Subject: [PATCH 1/5] test added --- .../transform-class-keys/babel.config.json | 7 +++++++ .../transform-class-keys/input.js | 9 +++++++++ .../transform-class-keys/output.js | 18 ++++++++++++++++++ .../helpers/esm/possibleConstructorReturn.js | 2 +- .../helpers/possibleConstructorReturn.js | 2 +- .../helpers/esm/possibleConstructorReturn.js | 2 +- .../helpers/possibleConstructorReturn.js | 2 +- .../helpers/esm/possibleConstructorReturn.js | 2 +- .../helpers/possibleConstructorReturn.js | 2 +- 9 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json create mode 100644 packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/input.js create mode 100644 packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/output.js diff --git a/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json new file mode 100644 index 000000000000..7da9d042f825 --- /dev/null +++ b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json @@ -0,0 +1,7 @@ +{ + "sourceType": "unambiguous", + "presets": ["@babel/preset-env"], + "plugins": [ + "@babel/plugin-transform-runtime" + ] +} \ No newline at end of file diff --git a/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/input.js b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/input.js new file mode 100644 index 000000000000..e60f3a0bd9fe --- /dev/null +++ b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/input.js @@ -0,0 +1,9 @@ +async function* fn() { + class A { + [yield 1]() {} + } + + class B extends A { + [await 1]() {} + } +} \ No newline at end of file diff --git a/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/output.js b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/output.js new file mode 100644 index 000000000000..88fe23f2c71d --- /dev/null +++ b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/output.js @@ -0,0 +1,18 @@ +function fn() { + return _fn.apply(this, arguments); +} + +function _fn() { + _fn = babelHelpers.wrapAsyncGenerator(function* () { + class A { + [yield 1]() {} + + } + + class B extends A { + [await 1]() {} + + } + }); + return _fn.apply(this, arguments); +} diff --git a/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js index 56d554457e8d..d310ac2c7837 100644 --- a/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "./typeof.js"; +import _typeof from "@babel/runtime-corejs2/helpers/typeof"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js b/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js index e1997be41941..69434a9da86a 100644 --- a/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("./typeof.js")["default"]; +var _typeof = require("@babel/runtime-corejs2/helpers/typeof")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); diff --git a/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js index 56d554457e8d..51d122c2557d 100644 --- a/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "./typeof.js"; +import _typeof from "@babel/runtime-corejs3/helpers/typeof"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js b/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js index e1997be41941..9a2f6faccecf 100644 --- a/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("./typeof.js")["default"]; +var _typeof = require("@babel/runtime-corejs3/helpers/typeof")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); diff --git a/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js index 56d554457e8d..8566e115778a 100644 --- a/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "./typeof.js"; +import _typeof from "@babel/runtime/helpers/typeof"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime/helpers/possibleConstructorReturn.js b/packages/babel-runtime/helpers/possibleConstructorReturn.js index e1997be41941..ba95ae43504e 100644 --- a/packages/babel-runtime/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("./typeof.js")["default"]; +var _typeof = require("@babel/runtime/helpers/typeof")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); From 645e36c040017517c3944807f3d1066e89cc022d Mon Sep 17 00:00:00 2001 From: Yokubjon-J Date: Fri, 25 Mar 2022 02:39:15 +0500 Subject: [PATCH 2/5] import correct tests --- .../helpers/esm/possibleConstructorReturn.js | 2 +- .../babel-runtime-corejs2/helpers/possibleConstructorReturn.js | 2 +- .../helpers/esm/possibleConstructorReturn.js | 2 +- .../babel-runtime-corejs3/helpers/possibleConstructorReturn.js | 2 +- packages/babel-runtime/helpers/esm/possibleConstructorReturn.js | 2 +- packages/babel-runtime/helpers/possibleConstructorReturn.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js index d310ac2c7837..56d554457e8d 100644 --- a/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs2/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "@babel/runtime-corejs2/helpers/typeof"; +import _typeof from "./typeof.js"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js b/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js index 69434a9da86a..e1997be41941 100644 --- a/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs2/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("@babel/runtime-corejs2/helpers/typeof")["default"]; +var _typeof = require("./typeof.js")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); diff --git a/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js index 51d122c2557d..56d554457e8d 100644 --- a/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs3/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "@babel/runtime-corejs3/helpers/typeof"; +import _typeof from "./typeof.js"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js b/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js index 9a2f6faccecf..e1997be41941 100644 --- a/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime-corejs3/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("@babel/runtime-corejs3/helpers/typeof")["default"]; +var _typeof = require("./typeof.js")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); diff --git a/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js b/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js index 8566e115778a..56d554457e8d 100644 --- a/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js +++ b/packages/babel-runtime/helpers/esm/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -import _typeof from "@babel/runtime/helpers/typeof"; +import _typeof from "./typeof.js"; import assertThisInitialized from "./assertThisInitialized.js"; export default function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { diff --git a/packages/babel-runtime/helpers/possibleConstructorReturn.js b/packages/babel-runtime/helpers/possibleConstructorReturn.js index ba95ae43504e..e1997be41941 100644 --- a/packages/babel-runtime/helpers/possibleConstructorReturn.js +++ b/packages/babel-runtime/helpers/possibleConstructorReturn.js @@ -1,4 +1,4 @@ -var _typeof = require("@babel/runtime/helpers/typeof")["default"]; +var _typeof = require("./typeof.js")["default"]; var assertThisInitialized = require("./assertThisInitialized.js"); From 85df24761d60220cf410b74ae3b30c57299cd307 Mon Sep 17 00:00:00 2001 From: Yokubjon-J Date: Fri, 25 Mar 2022 03:12:53 +0500 Subject: [PATCH 3/5] config file simplified MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò Ribaudo --- .../async-generators/transform-class-keys/babel.config.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json index 7da9d042f825..90a4a0981b00 100644 --- a/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json +++ b/packages/babel-plugin-proposal-async-generator-functions/test/fixtures/async-generators/transform-class-keys/babel.config.json @@ -1,7 +1,3 @@ { - "sourceType": "unambiguous", - "presets": ["@babel/preset-env"], - "plugins": [ - "@babel/plugin-transform-runtime" - ] + "plugins": ["proposal-async-generator-functions"] } \ No newline at end of file From 6548c3837802b633895509eeff664e95ab6508ab Mon Sep 17 00:00:00 2001 From: Yokubjon-J Date: Sun, 27 Mar 2022 23:42:01 +0500 Subject: [PATCH 4/5] environmentVisitor merged but issue still persists --- .../package.json | 4 +- .../src/index.ts | 33 ++++--- .../package.json | 3 +- .../src/index.ts | 89 ++++++++++--------- 4 files changed, 72 insertions(+), 57 deletions(-) diff --git a/packages/babel-helper-remap-async-to-generator/package.json b/packages/babel-helper-remap-async-to-generator/package.json index 18396c8eb172..74aa94aad4e0 100644 --- a/packages/babel-helper-remap-async-to-generator/package.json +++ b/packages/babel-helper-remap-async-to-generator/package.json @@ -16,7 +16,9 @@ "dependencies": { "@babel/helper-annotate-as-pure": "workspace:^", "@babel/helper-wrap-function": "workspace:^", - "@babel/types": "workspace:^" + "@babel/helper-environment-visitor":"workspace:^", + "@babel/types": "workspace:^", + "@babel/core":"workspace:^" }, "devDependencies": { "@babel/traverse": "workspace:^" diff --git a/packages/babel-helper-remap-async-to-generator/src/index.ts b/packages/babel-helper-remap-async-to-generator/src/index.ts index a4df21c8e60e..64c91356f560 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.ts +++ b/packages/babel-helper-remap-async-to-generator/src/index.ts @@ -3,6 +3,8 @@ import type { NodePath } from "@babel/traverse"; import wrapFunction from "@babel/helper-wrap-function"; import annotateAsPure from "@babel/helper-annotate-as-pure"; +import environmentVisitor from "@babel/helper-environment-visitor"; +import { traverse } from "@babel/core"; import { callExpression, cloneNode, @@ -11,23 +13,26 @@ import { yieldExpression, } from "@babel/types"; -const awaitVisitor = { - Function(path) { - path.skip(); - }, +const awaitVisitor = traverse.visitors.merge([ + { + Function(path) { + path.skip(); + }, - AwaitExpression(path, { wrapAwait }) { - const argument = path.get("argument"); + AwaitExpression(path, { wrapAwait }) { + const argument = path.get("argument"); - path.replaceWith( - yieldExpression( - wrapAwait - ? callExpression(cloneNode(wrapAwait), [argument.node]) - : argument.node, - ), - ); + path.replaceWith( + yieldExpression( + wrapAwait + ? callExpression(cloneNode(wrapAwait), [argument.node]) + : argument.node, + ), + ); + }, }, -}; + environmentVisitor, +]); export default function ( path: NodePath, diff --git a/packages/babel-plugin-proposal-async-generator-functions/package.json b/packages/babel-plugin-proposal-async-generator-functions/package.json index c3e95fb07e1e..5c2d71cdb4ab 100644 --- a/packages/babel-plugin-proposal-async-generator-functions/package.json +++ b/packages/babel-plugin-proposal-async-generator-functions/package.json @@ -19,7 +19,8 @@ "dependencies": { "@babel/helper-plugin-utils": "workspace:^", "@babel/helper-remap-async-to-generator": "workspace:^", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/helper-environment-visitor":"workspace:^" }, "peerDependencies": { "@babel/core": "^7.0.0-0" diff --git a/packages/babel-plugin-proposal-async-generator-functions/src/index.ts b/packages/babel-plugin-proposal-async-generator-functions/src/index.ts index 0d4d4492faa5..030b007dc5b8 100644 --- a/packages/babel-plugin-proposal-async-generator-functions/src/index.ts +++ b/packages/babel-plugin-proposal-async-generator-functions/src/index.ts @@ -1,64 +1,71 @@ import { declare } from "@babel/helper-plugin-utils"; import remapAsyncToGenerator from "@babel/helper-remap-async-to-generator"; import syntaxAsyncGenerators from "@babel/plugin-syntax-async-generators"; -import { types as t } from "@babel/core"; +import { traverse, types as t } from "@babel/core"; import rewriteForAwait from "./for-await"; +import environmentVisitor from "@babel/helper-environment-visitor"; export default declare(api => { api.assertVersion(7); - const yieldStarVisitor = { - Function(path) { - path.skip(); - }, + const yieldStarVisitor = traverse.visitors.merge([ + { + Function(path) { + path.skip(); + }, - YieldExpression({ node }, state) { - if (!node.delegate) return; - const callee = state.addHelper("asyncGeneratorDelegate"); - node.argument = t.callExpression(callee, [ - t.callExpression(state.addHelper("asyncIterator"), [node.argument]), - state.addHelper("awaitAsyncGenerator"), - ]); + YieldExpression({ node }, state) { + if (!node.delegate) return; + const callee = state.addHelper("asyncGeneratorDelegate"); + node.argument = t.callExpression(callee, [ + t.callExpression(state.addHelper("asyncIterator"), [node.argument]), + state.addHelper("awaitAsyncGenerator"), + ]); + }, }, - }; + environmentVisitor, + ]); - const forAwaitVisitor = { - Function(path) { - path.skip(); - }, + const forAwaitVisitor = traverse.visitors.merge([ + { + Function(path) { + path.skip(); + }, - ForOfStatement(path, { file }) { - const { node } = path; - if (!node.await) return; + ForOfStatement(path, { file }) { + const { node } = path; + if (!node.await) return; - const build = rewriteForAwait(path, { - getAsyncIterator: file.addHelper("asyncIterator"), - }); + const build = rewriteForAwait(path, { + getAsyncIterator: file.addHelper("asyncIterator"), + }); - const { declar, loop } = build; - const block = loop.body; + const { declar, loop } = build; + const block = loop.body; - // ensure that it's a block so we can take all its statements - path.ensureBlock(); + // ensure that it's a block so we can take all its statements + path.ensureBlock(); - // add the value declaration to the new loop body - if (declar) { - block.body.push(declar); - } + // add the value declaration to the new loop body + if (declar) { + block.body.push(declar); + } - // push the rest of the original loop body onto our new body - block.body.push(...node.body.body); + // push the rest of the original loop body onto our new body + block.body.push(...node.body.body); - t.inherits(loop, node); - t.inherits(loop.body, node.body); + t.inherits(loop, node); + t.inherits(loop.body, node.body); - if (build.replaceParent) { - path.parentPath.replaceWithMultiple(build.node); - } else { - path.replaceWithMultiple(build.node); - } + if (build.replaceParent) { + path.parentPath.replaceWithMultiple(build.node); + } else { + path.replaceWithMultiple(build.node); + } + }, }, - }; + environmentVisitor, + ]); const visitor = { Function(path, state) { From 0ac261115a1fa1edea3e2adb7b21d401f8b5fdf6 Mon Sep 17 00:00:00 2001 From: Yokubjon-J Date: Tue, 21 Jun 2022 12:13:57 +0500 Subject: [PATCH 5/5] <> is run --- packages/babel-helper-remap-async-to-generator/package.json | 6 +++--- .../package.json | 4 ++-- yarn.lock | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/babel-helper-remap-async-to-generator/package.json b/packages/babel-helper-remap-async-to-generator/package.json index 74aa94aad4e0..ee2a907cc4a1 100644 --- a/packages/babel-helper-remap-async-to-generator/package.json +++ b/packages/babel-helper-remap-async-to-generator/package.json @@ -14,11 +14,11 @@ }, "main": "./lib/index.js", "dependencies": { + "@babel/core": "workspace:^", "@babel/helper-annotate-as-pure": "workspace:^", + "@babel/helper-environment-visitor": "workspace:^", "@babel/helper-wrap-function": "workspace:^", - "@babel/helper-environment-visitor":"workspace:^", - "@babel/types": "workspace:^", - "@babel/core":"workspace:^" + "@babel/types": "workspace:^" }, "devDependencies": { "@babel/traverse": "workspace:^" diff --git a/packages/babel-plugin-proposal-async-generator-functions/package.json b/packages/babel-plugin-proposal-async-generator-functions/package.json index 5c2d71cdb4ab..8bc3c529d490 100644 --- a/packages/babel-plugin-proposal-async-generator-functions/package.json +++ b/packages/babel-plugin-proposal-async-generator-functions/package.json @@ -17,10 +17,10 @@ "babel-plugin" ], "dependencies": { + "@babel/helper-environment-visitor": "workspace:^", "@babel/helper-plugin-utils": "workspace:^", "@babel/helper-remap-async-to-generator": "workspace:^", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/helper-environment-visitor":"workspace:^" + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" diff --git a/yarn.lock b/yarn.lock index 788a41e02609..2c032f27936b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -864,7 +864,9 @@ __metadata: version: 0.0.0-use.local resolution: "@babel/helper-remap-async-to-generator@workspace:packages/babel-helper-remap-async-to-generator" dependencies: + "@babel/core": "workspace:^" "@babel/helper-annotate-as-pure": "workspace:^" + "@babel/helper-environment-visitor": "workspace:^" "@babel/helper-wrap-function": "workspace:^" "@babel/traverse": "workspace:^" "@babel/types": "workspace:^" @@ -1244,6 +1246,7 @@ __metadata: resolution: "@babel/plugin-proposal-async-generator-functions@workspace:packages/babel-plugin-proposal-async-generator-functions" dependencies: "@babel/core": "workspace:^" + "@babel/helper-environment-visitor": "workspace:^" "@babel/helper-plugin-test-runner": "workspace:^" "@babel/helper-plugin-utils": "workspace:^" "@babel/helper-remap-async-to-generator": "workspace:^"