UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 8.84 kB
{"version":3,"file":"setup-tailwind.cjs","sources":["../../../src/cli/commands/setup-tailwind.ts"],"sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\nimport { classListFilePath, excludeDirs, pluginName, pluginPath } from \"../consts\";\nimport { addImport } from \"../utils/add-import\";\nimport { addToConfig } from \"../utils/add-to-config\";\nimport { findFiles } from \"../utils/find-files\";\nimport { joinNormalizedPath } from \"../utils/normalize-path\";\n\nexport async function setupTailwind() {\n try {\n const found = !!((await setupTailwindV4()) || (await setupTailwindV3()));\n\n if (!found) {\n console.warn(\"Missing Tailwind CSS configuration file.\");\n }\n } catch (error) {\n console.error(\"Failed to setup Tailwind:\", error);\n }\n}\n\nasync function setupTailwindV4() {\n try {\n const cssFiles = await findFiles({\n patterns: [\"**/*.css\", \"**/*.less\", \"**/*.sass\", \"**/*.scss\"],\n excludeDirs,\n });\n\n let found = false;\n\n for (const file of cssFiles) {\n const content = await fs.readFile(file, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n let tailwindImportIndex = -1;\n let quoteType = '\"';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const singleQuoteMatch = line.match(/@import\\s+'tailwindcss'/);\n const doubleQuoteMatch = line.match(/@import\\s+\"tailwindcss\"/);\n\n if (singleQuoteMatch || doubleQuoteMatch) {\n tailwindImportIndex = i;\n quoteType = singleQuoteMatch ? \"'\" : '\"';\n\n if (!line.trim().endsWith(\";\")) {\n lines[i] = line + \";\";\n }\n\n break;\n }\n }\n\n if (tailwindImportIndex === -1) {\n continue;\n }\n\n found = true;\n\n const pluginDirectivePath = joinNormalizedPath(pluginPath, \"tailwindcss\");\n const sourceDirectivePath = path\n .join(path.relative(path.dirname(file), process.cwd()), classListFilePath)\n .replace(/\\\\/g, \"/\");\n\n const pluginRegex = new RegExp(\n `@plugin\\\\s+['\"](${pluginDirectivePath.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})['\"](;|\\\\s|$)`,\n );\n const sourceRegex = new RegExp(\n `@source\\\\s+['\"](${sourceDirectivePath.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")})['\"](;|\\\\s|$)`,\n );\n\n const hasPluginDirective = pluginRegex.test(content);\n const hasSourceDirective = sourceRegex.test(content);\n\n if (hasPluginDirective && hasSourceDirective) {\n continue;\n }\n\n const directivesToAdd = [];\n if (!hasPluginDirective) {\n const pluginDirective = `@plugin ${quoteType}${pluginDirectivePath}${quoteType};`;\n directivesToAdd.push(pluginDirective);\n }\n if (!hasSourceDirective) {\n const sourceDirective = `@source ${quoteType}${sourceDirectivePath}${quoteType};`;\n directivesToAdd.push(sourceDirective);\n }\n\n lines.splice(tailwindImportIndex + 1, 0, ...directivesToAdd);\n\n const updatedContent = lines.join(\"\\n\");\n\n console.log(`Updating ${file} with flowbite-react configuration...`);\n await fs.writeFile(file, updatedContent, \"utf-8\");\n }\n\n return found;\n } catch (error) {\n console.error(\"Failed to setup Tailwind CSS v4:\", error);\n }\n}\n\nasync function setupTailwindV3() {\n try {\n const configFiles = await findFiles({\n patterns: [\n \"tailwind.config.cjs\",\n \"tailwind.config.js\",\n \"tailwind.config.mjs\",\n \"tailwind.config.mts\",\n \"tailwind.config.ts\",\n ],\n excludeDirs,\n });\n\n for (const configFile of configFiles) {\n const content = await fs.readFile(configFile, \"utf-8\");\n\n let updatedContent = addImport({\n content,\n importName: pluginName,\n importPath: joinNormalizedPath(pluginPath, \"tailwindcss\"),\n });\n\n updatedContent = addToConfig({\n content: updatedContent,\n targetPath: \"content\",\n valueGenerator: (b) => b.stringLiteral(classListFilePath),\n });\n\n updatedContent = addToConfig({\n content: updatedContent,\n targetPath: \"plugins\",\n valueGenerator: (b) => b.identifier(pluginName),\n });\n\n if (updatedContent !== content) {\n console.log(`Updating ${configFile} with flowbite-react configuration...`);\n await fs.writeFile(configFile, updatedContent, \"utf-8\");\n }\n break;\n }\n\n return !!configFiles.length;\n } catch (error) {\n console.error(\"Failed to setup Tailwind CSS v3:\", error);\n return false;\n }\n}\n"],"names":["findFiles","excludeDirs","joinNormalizedPath","pluginPath","classListFilePath","addImport","pluginName","addToConfig"],"mappings":"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"}