import url from 'node:url' import path from 'node:path' import { resolve } from 'import-meta-resolve' import type { InlineConfig } from 'vite' import { hasFileByExtensions } from '../utils.js' /** * returns `true` if TailwindCSS config exist but no postcss.config * (if a `postcss.config` exists it will be automatically picked up by Vite) */ export function isUsingTailwindCSS (rootDir: string) { return Promise.all([ hasFileByExtensions(path.join(rootDir, 'tailwind.config')), hasFileByExtensions(path.join(rootDir, 'postcss.config')) ]).then(([hasTailwindConfig, hasPostCSSConfig]) => { return hasTailwindConfig && !hasPostCSSConfig }) } /** * add tailwind plugin if installed as dependency */ export async function optimizeForTailwindCSS (rootDir: string) { const viteConfig: InlineConfig = {} const tailwindcssPath = await resolve('tailwindcss', url.pathToFileURL(path.resolve(rootDir, 'index.js')).href) const tailwindcss = (await import(tailwindcssPath)).default viteConfig.css = { postcss: { plugins: [tailwindcss] } } return viteConfig }