63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import type { addOptionsSchema } from '@/src/commands/add'
|
|
import type { z } from 'zod'
|
|
import path from 'node:path'
|
|
import * as ERRORS from '@/src/utils/errors'
|
|
import { getConfig } from '@/src/utils/get-config'
|
|
import { highlighter } from '@/src/utils/highlighter'
|
|
import { logger } from '@/src/utils/logger'
|
|
import fs from 'fs-extra'
|
|
|
|
export async function preFlightAdd(options: z.infer<typeof addOptionsSchema>) {
|
|
const errors: Record<string, boolean> = {}
|
|
|
|
// Ensure target directory exists.
|
|
// Check for empty project. We assume if no package.json exists, the project is empty.
|
|
if (
|
|
!fs.existsSync(options.cwd)
|
|
|| !fs.existsSync(path.resolve(options.cwd, 'package.json'))
|
|
) {
|
|
errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true
|
|
return {
|
|
errors,
|
|
config: null,
|
|
}
|
|
}
|
|
|
|
// Check for existing components.json file.
|
|
if (!fs.existsSync(path.resolve(options.cwd, 'components.json'))) {
|
|
errors[ERRORS.MISSING_CONFIG] = true
|
|
return {
|
|
errors,
|
|
config: null,
|
|
}
|
|
}
|
|
|
|
try {
|
|
const config = await getConfig(options.cwd)
|
|
|
|
return {
|
|
errors,
|
|
config: config!,
|
|
}
|
|
}
|
|
catch (error) {
|
|
logger.break()
|
|
logger.error(
|
|
`An invalid ${highlighter.info(
|
|
'components.json',
|
|
)} file was found at ${highlighter.info(
|
|
options.cwd,
|
|
)}.\nBefore you can add components, you must create a valid ${highlighter.info(
|
|
'components.json',
|
|
)} file by running the ${highlighter.info('init')} command.`,
|
|
)
|
|
logger.error(
|
|
`Learn more at ${highlighter.info(
|
|
'https://ui.shadcn.com/docs/components-json',
|
|
)}.`,
|
|
)
|
|
logger.break()
|
|
process.exit(1)
|
|
}
|
|
}
|