Skip to content

Commit

Permalink
fix: do not inject the same imported identifier multiple times (#16370)
Browse files Browse the repository at this point in the history
  • Loading branch information
ota-meshi committed Mar 20, 2024
1 parent fb7cf63 commit 3a6683b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 deletions.
Expand Up @@ -507,6 +507,7 @@ export default class ImportInjector {
if (!newImports) continue;

for (const decl of newImports) {
if (!statementsSet.has(decl)) continue;
if (maybeAppendImportSpecifiers(bodyStmt.node, decl)) {
statementsSet.delete(decl);
}
Expand Down
41 changes: 21 additions & 20 deletions packages/babel-helper-module-imports/test/index.js
Expand Up @@ -1159,26 +1159,27 @@ describe("@babel/helper-module-imports", () => {
const addSideEffect = m => void m.addSideEffect("s", opts);

it.each`
input | operation | expected
${`import "s"`} | ${addNamespace} | ${`import * as _s from "s";`}
${`import x from "s"`} | ${addNamespace} | ${`import x from "s"; import * as _s from "s";`}
${`import { x } from "s"`} | ${addNamespace} | ${`import { x } from "s"; import * as _s from "s";`}
${`import * as x from "s"`} | ${addNamespace} | ${`import * as x from "s"; import * as _s from "s";`}
${`import "s"`} | ${addNamed} | ${`import { n as _n } from "s";`}
${`import x from "s"`} | ${addNamed} | ${`import x, { n as _n } from "s";`}
${`import { x } from "s"`} | ${addNamed} | ${`import { x, n as _n } from "s";`}
${`import x, { y } from "s"`} | ${addNamed} | ${`import x, { y, n as _n } from "s";`}
${`import * as x from "s"`} | ${addNamed} | ${`import * as x from "s"; import { n as _n } from "s";`}
${`import "s"`} | ${addDefault} | ${`import _default from "s";`}
${`import x from "s"`} | ${addDefault} | ${`import x, { default as _default } from "s";`}
${`import { x } from "s"`} | ${addDefault} | ${`import _default, { x } from "s";`}
${`import x, { y } from "s"`} | ${addDefault} | ${`import x, { y, default as _default } from "s";`}
${`import * as x from "s"`} | ${addDefault} | ${`import * as x from "s"; import _default from "s";`}
${`import "s"`} | ${addSideEffect} | ${`import "s";`}
${`import x from "s"`} | ${addSideEffect} | ${`import x from "s";`}
${`import { x } from "s"`} | ${addSideEffect} | ${`import { x } from "s";`}
${`import * as x from "s"`} | ${addSideEffect} | ${`import * as x from "s";`}
${`import "u"; import type T from "s"`} | ${addSideEffect} | ${`import "u"; import "s"; import type T from "s";`}
input | operation | expected
${`import "s"`} | ${addNamespace} | ${`import * as _s from "s";`}
${`import x from "s"`} | ${addNamespace} | ${`import x from "s"; import * as _s from "s";`}
${`import { x } from "s"`} | ${addNamespace} | ${`import { x } from "s"; import * as _s from "s";`}
${`import * as x from "s"`} | ${addNamespace} | ${`import * as x from "s"; import * as _s from "s";`}
${`import "s"`} | ${addNamed} | ${`import { n as _n } from "s";`}
${`import x from "s"`} | ${addNamed} | ${`import x, { n as _n } from "s";`}
${`import { x } from "s"`} | ${addNamed} | ${`import { x, n as _n } from "s";`}
${`import x, { y } from "s"`} | ${addNamed} | ${`import x, { y, n as _n } from "s";`}
${`import * as x from "s"`} | ${addNamed} | ${`import * as x from "s"; import { n as _n } from "s";`}
${`import { x } from "s"; import { y } from "s";`} | ${addNamed} | ${`import { x, n as _n } from "s"; import { y } from "s";`}
${`import "s"`} | ${addDefault} | ${`import _default from "s";`}
${`import x from "s"`} | ${addDefault} | ${`import x, { default as _default } from "s";`}
${`import { x } from "s"`} | ${addDefault} | ${`import _default, { x } from "s";`}
${`import x, { y } from "s"`} | ${addDefault} | ${`import x, { y, default as _default } from "s";`}
${`import * as x from "s"`} | ${addDefault} | ${`import * as x from "s"; import _default from "s";`}
${`import "s"`} | ${addSideEffect} | ${`import "s";`}
${`import x from "s"`} | ${addSideEffect} | ${`import x from "s";`}
${`import { x } from "s"`} | ${addSideEffect} | ${`import { x } from "s";`}
${`import * as x from "s"`} | ${addSideEffect} | ${`import * as x from "s";`}
${`import "u"; import type T from "s"`} | ${addSideEffect} | ${`import "u"; import "s"; import type T from "s";`}
`(
"$operation.name works with `$input`",
({ input, operation, expected }) => {
Expand Down

0 comments on commit 3a6683b

Please sign in to comment.