@mznjs/mbump 1.0.6 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionManager-DSOVXsFt.js","names":["level: string","message: string","text: string","fn: () => Promise<T>","options: { succeedText?: string, failText?: string }","spinner: Ora","error","BASE_CONFIG: Config","config: Config","rootDir?: string","rootDir: string","config: Config","jsoncString: string","yamlString: string","result: Record<string, any>","value: any","current: any","tomlString: string","parsers: Record<string, ConfigParser>","content: string","configPath: string","_: string","path: string","config: any","userConfig: Partial<Config>","mergedConfig: Config","resolvedPackagePaths: Record<string, string>","TYPE_CONFIG: Record<string, ChangelogTypeConfig>","rootDir: string","message: string","files: string[]","content: string","newVersion: string","commits: ChangelogCommit[]","packageName?: string","categorized: Record<\n string,\n { config: ChangelogTypeConfig, items: { message: string, files: string[] }[] }\n >","sortedCategories","header: string","newContent: string","rootDir: string","commits: { message: string, files: string[] }[]","version: string","tagPrefix: string","files: string[]","error","message: string","includeTags: boolean","push: boolean","createTag: boolean","tagVersion?: string","path: string","rootDir: string","command: string","name: string","options: VersionManagerOptions","error","pkgPath?: string","pkgPath: string","rootDir: string","pkgName: string","releaseType: ReleaseType","options: UpdateOptions","result: UpdateResult","finalVersion: string | null","newVersion: string | null","error: any","dryRun","packageName: string | undefined","e: any","commitMessage: string","isDefaultPackage","gitError: any","push: boolean","updatedPackages?: Array<{ name: string, newVersion: string, pkgKey?: string }>","tag: boolean","tagPrefix: string","tagName: string","pkg: PackageInfo","version: string","oldVersion: string","newVersion: string"],"sources":["../src/utils/logger.ts","../src/config/schema.ts","../src/config/loader.ts","../src/core/ChangelogManager.ts","../src/core/GitManager.ts","../src/utils/security.ts","../src/core/VersionManager.ts"],"sourcesContent":["import type { Ora } from 'ora'\nimport { consola } from 'consola'\nimport ora from 'ora'\n\n// 创建 consola 实例,禁用时间戳\nconst logger = consola.create({\n formatOptions: {\n date: false, // 禁用时间戳\n },\n})\n\nexport function setLevel(level: string): void {\n logger.level = level === 'debug' ? 4 : 3\n}\n\nexport function debug(message: string): void {\n logger.debug(message)\n}\n\nexport function info(message: string): void {\n logger.info(message)\n}\n\nexport function success(message: string): void {\n logger.success(message)\n}\n\nexport function warn(message: string): void {\n logger.warn(message)\n}\n\nexport function error(message: string): void {\n logger.error(message)\n}\n\nexport function dryRun(message: string): void {\n logger.info(`[dry-run] ${message}`)\n}\n\nexport async function withSpinner<T>(\n text: string,\n fn: () => Promise<T>,\n options: { succeedText?: string, failText?: string } = {},\n): Promise<T> {\n const spinner: Ora = ora(text).start()\n\n try {\n const result = await fn()\n spinner.succeed(options.succeedText || text)\n console.log() // 添加空行,确保后续日志换行\n return result\n }\n catch (error) {\n spinner.fail(options.failText || text)\n console.log() // 添加空行\n throw error\n }\n}\n\nexport default {\n setLevel,\n debug,\n info,\n success,\n warn,\n error,\n dryRun,\n withSpinner,\n}\n","import type { Config } from '@/types'\n\nexport const BASE_CONFIG: Config = {\n packagePaths: {\n default: 'package.json',\n },\n defaults: {\n releaseType: 'patch',\n dryRun: false,\n verbose: false,\n allowUncommitted: false,\n npm: false,\n },\n git: {\n commitMessage: 'chore: bump version to {{newVersion}}',\n push: true,\n autoCommit: true,\n tag: true,\n tagPrefix: 'v',\n changelog: true,\n },\n publish: {\n command: 'pnpm publish --access public --no-git-checks',\n skipChecks: true,\n },\n}\n\nexport function validateConfig(config: Config): void {\n const errors: string[] = []\n\n if (config.git?.commitMessage && typeof config.git.commitMessage !== 'string') {\n errors.push('git.commitMessage 必须是字符串')\n }\n\n if (config.git?.tagPrefix && typeof config.git.tagPrefix !== 'string') {\n errors.push('git.tagPrefix 必须是字符串')\n }\n\n if (errors.length > 0) {\n throw new Error(`配置错误:\\n${errors.join('\\n')}`)\n }\n}\n\nexport function isValidConfig(config: Config): boolean {\n return (\n config\n && config.packagePaths\n && typeof config.packagePaths === 'object'\n && Object.keys(config.packagePaths).length > 0\n )\n}\n","import type { Config } from '@/types'\nimport { readFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { join, resolve } from 'node:path'\nimport logger from '@/utils/logger'\nimport { BASE_CONFIG, isValidConfig } from './schema'\n\n/**\n * 配置缓存 - 避免重复读取和解析配置文件\n * Key: 项目根目录的绝对路径\n * Value: 配置对象\n */\nconst configCache = new Map<string, Config>()\n\n/**\n * 清除配置缓存\n * @param rootDir 可选,指定要清除的项目目录,不传则清除所有缓存\n */\nexport function clearConfigCache(rootDir?: string): void {\n if (rootDir) {\n const cacheKey = resolve(rootDir)\n configCache.delete(cacheKey)\n logger.debug(`已清除配置缓存: ${cacheKey}`)\n }\n else {\n configCache.clear()\n logger.debug('已清除所有配置缓存')\n }\n}\n\n/**\n * 获取缓存的配置\n * @param rootDir 项目根目录\n * @returns 缓存的配置,如果不存在则返回 null\n */\nfunction getCachedConfig(rootDir: string): Config | null {\n const cacheKey = resolve(rootDir)\n return configCache.get(cacheKey) || null\n}\n\n/**\n * 设置配置缓存\n * @param rootDir 项目根目录\n * @param config 配置对象\n */\nfunction setCachedConfig(rootDir: string, config: Config): void {\n const cacheKey = resolve(rootDir)\n configCache.set(cacheKey, config)\n logger.debug(`已缓存配置: ${cacheKey}`)\n}\n\nfunction removeJsoncComments(jsoncString: string): string {\n let cleanString = jsoncString.replace(/\\/\\/.*$/gm, '')\n cleanString = cleanString.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n return cleanString\n}\n\nfunction tryParseYaml(yamlString: string): Record<string, any> | null {\n try {\n const result: Record<string, any> = {}\n const lines = yamlString.split('\\n')\n\n for (let line of lines) {\n const commentIndex = line.indexOf('#')\n if (commentIndex !== -1) {\n line = line.substring(0, commentIndex).trim()\n }\n\n line = line.trim()\n if (line) {\n const colonIndex = line.indexOf(':')\n if (colonIndex > 0) {\n const keyPath = line.substring(0, colonIndex).trim()\n const valueStr = line.substring(colonIndex + 1).trim()\n let value: any = valueStr\n\n if (value === 'true') {\n value = true\n }\n else if (value === 'false') {\n value = false\n }\n else if (value === 'null') {\n value = null\n }\n else if (!Number.isNaN(Number(value)) && value !== '') {\n value = Number(value)\n }\n else if (value.startsWith('{') || value.startsWith('[')) {\n try {\n value = JSON.parse(value)\n }\n catch {\n // keep original value\n }\n }\n\n if (keyPath.includes('.')) {\n const parts = keyPath.split('.')\n let current: any = result\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (!current[part])\n current[part] = {}\n current = current[part]\n }\n current[parts[parts.length - 1]] = value\n }\n else {\n result[keyPath] = value\n }\n }\n }\n }\n\n return result\n }\n catch {\n return null\n }\n}\n\nfunction tryParseToml(tomlString: string): Record<string, any> | null {\n try {\n const result: Record<string, any> = {}\n const lines = tomlString.split('\\n')\n\n for (let line of lines) {\n const commentIndex = line.indexOf('#')\n if (commentIndex !== -1) {\n line = line.substring(0, commentIndex).trim()\n }\n\n line = line.trim()\n if (line) {\n const equalsIndex = line.indexOf('=')\n if (equalsIndex > 0) {\n const keyPath = line.substring(0, equalsIndex).trim()\n const valueStr = line.substring(equalsIndex + 1).trim()\n let value: any = valueStr\n\n if (\n (value.startsWith('\"') && value.endsWith('\"'))\n || (value.startsWith('\\'') && value.endsWith('\\''))\n ) {\n value = value.slice(1, -1)\n }\n\n if (value === 'true') {\n value = true\n }\n else if (value === 'false') {\n value = false\n }\n else if (value === 'null') {\n value = null\n }\n else if (!Number.isNaN(Number(value)) && value !== '') {\n value = Number(value)\n }\n else if (value.startsWith('{') || value.startsWith('[')) {\n try {\n value = JSON.parse(value)\n }\n catch {\n // keep original value\n }\n }\n\n if (keyPath.includes('.')) {\n const parts = keyPath.split('.')\n let current: any = result\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (!current[part])\n current[part] = {}\n current = current[part]\n }\n current[parts[parts.length - 1]] = value\n }\n else {\n result[keyPath] = value\n }\n }\n }\n }\n\n return result\n }\n catch {\n return null\n }\n}\n\ninterface ConfigParser {\n parse: (content: string, configPath: string) => Partial<Config> | null\n}\n\nconst parsers: Record<string, ConfigParser> = {\n json: {\n parse(content: string, configPath: string): Partial<Config> | null {\n let jsonContent = content\n if (configPath.endsWith('.jsonc')) {\n jsonContent = removeJsoncComments(content)\n }\n\n try {\n const parsedConfig = JSON.parse(jsonContent)\n if (configPath.includes('package.json')) {\n return parsedConfig.mbump || parsedConfig.mvbump || parsedConfig.bump || null\n }\n return parsedConfig\n }\n catch {\n return null\n }\n },\n },\n yaml: {\n parse(content: string): Partial<Config> | null {\n return tryParseYaml(content)\n },\n },\n toml: {\n parse(content: string): Partial<Config> | null {\n return tryParseToml(content)\n },\n },\n js: {\n parse(_: string, configPath: string): Partial<Config> | null {\n try {\n const require = createRequire(import.meta.url)\n const jsModule = require(configPath)\n return jsModule.default || jsModule\n }\n catch {\n return null\n }\n },\n },\n}\n\nfunction getFileExtension(path: string): string {\n const ext = path.split('.').pop()?.toLowerCase()\n if (ext === 'yml')\n return 'yaml'\n if (ext === 'cjs' || ext === 'mjs' || ext === 'ts' || ext === 'js')\n return 'js'\n if (ext === 'jsonc')\n return 'json'\n return ext || ''\n}\n\nasync function loadConfigAsyncImpl(rootDir: string): Promise<{ config: Partial<Config>, path: string | null }> {\n // 定义配置文件优先级列表(从高到低)\n const configPaths = [\n // TypeScript 配置文件(需要 tsx 支持)\n join(rootDir, '.mbump.config.ts'),\n join(rootDir, '.zbump.config.ts'),\n // ES Module 配置文件(.mjs 和 .js with export default)\n join(rootDir, '.mbump.config.mjs'),\n join(rootDir, '.zbump.config.mjs'),\n join(rootDir, '.mbump.config.js'),\n join(rootDir, '.zbump.config.js'),\n // CommonJS 配置文件\n join(rootDir, '.mbump.config.cjs'),\n join(rootDir, '.zbump.config.cjs'),\n // JSON 格式配置文件\n join(rootDir, '.mbump.config.json'),\n join(rootDir, '.zbump.config.json'),\n join(rootDir, '.mbump.config.jsonc'),\n join(rootDir, '.zbump.config.jsonc'),\n // YAML 格式配置文件\n join(rootDir, '.mbump.config.yaml'),\n join(rootDir, '.zbump.config.yaml'),\n join(rootDir, '.mbump.config.yml'),\n join(rootDir, '.zbump.config.yml'),\n // TOML 格式配置文件\n join(rootDir, '.mbump.config.toml'),\n join(rootDir, '.zbump.config.toml'),\n // package.json 中的配置\n join(rootDir, 'package.json'),\n ]\n\n for (const configPath of configPaths) {\n try {\n const ext = getFileExtension(configPath)\n\n // 处理 JavaScript/TypeScript 类型的配置文件\n if (ext === 'js') {\n const absPath = resolve(rootDir, configPath)\n let config: any\n\n try {\n if (configPath.endsWith('.ts')) {\n // TypeScript 配置文件:使用 tsx 注册器\n const require = createRequire(import.meta.url)\n require('tsx')\n const tsModule = require(absPath)\n config = tsModule.default || tsModule\n }\n else if (configPath.endsWith('.mjs')) {\n // ES Module (.mjs):使用动态 import\n const jsModule = await import(`file://${absPath}`)\n config = jsModule.default || jsModule\n }\n else if (configPath.endsWith('.js')) {\n // .js 文件:优先尝试 ES Module,失败后尝试 CommonJS\n try {\n const jsModule = await import(`file://${absPath}`)\n config = jsModule.default || jsModule\n }\n catch {\n // 如果 ES Module 导入失败,尝试 CommonJS\n const require = createRequire(import.meta.url)\n const cjsModule = require(absPath)\n config = cjsModule.default || cjsModule\n }\n }\n else if (configPath.endsWith('.cjs')) {\n // CommonJS (.cjs):使用 require\n const require = createRequire(import.meta.url)\n const cjsModule = require(absPath)\n config = cjsModule.default || cjsModule\n }\n\n // 如果导出的是函数,则调用它获取配置\n if (typeof config === 'function') {\n config = config()\n }\n\n if (config && typeof config === 'object') {\n return { config, path: configPath }\n }\n }\n catch {\n // 记录错误但继续尝试下一个配置文件\n continue\n }\n }\n else {\n // 处理非 JS 类型的配置文件(JSON, YAML, TOML)\n const content = readFileSync(configPath, 'utf8')\n const parser = parsers[ext]\n if (parser) {\n const config = parser.parse(content, configPath)\n if (config && typeof config === 'object') {\n return { config, path: configPath }\n }\n }\n }\n }\n catch {\n // 文件不存在或读取失败,继续尝试下一个\n continue\n }\n }\n\n return { config: {}, path: null }\n}\n\nfunction loadConfigSyncImpl(rootDir: string): { config: Partial<Config>, path: string | null } {\n // 定义配置文件优先级列表(从高到低)\n // 注意:同步加载不支持 .ts 和 .mjs(因为它们需要异步导入)\n const configPaths = [\n // CommonJS 配置文件(优先)\n join(rootDir, '.mbump.config.cjs'),\n join(rootDir, '.zbump.config.cjs'),\n // JSON 格式配置文件\n join(rootDir, '.mbump.config.json'),\n join(rootDir, '.zbump.config.json'),\n join(rootDir, '.mbump.config.jsonc'),\n join(rootDir, '.zbump.config.jsonc'),\n // YAML 格式配置文件\n join(rootDir, '.mbump.config.yaml'),\n join(rootDir, '.zbump.config.yaml'),\n join(rootDir, '.mbump.config.yml'),\n join(rootDir, '.zbump.config.yml'),\n // TOML 格式配置文件\n join(rootDir, '.mbump.config.toml'),\n join(rootDir, '.zbump.config.toml'),\n // CommonJS .js 文件(可能包含 ES Module,会尝试兼容处理)\n join(rootDir, '.mbump.config.js'),\n join(rootDir, '.zbump.config.js'),\n // package.json 中的配置\n join(rootDir, 'package.json'),\n ]\n\n for (const configPath of configPaths) {\n try {\n const ext = getFileExtension(configPath)\n\n // 处理 JavaScript 类型的配置文件\n if (ext === 'js') {\n try {\n const require = createRequire(import.meta.url)\n const jsModule = require(configPath)\n let config = jsModule.default || jsModule\n\n // 如果导出的是函数,则调用它获取配置\n if (typeof config === 'function') {\n config = config()\n }\n\n if (config && typeof config === 'object') {\n return { config, path: configPath }\n }\n }\n catch {\n // 加载失败,继续尝试下一个配置文件\n continue\n }\n }\n else {\n // 处理非 JS 类型的配置文件(JSON, YAML, TOML)\n const content = readFileSync(configPath, 'utf8')\n const parser = parsers[ext]\n if (parser) {\n const config = parser.parse(content, configPath)\n if (config && typeof config === 'object') {\n return { config, path: configPath }\n }\n }\n }\n }\n catch {\n // 文件不存在或读取失败,继续尝试下一个\n continue\n }\n }\n\n return { config: {}, path: null }\n}\n\nfunction mergeConfig(userConfig: Partial<Config>, rootDir: string): Config {\n const userPackagePaths = userConfig?.packagePaths\n const hasUserPackagePaths = userPackagePaths && Object.keys(userPackagePaths).length > 0\n\n const mergedConfig: Config = {\n ...BASE_CONFIG,\n ...(userConfig || {}),\n packagePaths: hasUserPackagePaths\n ? { ...BASE_CONFIG.packagePaths, ...userPackagePaths }\n : BASE_CONFIG.packagePaths,\n defaults: {\n ...BASE_CONFIG.defaults,\n ...(userConfig?.defaults || {}),\n },\n git: {\n ...BASE_CONFIG.git,\n ...(userConfig?.git || {}),\n },\n publish: {\n ...BASE_CONFIG.publish,\n ...(userConfig?.publish || {}),\n },\n }\n\n if (!isValidConfig(mergedConfig)) {\n throw new Error(\n '配置无效:未找到有效的包路径配置\\n'\n + '请创建配置文件并添加至少一个包路径,例如:\\n'\n + '```\\n'\n + 'packagePaths: {\\n'\n + ' components: \\'packages/components/package.json\\',\\n'\n + ' plugins: \\'packages/plugins/package.json\\'\\n'\n + '}\\n'\n + '```',\n )\n }\n\n const resolvedPackagePaths: Record<string, string> = {}\n for (const [name, path] of Object.entries(mergedConfig.packagePaths)) {\n if (path && typeof path === 'string' && !path.startsWith('/') && !/^[a-z]:\\\\/i.test(path)) {\n resolvedPackagePaths[name] = join(rootDir, path)\n }\n else {\n resolvedPackagePaths[name] = path\n }\n }\n mergedConfig.packagePaths = resolvedPackagePaths\n\n return mergedConfig\n}\n\nexport async function loadConfigAsync(rootDir: string): Promise<Config> {\n // 检查缓存\n const cached = getCachedConfig(rootDir)\n if (cached) {\n logger.debug('使用缓存的配置')\n return cached\n }\n\n const { config: userConfig, path: usedConfigPath } = await loadConfigAsyncImpl(rootDir)\n\n if (usedConfigPath) {\n logger.success(`配置加载完成 (配置文件: ${usedConfigPath})`)\n }\n else {\n logger.warn('未找到配置文件,将使用默认配置')\n }\n\n const mergedConfig = mergeConfig(userConfig, rootDir)\n mergedConfig.usedConfigPath = usedConfigPath\n\n // 设置缓存\n setCachedConfig(rootDir, mergedConfig)\n\n return mergedConfig\n}\n\nexport function loadConfig(rootDir: string): Config {\n // 检查缓存\n const cached = getCachedConfig(rootDir)\n if (cached) {\n logger.debug('使用缓存的配置')\n return cached\n }\n\n const { config: userConfig, path: usedConfigPath } = loadConfigSyncImpl(rootDir)\n\n if (usedConfigPath) {\n logger.success(`配置加载完成 (配置文件: ${usedConfigPath})`)\n }\n else {\n logger.warn('未找到配置文件,将使用默认配置')\n }\n\n const mergedConfig = mergeConfig(userConfig, rootDir)\n mergedConfig.usedConfigPath = usedConfigPath\n\n // 设置缓存\n setCachedConfig(rootDir, mergedConfig)\n\n return mergedConfig\n}\n\nexport default loadConfig\n","import type { ChangelogCommit, ChangelogTypeConfig } from '@/types'\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs'\n\nexport const TYPE_CONFIG: Record<string, ChangelogTypeConfig> = {\n feat: { title: '🚀 新增功能', emoji: '🚀', color: 'green' },\n feature: { title: '🚀 新增功能', emoji: '🚀', color: 'green' },\n fix: { title: '🩹 缺陷修复', emoji: '🩹', color: 'red' },\n bugfix: { title: '🩹 缺陷修复', emoji: '🩹', color: 'red' },\n perf: { title: '🔥 性能优化', emoji: '🔥', color: 'yellow' },\n performance: { title: '🔥 性能优化', emoji: '🔥', color: 'yellow' },\n refactor: { title: '♻️ 代码重构', emoji: '♻️', color: 'cyan' },\n docs: { title: '📝 文档更新', emoji: '📝', color: 'blue' },\n style: { title: '💄 代码格式', emoji: '💄', color: 'white' },\n chore: { title: '🔧 工具变更', emoji: '🔧', color: 'gray' },\n build: { title: '📦 构建变更', emoji: '📦', color: 'magenta' },\n ci: { title: '👷 CI 变更', emoji: '👷', color: 'cyan' },\n test: { title: '✅ 测试更新', emoji: '✅', color: 'green' },\n revert: { title: '⏪ 回滚提交', emoji: '⏪', color: 'red' },\n breaking: { title: '💥 破坏性变更', emoji: '💥', color: 'red' },\n break: { title: '💥 破坏性变更', emoji: '💥', color: 'red' },\n}\n\nexport class ChangelogManager {\n private changelogPath: string\n\n constructor(rootDir: string) {\n this.changelogPath = `${rootDir}/CHANGELOG.md`\n }\n\n getTypeConfig(message: string): ChangelogTypeConfig {\n const match = message.match(/^(\\w+)(?:\\(([^)]+)\\))?:\\s*(.+)$/)\n if (match) {\n const [, type] = match\n return TYPE_CONFIG[type.toLowerCase()] || {\n title: '📦 其他变更',\n emoji: '📦',\n color: 'gray',\n }\n }\n return { title: '📦 其他变更', emoji: '📦', color: 'gray' }\n }\n\n formatFileNames(files: string[]): string[] {\n return files.map((f) => {\n const parts = f.split('/')\n return parts[parts.length - 1]\n })\n }\n\n detectChangelogFormat(content: string) {\n const lines = content.split('\\n')\n\n for (const line of lines) {\n if (line.startsWith('## [') || line.startsWith('## Version')) {\n return {\n hasHeader: true,\n titlePrefix: line.startsWith('## [') ? '## [' : '## ',\n usesBrackets: line.startsWith('## ['),\n sectionLevel: '###',\n }\n }\n }\n\n return {\n hasHeader: false,\n titlePrefix: '## [',\n usesBrackets: true,\n sectionLevel: '###',\n }\n }\n\n async updateChangelog(newVersion: string, commits: ChangelogCommit[], packageName?: string): Promise<void> {\n const today = new Date().toISOString().split('T')[0]\n\n // 构建版本标题:如果有包名,使用 {package-name}@{version} 格式\n const versionTitle = packageName ? `${packageName}@${newVersion}` : newVersion\n\n const categorized: Record<\n string,\n { config: ChangelogTypeConfig, items: { message: string, files: string[] }[] }\n > = {}\n\n for (const { message, files } of commits) {\n const typeConfig = this.getTypeConfig(message)\n const typeKey = typeConfig.title\n\n if (!categorized[typeKey]) {\n categorized[typeKey] = { config: typeConfig, items: [] }\n }\n\n const fileNames = this.formatFileNames(files)\n const fileTag = fileNames.length > 0 ? ` (${fileNames.join(', ')})` : ''\n\n categorized[typeKey].items.push({\n message: message + fileTag,\n files,\n })\n }\n\n if (!existsSync(this.changelogPath)) {\n let content = `# 更新日志 (Changelog)\\n\\n本项目的所有重要变更都将记录在此文件中。\\n\\n格式遵循 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\\n本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。\\n\\n`\n content += `## [${versionTitle}] - ${today}\\n\\n`\n\n const sortedCategories = Object.values(categorized).sort((a, b) => {\n const order = ['🚀', '🩹', '🔥', '♻️', '📝', '💄', '🔧', '📦', '👷', '✅', '⏪', '💥']\n return order.indexOf(a.config.emoji) - order.indexOf(b.config.emoji)\n })\n\n for (const category of sortedCategories) {\n content += `${category.config.title}\\n\\n`\n for (const item of category.items) {\n content += `- ${item.message}\\n`\n }\n content += '\\n'\n }\n\n await writeFileSync(this.changelogPath, content, 'utf-8')\n return\n }\n\n const existingContent = await readFileSync(this.changelogPath, 'utf-8')\n const format = this.detectChangelogFormat(existingContent)\n\n let header: string\n if (format.usesBrackets) {\n header = `${format.titlePrefix}${versionTitle}] - ${today}\\n\\n`\n }\n else {\n header = `${format.titlePrefix}${versionTitle} - ${today}\\n\\n`\n }\n\n const sortedCategories = Object.values(categorized).sort((a, b) => {\n const order = ['🚀', '🩹', '🔥', '♻️', '📝', '💄', '🔧', '📦', '👷', '✅', '⏪', '💥']\n return order.indexOf(a.config.emoji) - order.indexOf(b.config.emoji)\n })\n\n for (const category of sortedCategories) {\n header += `${category.config.title}\\n\\n`\n for (const item of category.items) {\n header += `- ${item.message}\\n`\n }\n header += '\\n'\n }\n\n if (commits.length === 0) {\n header += `### 待补充\\n\\n`\n }\n\n let newContent: string\n if (format.hasHeader) {\n const firstVersionIndex = existingContent.search(/^##\\s*\\[?/m)\n if (firstVersionIndex !== -1) {\n newContent\n = existingContent.slice(0, firstVersionIndex)\n + header\n + existingContent.slice(firstVersionIndex)\n }\n else {\n newContent = header + existingContent\n }\n }\n else {\n newContent = header + existingContent\n }\n\n await writeFileSync(this.changelogPath, newContent, 'utf-8')\n }\n}\n","import { execSync } from 'node:child_process'\nimport log from '@/utils/logger'\n\nexport class GitManager {\n private rootDir: string\n\n constructor(rootDir: string) {\n this.rootDir = rootDir\n }\n\n hasUncommittedChanges(): boolean {\n try {\n const output = execSync('git status --porcelain', {\n cwd: this.rootDir,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n return output.trim() !== ''\n }\n catch {\n return false\n }\n }\n\n getLastTag(): string | null {\n try {\n const output = execSync('git describe --tags --abbrev=0', {\n cwd: this.rootDir,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n return output.trim() || null\n }\n catch {\n return null\n }\n }\n\n getCommitsSinceLastTag(): { message: string, files: string[] }[] {\n try {\n const lastTag = this.getLastTag()\n const range = lastTag ? `${lastTag}..HEAD` : '--max-count=50'\n\n // 使用 --format 和 --name-only 同时获取 commit message 和文件列表\n const output = execSync(\n `git log ${range} --format=\"COMMIT_START%n%s\" --name-only`,\n {\n cwd: this.rootDir,\n encoding: 'utf8',\n stdio: 'pipe',\n },\n )\n\n const commits: { message: string, files: string[] }[] = []\n const blocks = output.split('COMMIT_START').filter(Boolean)\n\n for (const block of blocks) {\n const lines = block.trim().split('\\n')\n if (lines.length === 0)\n continue\n\n // 第一行是 commit message(去掉空行)\n const messageLines = lines.filter(line => line.trim())\n if (messageLines.length === 0)\n continue\n\n const message = messageLines[0].trim()\n\n // 其余行是文件列表(跳过空行和 message 行)\n const files = lines\n .slice(1)\n .map(f => f.trim())\n .filter(f => f && !f.startsWith('COMMIT_START'))\n\n commits.push({ message, files })\n }\n\n return commits\n }\n catch {\n return []\n }\n }\n\n checkVersionExists(version: string, tagPrefix: string = 'v'): boolean {\n try {\n execSync(`git rev-parse --verify ${tagPrefix}${version}`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n return true\n }\n catch {\n return false\n }\n }\n\n addFiles(files: string[]): void {\n try {\n execSync(`git add ${files.join(' ')}`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n }\n catch (error) {\n throw new Error(`Git add failed: ${(error as Error).message}`)\n }\n }\n\n commit(message: string): void {\n try {\n execSync(`git commit -m \"${message}\"`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.debug(`Git commit: ${message}`)\n }\n catch (error) {\n throw new Error(`Git commit failed: ${(error as Error).message}`)\n }\n }\n\n createTag(version: string, tagPrefix: string = 'v'): void {\n try {\n const tagName = `${tagPrefix}${version}`\n execSync(`git tag -a ${tagName} -m \"Release ${tagName}\"`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.success(`已创建 tag: ${tagName}`)\n }\n catch (error) {\n throw new Error(`创建 Tag 失败: ${(error as Error).message}`)\n }\n }\n\n push(includeTags: boolean = true): void {\n try {\n execSync('git push', {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.debug('Git push')\n\n if (includeTags) {\n execSync('git push --tags', {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.success('已推送 tags')\n }\n }\n catch (error) {\n throw new Error(`Git push failed: ${(error as Error).message}`)\n }\n }\n\n commitAndPush(message: string, push: boolean = true, createTag: boolean = false, tagVersion?: string, tagPrefix: string = 'v'): void {\n try {\n execSync('git config --local core.autocrlf false', {\n cwd: this.rootDir,\n stdio: 'ignore',\n })\n }\n catch {\n log.warn('Failed to set git config')\n }\n\n this.addFiles(['-u'])\n this.commit(message)\n\n if (createTag && tagVersion) {\n this.createTag(tagVersion, tagPrefix)\n }\n\n if (push) {\n try {\n this.push(createTag)\n }\n catch (error) {\n log.warn(`Git push failed: ${(error as Error).message}`)\n }\n }\n }\n}\n","import { resolve } from 'node:path'\n\nexport function validatePath(path: string, rootDir: string): boolean {\n const resolvedPath = resolve(path)\n return resolvedPath.startsWith(rootDir)\n}\n\nexport function validateCommand(command: string): boolean {\n const dangerousPatterns = [\n /;\\s*[a-z0-9]/i,\n /\\|\\|\\s*[a-z0-9]/i,\n /&&\\s*[a-z0-9]/i,\n /\\$\\(.*\\)/,\n /`.*`/,\n /\\|\\s*[a-z0-9]/i,\n ]\n\n return !dangerousPatterns.some(pattern => pattern.test(command))\n}\n\nexport function sanitizeFileName(name: string): string {\n return name.replace(/[<>:\"/\\\\|?*]/g, '_')\n}\n","import type { Config, GitConfig, PackageInfo, PackagePaths, PublishConfig, ReleaseType, UpdateOptions, UpdateResult, VersionManagerOptions } from '@/types'\nimport { readFileSync, writeFileSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport process from 'node:process'\nimport semver from 'semver'\nimport { loadConfig } from '@/config/loader'\nimport log from '@/utils/logger'\nimport { validateCommand, validatePath } from '@/utils/security'\nimport { ChangelogManager } from './ChangelogManager'\nimport { GitManager } from './GitManager'\n\nexport class VersionManager {\n private config: Config\n private rootDir: string\n private packagePaths: PackagePaths\n private publishConfig: PublishConfig\n private gitConfig: GitConfig\n private gitPush: boolean\n private packageCache: Map<string, PackageInfo> = new Map()\n private gitManager: GitManager\n private changelogManager: ChangelogManager\n\n constructor(options: VersionManagerOptions = {}) {\n const { packagePaths, configPath, config, rootDir = process.cwd() } = options\n\n this.config = config || (configPath ? loadConfig(dirname(configPath)) : loadConfig(rootDir))\n this.rootDir = rootDir\n this.packagePaths = packagePaths || this.config.packagePaths\n this.publishConfig = this.config.publish || {}\n this.gitConfig = this.config.git || {}\n this.gitPush = this.gitConfig.push !== false\n this.gitManager = new GitManager(rootDir)\n this.changelogManager = new ChangelogManager(rootDir)\n\n if (!this.packagePaths || typeof this.packagePaths !== 'object' || Object.keys(this.packagePaths).length === 0) {\n throw new Error('配置错误:未找到有效的包路径配置')\n }\n\n this._resolvePackagePaths(rootDir)\n\n // 性能优化:预加载所有包信息到缓存\n this._preloadPackageCache()\n }\n\n /**\n * 预加载所有包信息到缓存,避免后续重复读取文件\n */\n private _preloadPackageCache(): void {\n for (const pkgPath of Object.values(this.packagePaths)) {\n try {\n this.getPackageInfo(pkgPath)\n }\n catch (error) {\n // 忽略预加载失败,在实际使用时再处理\n log.debug(`预加载包信息失败 ${pkgPath}: ${(error as Error).message}`)\n }\n }\n log.debug(`已预加载 ${this.packageCache.size} 个包的信息到缓存`)\n }\n\n /**\n * 清除包信息缓存\n * @param pkgPath 可选,指定要清除的包路径,不传则清除所有缓存\n */\n clearPackageCache(pkgPath?: string): void {\n if (pkgPath) {\n this.packageCache.delete(pkgPath)\n log.debug(`已清除包缓存: ${pkgPath}`)\n }\n else {\n this.packageCache.clear()\n log.debug('已清除所有包缓存')\n }\n }\n\n /**\n * 刷新指定包的缓存(重新从文件读取)\n * @param pkgPath 包的路径\n */\n refreshPackageCache(pkgPath: string): PackageInfo {\n this.packageCache.delete(pkgPath)\n return this.getPackageInfo(pkgPath)\n }\n\n /**\n * 获取缓存统计信息\n */\n getCacheStats(): { size: number, packages: string[] } {\n return {\n size: this.packageCache.size,\n packages: Array.from(this.packageCache.keys()),\n }\n }\n\n private _resolvePackagePaths(rootDir: string): void {\n for (const [name, path] of Object.entries(this.packagePaths)) {\n if (path && typeof path === 'string' && !path.startsWith('/') && !/^[a-z]:\\\\/i.test(path)) {\n this.packagePaths[name] = `${rootDir}/${path}`\n }\n }\n }\n\n async updateVersion(pkgName: string, releaseType: ReleaseType = 'patch', options: UpdateOptions = {}): Promise<UpdateResult> {\n const {\n dryRun = false,\n verbose = false,\n packagePaths = this.packagePaths,\n customVersion = null,\n autoCommit = this.gitConfig.autoCommit !== false,\n npm = false,\n changelog = this.gitConfig.changelog !== false,\n tag = this.gitConfig.tag !== false,\n tagPrefix = this.gitConfig.tagPrefix || 'v',\n isBatchMode = false, // 默认不是批量模式\n } = options\n\n const result: UpdateResult = {\n success: false,\n updatedPackages: [],\n publishedPackages: [],\n error: null,\n }\n\n return log.withSpinner(\n `正在更新${pkgName === 'all' ? '所有包' : `包${pkgName}`}的版本...`,\n\n async () => {\n try {\n const targets = pkgName === 'all' ? Object.values(packagePaths) : [packagePaths[pkgName]]\n\n if (!targets.length || targets.some(path => !path)) {\n throw new Error(`无效的包名: ${pkgName}`)\n }\n\n // 检查版本是否存在\n let finalVersion: string | null = null\n for (const pkgPath of targets) {\n const pkg = this.getPackageInfo(pkgPath)\n let newVersion: string | null = null\n\n if (customVersion) {\n if (!semver.valid(customVersion)) {\n throw new Error(`无效的自定义版本号: ${customVersion}`)\n }\n newVersion = customVersion\n }\n else {\n try {\n switch (releaseType) {\n case 'major':\n case 'minor':\n case 'patch':\n newVersion = semver.inc(pkg.version, releaseType)\n break\n case 'next':\n newVersion = semver.inc(pkg.version, 'patch')\n break\n case 'pre-patch':\n if (semver.prerelease(pkg.version)) {\n newVersion = semver.inc(pkg.version, 'prerelease')\n }\n else {\n newVersion = semver.inc(pkg.version, 'prepatch', 'beta')\n }\n break\n case 'pre-minor':\n if (semver.prerelease(pkg.version)) {\n const currentMinor = semver.minor(pkg.version)\n const potentialVersion = semver.inc(pkg.version, 'preminor', 'beta')\n if (potentialVersion && semver.minor(potentialVersion) > currentMinor) {\n newVersion = potentialVersion\n }\n else {\n newVersion = semver.inc(pkg.version, 'prerelease')\n }\n }\n else {\n newVersion = semver.inc(pkg.version, 'preminor', 'beta')\n }\n break\n case 'pre-major':\n if (semver.prerelease(pkg.version)) {\n const currentMajor = semver.major(pkg.version)\n const potentialVersion = semver.inc(pkg.version, 'premajor', 'beta')\n if (potentialVersion && semver.major(potentialVersion) > currentMajor) {\n newVersion = potentialVersion\n }\n else {\n newVersion = semver.inc(pkg.version, 'prerelease')\n }\n }\n else {\n newVersion = semver.inc(pkg.version, 'premajor', 'beta')\n }\n break\n case 'as-is':\n newVersion = pkg.version\n break\n case 'conventional':\n newVersion = semver.inc(pkg.version, 'patch')\n break\n default:\n throw new Error(`不支持的版本类型: ${releaseType}`)\n }\n }\n catch (error: any) {\n throw new Error(`版本计算失败: ${error.message}`)\n }\n }\n\n if (!newVersion) {\n throw new Error(`无法计算新版本号,当前版本: ${pkg.version},类型: ${releaseType}`)\n }\n\n // 只在第一个包时检查版本\n if (!finalVersion) {\n finalVersion = newVersion\n if (!dryRun && this.gitManager.checkVersionExists(newVersion, tagPrefix)) {\n throw new Error(`版本 ${tagPrefix}${newVersion} 已存在,请使用其他版本`)\n }\n }\n\n if (dryRun) {\n log.dryRun(`将更新 ${pkg.name} 从 v${pkg.version} 到 v${newVersion}`)\n }\n else {\n const updatedPkg = { ...pkg, version: newVersion }\n this.savePackageInfo(pkgPath, updatedPkg)\n log.info(`已更新 ${pkg.name} 到 v${newVersion}`)\n }\n\n result.updatedPackages.push({\n name: pkg.name,\n oldVersion: pkg.version,\n newVersion,\n })\n }\n\n // 生成CHANGELOG\n // 在批量更新模式时,只有主项目包(default)才生成 CHANGELOG\n const isDefaultPackage = pkgName === 'default' || this.config.packagePaths[pkgName] === 'package.json'\n\n if (!dryRun && changelog && finalVersion) {\n // 如果是批量模式且不是主项目包,跳过 CHANGELOG 生成\n if (isBatchMode && !isDefaultPackage) {\n log.info(`子包 ${pkgName} 跳过 CHANGELOG 生成`)\n }\n else {\n try {\n const commits = this.gitManager.getCommitsSinceLastTag()\n\n // 主项目包不传 packageName(使用 tagPrefix 格式),子包传 packageName(使用 {package-name}@{version} 格式)\n let packageName: string | undefined\n if (!isDefaultPackage) {\n // 子包:获取 package.json 的 name 字段\n const firstPkg = this.getPackageInfo(targets[0])\n packageName = firstPkg.name\n }\n // 主项目包:packageName 为 undefined,ChangelogManager 会直接使用 version\n\n await this.changelogManager.updateChangelog(finalVersion, commits, packageName)\n log.success('已更新 CHANGELOG.md')\n }\n catch (changelogError) {\n log.warn(`CHANGELOG生成失败: ${(changelogError as Error).message}`)\n }\n }\n }\n\n if (!dryRun && npm) {\n for (const pkgPath of targets) {\n const pkg = this.getPackageInfo(pkgPath)\n const pkgDir = dirname(pkgPath)\n log.info(`\\n发布 ${pkg.name}...`)\n\n try {\n const publishCmd = this.publishConfig.command || 'pnpm publish --access public --no-git-checks'\n\n if (!validateCommand(publishCmd)) {\n throw new Error(`不安全的发布命令: ${publishCmd}`)\n }\n\n if (verbose) {\n log.debug(`执行命令: ${publishCmd} (在目录: ${pkgDir})`)\n }\n\n const { execSync } = await import('node:child_process')\n execSync(publishCmd, {\n cwd: pkgDir,\n stdio: 'inherit',\n })\n result.publishedPackages.push(pkg.name)\n }\n catch (e: any) {\n throw new Error(`发布失败 ${pkg.name}: ${e.message}`)\n }\n }\n }\n\n // Git提交和Tag\n if (!dryRun && autoCommit && result.updatedPackages.length > 0) {\n try {\n let commitMessage: string\n const updatedPackage = result.updatedPackages[0]\n const newVersion = updatedPackage.newVersion\n const isDefaultPackage = pkgName === 'default' || this.config.packagePaths[pkgName] === 'package.json'\n\n if (this.gitConfig.commitMessage && this.gitConfig.commitMessage !== 'chore: bump version to {{newVersion}}') {\n commitMessage = this.gitConfig.commitMessage.replace(/\\{\\{newVersion\\}\\}/g, newVersion)\n }\n else if (pkgName === 'all') {\n const versionInfo = result.updatedPackages.map(pkg => `${pkg.name}@${pkg.newVersion}`).join(', ')\n commitMessage = `chore: bump version for all packages\\n\\n${versionInfo}`\n }\n else {\n commitMessage = `chore: bump version for ${pkgName} to v${newVersion}`\n }\n\n // 主项目包使用 {tagPrefix}{version} 格式,子包使用 {package-name}@{version} 格式\n if (isDefaultPackage) {\n // 主项目包:使用配置的 tagPrefix (如 v1.0.1)\n this.gitManager.commitAndPush(commitMessage, this.gitPush, tag, newVersion, tagPrefix)\n }\n else {\n // 子包:创建 {package-name}@{version} 格式的 tag\n const { execSync } = await import('node:child_process')\n\n this.gitManager.addFiles(['-u'])\n this.gitManager.commit(commitMessage)\n\n // 创建 {package-name}@{version} 格式的 tag\n const tagName = `${updatedPackage.name}@${newVersion}`\n try {\n execSync(`git tag -a ${tagName} -m \"Release ${tagName}\"`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.success(`已创建 tag: ${tagName}`)\n }\n catch (tagError) {\n log.warn(`创建 tag ${tagName} 失败: ${(tagError as Error).message}`)\n }\n\n // 推送\n if (this.gitPush) {\n try {\n this.gitManager.push(true)\n }\n catch (pushError) {\n log.warn(`Git push failed: ${(pushError as Error).message}`)\n }\n }\n }\n }\n catch (gitError: any) {\n log.warn(`Git操作失败: ${gitError.message}`)\n }\n }\n\n result.success = true\n return result\n }\n catch (error: any) {\n result.error = error.message\n return result\n }\n },\n {\n succeedText: pkgName === 'all' ? '所有包版本更新完成' : `包 ${pkgName} 版本更新完成`,\n failText: '版本更新失败',\n },\n )\n }\n\n async gitCommitAndPush(\n push: boolean = true,\n updatedPackages?: Array<{ name: string, newVersion: string, pkgKey?: string }>,\n tag: boolean = this.gitConfig.tag !== false,\n tagPrefix: string = this.gitConfig.tagPrefix || 'v',\n ): Promise<void> {\n try {\n const commitMessage = 'chore: bump versions for multiple packages'\n\n // 如果提供了更新的包列表且启用了 tag,则为每个包创建独立的 tag\n if (tag && updatedPackages && updatedPackages.length > 0) {\n // 先提交更改\n this.gitManager.addFiles(['-u'])\n this.gitManager.commit(commitMessage)\n\n // 为每个包创建独立的 tag\n const { execSync } = await import('node:child_process')\n for (const pkg of updatedPackages) {\n let tagName: string\n\n // 通过 pkgKey 判断是否为主项目包\n const isMainPackage = pkg.pkgKey === 'default'\n\n if (isMainPackage) {\n // 主项目包:使用 {tagPrefix}{version} 格式\n tagName = `${tagPrefix}${pkg.newVersion}`\n }\n else {\n // 子包:使用 {package-name}@{version} 格式\n tagName = `${pkg.name}@${pkg.newVersion}`\n }\n\n try {\n execSync(`git tag -a ${tagName} -m \"Release ${tagName}\"`, {\n cwd: this.rootDir,\n stdio: 'pipe',\n })\n log.success(`已创建 tag: ${tagName}`)\n }\n catch (error) {\n log.warn(`创建 tag ${tagName} 失败: ${(error as Error).message}`)\n }\n }\n\n // 推送 commits 和 tags\n if (push) {\n try {\n this.gitManager.push(true)\n }\n catch (error) {\n log.warn(`Git push failed: ${(error as Error).message}`)\n }\n }\n }\n else {\n // 原有逻辑:不创建 tag\n this.gitManager.commitAndPush(commitMessage, push, false)\n }\n }\n catch (error: any) {\n log.warn(`Git操作失败: ${error.message}`)\n }\n }\n\n /**\n * 获取包信息(带缓存)\n * @param pkgPath 包的路径\n * @returns 包信息对象\n */\n getPackageInfo(pkgPath: string): PackageInfo {\n // 首先检查缓存\n const cached = this.packageCache.get(pkgPath)\n if (cached) {\n return cached\n }\n\n // 缓存未命中,从文件读取\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as PackageInfo\n // 写入缓存\n this.packageCache.set(pkgPath, pkg)\n return pkg\n }\n catch (error: any) {\n throw new Error(`读取文件失败 ${pkgPath}: ${error.message}`)\n }\n }\n\n private savePackageInfo(pkgPath: string, pkg: PackageInfo): void {\n if (!validatePath(pkgPath, this.rootDir)) {\n throw new Error(`不安全的文件路径: ${pkgPath}`)\n }\n\n try {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`)\n // 更新缓存\n this.packageCache.set(pkgPath, pkg)\n }\n catch (error: any) {\n throw new Error(`写入文件失败 ${pkgPath}: ${error.message}`)\n }\n }\n\n getPackageVersion(pkgName: string): string | null {\n const pkgPath = this.packagePaths[pkgName]\n if (!pkgPath)\n return null\n\n try {\n const pkg = this.getPackageInfo(pkgPath)\n return pkg.version\n }\n catch {\n return null\n }\n }\n\n isValidVersion(version: string): boolean {\n return semver.valid(version) !== null\n }\n\n getVersionDiff(oldVersion: string, newVersion: string): string | null {\n if (!semver.valid(oldVersion) || !semver.valid(newVersion)) {\n return null\n }\n\n if (semver.major(newVersion) > semver.major(oldVersion))\n return 'major'\n if (semver.minor(newVersion) > semver.minor(oldVersion))\n return 'minor'\n if (semver.patch(newVersion) > semver.patch(oldVersion))\n return 'patch'\n return null\n }\n}\n\nexport default VersionManager\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ //#region rolldown:runtime
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all) __defProp(target, name, {
5
+ get: all[name],
6
+ enumerable: true
7
+ });
8
+ };
9
+
10
+ //#endregion
11
+ export { __export };
package/dist/cli.d.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { o as Config } from "./types-DoXYJODS.js";
1
+ #!/usr/bin/env node
2
+ //#region src/cli/index.d.ts
3
+ declare function showHelp(): void;
2
4
 
3
- //#region src/cli.d.ts
4
- declare function createBaseCli(bumpVersion: (config?: Config) => Promise<any>, version?: string): void;
5
- declare const createCli: () => void;
6
5
  //#endregion
7
- export { createBaseCli, createCli };
6
+ //# sourceMappingURL=index.d.ts.map
7
+
8
+ export { showHelp };
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","names":[],"sources":["../src/cli/index.ts"],"sourcesContent":null,"mappings":";;iBA2KgB,QAAA,CAAA;;;AAAhB"}