From ce3adfa075793a46b4fb2ff797ce87ad22bfa2cd Mon Sep 17 00:00:00 2001 From: Braden Corbold Date: Mon, 23 Sep 2024 00:47:37 -0700 Subject: [PATCH] fix(shadcn): Support single quote formatted registry files (#4870) (#4871) --- .changeset/wise-cheetahs-report.md | 5 ++++ .../utils/transformers/transform-tw-prefix.ts | 16 ++++++------- .../transform-tw-prefix.test.ts.snap | 8 +++++++ .../test/utils/transform-tw-prefix.test.ts | 23 +++++++++++++++++++ 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 .changeset/wise-cheetahs-report.md diff --git a/.changeset/wise-cheetahs-report.md b/.changeset/wise-cheetahs-report.md new file mode 100644 index 0000000000..2dba0b6745 --- /dev/null +++ b/.changeset/wise-cheetahs-report.md @@ -0,0 +1,5 @@ +--- +"shadcn": patch +--- + +support tw prefixes for registry files with single quote formatting diff --git a/packages/shadcn/src/utils/transformers/transform-tw-prefix.ts b/packages/shadcn/src/utils/transformers/transform-tw-prefix.ts index 1fed9a883f..22559abf2b 100644 --- a/packages/shadcn/src/utils/transformers/transform-tw-prefix.ts +++ b/packages/shadcn/src/utils/transformers/transform-tw-prefix.ts @@ -22,7 +22,7 @@ export const transformTwPrefixes: Transformer = async ({ if (defaultClassNames) { defaultClassNames.replaceWithText( `"${applyPrefix( - defaultClassNames.getText()?.replace(/"/g, ""), + defaultClassNames.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -46,7 +46,7 @@ export const transformTwPrefixes: Transformer = async ({ if (classNames) { classNames?.replaceWithText( `"${applyPrefix( - classNames.getText()?.replace(/"/g, ""), + classNames.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -65,7 +65,7 @@ export const transformTwPrefixes: Transformer = async ({ if (value) { value.replaceWithText( `"${applyPrefix( - value.getText()?.replace(/"/g, ""), + value.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -91,7 +91,7 @@ export const transformTwPrefixes: Transformer = async ({ .forEach((node) => { node.replaceWithText( `"${applyPrefix( - node.getText()?.replace(/"/g, ""), + node.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -101,7 +101,7 @@ export const transformTwPrefixes: Transformer = async ({ if (node.isKind(SyntaxKind.StringLiteral)) { node.replaceWithText( `"${applyPrefix( - node.getText()?.replace(/"/g, ""), + node.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -130,7 +130,7 @@ export const transformTwPrefixes: Transformer = async ({ .forEach((node) => { node.replaceWithText( `"${applyPrefix( - node.getText()?.replace(/"/g, ""), + node.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -140,7 +140,7 @@ export const transformTwPrefixes: Transformer = async ({ if (arg.isKind(SyntaxKind.StringLiteral)) { arg.replaceWithText( `"${applyPrefix( - arg.getText()?.replace(/"/g, ""), + arg.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) @@ -155,7 +155,7 @@ export const transformTwPrefixes: Transformer = async ({ if (classNames) { classNames.replaceWithText( `"${applyPrefix( - classNames.getText()?.replace(/"/g, ""), + classNames.getText()?.replace(/"|'/g, ""), config.tailwind.prefix )}"` ) diff --git a/packages/shadcn/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap b/packages/shadcn/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap index b88b1d6e3d..5019ddb6d7 100644 --- a/packages/shadcn/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap +++ b/packages/shadcn/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap @@ -25,6 +25,14 @@ export function Foo() { `; exports[`transform tailwind prefix 4`] = ` +"import * as React from "react" +export function Foo() { + return
foo
+} + " +`; + +exports[`transform tailwind prefix 5`] = ` "@tailwind base; @tailwind components; @tailwind utilities; diff --git a/packages/shadcn/test/utils/transform-tw-prefix.test.ts b/packages/shadcn/test/utils/transform-tw-prefix.test.ts index 5ba1efdc77..21529f3cbf 100644 --- a/packages/shadcn/test/utils/transform-tw-prefix.test.ts +++ b/packages/shadcn/test/utils/transform-tw-prefix.test.ts @@ -73,6 +73,29 @@ export function Foo() { }) ).toMatchSnapshot() + expect( + await transform({ + filename: "test.ts", + raw: `import * as React from "react" +export function Foo() { + return
foo
+} + `, + config: { + tailwind: { + baseColor: "stone", + cssVariables: false, + prefix: "tw-", + }, + aliases: { + components: "@/components", + utils: "@/lib/utils", + }, + }, + baseColor: stone, + }) + ).toMatchSnapshot() + expect( applyPrefixesCss( "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n \n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n \n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n \n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n \n --border: 220 13% 91%;\n --input: 220 13% 91%;\n \n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n \n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n \n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n \n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n \n --ring: 217.9 10.6% 64.9%;\n \n --radius: 0.5rem;\n }\n \n .dark {\n --background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n \n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n \n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n \n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n \n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n \n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n \n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n \n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n \n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 85.7% 97.3%;\n \n --ring: 215 27.9% 16.9%;\n }\n}\n \n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}",