UNPKG

create-palladium

Version:

A modern CLI tool to create Vite + React + TypeScript projects with various configurations

88 lines (87 loc) β€’ 3.49 kB
import inquirer from "inquirer"; import { validateProjectName, sanitizeProjectName } from "../utils/validation.js"; import { logger } from "../utils/logger.js"; export const runPrompt = async () => { logger.title("πŸš€ Palladium Project Generator"); const answers = await inquirer.prompt([ { type: "input", name: "projectName", message: "ν”„λ‘œμ νŠΈ 이름을 μž…λ ₯ν•˜μ„Έμš”:", default: "my-app", validate: (input) => { const validation = validateProjectName(input); if (!validation.isValid) { return validation.errors.join('\n'); } return true; }, filter: (input) => sanitizeProjectName(input) }, { type: "confirm", name: "useRouter", message: "React Router DOM을 μ„€μΉ˜ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?", default: true, }, { type: "confirm", name: "useReactQuery", message: "React Query (TanStack Query)λ₯Ό μ„€μΉ˜ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?", default: true, }, { type: "list", name: "stateLibrary", message: "μƒνƒœ 관리 라이브러리λ₯Ό μ„ νƒν•˜μ„Έμš”:", choices: [ { name: "Zustand (κ°€λ²Όμš΄ μƒνƒœ 관리)", value: "zustand" }, { name: "Redux Toolkit (κ°•λ ₯ν•œ μƒνƒœ 관리)", value: "redux" }, { name: "μ‚¬μš©ν•˜μ§€ μ•ŠμŒ", value: "none" } ], default: "zustand" }, { type: "list", name: "cssFramework", message: "CSS ν”„λ ˆμž„μ›Œν¬λ₯Ό μ„ νƒν•˜μ„Έμš”:", choices: [ { name: "Tailwind CSS (μœ ν‹Έλ¦¬ν‹° 퍼슀트)", value: "Tailwind CSS" }, { name: "Styled Components (CSS-in-JS)", value: "Styled Components" }, { name: "μ‚¬μš©ν•˜μ§€ μ•ŠμŒ", value: "none" } ], default: "Tailwind CSS" }, { type: "checkbox", name: "utils", message: "μΆ”κ°€ μœ ν‹Έλ¦¬ν‹°λ₯Ό μ„ νƒν•˜μ„Έμš”:", choices: [ { name: "clsx (쑰건뢀 클래슀λͺ…)", value: "clsx" }, { name: "ESLint + Prettier (μ½”λ“œ ν’ˆμ§ˆ)", value: "eslint + prettier" } ], default: ["clsx", "eslint + prettier"] }, { type: "confirm", name: "runDev", message: "ν”„λ‘œμ νŠΈ 생성 ν›„ 개발 μ„œλ²„λ₯Ό λ°”λ‘œ μ‹€ν–‰ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?", default: false, }, ]); // νƒ€μž… λ³€ν™˜ const typedAnswers = { ...answers, stateLibrary: answers.stateLibrary, cssFramework: answers.cssFramework }; // 선택 사항 μš”μ•½ ν‘œμ‹œ logger.info("μ„ νƒν•œ μ˜΅μ…˜:"); logger.step(`ν”„λ‘œμ νŠΈ 이름: ${typedAnswers.projectName}`); logger.step(`React Router: ${typedAnswers.useRouter ? 'βœ“' : 'βœ—'}`); logger.step(`React Query: ${typedAnswers.useReactQuery ? 'βœ“' : 'βœ—'}`); logger.step(`μƒνƒœ 관리: ${typedAnswers.stateLibrary === 'none' ? 'μ‚¬μš© μ•ˆ 함' : typedAnswers.stateLibrary}`); logger.step(`CSS ν”„λ ˆμž„μ›Œν¬: ${typedAnswers.cssFramework === 'none' ? 'μ‚¬μš© μ•ˆ 함' : typedAnswers.cssFramework}`); logger.step(`μœ ν‹Έλ¦¬ν‹°: ${typedAnswers.utils.join(', ')}`); return typedAnswers; };