create-crack
Advanced tools
@@ -323,3 +323,3 @@ #!/usr/bin/env node | ||
| try { | ||
| const eslintConfigPath = join(__dirname$1, '../package/eslint.json'); | ||
| const eslintConfigPath = join(__dirname$1, './package/eslint.json'); | ||
| const eslintConfig = getPackageJsonInfo(eslintConfigPath, false); | ||
@@ -371,3 +371,3 @@ if (!eslintConfig) { | ||
| // 从 package 目录读取对应项目类型的 JSON 文件 | ||
| const templatePath = join(__dirname$1, `../package/${projectType}.json`); | ||
| const templatePath = join(__dirname$1, `./package/${projectType}.json`); | ||
| console.log(`尝试读取模板: ${templatePath}`); | ||
@@ -403,3 +403,3 @@ const packageInfo = getPackageJsonInfo(templatePath, false); | ||
| */ function createTemplateFile(fileName) { | ||
| const filePath = join(__dirname$1, `../package/${fileName}`); | ||
| const filePath = join(__dirname$1, `./package/${fileName}`); | ||
| return readFileSync(filePath, 'utf-8'); | ||
@@ -406,0 +406,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.esm.js","sources":["../src/core/constants.ts","../src/core/file_controller.ts","../src/core/question.ts","../src/core/check_git_installation.ts","../src/core/create_success_info.ts","../src/core/package_info.ts","../src/core/create_commit_lint.ts","../src/core/package-versions.ts","../src/core/create_file.ts","../src/core/create_app.ts","../src/index.ts"],"sourcesContent":["const template: string[] = ['react-web-js', 'react-web-ts'];\n\nexport const packageVersion = '1.0.1';\n\nconst getProjectLink = (templates: string[]): Map<string, string> =>\n new Map(\n templates.map((template) => [\n template,\n `https://registry.npmjs.org/@laconic/template-${template}/-/template-${template}-${packageVersion}.tgz`,\n ]),\n );\n\nexport const projectLink: Map<string, string> = getProjectLink(template);\n","import { resolveApp } from '@verve-kit/utils';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\nimport {\n existsSync,\n rmSync,\n mkdirSync,\n copyFileSync,\n statSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport * as tar from 'tar';\n\nimport { packageVersion } from './constants';\n\n/**\n * 删除指定目录\n *\n * @param directoryPath - 要删除的目录路径(默认 \"node_modules\")\n * @param verbose - 是否显示终端提示信息\n */\nexport async function removeDirectory(directoryPath = 'node_modules', verbose = true) {\n const fullPath = resolveApp(directoryPath);\n\n if (verbose) {\n const spinner = createSpinner(kleur.bold().cyan('File being deleted...')).start();\n\n try {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n\n spinner.success({ text: kleur.bold().green('Deleted successfully') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Deletion failed') });\n console.error(error);\n }\n } else {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n }\n}\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nasync function copyFolderRecursive(sourceDir: string, destinationDir: string) {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n await copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(\n kleur.red('\\n 😡😡😡 An error occurred during the template download, please try again'),\n error,\n );\n process.exit(1);\n }\n}\n\n/**\n * 下载并解压 NPM 包模板\n *\n * @param packageURL - 包的下载链接\n * @param packageName - 包名\n * @param projectName - 创建的项目目录名\n */\nexport async function getNpmPackage(\n packageURL: string,\n packageName: string,\n projectName: string,\n): Promise<void> {\n const spinner = createSpinner(kleur.bold().cyan('Creating a project...')).start();\n\n try {\n const response = await fetch(packageURL);\n\n if (!response.ok) {\n throw new Error(`Failed to download package: ${response.statusText}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n const currentDir = resolveApp(projectName);\n const tgzPath = join(currentDir, `${packageName}-${packageVersion}.tgz`);\n writeFileSync(tgzPath, buffer);\n\n await tar.extract({\n file: tgzPath,\n cwd: currentDir,\n });\n\n unlinkSync(tgzPath);\n await copyFolderRecursive(join(projectName, 'package/template'), projectName);\n await removeDirectory(join(projectName, 'package'), false);\n\n spinner.success({ text: kleur.bold().green('Project creation successful') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Project creation failed') });\n console.error('Error:', error);\n process.exit(1);\n }\n}\n","interface ISelectType {\n value: string;\n label: string;\n hint?: string;\n}\n\nfunction createSelectType(value: string, hint?: string): ISelectType {\n const result: ISelectType = { value, label: value };\n\n if (hint !== undefined) {\n result.hint = hint;\n }\n\n return result;\n}\n\n// 优化后只保留两个可用的模板库\nexport const ProjectTypes: ISelectType[] = [\n createSelectType('react-web-js', 'React + JavaScript Web应用程序 🚀'),\n createSelectType('react-web-ts', 'React + TypeScript Web应用程序 🚀'),\n];\n\nexport const PackageManagers: ISelectType[] = [\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'pnpm', label: 'pnpm' },\n { value: 'cnpm', label: 'cnpm' },\n];\n","import { execSync } from 'node:child_process';\n\n/**\n * 检查当前系统是否已安装 Git。\n *\n * @returns `true` 表示 Git 已安装,`false` 表示未安装。\n *\n * @example\n * ```ts\n * if (checkGitInstallation()) {\n * console.log('Git is available.');\n * } else {\n * console.log('Please install Git.');\n * }\n * ```\n */\nexport default function checkGitInstallation(): boolean {\n try {\n // 尝试静默执行 git --version,如果命令执行失败将抛出异常\n execSync('git --version', { stdio: 'ignore' });\n\n return true;\n } catch {\n return false;\n }\n}\n","import boxen from 'boxen';\nimport kleur from 'kleur';\n\nexport default function createSuccessInfo(name: string, packageManage: string) {\n const END_MSG = `${kleur.blue(\n '🎉 created project ' + kleur.green(name) + ' Successfully',\n )}\\n\\n 🙏 Thanks for using Create-Crack !`;\n\n const BOXEN_CONFIG = {\n padding: 1,\n margin: { top: 1, bottom: 1 },\n borderColor: 'cyan',\n align: 'center',\n borderStyle: 'double',\n title: '🚀 Congratulations',\n titleAlignment: 'center',\n };\n\n process.stdout.write(boxen(END_MSG, BOXEN_CONFIG as any));\n\n console.log('👉 Get started with the following commands:');\n console.log(`\\n\\r\\r cd ${kleur.cyan(name)}`);\n console.log(`\\r\\r ${kleur.cyan(packageManage)} start \\r\\n`);\n}\n","import { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'node:path';\n\nimport { PackageJsonType } from '../types';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 获取并解析指定路径下的 package.json 文件。\n *\n * @param relativePath - 相对于当前模块目录的路径(当 `isFromCurrentDir` 为 `true` 时)\n * @param isFromCurrentDir - 如果为 `true`,则路径基于当前文件目录;否则视为绝对路径或调用方自定义路径\n * @returns 返回解析后的 package.json 内容对象\n *\n * @example\n * ```ts\n * const pkg = getPackageJsonInfo('../package.json', true);\n * console.log(pkg.name);\n * ```\n */\nfunction getPackageJsonInfo(relativePath: string, isFromCurrentDir: boolean): PackageJsonType {\n const filePath = isFromCurrentDir ? join(__dirname, relativePath) : relativePath;\n const content = readFileSync(filePath, 'utf-8');\n\n return JSON.parse(content) as PackageJsonType;\n}\n\nexport default getPackageJsonInfo;\n","import { join } from 'node:path';\nimport { writeFileSync, existsSync, copyFileSync, readdirSync, statSync, mkdirSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport kleur from 'kleur';\n\nimport { PackageJsonType } from '../types';\nimport getPackageJsonInfo from './package_info.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制 husky 模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 为指定项目集成 commitlint 和相关 husky 配置。\n *\n * @param projectName - 项目目录名\n *\n * @example\n * ```ts\n * createCommitlint('my-app');\n * ```\n */\nexport default function createCommitlint(projectName: string): void {\n try {\n // 复制 husky 模板文件\n const huskyTemplateSource = join(__dirname, '../template/template-husky');\n\n if (existsSync(huskyTemplateSource)) {\n copyFolderRecursive(huskyTemplateSource, projectName);\n console.log('✅ Husky 模板文件已复制');\n } else {\n console.warn('⚠️ Husky 模板目录未找到');\n\n return;\n }\n\n // 使用绝对路径\n const targetPackagePath = join(projectName, 'package.json');\n const huskyTemplatePath = join(__dirname, '../src/package/husky.json');\n\n console.log(`读取 husky 模板: ${huskyTemplatePath}`);\n console.log(`读取项目 package.json: ${targetPackagePath}`);\n\n const huskyConfig = getPackageJsonInfo(huskyTemplatePath, false);\n const projectPackageJson: PackageJsonType = getPackageJsonInfo(targetPackagePath, false);\n\n // 合并 husky 配置到项目的 package.json 中\n for (const key in huskyConfig) {\n const sourceValue = huskyConfig[key];\n const targetValue = projectPackageJson[key];\n\n if (typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n projectPackageJson[key] = {\n ...targetValue,\n ...sourceValue,\n };\n } else if (Array.isArray(sourceValue)) {\n projectPackageJson[key] = [...sourceValue, ...(targetValue ?? [])];\n } else {\n projectPackageJson[key] = sourceValue;\n }\n }\n\n writeFileSync(targetPackagePath, JSON.stringify(projectPackageJson, null, 2), 'utf-8');\n console.log('✅ Commit Lint 配置已成功合并到 package.json');\n } catch (error) {\n console.error('❌ 创建 Commit Lint 配置时出错:', error);\n process.exit(1);\n }\n}\n","/**\n * 包版本管理配置\n */\n\n// 需要动态更新版本的自有包列表\nexport const PACKAGES_TO_UPDATE = [\n '@verve-kit/react-script',\n // 可以在这里添加更多需要动态更新的自有包\n];\n","import os from 'node:os';\nimport { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport kleur from 'kleur';\n\nimport getPackageJsonInfo from './package_info.js';\nimport type { PackageJsonType } from '../types';\nimport { PACKAGES_TO_UPDATE } from './package-versions';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// 添加调试信息\nconsole.log('create_file.ts __dirname:', __dirname);\n\n/**\n * 获取 npm 包的最新版本\n *\n * @param packageName - 包名\n * @returns Promise<string> - 最新版本号,如果获取失败则返回默认版本\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n\n return `^${data.version}`;\n } catch (error) {\n console.warn(kleur.yellow(`⚠️ 无法获取 ${packageName} 的最新版本,跳过更新`));\n console.warn(kleur.gray(`错误信息: ${error}`));\n\n return null;\n }\n}\n\n/**\n * 更新包依赖的版本号为最新版本\n *\n * @param packageJson - package.json 对象\n * @returns Promise<PackageJsonType> - 更新后的 package.json 对象\n */\nasync function updatePackageVersions(packageJson: PackageJsonType): Promise<PackageJsonType> {\n console.log(kleur.cyan('🔄 正在获取最新包版本...'));\n\n const packagesToUpdate = PACKAGES_TO_UPDATE;\n\n // 并发获取所有包的最新版本\n const versionPromises = packagesToUpdate.map(async (packageName) => {\n const version = await getLatestPackageVersion(packageName);\n\n return { packageName, version };\n });\n\n try {\n const versionResults = await Promise.all(versionPromises);\n\n // 更新 dependencies\n if (packageJson.dependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.dependencies[packageName]) {\n packageJson.dependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n // 更新 devDependencies\n if (packageJson.devDependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.devDependencies[packageName]) {\n packageJson.devDependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n console.log(kleur.green('🎉 包版本更新完成'));\n } catch (error) {\n console.error(kleur.red('❌ 更新包版本时出错:'), error);\n }\n\n return packageJson;\n}\n\n/**\n * 合并 ESLint 配置到 package.json 中\n *\n * @param packageJson - 基础的 package.json 对象\n * @returns 合并了 ESLint 配置的 package.json 对象\n */\nfunction mergeEslintConfig(packageJson: PackageJsonType): PackageJsonType {\n try {\n const eslintConfigPath = join(__dirname, '../package/eslint.json');\n const eslintConfig = getPackageJsonInfo(eslintConfigPath, false);\n\n if (!eslintConfig) {\n console.warn('⚠️ ESLint 配置文件未找到,跳过 ESLint 配置合并');\n\n return packageJson;\n }\n\n // 合并 scripts\n if (eslintConfig.scripts) {\n packageJson.scripts = {\n ...packageJson.scripts,\n ...eslintConfig.scripts,\n };\n }\n\n // 合并 devDependencies\n if (eslintConfig.devDependencies) {\n packageJson.devDependencies = {\n ...packageJson.devDependencies,\n ...eslintConfig.devDependencies,\n };\n }\n\n // 合并 lint-staged\n if (eslintConfig['lint-staged']) {\n packageJson['lint-staged'] = eslintConfig['lint-staged'];\n }\n\n console.log('✅ ESLint 配置已成功合并到 package.json');\n\n return packageJson;\n } catch (error) {\n console.error('❌ 合并 ESLint 配置时出错:', error);\n\n return packageJson;\n }\n}\n\n/**\n * 创建指定类型项目的 `package.json` 对象。\n *\n * @param projectType - 模板类型(如:react、vue、node 等)\n * @param projectName - 项目名称,会被写入到 `package.json.name`\n * @param enableEslint - 是否启用 ESLint 配置\n * @returns 返回已定制的 `package.json` 对象\n *\n * @example\n * ```ts\n * const pkg = createPackageJson('react-web-ts', 'my-app', true);\n * console.log(pkg.name); // 'my-app'\n * ```\n */\nasync function createPackageJson(\n projectType: string,\n projectName: string,\n enableEslint: boolean = false,\n): Promise<PackageJsonType> {\n try {\n // 从 package 目录读取对应项目类型的 JSON 文件\n const templatePath = join(__dirname, `../package/${projectType}.json`);\n console.log(`尝试读取模板: ${templatePath}`);\n\n const packageInfo = getPackageJsonInfo(templatePath, false);\n if (!packageInfo) throw new Error('Package info is undefined');\n\n packageInfo.author = os.userInfo().username;\n packageInfo.name = projectName;\n\n // 更新包版本为最新版本\n const updatedPackageInfo = await updatePackageVersions(packageInfo);\n\n // 如果启用了 ESLint,合并 ESLint 配置\n if (enableEslint) {\n return mergeEslintConfig(updatedPackageInfo);\n }\n\n return updatedPackageInfo;\n } catch (error) {\n console.error(`❌ Failed to create package.json for \"${projectType}\"`);\n console.error(error);\n process.exit(1);\n }\n}\n\n/**\n * 读取模板目录中的任意 JSON 文件为字符串内容。\n *\n * @param fileName - 模板文件名(例如:`config.json`)\n * @returns 返回文件内容的字符串\n *\n * @example\n * ```ts\n * const config = createTemplateFile('vite.config.json');\n * console.log(JSON.parse(config));\n * ```\n */\nfunction createTemplateFile(fileName: string): string {\n const filePath = join(__dirname, `../package/${fileName}`);\n\n return readFileSync(filePath, 'utf-8');\n}\n\nexport { createPackageJson, createTemplateFile };\n","import { resolveApp } from '@verve-kit/utils';\nimport { existsSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync } from 'node:fs';\nimport { execSync, exec } from 'node:child_process';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { confirm, intro, select } from '@clack/prompts';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\n\nimport { removeDirectory } from './file_controller';\nimport { ProjectTypes, PackageManagers } from './question';\nimport isGitInstalled from './check_git_installation';\nimport createSuccessInfo from './create_success_info';\nimport createCommitlint from './create_commit_lint';\nimport { createPackageJson, createTemplateFile } from './create_file';\n\n// 获取当前文件的目录路径\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 设置 Ctrl+C 退出监听(仅限终端环境)\n */\nif (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.on('data', (key) => {\n if (key[0] === 3) {\n console.log('⌨️ Ctrl+C pressed - Exiting the program');\n process.exit(1);\n }\n });\n}\n\n/**\n * 创建项目根目录,如有同名文件则询问是否覆盖\n *\n * @param name - 项目名\n * @param force - 是否强制覆盖\n */\nconst makeDirectory = async (name: string, { force }: { force: boolean }) => {\n const root = resolveApp(name);\n\n if (existsSync(root) && !force) {\n const shouldOverwrite = await confirm({\n message: 'Target directory already exists. Overwrite?',\n });\n if (!shouldOverwrite) process.exit(1);\n await removeDirectory(name, true);\n }\n\n mkdirSync(root, { recursive: true });\n};\n\n/**\n * 收集用户交互选择的信息\n */\nconst getTableInfo = async (options: any) => {\n let projectType: string;\n let packageManager: string;\n let enableEslint: boolean;\n let commitLint: boolean;\n\n // 检查是否提供了模板参数\n if (options.template) {\n if (!['react-web-js', 'react-web-ts'].includes(options.template)) {\n console.error(kleur.red(`❌ 无效的模板类型: ${options.template}`));\n console.error(kleur.yellow('可用的模板: react-web-js, react-web-ts'));\n process.exit(1);\n }\n\n projectType = options.template;\n } else {\n projectType = (await select({\n message: '🎯 选择项目类型:',\n options: ProjectTypes,\n })) as string;\n }\n\n // 检查是否提供了包管理器参数\n if (options.packageManager) {\n if (!['npm', 'yarn', 'pnpm', 'cnpm'].includes(options.packageManager)) {\n console.error(kleur.red(`❌ 无效的包管理器: ${options.packageManager}`));\n console.error(kleur.yellow('可用的包管理器: npm, yarn, pnpm, cnpm'));\n process.exit(1);\n }\n\n packageManager = options.packageManager;\n } else {\n packageManager = (await select({\n message: '📦 选择包管理器:',\n options: PackageManagers,\n })) as string;\n }\n\n // 检查 ESLint 选项\n if (options.eslint !== undefined) {\n enableEslint = options.eslint;\n } else {\n enableEslint = (await confirm({\n message: '🔍 是否启用 ESLint 代码检查?',\n })) as boolean;\n }\n\n // 检查 Commit Lint 选项\n if (options.commitLint !== undefined) {\n commitLint = options.commitLint;\n } else {\n commitLint = (await confirm({\n message: '📝 是否启用 Commit Lint 配置?',\n })) as boolean;\n }\n\n return { projectType, packageManager, enableEslint, commitLint };\n};\n\n/**\n * 创建 ESLint 配置文件\n *\n * @param root - 项目根目录路径\n */\nconst createEslintConfig = (root: string) => {\n try {\n const eslintConfigSource = join(__dirname, '../template/eslint/eslint.config.mjs');\n const eslintConfigDest = join(root, 'eslint.config.mjs');\n\n if (existsSync(eslintConfigSource)) {\n copyFileSync(eslintConfigSource, eslintConfigDest);\n console.log('✅ ESLint 配置文件已创建');\n } else {\n console.warn('⚠️ ESLint 配置模板文件未找到');\n }\n } catch (error) {\n console.error('❌ 创建 ESLint 配置文件时出错:', error);\n }\n};\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 复制本地模板到项目目录\n *\n * @param projectType - 项目类型\n * @param projectRoot - 项目根目录\n */\nconst copyLocalTemplate = (projectType: string, projectRoot: string) => {\n const spinner = createSpinner(kleur.bold().cyan('正在复制项目模板...')).start();\n\n try {\n const templateSource = join(__dirname, `../template/template-${projectType}`);\n\n if (!existsSync(templateSource)) {\n throw new Error(`模板目录不存在: ${templateSource}`);\n }\n\n copyFolderRecursive(templateSource, projectRoot);\n spinner.success({ text: kleur.bold().green('✅ 项目模板复制成功') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('❌ 项目模板复制失败') });\n console.error('Error:', error);\n process.exit(1);\n }\n};\n\n/**\n * 创建项目主流程\n *\n * @param name - 项目名\n * @param options - 控制参数\n */\nexport default async function createApp(name: string, options: any) {\n intro(kleur.green(' 🚧 Create Your App - 项目脚手架工具 '));\n\n const root = resolveApp(name);\n await makeDirectory(name, options);\n\n // 检查是否使用了命令行参数(非交互模式)\n const isNonInteractive =\n options.template ||\n options.packageManager ||\n options.eslint !== undefined ||\n options.commitLint !== undefined;\n\n if (!isNonInteractive) {\n console.log(kleur.cyan('\\n📋 请选择项目配置:\\n'));\n }\n\n const { projectType, packageManager, enableEslint, commitLint } = await getTableInfo(options);\n\n console.log(kleur.yellow('\\n🔧 正在创建项目...'));\n console.log(kleur.gray(`📁 项目名称: ${name}`));\n console.log(kleur.gray(`🎯 项目类型: ${projectType}`));\n console.log(kleur.gray(`📦 包管理器: ${packageManager}`));\n console.log(kleur.gray(`🔍 ESLint: ${enableEslint ? '启用' : '禁用'}`));\n console.log(kleur.gray(`📝 Commit Lint: ${commitLint ? '启用' : '禁用'}`));\n\n // 写入 package.json\n const pkg = await createPackageJson(projectType, name, enableEslint);\n writeFileSync(join(root, 'package.json'), JSON.stringify(pkg, null, 2));\n\n // 写入 .gitignore\n writeFileSync(join(root, '.gitignore'), createTemplateFile('gitignore'));\n\n // 复制本地模板文件\n copyLocalTemplate(projectType, root);\n\n // 注入 lint 配置\n if (commitLint) {\n createCommitlint(root);\n }\n\n // 创建 ESLint 配置文件\n if (enableEslint) {\n createEslintConfig(root);\n }\n\n // 安装依赖\n const spinner = createSpinner(kleur.bold('Installing dependencies...')).start();\n exec(`${packageManager} install`, { cwd: root }, (err) => {\n if (err) {\n spinner.error({ text: kleur.red('Failed to install dependencies') });\n console.error(err);\n process.exit(1);\n } else {\n spinner.success({ text: kleur.green('✅ Project initialization complete') });\n\n // 显示项目创建成功的详细信息\n console.log(kleur.green('\\n🎉 项目创建成功!\\n'));\n console.log(kleur.cyan('📦 已安装的功能:'));\n console.log(\n kleur.gray(\n ` • ${projectType === 'react-web-ts' ? 'React + TypeScript' : 'React + JavaScript'} 项目模板`,\n ),\n );\n\n if (enableEslint) {\n console.log(kleur.gray(' • ESLint 代码检查工具'));\n }\n\n if (commitLint) {\n console.log(kleur.gray(' • Commit Lint 提交规范'));\n }\n\n createSuccessInfo(name, packageManager);\n }\n });\n\n // 初始化 Git 仓库\n if (isGitInstalled()) {\n execSync('git init', { cwd: root });\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport kleur from 'kleur';\n\nimport createApp from './core/create_app.js';\nimport getPackageJsonInfo from './core/package_info.js';\n\nconst program = new Command();\n\nprogram\n .version(kleur.green(getPackageJsonInfo('../package.json', true).version || '1.0.0'))\n .arguments('<project-name>')\n .description(kleur.cyan('Create a directory for your project files'))\n .option('-f, --force', 'Overwrite target directory if it exists')\n .option('-t, --template <template>', 'Project template (react-web-js | react-web-ts)')\n .option('-p, --package-manager <manager>', 'Package manager (npm | yarn | pnpm | cnpm)')\n .option('-e, --eslint', 'Enable ESLint configuration')\n .option('-c, --commit-lint', 'Enable Commit Lint configuration')\n .option('--no-eslint', 'Disable ESLint configuration')\n .option('--no-commit-lint', 'Disable Commit Lint configuration')\n .addHelpText(\n 'after',\n `\n\n${kleur.yellow('Examples:')}\n ${kleur.gray('# Interactive mode (default)')}\n $ create-crack my-app\n\n ${kleur.gray('# Non-interactive mode with all options')}\n $ create-crack my-app -t react-web-ts -p pnpm -e -c\n\n ${kleur.gray('# Create React JS project with npm and ESLint')}\n $ create-crack my-app --template react-web-js --package-manager npm --eslint\n\n ${kleur.gray('# Create project without ESLint and Commit Lint')}\n $ create-crack my-app -t react-web-ts -p yarn --no-eslint --no-commit-lint\n\n${kleur.yellow('Available Templates:')}\n ${kleur.cyan('react-web-js')} - React + JavaScript Web应用程序\n ${kleur.cyan('react-web-ts')} - React + TypeScript Web应用程序\n\n${kleur.yellow('Available Package Managers:')}\n ${kleur.cyan('npm')} - Node Package Manager\n ${kleur.cyan('yarn')} - Yarn Package Manager \n ${kleur.cyan('pnpm')} - PNPM Package Manager\n ${kleur.cyan('cnpm')} - CNPM Package Manager\n`,\n )\n .action((name, options) => {\n createApp(name, options);\n })\n .parse(process.argv);\n"],"names":["template","packageVersion","getProjectLink","templates","Map","map","removeDirectory","directoryPath","verbose","fullPath","resolveApp","spinner","createSpinner","kleur","bold","cyan","start","existsSync","rmSync","recursive","force","success","text","green","error","red","console","createSelectType","value","hint","result","label","undefined","ProjectTypes","PackageManagers","checkGitInstallation","execSync","stdio","createSuccessInfo","name","packageManage","END_MSG","blue","BOXEN_CONFIG","padding","margin","top","bottom","borderColor","align","borderStyle","title","titleAlignment","process","stdout","write","boxen","log","__filename","fileURLToPath","url","__dirname","dirname","getPackageJsonInfo","relativePath","isFromCurrentDir","filePath","join","content","readFileSync","JSON","parse","copyFolderRecursive","sourceDir","destinationDir","mkdirSync","items","readdirSync","item","src","dest","stat","statSync","isDirectory","copyFileSync","exit","createCommitlint","projectName","huskyTemplateSource","warn","targetPackagePath","huskyTemplatePath","huskyConfig","projectPackageJson","key","sourceValue","targetValue","Array","isArray","writeFileSync","stringify","PACKAGES_TO_UPDATE","getLatestPackageVersion","packageName","response","fetch","ok","Error","status","data","json","version","yellow","gray","updatePackageVersions","packageJson","packagesToUpdate","versionPromises","versionResults","Promise","all","dependencies","devDependencies","mergeEslintConfig","eslintConfigPath","eslintConfig","scripts","createPackageJson","projectType","enableEslint","templatePath","packageInfo","author","os","userInfo","username","updatedPackageInfo","createTemplateFile","fileName","stdin","isTTY","setRawMode","on","makeDirectory","root","shouldOverwrite","confirm","message","getTableInfo","options","packageManager","commitLint","includes","select","eslint","createEslintConfig","eslintConfigSource","eslintConfigDest","copyLocalTemplate","projectRoot","templateSource","createApp","intro","isNonInteractive","pkg","exec","cwd","err","isGitInstalled","program","Command","arguments","description","option","addHelpText","action","argv"],"mappings":"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"} | ||
| {"version":3,"file":"index.esm.js","sources":["../src/core/constants.ts","../src/core/file_controller.ts","../src/core/question.ts","../src/core/check_git_installation.ts","../src/core/create_success_info.ts","../src/core/package_info.ts","../src/core/create_commit_lint.ts","../src/core/package-versions.ts","../src/core/create_file.ts","../src/core/create_app.ts","../src/index.ts"],"sourcesContent":["const template: string[] = ['react-web-js', 'react-web-ts'];\n\nexport const packageVersion = '1.0.1';\n\nconst getProjectLink = (templates: string[]): Map<string, string> =>\n new Map(\n templates.map((template) => [\n template,\n `https://registry.npmjs.org/@laconic/template-${template}/-/template-${template}-${packageVersion}.tgz`,\n ]),\n );\n\nexport const projectLink: Map<string, string> = getProjectLink(template);\n","import { resolveApp } from '@verve-kit/utils';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\nimport {\n existsSync,\n rmSync,\n mkdirSync,\n copyFileSync,\n statSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport * as tar from 'tar';\n\nimport { packageVersion } from './constants';\n\n/**\n * 删除指定目录\n *\n * @param directoryPath - 要删除的目录路径(默认 \"node_modules\")\n * @param verbose - 是否显示终端提示信息\n */\nexport async function removeDirectory(directoryPath = 'node_modules', verbose = true) {\n const fullPath = resolveApp(directoryPath);\n\n if (verbose) {\n const spinner = createSpinner(kleur.bold().cyan('File being deleted...')).start();\n\n try {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n\n spinner.success({ text: kleur.bold().green('Deleted successfully') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Deletion failed') });\n console.error(error);\n }\n } else {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n }\n}\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nasync function copyFolderRecursive(sourceDir: string, destinationDir: string) {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n await copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(\n kleur.red('\\n 😡😡😡 An error occurred during the template download, please try again'),\n error,\n );\n process.exit(1);\n }\n}\n\n/**\n * 下载并解压 NPM 包模板\n *\n * @param packageURL - 包的下载链接\n * @param packageName - 包名\n * @param projectName - 创建的项目目录名\n */\nexport async function getNpmPackage(\n packageURL: string,\n packageName: string,\n projectName: string,\n): Promise<void> {\n const spinner = createSpinner(kleur.bold().cyan('Creating a project...')).start();\n\n try {\n const response = await fetch(packageURL);\n\n if (!response.ok) {\n throw new Error(`Failed to download package: ${response.statusText}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n const currentDir = resolveApp(projectName);\n const tgzPath = join(currentDir, `${packageName}-${packageVersion}.tgz`);\n writeFileSync(tgzPath, buffer);\n\n await tar.extract({\n file: tgzPath,\n cwd: currentDir,\n });\n\n unlinkSync(tgzPath);\n await copyFolderRecursive(join(projectName, 'package/template'), projectName);\n await removeDirectory(join(projectName, 'package'), false);\n\n spinner.success({ text: kleur.bold().green('Project creation successful') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Project creation failed') });\n console.error('Error:', error);\n process.exit(1);\n }\n}\n","interface ISelectType {\n value: string;\n label: string;\n hint?: string;\n}\n\nfunction createSelectType(value: string, hint?: string): ISelectType {\n const result: ISelectType = { value, label: value };\n\n if (hint !== undefined) {\n result.hint = hint;\n }\n\n return result;\n}\n\n// 优化后只保留两个可用的模板库\nexport const ProjectTypes: ISelectType[] = [\n createSelectType('react-web-js', 'React + JavaScript Web应用程序 🚀'),\n createSelectType('react-web-ts', 'React + TypeScript Web应用程序 🚀'),\n];\n\nexport const PackageManagers: ISelectType[] = [\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'pnpm', label: 'pnpm' },\n { value: 'cnpm', label: 'cnpm' },\n];\n","import { execSync } from 'node:child_process';\n\n/**\n * 检查当前系统是否已安装 Git。\n *\n * @returns `true` 表示 Git 已安装,`false` 表示未安装。\n *\n * @example\n * ```ts\n * if (checkGitInstallation()) {\n * console.log('Git is available.');\n * } else {\n * console.log('Please install Git.');\n * }\n * ```\n */\nexport default function checkGitInstallation(): boolean {\n try {\n // 尝试静默执行 git --version,如果命令执行失败将抛出异常\n execSync('git --version', { stdio: 'ignore' });\n\n return true;\n } catch {\n return false;\n }\n}\n","import boxen from 'boxen';\nimport kleur from 'kleur';\n\nexport default function createSuccessInfo(name: string, packageManage: string) {\n const END_MSG = `${kleur.blue(\n '🎉 created project ' + kleur.green(name) + ' Successfully',\n )}\\n\\n 🙏 Thanks for using Create-Crack !`;\n\n const BOXEN_CONFIG = {\n padding: 1,\n margin: { top: 1, bottom: 1 },\n borderColor: 'cyan',\n align: 'center',\n borderStyle: 'double',\n title: '🚀 Congratulations',\n titleAlignment: 'center',\n };\n\n process.stdout.write(boxen(END_MSG, BOXEN_CONFIG as any));\n\n console.log('👉 Get started with the following commands:');\n console.log(`\\n\\r\\r cd ${kleur.cyan(name)}`);\n console.log(`\\r\\r ${kleur.cyan(packageManage)} start \\r\\n`);\n}\n","import { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'node:path';\n\nimport { PackageJsonType } from '../types';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 获取并解析指定路径下的 package.json 文件。\n *\n * @param relativePath - 相对于当前模块目录的路径(当 `isFromCurrentDir` 为 `true` 时)\n * @param isFromCurrentDir - 如果为 `true`,则路径基于当前文件目录;否则视为绝对路径或调用方自定义路径\n * @returns 返回解析后的 package.json 内容对象\n *\n * @example\n * ```ts\n * const pkg = getPackageJsonInfo('../package.json', true);\n * console.log(pkg.name);\n * ```\n */\nfunction getPackageJsonInfo(relativePath: string, isFromCurrentDir: boolean): PackageJsonType {\n const filePath = isFromCurrentDir ? join(__dirname, relativePath) : relativePath;\n const content = readFileSync(filePath, 'utf-8');\n\n return JSON.parse(content) as PackageJsonType;\n}\n\nexport default getPackageJsonInfo;\n","import { join } from 'node:path';\nimport { writeFileSync, existsSync, copyFileSync, readdirSync, statSync, mkdirSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport kleur from 'kleur';\n\nimport { PackageJsonType } from '../types';\nimport getPackageJsonInfo from './package_info.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制 husky 模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 为指定项目集成 commitlint 和相关 husky 配置。\n *\n * @param projectName - 项目目录名\n *\n * @example\n * ```ts\n * createCommitlint('my-app');\n * ```\n */\nexport default function createCommitlint(projectName: string): void {\n try {\n // 复制 husky 模板文件\n const huskyTemplateSource = join(__dirname, '../template/template-husky');\n\n if (existsSync(huskyTemplateSource)) {\n copyFolderRecursive(huskyTemplateSource, projectName);\n console.log('✅ Husky 模板文件已复制');\n } else {\n console.warn('⚠️ Husky 模板目录未找到');\n\n return;\n }\n\n // 使用绝对路径\n const targetPackagePath = join(projectName, 'package.json');\n const huskyTemplatePath = join(__dirname, '../src/package/husky.json');\n\n console.log(`读取 husky 模板: ${huskyTemplatePath}`);\n console.log(`读取项目 package.json: ${targetPackagePath}`);\n\n const huskyConfig = getPackageJsonInfo(huskyTemplatePath, false);\n const projectPackageJson: PackageJsonType = getPackageJsonInfo(targetPackagePath, false);\n\n // 合并 husky 配置到项目的 package.json 中\n for (const key in huskyConfig) {\n const sourceValue = huskyConfig[key];\n const targetValue = projectPackageJson[key];\n\n if (typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n projectPackageJson[key] = {\n ...targetValue,\n ...sourceValue,\n };\n } else if (Array.isArray(sourceValue)) {\n projectPackageJson[key] = [...sourceValue, ...(targetValue ?? [])];\n } else {\n projectPackageJson[key] = sourceValue;\n }\n }\n\n writeFileSync(targetPackagePath, JSON.stringify(projectPackageJson, null, 2), 'utf-8');\n console.log('✅ Commit Lint 配置已成功合并到 package.json');\n } catch (error) {\n console.error('❌ 创建 Commit Lint 配置时出错:', error);\n process.exit(1);\n }\n}\n","/**\n * 包版本管理配置\n */\n\n// 需要动态更新版本的自有包列表\nexport const PACKAGES_TO_UPDATE = [\n '@verve-kit/react-script',\n // 可以在这里添加更多需要动态更新的自有包\n];\n","import os from 'node:os';\nimport { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport kleur from 'kleur';\n\nimport getPackageJsonInfo from './package_info.js';\nimport type { PackageJsonType } from '../types';\nimport { PACKAGES_TO_UPDATE } from './package-versions';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// 添加调试信息\nconsole.log('create_file.ts __dirname:', __dirname);\n\n/**\n * 获取 npm 包的最新版本\n *\n * @param packageName - 包名\n * @returns Promise<string> - 最新版本号,如果获取失败则返回默认版本\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n\n return `^${data.version}`;\n } catch (error) {\n console.warn(kleur.yellow(`⚠️ 无法获取 ${packageName} 的最新版本,跳过更新`));\n console.warn(kleur.gray(`错误信息: ${error}`));\n\n return null;\n }\n}\n\n/**\n * 更新包依赖的版本号为最新版本\n *\n * @param packageJson - package.json 对象\n * @returns Promise<PackageJsonType> - 更新后的 package.json 对象\n */\nasync function updatePackageVersions(packageJson: PackageJsonType): Promise<PackageJsonType> {\n console.log(kleur.cyan('🔄 正在获取最新包版本...'));\n\n const packagesToUpdate = PACKAGES_TO_UPDATE;\n\n // 并发获取所有包的最新版本\n const versionPromises = packagesToUpdate.map(async (packageName) => {\n const version = await getLatestPackageVersion(packageName);\n\n return { packageName, version };\n });\n\n try {\n const versionResults = await Promise.all(versionPromises);\n\n // 更新 dependencies\n if (packageJson.dependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.dependencies[packageName]) {\n packageJson.dependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n // 更新 devDependencies\n if (packageJson.devDependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.devDependencies[packageName]) {\n packageJson.devDependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n console.log(kleur.green('🎉 包版本更新完成'));\n } catch (error) {\n console.error(kleur.red('❌ 更新包版本时出错:'), error);\n }\n\n return packageJson;\n}\n\n/**\n * 合并 ESLint 配置到 package.json 中\n *\n * @param packageJson - 基础的 package.json 对象\n * @returns 合并了 ESLint 配置的 package.json 对象\n */\nfunction mergeEslintConfig(packageJson: PackageJsonType): PackageJsonType {\n try {\n const eslintConfigPath = join(__dirname, './package/eslint.json');\n const eslintConfig = getPackageJsonInfo(eslintConfigPath, false);\n\n if (!eslintConfig) {\n console.warn('⚠️ ESLint 配置文件未找到,跳过 ESLint 配置合并');\n\n return packageJson;\n }\n\n // 合并 scripts\n if (eslintConfig.scripts) {\n packageJson.scripts = {\n ...packageJson.scripts,\n ...eslintConfig.scripts,\n };\n }\n\n // 合并 devDependencies\n if (eslintConfig.devDependencies) {\n packageJson.devDependencies = {\n ...packageJson.devDependencies,\n ...eslintConfig.devDependencies,\n };\n }\n\n // 合并 lint-staged\n if (eslintConfig['lint-staged']) {\n packageJson['lint-staged'] = eslintConfig['lint-staged'];\n }\n\n console.log('✅ ESLint 配置已成功合并到 package.json');\n\n return packageJson;\n } catch (error) {\n console.error('❌ 合并 ESLint 配置时出错:', error);\n\n return packageJson;\n }\n}\n\n/**\n * 创建指定类型项目的 `package.json` 对象。\n *\n * @param projectType - 模板类型(如:react、vue、node 等)\n * @param projectName - 项目名称,会被写入到 `package.json.name`\n * @param enableEslint - 是否启用 ESLint 配置\n * @returns 返回已定制的 `package.json` 对象\n *\n * @example\n * ```ts\n * const pkg = createPackageJson('react-web-ts', 'my-app', true);\n * console.log(pkg.name); // 'my-app'\n * ```\n */\nasync function createPackageJson(\n projectType: string,\n projectName: string,\n enableEslint: boolean = false,\n): Promise<PackageJsonType> {\n try {\n // 从 package 目录读取对应项目类型的 JSON 文件\n const templatePath = join(__dirname, `./package/${projectType}.json`);\n console.log(`尝试读取模板: ${templatePath}`);\n\n const packageInfo = getPackageJsonInfo(templatePath, false);\n if (!packageInfo) throw new Error('Package info is undefined');\n\n packageInfo.author = os.userInfo().username;\n packageInfo.name = projectName;\n\n // 更新包版本为最新版本\n const updatedPackageInfo = await updatePackageVersions(packageInfo);\n\n // 如果启用了 ESLint,合并 ESLint 配置\n if (enableEslint) {\n return mergeEslintConfig(updatedPackageInfo);\n }\n\n return updatedPackageInfo;\n } catch (error) {\n console.error(`❌ Failed to create package.json for \"${projectType}\"`);\n console.error(error);\n process.exit(1);\n }\n}\n\n/**\n * 读取模板目录中的任意 JSON 文件为字符串内容。\n *\n * @param fileName - 模板文件名(例如:`config.json`)\n * @returns 返回文件内容的字符串\n *\n * @example\n * ```ts\n * const config = createTemplateFile('vite.config.json');\n * console.log(JSON.parse(config));\n * ```\n */\nfunction createTemplateFile(fileName: string): string {\n const filePath = join(__dirname, `./package/${fileName}`);\n\n return readFileSync(filePath, 'utf-8');\n}\n\nexport { createPackageJson, createTemplateFile };\n","import { resolveApp } from '@verve-kit/utils';\nimport { existsSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync } from 'node:fs';\nimport { execSync, exec } from 'node:child_process';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { confirm, intro, select } from '@clack/prompts';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\n\nimport { removeDirectory } from './file_controller';\nimport { ProjectTypes, PackageManagers } from './question';\nimport isGitInstalled from './check_git_installation';\nimport createSuccessInfo from './create_success_info';\nimport createCommitlint from './create_commit_lint';\nimport { createPackageJson, createTemplateFile } from './create_file';\n\n// 获取当前文件的目录路径\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 设置 Ctrl+C 退出监听(仅限终端环境)\n */\nif (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.on('data', (key) => {\n if (key[0] === 3) {\n console.log('⌨️ Ctrl+C pressed - Exiting the program');\n process.exit(1);\n }\n });\n}\n\n/**\n * 创建项目根目录,如有同名文件则询问是否覆盖\n *\n * @param name - 项目名\n * @param force - 是否强制覆盖\n */\nconst makeDirectory = async (name: string, { force }: { force: boolean }) => {\n const root = resolveApp(name);\n\n if (existsSync(root) && !force) {\n const shouldOverwrite = await confirm({\n message: 'Target directory already exists. Overwrite?',\n });\n if (!shouldOverwrite) process.exit(1);\n await removeDirectory(name, true);\n }\n\n mkdirSync(root, { recursive: true });\n};\n\n/**\n * 收集用户交互选择的信息\n */\nconst getTableInfo = async (options: any) => {\n let projectType: string;\n let packageManager: string;\n let enableEslint: boolean;\n let commitLint: boolean;\n\n // 检查是否提供了模板参数\n if (options.template) {\n if (!['react-web-js', 'react-web-ts'].includes(options.template)) {\n console.error(kleur.red(`❌ 无效的模板类型: ${options.template}`));\n console.error(kleur.yellow('可用的模板: react-web-js, react-web-ts'));\n process.exit(1);\n }\n\n projectType = options.template;\n } else {\n projectType = (await select({\n message: '🎯 选择项目类型:',\n options: ProjectTypes,\n })) as string;\n }\n\n // 检查是否提供了包管理器参数\n if (options.packageManager) {\n if (!['npm', 'yarn', 'pnpm', 'cnpm'].includes(options.packageManager)) {\n console.error(kleur.red(`❌ 无效的包管理器: ${options.packageManager}`));\n console.error(kleur.yellow('可用的包管理器: npm, yarn, pnpm, cnpm'));\n process.exit(1);\n }\n\n packageManager = options.packageManager;\n } else {\n packageManager = (await select({\n message: '📦 选择包管理器:',\n options: PackageManagers,\n })) as string;\n }\n\n // 检查 ESLint 选项\n if (options.eslint !== undefined) {\n enableEslint = options.eslint;\n } else {\n enableEslint = (await confirm({\n message: '🔍 是否启用 ESLint 代码检查?',\n })) as boolean;\n }\n\n // 检查 Commit Lint 选项\n if (options.commitLint !== undefined) {\n commitLint = options.commitLint;\n } else {\n commitLint = (await confirm({\n message: '📝 是否启用 Commit Lint 配置?',\n })) as boolean;\n }\n\n return { projectType, packageManager, enableEslint, commitLint };\n};\n\n/**\n * 创建 ESLint 配置文件\n *\n * @param root - 项目根目录路径\n */\nconst createEslintConfig = (root: string) => {\n try {\n const eslintConfigSource = join(__dirname, '../template/eslint/eslint.config.mjs');\n const eslintConfigDest = join(root, 'eslint.config.mjs');\n\n if (existsSync(eslintConfigSource)) {\n copyFileSync(eslintConfigSource, eslintConfigDest);\n console.log('✅ ESLint 配置文件已创建');\n } else {\n console.warn('⚠️ ESLint 配置模板文件未找到');\n }\n } catch (error) {\n console.error('❌ 创建 ESLint 配置文件时出错:', error);\n }\n};\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 复制本地模板到项目目录\n *\n * @param projectType - 项目类型\n * @param projectRoot - 项目根目录\n */\nconst copyLocalTemplate = (projectType: string, projectRoot: string) => {\n const spinner = createSpinner(kleur.bold().cyan('正在复制项目模板...')).start();\n\n try {\n const templateSource = join(__dirname, `../template/template-${projectType}`);\n\n if (!existsSync(templateSource)) {\n throw new Error(`模板目录不存在: ${templateSource}`);\n }\n\n copyFolderRecursive(templateSource, projectRoot);\n spinner.success({ text: kleur.bold().green('✅ 项目模板复制成功') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('❌ 项目模板复制失败') });\n console.error('Error:', error);\n process.exit(1);\n }\n};\n\n/**\n * 创建项目主流程\n *\n * @param name - 项目名\n * @param options - 控制参数\n */\nexport default async function createApp(name: string, options: any) {\n intro(kleur.green(' 🚧 Create Your App - 项目脚手架工具 '));\n\n const root = resolveApp(name);\n await makeDirectory(name, options);\n\n // 检查是否使用了命令行参数(非交互模式)\n const isNonInteractive =\n options.template ||\n options.packageManager ||\n options.eslint !== undefined ||\n options.commitLint !== undefined;\n\n if (!isNonInteractive) {\n console.log(kleur.cyan('\\n📋 请选择项目配置:\\n'));\n }\n\n const { projectType, packageManager, enableEslint, commitLint } = await getTableInfo(options);\n\n console.log(kleur.yellow('\\n🔧 正在创建项目...'));\n console.log(kleur.gray(`📁 项目名称: ${name}`));\n console.log(kleur.gray(`🎯 项目类型: ${projectType}`));\n console.log(kleur.gray(`📦 包管理器: ${packageManager}`));\n console.log(kleur.gray(`🔍 ESLint: ${enableEslint ? '启用' : '禁用'}`));\n console.log(kleur.gray(`📝 Commit Lint: ${commitLint ? '启用' : '禁用'}`));\n\n // 写入 package.json\n const pkg = await createPackageJson(projectType, name, enableEslint);\n writeFileSync(join(root, 'package.json'), JSON.stringify(pkg, null, 2));\n\n // 写入 .gitignore\n writeFileSync(join(root, '.gitignore'), createTemplateFile('gitignore'));\n\n // 复制本地模板文件\n copyLocalTemplate(projectType, root);\n\n // 注入 lint 配置\n if (commitLint) {\n createCommitlint(root);\n }\n\n // 创建 ESLint 配置文件\n if (enableEslint) {\n createEslintConfig(root);\n }\n\n // 安装依赖\n const spinner = createSpinner(kleur.bold('Installing dependencies...')).start();\n exec(`${packageManager} install`, { cwd: root }, (err) => {\n if (err) {\n spinner.error({ text: kleur.red('Failed to install dependencies') });\n console.error(err);\n process.exit(1);\n } else {\n spinner.success({ text: kleur.green('✅ Project initialization complete') });\n\n // 显示项目创建成功的详细信息\n console.log(kleur.green('\\n🎉 项目创建成功!\\n'));\n console.log(kleur.cyan('📦 已安装的功能:'));\n console.log(\n kleur.gray(\n ` • ${projectType === 'react-web-ts' ? 'React + TypeScript' : 'React + JavaScript'} 项目模板`,\n ),\n );\n\n if (enableEslint) {\n console.log(kleur.gray(' • ESLint 代码检查工具'));\n }\n\n if (commitLint) {\n console.log(kleur.gray(' • Commit Lint 提交规范'));\n }\n\n createSuccessInfo(name, packageManager);\n }\n });\n\n // 初始化 Git 仓库\n if (isGitInstalled()) {\n execSync('git init', { cwd: root });\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport kleur from 'kleur';\n\nimport createApp from './core/create_app.js';\nimport getPackageJsonInfo from './core/package_info.js';\n\nconst program = new Command();\n\nprogram\n .version(kleur.green(getPackageJsonInfo('../package.json', true).version || '1.0.0'))\n .arguments('<project-name>')\n .description(kleur.cyan('Create a directory for your project files'))\n .option('-f, --force', 'Overwrite target directory if it exists')\n .option('-t, --template <template>', 'Project template (react-web-js | react-web-ts)')\n .option('-p, --package-manager <manager>', 'Package manager (npm | yarn | pnpm | cnpm)')\n .option('-e, --eslint', 'Enable ESLint configuration')\n .option('-c, --commit-lint', 'Enable Commit Lint configuration')\n .option('--no-eslint', 'Disable ESLint configuration')\n .option('--no-commit-lint', 'Disable Commit Lint configuration')\n .addHelpText(\n 'after',\n `\n\n${kleur.yellow('Examples:')}\n ${kleur.gray('# Interactive mode (default)')}\n $ create-crack my-app\n\n ${kleur.gray('# Non-interactive mode with all options')}\n $ create-crack my-app -t react-web-ts -p pnpm -e -c\n\n ${kleur.gray('# Create React JS project with npm and ESLint')}\n $ create-crack my-app --template react-web-js --package-manager npm --eslint\n\n ${kleur.gray('# Create project without ESLint and Commit Lint')}\n $ create-crack my-app -t react-web-ts -p yarn --no-eslint --no-commit-lint\n\n${kleur.yellow('Available Templates:')}\n ${kleur.cyan('react-web-js')} - React + JavaScript Web应用程序\n ${kleur.cyan('react-web-ts')} - React + TypeScript Web应用程序\n\n${kleur.yellow('Available Package Managers:')}\n ${kleur.cyan('npm')} - Node Package Manager\n ${kleur.cyan('yarn')} - Yarn Package Manager \n ${kleur.cyan('pnpm')} - PNPM Package Manager\n ${kleur.cyan('cnpm')} - CNPM Package Manager\n`,\n )\n .action((name, options) => {\n createApp(name, options);\n })\n .parse(process.argv);\n"],"names":["template","packageVersion","getProjectLink","templates","Map","map","removeDirectory","directoryPath","verbose","fullPath","resolveApp","spinner","createSpinner","kleur","bold","cyan","start","existsSync","rmSync","recursive","force","success","text","green","error","red","console","createSelectType","value","hint","result","label","undefined","ProjectTypes","PackageManagers","checkGitInstallation","execSync","stdio","createSuccessInfo","name","packageManage","END_MSG","blue","BOXEN_CONFIG","padding","margin","top","bottom","borderColor","align","borderStyle","title","titleAlignment","process","stdout","write","boxen","log","__filename","fileURLToPath","url","__dirname","dirname","getPackageJsonInfo","relativePath","isFromCurrentDir","filePath","join","content","readFileSync","JSON","parse","copyFolderRecursive","sourceDir","destinationDir","mkdirSync","items","readdirSync","item","src","dest","stat","statSync","isDirectory","copyFileSync","exit","createCommitlint","projectName","huskyTemplateSource","warn","targetPackagePath","huskyTemplatePath","huskyConfig","projectPackageJson","key","sourceValue","targetValue","Array","isArray","writeFileSync","stringify","PACKAGES_TO_UPDATE","getLatestPackageVersion","packageName","response","fetch","ok","Error","status","data","json","version","yellow","gray","updatePackageVersions","packageJson","packagesToUpdate","versionPromises","versionResults","Promise","all","dependencies","devDependencies","mergeEslintConfig","eslintConfigPath","eslintConfig","scripts","createPackageJson","projectType","enableEslint","templatePath","packageInfo","author","os","userInfo","username","updatedPackageInfo","createTemplateFile","fileName","stdin","isTTY","setRawMode","on","makeDirectory","root","shouldOverwrite","confirm","message","getTableInfo","options","packageManager","commitLint","includes","select","eslint","createEslintConfig","eslintConfigSource","eslintConfigDest","copyLocalTemplate","projectRoot","templateSource","createApp","intro","isNonInteractive","pkg","exec","cwd","err","isGitInstalled","program","Command","arguments","description","option","addHelpText","action","argv"],"mappings":";;;;;;;;;;;;;;;AAAA,MAAMA,QAAqB,GAAA;AAAC,IAAA,cAAA;AAAgB,IAAA;AAAe,CAAA;AAEpD,MAAMC,iBAAiB,OAAQ;AAEtC,MAAMC,cAAAA,GAAiB,CAACC,SACtB,GAAA,IAAIC,IACFD,SAAUE,CAAAA,GAAG,CAAC,CAACL,QAAa,GAAA;AAC1BA,YAAAA,QAAAA;YACA,CAAC,6CAA6C,EAAEA,QAAAA,CAAS,YAAY,EAAEA,SAAS,CAAC,EAAEC,cAAe,CAAA,IAAI;AACvG,SAAA,CAAA,CAAA;AAG2CC,cAAAA,CAAeF,QAAU;;ACMzE;;;;;AAKC,IACM,eAAeM,eAAAA,CAAgBC,gBAAgB,cAAc,EAAEC,UAAU,IAAI,EAAA;AAClF,IAAA,MAAMC,WAAWC,UAAWH,CAAAA,aAAAA,CAAAA;AAE5B,IAAA,IAAIC,OAAS,EAAA;QACX,MAAMG,OAAAA,GAAUC,cAAcC,KAAMC,CAAAA,IAAI,GAAGC,IAAI,CAAC,0BAA0BC,KAAK,EAAA;QAE/E,IAAI;AACF,YAAA,IAAIC,WAAWR,QAAW,CAAA,EAAA;AACxBS,gBAAAA,MAAAA,CAAOT,QAAU,EAAA;oBAAEU,SAAW,EAAA,IAAA;oBAAMC,KAAO,EAAA;AAAK,iBAAA,CAAA;AAClD;AAEAT,YAAAA,OAAAA,CAAQU,OAAO,CAAC;AAAEC,gBAAAA,IAAAA,EAAMT,KAAMC,CAAAA,IAAI,EAAGS,CAAAA,KAAK,CAAC,sBAAA;AAAwB,aAAA,CAAA;AACrE,SAAA,CAAE,OAAOC,KAAO,EAAA;AACdb,YAAAA,OAAAA,CAAQa,KAAK,CAAC;AAAEF,gBAAAA,IAAAA,EAAMT,KAAMC,CAAAA,IAAI,EAAGW,CAAAA,GAAG,CAAC,iBAAA;AAAmB,aAAA,CAAA;AAC1DC,YAAAA,OAAAA,CAAQF,KAAK,CAACA,KAAAA,CAAAA;AAChB;KACK,MAAA;AACL,QAAA,IAAIP,WAAWR,QAAW,CAAA,EAAA;AACxBS,YAAAA,MAAAA,CAAOT,QAAU,EAAA;gBAAEU,SAAW,EAAA,IAAA;gBAAMC,KAAO,EAAA;AAAK,aAAA,CAAA;AAClD;AACF;AACF;;ACvCA,SAASO,gBAAAA,CAAiBC,KAAa,EAAEC,IAAa,EAAA;AACpD,IAAA,MAAMC,MAAsB,GAAA;AAAEF,QAAAA,KAAAA;QAAOG,KAAOH,EAAAA;AAAM,KAAA;AAElD,IAAA,IAAIC,SAASG,SAAW,EAAA;AACtBF,QAAAA,MAAAA,CAAOD,IAAI,GAAGA,IAAAA;AAChB;IAEA,OAAOC,MAAAA;AACT;AAEA;AACO,MAAMG,YAA8B,GAAA;AACzCN,IAAAA,gBAAAA,CAAiB,cAAgB,EAAA,+BAAA,CAAA;AACjCA,IAAAA,gBAAAA,CAAiB,cAAgB,EAAA,+BAAA;CAClC;AAEM,MAAMO,eAAiC,GAAA;AAC5C,IAAA;QAAEN,KAAO,EAAA,KAAA;QAAOG,KAAO,EAAA;AAAM,KAAA;AAC7B,IAAA;QAAEH,KAAO,EAAA,MAAA;QAAQG,KAAO,EAAA;AAAO,KAAA;AAC/B,IAAA;QAAEH,KAAO,EAAA,MAAA;QAAQG,KAAO,EAAA;AAAO,KAAA;AAC/B,IAAA;QAAEH,KAAO,EAAA,MAAA;QAAQG,KAAO,EAAA;AAAO;CAChC;;ACzBD;;;;;;;;;;;;;AAaC,IACc,SAASI,oBAAAA,GAAAA;IACtB,IAAI;;AAEFC,QAAAA,QAAAA,CAAS,eAAiB,EAAA;YAAEC,KAAO,EAAA;AAAS,SAAA,CAAA;QAE5C,OAAO,IAAA;AACT,KAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT;AACF;;ACtBe,SAASC,iBAAAA,CAAkBC,IAAY,EAAEC,aAAqB,EAAA;AAC3E,IAAA,MAAMC,OAAU,GAAA,CAAA,EAAG5B,KAAM6B,CAAAA,IAAI,CAC3B,qBAAA,GAAwB7B,KAAMU,CAAAA,KAAK,CAACgB,IAAAA,CAAAA,GAAQ,eAC5C,CAAA,CAAA,uCAAuC,CAAC;AAE1C,IAAA,MAAMI,YAAe,GAAA;QACnBC,OAAS,EAAA,CAAA;QACTC,MAAQ,EAAA;YAAEC,GAAK,EAAA,CAAA;YAAGC,MAAQ,EAAA;AAAE,SAAA;QAC5BC,WAAa,EAAA,MAAA;QACbC,KAAO,EAAA,QAAA;QACPC,WAAa,EAAA,QAAA;QACbC,KAAO,EAAA,oBAAA;QACPC,cAAgB,EAAA;AAClB,KAAA;AAEAC,IAAAA,OAAAA,CAAQC,MAAM,CAACC,KAAK,CAACC,MAAMf,OAASE,EAAAA,YAAAA,CAAAA,CAAAA;AAEpCjB,IAAAA,OAAAA,CAAQ+B,GAAG,CAAC,6CAAA,CAAA;IACZ/B,OAAQ+B,CAAAA,GAAG,CAAC,CAAC,UAAU,EAAE5C,KAAME,CAAAA,IAAI,CAACwB,IAAO,CAAA,CAAA,CAAA,CAAA;IAC3Cb,OAAQ+B,CAAAA,GAAG,CAAC,CAAC,KAAK,EAAE5C,MAAME,IAAI,CAACyB,aAAe,CAAA,CAAA,WAAW,CAAC,CAAA;AAC5D;;ACjBA,MAAMkB,YAAAA,GAAaC,aAAc,CAAA,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,cAAYC,OAAQJ,CAAAA,YAAAA,CAAAA;AAE1B;;;;;;;;;;;;AAYC,IACD,SAASK,kBAAAA,CAAmBC,YAAoB,EAAEC,gBAAyB,EAAA;AACzE,IAAA,MAAMC,QAAWD,GAAAA,gBAAAA,GAAmBE,IAAKN,CAAAA,WAAAA,EAAWG,YAAgBA,CAAAA,GAAAA,YAAAA;IACpE,MAAMI,OAAAA,GAAUC,aAAaH,QAAU,EAAA,OAAA,CAAA;IAEvC,OAAOI,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AACpB;;AClBA,MAAMV,YAAAA,GAAaC,eAAc,CAAA,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,cAAYC,OAAQJ,CAAAA,YAAAA,CAAAA;AAE1B;;;;;IAMA,MAAMc,qBAAsB,GAAA,CAACC,SAAmBC,EAAAA,cAAAA,GAAAA;IAC9C,IAAI;QACF,IAAI,CAACzD,WAAWyD,cAAiB,CAAA,EAAA;AAC/BC,YAAAA,SAAAA,CAAUD,cAAgB,EAAA;gBAAEvD,SAAW,EAAA;AAAK,aAAA,CAAA;AAC9C;AAEA,QAAA,MAAMyD,QAAQC,WAAYJ,CAAAA,SAAAA,CAAAA;QAE1B,KAAK,MAAMK,QAAQF,KAAO,CAAA;YACxB,MAAMG,GAAAA,GAAMZ,KAAKM,SAAWK,EAAAA,IAAAA,CAAAA;YAC5B,MAAME,IAAAA,GAAOb,KAAKO,cAAgBI,EAAAA,IAAAA,CAAAA;AAClC,YAAA,MAAMG,OAAOC,QAASH,CAAAA,GAAAA,CAAAA;YAEtB,IAAIE,IAAAA,CAAKE,WAAW,EAAI,EAAA;AACtBX,gBAAAA,qBAAAA,CAAoBO,GAAKC,EAAAA,IAAAA,CAAAA;aACpB,MAAA;AACLI,gBAAAA,YAAAA,CAAaL,GAAKC,EAAAA,IAAAA,CAAAA;AACpB;AACF;AACF,KAAA,CAAE,OAAOxD,KAAO,EAAA;AACdE,QAAAA,OAAAA,CAAQF,KAAK,CAACX,KAAMY,CAAAA,GAAG,CAAC,qBAAwBD,CAAAA,EAAAA,KAAAA,CAAAA;AAChD6B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF,CAAA;AAEA;;;;;;;;;IAUe,SAASC,gBAAAA,CAAiBC,WAAmB,EAAA;IAC1D,IAAI;;QAEF,MAAMC,mBAAAA,GAAsBrB,KAAKN,WAAW,EAAA,4BAAA,CAAA;AAE5C,QAAA,IAAI5C,WAAWuE,mBAAsB,CAAA,EAAA;AACnChB,YAAAA,qBAAAA,CAAoBgB,mBAAqBD,EAAAA,WAAAA,CAAAA;AACzC7D,YAAAA,OAAAA,CAAQ+B,GAAG,CAAC,iBAAA,CAAA;SACP,MAAA;AACL/B,YAAAA,OAAAA,CAAQ+D,IAAI,CAAC,kBAAA,CAAA;AAEb,YAAA;AACF;;QAGA,MAAMC,iBAAAA,GAAoBvB,KAAKoB,WAAa,EAAA,cAAA,CAAA;QAC5C,MAAMI,iBAAAA,GAAoBxB,KAAKN,WAAW,EAAA,2BAAA,CAAA;AAE1CnC,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC,CAAC,aAAa,EAAEkC,iBAAmB,CAAA,CAAA,CAAA;AAC/CjE,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC,CAAC,mBAAmB,EAAEiC,iBAAmB,CAAA,CAAA,CAAA;QAErD,MAAME,WAAAA,GAAc7B,mBAAmB4B,iBAAmB,EAAA,KAAA,CAAA;QAC1D,MAAME,kBAAAA,GAAsC9B,mBAAmB2B,iBAAmB,EAAA,KAAA,CAAA;;QAGlF,IAAK,MAAMI,OAAOF,WAAa,CAAA;YAC7B,MAAMG,WAAAA,GAAcH,WAAW,CAACE,GAAI,CAAA;YACpC,MAAME,WAAAA,GAAcH,kBAAkB,CAACC,GAAI,CAAA;AAE3C,YAAA,IAAI,OAAOC,WAAgB,KAAA,QAAA,IAAY,CAACE,KAAMC,CAAAA,OAAO,CAACH,WAAc,CAAA,EAAA;gBAClEF,kBAAkB,CAACC,IAAI,GAAG;AACxB,oBAAA,GAAGE,WAAW;AACd,oBAAA,GAAGD;AACL,iBAAA;AACF,aAAA,MAAO,IAAIE,KAAAA,CAAMC,OAAO,CAACH,WAAc,CAAA,EAAA;gBACrCF,kBAAkB,CAACC,IAAI,GAAG;AAAIC,oBAAAA,GAAAA,WAAAA;AAAiBC,oBAAAA,GAAAA,WAAAA,IAAe;AAAI,iBAAA;aAC7D,MAAA;gBACLH,kBAAkB,CAACC,IAAI,GAAGC,WAAAA;AAC5B;AACF;AAEAI,QAAAA,aAAAA,CAAcT,mBAAmBpB,IAAK8B,CAAAA,SAAS,CAACP,kBAAAA,EAAoB,MAAM,CAAI,CAAA,EAAA,OAAA,CAAA;AAC9EnE,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC,qCAAA,CAAA;AACd,KAAA,CAAE,OAAOjC,KAAO,EAAA;QACdE,OAAQF,CAAAA,KAAK,CAAC,yBAA2BA,EAAAA,KAAAA,CAAAA;AACzC6B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF;;ACpGA;;AAEC;AAGM,MAAMgB,kBAAqB,GAAA;AAChC,IAAA;CAED;;ACED,MAAM3C,YAAAA,GAAaC,eAAc,CAAA,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,cAAYC,OAAQJ,CAAAA,YAAAA,CAAAA;AAE1B;AACAhC,OAAQ+B,CAAAA,GAAG,CAAC,2BAA6BI,EAAAA,WAAAA,CAAAA;AAEzC;;;;;IAMA,eAAeyC,wBAAwBC,WAAmB,EAAA;IACxD,IAAI;QACF,MAAMC,QAAAA,GAAW,MAAMC,KAAM,CAAA,CAAC,2BAA2B,EAAEF,WAAAA,CAAY,OAAO,CAAC,CAAA;QAE/E,IAAI,CAACC,QAASE,CAAAA,EAAE,EAAE;AAChB,YAAA,MAAM,IAAIC,KAAM,CAAA,CAAC,oBAAoB,EAAEH,QAAAA,CAASI,MAAM,CAAE,CAAA,CAAA;AAC1D;QAEA,MAAMC,IAAAA,GAAO,MAAML,QAAAA,CAASM,IAAI,EAAA;AAEhC,QAAA,OAAO,CAAC,CAAC,EAAED,IAAAA,CAAKE,OAAO,CAAE,CAAA;AAC3B,KAAA,CAAE,OAAOvF,KAAO,EAAA;QACdE,OAAQ+D,CAAAA,IAAI,CAAC5E,KAAAA,CAAMmG,MAAM,CAAC,CAAC,QAAQ,EAAET,WAAY,CAAA,WAAW,CAAC,CAAA,CAAA;QAC7D7E,OAAQ+D,CAAAA,IAAI,CAAC5E,KAAMoG,CAAAA,IAAI,CAAC,CAAC,MAAM,EAAEzF,KAAO,CAAA,CAAA,CAAA,CAAA;QAExC,OAAO,IAAA;AACT;AACF;AAEA;;;;;IAMA,eAAe0F,sBAAsBC,WAA4B,EAAA;AAC/DzF,IAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAME,CAAAA,IAAI,CAAC,iBAAA,CAAA,CAAA;AAEvB,IAAA,MAAMqG,gBAAmBf,GAAAA,kBAAAA;;AAGzB,IAAA,MAAMgB,eAAkBD,GAAAA,gBAAAA,CAAiB/G,GAAG,CAAC,OAAOkG,WAAAA,GAAAA;QAClD,MAAMQ,OAAAA,GAAU,MAAMT,uBAAwBC,CAAAA,WAAAA,CAAAA;QAE9C,OAAO;AAAEA,YAAAA,WAAAA;AAAaQ,YAAAA;AAAQ,SAAA;AAChC,KAAA,CAAA;IAEA,IAAI;AACF,QAAA,MAAMO,cAAiB,GAAA,MAAMC,OAAQC,CAAAA,GAAG,CAACH,eAAAA,CAAAA;;QAGzC,IAAIF,WAAAA,CAAYM,YAAY,EAAE;AAC5B,YAAA,KAAK,MAAM,EAAElB,WAAW,EAAEQ,OAAO,EAAE,IAAIO,cAAgB,CAAA;AACrD,gBAAA,IAAIP,OAAWI,IAAAA,WAAAA,CAAYM,YAAY,CAAClB,YAAY,EAAE;oBACpDY,WAAYM,CAAAA,YAAY,CAAClB,WAAAA,CAAY,GAAGQ,OAAAA;oBACxCrF,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAAA,CAAMU,KAAK,CAAC,CAAC,KAAK,EAAEgF,WAAAA,CAAY,EAAE,EAAEQ,OAAS,CAAA,CAAA,CAAA,CAAA;AAC3D;AACF;AACF;;QAGA,IAAII,WAAAA,CAAYO,eAAe,EAAE;AAC/B,YAAA,KAAK,MAAM,EAAEnB,WAAW,EAAEQ,OAAO,EAAE,IAAIO,cAAgB,CAAA;AACrD,gBAAA,IAAIP,OAAWI,IAAAA,WAAAA,CAAYO,eAAe,CAACnB,YAAY,EAAE;oBACvDY,WAAYO,CAAAA,eAAe,CAACnB,WAAAA,CAAY,GAAGQ,OAAAA;oBAC3CrF,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAAA,CAAMU,KAAK,CAAC,CAAC,KAAK,EAAEgF,WAAAA,CAAY,EAAE,EAAEQ,OAAS,CAAA,CAAA,CAAA,CAAA;AAC3D;AACF;AACF;AAEArF,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAMU,CAAAA,KAAK,CAAC,YAAA,CAAA,CAAA;AAC1B,KAAA,CAAE,OAAOC,KAAO,EAAA;AACdE,QAAAA,OAAAA,CAAQF,KAAK,CAACX,KAAMY,CAAAA,GAAG,CAAC,aAAgBD,CAAAA,EAAAA,KAAAA,CAAAA;AAC1C;IAEA,OAAO2F,WAAAA;AACT;AAEA;;;;;IAMA,SAASQ,kBAAkBR,WAA4B,EAAA;IACrD,IAAI;QACF,MAAMS,gBAAAA,GAAmBzD,KAAKN,WAAW,EAAA,uBAAA,CAAA;QACzC,MAAMgE,YAAAA,GAAe9D,mBAAmB6D,gBAAkB,EAAA,KAAA,CAAA;AAE1D,QAAA,IAAI,CAACC,YAAc,EAAA;AACjBnG,YAAAA,OAAAA,CAAQ+D,IAAI,CAAC,kCAAA,CAAA;YAEb,OAAO0B,WAAAA;AACT;;QAGA,IAAIU,YAAAA,CAAaC,OAAO,EAAE;AACxBX,YAAAA,WAAAA,CAAYW,OAAO,GAAG;AACpB,gBAAA,GAAGX,YAAYW,OAAO;AACtB,gBAAA,GAAGD,aAAaC;AAClB,aAAA;AACF;;QAGA,IAAID,YAAAA,CAAaH,eAAe,EAAE;AAChCP,YAAAA,WAAAA,CAAYO,eAAe,GAAG;AAC5B,gBAAA,GAAGP,YAAYO,eAAe;AAC9B,gBAAA,GAAGG,aAAaH;AAClB,aAAA;AACF;;QAGA,IAAIG,YAAY,CAAC,aAAA,CAAc,EAAE;AAC/BV,YAAAA,WAAW,CAAC,aAAA,CAAc,GAAGU,YAAY,CAAC,aAAc,CAAA;AAC1D;AAEAnG,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC,gCAAA,CAAA;QAEZ,OAAO0D,WAAAA;AACT,KAAA,CAAE,OAAO3F,KAAO,EAAA;QACdE,OAAQF,CAAAA,KAAK,CAAC,oBAAsBA,EAAAA,KAAAA,CAAAA;QAEpC,OAAO2F,WAAAA;AACT;AACF;AAEA;;;;;;;;;;;;;AAaC,IACD,eAAeY,iBACbC,CAAAA,WAAmB,EACnBzC,WAAmB,EACnB0C,eAAwB,KAAK,EAAA;IAE7B,IAAI;;QAEF,MAAMC,YAAAA,GAAe/D,KAAKN,WAAW,EAAA,CAAC,UAAU,EAAEmE,WAAAA,CAAY,KAAK,CAAC,CAAA;AACpEtG,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC,CAAC,QAAQ,EAAEyE,YAAc,CAAA,CAAA,CAAA;QAErC,MAAMC,WAAAA,GAAcpE,mBAAmBmE,YAAc,EAAA,KAAA,CAAA;AACrD,QAAA,IAAI,CAACC,WAAAA,EAAa,MAAM,IAAIxB,KAAM,CAAA,2BAAA,CAAA;AAElCwB,QAAAA,WAAAA,CAAYC,MAAM,GAAGC,EAAGC,CAAAA,QAAQ,GAAGC,QAAQ;AAC3CJ,QAAAA,WAAAA,CAAY5F,IAAI,GAAGgD,WAAAA;;QAGnB,MAAMiD,kBAAAA,GAAqB,MAAMtB,qBAAsBiB,CAAAA,WAAAA,CAAAA;;AAGvD,QAAA,IAAIF,YAAc,EAAA;AAChB,YAAA,OAAON,iBAAkBa,CAAAA,kBAAAA,CAAAA;AAC3B;QAEA,OAAOA,kBAAAA;AACT,KAAA,CAAE,OAAOhH,KAAO,EAAA;AACdE,QAAAA,OAAAA,CAAQF,KAAK,CAAC,CAAC,qCAAqC,EAAEwG,WAAAA,CAAY,CAAC,CAAC,CAAA;AACpEtG,QAAAA,OAAAA,CAAQF,KAAK,CAACA,KAAAA,CAAAA;AACd6B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF;AAEA;;;;;;;;;;;IAYA,SAASoD,mBAAmBC,QAAgB,EAAA;AAC1C,IAAA,MAAMxE,WAAWC,IAAKN,CAAAA,WAAAA,EAAW,CAAC,UAAU,EAAE6E,QAAU,CAAA,CAAA,CAAA;AAExD,IAAA,OAAOrE,aAAaH,QAAU,EAAA,OAAA,CAAA;AAChC;;ACxLA;AACA,MAAMR,UAAAA,GAAaC,eAAc,CAAA,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,YAAYC,OAAQJ,CAAAA,UAAAA,CAAAA;AAE1B;;AAEC,IACD,IAAIL,OAAAA,CAAQsF,KAAK,CAACC,KAAK,EAAE;IACvBvF,OAAQsF,CAAAA,KAAK,CAACE,UAAU,CAAC,IAAA,CAAA;AACzBxF,IAAAA,OAAAA,CAAQsF,KAAK,CAACG,EAAE,CAAC,QAAQ,CAAChD,GAAAA,GAAAA;AACxB,QAAA,IAAIA,GAAG,CAAC,CAAE,CAAA,KAAK,CAAG,EAAA;AAChBpE,YAAAA,OAAAA,CAAQ+B,GAAG,CAAC,0CAAA,CAAA;AACZJ,YAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF,KAAA,CAAA;AACF;AAEA;;;;;AAKC,IACD,MAAM0D,aAAgB,GAAA,OAAOxG,IAAc,EAAA,EAAEnB,KAAK,EAAsB,GAAA;AACtE,IAAA,MAAM4H,OAAOtI,UAAW6B,CAAAA,IAAAA,CAAAA;IAExB,IAAItB,UAAAA,CAAW+H,IAAS,CAAA,IAAA,CAAC5H,KAAO,EAAA;QAC9B,MAAM6H,eAAAA,GAAkB,MAAMC,OAAQ,CAAA;YACpCC,OAAS,EAAA;AACX,SAAA,CAAA;AACA,QAAA,IAAI,CAACF,eAAAA,EAAiB5F,OAAQgC,CAAAA,IAAI,CAAC,CAAA,CAAA;AACnC,QAAA,MAAM/E,gBAAgBiC,IAAM,EAAA,IAAA,CAAA;AAC9B;AAEAoC,IAAAA,SAAAA,CAAUqE,IAAM,EAAA;QAAE7H,SAAW,EAAA;AAAK,KAAA,CAAA;AACpC,CAAA;AAEA;;IAGA,MAAMiI,eAAe,OAAOC,OAAAA,GAAAA;IAC1B,IAAIrB,WAAAA;IACJ,IAAIsB,cAAAA;IACJ,IAAIrB,YAAAA;IACJ,IAAIsB,UAAAA;;IAGJ,IAAIF,OAAAA,CAAQrJ,QAAQ,EAAE;AACpB,QAAA,IAAI,CAAC;AAAC,YAAA,cAAA;AAAgB,YAAA;AAAe,SAAA,CAACwJ,QAAQ,CAACH,OAAQrJ,CAAAA,QAAQ,CAAG,EAAA;YAChE0B,OAAQF,CAAAA,KAAK,CAACX,KAAAA,CAAMY,GAAG,CAAC,CAAC,WAAW,EAAE4H,OAAQrJ,CAAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AACxD0B,YAAAA,OAAAA,CAAQF,KAAK,CAACX,KAAMmG,CAAAA,MAAM,CAAC,mCAAA,CAAA,CAAA;AAC3B3D,YAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AAEA2C,QAAAA,WAAAA,GAAcqB,QAAQrJ,QAAQ;KACzB,MAAA;AACLgI,QAAAA,WAAAA,GAAe,MAAMyB,MAAO,CAAA;YAC1BN,OAAS,EAAA,YAAA;YACTE,OAASpH,EAAAA;AACX,SAAA,CAAA;AACF;;IAGA,IAAIoH,OAAAA,CAAQC,cAAc,EAAE;AAC1B,QAAA,IAAI,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA,MAAA;AAAQ,YAAA;AAAO,SAAA,CAACE,QAAQ,CAACH,OAAQC,CAAAA,cAAc,CAAG,EAAA;YACrE5H,OAAQF,CAAAA,KAAK,CAACX,KAAAA,CAAMY,GAAG,CAAC,CAAC,WAAW,EAAE4H,OAAQC,CAAAA,cAAc,CAAE,CAAA,CAAA,CAAA;AAC9D5H,YAAAA,OAAAA,CAAQF,KAAK,CAACX,KAAMmG,CAAAA,MAAM,CAAC,gCAAA,CAAA,CAAA;AAC3B3D,YAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AAEAiE,QAAAA,cAAAA,GAAiBD,QAAQC,cAAc;KAClC,MAAA;AACLA,QAAAA,cAAAA,GAAkB,MAAMG,MAAO,CAAA;YAC7BN,OAAS,EAAA,YAAA;YACTE,OAASnH,EAAAA;AACX,SAAA,CAAA;AACF;;IAGA,IAAImH,OAAAA,CAAQK,MAAM,KAAK1H,SAAW,EAAA;AAChCiG,QAAAA,YAAAA,GAAeoB,QAAQK,MAAM;KACxB,MAAA;AACLzB,QAAAA,YAAAA,GAAgB,MAAMiB,OAAQ,CAAA;YAC5BC,OAAS,EAAA;AACX,SAAA,CAAA;AACF;;IAGA,IAAIE,OAAAA,CAAQE,UAAU,KAAKvH,SAAW,EAAA;AACpCuH,QAAAA,UAAAA,GAAaF,QAAQE,UAAU;KAC1B,MAAA;AACLA,QAAAA,UAAAA,GAAc,MAAML,OAAQ,CAAA;YAC1BC,OAAS,EAAA;AACX,SAAA,CAAA;AACF;IAEA,OAAO;AAAEnB,QAAAA,WAAAA;AAAasB,QAAAA,cAAAA;AAAgBrB,QAAAA,YAAAA;AAAcsB,QAAAA;AAAW,KAAA;AACjE,CAAA;AAEA;;;;IAKA,MAAMI,qBAAqB,CAACX,IAAAA,GAAAA;IAC1B,IAAI;QACF,MAAMY,kBAAAA,GAAqBzF,KAAKN,SAAW,EAAA,sCAAA,CAAA;QAC3C,MAAMgG,gBAAAA,GAAmB1F,KAAK6E,IAAM,EAAA,mBAAA,CAAA;AAEpC,QAAA,IAAI/H,WAAW2I,kBAAqB,CAAA,EAAA;AAClCxE,YAAAA,YAAAA,CAAawE,kBAAoBC,EAAAA,gBAAAA,CAAAA;AACjCnI,YAAAA,OAAAA,CAAQ+B,GAAG,CAAC,kBAAA,CAAA;SACP,MAAA;AACL/B,YAAAA,OAAAA,CAAQ+D,IAAI,CAAC,qBAAA,CAAA;AACf;AACF,KAAA,CAAE,OAAOjE,KAAO,EAAA;QACdE,OAAQF,CAAAA,KAAK,CAAC,sBAAwBA,EAAAA,KAAAA,CAAAA;AACxC;AACF,CAAA;AAEA;;;;;IAMA,MAAMgD,mBAAsB,GAAA,CAACC,SAAmBC,EAAAA,cAAAA,GAAAA;IAC9C,IAAI;QACF,IAAI,CAACzD,WAAWyD,cAAiB,CAAA,EAAA;AAC/BC,YAAAA,SAAAA,CAAUD,cAAgB,EAAA;gBAAEvD,SAAW,EAAA;AAAK,aAAA,CAAA;AAC9C;AAEA,QAAA,MAAMyD,QAAQC,WAAYJ,CAAAA,SAAAA,CAAAA;QAE1B,KAAK,MAAMK,QAAQF,KAAO,CAAA;YACxB,MAAMG,GAAAA,GAAMZ,KAAKM,SAAWK,EAAAA,IAAAA,CAAAA;YAC5B,MAAME,IAAAA,GAAOb,KAAKO,cAAgBI,EAAAA,IAAAA,CAAAA;AAClC,YAAA,MAAMG,OAAOC,QAASH,CAAAA,GAAAA,CAAAA;YAEtB,IAAIE,IAAAA,CAAKE,WAAW,EAAI,EAAA;AACtBX,gBAAAA,mBAAAA,CAAoBO,GAAKC,EAAAA,IAAAA,CAAAA;aACpB,MAAA;AACLI,gBAAAA,YAAAA,CAAaL,GAAKC,EAAAA,IAAAA,CAAAA;AACpB;AACF;AACF,KAAA,CAAE,OAAOxD,KAAO,EAAA;AACdE,QAAAA,OAAAA,CAAQF,KAAK,CAACX,KAAMY,CAAAA,GAAG,CAAC,cAAiBD,CAAAA,EAAAA,KAAAA,CAAAA;AACzC6B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF,CAAA;AAEA;;;;;IAMA,MAAMyE,iBAAoB,GAAA,CAAC9B,WAAqB+B,EAAAA,WAAAA,GAAAA;IAC9C,MAAMpJ,OAAAA,GAAUC,cAAcC,KAAMC,CAAAA,IAAI,GAAGC,IAAI,CAAC,gBAAgBC,KAAK,EAAA;IAErE,IAAI;AACF,QAAA,MAAMgJ,iBAAiB7F,IAAKN,CAAAA,SAAAA,EAAW,CAAC,qBAAqB,EAAEmE,WAAa,CAAA,CAAA,CAAA;QAE5E,IAAI,CAAC/G,WAAW+I,cAAiB,CAAA,EAAA;AAC/B,YAAA,MAAM,IAAIrD,KAAAA,CAAM,CAAC,SAAS,EAAEqD,cAAgB,CAAA,CAAA,CAAA;AAC9C;AAEAxF,QAAAA,mBAAAA,CAAoBwF,cAAgBD,EAAAA,WAAAA,CAAAA;AACpCpJ,QAAAA,OAAAA,CAAQU,OAAO,CAAC;AAAEC,YAAAA,IAAAA,EAAMT,KAAMC,CAAAA,IAAI,EAAGS,CAAAA,KAAK,CAAC,YAAA;AAAc,SAAA,CAAA;AAC3D,KAAA,CAAE,OAAOC,KAAO,EAAA;AACdb,QAAAA,OAAAA,CAAQa,KAAK,CAAC;AAAEF,YAAAA,IAAAA,EAAMT,KAAMC,CAAAA,IAAI,EAAGW,CAAAA,GAAG,CAAC,YAAA;AAAc,SAAA,CAAA;QACrDC,OAAQF,CAAAA,KAAK,CAAC,QAAUA,EAAAA,KAAAA,CAAAA;AACxB6B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf;AACF,CAAA;AAEA;;;;;AAKC,IACc,eAAe4E,SAAU1H,CAAAA,IAAY,EAAE8G,OAAY,EAAA;IAChEa,KAAMrJ,CAAAA,KAAAA,CAAMU,KAAK,CAAC,gCAAA,CAAA,CAAA;AAElB,IAAA,MAAMyH,OAAOtI,UAAW6B,CAAAA,IAAAA,CAAAA;AACxB,IAAA,MAAMwG,cAAcxG,IAAM8G,EAAAA,OAAAA,CAAAA;;AAG1B,IAAA,MAAMc,gBACJd,GAAAA,OAAAA,CAAQrJ,QAAQ,IAChBqJ,OAAQC,CAAAA,cAAc,IACtBD,OAAAA,CAAQK,MAAM,KAAK1H,SACnBqH,IAAAA,OAAAA,CAAQE,UAAU,KAAKvH,SAAAA;AAEzB,IAAA,IAAI,CAACmI,gBAAkB,EAAA;AACrBzI,QAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAME,CAAAA,IAAI,CAAC,iBAAA,CAAA,CAAA;AACzB;IAEA,MAAM,EAAEiH,WAAW,EAAEsB,cAAc,EAAErB,YAAY,EAAEsB,UAAU,EAAE,GAAG,MAAMH,YAAaC,CAAAA,OAAAA,CAAAA;AAErF3H,IAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAMmG,CAAAA,MAAM,CAAC,gBAAA,CAAA,CAAA;IACzBtF,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAMoG,CAAAA,IAAI,CAAC,CAAC,SAAS,EAAE1E,IAAM,CAAA,CAAA,CAAA,CAAA;IACzCb,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAMoG,CAAAA,IAAI,CAAC,CAAC,SAAS,EAAEe,WAAa,CAAA,CAAA,CAAA,CAAA;IAChDtG,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAMoG,CAAAA,IAAI,CAAC,CAAC,SAAS,EAAEqC,cAAgB,CAAA,CAAA,CAAA,CAAA;IACnD5H,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAAA,CAAMoG,IAAI,CAAC,CAAC,WAAW,EAAEgB,YAAe,GAAA,IAAA,GAAO,IAAM,CAAA,CAAA,CAAA,CAAA;IACjEvG,OAAQ+B,CAAAA,GAAG,CAAC5C,KAAAA,CAAMoG,IAAI,CAAC,CAAC,gBAAgB,EAAEsC,UAAa,GAAA,IAAA,GAAO,IAAM,CAAA,CAAA,CAAA,CAAA;;AAGpE,IAAA,MAAMa,GAAM,GAAA,MAAMrC,iBAAkBC,CAAAA,WAAAA,EAAazF,IAAM0F,EAAAA,YAAAA,CAAAA;AACvD9B,IAAAA,aAAAA,CAAchC,KAAK6E,IAAM,EAAA,cAAA,CAAA,EAAiB1E,KAAK8B,SAAS,CAACgE,KAAK,IAAM,EAAA,CAAA,CAAA,CAAA;;IAGpEjE,aAAchC,CAAAA,IAAAA,CAAK6E,IAAM,EAAA,YAAA,CAAA,EAAeP,kBAAmB,CAAA,WAAA,CAAA,CAAA;;AAG3DqB,IAAAA,iBAAAA,CAAkB9B,WAAagB,EAAAA,IAAAA,CAAAA;;AAG/B,IAAA,IAAIO,UAAY,EAAA;QACdjE,gBAAiB0D,CAAAA,IAAAA,CAAAA;AACnB;;AAGA,IAAA,IAAIf,YAAc,EAAA;QAChB0B,kBAAmBX,CAAAA,IAAAA,CAAAA;AACrB;;AAGA,IAAA,MAAMrI,UAAUC,aAAcC,CAAAA,KAAAA,CAAMC,IAAI,CAAC,+BAA+BE,KAAK,EAAA;AAC7EqJ,IAAAA,IAAAA,CAAK,CAAGf,EAAAA,cAAAA,CAAe,QAAQ,CAAC,EAAE;QAAEgB,GAAKtB,EAAAA;AAAK,KAAA,EAAG,CAACuB,GAAAA,GAAAA;AAChD,QAAA,IAAIA,GAAK,EAAA;AACP5J,YAAAA,OAAAA,CAAQa,KAAK,CAAC;gBAAEF,IAAMT,EAAAA,KAAAA,CAAMY,GAAG,CAAC,gCAAA;AAAkC,aAAA,CAAA;AAClEC,YAAAA,OAAAA,CAAQF,KAAK,CAAC+I,GAAAA,CAAAA;AACdlH,YAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;SACR,MAAA;AACL1E,YAAAA,OAAAA,CAAQU,OAAO,CAAC;gBAAEC,IAAMT,EAAAA,KAAAA,CAAMU,KAAK,CAAC,mCAAA;AAAqC,aAAA,CAAA;;AAGzEG,YAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAMU,CAAAA,KAAK,CAAC,gBAAA,CAAA,CAAA;AACxBG,YAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAME,CAAAA,IAAI,CAAC,YAAA,CAAA,CAAA;AACvBW,YAAAA,OAAAA,CAAQ+B,GAAG,CACT5C,KAAMoG,CAAAA,IAAI,CACR,CAAC,IAAI,EAAEe,WAAgB,KAAA,cAAA,GAAiB,oBAAuB,GAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAI9F,YAAA,IAAIC,YAAc,EAAA;AAChBvG,gBAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAMoG,CAAAA,IAAI,CAAC,mBAAA,CAAA,CAAA;AACzB;AAEA,YAAA,IAAIsC,UAAY,EAAA;AACd7H,gBAAAA,OAAAA,CAAQ+B,GAAG,CAAC5C,KAAMoG,CAAAA,IAAI,CAAC,sBAAA,CAAA,CAAA;AACzB;AAEA3E,YAAAA,iBAAAA,CAAkBC,IAAM+G,EAAAA,cAAAA,CAAAA;AAC1B;AACF,KAAA,CAAA;;AAGA,IAAA,IAAIkB,oBAAkB,EAAA,EAAA;AACpBpI,QAAAA,QAAAA,CAAS,UAAY,EAAA;YAAEkI,GAAKtB,EAAAA;AAAK,SAAA,CAAA;AACnC;AACF;;AC/QA,MAAMyB,UAAU,IAAIC,OAAAA,EAAAA;AAEpBD,OACG1D,CAAAA,OAAO,CAAClG,KAAMU,CAAAA,KAAK,CAACwC,kBAAmB,CAAA,iBAAA,EAAmB,IAAMgD,CAAAA,CAAAA,OAAO,IAAI,OAAA,CAAA,CAAA,CAC3E4D,SAAS,CAAC,gBAAA,CAAA,CACVC,WAAW,CAAC/J,KAAME,CAAAA,IAAI,CAAC,2CACvB8J,CAAAA,CAAAA,CAAAA,MAAM,CAAC,aAAA,EAAe,yCACtBA,CAAAA,CAAAA,MAAM,CAAC,2BAA6B,EAAA,gDAAA,CAAA,CACpCA,MAAM,CAAC,iCAAmC,EAAA,4CAAA,CAAA,CAC1CA,MAAM,CAAC,cAAA,EAAgB,6BACvBA,CAAAA,CAAAA,MAAM,CAAC,mBAAA,EAAqB,oCAC5BA,MAAM,CAAC,aAAe,EAAA,8BAAA,CAAA,CACtBA,MAAM,CAAC,oBAAoB,mCAC3BC,CAAAA,CAAAA,WAAW,CACV,OAAA,EACA;;AAEJ,EAAEjK,KAAAA,CAAMmG,MAAM,CAAC,WAAa,CAAA;EAC1B,EAAEnG,KAAAA,CAAMoG,IAAI,CAAC,8BAAgC,CAAA;;;EAG7C,EAAEpG,KAAAA,CAAMoG,IAAI,CAAC,yCAA2C,CAAA;;;EAGxD,EAAEpG,KAAAA,CAAMoG,IAAI,CAAC,+CAAiD,CAAA;;;EAG9D,EAAEpG,KAAAA,CAAMoG,IAAI,CAAC,iDAAmD,CAAA;;;AAGlE,EAAEpG,KAAAA,CAAMmG,MAAM,CAAC,sBAAwB,CAAA;EACrC,EAAEnG,KAAAA,CAAME,IAAI,CAAC,cAAgB,CAAA,CAAA;EAC7B,EAAEF,KAAAA,CAAME,IAAI,CAAC,cAAgB,CAAA,CAAA;;AAE/B,EAAEF,KAAAA,CAAMmG,MAAM,CAAC,6BAA+B,CAAA;EAC5C,EAAEnG,KAAAA,CAAME,IAAI,CAAC,KAAO,CAAA,CAAA;EACpB,EAAEF,KAAAA,CAAME,IAAI,CAAC,MAAQ,CAAA,CAAA;EACrB,EAAEF,KAAAA,CAAME,IAAI,CAAC,MAAQ,CAAA,CAAA;EACrB,EAAEF,KAAAA,CAAME,IAAI,CAAC,MAAQ,CAAA,CAAA;AACvB,CAAC,CAEEgK,CAAAA,MAAM,CAAC,CAACxI,IAAM8G,EAAAA,OAAAA,GAAAA;AACbY,IAAAA,SAAAA,CAAU1H,IAAM8G,EAAAA,OAAAA,CAAAA;AAClB,CACC9E,CAAAA,CAAAA,KAAK,CAAClB,OAAAA,CAAQ2H,IAAI,CAAA"} |
+3
-3
@@ -323,3 +323,3 @@ #!/usr/bin/env node | ||
| try { | ||
| const eslintConfigPath = join(__dirname$1, '../package/eslint.json'); | ||
| const eslintConfigPath = join(__dirname$1, './package/eslint.json'); | ||
| const eslintConfig = getPackageJsonInfo(eslintConfigPath, false); | ||
@@ -371,3 +371,3 @@ if (!eslintConfig) { | ||
| // 从 package 目录读取对应项目类型的 JSON 文件 | ||
| const templatePath = join(__dirname$1, `../package/${projectType}.json`); | ||
| const templatePath = join(__dirname$1, `./package/${projectType}.json`); | ||
| console.log(`尝试读取模板: ${templatePath}`); | ||
@@ -403,3 +403,3 @@ const packageInfo = getPackageJsonInfo(templatePath, false); | ||
| */ function createTemplateFile(fileName) { | ||
| const filePath = join(__dirname$1, `../package/${fileName}`); | ||
| const filePath = join(__dirname$1, `./package/${fileName}`); | ||
| return readFileSync(filePath, 'utf-8'); | ||
@@ -406,0 +406,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../src/core/constants.ts","../src/core/file_controller.ts","../src/core/question.ts","../src/core/check_git_installation.ts","../src/core/create_success_info.ts","../src/core/package_info.ts","../src/core/create_commit_lint.ts","../src/core/package-versions.ts","../src/core/create_file.ts","../src/core/create_app.ts","../src/index.ts"],"sourcesContent":["const template: string[] = ['react-web-js', 'react-web-ts'];\n\nexport const packageVersion = '1.0.1';\n\nconst getProjectLink = (templates: string[]): Map<string, string> =>\n new Map(\n templates.map((template) => [\n template,\n `https://registry.npmjs.org/@laconic/template-${template}/-/template-${template}-${packageVersion}.tgz`,\n ]),\n );\n\nexport const projectLink: Map<string, string> = getProjectLink(template);\n","import { resolveApp } from '@verve-kit/utils';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\nimport {\n existsSync,\n rmSync,\n mkdirSync,\n copyFileSync,\n statSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport * as tar from 'tar';\n\nimport { packageVersion } from './constants';\n\n/**\n * 删除指定目录\n *\n * @param directoryPath - 要删除的目录路径(默认 \"node_modules\")\n * @param verbose - 是否显示终端提示信息\n */\nexport async function removeDirectory(directoryPath = 'node_modules', verbose = true) {\n const fullPath = resolveApp(directoryPath);\n\n if (verbose) {\n const spinner = createSpinner(kleur.bold().cyan('File being deleted...')).start();\n\n try {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n\n spinner.success({ text: kleur.bold().green('Deleted successfully') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Deletion failed') });\n console.error(error);\n }\n } else {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n }\n}\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nasync function copyFolderRecursive(sourceDir: string, destinationDir: string) {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n await copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(\n kleur.red('\\n 😡😡😡 An error occurred during the template download, please try again'),\n error,\n );\n process.exit(1);\n }\n}\n\n/**\n * 下载并解压 NPM 包模板\n *\n * @param packageURL - 包的下载链接\n * @param packageName - 包名\n * @param projectName - 创建的项目目录名\n */\nexport async function getNpmPackage(\n packageURL: string,\n packageName: string,\n projectName: string,\n): Promise<void> {\n const spinner = createSpinner(kleur.bold().cyan('Creating a project...')).start();\n\n try {\n const response = await fetch(packageURL);\n\n if (!response.ok) {\n throw new Error(`Failed to download package: ${response.statusText}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n const currentDir = resolveApp(projectName);\n const tgzPath = join(currentDir, `${packageName}-${packageVersion}.tgz`);\n writeFileSync(tgzPath, buffer);\n\n await tar.extract({\n file: tgzPath,\n cwd: currentDir,\n });\n\n unlinkSync(tgzPath);\n await copyFolderRecursive(join(projectName, 'package/template'), projectName);\n await removeDirectory(join(projectName, 'package'), false);\n\n spinner.success({ text: kleur.bold().green('Project creation successful') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Project creation failed') });\n console.error('Error:', error);\n process.exit(1);\n }\n}\n","interface ISelectType {\n value: string;\n label: string;\n hint?: string;\n}\n\nfunction createSelectType(value: string, hint?: string): ISelectType {\n const result: ISelectType = { value, label: value };\n\n if (hint !== undefined) {\n result.hint = hint;\n }\n\n return result;\n}\n\n// 优化后只保留两个可用的模板库\nexport const ProjectTypes: ISelectType[] = [\n createSelectType('react-web-js', 'React + JavaScript Web应用程序 🚀'),\n createSelectType('react-web-ts', 'React + TypeScript Web应用程序 🚀'),\n];\n\nexport const PackageManagers: ISelectType[] = [\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'pnpm', label: 'pnpm' },\n { value: 'cnpm', label: 'cnpm' },\n];\n","import { execSync } from 'node:child_process';\n\n/**\n * 检查当前系统是否已安装 Git。\n *\n * @returns `true` 表示 Git 已安装,`false` 表示未安装。\n *\n * @example\n * ```ts\n * if (checkGitInstallation()) {\n * console.log('Git is available.');\n * } else {\n * console.log('Please install Git.');\n * }\n * ```\n */\nexport default function checkGitInstallation(): boolean {\n try {\n // 尝试静默执行 git --version,如果命令执行失败将抛出异常\n execSync('git --version', { stdio: 'ignore' });\n\n return true;\n } catch {\n return false;\n }\n}\n","import boxen from 'boxen';\nimport kleur from 'kleur';\n\nexport default function createSuccessInfo(name: string, packageManage: string) {\n const END_MSG = `${kleur.blue(\n '🎉 created project ' + kleur.green(name) + ' Successfully',\n )}\\n\\n 🙏 Thanks for using Create-Crack !`;\n\n const BOXEN_CONFIG = {\n padding: 1,\n margin: { top: 1, bottom: 1 },\n borderColor: 'cyan',\n align: 'center',\n borderStyle: 'double',\n title: '🚀 Congratulations',\n titleAlignment: 'center',\n };\n\n process.stdout.write(boxen(END_MSG, BOXEN_CONFIG as any));\n\n console.log('👉 Get started with the following commands:');\n console.log(`\\n\\r\\r cd ${kleur.cyan(name)}`);\n console.log(`\\r\\r ${kleur.cyan(packageManage)} start \\r\\n`);\n}\n","import { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'node:path';\n\nimport { PackageJsonType } from '../types';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 获取并解析指定路径下的 package.json 文件。\n *\n * @param relativePath - 相对于当前模块目录的路径(当 `isFromCurrentDir` 为 `true` 时)\n * @param isFromCurrentDir - 如果为 `true`,则路径基于当前文件目录;否则视为绝对路径或调用方自定义路径\n * @returns 返回解析后的 package.json 内容对象\n *\n * @example\n * ```ts\n * const pkg = getPackageJsonInfo('../package.json', true);\n * console.log(pkg.name);\n * ```\n */\nfunction getPackageJsonInfo(relativePath: string, isFromCurrentDir: boolean): PackageJsonType {\n const filePath = isFromCurrentDir ? join(__dirname, relativePath) : relativePath;\n const content = readFileSync(filePath, 'utf-8');\n\n return JSON.parse(content) as PackageJsonType;\n}\n\nexport default getPackageJsonInfo;\n","import { join } from 'node:path';\nimport { writeFileSync, existsSync, copyFileSync, readdirSync, statSync, mkdirSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport kleur from 'kleur';\n\nimport { PackageJsonType } from '../types';\nimport getPackageJsonInfo from './package_info.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制 husky 模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 为指定项目集成 commitlint 和相关 husky 配置。\n *\n * @param projectName - 项目目录名\n *\n * @example\n * ```ts\n * createCommitlint('my-app');\n * ```\n */\nexport default function createCommitlint(projectName: string): void {\n try {\n // 复制 husky 模板文件\n const huskyTemplateSource = join(__dirname, '../template/template-husky');\n\n if (existsSync(huskyTemplateSource)) {\n copyFolderRecursive(huskyTemplateSource, projectName);\n console.log('✅ Husky 模板文件已复制');\n } else {\n console.warn('⚠️ Husky 模板目录未找到');\n\n return;\n }\n\n // 使用绝对路径\n const targetPackagePath = join(projectName, 'package.json');\n const huskyTemplatePath = join(__dirname, '../src/package/husky.json');\n\n console.log(`读取 husky 模板: ${huskyTemplatePath}`);\n console.log(`读取项目 package.json: ${targetPackagePath}`);\n\n const huskyConfig = getPackageJsonInfo(huskyTemplatePath, false);\n const projectPackageJson: PackageJsonType = getPackageJsonInfo(targetPackagePath, false);\n\n // 合并 husky 配置到项目的 package.json 中\n for (const key in huskyConfig) {\n const sourceValue = huskyConfig[key];\n const targetValue = projectPackageJson[key];\n\n if (typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n projectPackageJson[key] = {\n ...targetValue,\n ...sourceValue,\n };\n } else if (Array.isArray(sourceValue)) {\n projectPackageJson[key] = [...sourceValue, ...(targetValue ?? [])];\n } else {\n projectPackageJson[key] = sourceValue;\n }\n }\n\n writeFileSync(targetPackagePath, JSON.stringify(projectPackageJson, null, 2), 'utf-8');\n console.log('✅ Commit Lint 配置已成功合并到 package.json');\n } catch (error) {\n console.error('❌ 创建 Commit Lint 配置时出错:', error);\n process.exit(1);\n }\n}\n","/**\n * 包版本管理配置\n */\n\n// 需要动态更新版本的自有包列表\nexport const PACKAGES_TO_UPDATE = [\n '@verve-kit/react-script',\n // 可以在这里添加更多需要动态更新的自有包\n];\n","import os from 'node:os';\nimport { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport kleur from 'kleur';\n\nimport getPackageJsonInfo from './package_info.js';\nimport type { PackageJsonType } from '../types';\nimport { PACKAGES_TO_UPDATE } from './package-versions';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// 添加调试信息\nconsole.log('create_file.ts __dirname:', __dirname);\n\n/**\n * 获取 npm 包的最新版本\n *\n * @param packageName - 包名\n * @returns Promise<string> - 最新版本号,如果获取失败则返回默认版本\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n\n return `^${data.version}`;\n } catch (error) {\n console.warn(kleur.yellow(`⚠️ 无法获取 ${packageName} 的最新版本,跳过更新`));\n console.warn(kleur.gray(`错误信息: ${error}`));\n\n return null;\n }\n}\n\n/**\n * 更新包依赖的版本号为最新版本\n *\n * @param packageJson - package.json 对象\n * @returns Promise<PackageJsonType> - 更新后的 package.json 对象\n */\nasync function updatePackageVersions(packageJson: PackageJsonType): Promise<PackageJsonType> {\n console.log(kleur.cyan('🔄 正在获取最新包版本...'));\n\n const packagesToUpdate = PACKAGES_TO_UPDATE;\n\n // 并发获取所有包的最新版本\n const versionPromises = packagesToUpdate.map(async (packageName) => {\n const version = await getLatestPackageVersion(packageName);\n\n return { packageName, version };\n });\n\n try {\n const versionResults = await Promise.all(versionPromises);\n\n // 更新 dependencies\n if (packageJson.dependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.dependencies[packageName]) {\n packageJson.dependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n // 更新 devDependencies\n if (packageJson.devDependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.devDependencies[packageName]) {\n packageJson.devDependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n console.log(kleur.green('🎉 包版本更新完成'));\n } catch (error) {\n console.error(kleur.red('❌ 更新包版本时出错:'), error);\n }\n\n return packageJson;\n}\n\n/**\n * 合并 ESLint 配置到 package.json 中\n *\n * @param packageJson - 基础的 package.json 对象\n * @returns 合并了 ESLint 配置的 package.json 对象\n */\nfunction mergeEslintConfig(packageJson: PackageJsonType): PackageJsonType {\n try {\n const eslintConfigPath = join(__dirname, '../package/eslint.json');\n const eslintConfig = getPackageJsonInfo(eslintConfigPath, false);\n\n if (!eslintConfig) {\n console.warn('⚠️ ESLint 配置文件未找到,跳过 ESLint 配置合并');\n\n return packageJson;\n }\n\n // 合并 scripts\n if (eslintConfig.scripts) {\n packageJson.scripts = {\n ...packageJson.scripts,\n ...eslintConfig.scripts,\n };\n }\n\n // 合并 devDependencies\n if (eslintConfig.devDependencies) {\n packageJson.devDependencies = {\n ...packageJson.devDependencies,\n ...eslintConfig.devDependencies,\n };\n }\n\n // 合并 lint-staged\n if (eslintConfig['lint-staged']) {\n packageJson['lint-staged'] = eslintConfig['lint-staged'];\n }\n\n console.log('✅ ESLint 配置已成功合并到 package.json');\n\n return packageJson;\n } catch (error) {\n console.error('❌ 合并 ESLint 配置时出错:', error);\n\n return packageJson;\n }\n}\n\n/**\n * 创建指定类型项目的 `package.json` 对象。\n *\n * @param projectType - 模板类型(如:react、vue、node 等)\n * @param projectName - 项目名称,会被写入到 `package.json.name`\n * @param enableEslint - 是否启用 ESLint 配置\n * @returns 返回已定制的 `package.json` 对象\n *\n * @example\n * ```ts\n * const pkg = createPackageJson('react-web-ts', 'my-app', true);\n * console.log(pkg.name); // 'my-app'\n * ```\n */\nasync function createPackageJson(\n projectType: string,\n projectName: string,\n enableEslint: boolean = false,\n): Promise<PackageJsonType> {\n try {\n // 从 package 目录读取对应项目类型的 JSON 文件\n const templatePath = join(__dirname, `../package/${projectType}.json`);\n console.log(`尝试读取模板: ${templatePath}`);\n\n const packageInfo = getPackageJsonInfo(templatePath, false);\n if (!packageInfo) throw new Error('Package info is undefined');\n\n packageInfo.author = os.userInfo().username;\n packageInfo.name = projectName;\n\n // 更新包版本为最新版本\n const updatedPackageInfo = await updatePackageVersions(packageInfo);\n\n // 如果启用了 ESLint,合并 ESLint 配置\n if (enableEslint) {\n return mergeEslintConfig(updatedPackageInfo);\n }\n\n return updatedPackageInfo;\n } catch (error) {\n console.error(`❌ Failed to create package.json for \"${projectType}\"`);\n console.error(error);\n process.exit(1);\n }\n}\n\n/**\n * 读取模板目录中的任意 JSON 文件为字符串内容。\n *\n * @param fileName - 模板文件名(例如:`config.json`)\n * @returns 返回文件内容的字符串\n *\n * @example\n * ```ts\n * const config = createTemplateFile('vite.config.json');\n * console.log(JSON.parse(config));\n * ```\n */\nfunction createTemplateFile(fileName: string): string {\n const filePath = join(__dirname, `../package/${fileName}`);\n\n return readFileSync(filePath, 'utf-8');\n}\n\nexport { createPackageJson, createTemplateFile };\n","import { resolveApp } from '@verve-kit/utils';\nimport { existsSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync } from 'node:fs';\nimport { execSync, exec } from 'node:child_process';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { confirm, intro, select } from '@clack/prompts';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\n\nimport { removeDirectory } from './file_controller';\nimport { ProjectTypes, PackageManagers } from './question';\nimport isGitInstalled from './check_git_installation';\nimport createSuccessInfo from './create_success_info';\nimport createCommitlint from './create_commit_lint';\nimport { createPackageJson, createTemplateFile } from './create_file';\n\n// 获取当前文件的目录路径\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 设置 Ctrl+C 退出监听(仅限终端环境)\n */\nif (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.on('data', (key) => {\n if (key[0] === 3) {\n console.log('⌨️ Ctrl+C pressed - Exiting the program');\n process.exit(1);\n }\n });\n}\n\n/**\n * 创建项目根目录,如有同名文件则询问是否覆盖\n *\n * @param name - 项目名\n * @param force - 是否强制覆盖\n */\nconst makeDirectory = async (name: string, { force }: { force: boolean }) => {\n const root = resolveApp(name);\n\n if (existsSync(root) && !force) {\n const shouldOverwrite = await confirm({\n message: 'Target directory already exists. Overwrite?',\n });\n if (!shouldOverwrite) process.exit(1);\n await removeDirectory(name, true);\n }\n\n mkdirSync(root, { recursive: true });\n};\n\n/**\n * 收集用户交互选择的信息\n */\nconst getTableInfo = async (options: any) => {\n let projectType: string;\n let packageManager: string;\n let enableEslint: boolean;\n let commitLint: boolean;\n\n // 检查是否提供了模板参数\n if (options.template) {\n if (!['react-web-js', 'react-web-ts'].includes(options.template)) {\n console.error(kleur.red(`❌ 无效的模板类型: ${options.template}`));\n console.error(kleur.yellow('可用的模板: react-web-js, react-web-ts'));\n process.exit(1);\n }\n\n projectType = options.template;\n } else {\n projectType = (await select({\n message: '🎯 选择项目类型:',\n options: ProjectTypes,\n })) as string;\n }\n\n // 检查是否提供了包管理器参数\n if (options.packageManager) {\n if (!['npm', 'yarn', 'pnpm', 'cnpm'].includes(options.packageManager)) {\n console.error(kleur.red(`❌ 无效的包管理器: ${options.packageManager}`));\n console.error(kleur.yellow('可用的包管理器: npm, yarn, pnpm, cnpm'));\n process.exit(1);\n }\n\n packageManager = options.packageManager;\n } else {\n packageManager = (await select({\n message: '📦 选择包管理器:',\n options: PackageManagers,\n })) as string;\n }\n\n // 检查 ESLint 选项\n if (options.eslint !== undefined) {\n enableEslint = options.eslint;\n } else {\n enableEslint = (await confirm({\n message: '🔍 是否启用 ESLint 代码检查?',\n })) as boolean;\n }\n\n // 检查 Commit Lint 选项\n if (options.commitLint !== undefined) {\n commitLint = options.commitLint;\n } else {\n commitLint = (await confirm({\n message: '📝 是否启用 Commit Lint 配置?',\n })) as boolean;\n }\n\n return { projectType, packageManager, enableEslint, commitLint };\n};\n\n/**\n * 创建 ESLint 配置文件\n *\n * @param root - 项目根目录路径\n */\nconst createEslintConfig = (root: string) => {\n try {\n const eslintConfigSource = join(__dirname, '../template/eslint/eslint.config.mjs');\n const eslintConfigDest = join(root, 'eslint.config.mjs');\n\n if (existsSync(eslintConfigSource)) {\n copyFileSync(eslintConfigSource, eslintConfigDest);\n console.log('✅ ESLint 配置文件已创建');\n } else {\n console.warn('⚠️ ESLint 配置模板文件未找到');\n }\n } catch (error) {\n console.error('❌ 创建 ESLint 配置文件时出错:', error);\n }\n};\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 复制本地模板到项目目录\n *\n * @param projectType - 项目类型\n * @param projectRoot - 项目根目录\n */\nconst copyLocalTemplate = (projectType: string, projectRoot: string) => {\n const spinner = createSpinner(kleur.bold().cyan('正在复制项目模板...')).start();\n\n try {\n const templateSource = join(__dirname, `../template/template-${projectType}`);\n\n if (!existsSync(templateSource)) {\n throw new Error(`模板目录不存在: ${templateSource}`);\n }\n\n copyFolderRecursive(templateSource, projectRoot);\n spinner.success({ text: kleur.bold().green('✅ 项目模板复制成功') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('❌ 项目模板复制失败') });\n console.error('Error:', error);\n process.exit(1);\n }\n};\n\n/**\n * 创建项目主流程\n *\n * @param name - 项目名\n * @param options - 控制参数\n */\nexport default async function createApp(name: string, options: any) {\n intro(kleur.green(' 🚧 Create Your App - 项目脚手架工具 '));\n\n const root = resolveApp(name);\n await makeDirectory(name, options);\n\n // 检查是否使用了命令行参数(非交互模式)\n const isNonInteractive =\n options.template ||\n options.packageManager ||\n options.eslint !== undefined ||\n options.commitLint !== undefined;\n\n if (!isNonInteractive) {\n console.log(kleur.cyan('\\n📋 请选择项目配置:\\n'));\n }\n\n const { projectType, packageManager, enableEslint, commitLint } = await getTableInfo(options);\n\n console.log(kleur.yellow('\\n🔧 正在创建项目...'));\n console.log(kleur.gray(`📁 项目名称: ${name}`));\n console.log(kleur.gray(`🎯 项目类型: ${projectType}`));\n console.log(kleur.gray(`📦 包管理器: ${packageManager}`));\n console.log(kleur.gray(`🔍 ESLint: ${enableEslint ? '启用' : '禁用'}`));\n console.log(kleur.gray(`📝 Commit Lint: ${commitLint ? '启用' : '禁用'}`));\n\n // 写入 package.json\n const pkg = await createPackageJson(projectType, name, enableEslint);\n writeFileSync(join(root, 'package.json'), JSON.stringify(pkg, null, 2));\n\n // 写入 .gitignore\n writeFileSync(join(root, '.gitignore'), createTemplateFile('gitignore'));\n\n // 复制本地模板文件\n copyLocalTemplate(projectType, root);\n\n // 注入 lint 配置\n if (commitLint) {\n createCommitlint(root);\n }\n\n // 创建 ESLint 配置文件\n if (enableEslint) {\n createEslintConfig(root);\n }\n\n // 安装依赖\n const spinner = createSpinner(kleur.bold('Installing dependencies...')).start();\n exec(`${packageManager} install`, { cwd: root }, (err) => {\n if (err) {\n spinner.error({ text: kleur.red('Failed to install dependencies') });\n console.error(err);\n process.exit(1);\n } else {\n spinner.success({ text: kleur.green('✅ Project initialization complete') });\n\n // 显示项目创建成功的详细信息\n console.log(kleur.green('\\n🎉 项目创建成功!\\n'));\n console.log(kleur.cyan('📦 已安装的功能:'));\n console.log(\n kleur.gray(\n ` • ${projectType === 'react-web-ts' ? 'React + TypeScript' : 'React + JavaScript'} 项目模板`,\n ),\n );\n\n if (enableEslint) {\n console.log(kleur.gray(' • ESLint 代码检查工具'));\n }\n\n if (commitLint) {\n console.log(kleur.gray(' • Commit Lint 提交规范'));\n }\n\n createSuccessInfo(name, packageManager);\n }\n });\n\n // 初始化 Git 仓库\n if (isGitInstalled()) {\n execSync('git init', { cwd: root });\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport kleur from 'kleur';\n\nimport createApp from './core/create_app.js';\nimport getPackageJsonInfo from './core/package_info.js';\n\nconst program = new Command();\n\nprogram\n .version(kleur.green(getPackageJsonInfo('../package.json', true).version || '1.0.0'))\n .arguments('<project-name>')\n .description(kleur.cyan('Create a directory for your project files'))\n .option('-f, --force', 'Overwrite target directory if it exists')\n .option('-t, --template <template>', 'Project template (react-web-js | react-web-ts)')\n .option('-p, --package-manager <manager>', 'Package manager (npm | yarn | pnpm | cnpm)')\n .option('-e, --eslint', 'Enable ESLint configuration')\n .option('-c, --commit-lint', 'Enable Commit Lint configuration')\n .option('--no-eslint', 'Disable ESLint configuration')\n .option('--no-commit-lint', 'Disable Commit Lint configuration')\n .addHelpText(\n 'after',\n `\n\n${kleur.yellow('Examples:')}\n ${kleur.gray('# Interactive mode (default)')}\n $ create-crack my-app\n\n ${kleur.gray('# Non-interactive mode with all options')}\n $ create-crack my-app -t react-web-ts -p pnpm -e -c\n\n ${kleur.gray('# Create React JS project with npm and ESLint')}\n $ create-crack my-app --template react-web-js --package-manager npm --eslint\n\n ${kleur.gray('# Create project without ESLint and Commit Lint')}\n $ create-crack my-app -t react-web-ts -p yarn --no-eslint --no-commit-lint\n\n${kleur.yellow('Available Templates:')}\n ${kleur.cyan('react-web-js')} - React + JavaScript Web应用程序\n ${kleur.cyan('react-web-ts')} - React + TypeScript Web应用程序\n\n${kleur.yellow('Available Package Managers:')}\n ${kleur.cyan('npm')} - Node Package Manager\n ${kleur.cyan('yarn')} - Yarn Package Manager \n ${kleur.cyan('pnpm')} - PNPM Package Manager\n ${kleur.cyan('cnpm')} - CNPM Package Manager\n`,\n )\n .action((name, options) => {\n createApp(name, options);\n })\n .parse(process.argv);\n"],"names":["template","packageVersion","getProjectLink","templates","Map","map","removeDirectory","directoryPath","verbose","fullPath","resolveApp","spinner","createSpinner","kleur","bold","cyan","start","existsSync","rmSync","recursive","force","success","text","green","error","red","console","createSelectType","value","hint","result","label","undefined","ProjectTypes","PackageManagers","checkGitInstallation","execSync","stdio","createSuccessInfo","name","packageManage","END_MSG","blue","BOXEN_CONFIG","padding","margin","top","bottom","borderColor","align","borderStyle","title","titleAlignment","process","stdout","write","boxen","log","__filename","fileURLToPath","url","__dirname","dirname","getPackageJsonInfo","relativePath","isFromCurrentDir","filePath","join","content","readFileSync","JSON","parse","copyFolderRecursive","sourceDir","destinationDir","mkdirSync","items","readdirSync","item","src","dest","stat","statSync","isDirectory","copyFileSync","exit","createCommitlint","projectName","huskyTemplateSource","warn","targetPackagePath","huskyTemplatePath","huskyConfig","projectPackageJson","key","sourceValue","targetValue","Array","isArray","writeFileSync","stringify","PACKAGES_TO_UPDATE","getLatestPackageVersion","packageName","response","fetch","ok","Error","status","data","json","version","yellow","gray","updatePackageVersions","packageJson","packagesToUpdate","versionPromises","versionResults","Promise","all","dependencies","devDependencies","mergeEslintConfig","eslintConfigPath","eslintConfig","scripts","createPackageJson","projectType","enableEslint","templatePath","packageInfo","author","os","userInfo","username","updatedPackageInfo","createTemplateFile","fileName","stdin","isTTY","setRawMode","on","makeDirectory","root","shouldOverwrite","confirm","message","getTableInfo","options","packageManager","commitLint","includes","select","eslint","createEslintConfig","eslintConfigSource","eslintConfigDest","copyLocalTemplate","projectRoot","templateSource","createApp","intro","isNonInteractive","pkg","exec","cwd","err","isGitInstalled","program","Command","arguments","description","option","addHelpText","action","argv"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sources":["../src/core/constants.ts","../src/core/file_controller.ts","../src/core/question.ts","../src/core/check_git_installation.ts","../src/core/create_success_info.ts","../src/core/package_info.ts","../src/core/create_commit_lint.ts","../src/core/package-versions.ts","../src/core/create_file.ts","../src/core/create_app.ts","../src/index.ts"],"sourcesContent":["const template: string[] = ['react-web-js', 'react-web-ts'];\n\nexport const packageVersion = '1.0.1';\n\nconst getProjectLink = (templates: string[]): Map<string, string> =>\n new Map(\n templates.map((template) => [\n template,\n `https://registry.npmjs.org/@laconic/template-${template}/-/template-${template}-${packageVersion}.tgz`,\n ]),\n );\n\nexport const projectLink: Map<string, string> = getProjectLink(template);\n","import { resolveApp } from '@verve-kit/utils';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\nimport {\n existsSync,\n rmSync,\n mkdirSync,\n copyFileSync,\n statSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport * as tar from 'tar';\n\nimport { packageVersion } from './constants';\n\n/**\n * 删除指定目录\n *\n * @param directoryPath - 要删除的目录路径(默认 \"node_modules\")\n * @param verbose - 是否显示终端提示信息\n */\nexport async function removeDirectory(directoryPath = 'node_modules', verbose = true) {\n const fullPath = resolveApp(directoryPath);\n\n if (verbose) {\n const spinner = createSpinner(kleur.bold().cyan('File being deleted...')).start();\n\n try {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n\n spinner.success({ text: kleur.bold().green('Deleted successfully') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Deletion failed') });\n console.error(error);\n }\n } else {\n if (existsSync(fullPath)) {\n rmSync(fullPath, { recursive: true, force: true });\n }\n }\n}\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nasync function copyFolderRecursive(sourceDir: string, destinationDir: string) {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n await copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(\n kleur.red('\\n 😡😡😡 An error occurred during the template download, please try again'),\n error,\n );\n process.exit(1);\n }\n}\n\n/**\n * 下载并解压 NPM 包模板\n *\n * @param packageURL - 包的下载链接\n * @param packageName - 包名\n * @param projectName - 创建的项目目录名\n */\nexport async function getNpmPackage(\n packageURL: string,\n packageName: string,\n projectName: string,\n): Promise<void> {\n const spinner = createSpinner(kleur.bold().cyan('Creating a project...')).start();\n\n try {\n const response = await fetch(packageURL);\n\n if (!response.ok) {\n throw new Error(`Failed to download package: ${response.statusText}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n const currentDir = resolveApp(projectName);\n const tgzPath = join(currentDir, `${packageName}-${packageVersion}.tgz`);\n writeFileSync(tgzPath, buffer);\n\n await tar.extract({\n file: tgzPath,\n cwd: currentDir,\n });\n\n unlinkSync(tgzPath);\n await copyFolderRecursive(join(projectName, 'package/template'), projectName);\n await removeDirectory(join(projectName, 'package'), false);\n\n spinner.success({ text: kleur.bold().green('Project creation successful') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('Project creation failed') });\n console.error('Error:', error);\n process.exit(1);\n }\n}\n","interface ISelectType {\n value: string;\n label: string;\n hint?: string;\n}\n\nfunction createSelectType(value: string, hint?: string): ISelectType {\n const result: ISelectType = { value, label: value };\n\n if (hint !== undefined) {\n result.hint = hint;\n }\n\n return result;\n}\n\n// 优化后只保留两个可用的模板库\nexport const ProjectTypes: ISelectType[] = [\n createSelectType('react-web-js', 'React + JavaScript Web应用程序 🚀'),\n createSelectType('react-web-ts', 'React + TypeScript Web应用程序 🚀'),\n];\n\nexport const PackageManagers: ISelectType[] = [\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'pnpm', label: 'pnpm' },\n { value: 'cnpm', label: 'cnpm' },\n];\n","import { execSync } from 'node:child_process';\n\n/**\n * 检查当前系统是否已安装 Git。\n *\n * @returns `true` 表示 Git 已安装,`false` 表示未安装。\n *\n * @example\n * ```ts\n * if (checkGitInstallation()) {\n * console.log('Git is available.');\n * } else {\n * console.log('Please install Git.');\n * }\n * ```\n */\nexport default function checkGitInstallation(): boolean {\n try {\n // 尝试静默执行 git --version,如果命令执行失败将抛出异常\n execSync('git --version', { stdio: 'ignore' });\n\n return true;\n } catch {\n return false;\n }\n}\n","import boxen from 'boxen';\nimport kleur from 'kleur';\n\nexport default function createSuccessInfo(name: string, packageManage: string) {\n const END_MSG = `${kleur.blue(\n '🎉 created project ' + kleur.green(name) + ' Successfully',\n )}\\n\\n 🙏 Thanks for using Create-Crack !`;\n\n const BOXEN_CONFIG = {\n padding: 1,\n margin: { top: 1, bottom: 1 },\n borderColor: 'cyan',\n align: 'center',\n borderStyle: 'double',\n title: '🚀 Congratulations',\n titleAlignment: 'center',\n };\n\n process.stdout.write(boxen(END_MSG, BOXEN_CONFIG as any));\n\n console.log('👉 Get started with the following commands:');\n console.log(`\\n\\r\\r cd ${kleur.cyan(name)}`);\n console.log(`\\r\\r ${kleur.cyan(packageManage)} start \\r\\n`);\n}\n","import { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'node:path';\n\nimport { PackageJsonType } from '../types';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 获取并解析指定路径下的 package.json 文件。\n *\n * @param relativePath - 相对于当前模块目录的路径(当 `isFromCurrentDir` 为 `true` 时)\n * @param isFromCurrentDir - 如果为 `true`,则路径基于当前文件目录;否则视为绝对路径或调用方自定义路径\n * @returns 返回解析后的 package.json 内容对象\n *\n * @example\n * ```ts\n * const pkg = getPackageJsonInfo('../package.json', true);\n * console.log(pkg.name);\n * ```\n */\nfunction getPackageJsonInfo(relativePath: string, isFromCurrentDir: boolean): PackageJsonType {\n const filePath = isFromCurrentDir ? join(__dirname, relativePath) : relativePath;\n const content = readFileSync(filePath, 'utf-8');\n\n return JSON.parse(content) as PackageJsonType;\n}\n\nexport default getPackageJsonInfo;\n","import { join } from 'node:path';\nimport { writeFileSync, existsSync, copyFileSync, readdirSync, statSync, mkdirSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport kleur from 'kleur';\n\nimport { PackageJsonType } from '../types';\nimport getPackageJsonInfo from './package_info.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制 husky 模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 为指定项目集成 commitlint 和相关 husky 配置。\n *\n * @param projectName - 项目目录名\n *\n * @example\n * ```ts\n * createCommitlint('my-app');\n * ```\n */\nexport default function createCommitlint(projectName: string): void {\n try {\n // 复制 husky 模板文件\n const huskyTemplateSource = join(__dirname, '../template/template-husky');\n\n if (existsSync(huskyTemplateSource)) {\n copyFolderRecursive(huskyTemplateSource, projectName);\n console.log('✅ Husky 模板文件已复制');\n } else {\n console.warn('⚠️ Husky 模板目录未找到');\n\n return;\n }\n\n // 使用绝对路径\n const targetPackagePath = join(projectName, 'package.json');\n const huskyTemplatePath = join(__dirname, '../src/package/husky.json');\n\n console.log(`读取 husky 模板: ${huskyTemplatePath}`);\n console.log(`读取项目 package.json: ${targetPackagePath}`);\n\n const huskyConfig = getPackageJsonInfo(huskyTemplatePath, false);\n const projectPackageJson: PackageJsonType = getPackageJsonInfo(targetPackagePath, false);\n\n // 合并 husky 配置到项目的 package.json 中\n for (const key in huskyConfig) {\n const sourceValue = huskyConfig[key];\n const targetValue = projectPackageJson[key];\n\n if (typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n projectPackageJson[key] = {\n ...targetValue,\n ...sourceValue,\n };\n } else if (Array.isArray(sourceValue)) {\n projectPackageJson[key] = [...sourceValue, ...(targetValue ?? [])];\n } else {\n projectPackageJson[key] = sourceValue;\n }\n }\n\n writeFileSync(targetPackagePath, JSON.stringify(projectPackageJson, null, 2), 'utf-8');\n console.log('✅ Commit Lint 配置已成功合并到 package.json');\n } catch (error) {\n console.error('❌ 创建 Commit Lint 配置时出错:', error);\n process.exit(1);\n }\n}\n","/**\n * 包版本管理配置\n */\n\n// 需要动态更新版本的自有包列表\nexport const PACKAGES_TO_UPDATE = [\n '@verve-kit/react-script',\n // 可以在这里添加更多需要动态更新的自有包\n];\n","import os from 'node:os';\nimport { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport kleur from 'kleur';\n\nimport getPackageJsonInfo from './package_info.js';\nimport type { PackageJsonType } from '../types';\nimport { PACKAGES_TO_UPDATE } from './package-versions';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// 添加调试信息\nconsole.log('create_file.ts __dirname:', __dirname);\n\n/**\n * 获取 npm 包的最新版本\n *\n * @param packageName - 包名\n * @returns Promise<string> - 最新版本号,如果获取失败则返回默认版本\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n\n return `^${data.version}`;\n } catch (error) {\n console.warn(kleur.yellow(`⚠️ 无法获取 ${packageName} 的最新版本,跳过更新`));\n console.warn(kleur.gray(`错误信息: ${error}`));\n\n return null;\n }\n}\n\n/**\n * 更新包依赖的版本号为最新版本\n *\n * @param packageJson - package.json 对象\n * @returns Promise<PackageJsonType> - 更新后的 package.json 对象\n */\nasync function updatePackageVersions(packageJson: PackageJsonType): Promise<PackageJsonType> {\n console.log(kleur.cyan('🔄 正在获取最新包版本...'));\n\n const packagesToUpdate = PACKAGES_TO_UPDATE;\n\n // 并发获取所有包的最新版本\n const versionPromises = packagesToUpdate.map(async (packageName) => {\n const version = await getLatestPackageVersion(packageName);\n\n return { packageName, version };\n });\n\n try {\n const versionResults = await Promise.all(versionPromises);\n\n // 更新 dependencies\n if (packageJson.dependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.dependencies[packageName]) {\n packageJson.dependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n // 更新 devDependencies\n if (packageJson.devDependencies) {\n for (const { packageName, version } of versionResults) {\n if (version && packageJson.devDependencies[packageName]) {\n packageJson.devDependencies[packageName] = version;\n console.log(kleur.green(`✅ 更新 ${packageName}: ${version}`));\n }\n }\n }\n\n console.log(kleur.green('🎉 包版本更新完成'));\n } catch (error) {\n console.error(kleur.red('❌ 更新包版本时出错:'), error);\n }\n\n return packageJson;\n}\n\n/**\n * 合并 ESLint 配置到 package.json 中\n *\n * @param packageJson - 基础的 package.json 对象\n * @returns 合并了 ESLint 配置的 package.json 对象\n */\nfunction mergeEslintConfig(packageJson: PackageJsonType): PackageJsonType {\n try {\n const eslintConfigPath = join(__dirname, './package/eslint.json');\n const eslintConfig = getPackageJsonInfo(eslintConfigPath, false);\n\n if (!eslintConfig) {\n console.warn('⚠️ ESLint 配置文件未找到,跳过 ESLint 配置合并');\n\n return packageJson;\n }\n\n // 合并 scripts\n if (eslintConfig.scripts) {\n packageJson.scripts = {\n ...packageJson.scripts,\n ...eslintConfig.scripts,\n };\n }\n\n // 合并 devDependencies\n if (eslintConfig.devDependencies) {\n packageJson.devDependencies = {\n ...packageJson.devDependencies,\n ...eslintConfig.devDependencies,\n };\n }\n\n // 合并 lint-staged\n if (eslintConfig['lint-staged']) {\n packageJson['lint-staged'] = eslintConfig['lint-staged'];\n }\n\n console.log('✅ ESLint 配置已成功合并到 package.json');\n\n return packageJson;\n } catch (error) {\n console.error('❌ 合并 ESLint 配置时出错:', error);\n\n return packageJson;\n }\n}\n\n/**\n * 创建指定类型项目的 `package.json` 对象。\n *\n * @param projectType - 模板类型(如:react、vue、node 等)\n * @param projectName - 项目名称,会被写入到 `package.json.name`\n * @param enableEslint - 是否启用 ESLint 配置\n * @returns 返回已定制的 `package.json` 对象\n *\n * @example\n * ```ts\n * const pkg = createPackageJson('react-web-ts', 'my-app', true);\n * console.log(pkg.name); // 'my-app'\n * ```\n */\nasync function createPackageJson(\n projectType: string,\n projectName: string,\n enableEslint: boolean = false,\n): Promise<PackageJsonType> {\n try {\n // 从 package 目录读取对应项目类型的 JSON 文件\n const templatePath = join(__dirname, `./package/${projectType}.json`);\n console.log(`尝试读取模板: ${templatePath}`);\n\n const packageInfo = getPackageJsonInfo(templatePath, false);\n if (!packageInfo) throw new Error('Package info is undefined');\n\n packageInfo.author = os.userInfo().username;\n packageInfo.name = projectName;\n\n // 更新包版本为最新版本\n const updatedPackageInfo = await updatePackageVersions(packageInfo);\n\n // 如果启用了 ESLint,合并 ESLint 配置\n if (enableEslint) {\n return mergeEslintConfig(updatedPackageInfo);\n }\n\n return updatedPackageInfo;\n } catch (error) {\n console.error(`❌ Failed to create package.json for \"${projectType}\"`);\n console.error(error);\n process.exit(1);\n }\n}\n\n/**\n * 读取模板目录中的任意 JSON 文件为字符串内容。\n *\n * @param fileName - 模板文件名(例如:`config.json`)\n * @returns 返回文件内容的字符串\n *\n * @example\n * ```ts\n * const config = createTemplateFile('vite.config.json');\n * console.log(JSON.parse(config));\n * ```\n */\nfunction createTemplateFile(fileName: string): string {\n const filePath = join(__dirname, `./package/${fileName}`);\n\n return readFileSync(filePath, 'utf-8');\n}\n\nexport { createPackageJson, createTemplateFile };\n","import { resolveApp } from '@verve-kit/utils';\nimport { existsSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync } from 'node:fs';\nimport { execSync, exec } from 'node:child_process';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { confirm, intro, select } from '@clack/prompts';\nimport kleur from 'kleur';\nimport { createSpinner } from 'nanospinner';\n\nimport { removeDirectory } from './file_controller';\nimport { ProjectTypes, PackageManagers } from './question';\nimport isGitInstalled from './check_git_installation';\nimport createSuccessInfo from './create_success_info';\nimport createCommitlint from './create_commit_lint';\nimport { createPackageJson, createTemplateFile } from './create_file';\n\n// 获取当前文件的目录路径\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * 设置 Ctrl+C 退出监听(仅限终端环境)\n */\nif (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.on('data', (key) => {\n if (key[0] === 3) {\n console.log('⌨️ Ctrl+C pressed - Exiting the program');\n process.exit(1);\n }\n });\n}\n\n/**\n * 创建项目根目录,如有同名文件则询问是否覆盖\n *\n * @param name - 项目名\n * @param force - 是否强制覆盖\n */\nconst makeDirectory = async (name: string, { force }: { force: boolean }) => {\n const root = resolveApp(name);\n\n if (existsSync(root) && !force) {\n const shouldOverwrite = await confirm({\n message: 'Target directory already exists. Overwrite?',\n });\n if (!shouldOverwrite) process.exit(1);\n await removeDirectory(name, true);\n }\n\n mkdirSync(root, { recursive: true });\n};\n\n/**\n * 收集用户交互选择的信息\n */\nconst getTableInfo = async (options: any) => {\n let projectType: string;\n let packageManager: string;\n let enableEslint: boolean;\n let commitLint: boolean;\n\n // 检查是否提供了模板参数\n if (options.template) {\n if (!['react-web-js', 'react-web-ts'].includes(options.template)) {\n console.error(kleur.red(`❌ 无效的模板类型: ${options.template}`));\n console.error(kleur.yellow('可用的模板: react-web-js, react-web-ts'));\n process.exit(1);\n }\n\n projectType = options.template;\n } else {\n projectType = (await select({\n message: '🎯 选择项目类型:',\n options: ProjectTypes,\n })) as string;\n }\n\n // 检查是否提供了包管理器参数\n if (options.packageManager) {\n if (!['npm', 'yarn', 'pnpm', 'cnpm'].includes(options.packageManager)) {\n console.error(kleur.red(`❌ 无效的包管理器: ${options.packageManager}`));\n console.error(kleur.yellow('可用的包管理器: npm, yarn, pnpm, cnpm'));\n process.exit(1);\n }\n\n packageManager = options.packageManager;\n } else {\n packageManager = (await select({\n message: '📦 选择包管理器:',\n options: PackageManagers,\n })) as string;\n }\n\n // 检查 ESLint 选项\n if (options.eslint !== undefined) {\n enableEslint = options.eslint;\n } else {\n enableEslint = (await confirm({\n message: '🔍 是否启用 ESLint 代码检查?',\n })) as boolean;\n }\n\n // 检查 Commit Lint 选项\n if (options.commitLint !== undefined) {\n commitLint = options.commitLint;\n } else {\n commitLint = (await confirm({\n message: '📝 是否启用 Commit Lint 配置?',\n })) as boolean;\n }\n\n return { projectType, packageManager, enableEslint, commitLint };\n};\n\n/**\n * 创建 ESLint 配置文件\n *\n * @param root - 项目根目录路径\n */\nconst createEslintConfig = (root: string) => {\n try {\n const eslintConfigSource = join(__dirname, '../template/eslint/eslint.config.mjs');\n const eslintConfigDest = join(root, 'eslint.config.mjs');\n\n if (existsSync(eslintConfigSource)) {\n copyFileSync(eslintConfigSource, eslintConfigDest);\n console.log('✅ ESLint 配置文件已创建');\n } else {\n console.warn('⚠️ ESLint 配置模板文件未找到');\n }\n } catch (error) {\n console.error('❌ 创建 ESLint 配置文件时出错:', error);\n }\n};\n\n/**\n * 递归复制文件夹\n *\n * @param sourceDir - 源文件夹路径\n * @param destinationDir - 目标文件夹路径\n */\nconst copyFolderRecursive = (sourceDir: string, destinationDir: string) => {\n try {\n if (!existsSync(destinationDir)) {\n mkdirSync(destinationDir, { recursive: true });\n }\n\n const items = readdirSync(sourceDir);\n\n for (const item of items) {\n const src = join(sourceDir, item);\n const dest = join(destinationDir, item);\n const stat = statSync(src);\n\n if (stat.isDirectory()) {\n copyFolderRecursive(src, dest);\n } else {\n copyFileSync(src, dest);\n }\n }\n } catch (error) {\n console.error(kleur.red('❌ 复制模板文件时出错:'), error);\n process.exit(1);\n }\n};\n\n/**\n * 复制本地模板到项目目录\n *\n * @param projectType - 项目类型\n * @param projectRoot - 项目根目录\n */\nconst copyLocalTemplate = (projectType: string, projectRoot: string) => {\n const spinner = createSpinner(kleur.bold().cyan('正在复制项目模板...')).start();\n\n try {\n const templateSource = join(__dirname, `../template/template-${projectType}`);\n\n if (!existsSync(templateSource)) {\n throw new Error(`模板目录不存在: ${templateSource}`);\n }\n\n copyFolderRecursive(templateSource, projectRoot);\n spinner.success({ text: kleur.bold().green('✅ 项目模板复制成功') });\n } catch (error) {\n spinner.error({ text: kleur.bold().red('❌ 项目模板复制失败') });\n console.error('Error:', error);\n process.exit(1);\n }\n};\n\n/**\n * 创建项目主流程\n *\n * @param name - 项目名\n * @param options - 控制参数\n */\nexport default async function createApp(name: string, options: any) {\n intro(kleur.green(' 🚧 Create Your App - 项目脚手架工具 '));\n\n const root = resolveApp(name);\n await makeDirectory(name, options);\n\n // 检查是否使用了命令行参数(非交互模式)\n const isNonInteractive =\n options.template ||\n options.packageManager ||\n options.eslint !== undefined ||\n options.commitLint !== undefined;\n\n if (!isNonInteractive) {\n console.log(kleur.cyan('\\n📋 请选择项目配置:\\n'));\n }\n\n const { projectType, packageManager, enableEslint, commitLint } = await getTableInfo(options);\n\n console.log(kleur.yellow('\\n🔧 正在创建项目...'));\n console.log(kleur.gray(`📁 项目名称: ${name}`));\n console.log(kleur.gray(`🎯 项目类型: ${projectType}`));\n console.log(kleur.gray(`📦 包管理器: ${packageManager}`));\n console.log(kleur.gray(`🔍 ESLint: ${enableEslint ? '启用' : '禁用'}`));\n console.log(kleur.gray(`📝 Commit Lint: ${commitLint ? '启用' : '禁用'}`));\n\n // 写入 package.json\n const pkg = await createPackageJson(projectType, name, enableEslint);\n writeFileSync(join(root, 'package.json'), JSON.stringify(pkg, null, 2));\n\n // 写入 .gitignore\n writeFileSync(join(root, '.gitignore'), createTemplateFile('gitignore'));\n\n // 复制本地模板文件\n copyLocalTemplate(projectType, root);\n\n // 注入 lint 配置\n if (commitLint) {\n createCommitlint(root);\n }\n\n // 创建 ESLint 配置文件\n if (enableEslint) {\n createEslintConfig(root);\n }\n\n // 安装依赖\n const spinner = createSpinner(kleur.bold('Installing dependencies...')).start();\n exec(`${packageManager} install`, { cwd: root }, (err) => {\n if (err) {\n spinner.error({ text: kleur.red('Failed to install dependencies') });\n console.error(err);\n process.exit(1);\n } else {\n spinner.success({ text: kleur.green('✅ Project initialization complete') });\n\n // 显示项目创建成功的详细信息\n console.log(kleur.green('\\n🎉 项目创建成功!\\n'));\n console.log(kleur.cyan('📦 已安装的功能:'));\n console.log(\n kleur.gray(\n ` • ${projectType === 'react-web-ts' ? 'React + TypeScript' : 'React + JavaScript'} 项目模板`,\n ),\n );\n\n if (enableEslint) {\n console.log(kleur.gray(' • ESLint 代码检查工具'));\n }\n\n if (commitLint) {\n console.log(kleur.gray(' • Commit Lint 提交规范'));\n }\n\n createSuccessInfo(name, packageManager);\n }\n });\n\n // 初始化 Git 仓库\n if (isGitInstalled()) {\n execSync('git init', { cwd: root });\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport kleur from 'kleur';\n\nimport createApp from './core/create_app.js';\nimport getPackageJsonInfo from './core/package_info.js';\n\nconst program = new Command();\n\nprogram\n .version(kleur.green(getPackageJsonInfo('../package.json', true).version || '1.0.0'))\n .arguments('<project-name>')\n .description(kleur.cyan('Create a directory for your project files'))\n .option('-f, --force', 'Overwrite target directory if it exists')\n .option('-t, --template <template>', 'Project template (react-web-js | react-web-ts)')\n .option('-p, --package-manager <manager>', 'Package manager (npm | yarn | pnpm | cnpm)')\n .option('-e, --eslint', 'Enable ESLint configuration')\n .option('-c, --commit-lint', 'Enable Commit Lint configuration')\n .option('--no-eslint', 'Disable ESLint configuration')\n .option('--no-commit-lint', 'Disable Commit Lint configuration')\n .addHelpText(\n 'after',\n `\n\n${kleur.yellow('Examples:')}\n ${kleur.gray('# Interactive mode (default)')}\n $ create-crack my-app\n\n ${kleur.gray('# Non-interactive mode with all options')}\n $ create-crack my-app -t react-web-ts -p pnpm -e -c\n\n ${kleur.gray('# Create React JS project with npm and ESLint')}\n $ create-crack my-app --template react-web-js --package-manager npm --eslint\n\n ${kleur.gray('# Create project without ESLint and Commit Lint')}\n $ create-crack my-app -t react-web-ts -p yarn --no-eslint --no-commit-lint\n\n${kleur.yellow('Available Templates:')}\n ${kleur.cyan('react-web-js')} - React + JavaScript Web应用程序\n ${kleur.cyan('react-web-ts')} - React + TypeScript Web应用程序\n\n${kleur.yellow('Available Package Managers:')}\n ${kleur.cyan('npm')} - Node Package Manager\n ${kleur.cyan('yarn')} - Yarn Package Manager \n ${kleur.cyan('pnpm')} - PNPM Package Manager\n ${kleur.cyan('cnpm')} - CNPM Package Manager\n`,\n )\n .action((name, options) => {\n createApp(name, options);\n })\n .parse(process.argv);\n"],"names":["template","packageVersion","getProjectLink","templates","Map","map","removeDirectory","directoryPath","verbose","fullPath","resolveApp","spinner","createSpinner","kleur","bold","cyan","start","existsSync","rmSync","recursive","force","success","text","green","error","red","console","createSelectType","value","hint","result","label","undefined","ProjectTypes","PackageManagers","checkGitInstallation","execSync","stdio","createSuccessInfo","name","packageManage","END_MSG","blue","BOXEN_CONFIG","padding","margin","top","bottom","borderColor","align","borderStyle","title","titleAlignment","process","stdout","write","boxen","log","__filename","fileURLToPath","url","__dirname","dirname","getPackageJsonInfo","relativePath","isFromCurrentDir","filePath","join","content","readFileSync","JSON","parse","copyFolderRecursive","sourceDir","destinationDir","mkdirSync","items","readdirSync","item","src","dest","stat","statSync","isDirectory","copyFileSync","exit","createCommitlint","projectName","huskyTemplateSource","warn","targetPackagePath","huskyTemplatePath","huskyConfig","projectPackageJson","key","sourceValue","targetValue","Array","isArray","writeFileSync","stringify","PACKAGES_TO_UPDATE","getLatestPackageVersion","packageName","response","fetch","ok","Error","status","data","json","version","yellow","gray","updatePackageVersions","packageJson","packagesToUpdate","versionPromises","versionResults","Promise","all","dependencies","devDependencies","mergeEslintConfig","eslintConfigPath","eslintConfig","scripts","createPackageJson","projectType","enableEslint","templatePath","packageInfo","author","os","userInfo","username","updatedPackageInfo","createTemplateFile","fileName","stdin","isTTY","setRawMode","on","makeDirectory","root","shouldOverwrite","confirm","message","getTableInfo","options","packageManager","commitLint","includes","select","eslint","createEslintConfig","eslintConfigSource","eslintConfigDest","copyLocalTemplate","projectRoot","templateSource","createApp","intro","isNonInteractive","pkg","exec","cwd","err","isGitInstalled","program","Command","arguments","description","option","addHelpText","action","argv"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "create-crack", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "description": "CLI tool for creating crack projects", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
187412
-0.01%