From eaefbc87cdf598e255eb1b837c8e4a712edb240d Mon Sep 17 00:00:00 2001 From: Henry Dineen Date: Fri, 16 Aug 2024 14:14:21 -0400 Subject: [PATCH] fix(codemod): support aliased act() import --- .../__testfixtures__/aliased-import.input.js | 3 +++ .../__testfixtures__/aliased-import.output.js | 3 +++ .../react/19/replace-act-import/src/index.ts | 14 ++++++----- .../react/19/replace-act-import/test/test.ts | 25 +++++++++++++++++++ 4 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.input.js create mode 100644 packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.output.js diff --git a/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.input.js b/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.input.js new file mode 100644 index 000000000..07cb6f215 --- /dev/null +++ b/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.input.js @@ -0,0 +1,3 @@ +import { act as reactAct } from "react-dom/test-utils"; + +reactAct(); diff --git a/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.output.js b/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.output.js new file mode 100644 index 000000000..94c608bc6 --- /dev/null +++ b/packages/codemods/react/19/replace-act-import/__testfixtures__/aliased-import.output.js @@ -0,0 +1,3 @@ +import { act as reactAct } from "react"; + +reactAct(); diff --git a/packages/codemods/react/19/replace-act-import/src/index.ts b/packages/codemods/react/19/replace-act-import/src/index.ts index 410f0623d..1136b8e95 100644 --- a/packages/codemods/react/19/replace-act-import/src/index.ts +++ b/packages/codemods/react/19/replace-act-import/src/index.ts @@ -94,10 +94,12 @@ export default function transform( specifiers: [{ type: "ImportSpecifier", imported: { name: "act" } }], }) .forEach((path) => { - const newImportSpecifier = j.importSpecifier( - j.identifier("act"), - j.identifier("act"), - ); + const actSpecifiers = + path.node.specifiers?.filter( + (specifier) => + j.ImportSpecifier.check(specifier) && + specifier.imported.name === "act", + ) ?? []; const existingReactImportCollection = root.find(j.ImportDeclaration, { source: { value: "react" }, @@ -111,13 +113,13 @@ export default function transform( existingReactImportCollection .paths() .at(0) - ?.node.specifiers?.push(newImportSpecifier); + ?.node.specifiers?.push(...actSpecifiers); path.prune(); isDirty = true; } else { const newImportDeclaration = j.importDeclaration( - [newImportSpecifier], + actSpecifiers, j.literal("react"), ); diff --git a/packages/codemods/react/19/replace-act-import/test/test.ts b/packages/codemods/react/19/replace-act-import/test/test.ts index e618722c5..88e37d613 100644 --- a/packages/codemods/react/19/replace-act-import/test/test.ts +++ b/packages/codemods/react/19/replace-act-import/test/test.ts @@ -215,4 +215,29 @@ describe("react/19/replace-act-import: TestUtils.act -> React.act", () => { OUTPUT.replace(/\W/gm, ""), ); }); + + it("should preserve aliased import specifier name", async () => { + const INPUT = await readFile( + join(__dirname, "..", "__testfixtures__/aliased-import.input.js"), + "utf-8", + ); + const OUTPUT = await readFile( + join(__dirname, "..", "__testfixtures__/aliased-import.output.js"), + "utf-8", + ); + + const fileInfo: FileInfo = { + path: "index.ts", + source: INPUT, + }; + + const actualOutput = transform(fileInfo, buildApi("js"), { + quote: "single", + }); + + assert.deepEqual( + actualOutput?.replace(/\W/gm, ""), + OUTPUT.replace(/\W/gm, ""), + ); + }); }); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy