refactor(cli): move to updaters

This commit is contained in:
shadcn
2024-08-18 14:30:08 +04:00
parent 0711a3711e
commit 119bc7b044
13 changed files with 666 additions and 183 deletions

View File

@@ -12,18 +12,6 @@ import {
} from "@/src/utils/get-config"
import { getProjectConfig } from "@/src/utils/get-project-info"
import { handleError } from "@/src/utils/handle-error"
import {
INITIAL_TAILWIND_CONFIG,
INITIAL_TAILWIND_CONFIG_WITH_CSS_VARIABLES,
} from "@/src/utils/initializers/defaults"
import { initializeDependencies } from "@/src/utils/initializers/initialize-dependencies"
import { initializeDestinations } from "@/src/utils/initializers/initialize-destinations"
import {
buildTailwindThemeColorsFromCssVars,
initializeTailwindConfig,
} from "@/src/utils/initializers/initialize-tailwind-config"
import { initializeTailwindCss } from "@/src/utils/initializers/initialize-tailwind-css"
import { initializeUtils } from "@/src/utils/initializers/initialize-utils"
import { logger } from "@/src/utils/logger"
import { preFlight } from "@/src/utils/preflight"
import {
@@ -32,6 +20,14 @@ import {
getRegistryStyleIndex,
getRegistryStyles,
} from "@/src/utils/registry"
import { updateDependencies } from "@/src/utils/updaters/update-dependencies"
import { updateDestinations } from "@/src/utils/updaters/update-destinations"
import {
buildTailwindThemeColorsFromCssVars,
updateTailwindConfig,
} from "@/src/utils/updaters/update-tailwind-config"
import { updateTailwindCss } from "@/src/utils/updaters/update-tailwind-css"
import { updateUtils } from "@/src/utils/updaters/update-utils"
import chalk from "chalk"
import { Command } from "commander"
import deepmerge from "deepmerge"
@@ -307,11 +303,8 @@ export async function promptForMinimalConfig(
}
export async function runInit(config: Config) {
await initializeDestinations(config)
// Run initializers.
const initializersSpinner = ora(`Initializing project...`)?.start()
await updateDestinations(config)
const [payload, baseColor] = await Promise.all([
getRegistryStyleIndex(config.style),
getRegistryBaseColor(config.tailwind.baseColor),
@@ -331,7 +324,7 @@ export async function runInit(config: Config) {
}
// Move the css vars to the tailwind config.
if (payload.tailwind?.config) {
if (payload.tailwind?.config && baseColor.cssVars?.light) {
payload.tailwind.config = deepmerge(payload.tailwind.config, {
theme: {
extend: {
@@ -345,14 +338,16 @@ export async function runInit(config: Config) {
}
if (payload.tailwind?.config) {
await initializeTailwindConfig(config, payload.tailwind?.config)
await updateTailwindConfig(payload.tailwind?.config, config)
}
await initializeTailwindCss(config)
await initializeUtils(config)
await updateTailwindCss(config)
await updateUtils(config)
initializersSpinner?.succeed()
// Install dependencies.
const dependenciesSpinner = ora(`Installing dependencies...`)?.start()
await initializeDependencies(config)
dependenciesSpinner?.succeed()
if (payload.dependencies) {
const dependenciesSpinner = ora(`Installing dependencies...`)?.start()
await updateDependencies(payload.dependencies, config)
dependenciesSpinner?.succeed()
}
}

View File

@@ -1,29 +0,0 @@
import { Config } from "@/src/utils/get-config"
import { getPackageManager } from "@/src/utils/get-package-manager"
import { execa } from "execa"
const PROJECT_DEPENDENCIES = [
"tailwindcss-animate",
"class-variance-authority",
"clsx",
"tailwind-merge",
]
export async function initializeDependencies(config: Config) {
const packageManager = await getPackageManager(config.resolvedPaths.cwd)
const dependencies = [
...PROJECT_DEPENDENCIES,
// TODO: add support for other icon libraries.
// TODO: remove this when we migrate new-york to lucide-react.
config.style === "new-york" ? "@radix-ui/react-icons" : "lucide-react",
]
await execa(
packageManager,
[packageManager === "npm" ? "install" : "add", ...dependencies],
{
cwd: config.resolvedPaths.cwd,
}
)
}

View File

@@ -0,0 +1,18 @@
import { Config } from "@/src/utils/get-config"
import { getPackageManager } from "@/src/utils/get-package-manager"
import { execa } from "execa"
export async function updateDependencies(
dependencies: string[],
config: Config
) {
const packageManager = await getPackageManager(config.resolvedPaths.cwd)
await execa(
packageManager,
[packageManager === "npm" ? "install" : "add", ...dependencies],
{
cwd: config.resolvedPaths.cwd,
}
)
}

View File

@@ -2,7 +2,7 @@ import { existsSync, promises as fs } from "fs"
import path from "path"
import { Config } from "@/src/utils/get-config"
export async function initializeDestinations(config: Config) {
export async function updateDestinations(config: Config) {
// Ensure all resolved paths directories exist.
for (const [key, resolvedPath] of Object.entries(config.resolvedPaths)) {
// Determine if the path is a file or directory.

View File

@@ -15,14 +15,14 @@ import {
VariableStatement,
} from "ts-morph"
export type InitializerTailwindConfig = Omit<TailwindConfig, "plugins"> & {
export type UpdaterTailwindConfig = Omit<TailwindConfig, "plugins"> & {
// We only want string plugins for now.
plugins?: string[]
}
export async function initializeTailwindConfig(
config: Config,
tailwindConfig: InitializerTailwindConfig
export async function updateTailwindConfig(
tailwindConfig: UpdaterTailwindConfig,
config: Config
) {
const raw = await fs.readFile(config.resolvedPaths.tailwindConfig, "utf8")
const output = await transformTailwindConfig(raw, tailwindConfig, {
@@ -33,7 +33,7 @@ export async function initializeTailwindConfig(
export async function transformTailwindConfig(
input: string,
tailwindConfig: InitializerTailwindConfig,
tailwindConfig: UpdaterTailwindConfig,
{
config,
}: {
@@ -150,7 +150,7 @@ function addTailwindConfigProperty(
async function addTailwindConfigTheme(
configObject: ObjectLiteralExpression,
theme: InitializerTailwindConfig["theme"]
theme: UpdaterTailwindConfig["theme"]
) {
// Ensure there is a theme property.
if (!configObject.getProperty("theme")) {

View File

@@ -3,7 +3,7 @@ import { Config } from "@/src/utils/get-config"
import { getRegistryBaseColor } from "@/src/utils/registry"
import { applyPrefixesCss } from "@/src/utils/transformers/transform-tw-prefix"
export async function initializeTailwindCss(config: Config) {
export async function updateTailwindCss(config: Config) {
// Write css file.
const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)
if (baseColor) {

View File

@@ -2,7 +2,7 @@ import { promises as fs } from "fs"
import { Config } from "@/src/utils/get-config"
import * as templates from "@/src/utils/templates"
export async function initializeUtils(config: Config) {
export async function updateUtils(config: Config) {
const extension = config.tsx ? "ts" : "js"
await fs.writeFile(
`${config.resolvedPaths.utils}.${extension}`,