From 511ae6a62e66f828b82d27275a3938561fbaebb4 Mon Sep 17 00:00:00 2001 From: zernonia Date: Tue, 18 Jun 2024 10:42:55 +0800 Subject: [PATCH] chore: enable tw prefix --- packages/cli/src/utils/transformers/index.ts | 3 +- .../transform-tw-prefix.test.ts.snap | 142 ++++++++++++ .../test/utils/transform-tw-prefix.test.ts | 210 +++++++++--------- 3 files changed, 250 insertions(+), 105 deletions(-) create mode 100644 packages/cli/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap diff --git a/packages/cli/src/utils/transformers/index.ts b/packages/cli/src/utils/transformers/index.ts index 0df8fe71..a26534e4 100644 --- a/packages/cli/src/utils/transformers/index.ts +++ b/packages/cli/src/utils/transformers/index.ts @@ -8,6 +8,7 @@ import type { registryBaseColorSchema } from '@/src/utils/registry/schema' import { transformCssVars } from '@/src/utils/transformers/transform-css-vars' import { transformImport } from '@/src/utils/transformers/transform-import' import { transformSFC } from '@/src/utils/transformers/transform-sfc' +import { transformTwPrefixes } from '@/src/utils/transformers/transform-tw-prefix' export interface TransformOpts { filename: string @@ -25,7 +26,7 @@ export type Transformer = ( const transformers: Transformer[] = [ transformCssVars, transformImport, - // transformTwPrefixes, + transformTwPrefixes, ] const project = new Project({ diff --git a/packages/cli/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap b/packages/cli/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap new file mode 100644 index 00000000..afdc26aa --- /dev/null +++ b/packages/cli/test/utils/__snapshots__/transform-tw-prefix.test.ts.snap @@ -0,0 +1,142 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`transform tailwind prefix 1`] = ` +"const testVariants = cva( + "tw-bg-background hover:tw-bg-muted tw-text-primary-foreground sm:focus:tw-text-accent-foreground", + { + variants: { + variant: { + default: + "tw-bg-primary tw-text-primary-foreground hover:tw-bg-primary/90", + }, + size: { + default: "tw-h-10 tw-px-4 tw-py-2", + }, + }, + }, +); +" +`; + +exports[`transform tailwind prefix 2`] = ` +" +" +`; + +exports[`transform tailwind prefix 3`] = ` +" +" +`; + +exports[`transform tailwind prefix 4`] = ` +" +" +`; + +exports[`transform tailwind prefix 5`] = ` +"@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 224 71.4% 4.1%; + + --muted: 220 14.3% 95.9%; + --muted-foreground: 220 8.9% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 224 71.4% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 224 71.4% 4.1%; + + --border: 220 13% 91%; + --input: 220 13% 91%; + + --primary: 220.9 39.3% 11%; + --primary-foreground: 210 20% 98%; + + --secondary: 220 14.3% 95.9%; + --secondary-foreground: 220.9 39.3% 11%; + + --accent: 220 14.3% 95.9%; + --accent-foreground: 220.9 39.3% 11%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 20% 98%; + + --ring: 217.9 10.6% 64.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71.4% 4.1%; + --foreground: 210 20% 98%; + + --muted: 215 27.9% 16.9%; + --muted-foreground: 217.9 10.6% 64.9%; + + --popover: 224 71.4% 4.1%; + --popover-foreground: 210 20% 98%; + + --card: 224 71.4% 4.1%; + --card-foreground: 210 20% 98%; + + --border: 215 27.9% 16.9%; + --input: 215 27.9% 16.9%; + + --primary: 210 20% 98%; + --primary-foreground: 220.9 39.3% 11%; + + --secondary: 215 27.9% 16.9%; + --secondary-foreground: 210 20% 98%; + + --accent: 215 27.9% 16.9%; + --accent-foreground: 210 20% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; + + --ring: 215 27.9% 16.9%; + } +} + +@layer base { + * { + @apply tw-border-border; + } + body { + @apply tw-bg-background tw-text-foreground; + } +}" +`; diff --git a/packages/cli/test/utils/transform-tw-prefix.test.ts b/packages/cli/test/utils/transform-tw-prefix.test.ts index 91d806da..7c97d6fe 100644 --- a/packages/cli/test/utils/transform-tw-prefix.test.ts +++ b/packages/cli/test/utils/transform-tw-prefix.test.ts @@ -1,111 +1,113 @@ -import { it } from 'vitest' +import { expect, it } from 'vitest' +import { transform } from '../../src/utils/transformers' +import { applyPrefixesCss } from '../../src/utils/transformers/transform-tw-prefix' it('transform tailwind prefix', async () => { - // expect( - // await transform({ - // filename: 'test.ts', - // raw: `const testVariants = cva( - // 'bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground', - // { - // variants: { - // variant: { - // default: 'bg-primary text-primary-foreground hover:bg-primary/90', - // }, - // size: { - // default: 'h-10 px-4 py-2', - // }, - // }, - // }, - // )`, - // config: { - // tailwind: { - // baseColor: 'stone', - // prefix: 'tw-', - // }, - // aliases: { - // components: '@/components', - // utils: '@/lib/utils', - // }, - // }, - // baseColor: 'stone', - // }), - // ).toMatchSnapshot() + expect( + await transform({ + filename: 'test.ts', + raw: `const testVariants = cva( + 'bg-background hover:bg-muted text-primary-foreground sm:focus:text-accent-foreground', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + }, + size: { + default: 'h-10 px-4 py-2', + }, + }, + }, + )`, + config: { + tailwind: { + baseColor: 'stone', + prefix: 'tw-', + }, + aliases: { + components: '@/components', + utils: '@/lib/utils', + }, + }, + baseColor: 'stone', + }), + ).toMatchSnapshot() - // expect( - // await transform({ - // filename: 'app.vue', - // raw: ` - // `, - // config: { - // tailwind: { - // baseColor: 'stone', - // prefix: 'tw-', - // }, - // aliases: { - // components: '@/components', - // utils: '@/lib/utils', - // }, - // }, - // baseColor: 'stone', - // }), - // ).toMatchSnapshot() + expect( + await transform({ + filename: 'app.vue', + raw: ` + `, + config: { + tailwind: { + baseColor: 'stone', + prefix: 'tw-', + }, + aliases: { + components: '@/components', + utils: '@/lib/utils', + }, + }, + baseColor: 'stone', + }), + ).toMatchSnapshot() - // expect( - // await transform({ - // filename: 'app.vue', - // raw: ` - // `, - // config: { - // tailwind: { - // baseColor: 'stone', - // cssVariables: false, - // prefix: 'tw-', - // }, - // aliases: { - // components: '@/components', - // utils: '@/lib/utils', - // }, - // }, - // baseColor: stone, - // }), - // ).toMatchSnapshot() + expect( + await transform({ + filename: 'app.vue', + raw: ` + `, + config: { + tailwind: { + baseColor: 'stone', + cssVariables: false, + prefix: 'tw-', + }, + aliases: { + components: '@/components', + utils: '@/lib/utils', + }, + }, + baseColor: 'stone', + }), + ).toMatchSnapshot() - // expect( - // await transform({ - // filename: 'app.vue', - // raw: ` - // `, - // config: { - // tailwind: { - // baseColor: 'stone', - // cssVariables: false, - // prefix: 'tw-', - // }, - // aliases: { - // components: '@/components', - // utils: '@/lib/utils', - // }, - // }, - // baseColor: stone, - // }), - // ).toMatchSnapshot() + expect( + await transform({ + filename: 'app.vue', + raw: ` + `, + 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}', - // 'tw-', - // ), - // ).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}', + 'tw-', + ), + ).toMatchSnapshot() })