mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-07-07 14:08:47 +00:00
refactor(cli): move to updaters
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
)
|
||||
}
|
||||
18
packages/cli/src/utils/updaters/update-dependencies.ts
Normal file
18
packages/cli/src/utils/updaters/update-dependencies.ts
Normal 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,
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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")) {
|
||||
@@ -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) {
|
||||
@@ -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}`,
|
||||
Reference in New Issue
Block a user