mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-07-02 17:08:39 +00:00
Fix utils import transform when workspace alias does not start with @ (#7557)
* Fix nested src folder for utils import * remove .only * Update packages/shadcn/src/utils/transformers/transform-import.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * check for empty utils * chore: changeset --------- Co-authored-by: shadcn <m@shadcn.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
5
.changeset/tidy-crabs-count.md
Normal file
5
.changeset/tidy-crabs-count.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"shadcn": patch
|
||||
---
|
||||
|
||||
Fix utils import transform when workspace alias does not start with @
|
||||
@@ -7,8 +7,12 @@ export const transformImport: Transformer = async ({
|
||||
config,
|
||||
isRemote,
|
||||
}) => {
|
||||
const workspaceAlias = config.aliases?.utils?.split("/")[0]?.slice(1)
|
||||
const utilsImport = `@${workspaceAlias}/lib/utils`
|
||||
const utilsAlias = config.aliases?.utils
|
||||
const workspaceAlias =
|
||||
typeof utilsAlias === "string" && utilsAlias.includes("/")
|
||||
? utilsAlias.split("/")[0]
|
||||
: "@"
|
||||
const utilsImport = `${workspaceAlias}/lib/utils`
|
||||
|
||||
if (![".tsx", ".ts", ".jsx", ".js"].includes(sourceFile.getExtension())) {
|
||||
return sourceFile
|
||||
@@ -31,7 +35,9 @@ export const transformImport: Transformer = async ({
|
||||
?.getNamedImports()
|
||||
.some((namedImport) => namedImport.getName() === "cn")
|
||||
|
||||
if (!isCnImport) continue
|
||||
if (!isCnImport || !config.aliases.utils) {
|
||||
continue
|
||||
}
|
||||
|
||||
specifier.setLiteralValue(
|
||||
utilsImport === updated
|
||||
|
||||
@@ -70,7 +70,7 @@ import { Foo } from "bar"
|
||||
import { Label} from "ui/label"
|
||||
import { Box } from "~/src/components/box"
|
||||
|
||||
import { cn, foo, bar } from "~/lib/utils"
|
||||
import { cn, foo, bar } from "~/lib"
|
||||
import { bar } from "~/lib/utils/bar"
|
||||
"
|
||||
`;
|
||||
@@ -82,7 +82,7 @@ import { Foo } from "bar"
|
||||
import { Label} from "ui/label"
|
||||
import { Box } from "~/src/components/box"
|
||||
|
||||
import { cn } from "~/lib/utils"
|
||||
import { cn } from "~/src/utils"
|
||||
import { bar } from "~/lib/utils/bar"
|
||||
"
|
||||
`;
|
||||
@@ -94,7 +94,7 @@ import { Foo } from "bar"
|
||||
import { Label} from "ui/label"
|
||||
import { Box } from "~/src/components/box"
|
||||
|
||||
import { cn } from "~/lib/utils"
|
||||
import { cn } from "~/src/utils"
|
||||
import { bar } from "~/lib/utils/bar"
|
||||
"
|
||||
`;
|
||||
@@ -106,7 +106,7 @@ import { Foo } from "bar"
|
||||
import { Label} from "ui/label"
|
||||
import { Box } from "~/src/components/box"
|
||||
|
||||
import { cn } from "~/lib/utils"
|
||||
import { cn } from "~/src/utils"
|
||||
import { bar } from "~/lib/utils/bar"
|
||||
"
|
||||
`;
|
||||
|
||||
@@ -2,6 +2,38 @@ import { expect, test } from "vitest"
|
||||
|
||||
import { transform } from "../../src/utils/transformers"
|
||||
|
||||
|
||||
test('transform nested workspace folder for utils, website/src/utils', async () => {
|
||||
expect(
|
||||
await transform({
|
||||
filename: "test.ts",
|
||||
|
||||
raw: `import { Button } from "website/src/components/ui/button"
|
||||
import { Box } from "website/src/components/box"
|
||||
import { cn } from "website/src/utils"
|
||||
`,
|
||||
config: {
|
||||
tsx: true,
|
||||
tailwind: {
|
||||
baseColor: "neutral",
|
||||
cssVariables: true,
|
||||
},
|
||||
aliases: {
|
||||
components: "website/src/components",
|
||||
lib: "website/src/lib",
|
||||
utils: "website/src/utils",
|
||||
},
|
||||
},
|
||||
})
|
||||
).toMatchInlineSnapshot(`
|
||||
"import { Button } from "website/src/components/ui/button"
|
||||
import { Box } from "website/src/components/box"
|
||||
import { cn } from "website/src/utils"
|
||||
"
|
||||
`)
|
||||
|
||||
})
|
||||
|
||||
test("transform import", async () => {
|
||||
expect(
|
||||
await transform({
|
||||
|
||||
Reference in New Issue
Block a user